Avertissement :Il s'agit d'une page optimisée pour la navigation mobile. Voir la
page originale.
Un Pythagore amélioré
pito2901 le 15/05/2013 à 13:54
Bonjour, je souhaite avoir de l'aide sur la réalisation d'un programme:
Je souhaite avoir le Th de Pythagore amélioré, c'est à dire qu'on rentre:
1° Les trois poins du triangle avec la commande input
2° le pgrm affiche "dans le triangle _ _ _ rectangle en _"
3° un espèce de menu que j'ai recopié et adapté: "je cherche" les longueurs de "l'hypothénuse", un des côté qui sera nommé par les lettres rentrées et l'autre côté nommé de la même façon.
Voici mon début de code:
Code
Input "POINT RECTANGLE",N // malheureusement ces trois input servent à rentrer
Input "POINT 2",O des chiffres et non des lettres, il affichera des
Input "POINT 3",P chiffres
EffEcr
Disp "DANS LE TRIANGLE"
Output(2,1,O
Output(2,2,N
Output(2,3,P
Output(2,5,"RECTANGLE"
Output(3,1,"EN "
Output(3,4,N
Pause
2->dim(L1
{1,0,-1}
Normal
Flottant
EffEcr
Output(1,1," HYPOTHENUSE"
Output(2,2,O):Output(2,3,N
Output(3,2,P):Output(3,3,N
2->A
1->B
Output(2,1,"1 // j'aimerais bien changé ce 1 par >
For(W,1,2
Repeat K=105
Output(A,8B-7," "
A+(K=34)-(K=25)->A
B+(K=26)-(K=24)->B
If A=0
3->A
If A=4
1->A
If B=0
1->B
If B=2
1->B
L1(A,7B-7->C // ici j'ai une erreur:dim invalide et le curseur est sur ->
Ce menu est
ici Kelk'1 le 15/05/2013 à 16:30
Code
:Input "cotés non rect",Chaine 1
:Input "coté rect",Chaine 2 //tu peux aussi demander de rentrer le nom dans une seule liste et con naitre la position du coté à 90 degré, ça sera plus simple
EffEcr
Disp "DANS LE TRIANGLE"
Output(2,1,Chaine 1
Output(2,3,Chaine 2
Output(2,5,"RECTANGLE"
Output(3,1,"EN "
Output(3,4,Chaine 2
Pause
2->dim(L1
{1,0,-1}
Normal
Flottant
EffEcr
Output(1,1," HYPOTHENUSE"
Output(2,2,O):Output(2,3,N // je ne vois pas pk tu fais cela x) , , mais si tu y tient: remplace O par Souschaine(Chaine 1(1,1, P par Souschaine(Chaine 1(2,1 et N par Chaine 2
Output(3,2,P):Output(3,3,N
2->A
1->B
Output(2,1,"1 // j'aimerais bien changé ce 1 par > <=> le ">" se trouve dans "second" puis "maths"
For(W,1,2
Repeat K=105
Output(A,8B-7," "
A+(K=34)-(K=25)->A
B+(K=26)-(K=24)->B
If A=0
3->A
If A=4
1->A
If B=0
1->B
If B=2
1->B // remplaces ces 8 lignes là par
:3*(A=0)+(A=4)->A
:(B=0)+(B=2)->B
[L1(A,7B-7->C // ici j'ai une erreur:dim invalide et le curseur est sur ->] -> tu dois rajoter le "petit" L dont je t'ai deja parlé, de plus je ne comprends pas exactement ce que tu veux faire à C ?
ps: la prochaine fois entre ton pgrm sous forme de "code", comme moi ^, c'est plus bo non ?
linkakro le 15/05/2013 à 19:33
Non il n'ya aucun "petit L" à ajouter.
Ce petit L suivi de texte permettrai de désigner une liste personnalisée portant de texte comme nom.
C'est la virgule qui cause l'erreur : la liste L1 n'a qu'une seule dimension contrairement aux matrices donc donner deux arguments n'a pas de sens.
Corrige cette virgule avec un "+".
Rappel : "L," est la liste L2 mais on met ce qu'on veut.
Héhé je suis fier de mon menu. Cette méthode est massivement employée graphiquement (encore plus de calcul juste pour placer les caractères) par certains programme de programath si je me souviens et par Persalteas. Sauf que persalteas l'a probablement fait tout seul.
La substitution de Kelk'1 est défectueuse car les variables ne valent pas toujours les extrémités.
Remplacez par
Code
:A+3(A=0)-3(A=4)->A
:B+(B=0)-(B=2)->B
D'autre part B est bloqué à 1 donc on peut maintenant enlever les tests de B ou bien il faut élargir les bornes.
Autre variante si on conserve le modulo de l'un et limite l'autre.
Code
A+(K=34)-(K=25)->A
B+(K=26)-(K=24)->B
If A=0
3->A
If A=4
1->A
If B=0
1->B
If B=2
1->B
/////////////////
A+(K=34)-(K=25
Rép-3partEnt((Rép-1)/3->A // modulo [1,2,3] // autres solutions viables
max(1,min(2,B+(K=26)-(K=24)->B // limité entre 1 et 2
pito2901 le 15/05/2013 à 19:58
Merci bien les gars je testerai ça peut être demain.Kelk'1 le 15/05/2013 à 21:04
effectivement, désolé pour mes erreures, j'ai rédigé ma correction à la va vite.
La prochaine fois je me relirais avant de poster

pito2901 le 16/05/2013 à 18:25
ouai bon ça marche pas, ça donne quoi le programme et les corrections réunis svp ?linkakro le 16/05/2013 à 19:03
Tu n'affectes pas L1 et dimensionnes à deux termes donc cela plante forcément pour le choix trois.
Tu devrais utiliser des chaînes de caractères, soit une pour chaque point soit une seule découpée pour les affichages.
Tu n'as pas besoin de boucle For.
Malgré mon exemple de gestion de curseur, tu pouvais simplement supprimmer B.
Code
Input "POINT RECTANGLE",Chaîne1
Chaîne1
Input "POINT 2",Chaîne1
Rép+Chaîne1
Input "POINT 3",Chaîne1
Rép+Str1->Str1
EffEcr
Disp "DANS LE TRIANGLE"
Output(2,1,sous-chaîne(Chaîne,2,1
Output(2,2,sous-chaîne(Chaîne1,1,1
Output(2,3,sous-chaîne(Chaîne1,3,1
Output(2,5,"RECTANGLE"
Output(3,1,"EN "
Output(3,4,sous-chaîne(Chaîne1,1,1
Pause
// {1,0,-1->L1 // éventuellement innutile
EffEcr
Output(1,1," HYPOTHENUSE "+sous-Chaine(Chaîne1,2,1)+sous-Chaîne(Chaîne1,3,1
Output(2,2,sous-chaîne(Chaîne1,2,1)):Output(2,3,sous-chaîne(Chaîne1,1,1
Output(3,2,sous-chaîne(Chaîne1,3,1)):Output(3,3,sous-chaîne(Chaîne1,1,1
2->A
Repeat K=105
codeTouche->K
If K
Output(A,1," "
A+(K=34)-(K=25)->A
A+3(A=0)-3(A=4)->A
Output(A,1,">
// L1(A->C // éventuellement innutile
End
// valeur du choix de L1 dans C // éventuellement innutile
// indice du choix dans A
If A=1
Then
//hypoténuse23
End
If A=2
Then
//12
End
If A=3
Then
//13
End
Disp L // longueur calculée
pito2901 le 18/05/2013 à 10:04
qu'est ce que str 1 ? je pense que c'est chaîne 1
Sinon j'ai recopié le programme et dans cet espèce de menu, je ne peux pas déplacer le curseur, de plus le ">" clignote...
Et évidemment ce que je souhaite ensuite c'est que lorsque que le curseur est sur l'élément choisi, on appuie sur entrer et il nous calcule cet élément, pour les calculs je saurais faire...linkakro le 18/05/2013 à 10:53
str1 = chaine1 >> exactement, j'ai fait un lapsus scriptae, maintenant corrigé.
Voyons... j'ai simplement oublié le codeTouche.
Test que K est non-nul avant d'effacer et tada, plus de clignotement. (ajouté par rapport à mon post original, maintenant édité)
Dis moi à quoi sert ton L1 et je pourrai en tenir compte.
Pour l'instant L1 contient 3 valeurs qui identifient les points, et C est affecté par la valeur de L1 correspondante au point choisi.
Si L1 ne sert à rien, A pourra suffir à définir le choix.
Je place désormais L1 en commentaire.
J'ajoute une structure de fin exploitant A.
Sâche que la fonction Texte de l'écran graphique permet de concaténer tout type d'affichage contrairement aux autres fonctions et aux chaînes. Par exemple mélanger nombres et chaînes
Ensuite je posterai ci-dessous l'équivalent en Menu TI, ce sera plus simple que tout ce détournement de mon menu 2D. En effet on n'a qu'une seule Dimension et seulement 3 choix.
Code
Input "POINT RECTANGLE",Chaîne1
Chaîne1
Input "POINT 2",Chaîne1
Rép+Chaîne1
Input "POINT 3",Chaîne1
Rép+Str1->Str1
EffEcr
Disp "DANS LE TRIANGLE"
Output(2,1,sous-chaîne(Chaîne,2,1
Output(2,2,sous-chaîne(Chaîne1,1,1
Output(2,3,sous-chaîne(Chaîne1,3,1
Output(2,5,"RECTANGLE"
Output(3,1,"EN "
Output(3,4,sous-chaîne(Chaîne1,1,1
Pause
Menu("CALCUL","HYPOTENUSE "+sous-Chaine(Chaîne1,2,1)+sous-Chaîne(Chaîne1,3,1)),1
,sous-chaîne(Chaîne1,2,1))+sous-chaîne(Chaîne1,1,1)),2
,sous-chaîne(Chaîne1,3,1))+sous-chaîne(Chaîne1,1,1)),3
Lbl 1
Goto 4
Lbl 2
Goto 4
Lbl 3
Lbl 4
pito2901 le 18/05/2013 à 12:33
Je ne sais pas à quoi sert ce L1 comme je l'ai mis plus haut c'est un menu que j'ai repris...
Ton deuxième menu marche et je le garde merci.
Fin du topicpito2901 le 19/05/2013 à 13:12
Pour voir ce
programme terminé, et merci encore une fois.
Avertissement :Il s'agit d'une page optimisée pour la navigation mobile. Voir la
page originale.