Equations du 2ème degré sur PC-1262

Ici, on fait dans le petit, le LCD qui déchire sa race, on y cause même calculatrices quand on est en manque !

Modérateur : Politburo

Répondre
Avatar de l’utilisateur
joelc
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 504
Inscription : 15 avr. 2009 19:15
Localisation : Morges, Suisse

Equations du 2ème degré sur PC-1262

Message par joelc » 03 juin 2009 21:40

Bonsoir à tous!
J'ai écrit sur mon bô Sharp PC-1262 un petit programme pour résoudre des équations du 2ème degré.

Code : Tout sélectionner

10 PRINT "Equations 2e degre       entrez A, B et C"
20 INPUT "A=";A
25 INPUT "B=";B
30 INPUT "C=";C
40 D=B^2-(4*A*C)
50 PRINT "DELTA=";D
60 IF D<0 THEN GOTO 20
63 E=(-B)/(2*A)
65 IF D=0 THEN PRINT "S=";E
67 F=((-B)+(√D))/(2*A)
68 G=((-B)-(√D))/(2*A)
70 IF D>0 THEN PRINT "S1=";F
75 IF D>0 THEN CURSOR 24: PRINT "S2=";G
80 GOTO 20
90 END
Mais voilà, des fois, il me sort un des deux résultats faux quand le discriminant delta est positif!
aussi, il y a moyen de faire afficher les 2 résultats en même temps sans avoir à appuyer sur enter pour sortir le 2ème?
je ne suis qu'un débutant, s'il y a des optimisations, je prends!

joelc, qui cherche a bluffer son prof de math
Image Image Image
Image

Avatar de l’utilisateur
Marge
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 5593
Inscription : 01 oct. 2008 14:39
Localisation : En bas, tout au fond à gauche.

Message par Marge » 03 juin 2009 21:44

ça doit être un truc comme :

if d>0 then print "s1=";F;", s2=";G
3 hommes, 3 demis, un 3a... Magnéto, Serge !

« Boris », c'est juste Maurice enrhumé.

Avatar de l’utilisateur
joelc
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 504
Inscription : 15 avr. 2009 19:15
Localisation : Morges, Suisse

Message par joelc » 03 juin 2009 21:55

ouais mais je voudrais que chaque résultat se mette sur une ligne, d'où le "cursor 24" de la ligne 75
Image Image Image
Image

Avatar de l’utilisateur
Marge
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 5593
Inscription : 01 oct. 2008 14:39
Localisation : En bas, tout au fond à gauche.

Message par Marge » 03 juin 2009 21:58

