Poster un nouveau sujet Poster une réponse
Un peu d'algorithmique / simplification de programme
Auteur Message
The K
Invité
Posté le : Lun 10 Oct 2011, 19:16   Citer 

Bonjour à tous happy.gif
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 crazy.gif


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

The K

  Haut de page Bas de page 
 
The K
Invité
Posté le : Lun 10 Oct 2011, 21:02   Citer 

Euh ... AC -> U ?
J'ai marqué "AC = UV" ^^' T'es sur de toi ^^'
(si je me trompe la faudra m'expliquer crazy.gif )

  Haut de page Bas de page 
 
tilo1996



Autorisation : Membre
Nb de messages : 122
Inscrit le : Sam 23 Avr 2011, 10:47
Posté le : Lun 10 Oct 2011, 21:08   Citer 

Ah oui en effet. Je revois mon prog... [Edit] Je suis un peu cramé... Je verrai demain... sad.gif Je supprime mon premier post

 Adresse email Haut de page Bas de page 
 
The K
Invité
Posté le : Lun 10 Oct 2011, 21:18   Citer 

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 ^^'

  Haut de page Bas de page 
 
azerty1



Autorisation : Membre
Nb de messages : 438
Inscrit le : Dim 12 Déc 2010, 20:44
Posté le : Lun 10 Oct 2011, 21:19   Citer 

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 winkle.gif
Sachant que j'ai déjà un code pour décomposer un nombre en facteurs (premiers).

----------------------
Ti-Connect 64bits
PROTECT
 Adresse email Haut de page Bas de page 
 
The K
Invité
Posté le : Lun 10 Oct 2011, 21:53   Citer 

L'idéal serait de trouver un code qui marche pour tous les nombres winkle.gif
Mais je suis preneur de tout ^^ et aimerai bien voir le pgrm que tu me décris ^^

  Haut de page Bas de page 
 
azerty1



Autorisation : Membre
Nb de messages : 438
Inscrit le : Dim 12 Déc 2010, 20:44
Posté le : Lun 10 Oct 2011, 22:05   Citer 

Oui évidemment! happy.gif Regarde ici! happy.gif après si les facteurs trouvés ne suffisent pas, ont peut toujours rajouter des 1... crazy.gif

----------------------
Ti-Connect 64bits
PROTECT
 Adresse email Haut de page Bas de page 
 
Métalocif



Autorisation : Membre
Nb de messages : 92
Inscrit le : Lun 10 Mai 2010, 19:24
Posté le : Mar 11 Oct 2011, 17:27   Citer 

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! angry.gif ) !
En espérant t'avoir aidé,
Métalocif

----------------------
"On ne ment jamais autant qu'avant les élections, pendant la guerre et après la chasse." Clémenceau
 Adresse email Haut de page Bas de page 
 
The K
Invité
Posté le : Mar 11 Oct 2011, 22:01   Citer 

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


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 ^^' ?

  Haut de page Bas de page 
 
Métalocif



Autorisation : Membre
Nb de messages : 92
Inscrit le : Lun 10 Mai 2010, 19:24
Posté le : Mer 12 Oct 2011, 13:53   Citer 

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 cry.gif ,mais je reviendrai!
Métalocif

----------------------
&quot;On ne ment jamais autant qu'avant les élections, pendant la guerre et après la chasse.&quot; Clémenceau
 Adresse email Haut de page Bas de page 
 
The K
Invité
Posté le : Mer 12 Oct 2011, 18:52   Citer 

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

  Haut de page Bas de page 
 
The K
Invité
Posté le : Mer 12 Oct 2011, 19:25   Citer 

En fait ce que me dis est vrai ... Mais ne m'avance pas notgood.gif
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 cry.gif

  Haut de page Bas de page 
 
sandro



Autorisation : Membre
Nb de messages : 1366
Inscrit le : Ven 25 Mar 2011, 22:58
Posté le : Mer 12 Oct 2011, 21:53   Citer 

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


Sandro

----------------------
mort à l'inutile, place à la mémoire libre et aux programmes
 Adresse email Haut de page Bas de page 
 
The K
Invité
Posté le : Mer 12 Oct 2011, 22:16   Citer 

Merci a toi sandro happy.gif
Mais j'ai cependant qqes questions winkle.gif
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 crazy.gif

  Haut de page Bas de page 
 
Google_AdSense



Publicité    



 
sandro



Autorisation : Membre
Nb de messages : 1366
Inscrit le : Ven 25 Mar 2011, 22:58
Posté le : Jeu 13 Oct 2011, 18:54   Citer 

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?

Sandro

