TP n°6    DEUG MIAS+MASS première annéee   2001-2002   Université de Clermont-Ferrand II

Exercice 1 :
    Ecrire un programme qui affiche par valeurs croissantes tous les nombres entiers entre 1000 et 9999 tels que la somme des deux premiers chiffres soit égale à la somme des deux derniers chiffres du nombre.
        Exemple : 1001, 1010, 1102, ..., 5793, ..., 9999.

Remarque : ce problème sera aisement résolu en utilisant les opérateurs DIV et MOD avec 10 comme diviseur.

Exercice 2 :
    Un tableau, prévu pour 100 nombres entiers maximum, sera rempli de N entiers pris au hasard entre 2 et 15
(N < 100, donné par l'utilisateur).
Ecrire un programme pascal qui permet  :
        - de demander la valeur de N à l'utilisateur avec contrôle,
        - de remplir le tableau de N nombres aléatoires entre 2 et 15,
        - de réaliser :
                soit une permutation circulaire des éléments remplissant le tableau,
                soit une inversion de la partie remplie de ce tableau,
        - d'afficher le tableau obtenu.

Indications
Sur la permutation circulaire :
- à l'exception du dernier élément du tableau, chaque élément doit occuper la case d'indice immédiatement supérieure.
- le dernier élément doit devenir le premier.
Sur l'inversion : par exemple, le tableau (2, 4, 7, 3, 9, 1) devient (1, 9, 3, 7, 4, 2).

Exercice 3 :
Ecrire un programme qui :
    - remplit un tableau de 50 caractères de façon aléatoire,
    - demande à l'utilisateur un caractère et un indice,
    - affiche alors selon le cas :
        "Ce caractère est bien dans la case indiquée"
        ou "Ce caractère n'est pas dans cette case, mais il apparait dans ... autres cases du tableau"
        ou "Ce caractère ne figure pas dans le tableau".

Remarque : le code ASCII de 'a' est 97, celui de 'z' est 122 et pour obtenir le caractère codé par un entier n : CHR(n).

Exercice 4 : Codage d'une lettre
La fonction SUCC(C) où C est de type char retourne le caractère qui suit C dans la liste des caractères rangés selon l'ordre ASCII. La fonction PRED(C) retourne le caractère qui précède C.

1°) Ecrire un programme donnant la transformée d'une lettre majuscule par n permutations circulaires successives. La lettre et la valeur de n est au choix de l'utilisateur et chaque permutation circulaire est faite sur l'ensemble de l'alphabet majuscule :
   A-->B, B-->C, ..., Z-->A

Exemple : pour n=2, A devient C ; pour n=8, A devient I et X devient F, pour n=30, A devient D, ...

2°) Ecrire un programme effectuant la transformation inverse.

Exercice 5 : Codage d'un mot (pour aller un peu plus loin)
    On se propose de coder ou de décoder un message secret constitué d'un mot formé de lettres majuscules. Le code consiste à faire agir sur chaque lettre autant de permutations circulaires qu'il y a de lettres dans le mot.

Ainsi, BONJOUR devient IVUQVBY (7 permutations).

1°) Ecrire un programme qui propose à l'utilisateur de laisser invariant, de coder ou de décoder le mot de son choix.

2°) Modifier ensuite ce programme pour que l'utilisateur puisse effectuer à nouveau un traitement proposé avec le même mot ou recommencer avec de nouvelles données.

Exercice 6 : Pour aller plus loin, codage d'un message
    Un message est constitué de plusieurs mots eux-mêmes formés de lettres et séparés par des espaces. Le codage traite chaque mot séparément selon sa longueur et laisse invariant les espaces séparateurs.

Ainsi : IL FERA BEAU DEMAIN devient KN JIVE FIEY JKSGOT

Modifier le programme de l'exercice précédent afin qu'il puisse traiter un message de plusieurs mots.

N.B. : contrairement à Turbo Pascal, gpc autorise les chaînes de plus de 255 caractères. Choisir cependant une taille maximale raisonnable pour le message.