Ben je passe ; je ne sais pas lire entre les lignes. :(
3 hommes, 3 demis, un 3a... Magnéto, Serge !

« Boris », c'est juste Maurice enrhumé.

Avatar de l’utilisateur
charognard
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4411
Inscription : 06 juin 2007 19:28
Localisation : Indre et loire
Contact :

Message par charognard » 03 juin 2009 22:10

Code : Tout sélectionner

10 INPUT"A=";A,"B=";B,"C=";C
20 D=B*B-4*A*C
30 PRINT"D=";D
40 IF D<0 THEN10
50 WAIT 0:PRINT(-B+√D)/2/A;"":IF D CURSOR 25:PRINT(-B-√D)/2/A
60 WAIT:PRINT:GOTO10
Dernière édition par charognard le 03 juin 2009 22:50, édité 3 fois.

jxano
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2368
Inscription : 17 févr. 2008 00:34
Localisation : Paris 20ème

Message par jxano » 03 juin 2009 22:22

Personnellement, je te propose :

Code : Tout sélectionner

if d>0 then wait 100:print "s1=";F,"s2=";G
Il faudra que je sorte mon 1261 pour vérifier !

Sinon, comme optimisation et/ou améliorations, tu peux faire tes racines en "kit" : tu conserves E comme il est, et tu calcules F= Racine(Abs D)/(2*A) (je n'ai pas trouvé le signe "racine" sur mon clavier). Avec ça, tu peux tout faire :
  • Afficher E si D=0 ;
  • Afficher E+F et E-F si D>0 ;
  • Pour D<0, tu affiches E, puis F avec "i" derrière ; sur la deuxième ligne, la même chose avec -F. Tu diras à ton prof que ce sont les racines complexes du trinôme.
La version courte de charo n'est pas mal non plus !
Programmeur abscons.

Avatar de l’utilisateur
joelc
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 504
Inscription : 15 avr. 2009 19:15
Localisation : Morges, Suisse

Message par joelc » 03 juin 2009 22:26

whoa! c'est...optimisé!
au risque de me répéter, on peut faire un résultat sur une ligne et l'autre sur la 2ème ligne?
Image Image Image
Image

Avatar de l’utilisateur
charognard
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4411
Inscription : 06 juin 2007 19:28
Localisation : Indre et loire
Contact :

Message par charognard » 03 juin 2009 22:28

joelc a écrit :whoa! c'est...optimisé!
au risque de me répéter, on peut faire un résultat sur une ligne et l'autre sur la 2ème ligne?
oui j'ai modif mon code mais ça passe par cursor

Avatar de l’utilisateur
joelc
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 504
Inscription : 15 avr. 2009 19:15
Localisation : Morges, Suisse

Message par joelc » 03 juin 2009 22:36

j'avais pas vu l'édition de charo :oops: , il est nickel et vite entré en plus!
Image Image Image
Image

Avatar de l’utilisateur
charognard
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4411
Inscription : 06 juin 2007 19:28
Localisation : Indre et loire
Contact :

Message par charognard » 03 juin 2009 22:43

quand au résultat faux donne nous un exemple


rare un jeune avec un 1262, tu dois etre le seul dans ta classe ?
Dernière édition par charognard le 03 juin 2009 22:51, édité 1 fois.

Avatar de l’utilisateur
charognard
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4411
Inscription : 06 juin 2007 19:28
Localisation : Indre et loire
Contact :

Message par charognard » 03 juin 2009 22:46

d'ailleur on peut enlever la ligne 40 comme sa ça retourne une erreur si pas de solution c'est mieux que le retour au debut sans prévenir

Code : Tout sélectionner

10 "S"INPUT"A=";A,"B=";B,"C=";C 
20 D=B*B-4*A*C 
30 PRINT"D=";D 
40 WAIT 0:PRINT(-B+√D)/2/A;"":IF D CURSOR 25:PRINT(-B-√D)/2/A 
50 WAIT:PRINT:GOTO10

le "S" c'est pour l'appel par [DEF][S] en mode RUN

Avatar de l’utilisateur
joelc
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 504
Inscription : 15 avr. 2009 19:15
Localisation : Morges, Suisse

Message par joelc » 03 juin 2009 23:11

En général, ça donnait une solution juste et une autre avec une pétée de décimales et une puissance de dix négative mais plus maintenant :D :D :D
Et oui, j'aime bien sortir les machines de ma collection pour les cours, même si la Canon palmtronic F7 perd les pédales sans crier gare ou l'HP 21 qui réclame sa recharge après 10 min, ça fait bien rire les potes!
Dernière édition par joelc le 03 juin 2009 23:18, édité 1 fois.
Image Image Image
Image

jxano
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2368
Inscription : 17 févr. 2008 00:34
Localisation : Paris 20ème

Message par jxano » 03 juin 2009 23:12

Génial, le CURSOR, charo ! En l'associant à WAIT, on peut utiliser tout l'écran sans le faire sauter :

Code : Tout sélectionner

WAIT 0:PRINT "R1=";E+F:CURSOR 24:WAIT:PRINT "R2=";E-F
Les deux racines restent affichées sur leur ligne respective jusqu'à ce qu'on presse une touche...
Programmeur abscons.

Avatar de l’utilisateur
charognard
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4411
Inscription : 06 juin 2007 19:28
Localisation : Indre et loire
Contact :

Message par charognard » 03 juin 2009 23:40

de mettre le WAIT avant bonne idée aussi ça nous fait gagner un print

Code : Tout sélectionner

10 "S"INPUT"A=";A,"B=";B,"C=";C 
20 D=B*B-4*A*C 
30 PRINT"D=";D 
40 WAIT 0:PRINT(-B+√D)/2/A;"":IF D CURSOR 25:WAIT:PRINT(-B-√D)/2/A 
50 GOTO10
explication des ruses
ligne 10 : l'étiquette "S" pour un appel rapide; l'input avec plusieures variables connu
ligne 20 : au lieu de B^2 il vaut mieux utilisé B*B largement plus rapide (à tester dans une boucle)
ligne 40 : le WAIT 0 pas de pause dans les print; le ;"" à la fin du premier PRINT ça cale l'écriture à gauche (par défaut les valeurs numériques se mettent à droite); le IF D la valeur D est évaluée si elle est égale à 0 pas la suite de la ligne

remarques :
la commande INPUT du sharp est un peu spéciale
en effet lorsque la validation de l'INPUT se fait sans avoir saisie une valeur le restant de la ligne n'est pas executée (interessant mais à y penser pour les BUGs)

au passage le test à un interet limité et on pourrait encore optimiser le prog en

Code : Tout sélectionner

10 "S"INPUT"A=";A,"B=";B,"C=";C 
20 D=B*B-4*A*C 
30 PRINTD,(-B+√D)/2/A,√D,(-B-√D)/2/A 
40 GOTO10

les quatre valeurs apparaissent alors à l'écran D,√D,S1 et S2


ou pour etre plus clair

Code : Tout sélectionner

10 "S"INPUT"A=";A,"B=";B,"C=";C 
20 D=B*B-4*A*C
30 USING"#####.##"
40 WAIT0:PRINTD,(-B+√D)/2/A,√D,(-B-√D)/2/A
50 CURSOR 0:PRINT"D":CURSOR 24:PRINT"√D":CURSOR 13:PRINT"S1":CURSOR 37:WAIT:PRINT"S2
60 GOTO10

Avatar de l’utilisateur
charognard
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4411
Inscription : 06 juin 2007 19:28
Localisation : Indre et loire
Contact :

Message par charognard » 04 juin 2009 00:17

de plus ça donne une pigure de rappel pour le USING utilisée comme commande

Répondre

Revenir vers « Tous les Pockets »