Avertissement :Il s'agit d'une page optimisée pour la navigation mobile. Voir la
page originale.
Problème avec la vérification d'un nombre paire
Kaetsu le 13/04/2012 à 21:07
Bonsoir,
Je suis en train de faire un programme pour aller plus rapidement en classe et lors des devoirs, son but est de faire les choses suivantes:
- On donne un numérateur sans le PI par exemple 2000
- On donne le dénominateur par exemple: 3
- Il dois diviser l'un par l'autre ce qui donne: 666.6666667
- Il dois prendre la partie entière et prendre le nombre qui multiplier par le dénominateur va donner un nombre paire: 1998
- Ensuite il divise ce nombre par le denominateur: 666
- Il fait une soustraction: 2000-1998
- Il divise 666 par deux: 333
- Et il affiche la formule: 2*333*PI + 2PI/3
Et donc son but est de retrouver la valeur présente autour du cercle trigonometrique a partir d'une valeur qui n'y est pas du tout.
J'ai fais tout mon programme sous le logiciel ALGOBOX, vous pouvez le télécharger ici:
http://www.mediafire.com/file/[...]RIGO-VALEUR.alg
Mais lorsque je veut le mettre sur la TI 82-Stats.fr, elle devient complètement folle quand je lui met ceci pour prendre le nombre paire, comme dans mon programme sous le logiciel ALGOBOX.
If C=int(C/2)*2
Elle m'affiche que la valeur pair et entiere la plus proche est 3.
Voici mon programme pour la TI en entier:
Code
:ClrHome
:Disp "NUMERATEUR"
:Disp ""
:Input "N = ",A
:
:ClrHome
:Disp "DENOMINATEUR"
:Disp ""
:Input "D = ",B
:
:If A=0 or B=0
:Then
:ClrHome
:Output(5,4,"IMPOSSIBLE")
:Stop
:End
:
:A/B→C
:If C=int(C/2)*2
:Then
:ClrHome
:C*B→D
:A-D→E
:D/B→F
:F/2→G
:Disp "LE NUMERATEUR EST:"
:Disp ""
:Disp A
:Pause
:Goto 1
:End
:
:Lbl 1
:ClrHome
:Disp "LA VALEUR PAIRE"
:Disp "ET ENTIERE EST:"
:Disp ""
:Disp D
:Pause
:Goto 2
:End
:
:Lbl 2
:ClrHome
:Disp "VOUS OBTENEZ:"
:Disp ""
:Disp D
:Disp B
:Disp "+"
:Disp E
:Disp B
:Pause
:Goto 3
:End
:
:Lbl 3
:ClrHome
:Disp "ON DIVISE:"
:Disp ""
:Disp F
:Pause
:Goto 4
:End
:
:Lbl 4
:ClrHome
:Disp "PUIS PAR 2:"
:Disp ""
:Disp G
:Pause
:Goto 5
:End
:
:Lbl 5
:ClrHome
:Disp "FORMULE:"
:Disp ""
:Disp "2 * "
:Disp G
:Disp "* π + "
:Disp E
:Disp "π / "
:Disp B
:Pause
:Goto 6
:End
:
:Lbl 6
:ClrHome
:Disp "AU FINAL:"
:Disp ""
:Disp E
:Disp "π / "
:Disp B
:Pause
:Goto 7
:End
:
:Lbl 7
:ClrHome
:Disp "TERMINEE"
:Stop
:End
Alors je ne comprend vraiment pas le problème.
Avez vous une solution ? En espérant une réponse rapide.
Merci de votre aide.
Cordialement,
Kaetsu.
Sangohan38 le 13/04/2012 à 22:02
Les symboles sont très mal passés sur le forum, c'est peu lisible, pourrai-tu la prochaine fois prendre exemple sur nos programmes pour la symbolique stp?
L'erreur est toute bête: ta condition de vérification est bonne mais si elle est fausse, tu n'as rien mis du coup le programme exécute la suite cad l'affichage de la valeur paire qui n'est donc pas paire.
De plus, c'est un programme de barbare dans l'affichage sur l'écran mais c'est tout à fait normal si c'est tu n'a jamais programmé sur TI.
Par contre je n'ai pas bien compris l'intérêt de ton programme: c'est passé des degrés en radian en simplifiant au maximum par 2 pi?
Sangohan38linkakro le 13/04/2012 à 22:32
Associer des Lbl et des End n'a aucun sens dans une TI.
De plus un des Goto est dans une strucure en If ce qui n'est pas toujours supporté. (voir mon
article)
Je ne vois pas en quoi le test pourrais être faux mais on peut tout-de-même le simplifier.
sango : ce programme décompose un angle en somme d'un multiple de 2Pi et de la valeur principale de l'angle.
Voici ce que j'obtiens, je ne l'ai pas testé.
Code
:ClrHome
:Disp "X=A pi /B
:Prompt A,B
:
:If A=0 ou B=0
:Then
:Disp "IMPOSSIBLE
:Stop
:End
:
:A/B -> C
:If not(fPart(C/2 // si le nombre est pair.
:Then
:
:ClrHome
:C*B -> D
:A-D -> E
:D/B -> F
:F/2 -> G
:Disp "LE NUMERATEUR EST:"
:Pause A
:
:Else // sinon (nombre impair)
:
:ClrHome
:Disp "LA VALEUR PAIRE"
:Disp "ET ENTIERE EST:"
:Pause D
:
:Disp "VOUS OBTENEZ:"
:Disp ""
:Disp D
:Disp B
:Disp "+"
:Disp E
:Pause B
:
:ClrHome
:Disp "ON DIVISE:"
:Disp ""
:Pause F
:
:ClrHome
:Disp "PUIS PAR 2:"
:Disp ""
:Pause G
:
:ClrHome
:Disp "FORMULE:"
:Disp ""
:Disp "2 * "
:Disp G
:Disp "* pi + "
:Disp E
:Disp " pi / "
:Pause B
:
:ClrHome
:Disp "AU FINAL:"
:Disp ""
:Disp E
:Disp "pi / "
:Pause B
:ClrHome
:Disp "TERMINEE"
:
:End // fin du If/Then/Else/End
Ce sujet m'a donné envie d'écrire ça :
Code
Disp "X=A pi /B
Prompt A,B
int(A/B/2 -> Q
A/B-Q2 -> R
Disp "X=(2*K+R)*PI
Disp "K=",Q,"R=",R>Frac
EDIT: ou encore ça puisque sango veut utiliser des degrés :
Code
Disp "X=A°
Prompt A
int(A/720 -> Q
A/B-Q720 -> R
Disp "X=2*K*360+R °
Disp "K=",Q,"R=",R>Frac
Sangohan38 le 13/04/2012 à 22:55
Alors pourquoi s'embêter et ne pas faire une simple règle de 3?
Code
Radian
Input "ANGLE (DEGRE):",A
A/360->A
ipart(A->B
partdec(A->C
Disp B,"*2*pi+",C >Frac,"*pi
Sangohan38
Kaetsu le 15/04/2012 à 12:08
Sa fais la même chose,
Par exemple si je met A=2000 et B=3, la calculatrice me donne:
Valeur entière: 1334 au lieu de 1998
Et quoi que je tape en A et en B c'est toujours 1334, sa ne change jamais, même les valeurs qui suivent (667;333.5 ...)
Je ne comprend pas :oSangohan38 le 15/04/2012 à 15:17
Avec quel programme? Celui de Linkakro?
Si c'est celui-la, la première chose qui me viens à l'esprit est l'instruction "A/B -> C" que tu aurais oublié.
Sangohan38Kaetsu le 15/04/2012 à 15:46
Oui c'est celui de Linkraro
Et non je n'ai rien oublié car j'ai le cable donc copier coller directement.
Elle est complétement folle la TI :osandro le 15/04/2012 à 15:50
folle certainement pas, même si elle comprend quelques bugs, elle execute exactement le code programmé par les ingénieurs de TEXAS INSTRUMENTS.Kaetsu le 15/04/2012 à 16:41
Je vois pas pourquoi cela ne marche pas alors :osandro le 15/04/2012 à 16:56
d'ailleurs, quand tu dis le programme de Linkakro, tu parle duquel?linkakro le 15/04/2012 à 17:17
J'ai écrit trois codes, alors soyez un peu plus précis.
Le premier est une correction, peut-être fausse, du programme original.
Le deuxième, je l'ai écrit de toutes pièces et le troisième est supposé faire la même chose que le deuxièeme avec des degrés.
Dans le premier, je signale que je n'ai pas vérifié les opérations de calcul, je n'ai regardé que la structure et la condition de parité.
Je vais chercher si j'ai commis une erreur dans mon premier code.Kaetsu le 15/04/2012 à 17:35
Enfaite, mon programme sur ALGOBOX, je sais pas si vous l'avez regarder, je vais le mettre en dessous marche très bien, il fais exactement ce que je veut.
Mais quand je le met sur la calto en changeant pour qu'elle comprenne, sa fais n'importe quoi.
Voici mon code algobox:
Code
VARIABLES
nbe1 EST_DU_TYPE NOMBRE
nbe2 EST_DU_TYPE NOMBRE
nbe3 EST_DU_TYPE NOMBRE
nbe4 EST_DU_TYPE NOMBRE
nbe5 EST_DU_TYPE NOMBRE
nbe6 EST_DU_TYPE NOMBRE
nbe7 EST_DU_TYPE NOMBRE
DEBUT_ALGORITHME
AFFICHER "Le numérateur doit être donné sans le PI !"
PAUSE
AFFICHER "Le dénominateur doit être différent de 0 !"
PAUSE
AFFICHER "Numérateur = "
LIRE nbe1
AFFICHER "Dénominateur = "
LIRE nbe2
SI (nbe1==0 OU nbe2==0) ALORS
DEBUT_SI
AFFICHER "Le dénominateur ou le numérateur doivent être différent de 0 !"
FIN_SI
SINON
DEBUT_SINON
nbe3 PREND_LA_VALEUR (nbe1)/(nbe2)
SI (nbe3 = round((nbe3/2),0) * 2) ALORS
DEBUT_SI
nbe4 PREND_LA_VALEUR (nbe3)*(nbe2)
nbe5 PREND_LA_VALEUR (nbe1)-(nbe4)
AFFICHER " "
AFFICHER "Vous avez entré en numérateur la valeur suivante :"
AFFICHER nbe1
AFFICHER " "
AFFICHER "La valeur qui donnera un nombre paire est :"
AFFICHER nbe4
AFFICHER " "
AFFICHER "Pour le moment, vous obtenez cela :"
AFFICHER nbe4
AFFICHER "π / "
AFFICHER nbe2
SI (nbe5 >= 0) ALORS
DEBUT_SI
AFFICHER " + "
FIN_SI
SINON
DEBUT_SINON
AFFICHER " - "
FIN_SINON
AFFICHER nbe5
AFFICHER "π / "
AFFICHER nbe2
AFFICHER " "
AFFICHER "On prend la division de la nouvelle fraction:"
AFFICHER nbe3
AFFICHER " "
AFFICHER "On divise le chifre précédent par 2:"
nbe7 PREND_LA_VALEUR (nbe3)/2
AFFICHER nbe7
AFFICHER " "
AFFICHER "On utilise maintenant la formule :"
AFFICHER "2 * "
AFFICHER nbe7
AFFICHER " * π"
SI (nbe5 >= 0) ALORS
DEBUT_SI
AFFICHER " + "
FIN_SI
SINON
DEBUT_SINON
AFFICHER " - "
FIN_SINON
AFFICHER nbe5
AFFICHER "π / "
AFFICHER nbe2
AFFICHER " "
AFFICHER "Au final, votre valeur est égal à :"
AFFICHER nbe5
AFFICHER "π / "
AFFICHER nbe2
AFFICHER " "
FIN_SI
FIN_SINON
FIN_ALGORITHME
Voilà. Merci de votre aide à tous.
sandro le 15/04/2012 à 17:41
tu pourrais nous dire s'il te plait se qu'il est sensé y avoir à la place des "π" , ça doit être un caractère spécial, mais aucune idée lequel.Kaetsu le 15/04/2012 à 18:02
C'est simplement le PI qui s'y trouve.sandro le 15/04/2012 à 20:18
bon, je vais le traduire, on véra bien si ça marche (y'a pas de raisons que ça ne marche pas sur TI si ça marche sur algobox.
Pour info, je considèrerais que A=nbe1 ; B=nbe2 ; C=nbe3 ; D=nbe4 ; E=nbe5 ; F=nbe6 ; G=nbe7
Code
Disp "Le numérateur doit être donné sans le PI !"
Pause
Disp "Le dénominateur doit être différent de 0 !"
Pause
Input "Numérateur = ",A
Input "Dénominateur = ",B
If A=0 ou B=0
Then
Disp "Le dénominateur ou le numérateur doivent être différent de 0 !"
Else
A/B -> C
If (C=arrondi(C/2,0)*2)
Then
B*C -> D
A-D -> E
Disp " "
Disp "Vous avez entré en numérateur la valeur suivante :"
Disp A
Disp " "
Disp "La valeur qui donnera un nombre paire est :"
Disp D
Disp " "
Disp "Pour le moment, vous obtenez cela :"
Disp D
Disp "pi / "
Disp B
If E >= 0
Then
Disp " + "
Else
Disp " - "
End
Disp E
Disp "pi / "
Disp B
Disp " "
Disp "On prend la division de la nouvelle fraction:"
Disp C
Disp " "
Disp "On divise le chifre précédent par 2:"
C/2 -> G
Disp nbe7
Disp " "
Disp "On utilise maintenant la formule :"
Disp "2 * "
Disp G
Disp " * pi"
If E>= 0
Then
Disp " + "
Else
Disp " - "
End
Disp E
Disp "pi / "
Disp E
Disp " "
Disp "Au final, votre valeur est égal à :"
Disp E
Disp "pi / "
Disp B
Disp " "
End
End
Si je n'ai pas fait d'étourderies, le code devrait fonctionner (mis à part que tu ne véra que la fin car la TI affiche trop vite : rajoute un Pause tous les 7 Disp (ou mieux, met le à LA PLACE du 7ème Disp).
Sandro
linkakro le 15/04/2012 à 21:16
nbe3 PREND_LA_VALEUR (nbe1)/(nbe2)
Quand tu écris ceci sous algobox, tu obtiens un nombre entier ou décimal ?
Je crois que c'est ça le problème.
En effet tu effectues A/B->C puis C*B->D, ce qui n'a aucun intérêt si le quotient est décimal.
Si le problème vient de ça, il faut écrire dans la TI : B*int(C)->D
Mais je n'ai pas saisi le but de tous les calculs.Kaetsu le 15/04/2012 à 21:29
Le code ne fait rien, il me met Fait sans rien afficher.
Je regarde cela demain en détails, on dois pas être loin.Persalteas le 15/04/2012 à 21:34
Il ya de grandes chances que tu aies oublié un "End".Kaetsu le 15/04/2012 à 21:50
J'obtient un nombre entier toujours, jamais de nombre décimal sous algobox.Kaetsu le 18/04/2012 à 14:40
Up, personne n'a une réponse à mon problème ?sandro le 18/04/2012 à 15:07
tu as testé avec la modif proposée par le dernier message de Linkakro?Kaetsu le 18/04/2012 à 15:35
Oui, et cela ne marche pas.sandro le 18/04/2012 à 16:11
autre essie : met un ent( devant chaque division. Sinon, essaye la même chose avec partEnt(.
Sandro Avertissement :Il s'agit d'une page optimisée pour la navigation mobile. Voir la
page originale.