1

Bonjour,

J'ai 2 questions.

Je veux que le programme trouve lui même 2 nombres dont le produit est x et la somme y.
Par exemple, j'entre dans mes 2 Input les nombres suivants : 15, 8.
Je veux que ma calculatrice me sorte les nombres 3 et 5, 3*5 = 15 et 3+5 = 8, ou qu'elle me réponde "impossible" si c'est le cas.
Pour cela, j'avais pensé à ressortir tous couples de facteurs de mon produit (exemple pour 15 : [1,15], [3,5], [-1,-15], [-3,-5]) et qu'elle additionnes les couples de façon à savoir si on peut avoir la somme (de 8 en l'occurance).
Je me demandais comment rechercher ces facteurs, les classer par couples puis les additionner.

Deuxièmement, je suis débutant et, je me demandais comment vérifier si une valeur était numérique.
J'ai un Input qui se stocke dans Str1, et je voudrais donc m'assurer que Str1 est un nombre, et, dans le cas contraire, fait Disp puis un Goto (retour au début). J'ai essayé les opérateurs <> mais ça a produit une erreur.

Merci d'avance,
DanieL_

2

pour ta première question :
je vois deux solutions, la premiere c'est d'utiliser les capacités de calcul formel de la calculatrice, dont la fonction solve
il suffit juste d'entrer les équations que tu veux qu'elle résolve et la fonction cherchera les solutions
donc dans ton cas :
solve(x*y=a and x+y=b,{x,y})->sol qui renverra dans ton cas x=5 and y=3 or x=3 and y=5 si a=15 et b=8
et ensuite extraire les solutions avec la fonction exp>list(sol,{x,y}) qui renverra [5,3;3,5] cad un tableau avec autant de lignes qu'il y a de solutions possible et sur chaque colone la valeur de l'inconnue (dans le même ordre que tu les as passés à la fonction, donc x et y)

mais si tu veux pas t'emmerder, tu as aussi une autre solution cheeky
tu fais toi même la résolution en trouvant x et y en fontion de a et b
si t'as la flemme de le faire à la main (ou si tu ne vois pas comment faire) utilise encore la fonction solve :
solve(x*y=a and x+y=b,{x,y})
mais cette fois assure toi que a et b N'ont PAS de valeur affectée (efface les variables a et b dans le var link si elles existent déjà) et la fontion te renverra les formules poru trouver x et y, tu n'auras qu'à les recopier dans ton programme
(attention ça sera aussi de la forme x=... and y=... or x=... and y=... car x et y jouent un rôle symétrique. Tu n'as qu'à prendre en compte que le 1er x=... et le 1er y=...)
(et n'oublie pas : pour affecter une valeur à une variable c'est -> et pas = donc et fais pas avoir wink )

en fait tu l'auras compris la seconde solution est BEAUCOUP plus efficace que la 1ere car ton programme n'aura pas à résoudre à chaque fois les équations

deuxieme question :
il faut que tu convertisses ta chaine en nombre avec expr() et que tu vérifies s'il n'y a pas eu d'erreur avec un bloc Try ... EndTry
regarde ton manuel (ou celui en ligne : http://education.ti.com/us/product/tech/89/guide/89guidefr.html ) pour le fonctionnement de ces fonctions
avatar

3

J'ai oublié de spécifier que j'ai une TI-84+ (Silver).
Sinon, je vais essayé tout ça, mais je suis très débutant et c'est un peu chinois.
Peut-être que je réussirai à arriver à certains résultats après quelques tests.

4

si tu as une 84+, la seule réponse que je peux te donner c'est que la solution à
x+y=a et x*y=b
est
x=(a-sqrt(a^2-4*b))/2 et y=(a+sqrt(a^2-4*b))/2
(sqrt() c'est la fonction racine carrée)

pour le reste c'est plus valable (enfin je ne pense pas, je connais pas la 84+)
avatar

5

En effet, comme le nom du forum le précise, ici on parle plus de Ti 89/92/92+/V200 happy
Si tu n'obtiens pas les réponses que tu souhaites, tu auras peut-être plus de chance ici: forums/493
avatar
Que cache le pays des Dieux ? - Forum Ghibli - Forum Littéraire

La fin d'un monde souillé est venue. L'oiseau blanc plane dans le ciel annonçant le début d'une longue ère de purification. Détachons-nous à jamais de notre vie dans ce monde de souffrance. Ô toi l'oiseau blanc, l'être vêtu de bleu, guide nous vers ce monde de pureté. - Sutra originel dork.

6

Merci pour le lien, j'étais arrivé ici par hasard à l'aide de Google et je n'avais pas vu qu'il y avait d'autres forums.
Sinon la solution ne me donne pas les bons nombres, et parfois une erreur NOREAL ANS.
J'ai ajouté ton MSN, j'espère que tu ne m'en voudras pas trop et que tu pourras m'aider.

7

J'y suis arrivé, je m'étais trompé... il me reste à savoir comment écrire "impossible" au lieu de l'erreur lorsque l'équation n'arrive pas. Je dois aussi vérifier qu'on a bien entrer des nombres dans mes variables A et B, mais je crois que je pourrais tenter un If A>0 OR A<0 ou un truc du genre..

8

Bon voilà...

Si j'entre une lettre ou quelque chose d'autre dans mon Input, j'obtiens automatiquement un Errorsorryyntax
Si j'entre un produit et une somme qui ne donne pas un nombre entier, j'obtiens un Error:NonReal Ans lors du calcul.

Sinon le programme marche super bien.
Merci beaucoup.

Et puis j'ai essayé de comprendre mais c'est bizarre...
Pourquoi cette formule me donne-t-elle mes 2 nombres ?

Merci d'avance..

9

pour savoir dans quel cas c'est impossible, regarde les domaines de définition des fonctions : ce qui pose problème ce sont les racines carrées, il faut donc que a^2-4*b>=0

si tu veux te convaincre que mes formules donnent les bonnes solutions, dans les équations x*y=a et x+y=b, remplace x et y par les formules et tu verras bien que tu trouves au final a et b

après comment les trouver, le plus simple c'est de faire par substitution :
d'apres la premiere équatoion :
x=a/y
on remplace le x de la 2eme equation : (à la louche)
a/y+y=b
a/y+y-b=0
(a+y^2-b*y)/y=0
y^2-b*y+a=0
et tu résous cette équation tu second degré, puis tu remplace la solution pour y dans la 1ere equation et tu trouves x

pour l'erreur de syntraxe, je peux pas t'aider, mais à tout hasard regarde en détail ton manuel
avatar

10

Merci pour tes précisions, c'est maintenant beaucoup plus clair.

11

Dernier truc...
Je fais ça :

Disp X,Y

Cela affiche mes 2 nombres sur 2 lignes différentes.
Je voudrais les afficher de cette façon :

{X,Y}

J'ai essayé cela :

Disp "{"+X+","+Y+"}"

Mais j'obtiens une erreur à cause que X et Y sont des valeurs numériques.
Je pourrais toujours les mettre en Str1 mais par curiosité j'aimerais savoir comment faire avec des valeurs numériques.
Je sais aussi que je pourrais le faire à coups d'Output() mais n'y a-t-il pas plus simple ?
Merci d'avance.

12

Regarde le manuel complet mais sur 84 je crois pas qu'on puisse convertir un nombre en string.
Sur 89 ca aurait été Disp "X"&string(X)&....
J'ai pas trouvé l'équivalent de string pour 84 sur le manuel
avatar
Combien de tas de bois une marmotte pourrait couper si une marmotte pouvait couper du bois ?

13

Tu peux faire : Disp {X,Y}
avatar

14

Thepro :
Tu peux faire : Disp {X,Y}

Ça marche excepté que la virgule ne s'affiche pas..
Mais c'est tout de même correct comme ça.

Une autre chose...
En les mettant sur la même ligne, si par exemple mon X et mon Y donne de grands nombres à virgules ou plus haut de 99999, ça ne rentre pas sur la même ligne.
J'ai fait une condition, dans le cas où X ou Y est plus grand que 99999 je l'affiche sur 2 lignes, mais comment vérifier s'il y a plus de 4 chiffres après la virgule ?

15

Pour ça il y a : Pause {X,Y}
avatar

16

DanieL_ :
J'ai fait une condition, dans le cas où X ou Y est plus grand que 99999 je l'affiche sur 2 lignes, mais comment vérifier s'il y a plus de 4 chiffres après la virgule ?


J'ai une idée...

x*10000 -> temp
if mod(temp,10)<>0 and int(temp)=temp
pause "Plus de 4 chiffres après la virgule"


Pas certain que ça marche embarrassed

17

if round(X,4)!=X
Pause "Plus de 4 chiffres après la virgule."
avatar

18

Thepro :
if round(X,4)!=X
Pause "Plus de 4 chiffres après la virgule."

Ça marche.. si j'ai bien compris on l'arrondit à 4 chiffres et on vérifie si c'est égal à l'original, dans le cas contraire il y avait plus de décimales...

Je ne connais pas beaucoup les fonctions et il n'y a aucune explication dans le manuel sinon les touches à utiliser pour utilise telle ou telle fonction.

Merci beaucoup à tous,
DanieL_

19

tu peux aussi te demander si c'est bien utile d'afficher plus de 4 décimales
au lieu de Pause {X,Y} tu pourrais faire Pause {round(X,4),round(Y,4)}
avatar

20

Au niveau de la mémoire et des variables, je sais qu'il est possible de faire un DelVar pour chaque variable mais...
Est-il possible que mes variables ne soient que locales à ma fonction ?
Si par exemple j'avais déjà définie une variable X, que j'appelle ma fonction, ma variable X sera changée, mais n'est-il pas possible de remettre l'initial ? Ou bien puis-je donner des noms à mes variables qui ne pourront correspondre avec les variables que j'utilise régulièrement ?

21

DanieL_ :
Si par exemple j'avais déjà définie une variable X, que j'appelle ma fonction, ma variable X sera changée, mais n'est-il pas possible de remettre l'initial ?


Tu peux faire ça :

define prout()=prgm
local x
10->x
endprgm


et si tu utilises ça dans un prog basic ça donne :

prog()
prgm
local x
25 -> x
pause x
prout()
pause x
endprgm


valà hehe

22

c'est sur 89 ça, mais marchera-ce sur 84+ ?
avatar

23

Non, mais il peut utiliser une liste qu'il supprimera à la fin.
avatar

24

Zut pas vu qu'il avait une 84+ :/
Thepro a donc raison.

25

D'accord je vais essayer de regarder du côté des listes.

26

Bon j'ai suivi un très bon tutoriel sur les listes mais j'en suis revenu au même problème (à moins d'un manque d'explication).
Il y avait un truc du genre dans cet article...

Input "blabla", X
X->LX(1)

Mon code fonctionne donc complètement avec les listes exceptés lors du Input.
J'ai essayé Input "blabla", LX(1) mais ça me donne une erreur de format.

Quelqu'un a une idée ?

27

pour les listes c'est LX[n]
Input "blabla", X
X->LX[1]
edit formatage couleur
ç1

28

- "X->LX" + "X->LX[1]"
avatar