Avertissement :Il s'agit d'une page optimisée pour la navigation mobile. Voir la
page originale.
Un programme inutile
MaximeDeprince le 09/02/2014 à 13:01
Bonjour,
Voila mon premier VRAI ! Programme ! C'est juste un entrainement, c'est pour savoir comment l'améliorer pour que je m'améliore par la suite
Code
:(-)10=>Xmin:10=>Xmax
:(-)10=>Ymin:10=>Ymax
:1=>Xgrad:1=>Ygrad
:0=>A:0,5=>B
:EffDessin
:AxesNaff
:Lbl L
:Cercle(0,A-A,A
:Cercle(0,B-B,B
:A+1=>A
:B+1=>B
:Goto L
Voila ...
Merci D'avance ^^
m@thieu41 le 09/02/2014 à 13:41
Bonjour,
Code
:(-)10=>Xmin:10=>Xmax
:(-)10=>Ymin:10=>Ymax
:1=>Xgrad:1=>Ygrad
Tu peux remplacer ça par:
(dans le menu zoom)
--------------------------
Tu as du oublier une fleche?
--------------------------
De même tu as du confondre A et 1?
--------------------------
Code
:Cercle(0,A-A,A
:Cercle(0,B-B,B
A-A = 0. De même B-B = 0...
Code
:Cercle(0,0,A
:Cercle(0,0,B
--------------------------
Dans tous les cas, on sait que B = A+5.
Donc tu peux utiliser seulement A, en faisant:
Code
ZStandard
0->A
EffDessin
AxeNaff
Lbl L
Cercle(0,0,A
Cercle(0,0,A+5
1+A->A
Goto L
--------------------------
Généralement pour des petites boucles comme ça c'est judicieux d'utiliser... les boucles

Avec une boucle While:
Code
ZStandard
0->A
EffDessin
AxeNaff
While 1
Cercle(0,0,A
Cercle(0,0,A+5
1+A->A
End
--------------------------
Petite optimisation en plus: pour mettre une variable à 0, on peut utiliser DelVar (EffVar en .fr). L'avantage c'est que tu peux coller une autre instruction après, c'est un bogue de la calto (attention toutefois en l'exploitant:
http://tout82.free.fr/forum/sujet.php?sujet=2691 )
Devient:
--------------------------
Ensuite: Ton programme tourne indéfiniment, ça serait bien de pouvoir l'arrêter à l’appui sur une touche.
Pour cela on peut utiliser l'instruction codeTouche (getKey en anglais) qui renvoi le code de la dernière touche pressée, et s'il n'y a pas eut de touche pressée elle renvoi 0.
Code
ZStandard
DelVar AEffDessin
AxeNaff
Repeat codeTouche //Jusqu'à ce que codeTouche renvoit autre chose que 0, soit jusqu'à ce qu'une touche soit pressée
Cercle(0,0,A
Cercle(0,0,A+5
1+A->A
End
Si tu as des questions

MaximeDeprince le 10/02/2014 à 19:30
Bonjour,
Déjà merci pour ton "aide" si on peut dire ça
Pour le premier conseil je ne savais pas ^_^ (Je viens de débuter)
Pour le deuxième effectivement j'ai oublié une flèche mais j'ai édit le post
Pour le troisième également (décidément)
Pour le quatrième : en faite je ne savais pas vraiment comment la "fonction" Cercle fonctionnait
(je sait toujours pas ^^) mais merci !
Pour le cinquième tu dit :
Citation
Dans tous les cas, on sait que B = A+5.
Donc tu peux utiliser seulement A, en faisant:
Code
ZStandard
0->A
EffDessin
AxeNaff
Lbl L
Cercle(0,0,A
Cercle(0,0,A+5
1+A->A
Goto L
Ce ne serait pas plutôt ça (au lieu de 5 c'est 0;5) ?
Code
ZStandard
0->A
EffDessin
AxeNaff
Lbl L
Cercle(0,0,A
Cercle(0,0,A+0,5
1+A->A
Goto L
Pour le sixième : Merci

Mais quelle est la différence entre les boucles
Goto et
while ?
Pour le septième conseil : je suis heureux de l'apprendre ^^
et pour le dernier je ni ai pas pensé
Merci pour les conseil

m@thieu41 le 10/02/2014 à 21:20
Déjà je vais t'expliquer la fonction cercle:
Elle attend en paramètre 3 arguments, à savoir:
_L'absice du centre du cercle
_L'ordonnée du centre du cercle
_Le rayon du cercle
Donc:
Cercle(0,0,A
Tracera un cercle de centre (0;0) et de rayon A.
Et
Cercle(0,0,A+5
Tracera un cercle de centre (0;0) et de rayon A+5.
----------------------------------
En fait je ne suis pas sur de ce que tu voulais faire faire à ton programme...
Cercle(0,0,A
Cercle(0,0,A+0,5
Ceci n'a pas de sens, puisque la fonction Cercle n'attends pas de 5e argument.
Mais à la manière dont tu présente la chose, j'ai l'impression que tu considère A et B comme des points, plutot que comme des nombres. Or A et B ne représentent que des nombres.
Du coup si tu voulais faire des cercle de centre A, ça n'a pas de sens, puisque A a une seule valeur, et il faut 2 valeurs pour représenter un point (après peut-être que ce n'est pas ce que tu voulais, c'est juste l'impression que j'ai eut d'après ta notation). Dis clairement ce que tu cherchais à obtenir pour que je t'aide à le faire mieux.
-------------------------------------
Concernant les Boucles (While - Repeat) et les étiquettes (Goto/Lbl)
Pour permettre à une action de se répéter plusieurs fois tu as plusieurs alternatives: les boucles ou les étiquettes.
Chacune présente avantages et inconvénients.
_Les boucles:
.While
Code
While condition
//Instructions
End
Tant que condition est vraie, les instructions sont répétées.
Dès que condition est fausse, le programme reprends après le End.
Les instructions ne sont jamais exécutées si condition est fausse à l'entrée de la boucle.
.Repeat
Code
Repeat condition
//Instructions
End
Jusqu'à ce que la condition soit vraie, les instructions sont éxécutées.
La boucle est exécutée au moins une fois, même si condition est vrai à l'entrée de la boucle.
Pour infos:
Généralement, les boucles sont plus rapides, car elles sauvegardent l'entrée de la boucle: pas besoin de scanner le code pour revenir au début après avoir fait les instructions dans la boucle!
Néanmoins, ça peut ralentir d'autres éventuelles boucles/structures If, qui peuvent scanner le code à la recherche d'un End, et qui doivent donc prendre en compte les autres boucles/structures If qui attendent aussi un End, pour ne pas s'arrêter au mauvais End (donc dès qu'il faut scanner (dans le cas d'un If/then/end ou d'une boucle While qui n'est pas exécutée), ce n'est pas très rapide).
_Les étiquettes
Code
Lbl A
//Instructions
Goto A
Tu peux aussi coupler avec une condition pour obtenir une boucle conditionnelle, à la manière d'un Repeat:
Code
Lbl XX
//Instructions
If condition
Goto XX
XX étant 2 caractères alphanumériques (y compris théta) (lettres en majuscules bien sûr)
Tant que la condition est vraie, les instructions sont éxécutées.
La boucle est exécutée au moins une fois, même si condition est fausse à l'entrée de la boucle.
Pour infos:
Le scan du code peut être long si le Lbl A est placé en fin de prgm: lorsque l'instruction Goto XX est exécutée, le programme scan le code
à partir du début jusqu'à trouver un retour à la ligne suivi d'un Lbl XX (plus d'infos ici:
http://tout82.free.fr/forum/sujet.php?sujet=2691).
Par contre, si le Lbl est placé en début de programme, ça peut être avantageux, le scan étant simple, contrairement à celui des boucles quand elles en font.
/!\ Le mélange Goto/Lbl ne fait pas bon ménage (même si on peut s'en servir si on sait se qu'on fait):
http://tout82.free.fr/forum/sujet.php?sujet=2757
EDIT et PS: J'en profite pour te recommander ce tutoriel si tu ne l'as pas encore vu:
http://www.siteduzero.com/info[...]mer-en-ti-basic MaximeDeprince le 11/02/2014 à 12:38
re-bonjour,
Je voulais dire : 0.5 (j'ai oublié que c'était un point au lieu d'une virgule

)
et en faite je veux faire un "programme" (si on peut dire cela) qui fait des cercle , de centre 0, le rayon commençant par 0 et qui avance de 0.5 a chaque fois

jusqu'à ce que le cercle arrive a Y : 9,5 et à ce point il s'arrête (Désolé pour l'explication pas très nette

)
Et merci pour les explications de différentes fonctions

m@thieu41 le 11/02/2014 à 17:26
Ah ok

Effectivement c'est de ma faute, j'avais mal lu j'ai cru que B valait 5 au départ, alors qu'en fait il vaut 0.5.
Du coup c'est bien:
Code
ZStandard
0->A
EffDessin
AxeNaff
Repeat condition
Cercle(0,0,A
Cercle(0,0,A+.5
1+A->A
End
Concernant la condition je te laisse chercher: si tu veux faire des cercles de rayons 0 à 9.5, il faudra s'arrêter lorsque A dépasse 9.
Ce que tu aurais pu faire, c'est au lieu d'ajouter 1 à la valeur de A à chaque tour de boucle, ajouter 0.5 directement: comme ça tu peux mettre une seule fois la fonction Cercle par tour de boucle, qui s’arrêtera donc lorsque A dépasse 9.5 cette fois.
MaximeDeprince le 11/02/2014 à 17:52
Donc je resume (j'ai rajouté une fonction) :
Code
:ZStandard
:0->A
:EffDessin
:AxeNaff
:Lbl E
:Cercle(0,0,A
:Cercle(0,0,A+.5
:1+A->A
:If A(plus petit ou égal à) 9.5
:Goto E
:End:End
:For(B,0,94
:For(A,0,64
:PxlChange(A,B
:End
m@thieu41 le 11/02/2014 à 18:08
Le début est bon, la fin un peu moins
Code
:ZStandard
:0->A
:EffDessin
:AxeNaff
:Lbl E
:Cercle(0,0,A
:Cercle(0,0,A+.5
:1+A->A
:If A(plus petit ou égal à) 9.5
:Goto E
//Jusque là c'est bon
:End:End //A quoi correspondent ces End? Il sont inutiles et font planter le prgm
:For(B,0,94
:For(A,0,64
:PxlChange(A,B
:End //Là par contre il y a 2 boucles For à fermer donc 2 End à mettre (sinon tu ne fais qu'une colonne)
MaximeDeprince le 11/02/2014 à 21:02
ok merci donc pour les end j'en mets ou pas ?
m@thieu41 le 11/02/2014 à 21:20
Non il ne faut pas les mettre: si tu les mets lorsque la calto va les lire, elle ne va pas comprendre (puisqu'elle n'attendait pas de End), et donc du coup elle va planter à coups sur...
Donc ne les mets pas

MaximeDeprince le 12/02/2014 à 06:56
OK
Donc je re-résume : mon programme final est :
Code
:ZStandard
:0->A
:EffDessin
:AxeNaff
:Lbl E
:Cercle(0,0,A
:Cercle(0,0,A+.5
:1+A->A
:If A(plus petit ou égal à) 9.5
:Goto E
:For(B,0,94
:For(A,0,64
:PxlChange(A,B
:End:End
linkakro le 12/02/2014 à 13:03
C'est dommage que tu te sois obstiné avec un Label/Goto alors que m@thieu41 t'avais déjà montré une boucle.
Et moi je te proposes la boucle For.
Code
:ZStandard
:EffDessin
:AxeNaff
:For(A,0,9.5 // ici 9 suffirait
:Cercle(0,0,A
:Cercle(0,0,A+.5
:End
:For(B,0,94
:For(A,0,64
:PxlChange(A,B
:End
:End
NINJACODEUR-3000 le 26/06/2023 à 18:54
que fait le prog svp

Avertissement :Il s'agit d'une page optimisée pour la navigation mobile. Voir la
page originale.