La lecture en ligne est gratuite
Télécharger

Publications similaires

Vous aimerez aussi

Université de la Réunion
Faculté des Sciences et Technologies
Département de Biochimie et Biologie Moléculaire

Histoire des Sciences et Bioinformatique
(S33BC23)
Algorithmique

TD3

Données :














I. Les variables et les opérateurs

1) Parmi les noms de variables suivant, indiquez ceux qui sont corrects ?

"test"
t_o_to
TOTO
t,ata
TiTi
t?tat
TITi
tAtA
2tutu
tutu1
t&to
t ta
téta
to1t2a4
tatatatatatatatttaatatatatatataatatatattatatatatatatatatataatatatatatatatattatatatatatatatatatattatatatat
atattatatatatattataatatatatatatatatatatatatatttttttttttttttttaaaaaaaaaaaaaaaaaaaaaaaaaaaaaattatatatta
attatatatatatatatattata

Il y a plusieurs règles à respecter pour le nom (l’étiquette) d’une variable :
1- un nom de variable doit toujours commencer par une lettre
2- un nom de variable ne doit pas contenir de caractères spéciaux comme les guillemets, la
plupart des signes de ponctuation, l’espace, le + ou tout autre caractère pouvant être interprété
comme un opérateur ou ayant une signification particulière en pseudo-code.
Cependant, il peut contenir des chiffres et des lettres. Le nombre de caractère n’est pas limité
bien qu’on évitera d’utiliser des noms à rallonge comme le dernier exemple (même si je le
répète ce nom est correct). En effet, le nombre maximal de caractère pourra être imposé par le
langage de programmation utilisé.
t_o_to # le underscore fait partie des caractères spéciaux acceptés.
TOTO
TiTi
TITi
tAtA
tutu1
téta
to1t2a4
tatatatatatatatttaatatatatatataatatatattatatatatatatatatataatatatatatatatattatatatatatatatatatattatatatat
atattatatatatattataatatatatatatatatatatatatatttttttttttttttttaaaaaaaaaaaaaaaaaaaaaaaaaaaaaattatatatta
attatatatatatatatattata

2) Quelle(s) est(sont) la(les) déclaration(s) correcte(s) ?

b,c en string
Variables b en string ET g en booléen
Variable b(,) en matrice
Variable 1test en entier
Variables b, c, b, g en string Variables A & B en booléen

Aucune de ces déclarations n’est correcte !!!
b,c en string # il manque le mot variable pour définir que ce sont des variables.
Variables b en string ET g en booléen # on ne doit pas avoir d’opérateurs quel qu’il soit dans
la déclaration ; pour séparer les noms de variables,
on utilise la virgule. De plus, on ne peut pas avoir
deux types différents de variable sur la même ligne
de déclaration (sauf dans le cas où on sépare les
déclarations par un point-virgule).
Variable b(,) en matrice # on s’attend à ce que la variable b soit un tableau. De plus, le type
matrice n’existe pas.
Variable 1test en entier # ici c’est incorrect à cause du nom de la variable qui doit commencer
par une lettre.
Variables b, c, b, g en string # on ne peut pas s’amuser à définir deux fois la même variable.
Variables A & B en booléen # on ne doit pas avoir d’opérateurs quel qu’il soit dans la
déclaration ; pour séparer les noms de variables, on utilise la ,

3) Quelle(s) est(sont) la(les) assignation(s) correcte(s) ? (Ces assignations sont
indépendantes et on considère que les valeurs des variables ont été assignées au
préalable).

Variables a, b en string
Variables c, d en entier
Variables e en booléen
[…]
a ← 1
a ← c & "1"
d ← b + 2
a ← a & b & a
c ← d / 0
e ← a > d
d ← 1,414
a ← Ccar("1")
b ← Ccar(1) - a
d ← Cnum("1") + c
[…]

En règle générale, on ne pourra pas assigner une valeur d’un certain type de données dans une
variable ayant un autre type. On ne pourra également pas utiliser des opérateurs prévus pour
un type de données pour effectuer des opérations sur des variables d’un autre type. On ne peut
en aucun cas mélangé des variables de type de données différent.
Rappel : Cnum et Ccar permettent de transformer des variables de type string en numérique et
numérique en string respectivement.
a ← a & b & a
d ← Cnum("1") + c

4) Quelles seront les valeurs des variables après l’exécution des instructions suivantes ?

Variables a, b en numérique
Variables c, d en chaîne de caractères Variables e en booléen
DEBUT
c ← "bon"
d ← "jour"
a ← 1
b ← 2
c ← c & c
d ← d
a ← (b + 2) / 4
b ← a
a ← b
e ← a > b
d ← d & c & d & d & Ccar(b)
e ← d > c
FIN