----------------------
mort à l'inutile, place à la mémoire libre et aux programmes
 Adresse email Haut de page Bas de page 
 
Google_AdSense



Publicité    



 
The K
Invité
Posté le : Ven 14 Oct 2011, 16:03   Citer 

J'essaie un petit pgrm on verra winkle.gif

  Haut de page Bas de page 
 
The K
Invité
Posté le : Ven 14 Oct 2011, 16:42   Citer 

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=cupsmiley.gif7 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.

cry.gif cry.gif cry.gif cry.gif cry.gif cry.gif cry.gif cry.gif cry.gif cry.gif

Une petite idée sinon pour simplifier mon code du premier post ^^' ?

  Haut de page Bas de page 
 
sandro



Autorisation : Membre
Nb de messages : 1366
Inscrit le : Ven 25 Mar 2011, 22:58
Posté le : Ven 14 Oct 2011, 21:15   Citer 

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.

Sandro

----------------------
mort à l'inutile, place à la mémoire libre et aux programmes
 Adresse email Haut de page Bas de page 
 
The K
Invité
Posté le : Ven 14 Oct 2011, 22:34   Citer 

Et le pire c'est que t'as raison xD
J'avais juste oublie une parenthèse crazy.gif
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 crazy.gif

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


Merci en tous cas pour ton algorithme sur U et V happy.gif bigmouth.gif






[/code]

  Haut de page Bas de page 
 
sandro



Autorisation : Membre
Nb de messages : 1366
Inscrit le : Ven 25 Mar 2011, 22:58
Posté le : Sam 15 Oct 2011, 10:26   Citer 

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, ...



----------------------
mort à l'inutile, place à la mémoire libre et aux programmes
 Adresse email Haut de page Bas de page 
 
The K



Autorisation : Membre
Nb de messages : 850
Inscrit le : Sam 15 Oct 2011, 11:07
Posté le : Sam 15 Oct 2011, 11:12   Citer 

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" ?
crazy.gif

----------------------
La la la ...

Avez-vous pensé à regarder le manuel avant de demander conseil ? Un manuel est fait avant tout pour être consulté : MANUEL

Vous avez un problème avec l'ordinateur avec votre calculatrice ? SOLUTION EN VIDEO

Mes programmes sur le site : Produit scalaire KMorpion Puissance 4 Mastermind

Mes nouveaux programmes de calcul formel : FCarré FPrime

Projet base de données : ici mais abandonné. Trop de travail ...
 Adresse email Haut de page Bas de page 
 
Google_AdSense



Publicité    



 
sandro



Autorisation : Membre
Nb de messages : 1366
Inscrit le : Ven 25 Mar 2011, 22:58
Posté le : Sam 15 Oct 2011, 21:42   Citer 

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.

----------------------
mort à l'inutile, place à la mémoire libre et aux programmes
 Adresse email Haut de page Bas de page 
 
linkakro



Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Sam 15 Oct 2011, 21:49   Citer 

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.

----------------------
ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)

Pour tout le monde et surtout les débutants, quelques-uns des articles courants :
*Traductions Algorithmie/Ti-Basic.
*Caractères spéciaux sur Tout82
Les défauts du TI-Basic : Goto_versus_algo et DelVar/End/Lbl/guillemet/store
 Adresse email Haut de page Bas de page 
 
sandro



Autorisation : Membre
Nb de messages : 1366
Inscrit le : Ven 25 Mar 2011, 22:58
Posté le : Sam 15 Oct 2011, 21:54   Citer 

Ups, désolé, je l'oublie souvant celui là.

----------------------
mort à l'inutile, place à la mémoire libre et aux programmes
 Adresse email Haut de page Bas de page 
 
linkakro



Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Sam 15 Oct 2011, 22:28   Citer 

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



----------------------
ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)

Pour tout le monde et surtout les débutants, quelques-uns des articles courants :
*Traductions Algorithmie/Ti-Basic.
*Caractères spéciaux sur Tout82
Les défauts du TI-Basic : Goto_versus_algo et DelVar/End/Lbl/guillemet/store
 Adresse email Haut de page Bas de page 
 
The K



Autorisation : Membre
Nb de messages : 850
Inscrit le : Sam 15 Oct 2011, 11:07
Posté le : Dim 16 Oct 2011, 10:37   Citer 

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

----------------------
La la la ...

Avez-vous pensé à regarder le manuel avant de demander conseil ? Un manuel est fait avant tout pour être consulté : MANUEL

Vous avez un problème avec l'ordinateur avec votre calculatrice ? SOLUTION EN VIDEO

