Série 3 : Sous-Programmes (Bac TP 2016)

Exercice 1

Dans un tableau d’entiers, l’existence d’au minimum de deux éléments pairs d’une façon consécutive forme ce qu’on appelle une séquence paire.

On se propose d’écrire un programme intitulé Occ_Pair qui permet de remplir un tableau T par N entiers (avec 3≤N≤20) et d’afficher le nombre de séquences paires de ce tableau ainsi que les entiers de chacune de ces séquences.

Exemple :

Pour N=15 et le tableau T suivant :

3 18 6 5 3 4 32 8 9 12 5 10 2 1 8
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
  Séquence 1     Séquence 2       Séquence 3    

Le programme affiche :

Le nombre de séquences paires est 3.
Les séquences d’entiers pairs sont :
18, 6
4, 32, 8
10, 2

Pour cela, on donne l’algorithme du programme principal suivant :

0) Début Occ_Pair
1) Ecrire ("Donner la taille du tableau :"), Lire(N)
2) PROC Remplir(T,N)
3) PROC Afficher(T,N)
4) Fin Occ_Pair

Travail Demandé

  1. Traduire l’algorithme Occ_Pair en un programme Pascal et ajouter les déclarations nécessaires.
  2. Transformer la séquence n°1 en un module en ajoutant les contraintes nécessaires et apporter les modifications nécessaires dans le programme principal.
  3. Développer le module Remplir qui permet de remplir le tableau T par N entiers strictement positifs.
  4. Développer le module Afficher qui permet d’afficher le nombre de séquences d’entiers pairs du tableau T ainsi que les entiers de chacune de ces séquences.

Exemple d'exécution du programme



        

Exercice 2

Le jeu Numbermind est un jeu à deux qui consiste à deviner un numéro de téléphone.

Le principe du jeu est le suivant :

  • Le premier joueur propose une combinaison de 8 chiffres représentant le numéro à deviner.
  • Le deuxième joueur annonce une proposition de 8 chiffres, si cette proposition correspond au numéro à deviner, ce joueur est gagnant sinon on lui affiche sa proposition à laquelle on garde tous les chiffres bien placés et on remplace le reste par des tirets tout en mentionnant les chiffres corrects mais mal placés dans la proposition.
  • On répète l’étape précédente jusqu’à trouver le numéro cherché ou atteindre un nombre d’essais égal à 8.

Pour simuler ce jeu, on donne l’algorithme du programme principal suivant :

0) Début Numbermind
1) Répéter
    Ecrire("Saisir le numéro de téléphone à deviner : ")
    Lire (num)
  Jusqu’à (FN Verif(num))
2) Efface_ecran()
3) Deviner(num)
4) Fin Numbermind

NB : Efface_ecran est une procédure prédéfinie qui permet d’effacer l’écran. Son équivalent en Pascal est: CLRSCR ;

Travail demandé

  1. Traduire l’algorithme Numbermind en un programme Pascal et ajouter les déclarations nécessaires.
  2. Développer le module Verif qui permet de vérifier si le numéro de téléphone proposé est composé uniquement par 8 chiffres.
  3. Développer le module Deviner qui consiste à :
    • vérifier chaque numéro proposé par le deuxième joueur, en gardant les chiffres bien placés et en remplaçant le reste par des tirets tout en mentionnant ceux qui sont correctes mais mal placés dans la proposition et le nombre d’essais qui lui restent.
    • arrêter le jeu une fois que le deuxième joueur propose un numéro identique au numéro à deviner ou bien on atteint un nombre d’essai égal à 8.
    • afficher le message "Bravo, vous avez gagné" si le joueur 2 réussit à deviner le numéro et le message "Désolé, vous avez perdu" s’il ne devine pas le numéro après 8 essais.

Exemple :

Pour le numéro de téléphone à deviner 68456231, le programme affiche :



        

Exercice 3

Dans le but de sécuriser les messages à envoyer, on peut faire appel à une méthode de cryptage.

Une des méthodes utilisées consiste à remplacer chaque lettre du message à crypter par celle qui la suit de p positions dans l'alphabet français, où p désigne le nombre de mots du message.

NB :

  • On suppose que le caractère qui suit la lettre "Z" est le caractère "A" et celui qui suit la lettre "z" est le caractère "a".
  • Le caractère espace ne subit aucune modification.
  • Le code ASCII de la lettre "a" est égal à 97 et celui de la lettre "A" est égal à 65.

Exemple :

