Bonjour,
en ce moment je suis à fond dans les algorithmes et je m'intéresse à créer un algorithme en particulier !
--> L'algorithme pour simplifier et réduire une racine carrée
exemple --> 32 =
4(8) = 2
2(4) = 4
2
J'en ai trouvé un mais il est pour les calculatrices Casio :
Entrée A
C := 1
F := 2
"1"
F2 := F*F
"2"
Est-ce que F2 divise A ?
oui : alors,
remplacer C par C*F
remplacer A par A / F2
est-ce que A > 1 ?
oui : alors, aller en "2"
non : alors, le résultat est C ; fin
non : alors,
est-ce que F2 < A ?
oui : remplacer F par F + 1 et aller en "1"
non : le résultat est CA ; fin
---------------------------------------------------------------------------------
Le problème c'est que ayant une TI-84 +, je suis mal parce que je ne comprends absolument rien.
Merci pour votre aide !
re-bonjour canonique
voilà un programme qui a l'air de tourner :
input A
1->C *** C sera le nb à sortir de la racine
2->I *** on ne commence pas à 1 qui servirait à rien
while I²A *** on teste tous les entiers de 2 à
A, A évoluant au cours du programme
while int(A/I²)=A/I² *** Tant que I² divise A (il faut pouvoir faire plusieurs tests avec le même I)
I*C->C
A/I²->A
end
I+1->I
end
disp C
disp A
(je ne sais pas écrire sur une même ligne C racine A)
Amuse-toi bien !
et si tu veux d'autres algo ...
Merci beaucoup pour ton aide Azalee !
J'ai trouvé pour :
Je tente !
Pour deux vecteurs u et v, de coordonnées u(x;y) et v(x';y'),
--> Ils sont colinéaires si xy'- x'y =0
Donc
input "xu=",A
input "yu=",B
input "xv=",C
input "yv=",D
A(D) - B(C) --> M
If M=0
Disp "Les vecteurs sont colinéaires"
End
If M0
Disp "Les vecteurs ne sont pas colinéaires"
End
Je sais pas si c'est bon ?
oui, ça devrait marcher ; tu t'es très bien débrouillé.
qq modif qd même : revoit la syntaxe du "if"
if <condition>
then...
else ...
end
c-à-d :
si <condition>
alors...
sinon ...
finsi
(je ne crois pas que l'on puisse écrire un "if" sans un "then"
et il est préférable d'utiliser le "else", plutôt qu'un autre "if")
Tu n'es pas obligé de prendre une nouvelle variable M
input "xu=",A
input "yu=",B
input "xv=",C
input "yv=",D
je remplacerai ces lignes :
A(D) - B(C) --> M
If M=0
Disp "Les vecteurs sont colinéaires"
End
If M≠0
Disp "Les vecteurs ne sont pas colinéaires"
End
par celles-ci
if A*D-B*C=0
then
disp "colinéaires"
else
disp "non colinéaires"
end
bonjour canonique
voilà une autre idée de programmation(Lien cassé)
essaie de deviner ce que va faire le programme
puis traduis le pour ta TI
(sachant que
"x!=1" veut dire x≠1
"x...2==0" veut dire "si x est pair"
Ça y est j'ai fait les modifications sur le programme pour les vecteurs colinéaires et ça marche !
Maintenant :
N --> 0
Input X
While x!=1
N--> N+1
If int(x/2)=x/2
Then
x-->x/2
End
Else
x-->3x+1
End
End
Disp N
Je ne suis pas certains de ce que j'ai écrit !
Sur Algobox, j'ai fait des tests et ça me donne :
x= 1, alors n=0
x= 2, alors n=1
x= 3, alors n=7
x= 4, alors n=2
x= 5, alors n=5
x= 6, alors n=8
x= 7, alors n=16
x= 8, alors n=3
x= 9, alors n=19
x=10, alors n=6
Mais je ne vois pas ce que c'est !
La suite de Fibonacci ?
oui, c'est la suite de Fibonacci. si tu veux voir plus précisément, fais lui afficher x dans chaque boucle avec une pause pour avoir le temps de lire, ou bien tu le fais compter jusqu'à 100, à moins que tu aies une instruction"delay"
"End
Else
x-->3x+1
End
************
End
Disp N"
entre les deux end :
disp X
for (I,1,100) **************une boucle pour rien, juste pour le faire attendre
endfor
Ce que j'ai écrit c'était bon ?
Je ne comprends pas en quoi consiste la suite Fibonacci
Pour x=9, n = 19 --> je comprends mais pour x=4, alors n=2 je ne comprends pas !
-------------------------------------------------------------------------------
J'ai un autre algo :
Mais je ne sais pas pourquoi il ne marche pas !
Peux-tu me mettre ce que tu rentrerais :
C'est pour les nombres triangulaires :
-->
suite de Fibonacci :
tu pars de n'importe quel nombre
et ensuite, en boucle, s'il est pair tu divises par 2 sinon tu multiplies par 3 et tu ajoutes 1
10 - 5 - 16 - 8 - 4 - 2 - 1
25 - 76 - 38 - 19 - 58 - 29 - 88 - 44 - 22 - 11 - 34 - 17 - 52 - 26 - 13 - 40 - 20 - 10 - ...
(ça se termine tjs par 4 - 2 - 1.)
je regarde l'algo tt à l'h
je reviens d'abord sur Fibonacci :
N --> 0
Input X
While x!=1
N--> N+1 ****************
If int(x/2)=x/2
Then
x-->x/2 *****************
End
Else
x-->3x+1 ***************
End
for (i,1,100) *************** on le fait compter jusqu'à 100
end
End
Disp N
attribuer une valeur à une variable, s'appelle l'affectation.
et c'est T_n pred pour valeur (T_n)+i le i n'est pas en indice.
(tu peux jeter un oeil ici :
dans algobox c'est sous la forme x prend pour valeur 3.
sur la Ti la syntaxe est on stocke 3 dans x, c-à-d 3->x
tu dois donc modifier les 3 lignes signalées + haut
______________________________________________________
pour les nb triangulaires
il faut initialiser T_n au début de l'algorithme, avant ou après "lire n" :
0->T_n
et ensuite tu ajoutes au fur et à mesure, toutes les valeurs de i, de 1 à n.
Donc T_n= 1+2+3+...+n
(j'ai un clavier caractériel, qui se met en majuscules, qui sélectionne n'importe quoi, qui s'emballe sur la dernière lettre tapée .... bref, je fais avec, mais ça m'énerve )
donc, je recommence entièrement le dernier post :
je reviens d'abord sur Fibonacci :
N --> 0
Input X
While x!=1
N--> N+1 ****************
If int(x/2)=x/2
Then
x-->x/2 *****************
End
Else
x-->3x+1 ***************
End
for (i,1,100) *************** on le fait compter jusqu'à 100
end
End
Disp N
attribuer une valeur à une variable, s'appelle l'affectation.
dans algobox, ça se fait sous la forme x prend pour valeur 3
Sur la TI, on stocke 3 dans x qui s'écrit 3->x
tu dois donc changer les 3 lignes que j'ai signalées dans le programme.
(mais ton programme tournait bien ?)
____________________________________________________
pour les nb triangulaires
il faut initialiser T_n au début de l'algorithme, avant ou après "lire n" :
0->T_n
et ensuite tu ajoutes au fur et à mesure, toutes les valeurs de i, de 1 à n.
Donc T_n= 1+2+3+...+n
et c'est T_n prend pour valeur (T_n)+i le i n'est pas en indice.
(tu peux jeter un oeil ici : [http://fr.wikipedia.org/wiki/Nombre_triangulaire] )
0 --> N
Input X
While x!=1
N+1 --> N ****************
If int(x/2)=x/2
Then
X/2 --> X *****************
End
Else
3x+1-->X ***************
End
for (i,1,100) *************** on le fait compter jusqu'à 100
end
End
Disp N
J'ai tout modifié mais ça ne marche pas !
Pour les nombres triangulaires, je regarde après avoir fini celui-ci.
0 --> N
Input X
While x!=1
N+1 --> N
If int(x/2)=x/2
Then
X/2 --> X
End <---------------tu as un end en trop ici je pense. Supprime cette ligne
Else
3x+1-->X
End <------------ ou alors il faut en rajouter un 2èmé ici
for (i,1,100)
end
End
Disp N
et ça :"While x!=1" tu l'as écrit comme ça ?
ou bien x≠1 ?
et qu'est-ce qui ne marche pas ?
Si tu veux voir défiler les nb, il faut lui demander de les afficher. Tu n'affiches que N qui est le nb de calculs qu'il a fait
0 --> N
Input X
While x!=1
N+1 --> N
If int(x/2)=x/2
Then
X/2 --> X
End
Else
3x+1-->X
End
<--------------------------après le "end", rajoute : "disp X"
for (i,1,100)
end
End
Disp N
Je rentre X et il me dit ERREUR.
Là, je fais Goto et il me redirige soit sur le ELSE ou sur le deuxième End de la série de deux à la fin.
Je ne sais plus quoi faire !
dans le programme d'hier sur la colinéarité, tu avais utiliséé le if ...then... else ... ?
avec ou sans "end" ?
Sinon, essaie Fibonacci avec 2 "if
if X pair...
if x non pair ...
et comment avais-tu mis les "end" ?
fais la même chose aujourd'hui
et si ça ne marche toujours pas, utilise deux "if"
Ça marche toujours pas !
Mais peux tu me donner l'écriture avec les IF parce que je comprends pas très bien le truc là !
Merci encore
qd tu dis que ça nemarche pas, il te mets une erreur ou bien tu ne vois pas ce qu'il fait ?
une fois le programme achevé regarde ce qu'il y a dans X (tu fais X <entrée>) et dans n.
Je te conseilles de tout effacer et de recommencer ; qqfois c'est une erreur de saisie infime que l'on ne voit pas
je te donne le prgr tel qu'il est sur ma calculatrice (vieille TI82) et il tourne très bien
input X
while x≠1 (et c'est bien le signe ≠, pris dans le menu "test")
if int(X/2)=X/2
then
X/2->X
else
3X+1->X
end
disp x
for (I,1,100)
end
end
ce prgr affiche les nb de la suite, mais pas combien de bouclesz il fait.
S'il tourne comme ça, tu peux ensuite ajouter un competeur de boucles :
input X
<-------------- 0->n
while x≠1
if int(X/2)=X/2
then
X/2->X
else
3X+1->X
end
<--------------- n+1->n
disp x
for (I,1,100)
end
<---------------- disp n
end
si la première mouture ne tourne pas remplace ces 6 lignes :
if int(X/2)=X/2
then
X/2->X
else
3X+1->X
end
par :
if int(X/2)=X/2
then
X/2->X
end
if int(X/2)≠X/2
then
3X+1->X
end
tu pourras ensuite rajouter le compteur
Bonsoir,
En suivant votre conseil, j'ai recopié l'algorithme et il marche maintenant à merveille !
J'avais en fait fait une faute de frappe !
Mais à quoi sert le compteur de boucle ? qu'est-ce que c'est ces boucles ?
Je me concentre après sur l'algorithme des nombres triangulaires !
bonjour canonique
je suis contente que cela marche enfin.
les boucles
en programmation, il y a 3 sortes de boucles (une suite d'instructions répétées plusieurs fois avec un changement d'une ou plusieurs variables à chaque "tour")
- pour i allant de 1 à n : on sait d'avance qu'il faut faire n boucles.
- tant que .... fin : répéter des actions tant que l'on n'a pas le résultat voulu. Il faut être sûr que cette suite de boucles s'arrêtera ! mais on ne sait pas combien il y aura de boucles, c-à-d combien de fois ces instructions seront effectuées.
- répéter .... jusqu'à (qui ressemble beaucoup à l'instruction tant que...)
le compteur :
dans Fibonacci, as-tu vu défiler la liste des nb ? si le défilement est trop rapide fais le compter plus longtemps
for(i, 1, 300)
end
tu as pu voir que qqfois il arrive vite aux 3 derniers nb (4, 2, 1) mais d'autres fois, la liste est plus longue.
pour avoir la longueur de cette liste, on place un compteur n (souvent, en programmation on appelle cette variable cpt, pour donner des noms plus parlant, mais ce n'est pas possible sur les calculatrice):
on initialise n à 0 avant le programme, et dans chaque boucle du "tant que", on lui rajoute 1 ; c'est le n+1->n. à la fin, le prgr te donne le nb de boucles.
amuse-toi bien avec les nb triangulaires
autre pistes de programme :
- le jeu "c'est plus - c'est moins" (et tu peux compter en combien de coups on trouve)
- demander les coord. de 4 points et dire si l'on a un parallélogramme ou pas (attention, 2 cas de figures possibles)
- additionner deux fractions après avoir calculé pgcd et ppcm
bonne journée
(je ne serai pas là aujourd'hui)
Ça y est, j'ai fait l'algorithme sur les nombres triangulaires et il marche ! Je m'étonne moi-même...
0-->K
Input "N:",N
For(I,1,N)
K+I-->K
End
Disp "T2N:",K
Voilà ! Maintenant, je m'intéresse aux autres idées d'algorithmes !
Merci encore.
Le programme du jeu "C'est plus-C'est moins" m'intéresse fortement !
Les autres me déplaisent pas, mais après !
J'y réfléchis et j'écris le programme mais qui me semble bon !
Bonne journée
Pour le jeu du "C'est plus, c'est moins", j'ai fait deux programmes.
Le premier où le joueur doit trouver le nombre aléatoire généré par la calculatrice :
randInt(0,1000) --> Y ***** on choisit de générer un nombre aléatoire entier sur l'intervalle [0,1000]
Disp "Donner 1 Entier"
Disp "Entre 0 et 1000"
Input "NB:",X
1 --> I
While XY
If X>Y
Then
Disp "C'est moins"
Else
Disp "C'est plus"
End
1 + I --> I
Prompt X
End
Disp "Reponse:",Y
Disp "Nombres de parties, de tours",I
Disp "Bravo !"
----------------------------------------------------------------------------------------------
Le jeu 2, je l'ai crée par dichotomie:
C'est nous qui pensons à un nombre et c'est le programme qui doit le trouver !
CLrHome
0-->A
100 --> B
While B-A>2
ClrHome
int((A+B)/2)--> C
Disp "C:",C
Disp "+ Petit taper 1"
Disp "Plus grand taper 2"
Disp "Trouvé taper 3"
Input "X:",X
If X=1
Then
C --> B
End
If X=2
Then
C --> A
End
If X=3
Then
C --> A
C --> B
End
End
int((A+B)/2) --> C
Disp "Eureka, j'ai trouvé", C
-----------------------------------------------------------------------------------
Voilà, je me suis beaucoup amusé à faire ces deux programmes ! C'était génial ! Merci
Est-ce que il existe d'autres jeux que l'on peut faire comme ça ? Ça serait tellement génial et cool de ta part de m'aider à les faire !
Je m'occupe des deux autres demain !
Bonsoir
tu as bien "travaillé" !
_________________________________
les nb triangulaires
0-->K
Input "N:",N
For(I,1,N)
K+I-->K
End
Disp "T2N:",K <---------------pourquoi le 2 de T2N ?
oui, c'était bien le principe. En fait, tu apprendras bientôt que Tn=n(n+1)/2
___________________________________
"c'est + c'est -"
progr. 1
Le premier où le joueur doit trouver le nombre aléatoire généré par la calculatrice :
randInt(0,1000) --> Y
Disp "Donner 1 Entier"
Disp "Entre 0 et 1000"
Input "NB:",X
1 --> I
While X≠Y
If X>Y
Then
Disp "C'est moins"
Else
Disp "C'est plus"
End
1 + I --> I
Prompt X <-------------------que fait cette instruction ?(je ne la connais pas)
End
Disp "Reponse:",Y
Disp "Nombres de parties, de tours",I
Disp "Bravo !"
_____________________________________
progr.2
CLrHome
0-->A
100 --> B
While B-A>2
ClrHome
int((A+B)/2)--> C
Disp "C:",C
Disp "+ Petit taper 1"
Disp "Plus grand taper 2"
Disp "Trouvé taper 3"
Input "X:",X
If X=1
Then
C --> B
End
If X=2
Then
C --> A
End
If X=3
Then
C --> A
C --> B
End
End
int((A+B)/2) --> C <------------cette instruction me semble inutile car qd tu arrives à cette ligne, tu as déjà A=B=C.
essaie de la supprimer
Disp "Eureka, j'ai trouvé", C
________________________
à part ça, je n'ai pas d'autres idées de jeux que je pourrais t'aider à programmer.
Un autre programme possible (tu n'as pas un petit frère ou un petite soeur dans le primaire ?) : faire réciter les tables de multiplication :
tu choisis aléatoirement 10 fois 2 nb entre 1 et 9 (ou 10) et tu demandes le résultat.
Tu affiches ensuite vrai ou faux ( en donnant la bonne réponse) et à la fin des 10 questions, tu donnes le nb de bonnes réponses.
T2N = T de N = Tn
J'ai supprimer la ligne de programme et ça marche impeccable apparemment !
Oui ce programme m'intéresse assez avec l'histoire des tables de multiplication ! Je voudrais bien essayer de le faire.
Mais d'abord, j'aimerais me concentrer sur le programme avec les coordonnées de quatre points pour savoir si c'est un parallélogramme.
Pourrais-tu me donner une petite piste de recherche ?
PS : non, je n'ai pas de frères ou soeurs qui soient en primaires ou maternelles
Bonsoir
bonjour canonique
pour le parallélogramme
tu demande les coord. des 4 points A, B, C et D (donc 8 fois "input") que tu stockes dans 8 variables.
ABCD est un parallélogramme si [AC]et [BD] ont même milieu (il faudra vérifier absc. et ordonnées et donc utiliser le "and")
ou ABDC est un parallélogramme si [AD] et [BC] ont même milieu
utilisation du "and" : un nb est divisible par 6 s'il est divisible par 2 et par 3
if (int(A/2)=A/2) and (int(A/3)=A/3) ....
A la fin du programme, tu pourras te payer le luxe d'afficher soit "ABCD est un parallélogramme", soit "ABDC est un parallélogramme"
_________________________________________
une remarque à propos de input (pour le 2ème programme "c'est+c'est-" par ex.) : qd on a l'instruction input, il faut rentrer un nb puis faire entrée.
Dans le cas où tu sais qd tu fais le progr que la réponse ne contiendra qu'un caractère (répondre 1-plus petit, 2 ...ou 3...) tu peux alors utiliser la commande "getkey" ça s'appelle la "saisie au vol"
Disp "+ Petit taper 1"
Disp "Plus grand taper 2"
Disp "Trouvé taper 3"
Input "X:",X <--------------- et remplacer cette ligne par
0->X
while X=0
getkey() -> X
end
(l'utilisateur n'aura pas besoin de faire entrée après la saisie) Mais, je ne suis pas très sûre de la syntaxe, n'ayant pas cette instruction sur ma calculatrice
getKey Donne le code de la
dernière touche enfoncée
ou 0 si aucune touche n'a
été enfoncée.
†PRGM
I/O
7:getKey
_________________________________________
autre remarque
au fur et à mesure que tu feras des programmes, il faudra apprendre à "blinder" c-à-d devancer tout risque d'erreur du programme.
par exemple que ce passerait-il dans le même progr. si tu rentrais 4 ou 9 ?
avec la commande getkey,
il faudrait remplacer while X=0
par while (X<1) or(X>3)
avec la commande input :
Pour le programme du parallélogramme, je l'ai fait il marche !
Input "XA:",A
Input "YA:",B
... **************** idem pour les points B et C avec les lettres C, D, E, F.
Input "XD:",G
Input "YD:",H
(A+E)/2 --> I
(B+F)/2 --> J
(C+G)/2 --> K
(D+H)/2 --> L
If I=K and J=L
Then
Disp "C'est un parallélogramme"
Else
Disp "Ce n'est pas un parallélogramme"
End
Et il marche !
----------------------------------------------------------------------------------------------
Pour la fonction Getkey, je l'ai trouvé ! Mais je ne sais pas comment l'intégrer !
J'ai trouvé une image qui pourrait nous aider, mais je ne sais pas comment me débrouiller avec le reste
Merci encore
*** je ne comprends rien à ce site
J'aimerais trouver un programme pour savoir la valeur de la touche !
Mais ils sont tous faux !
merci
bonsoir
parallélogramme
bravo pour ton prgr, mais, le parallèlogramme pourrait être ABDC et non ABCD ; il te faudrait un deuxème test
getkey
donc, tu as compris ce que fait getkey. Chaque touche a son propre code, qui n'a rien à voir avec la valeur de la touche.
le premier lien que tu as donné ne marche pas ?
tu peux essayer :
0->G
while G≠105
getkey->G
if G≠0
disp G
end
end
(je suppose que la touche "entrée" a pour code 105)
qd tu lances le proramme,chaque fois que tu appuies sur une touche, il t'affiche, normalement, le code de la touche.
L'as-tu testé ? S'il ne marche pas, dis-moi ce qu'il fait et regarde ce qu'il y a dans la variable G. Marque-t-il un message d'erreur ?
Si 105 n'est pas le code de la touche "entrée", peut-être que tu auras du mal à sortir du prgr. Tu peux repérer le code de "entrée", éteindre la calculatrice puis modifier la condition d'arrêt G≠105.
une fois que tu auras trouvé le code des touches tu pourras modifier ton prgr avec les touches +, -, ou 0(pour "gagné")
(je n'aurai pas beaucoup accès à internet pour les 10-12 jours à venir, mais tu peux continuer à poster, je répondrai qd l'occasion se présentera)
attention, après un if, le "end" est peut-être un "endif" (pour ta machine, je ne sais pas)
Sur la TI92, "entrée" a pour code 13, "=" 61 ;"+" 43 ; "-"45
tu peux essayer :
0->G
while G≠105
getkey->G
if G≠0
disp G
endif <---------------
endwhile <------------
Quel deuxième test ?
-------------------
Le programme marche ! Mais quand je clique sur Entrer, là il me dit qu'il y a une erreur et il se met sur le dernier End de la fin.
Comment pourrait-on donc intégrer le GetKey dans le programme.
je parlais du prgr où l'ordinateur trouve le nb choisi par l'utilisateur.
progr.2
On pourrait modifier cette partie ; as-tu repéré les codes des touches +, - et de la touche que tu as choisie pour "gagné"
Disp "+ Petit taper 1" <------------
Disp "Plus grand taper 2" <------------ tu modifies le message
Disp "Trouvé taper 3" <-----------
getkey->X
while X=0
getkey->X
endwhile
If X=1 <------------- il faut alors modifier les valeurs 1,2 et 3 pour le traitement suivant
Then
C --> B
End
If X=2 <-----------------
Then
C --> A
End
If X=3 <----------------
Then
Si l'utilisateur appuie sur n'importe quelle touche, ça risque de bugger, mais on verra plus tard
(je te laisse remplacer le endwhile que je viens d'ajouter dans le dernier post)
et je m'arrête là pour ce soir (mais je pourrai regarder demain matin)
Vous devez être membre accéder à ce service...
Pas encore inscrit ?
1 compte par personne, multi-compte interdit !
Ou identifiez-vous :