Mes programmes sur le site : Produit scalaire KMorpion Puissance 4 Mastermind

Mes nouveaux programmes de calcul formel : FCarré FPrime

Projet base de données : ici mais abandonné. Trop de travail ...
 Adresse email Haut de page Bas de page 
 
sandro



Autorisation : Membre
Nb de messages : 1366
Inscrit le : Ven 25 Mar 2011, 22:58
Posté le : Dim 16 Oct 2011, 20:19   Citer 

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

----------------------
mort à l'inutile, place à la mémoire libre et aux programmes
 Adresse email Haut de page Bas de page 
 
The K



Autorisation : Membre
Nb de messages : 850
Inscrit le : Sam 15 Oct 2011, 11:07
Posté le : Dim 16 Oct 2011, 20:57   Citer 

Ah ok ... Merci a toi ça pourra me servir je pense bigmouth.gif

Tiens pendant que j'y suis et étant curieux ... A quoi correspondent les "BDG" et "Img" dans les variables minied.gif ?

----------------------
La la la ...

Avez-vous pensé à regarder le manuel avant de demander conseil ? Un manuel est fait avant tout pour être consulté : MANUEL

Vous avez un problème avec l'ordinateur avec votre calculatrice ? SOLUTION EN VIDEO

Mes programmes sur le site : Produit scalaire KMorpion Puissance 4 Mastermind

Mes nouveaux programmes de calcul formel : FCarré FPrime

Projet base de données : ici mais abandonné. Trop de travail ...
 Adresse email Haut de page Bas de page 
 
azerty1



Autorisation : Membre
Nb de messages : 438
Inscrit le : Dim 12 Déc 2010, 20:44
Posté le : Dim 16 Oct 2011, 21:11   Citer 

Image, ce sont des images happy.gif 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 happy.gif

----------------------
Ti-Connect 64bits
PROTECT
 Adresse email Haut de page Bas de page 
 
Persalteas



Autorisation : Membre
Nb de messages : 2086
Inscrit le : Sam 23 Jan 2010, 20:09
Posté le : Lun 17 Oct 2011, 8:34   Citer 

banque de données graphiques (BDG) sauvegarde toutes tes fonctions [f(crazy.gif] de tous les modes, la taille de ta fenêtre, et les paramètres de graphique (axes On-Off, quadrillage etc...)

 Adresse email Haut de page Bas de page 
 
The K



Autorisation : Membre
Nb de messages : 850
Inscrit le : Sam 15 Oct 2011, 11:07
Posté le : Mer 19 Oct 2011, 14:16   Citer 

Ah d'accord ^^
Et comment les utilises-t-on ? happy.gif
Je veux dire, dans un programme, que doit on mettre comme instruction pour faire fonctionner le code ? winkle.gif

----------------------
La la la ...

Avez-vous pensé à regarder le manuel avant de demander conseil ? Un manuel est fait avant tout pour être consulté : MANUEL

Vous avez un problème avec l'ordinateur avec votre calculatrice ? SOLUTION EN VIDEO

Mes programmes sur le site : Produit scalaire KMorpion Puissance 4 Mastermind

Mes nouveaux programmes de calcul formel : FCarré FPrime

Projet base de données : ici mais abandonné. Trop de travail ...
 Adresse email Haut de page Bas de page 
 
sandro



Autorisation : Membre
Nb de messages : 1366
Inscrit le : Ven 25 Mar 2011, 22:58
Posté le : Mer 19 Oct 2011, 21:29   Citer 

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.

Sandro

----------------------
mort à l'inutile, place à la mémoire libre et aux programmes
 Adresse email Haut de page Bas de page 
 
The K



Autorisation : Membre
Nb de messages : 850
Inscrit le : Sam 15 Oct 2011, 11:07
Posté le : Ven 21 Oct 2011, 16:39   Citer 

Ah oui ! J'ai déja vu ça dans quelques programmes que j'ai recopié crazy.gif
bref, merci à toi Sandro et à tous ceux qui m'ont répondu ici winkle.gif

----------------------
La la la ...

Avez-vous pensé à regarder le manuel avant de demander conseil ? Un manuel est fait avant tout pour être consulté : MANUEL

Vous avez un problème avec l'ordinateur avec votre calculatrice ? SOLUTION EN VIDEO

Mes programmes sur le site : Produit scalaire KMorpion Puissance 4 Mastermind

Mes nouveaux programmes de calcul formel : FCarré FPrime

Projet base de données : ici mais abandonné. Trop de travail ...
 Adresse email Haut de page Bas de page 
 
Poster un nouveau sujet Poster une réponse





  Page générée en 6 requêtes