T.P. n°5 : variables indicées          INFORMATIQUE DEUG MIAS+MASS S1     2001-2002

Exercice 1 :
Un brin d'ADN peut être vu comme une chaîne de caractères sur l'alphabet {A,T,G,C}. Chacune de ces lettres correspond à une "base" : Adénine, Thymine, Guanine, Cytosine. Ce brin est associé dans un chromosome à un brin anti-complémentaire qu'on peut retrouver en renversant la chaîne puis en remplacant chaque lettre par son complémentaire : A remplacé par T, T remplacé par A, G remplacé par C, C remplacé par G.

Exemple : S='AAGTTC' renversé donne 'CTTGAA' dont le complémentaire est 'GAACTT'.
Par conséquent, l'anti-complémentaire de 'AAGTTC' est GAACTT.

Construire un programme qui lit un brin d'ADN puis qui, au choix de l'utilisateur :
        -1- affiche la liste des bases qui le compose (n'afficher qu'une seule base par ligne).
        -2- affiche le brin d'ADN complémentaire.
        -3- calcule le nombre d'apparition dans la chaîne d'Adénine, Thymine, Guanine ou Cytosine.
        -4- teste si la chaîne est un palindrome (identique à l'endroit et à l'envers comme par exemple 'radar')

Indications :
  Une chaîne de caractère peut être traitée, en lecture, comme un tableau. Par exemple  S[3] donnera accès au 3ème caractère de la variable chaîne S déclarée par  var s : string[10];. On ne pourra, par contre, pas utiliser  S[15],  ni lire le 5ème caractère de S après une affectation S:='hoho';  ce qui n'aurait pas de sens . Il est aussi fortement déconseillé d'utiliser une affectation du style S[3]:='c'.
  La fonction length(S) donne la taille réelle de la fonction (par exemple, après  S:='hoho'; length(S) donne 4).
Exercice 2
Ecrire un programme qui saisit ou tire au hasard n (n<1000 choisi par l'utilisateur) entiers compris entre 0 et 10 puis qui, au choix de l'utilisateur, affiche :
        -1- la moyenne des éléments de la liste.
        -2- la liste des éléments pairs avec leur rang dans la liste.
        -3- le nombre d'éléments multiples de 3.
        -4- le maximum et le minimum de la liste ainsi que tous les rangs de la liste où ils sont atteints.
Indication : la liste sera déclarée comme un tableau à un indice de 1000 entiers.
Rappel : random(n) retourne au hasard un entiers entre 0 et (n-1).
N.B. Comparer ce travail avec celui de l'exercice 3 du TP n°2...

Exercice 3
Ecrire un programme qui
        - saisit au clavier une suite de chaînes de caractères, la fin de la saisie étant indiquée par une chaîne vide.
        - calcule, à mesure de la saisie, l'effectif cumulé de chaque lettre de l'alphabet (sans distinguer majuscules et minuscules).
        - affiche, à la fin de la saisie, l'effectif de chaque caractère.
        - affiche enfin, avec leurs fréquences, les trois lettres les plus fréquentes (on suppose que les fréquences de lettres sont toutes différentes) sur le modèle suivant :
(repère à ne pas afficher)
<----10--><--7--><---11----><----12---->
caractères  codes  effectifs  fréquences 
   'E'        69       78         15.6%
   'S'        83       44          8.8%
   'A'        65       39          7.8%

Indications :
- Le code d'un caractère c est donné par ORD(c) ; il est compris entre 0 et 255.
ORD('A')=65, ..., ORD('Z')=90, ..., ORD('a')=97, ..., ORD('z')=122.
- Le caractère de code n est donné par CHR(n).
CHR(65)='A', ..., CHR(90)='Z', CHR(97)='a', ..., CHR(122)='z'.
- La majuscule associée au caractère c est donnée par UPCASE(c).
- Une fois le programme au point, tester la commande : a.out < tp5exc3.pas
(a.out est le nom de votre exécutable et tp5exc3.pas le nom du fichier contenant le code source de l'exercice 3, mais vous pouvez choisir d'autres fichiers de texte).

Exercice 4 : pour aller plus loin
1°) Ecrire un programme qui fusionne deux tableaux d'entiers classés par ordre croissant en un troisième tableau classé par ordre croissant.
2°) Ecrire un programme qui donne le même résultat mais à partir de deux tableaux non triés et qui ne seront pas triés.