Bonjour!
Au lycée on apprend le fonctionnement d'un compteur dans un algorithme (en 2nde) et en même temps de se servir de la calculatrice (que j'ai depuis seulement 1 mois, une ti-82 stats.fr ; d'ailleurs je me suis bien débattue avec au début :p )
On avait cet algorithme à faire chez nous:
Citer
Variables : N, i, S Algorithme :
Afficher "Saisissez un entier N :"
Saisir N
S reçoit 1 I (le I est censé être entouré ^^)
Pour i de 1 jusqu'à N -espace-- S reçoit S x i
FinPour
Afficher S
On avait une petite aide (différente puisque l'aide était avec des additions, et non avec des multiplications)
Sur le coup je n'ai pas réussi, et le prof de maths contournait sans cesse mes questions, disant que je ne faisais pas d'efforts pour comprendre .. sympa, j'étais déjà en pleine frustration.
Bref je viens de reprendre ça, en m'aidant de la correction, seule chez moi et j'en suis arrivée à ceci :
Il fonctionne très bien, j'obtiens bien S=120 avec N=5 comme c'était le but. Seulement je ne comprends pas comment il fonctionne :')
Donc si vous pouviez m'expliquer comment fonctionnent les lignes 2, 3, 4 car je ne vois pas où est le compteur, ni son intérêt, et ce qu'il fait, et si on peut le faire avec plusieurs signes (addition, multiplication, division, soustraction)
Aussi une des questions de l'exercice était "Pourquoi l'initialisation I est-elle importante ?"
Mais je ne vois pas ce qu'est l'initialisation, ni où est-ce que c'est fait dans le programme.
Sinon j'ai une petite question qui n'a rien à voir, comment on fait pour convertir un résultat en racine carrée ? Comme quand on fait >Frac pour convertir en fraction un résultat obtenu.
Merci d'avance !
PS : je suis une débutante de chez débutante avec ce genre de choses ^^
Autorisation : Membre
Nb de messages : 848
Inscrit le : Mer 18 Juil 2012, 18:44
Posté le : Dim 10 Nov 2013, 10:30
Bonjour,
Citer : guimp
Sur le coup je n'ai pas réussi, et le prof de maths contournait sans cesse mes questions, disant que je ne faisais pas d'efforts pour comprendre .. sympa, j'étais déjà en pleine frustration.
Sympa et pédagogue le prof à ce que je vois...
Afficher le résultat en racine carrée est impossible (sauf à faire un prgm qui s'en charge).
Concernant le compteur.
En fait pour comprendre le rôle du compteur, il faut déjà comprendre le rôle de la boucle For.
For(variable,début,fin[,pas])
la variable prendra toutes les valeurs entre début et fin, et à chaque tour de boucle on lui rajoutera le pas (qui est à 1 s'il n'est pas renseigné).
Citer : Ex:
For(I,1,3)
I prendra les valeurs suivantes (dans l'ordre):
1
2
3
La boucle sera alors exécutée 3 fois.
For(I,1,2,0.4)
I prendra les valeurs:
1
1.4
1.8
La boucle tournera donc 3 fois également (elle ne prendra pas la valeur 2.2 (1.8+0.4), parce qu'elle est supérieure à 2)
For(I,1,N)
I prendra toutes les valeurs comprises entre 1 et N.
1
...
N (dans le cas où N est un entier, sinon ça s'arrête à la partie entière de N. Si N vaut 4.3, la dernière valeur prise par N sera 4).
For(I,2,1)
La boucle ne sera jamais exécutée, parce que la valeur de début est supérieure à la valeur de fin.
Le contenu de la boucle For (entre le For et le End correspondant), sera exécutée avec des valeurs de I (ou autre variable) différentes.
Par exemple:
For(I,1,3
Disp I
End
Au premier tour de boucle, I vaut 1.
Disp I affichera donc 1.
Ensuite, on arrive à la fin de la boucle.
On rajoute donc 1 à I.
I vaut maintenant 2.
Disp I affichera donc 2.
Fin de la boucle, on rajoute 1 à I.
I vaut maintenant 3 (au 3e tour de boucle).
Disp I affichera donc 3.
Dans ton cas:
Code
:Input "CHOISISSEZ N ?",N
:1->S
:For(I,1,N)
:S*I->S
:End
:Disp "DONC S=",S
Avant de rentrer dans la boucle, S vaut 1.
Mettons que N vaut 3.
Au premier tour de boucle, I vaut 1.
S*I = 1*1 = 1 est stocké dans S.
Fin de boucle, I vaut 2.
S*I = 2*1 = 2 est stocké dans S.
Fin de boucle, I vaut 3.
S*I = 2*3 = 6 est stocké dans S.
Fin de boucle, I+1 est supérieur à N, donc on arrête là.
si on peut le faire avec plusieurs signes (addition, multiplication, division, soustraction)
Je ne comprend pas ta question...
Mais je ne vois pas ce qu'est l'initialisation, ni où est-ce que c'est fait dans le programme.
L'initialisation, c'est le fait de donner une valeur de départ à une variable (dans ton algo c'est la ligne qui est marquée du I entouré).
Citer
:1->S
Ca permet de dire qu'au début S vaut 1. Sinon tu ne peux pas savoir quelle serait sa valeur de départ (ça pourrait être 56, ou -68.43201 par ex ). Et ici c'est important parce que sinon, au premier tour de For, S prendrait la valeur 1*56 (ou une valeur inconnue), et donc ça fausserait tout.
Si tu as d'autres questions ou si tu n'as pas compris n'hésites pas.
Autorisation : Membre
Nb de messages : 1
Inscrit le : Sam 09 Nov 2013, 14:40
Posté le : Dim 10 Nov 2013, 14:19
Haa d'accord j'ai mieux compris!
Donc quand on marque For(lettre variable, début, fin, pas qui est facultatif sinon il va de 1 en 1), on le fait suivre par une série de calculs avec la lettre variable. Puis on met End, qui dit qu'on doit refaire la boucle, ou l'arrêter si variable + pas > fin.
Et admettons que ce soit :
Code
:2->S
:For(I,1,5,0.5)
:I*S->S
:S+1->S
:End
Dans ce programme :
Code
:Input "FIN=",F
:2->S
:For(I,1,F,0.5)
:I*S->S
:S+1->S
:Disp "S=",S (histoire de voir où on en est ^^)
:End
:Disp "A LA FIN, S=",S
Et je mets par exemple 5 pour F.
Ca fera, avec S=2 au début
Boucle n°1
-Avec For(...), I vaut 1
-I*S = 1*2 = 2
-S+1 = 2+1 = 3
-Fin de la boucle, S=3
On recommence :
Boucle n°2
-I vaut 1,5
-I*S = 1,5*3 (S vaut toujours 3 ici ?) = 4,5
-S+1 = 4,5+1 = 5,5
-Fin de la boucle, S=5,5
Boucle n°3
-I vaut 2
-I*S = 2*5,5 = 11
-S+1 = 11+1 = 12
-Fin de la boucle, S=12
... ect ?
Avec mon programme et F=5, j'obtiens S=29 728,5, par contre comment peut-on voir toutes les lignes "intermédiaires" de Disp "S=",S (avant End) ? Dès que j'entre F=5, ça fait plusieurs lignes à toute vitesse et je ne sais pas comment remonter ^^
Et quelle est la différence entre Prompt et Input ?
Citer : m@thieu41
Citer
si on peut le faire avec plusieurs signes (addition, multiplication, division, soustraction)
Je ne comprend pas ta question...
Je parlais des calculs qui suivaient le For, si avec le résultat obtenu par For on pouvait utiliser tout genre de calculs jusqu'à End, mais maintenant je crois bien qu'on peut
Et merci beaucoup tes explications sont super détaillées!
Autorisation : Membre
Nb de messages : 848
Inscrit le : Mer 18 Juil 2012, 18:44
Posté le : Dim 10 Nov 2013, 15:26
C'est ça, tu as compris comment ça fonctionne.
Citer
-I*S = 1,5*3 (S vaut toujours 3 ici ?) = 4,5
La valeur d'une variable ne change pas tant qu'on ne lui affecte pas une nouvelle valeur (que se soit avec sto-> ou une boucle for etc). Donc oui S vaut toujours 3 ici.
Par contre j'ai omis quelque chose (pour simplifier mais ça peut être important):
Citer
Puis on met End, qui dit qu'on doit refaire la boucle, ou l'arrêter si variable + pas > fin.
Ceci est vrai dans le cas où le pas est positif.
Tu peux parfois avoir besoin d'un pas négatif, et dans ce cas, la boucle s'arrête lorsque variable + pas < fin.
Ex: For(I,0,-2,-1) la boucle sera exécutée 3 fois (pour I=0, I=-1 et I=-2). Par contre il faut bien préciser un pas négatif, il n'est pas automatique (For(I,0,-2) la boucle ne sera jamais exécutée.
Pour pouvoir lire toutes les lignes, le mieux est d'utiliser la fonction Pause à la place de Disp.
Pause [argument] affichera l'argument (unique contrairement à la fonction Disp), et attendra l'appui sur [entrer] pour poursuivre l'exécution.
Dans le cas de ton exemple:
Code
:Input "FIN=",F
:2->S
:For(I,1,F,0.5)
:I*S->S
:S+1->S
:Disp "S=
:Pause S //La fonction ne peut afficher qu'un argument, il est donc nécessaire d’afficher l'autre avant avec un Disp.
:End
:Disp "A LA FIN, S=",S
Concernant Prompt et Input:
Ces 2 fonctions ont la même utilité: demander à l'utilisateur de rentrer une valeur pour une variable.
Le fonctionnement diffère essentiellement sur le fait que Prompt affiche "A=?" (ou une autre lettre selon la variable) avant le curseur, tandis que Input permet de choisir le texte à afficher (tu peux ne pas le renseigner, auquel cas un point d'interrogation seul apparait, ou bien mettre "" pour ne rien afficher).
Syntaxes:
Prompt variable
Input [texte,]variable
Citer
Je parlais des calculs qui suivaient le For, si avec le résultat obtenu par For on pouvait utiliser tout genre de calculs jusqu'à End, mais maintenant je crois bien qu'on peut
En effet, la variable qui te sert de compteur peut être utilisée comme n'importe quelle autre, et tu peux même changer sa valeur dans la boucle! (attention à ne pas se retrouver dans un cas où la boucle tournerait indéfiniment).
Ex:
Code
For(I,1,2
1->I
End
Ce code posera problème:
1er tour:
I vaut 1.
I prend la valeur 1 (ça ne change donc rien).
I+1<=2 donc on continue.
2e tour:
I vaut I+1 soit 2.
I prend la valeur 1.
I+1<=2 donc on continue.
3e tour (et tous les tours jusqu'à l'infini):
I vaut I+1 soit 2.
I reprend la valeur 1.
I+1<=2 donc on continue.
... La boucle ne se termine jamais, c'est donc à éviter!
Par contre tu peux faire:
Code
For(I,1,3
...Traitement quelconque.
If I=1
I+1->I
End
1er tour:
I vaut 1.
On effectue le traitement (peut importe lequel, mais on considère qu'il ne modifie pas la valeur de I).
Puisque I=1, I prend la valeur de I+1, soit 2.
2e tour:
I vaut I+1 soit 3.
On effectue le traitement.
I est différent de 1, on ne lui rajoute rien.
On sort de la boucle puisque I+1>3.
Ainsi, le traitement n'aura été effectué que pour I=1 et I=3, pas pour I=2.