Inscription / Connexion Nouveau Sujet
Niveau première
Partager :

Algorithme ''à la main''

Posté par
ilour
08-10-12 à 09:13

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.

Posté par
mathafou Moderateur
re : Algorithme ''à la main'' 08-10-12 à 11:53

Bonjour,

Citation :
4.message EST DU TYPE NOMBRE
11.LIRE message pour ... message=Bonjour
ah bon ... "bonjour" est un nombre ! on en apprend tous les jours.
Citation :
13.TANT QUE (1<=3+2*4) FAIRE <---- Ici je n'ai rien compris
ça veut dire qu'ici la condition étant pour l'instant satisfaite, on effectue le "tant que"
Plus tard on reviendra sur le "tant que" et ce ne sera peut être (il faut espérer, sinon le programme boucle éternellement) plus forcément vrai.

Citation :
15.SI ((i-DDEBUT°% INCREMENT==0 ET i>=DDebut) ALORS <---- Ici aussi donc je ne peux pas faire le reste
il y a un gribouillis entre le "DDEBUT" et le "%"
Ceci est tout aussi incompréhensible par un être humain que par une machine : "erreur de syntaxe"
l'être humain un peu plus malin remarque que le caractère ° et le caractère ) sont sur la même touche de clavier et devine que la ligne devrait être :

15.SI ((i-DDEBUT)% INCREMENT==0 ET i>=DDebut) ALORS ...

donc on calcule i - DDEBUT qui à ce moment vaut 1 - 3 = -2
on en calcule le reste de la division par INCREMENT
(c'est ce que veut dire "%" : X % Y est le reste de la division entière de X par Y)
ici INCREMENT vaut 4 et le reste de la division de -2 par 4 est .. va savoir .. (+2) ? :
-2 = -1*4 + 2 c'est en général la convention employée : 0 reste |diviseur|
De toute façon ce n'est pas 0, c'est ce que teste le "= =" "est-ce égal ?"
La 1ere condition est donc non satisfaite "si le reste est nul et si etc"
comme le reste est non nul, la condition "si alors" n'est pas satisfaite, et on ne fait pas la branche "alors" mais la branche "sinon" si elle existe.

on saute donc directement ligne 20, puis on affiche "Rien/" ligne 23, et on continue :
ligne 24 i prend la valeur 1 + 1 = 2
le "fin tant que" nous renvoie directement ligne 13 où on re-teste la condition "i<=DDEBUT+n*increment" avec la nouvelle valeur de i = 2 pour savoir s'il faut recommencer les lignes 14 et suivantes, ou si c'est fini et que alors on termine complètement (ligne 26)

En regardant d'un premier survol, on voit ainsi que le programme va afficher une suite de "Rien/" et de "Bonjour/" en nombre défini par les conditions de départ (les valeurs de n=2, increment=4, et DDebut=3)

Le but de l'exercice est donc de déterminer combien de "Rien/" et combien de "Bonjour/" le programme va cracher avant de s'arrêter...

Posté par
ilour
re : Algorithme ''à la main'' 09-10-12 à 11:45

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

Posté par
mathafou Moderateur
re : Algorithme ''à la main'' 09-10-12 à 12:52

1) ton algorithme est faux à deux endroits :
message EST DU TYPE NOMBRE
doit être
message EST DU TYPE \red CHAINE

et
15.SI ((i-DDEBUT°% INCREMENT==0 ET i>=DDebut) ALORS
doit être :
15.SI ((i-DDEBUT\red )% 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 !

Posté par
ilour
re : Algorithme ''à la main'' 09-10-12 à 14:23

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.

Posté par
ilour
re : Algorithme ''à la main'' 10-10-12 à 15:37

Enfaité j'ai à peu près tout compris mais j'ai du mal à l'écrire ''au propre''. Merci.

Posté par
ilour
re : Algorithme ''à la main'' 10-10-12 à 18:15

...

Posté par
mathafou Moderateur
re : Algorithme ''à la main'' 10-10-12 à 18:51

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é

Citation :
Effectuer "à la main" le programme suivant pour n=2, increment =4, message=Bonjour, DDebut=3.


donc en fait tu te contentes de mettre des choses du genre :

n = 2
increment = 4
message = Bonjour
DDebut = 3
i = 1

test TANT QUE (i<=DDEBUT+n*increment) : 1<=3+2*4 vrai, on effectue le Tant que
SI ((i-DDEBUT)% INCREMENT==0 ET i>=DDebut) : (1 - 3)%4 == 0 ET 1 >= 3 faux
donc sinon :
afficher "Rien/"
i = i+1 = 1+1 = 2

test TANT QUE (i<=DDEBUT+n*increment) : 2<=3+2*4 vrai, on effectue le Tant que
SI ((i-DDEBUT)% INCREMENT==0 ET i>=DDebut) : (2 - 3)%4 == 0 ET 2 >= 3 faux
donc sinon :
afficher "Rien/"
i = i+1 = 2+1 = 3

test TANT QUE (i<=DDEBUT+n*increment) : 3<=3+2*4 vrai, on effectue le Tant que
SI ((i-DDEBUT)% INCREMENT==0 ET i>=DDebut) : (3 - 3)%4 == 0 ET 3 >= 3 vrai
donc si :
afficher message : affiche "Bonjour/"
i = i+1 = 3+1 = 4

etc
jusqu'à
...
i = i+1 = 11+1 = 12
test TANT QUE (i<=DDEBUT+n*increment) : 12<=3+2*4 faux, on sort de la boucle
Fin de l'algorithme

ensuite en conclusion :
Citation :
Décrire ce que réalise le programme.

le programme émet des "Rien" puis ensuite un "Bonjour" tous les "incrément" jusqu'à émission de DDEBUT+n*increment - 1 messages en tout.

c'est déja énormément beaucoup de baratin pour un tel algorithme (qui n'en mérite pas tant) ... tu peux te contenter de mettre des "..." plutot que de décrire les 11 boucles dans leur intégralité !!



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Inscription gratuite

Fiches en rapport

parmi 1742 fiches de maths

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !