Poster un nouveau sujet Poster une réponse
[TUTO] Les Fonctions de boucles
Auteur Message
vibra



Autorisation : Membre
Nb de messages : 595
Inscrit le : Mer 04 Avr 2007, 13:29
Posté le : Dim 06 Mai 2007, 13:17   Citer 

Un algorithme peut contenir une boucle. C´est-à-dire qu´une partie (ou totalité) de l´algorithme peut s´exécuter plusieurs fois avant de passer à la suite de l´algorithme.
Les boucles sont très utiles en programmation et permettent entre autres d´alléger les algorithmes, mais aussi sont parfois des passages obligés pour le bon fonctionnement des programmes.
Il existe deux types de boucles : les boucles non contrôlées, donc infinies (1), et les boucles contrôlées (2).

1) Les boucles non contrôlées n´ont pas beaucoup d´intérêt : la boucle va s´exécuter jusqu´à épuisement des piles, ou jusqu´à l´interruption de l´exécution du programme en appuyant sur [ON]. La boucle est créée à l´aide d´étiquettes non soumise à une condition. Pour réaliser une telle boucle, on place la commande Lbl (= étiquette) au début de la boucle et Goto (= aller à l´étiquette) en fin de boucle. De cette manière, dès que l´exécution du programme arrive à l´instruction Goto, l´exécution reprend immédiatement à l´endroit où il y a la commande Lbl. Il est également possible d´utiliser la fonction prgmPROGRAMME qui agirait exactement de la même manière qu´un Goto et un Lbl situé à la première ligne du programme.

2) Il y a 4 solutions pour créer une boucle contrôlée. Parmi ces solutions, il y en a toujours une qui convient mieux que les autres. Cela dépend du contexte.

A) If (= si):

Soit on met l´étiquette sous condition, c´est-à-dire, qu´on va faire recommencer la boucle ou pas si une condition est ou n´est pas vérifiée. Pour tester une condition, on utilise la commande If. Si la condition est vraie, alors la condition qui suit If est exécutée. En revanche, si la condition est fausse, alors la commande suivante est ignorée.
ex :
Code
Lbl 1
A+B->A
X+2->X
If X=1
Goto 1
1+1->W


Astuce : traduisez If, par « si »


B) While (= tant que):

While crée une boucle conditionnelle, dont le début est marqué par While, et la fin par End (= fin). While va tester une condition, qui, si elle est vraie, alors toutes les commandes jusqu´à End sont exécutées. Puis une fois arrivée à End, l´exécution du programme (EP) retourne à While, où la condition est analysée une nouvelle fois. Et ainsi de suite jusqu´à ce que la condition soit fausse. Dans ce cas, l´EP saut toutes les instructions situées entre While et End.
ex :
Code
While X>0,5
rand ->X
End
1+1->W


Astuce : traduisez While, par « tant que »


C) Repeat (= répète jusqu´à ce que)

Repeat s´apparente à While dans le sens où il crée également une boucle conditionnelle (dont le début est marqué par Repeat et la fin par End). La différence est que la condition est vérifiée non pas au début de la boucle, mais à la fin. De cette manière, les commandes de la boucle sont exécutées au moins une fois. Donc le programme exécute la boucle, puis une fois arrivé à End, il vérifie la condition imposée par Repeat. Si la condition est fausse, alors l´EP reprend à l´instruction Repeat, et relit les instructions de la boucle jusqu´à arriver à End, oùla condition est vérifiée une nouvelle fois (etc). En revanche si maintenant la condition est vraie, alors l´EP se poursuit.
ex :
Code
Repeat x=1
X-1+B->X
End
1+1->W


Astuce : traduisez Repeat , par « répète jusqu´à ce que »


D) For :