Pour le message "Examen Pratique En Informatique"

Etant donné que le message à crypter est formé de 4 mots, pour la lettre alphabétique "E" par exemple, elle sera remplacée par "I" car en ajoutant au code Ascii de "E" qui est 69 la valeur 4, on obtient 73 qui est le code Ascii de "I".

En continuant à appliquer ce principe de codage, le message crypté sera :

"Ibeqir Tvexmuyi Ir Mrjsvqexmuyi"

On se propose d’écrire un programme intitulé Cryptage qui permet de saisir un message M formé uniquement de lettres et d’espaces puis de l’afficher crypté, en utilisant le principe cité ci-dessus.

NB : Le message peut contenir des espaces superflus (inutiles).

Pour cela, on propose l’algorithme du programme principal suivant :

0) Début Cryptage
1) Répéter
    Ecrire("Donner le message à crypter:")
    Lire(M)
  Jusqu’à (FN Valide(M))
2) p ⟵ FN Nbmot(M)
3) Ecrire(FN Crypter(M,p))
4) Fin Cryptage

Travail demandé :

  1. Traduire l’algorithme Cryptage en un programme Pascal et ajouter les déclarations nécessaires.
  2. Transformer la séquence n°1 en un module et apporter les modifications nécessaires dans le programme principal.
  3. Développer le module Valide qui permet de vérifier si le message M est non vide et formé uniquement par des lettres et des espaces.
  4. Développer le module Nbmot qui permet de déterminer le nombre de mots dans le message M à crypter en prenant en considération la possibilité d’existence des espaces superflus (inutiles).
  5. Développer le module Crypter qui permet de crypter un message M en utilisant le principe décrit précédemment.

Exemple d'exécution du programme



        

Exercice 4

Un IBAN ou numéro international de compte bancaire est une variété de caractères alphanumériques qui identifie de façon distincte, le compte d'un client tenu dans une institution bancaire partout dans le monde.

Exemple : TU3830004015870002601171 est un numéro IBAN où :

TU désigne les initiales du pays du client qui est la Tunisie,

38 est la clé IBAN

Le reste des chiffres représente le code RIB du client qui est de longueur constante relativement à un pays donné (20 pour la Tunisie). Sachant que RIB désigne le Relevé d’Identité Bancaire qui permet au titulaire d'un compte bancaire de transmettre ses coordonnées bancaires pour des virements ou des prélèvements.

La clé IBAN est obtenue en utilisant le procédé suivant :

  • Former une chaine ch composée par les deux premières lettres en majuscules du nom du pays du client auxquelles on ajoute "00" à droite.
  • Former un nombre à partir de la chaîne ch en remplaçant chaque lettre par le nombre qui lui correspond selon le tableau suivant :
  • Calculer le reste de la division du nombre obtenu par 97
  • Soustraire de 98 le reste obtenu. Si le résultat comporte un seul chiffre, insérer un zéro à gauche. Le nombre ainsi obtenu est la clé IBAN.

Exemple : Pour un client de la Tunisie, on obtient la chaîne suivante : TU00

En remplaçant T par 29 et U par 30, on obtient le nombre suivant 293000.

La clé IBAN correspondante à ce client est 38 obtenu comme suit : le reste de la division de 293000 par 97 donne 60 en la retranchant de 98 on obtient 98-60=38 qui est la clé IBAN de la Tunisie.

On se propose d’écrire un programme Pascal qui permet de générer un code IBAN à partir des deux premières lettres du nom du pays d’un client et de son code RIB.

Pour cela on donne l’algorithme du programme principal suivant :

0) Début Generation
1) PROC Saisir(Init, RIB)
2) Cle ⟵ FN Cle_IBAN(Init)
3) Ecrire("L’IBAN correspondant est : ", Init+Cle+RIB)
4) Fin Generation

Travail demandé :

  1. Traduire l’algorithme Generation en un programme Pascal et ajouter les déclarations nécessaires.
  2. Développer le module Saisir qui permet de saisir :
    • Deux lettres majuscules qui représentent les initiales du pays.
    • Le RIB qui doit être une suite de chiffres, correspondant au pays du client, de longueur L avec 10≤ L≤ 30.
  3. Développer le module Cle_IBAN qui permet de générer la clé IBAN d’un client en utilisant le procédé décrit précédemment.
  4. Ajouter ce qui est nécessaire au programme de façon à ce qu’il puisse générer plusieurs codes IBAN relativement à un groupe de clients dont le nombre est inconnu à l’avance.