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.