Forum

Catégorie : Programmes
Forum : Les programmes des internautes
Vues : 1293
Réponses : 13
Type : discussion
Etat : réponses autorisées

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 laugh.gif

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:
Code
ZStandard
(dans le menu zoom)

--------------------------

Code
:B+1=B

Tu as du oublier une fleche?
Code
:B+1->B


--------------------------

Code
:A+1=>1

De même tu as du confondre A et 1?
Code
:A+1->A


--------------------------

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 winkle.gif
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 )
Code
0->A
EffDessin

Devient:
Code
DelVar AEffDessin


--------------------------

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 winkle.gif
MaximeDeprince le 10/02/2014 à 19:30
Bonjour,
Déjà merci pour ton "aide" si on peut dire ça bigmouth.gif

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) crazy.gif

Pour le quatrième : en faite je ne savais pas vraiment comment la "fonction" Cercle fonctionnait (je sait toujours pas ^^) mais merci ! cupsmiley.gif

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 bigmouth.gif 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é cupsmiley.gif

Merci pour les conseil laugh.gif
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 crazy.gif )

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 glasses.gif 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 laugh.gif )

Et merci pour les explications de différentes fonctions happy.gif
m@thieu41 le 11/02/2014 à 17:26
Ah ok happy.gif
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 winkle.gif

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 ?

Code
:Goto E
:End:End
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 winkle.gif
MaximeDeprince le 12/02/2014 à 06:56
OK bigmouth.gif

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
MaximeDeprince le 12/02/2014 à 07:17
j'ai essayé le programme sur ma calculatrice et il marche nickel chrome ^_^ cupsmiley.gif cupsmiley.gif bigmouth.gif laugh.gif laugh.gif cupsmiley.gif
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 ahh.gif cupsmiley.gif crazy.gif