a contiendra la valeur 1
b contiendra la valeur 1
c contiendra la chaîne de caractère « bonbon »
d contiendra la chaîne de caractère « jourbonbonjourjour1 »
e contiendra VRAI # j après b dans l’alphabet.

II. Lecture / écriture et tests

1) Plusieurs erreurs se sont glissées dans cet algorithme. Corrigez les.

Variables b, c en booléen
Variable d en entier
DEBUT
b ← "AUU" > "UUU"
c ← "UAU" == "UUU"
SI b & c ALORS # le & ne peut être utilisé que pour des string et n’est pas un opérateur de
comparaison.
d = 1.5 # ne pas confondre le = mathématique/programmation avec le ← algorithmique.
De plus, la variable d a été déclarée en entier donc on ne peut pas avoir un réel.
SINON "UUU" != "UAU" # ne pas oublier de mettre SINONSI au lieu de SINON lorsqu’on
a une nouvelle condition et de rajouter le ALORS en fin de
ligne.
d = 2.5 # ne pas confondre le = mathématique/programmation avec le ← algorithmique.
De plus, la variable d a été déclarée en entier donc on ne peut pas avoir un réel.
FIN # /!\ fermer le bloc de condition avant de fermer l’algorithme.
FINSI

Variables b, c en booléen
Variable d en numérique
DEBUT
b ← "AUU" > "UUU"
c ← "UAU" == "UUU"
SI b ET c ALORS
d ← 1.5 SINONSI "UUU" != "UAU" ALORS
d ← 2.5
FINSI
FIN

2) Écrivez un algorithme qui demande à l’utilisateur de rentrer un codon et qui permet
d’afficher si ce codon est un codon stop ou pas.

Découpez bien les instructions demandées :
1- demander à l’utilisateur de rentrer un codon
2- vérifier que l’utilisateur a bien rentré un codon, i.e. mot de 3 lettres qui sont une
combinaison des lettres A, U, G et C seulement
3- afficher si ce codon est un codon stop ou pas
Donc dans un premier temps, notre algorithme doit afficher « Entrez un codon » pour que
l’utilisateur sache ce qu’on attend de lui. Il devra ensuite stocker la donnée saisie par
l’utilisateur dans une variable de type string (qu’il faudra déclarer avant).
Dans un deuxième temps, l’algorithme doit tester si la chaîne de caractère saisie par
l’utilisateur correspond bien à un des trois codons stop. Si c’est le cas, l’algorithme affiche «
C’est un codon stop » sinon l’algorithme affiche « Ce n’est pas un codon stop ».

Variable codon en string
Variable bool en booléen
Variable i en numérique
DEBUT
codon ← « »
bool ← Faux
TANTQUE NON bool
ECRIRE « Entrez un codon »
LIRE codon
SI Len(codon) == 3 ALORS
bool ← Vrai
POUR i ← 1 A Len(codon)
SI Trouve(« UAGC », Mid(codon, i, 1)) == 0 ALORS
bool ← Faux
i ← Len(codon)
FINSI
i SUIVANT
FINSI
FINTANTQUE
SI codon == « UAA » OU codon == « UAG » OU codon == « UGA » ALORS
ECRIRE « Ce codon est un codon stop »
SINON
ECRIRE « Ce codon n’est pas un codon stop »
FINSI
FIN

3) Quel serait le résultat de l’algorithme suivant si l’utilisateur rentre les valeurs 2, 3 et 5.
Même question avec les valeurs 4, 3 et 5.

Variables x, y, z en numérique
DEBUT x ← 0
y ← 0
z ← 0
ECRIRE « Rentrez trois nombres »
LIRE x, y, z
SI x > y ALORS
SI y > z ET x > z ALORS
ECRIRE « Les chiffres sont rangés dans l’ordre décroissant »
SINON
ECRIRE « Les chiffres ne sont pas rangés »
FINSI
SINON
SI y < z ET x < y ALORS
ECRIRE « Les chiffres sont rangés dans l’ordre croissant »
SINON
ECRIRE « Les chiffres ne sont pas rangés »
FINSI
FINSI
FIN

er- 2<3<5 donc x < y implique qu’on rentre dans le SINON du 1 SI et y < z donc on rentre
dans le SI juste après le SINON et donc le programme affichera :
« Les chiffres sont rangés dans l’ordre croissant »
er- 4>3 et 4<5 donc x > y implique qu’on rentre dans le 1 SI et x < z donc on rentre dans le
SINON suivant et le programme affichera :
« Les chiffres ne sont pas rangés »

4) Simplifiez l’algorithme précédent.

On peut remarquer dès le début que l’assignation des variables à 0 est inutile puisqu’on va les
écraser par la suite en récupérant les données entrées par l’utilisateur.
On cherche à enlever les redondances comme le fait de faire afficher « Les chiffres ne sont
pas rangés ».
On essaye également de combiner les tests afin de les réduire au minimum (en utilisant des
SINONSI).
Ensuite, on se souvient de son cours de maths et on se rappelle que si x > y et y > z alors on a
forcément x > z donc il est inutile de garder le dernier test.