L´instruction For crée une boucle incrémentielle, c´est-à-dire qu´elle va augmenter une variable (d´une valeur initiale, jusqu´à dépasser une valeur finale), à chaque fois que l´EP va exécuter la boucle. Si la valeur initiale est inférieure ou égale à la valeur finale (en cas d´incrément positif), alors la boucle est exécutée jusqu´à End (qui marque la fin de la boucle). De là, l´EP reprend à l´instruction For, où la variable est incrémentée, puis la position de la valeur initiale par rapport à la valeur finale est analysée (etc). Maintenant si la variable est supérieure (en cas d´incrément positif) la valeur finale, alors l´EP saute toutes les instructions jusqu´à End.
En cas d´incrément négatif, il faut transformer inférieur en supérieur vice-versa.
ex :
Code
For (V,1,7,2
A+B->C                     (+++la boucle sera exécutée 4 fois+++)
B+1->B
End
1+1->W



Remarque : il est possible que des boucles soient imbriquées les unes des autres.

----------------------
Vive la programmation et vive le vibraphone !!!
 Adresse email Haut de page Bas de page 
 
Stupid



Autorisation : Membre
Nb de messages : 768
Inscrit le : Jeu 28 Sep 2006, 18:42
Posté le : Dim 27 Mai 2007, 19:16   Citer 

à noter que c'est la technique du lbl et goto qui plantent le moins

 Adresse email Haut de page Bas de page 
 
Akmdad



Autorisation : Membre
Nb de messages : 717
Inscrit le : Mar 22 Jui 2010, 21:03
Posté le : Jeu 29 Juil 2010, 0:18   Citer 

ca dépent

----------------------
retrouvez moi sur twitter!!!


j'ai une ti 82 stats fr et une ti89 titanium happy.gif
 Adresse email Haut de page Bas de page 
 
Sangohan38



Autorisation : Membre
Nb de messages : 3370
Inscrit le : Sam 31 Déc 2005, 19:48
Posté le : Jeu 29 Juil 2010, 5:14   Citer 

Bon, puisque ça t'amuse de remonter des sujets vieux de deux ans pour répondre, tu va nous développer ta réponse...
Sinon, je pense qu'en mettant que c'est la moins "buggée" il sous-entendait que c'était sans doute la plus facile à utiliser par rapport aux autres puisque lorsque tu met un lbl/goto puis la lettre, la calto reconnait directement tandis que si tu as un code de la forme

Code
For(
If
End


Le End se rapporte au If et non au for alors que la syntaxe est correcte.

Sangohan38

 Adresse email Haut de page Bas de page 
 
Akmdad



Autorisation : Membre
Nb de messages : 717
Inscrit le : Mar 22 Jui 2010, 21:03
Posté le : Jeu 29 Juil 2010, 13:14   Citer 

la syntaxe est fausse:

Code

for
if
end
end



----------------------
retrouvez moi sur twitter!!!


j'ai une ti 82 stats fr et une ti89 titanium happy.gif
 Adresse email Haut de page Bas de page 
 
Sangohan38



Autorisation : Membre
Nb de messages : 3370
Inscrit le : Sam 31 Déc 2005, 19:48
Posté le : Jeu 29 Juil 2010, 15:18   Citer 

Oui, c'est ce que je disais ...
Le End se rapporte au If et non au For alors que lorsqu'il n'y a pas de boucle, un If ne nécessite pas de End.

Sangohan38

 Adresse email Haut de page Bas de page 
 
Akmdad



Autorisation : Membre
Nb de messages : 717
Inscrit le : Mar 22 Jui 2010, 21:03
Posté le : Jeu 29 Juil 2010, 15:29   Citer 

en meme temps

Code

lbl1
1+A->A
if A=/=5
goto 1


remplace un for

----------------------
retrouvez moi sur twitter!!!


j'ai une ti 82 stats fr et une ti89 titanium happy.gif
 Adresse email Haut de page Bas de page 
 
Sangohan38



Autorisation : Membre
Nb de messages : 3370
Inscrit le : Sam 31 Déc 2005, 19:48
Posté le : Ven 30 Juil 2010, 13:26   Citer 

Oui, mais ce code nécessite plus de caractères donc sera plus lent.
Si tu veux optimiser une boucle, tu a la fonction IS et DS.

Sangohan38

 Adresse email Haut de page Bas de page 
 
Wirekey



Autorisation : Membre
Nb de messages : 240
Inscrit le : Mer 17 Jui 2009, 0:54
Posté le : Ven 30 Juil 2010, 19:53   Citer 

Un exemple pls ?

 Adresse email Haut de page Bas de page 
 
Akmdad



Autorisation : Membre
Nb de messages : 717
Inscrit le : Mar 22 Jui 2010, 21:03
Posté le : Ven 30 Juil 2010, 20:03   Citer 

IS(A = A+1->A
je crois

----------------------
retrouvez moi sur twitter!!!


j'ai une ti 82 stats fr et une ti89 titanium happy.gif
 Adresse email Haut de page Bas de page 
 
Sangohan38



Autorisation : Membre
Nb de messages : 3370
Inscrit le : Sam 31 Déc 2005, 19:48
Posté le : Ven 30 Juil 2010, 20:59   Citer 

Voila se que donne le manuel:


Citer
IS>(variable,valeur)
commandeA
commandes

Incrémente la variable de 1; omet l'execution de commandeA si varaiable>valeur.



Sangohan38

 Adresse email Haut de page Bas de page 
 
linkakro



Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Ven 30 Juil 2010, 21:05   Citer 

idem pour DS( avec décrément

----------------------
ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)

Pour tout le monde et surtout les débutants, quelques-uns des articles courants :
*Traductions Algorithmie/Ti-Basic.
*Caractères spéciaux sur Tout82
Les défauts du TI-Basic : Goto_versus_algo et DelVar/End/Lbl/guillemet/store
 Adresse email Haut de page Bas de page 
 
Akmdad



Autorisation : Membre
Nb de messages : 717
Inscrit le : Mar 22 Jui 2010, 21:03
Posté le : Sam 31 Juil 2010, 12:00   Citer 

logique

----------------------
retrouvez moi sur twitter!!!


j'ai une ti 82 stats fr et une ti89 titanium happy.gif
 Adresse email Haut de page Bas de page 
 
snap



Autorisation : Membre
Nb de messages : 369
Inscrit le : Dim 13 Fév 2011, 14:17
Posté le : Dim 13 Mar 2011, 11:21   Citer 

Salut. moi je n'utilise jamais for( mais j'aimerai bien savoir comment sa marche^^). j'ai lu le 1er message mais j'ai pas compris ils correspondent à quoi le V et les 3 chiffres aprés for :p si quelqu'un pouvait m'aider svp crazy.gif

----------------------
Commence un monopoly non graphique et compte bien le finir!
Lycée de l'escaut Valenciennes happy.gif
Fan de reflets d'acide!
le meilleur jeu du monde
http://snap-le-terrible.minitroopers.fr
 Adresse email Haut de page Bas de page 
 
Google_AdSense



Publicité    



 
Sangohan38



Autorisation : Membre
Nb de messages : 3370
Inscrit le : Sam 31 Déc 2005, 19:48
Posté le : Dim 13 Mar 2011, 18:58   Citer 

La boucle for s'utilise comme un compteur.
Tout d'abord, tu indique la variable qui va varier (ici V), ensuite tu met le nombre de départ, puis le nombre d'arrivé.
Enfin, si le pas est de 1, tu ne met pas de dernier argument, sinon, tu indique le pas.
Afin de boucler la boucle, tu met un end à la fin.

J'espère que ça t'aidera.

Sangohan38

 Adresse email Haut de page Bas de page 
 
snap



Autorisation : Membre
Nb de messages : 369
Inscrit le : Dim 13 Fév 2011, 14:17
Posté le : Jeu 17 Mar 2011, 18:46   Citer 

Merci ça va mieux maintenant mais le pas se fait en combien de temps? je veux dire si on met for(Z,1,20) ça se fera en combien de temps?

----------------------
Commence un monopoly non graphique et compte bien le finir!
Lycée de l'escaut Valenciennes happy.gif
Fan de reflets d'acide!
le meilleur jeu du monde
http://snap-le-terrible.minitroopers.fr
 Adresse email Haut de page Bas de page 
 
harven



Autorisation : Membre
Nb de messages : 99
Inscrit le : Mar 24 Aoû 2010, 10:10
Posté le : Jeu 17 Mar 2011, 18:51   Citer 

Bonjour

Snap, j'aimerait te repondre mais je ne comprend pas bien ta question, pourait tu develloper d'avantage ?

Harven

----------------------
Programmer en progression
Loading.....Bip.....Bip.....
Programme terminer

Harven
 Adresse email Haut de page Bas de page 
 
Sangohan38



Autorisation : Membre
Nb de messages : 3370
Inscrit le : Sam 31 Déc 2005, 19:48
Posté le : Ven 18 Mar 2011, 12:19   Citer 

Le temps n'a pas cours sur la calto.
Tu peut essayer de t'en rapprocher en maximum en faisant des tests mais selon les fonctions utilisées, la taille du programme, la mémoire disponible etc... ça varie énormément.

Sangohan38

 Adresse email Haut de page Bas de page 
 
snap



Autorisation : Membre
Nb de messages : 369
Inscrit le : Dim 13 Fév 2011, 14:17
Posté le : Ven 18 Mar 2011, 15:59   Citer 

Merci^^ Je pourrai enfin mettre des for dans mes programmes laugh.gif bigmouth.gif

----------------------
Commence un monopoly non graphique et compte bien le finir!
Lycée de l'escaut Valenciennes happy.gif
Fan de reflets d'acide!
le meilleur jeu du monde
http://snap-le-terrible.minitroopers.fr
 Adresse email Haut de page Bas de page 
 
Poster un nouveau sujet Poster une réponse





  Powered by Fire-Soft-Board v1.0.10 © 2004 - 2024 Groupe FSB
Page générée en 9 requêtes
BlackOne par Grimmlink