Avertissement :Il s'agit d'une page optimisée pour la navigation mobile. Voir la
page originale.
Un peu d'algorithmique / simplification de programme
The K le 10/10/2011 à 19:16
Bonjour à tous

Je vous poserai deux questions ici ... la première, la voici. J'aimerai savoir si il y a moyen de faire sur TI un algorithme tel que celui-ci :
Demander A,B,C
(la partie que je ne sais pas : )
Trouver U et V tel que :
AC = UV
B = U+V
(et enfin : )
Afficher U
Afficher V
Ma seconde question est de savoir si on peut raccourcir ce bout de code qui est (je trouve) très lourd
Code
Prompt B
If B=0:Goto 2B
Prompt C
If C=0:Goto 2B
Prompt D
If D=0:Goto 2B
Prompt E
If E=0:Goto 2B
Prompt F
If F=0:Goto 2B
Prompt G
If G=0:Goto 2B
Prompt H
If H=0:Goto 2B
Merci à vous d'avance
The K
The K le 10/10/2011 à 21:02
Euh ... AC -> U ?
J'ai marqué "AC = UV" ^^' T'es sur de toi ^^'
(si je me trompe la faudra m'expliquer

)
tilo1996 le 10/10/2011 à 21:08
Ah oui en effet. Je revois mon prog... [Edit] Je suis un peu cramé... Je verrai demain...

Je supprime mon premier post
The K le 10/10/2011 à 21:18
Nan parce que moi j'ai essayé qqes petits trucs, mais je tombais sur des carrés ce qui impliquait plusieurs solutions, un code assez dense (et au passage pas de mon niveau ^^), etc etc ...
Bref ^^'azerty1 le 10/10/2011 à 21:19
Tu veux que cela gère les décimaux, ou seulement les entiers (relatifs)?
Si seulement entiers, on peut décomposer le produit AC et dans les facteurs trouvés, en rassemblé certains (en multipliant) pour arriver a ce que la somme de 2 facteurs donnant AC soit égale à B, je me penche plus dessus demain si j'ai le temps

Sachant que j'ai déjà un code pour décomposer un nombre en facteurs (premiers).
The K le 10/10/2011 à 21:53
L'idéal serait de trouver un code qui marche pour tous les nombres

Mais je suis preneur de tout ^^ et aimerai bien voir le pgrm que tu me décris ^^
azerty1 le 10/10/2011 à 22:05
Oui évidemment!

Regarde
ici!

après si les facteurs trouvés ne suffisent pas, ont peut toujours rajouter des 1...

Métalocif le 11/10/2011 à 17:27
Pour raccourcir ton code,utilise la propriété du produit nul:
Code
Prompt [tes valeurs]
If BCDEFGH=0
Goto 2B
Ce code implique que si une seule des variables est nulle,le programme saute jusqu'au label 2B...ce qui est, je l'espère, ton souhait(dans le cas contraire, je devrais me remettre en question et je déteste ça!

) !
En espérant t'avoir aidé,
Métalocif
The K le 11/10/2011 à 22:01
Metaloctif, ma (lourde) méthode me permettait de passer direct au 2B si E était égal a 0. Ici, ce que tu me décris est exactement la mm chose que ça :
Code
Prompt B, C, D, E, F, G, H
Goto 2B
Donc voilà ^^' (cependant tu mets l'index sur un défaut de mon programme ... Il aurait fallu que je rajoute ça a la fin : If H [différent de] 0 : Goto 2B (ou qqchose du même genre

) )
Quand à toi Trotuthutur, eh bien ... Mes modestes connaissances de ti-basic font que je ne comprend ... Strictement rien a ton code XD. Et donc par conséquent je ne comprend pas le rapport de ton programme avec mon algorithme ><'
Une explication ^^' ?
Métalocif le 12/10/2011 à 13:53
Au fait que tu sembles avoir des difficultés à orthographier des pseudos n'étant pas une lettre de l'alphabet? Aucune.
Plus sérieusement (et avec moins de méchanceté),tu peux essayer la méthode dite de substitution pour résoudre les systèmes:
AC=UV
Donc U=AC/V
Avec la deuxième équation:
B=U+V
B=AC/V+V
Bon,là ça ne marche pas, mais tu vois l'idée...
Ta lourde méthode te permettait effectivement d'arrêter de demander des valeurs dès qu'une est égale à 0.La mienne, bien que plus légère, n'offrait pas cette possibilité.
Je dois aller au lycée

,mais je reviendrai!
M
étalo
cif
The K le 12/10/2011 à 18:52
Dsl de la faute d’orthographe x')Mais c'est pas toujours simple depuis un ipod ... bref je regarde ce que tu m'as envoyé et j'y réfléchis ...The K le 12/10/2011 à 19:25
En fait ce que me dis est vrai ... Mais ne m'avance pas