Variables x, y, z en numérique
DEBUT
ECRIRE « Rentrez trois nombres »
LIRE x, y, z
SI x > y ET y > z ALORS
ECRIRE « Les chiffres sont rangés dans l’ordre décroissant »
SINONSI x < y ET y < z ALORS
ECRIRE « Les chiffres sont rangés dans l’ordre croissant »
SINON
ECRIRE « Les chiffres ne sont pas rangés »
FINSI
FIN
III. Boucles, tableaux et fonctions prédéfinies

1) Comment définit-on un tableau nommé t pouvant contenir 20 caractères ?

Tableau t(19) en string
La définition d’un tableau commence toujours par le mot Tableau, puis le type de données qui
vont être contenues dans le tableau doit être précisé et enfin la valeur de l’indice le plus élevé
dans le tableau (convention pour notre pseudo-code) est indiquée entre parenthèse. Puisque le
er1 indice des tableaux est toujours 0 (pour notre pseudo-code), un tableau de 20 cases aura
comme indice le plus élevé 19.

Pour ce tableau, quelles assignations sont correctes ?

t(« 1 ») ← « test »
t(-1) ← « test2 »
èmet(19) ← t[12] # sachant que la 13 case du tableau contient « 9 »
t(3*5) ← « 12 »
t(20) ← « 0 »
t[1.5] ← « 18 »
t(1.5) ← « 14 »
t(Cnum(t(1))) ← t(10) # sachant que t(1) et t(10) contiennent « 18 » et « 2 », respectivement
t(1,5) ← « 4 »
t(5) ← t(6) / t(7) # sachant que seules les 7 premières cases contiennent des valeurs non nulles

Pour notre pseudo-code, on utilise seulement les parenthèses et pas les crochets pour les
tableaux.
Les indices dans le tableau sont des entiers positifs qui commencent par 0 et qui ne doivent
pas dépasser la valeur du dernier indice définit lors de la déclaration du tableau.
t(3*5) ← « 12 »
t(Cnum(t(1))) ← t(10) sachant que t(1) contient « 18 »

2) Quel sera l’affichage lors de l’exécution de l’algorithme suivant lorsque l’utilisateur
rentre les données dans l’ordre suivant ? Détaillez pas à pas ce qu’il se passe.

3
0
8
A
0.1
T
0.2
C
0.4
U
0.6
C
0.3
G
2 C
3
3
G
2
a
T

