Bonjour à tous,donc voici un algorithme où je bloque un peu et je souhaite que vous m'aidiez un peu SVP.
Effectuer "à la main" le programme suivant pour n=2, increment =4, message=Bonjour, DDebut=3. Décrire ce que réalise le programme.
1.Variables
2.n EST DU TYPE NOMBRE
3.increment EST DU TYPE NOMBRE
4.message EST DU TYPE NOMBRE
5.DDebut EST DU TYPE NOMBRE
6.i EST DU TYPE NOMBRE
7.DEBUT ALGORITHME
8.LIRE n
9.LIRE increment
10.LIRE DDebut
11.LIRE message
12.i PREND LA VALEUR 1
13.TANT QUE (i<=DDEBUT+n*increment) FAIRE
14.DEBUT TANT QUE
15.SI ((i-DDEBUT°% INCREMENT==0 ET i>=DDebut) ALORS
16.DEBUT SI
17.AFFICHER message
18.AFFICHER "/"
19.FIN SI
20.SINON
21.DEBUT SINON
22.AFFICHER "Rien/"
23.FIN SINON
24.i PREND LA VALEUR i+1
25.FIN TANT QUE
26.FIN ALGORITHME
Voici ce que j'ai fait:
1.Variables
2.n=2
3.increment=4
4.message=Bonjour
5.DDebut=3
6.i EST DU TYPE NOMBRE
7.DEBUT ALGORITHME
8.LIRE n
9.LIRE increment
10.LIRE DDebut
11.LIRE message
12.i PREND LA VALEUR 1
13.TANT QUE (1<=3+2*4) FAIRE <---- Ici je n'ai rien compris
14.DEBUT TANT QUE
15.SI ((i-DDEBUT°% INCREMENT==0 ET i>=DDebut) ALORS <---- Ici aussi donc je ne peux pas faire le reste
16.DEBUT SI
17.AFFICHER message
18.AFFICHER "/"
19.FIN SI
20.SINON
21.DEBUT SINON
22.AFFICHER "Rien/"
23.FIN SINON
24.i PREND LA VALEUR i+1
25.FIN TANT QUE
26.FIN ALGORITHME
Merci pour l'aide que vous m'accorderiez.
Bonjour,
Bonjour, donc déjà merci mathafou mais je ne pense pas avoir très bien compris ce que tu as dit donc si tu pouvais (ou quelqu'un d'autre) me donner quelques pistes... Merci
1) ton algorithme est faux à deux endroits :
message EST DU TYPE NOMBRE
doit être
message EST DU TYPE
et
15.SI ((i-DDEBUT°% INCREMENT==0 ET i>=DDebut) ALORS
doit être :
15.SI ((i-DDEBUT% INCREMENT==0 ET i>=DDebut) ALORS
2) tu dois savoir ce que veux dire en français "tant que ceci faire cela" non ???
tant que je n'ai pas fini, je travaille
tant qu'il n'est pas 17h je reste là
etc
ici tant que une certaine expression logique est vraie, on fait tout ce qu'il y a entre "DEBUT TANT QUE" et "FIN TANT QUE" et on le répète "tant que" la condition est vraie
cette condition dépend de variables (i, ddebut etc) et donc peut varier,
vraie au début et pendant quelques exécutions de la partie répétée, elle ne sera plus vraie "un jour" (qui sait ? au bout de 3 fois ? de 16743 fois ? jamais ? je n'en sais rien tant qu'on n'a pas décortiqué complètement l'algorithme ou qu'on ne l'a pas fait tourner)
Quoi qu'il en soit à chaque fois que l'on "passe" sur cette ligne (répétée on a dit) on re-teste la condition avec les valeurs des variables à ce moment là.
La première fois l'expression "i<=DDEBUT+n*increment" vaut "1<=3+2*4" c'est à dire vaut "vrai" : il est vrai que 1 est inférieur ou égal à 11
Donc on fait toute la partie entre le "DEBUT TANT QUE" et le "FIN TANT QUE"
dans cette partie on y trouve (entre autres, mais ne nous occupons pas du reste pour l'instant) :
24.i PREND LA VALEUR i+1
cela veut dire que à cet instant on calcule la valeur de i + 1, qui est 1 + 1 = 2, et que cette valeur vient remplacer l'ancienne dans la variable i, qui prend donc la nouvelle valeur 2 : dorénavant i vaudra 2
arrivé au FIN TANT QUE, nous renvoie au début du TANT QUE (on répète tout "tant que" ceci)
on re calcule donc la nouvelle valeur de la condition "i<=DDEBUT+n*increment" avec cette nouvelle valeur de i = 2 c'est à dire 2<=3+2*4, ce qui est encore vrai.
On va donc refaire une deuxième fois tout ce qui est entre le "DEBUT TANT QUE" et le "FIN TANT QUE"
ce qui va entre autres se traduire par un nouveau
24.i PREND LA VALEUR i+1, réexécuté pour la deuxième fois, mais cette fois ci i valait 2, donc i prend la nouvelle valeur 2+1 = 3
et on recommence tout jusqu'à ce que la condition du TANT QUE ne soit plus vraie : i<=3+2*4, c'est à dire puisque DDEBUT+n*increment ne varie pas et vaut tout le temps 11, on répète tant que i<=11
Lorsque, a force d'ajouter 1 à i, on arrivera à i = 12, la condition ne sera plus vraie (12 n'est pas inférieur ou égal à 11)
alors tout ce qui est entre le "DEBUT TANT QUE" et le "FIN TANT QUE" sera "sauté" et on continuera avec ce qui se trouve après le FIN TANT QUE
Ici ce sera tout simplement la fin de l'algorithme :
26.FIN ALGORITHME
pour résumer :
tout ce qui est entre le "DEBUT TANT QUE" et le "FIN TANT QUE" sera "exécuté" succesivement pour i = 1, 2, 3 .... 11 c'est à dire 11 fois
De façon générale sera exécuté DDEBUT+n*increment fois, quelles que soient les valeurs que l'on donne à ces variables DDEBUT, n et increment
Maintenant qu'est ce donc qui est fait, à part faire progresser i, dans ce qu'il y a entre le "DEBUT TANT QUE" et le "FIN TANT QUE" ?
un truc un peu compliqué qui utilise la construction :
SI une condition est vraie ALORS
DEBUT SI
.. traitement1
FIN D
SI
SINON
DEBUT SINON
.. traitement 2
FIN SINON
ceci est une façon extrèmement verbeuse de dire
"si condition, alors faire le traitement1, et sinon faire le traitement2"
c'est tout. c'est comme en français :
s'il fait beau je sors me promener sinon je reste devant la télé.
il y a donc pour achever l'analyse de cet algorithme
- à examiner cette fameuse condition
- à voir ce que font "traitement 1" et "traitement 2"
la condition s'écrit :
SI ((i-DDEBUT)% INCREMENT==0 ET i>=DDebut)
il y a deux parties dans cette condition, liées par "ET" :
si condition1 ET condition2
pour que la condition du SI soit vraie, il faut donc que chacune des deux conditions condition1 et condition2 soient vraies
examinons la première, la plus compliquée :
((i-DDEBUT)% INCREMENT==0
cette expression commence par calculer i - DDEBUT
on a vu que i prenait successivement les valeurs 1, 2 ... 11
DDEBUT vaut 3 pendant toute la durée de l'algorithme
donc i - 3 prendra les valeurs succeessives -2, -1, 0, 1, 2, ... 8
on effectue ensuite sur ce résultat une opération ésotérique "%"
je répète que cette opération veut dire "le reste de la division par"
(i-DDEBUT)% INCREMENT est donc le reste de la division de (i-DDBUT) par INCREMENT
INCREMENT vaut 4, pendant toute la durée de l'algorithme.
donc on va calculer successivement le reste de la division par 4 de -2, -1, 0, 1, 2, ... 8
ces restes sont "un peu tordus" car on n'a pas l'habitude de parler du reste de la division de -2 par 4 !!!
en fait si on écrit -2 = 4q + r où q est le quotient et r le reste, on impose 0 r < 4, comme toujours
et donc ici -2 = 4(-1) + 2, r = 2
les restes successifs seront donc :
2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0
enfin on teste ( "= = ", c'est la syntaxe pour dire "est ce égal ?" de même que "<=" était "est-ce inférieur ou égal"), on teste donc si ce reste vaut O
Ce qui aura lieu "de temps en temps" : à la 3ème exécution quand i vaudra 3, à la 7ème, etc ... à la dernière quand i vaudra 11
voila pour la "condition1" : elle est vraie à la 3ème , 7ème et 11ème exécution.
il faut aussi ("ET") la condition2 qui est beaucoup plus simple :
i>=DDebut c'est à dire i >= 3
bof. ici tous les cas où la condition1 est réalisée (i=3, i=7 et i=11) satisfont à i >=3
Cela pourrait ne pas être vrai avec d'autres valeurs que 4 pour "Increment" par exemple, et aussi voir ma remarque à la fin sur cet algorithme débile.
Donc au final :
On effectue ce qu'il y a entre le DEBUT SI et le FIN SI pour les valeurs de i = 3, 7 et 11 (à la 3ème, 7éme et 11ème répétition)
et sinon (si i a une autre valeur) on effectue ce qu'il y a entre le DEBUT SINON et le FIN SINON
dans le premier cas c'est simple : on affiche la variable message, c'est à dire "Bonjour/"
dans le second on affiche "Rien/"
conclusion le programme va afficher
Rien/Rien/Bonjour/Rien/Rien/Rien/Bonjour/Rien/Rien/Rien/Bonjour/
et s'arrêter
Honnêtement, un tel algorithme complètement foireux, avec des tests et des variables "saupoudrées au hasard" donné en exo, il est gonflé... surtout si comme c'est apparemment le cas, c'est le premier contact avec les algorithmes !
Bonjour, donc déjà je tiens absolument à te remercier et quand tu dis qu'il est foireux, on est completement d'accord. Et merci beaucoup.
ben à part rédiger à ta place ...
en fait tu ne dois pas forcément expliquer ce que tu as compris, tout le cheminement et les explications sur ce que fait un algorithme en général, et les détails de syntaxe etc
Tu dois juste décrire les opérations effectuées par cet algorithme dans le cadre qui est demandé
Vous devez être membre accéder à ce service...
Pas encore inscrit ?
1 compte par personne, multi-compte interdit !
Ou identifiez-vous :