Parce que sinon on tombe sur des trucs Genre :
U=AC/(B-U) sachant qu'on ne connais pas U donc :
U=AC/[B-(AC/(B-U))] etc. Etc.
Peut être mon algorithme est impossible a résoudre par calculette

sandro le 12/10/2011 à 21:53
Je crois que j'ai réussit à trouver mathématiquement (se mettre en mode complexxe pour éviter les erreures, cout à éliminer les solutions non réelles par la suite). Voici le résonnement (je suis trop fatiguer pour le programmer ce soir, je m'y met demain si j'ai le temps.
AC=UV
B=U+V
V=AC/U
B=U+AC/U
BU=U²+AC
0=U²-BU+AC
Delta =B²-4*1*AC
U1=(B-rac(B²-4AC))/2 et U2=(B+rac(B²-4AC)/2
Donc V=AC/U1 ou AC/U2
Il reste plus qu’a vérifier si les résultats sont cohérents (je ne suis pas sur que ce soit tous des équivalences, donc il faut vérifier numériquement la réciproque).
ATTENTION : si B=0, alors U=0 et/ou V=0 donc AC = U ou AC = V
SandroThe K le 12/10/2011 à 22:16
Merci a toi sandro

Mais j'ai cependant qqes questions

Multiplier l'équation au carre, oui, mais ne faut il pas faire, tôt ou tard après, une racine carrée ?
Sinon, si B=0, U ou/et V n'est pas forcément égal à 0 ... -3+3 est bien égal à 0

sandro le 13/10/2011 à 18:54
Ups, oublie donc cette dernière partie, le reste n'en reste pas moins correct (enfin je pense).
Sinon, tu t'occupe toi même de le programmer ou tu as besoins d'aide?
SandroThe K le 14/10/2011 à 16:03
J'essaie un petit pgrm on verra

The K le 14/10/2011 à 16:42
Donc voila ce que j'ai essayé :
Code
EffEcr
Prompt A,B,C
(B-[racine](B²-4AC)/2 -> D
(B+[racine](B²-4AC)/2 -> E
AC/D -> F
AC/E -> F
Disp "U1",D,"V1",F,"U2",E,"V2",F
Pause
EffEcr
Passons au test : 4x²-7x+3=0
A=4 B=

7 C=3
Une solution est le système (-4);(-3)
Car : (-4) + (-3) = (-7) = B
(-4) x (-3) = 12 = AC
Or ma TI ne m'indique pas ce système en solution ... en fait elle me met deux systèmes dont le produit est bel et bien égal à AC mais dont la somme n'est pas égale à B.
Une petite idée sinon pour simplifier mon code du premier post ^^' ?
sandro le 14/10/2011 à 21:15
Um, je crois qu'il manque une parrenthèse avant les /2.
Sinon, y a-t-il un énnoncé d'origine? si oui, pourrais-tu le poster, ça purrais peut-être me donner des idées.
SandroThe K le 14/10/2011 à 22:34
Et le pire c'est que t'as raison xD
J'avais juste oublie une parenthèse

Si tu veux savoir pour quoi c'était ... C'est la manière british de trouver le discriminant (je fais classe euro) c'est fou comment ils se compliquent la vie je trouve
Hum et sinon pour mon code du premier post que penses tu d'une boucle avec hile et produit nul genre ça ?
Code
1-> I
While I [différent de] 0
Prompt A: AI -> I
End
Goto 2B
Avec des valeurs de A a H y a t'il moyen de faire un code pas beaucoup plus long ?
(je ne connais pas toutes les instructions utilisables

)
Merci en tous cas pour ton algorithme sur U et V
[/code]
sandro le 15/10/2011 à 10:26
Le plus simple serait :
Code
Lbl 2
Prompt B,C,D,E,F,G,H
If non(BCDEFGH:Goto2
Mais ça à l'inconvéniant que l'on recommence que à la fin si jamais il y a une erreur.
Sinon tu aurrais aussi
Code
{0 -> L1
"BCDEFGH -> Chaîne1
Lbl 2
For(A,1,7
Imput SousChaîne(Chaîne1,A,1),Z
Z -> L1(A
If non(prod(L1:Goto 2
End
L1(1 -> B:L1(2 -> C:L1(3 -> D:L1(4 -> E:L1(5 -> F:L1(6 -> G:L1(7 -> H
Ce code est bien plus éfficace si tu enlève la première ligne et que reemploi directement la liste ou ses valeures.
Sandro
PS : pour ton code, tu peut simplifier par
Code
0 -> A
While non(A
Prompt A
End
//puis tu recommence avec B, puis C, ...
The K le 15/10/2011 à 11:12
Euh ... ton second code est un peu compliqué pour moi pour la simple et bonne raison que je ne maitrise, ni n'utilise les chaines ^^' A quoi servent elles ?
Et dans le troisième je ne comprends pas trop le rôle du "non" ... ça veut dire "tant que A n'a pas de valeur, demander A" ?

sandro le 15/10/2011 à 21:42
le non( signifie "0=(" mais c'est plus rapide et plus optimisé.
pour les chaînes (c'est du texte en variable), tu peut à la place faire ça (même si c'est un peu moins beau:
Code
{0 -> L1
Lbl 2
For(A,1,7
Imput "NOMBRE",Z
Z -> L1(A
If non(prod(L1:Goto 2
End
L1(1 -> B:L1(2 -> C:L1(3 -> D:L1(4 -> E:L1(5 -> F:L1(6 -> G:L1(7 -> H
Sandro
PS : la chaîne servait ici à afficher les lettres.
linkakro le 15/10/2011 à 21:49
Les chaînes contiennent du texte.
On peut appliquer des tests sur ces chaînes et surtout "découper" les chaînes avec la fonction sous-chaîne.
Sans entrer dans les détails, il utilise une chaîne pour qu'un seul input affiche successivement A,B,...,H : cela évite de multiplier les input et prompt.
"non(" est une opération logique.
Elle transforme 0 en 1 et tous les autres nombres en 0.
sandro: une bonne fois pour toute, utilise Repeat A plutôt que While non(A quand le test est innutile à l'entrée.sandro le 15/10/2011 à 21:54
Ups, désolé, je l'oublie souvant celui là.linkakro le 15/10/2011 à 22:28
Le système revient effectivement à résoudre X^2-BX+AC.
Sauf que je l'ai trouvé en appliquant des propriétés connues et avec une recherche : X^2-SX+P dont les solutions sont déjà établies comme étant les antécédents de S et P par somme et produit.
Je suis surpris que tu aies trouvé l'équation du second degré si facilement.
A plusieurs vous auriez dû trouver la résolution vu que vous aviez déjà l'équation.
Je crois que le C ne sert à rien.
Code
Prompt A,B,C
rac(B^2-4AC->D
Disp (B-D)/2,(B+D)/2
The K le 16/10/2011 à 10:37
Les chaînes servent à rentrer des caractères et les sous-chaînes à les morceler euh ... puis-je avoir un petit exemple svp ^^'
Je veux dire, c'est pas que l'algo que vous proposez est faux, mais mélanger des listes et des chaînes quand j'ai du mal avec les listes et que je ne connais pas les chaînes, bref ...
Merci à vous

sandro le 16/10/2011 à 20:19
pour les chaînes :
Code
Disp "ABC" // ABC est une chaîne
"ABC" -> Chaîne1 //Chaîne1 est dans Var/7/1 ; enregistre ABC dans la variable chaîne
Disp "ABC"+"DE" //affiche ABCDE
Disp sousChaîne("ABCDE",2,3 //affiche BCD
Longueur("ABCDE" //donne 5
CarChaîne("ABCDE","BCD" //donne 2
Carchaîne("ABCDE","FIG" //donne 0 (pas trouvable)
Carchaîne("ABCDEABCDE",AB,2 //donne 6 (on ne cherche que à partir du second carractère)
Sandro
The K le 16/10/2011 à 20:57
Ah ok ... Merci a toi ça pourra me servir je pense
Tiens pendant que j'y suis et étant curieux ... A quoi correspondent les "BDG" et "Img" dans les variables

?
azerty1 le 16/10/2011 à 21:11
Image, ce sont des images

que tu peux dessiner, sur le graphique, puis sauvegarder [2nde]+[prgm] tu trouveras tout se dont tu as besoin, et les BDG en gros se sont des propriétés comme la taille de la fenetre etc... Tu peux sauvegarder et rappeler tout cela dans un programme

Persalteas le 17/10/2011 à 08:34
banque de données graphiques (BDG) sauvegarde toutes tes fonctions [f(

] de tous les modes, la taille de ta fenêtre, et les paramètres de graphique (axes On-Off, quadrillage etc...)
The K le 19/10/2011 à 14:16
Ah d'accord ^^
Et comment les utilises-t-on ?

Je veux dire, dans un programme, que doit on mettre comme instruction pour faire fonctionner le code ?

sandro le 19/10/2011 à 21:29
SauveImage X ou SauveBDG X avec X un entier de 0 à 9 pour sauvegarder
RappelImage X ou RappelBDG X idem mais il faut que l'on ai déjà sauvegardé ultérieurement (dans le programme ou avant).
C'est fonctions peuvent par example servir à remettre la TI comme avant un jeu : au début tu sauvegarde les deux, et à la fin tu les restaure et tu les supprime avec DelVar.
SandroThe K le 21/10/2011 à 16:39
Ah oui ! J'ai déja vu ça dans quelques programmes que j'ai recopié

bref, merci à toi Sandro et à tous ceux qui m'ont répondu ici

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