Tableau seq() en string
Tableau nb() en numérique # On déclare deux tableaux sans dimensions, l’un contiendra des
données de type string (seq), l’autre de type numérique (nb).
Variables n, nbase, pair en entier # On déclare 3 variables n, nbase et pair de type entier.
DEBUT
POUR n ← 0 A 1 # On rentre dans une boucle POUR qui initialise n à 0 et qui s’arrêtera
quand n sera supérieur à 1
ECRIRE « Entrez un nombre pair (non nul) qui correspond au nombre de bases »
# Le programme affiche :
$ Entrez un nombre pair (non nul) qui correspond au nombre de bases # on demande à
l’utilisateur de rentrer
un nombre pair non
nul.
LIRE nbase # On récupère le nombre saisi par l’utilisateur et on le stocke dans nbase
(nbase = 3).
pair ← Mod(nbase, 2) # On assigne à pair la valeur correspondant au reste de la division
de nbase par 2 ( pair = 1).
SI pair !=0 XOR nbase==0 ALORS # Si la valeur de pair n’est pas 0 ou (exclusif) si la
valeur de nbase est nulle on assigne -1 à n sinon on
assigne 2 à nb ⇒ ici puisque pair est différent de 0 on
va assigner -1 à n (n = -1).
n ← -1
SINON
n ← 1
FINSI
n SUIVANT # On « avance » sur n, i.e. ici on augmente la valeur de 1 (n = 0).
# Puisque la valeur de n ne dépasse pas 1 on reste dans la boucle POUR et donc le
programme affiche :
$ Entrez un nombre pair (non nul) qui correspond au nombre de bases
Comme précédemment on récupère le nombre saisi par l’utilisateur et on le stocke dans
nbase (nbase = 0), puis on teste si ce nombre est pair (Mod(nbase, 2) doit être égal à 0 ; pair
= 0).
Cette fois-ci, pair est bien nul mais nbase aussi donc on assigne la valeur de -1 à n (n = -1).
On avance sur n (n = 0).
Puisque la valeur de n ne dépasse toujours pas 1 on reste dans la boucle POUR et donc le
programme affiche :
$ Entrez un nombre pair (non nul) qui correspond au nombre de bases
On récupère le nombre saisi par l’utilisateur et on le stocke dans nbase (nbase = 8), puis on
teste si ce nombre est pair (pair = 0).
Puisque pair est nul et nbase est différent de 0, on assigne 1 à n (n = 1).
On avance sur n (n = 2).
Puisque n > 1, on sort de cette boucle POUR. REDIM seq(nbase-1), nb(nbase-1) # On redimensionne les tableaux seq() et nb() en allouant
nbase-1 cases.
POUR n ← 1 A nbase # On rentre dans la boucle POUR qui assigne la valeur 1 à n et on
sortira de cette boucle lorsque n aura dépassé la valeur stockée dans
nbase (nbase = 8).
ECRIRE « Entrez la base (A, T, G, C), qui se trouve à la position », n # Le programme
affiche :
$ Entrez la base (A,
T, G, C), qui se
trouve à la position
1
LIRE seq(n-1) # On récupère la saisie de l’utilisateur et on la stocke dans la case n-1 de
seq (n = 1 donc ici la case 0).
SI seq(n-1) != « A » ALORS # On teste si la donnée rentrée par l’utilisateur correspond à
la lettre « A » (seq[0] = A).
SI seq(n-1) != « T » ALORS # Si ce n’est pas le cas, on teste si elle correspond à « T ».
SI seq(n-1) != « G » ALORS # Si ce n’est pas le cas, on teste si elle correspond à « G ».
SI seq(n-1) != « C » ALORS # Si ce n’est pas le cas, on teste si elle correspond à « C »
n ← n-1 # Si ce n’est toujours pas le cas, on assigne la valeur de n-1 à n.
SINON
ECRIRE « Donnez la valeur associée à cette base »
LIRE nb(n-1)
FINSI
SINON
ECRIRE « Donnez la valeur associée à cette base »
LIRE nb(n-1)
FINSI
SINON
ECRIRE « Donnez la valeur associée à cette base »
LIRE nb(n-1)
FINSI
SINON
ECRIRE « Donnez la valeur associée à cette base »
LIRE nb(n-1)
FINSI
# Dans les cas où la donnée correspond à « A », « T », « G » ou « C » alors le programme
affiche :
$ Donnez la valeur associée à cette base
# On récupère la valeur saisie par l’utilisateur dans nb[n-1] (nb[0] = 0.1).
n SUIVANT # On avance sur n (n = 2).
# On reste dans la boucle POUR car n ≤ nbase.
Donc le programme affiche :
$ Entrez la base (A, T, G, C), qui se trouve à la position 2
seq[1] = « T »
$ Donnez la valeur associée à cette base
nb[1] = 0.2
On avance sur n (n = 3).
On reste dans la boucle.
$ Entrez la base (A, T, G, C), qui se trouve à la position 3
seq[2] = « C » $ Donnez la valeur associée à cette base
nb[2] = 0.4
n = 4 < nbase
$ Entrez la base (A, T, G, C), qui se trouve à la position 4
seq[3] = « U »
Comme seq[3] ne contient pas A, T, G ou C on assigne n-1 à n (n = 3).
On avance sur n (n = 4).
n < nbase
$ Entrez la base (A, T, G, C), qui se trouve à la position 4
seq[3] = 0.6
Comme seq[3] ne contient toujours pas A, T, G ou C on assigne n-1 à n (n = 3).
On avance sur n (n = 4).
n < nbase
$ Entrez la base (A, T, G, C), qui se trouve à la position 4
seq[3] = « C »
$ Donnez la valeur associée à cette base
nb[3] = 0.3
n = 5
$ Entrez la base (A, T, G, C), qui se trouve à la position 5
seq[4] = « G »
$ Donnez la valeur associée à cette base
nb[4] = 2
n = 6
$ Entrez la base (A, T, G, C), qui se trouve à la position 6
seq[5] = « C »
$ Donnez la valeur associée à cette base
nb[5] = 3
n = 7
$ Entrez la base (A, T, G, C), qui se trouve à la position 7
seq[6] = « 3 » # l’utilisateur n’a pas rentré A, T, G ou C donc on recule sur n
n = 6
n = 7
$ Entrez la base (A, T, G, C), qui se trouve à la position 7
seq[6] = « G »
$ Donnez la valeur associée à cette base
nb[6] = 2
n = 8
$ Entrez la base (A, T, G, C), qui se trouve à la position 8
seq[7] = « a » # l’utilisateur n’a pas rentré A, T, G ou C donc on recule sur n
n = 7
n = 8
$ Entrez la base (A, T, G, C), qui se trouve à la position 8
seq[7] = « T »
$ Donnez la valeur associée à cette base
Et le programme attend que l’utilisateur rentre une donnée.
FIN

Quelles seront les valeurs des variables et les contenus des tableaux après la dernière
donnée saisie par l’utilisateur ?