Page 1 of 1

Problème algo euclide

Unread postPosted: 20 Jun 2015, 20:48
by bosskay
Salut je fais actuellement un algorithme d'euclide pour résoudre le couple d'entier U et V, j'ai taper un programme, le code me semble bon et pourtant ça ne marche pas !
Calculatrice: TI-89 Titanium
Langue: Fr
Voici le code:
Code: Select all
euclide(a0,b0,c)
Prgm
:Local a,b,c,g,p,k,q,r,s,l,m,nr,ns,u0
:pgcd(a0,b0)→u0
:If u0=1 Then
:  Output 1,1,"Solution particulière de l'équation:"
:  Output 1,2,a0
:  Output 3,2,"u +"
:  Output 6,2,b0
:  Output 8,2,"v ="
:  Output 11,2,u0
:  Output 1,3,"où, PGCD("
:  Output 10,3,a0
:  Output 12,3,";"
:  Output 13,3,b0
:  Output 15,3,")= 1"
:  Output 1,4,"                       "
:  Output 1,5,"====== Calcul ======"
:  a0→a
:  b0→b
:  1→p
:  0→k
:  0→g
:  1→s
:  4→y
:  While b=0
:    mod(a,b)→r
:    intDiv(a,b)→q
:    Output 1,y,a
:    Output 3,y,"="
:    Output 4,y,q
:    Output 6,y,"*"
:    Output 7,y,b
:    Output 9,y,"+"
:    Output 10,y,r
:    y+1→y
:    b→a
:    r→b
:    p-q*g→nr
:    k-q*s→ns
:    If r=0 Then
:      Output 1,y,r
:      Output 3,y,"="
:      Output 4,y,nr
:      Output 6,y,"*"
:      Output 7,y,a0
:      Output 9,y,"+"
:      Output 10,y,ns
:      Output 12,y,"*"
:      Output 13,y,b0
:      y+1→y
:      Output 1,y,"--------------"
:      y+1→y
:    EndIf
:    g→p
:    s→k
:    nr→g
:    ns→s
:  EndWhile
:  y+1→y
:  Output 1,y,"-----------------"
:  y+1→y
:  Output 1,y,"-----------------"
:  ((p*c)/(a))→l
:  ((k*c)/(a))→m
:  y+1→y
:  Output 1,y,"Solution particulière:"
:  y+1→y
:  Output 1,y,"("
:  Output 2,y,p
:  Output 4,y,";"
:  Output 5,y,k
:  Output 7,y,")"
:  y+1→y
:  Output 1,y,"Solution de l'équation:"
:  y+1→y
:  Output 1,y,a0
:  Output 3,y,"u + "
:  Output 7,y,b0
:  Output 9,y,"v ="
:  Output 12,y,c
:  Output 14,y,"; "
:  Output 16,y,"("
:  Output 17,y,";"
:  Output 18,y,m
:  Output 20,y,")"
:Else
:  Output 1,1,"Cette équation n'a pas de solution dans N car,"
:  Output 1,2,c
:  Output 3,2,"n'est pas multiple de pgcd:"
:  Output 1,3,a0
:  Output 3,3,";"
:  Output 4,3,b0
:  Output 6,3,")="
:  Output 8,3,u0
:EndIf
EndPrgm


Merci d'avoir lu, répondez vite le BAC c'est de lundi.

Re: Problème algo euclide

Unread postPosted: 20 Jun 2015, 21:29
by Hamza.S
je te laisse voir les erreurs
Code: Select all
eucl(a₀,b₀,c)
Func
Local a,b,c,g,p,k,q,r,s,l,m,nr,ns,u₀
:gcd(a₀,b₀)→u₀
:If u₀=1 Then
:Disp "Solution particulière de l'équation:"
:Disp string(a₀)&"u +"&string(b₀)&"v ="&string(u₀)
:Disp "où, PGCD("&string(a₀)&";"&string(b₀)&")= 1"
:Disp ""
:Pause "====== Calcul ======"
:a₀→a
:b₀→b
:1→p
:0→k
:0→g
:1→s
:While b≠0
:  mod(a,b)→r
:  intDiv(a,b)→q
:  Disp string(a)&"="&string(q)&"*"&string(b)&"+"&string(r)
:  b→a
:  r→b
:  p-q*g→nr
:  k-q*s→ns
:  If r≠0 Then
:    Pause string(r)&"="&string(nr)&"*"&string(a₀)&"+"&string(ns)&"*"&string(b₀)
:    Disp "--------------"
:  EndIf
:  g→p
:  s→k
:  nr→g
:  ns→s
:EndWhile
:Disp "-----------------"
:Disp "-----------------"
:((p*c)/(a))→l
:((k*c)/(a))→m
:Pause "Solution particulière("&string(p)&";"&string(k)&")"
:Disp "Solution de l'équation:"
:Pause string(a₀)&"u + "&string(b₀)&"v ="&string(c)&"; ("&string(l)&";"&string(m)&")"
:Return {l,m}
:Else
:Disp "Cette équation n'a pas"," de solution dans ℕ car,"
:Disp string(c)&" n'est pas multiple"
:Pause "de pgcd("&string(a₀)&";"&string(b₀)&")="&string(u₀)
:EndIf
EndFunc

Re: Problème algo euclide

Unread postPosted: 21 Jun 2015, 17:39
by bosskay
Ca ne marche pas sa affiche le message suivant:
"invalide dans une fonction ou expression courante"

Je suppose que le mode FUNCTION n'accepte pas le DISP :) !


On a testé avec programme(PRGM). Et il mettent erreur de type de donnée. le curseur d'erreur se place juste avant disp string (a0).

Re: Problème algo euclide

Unread postPosted: 21 Jun 2015, 17:43
by Bisam
Souvent, c'est l'utilisation d'une variable qui n'est pas déclarée comme locale (derrière le mot-clé Local) qui provoque cette erreur. Mais ici, tu as raison, on ne peut pas utiliser de Disp dans une fonction en Basic 68k (alors que c'est désormais possible en Basic Nspire).

Re: Problème algo euclide

Unread postPosted: 21 Jun 2015, 20:06
by bosskay
OK, et en regardant mon code, vous avez pu voir ce qui n'allait pas ?

Re: Problème algo euclide

Unread postPosted: 21 Jun 2015, 20:39
by Bisam
J'ai rendu le code plus lisible et j'ai corrigé quelques fautes de frappe.
Notamment, il y avait un l7 à la place d'un 17 dans l'un des trop nombreux Output.
Par ailleurs, je ne pense pas que ton code fonctionne avec des Output car la commande Output y,x, "Texte" écrira le texte "Texte" à la ligne de pixels numéro y et à la colonne de pixels numéro x.
La commande Disp est bien plus adaptée pour ce genre de situations.

Re: Problème algo euclide

Unread postPosted: 21 Jun 2015, 21:46
by bosskay
Après avoir testé le code ci-dessous, voici les problème apparent:
- Ca affiche 3 ligne avec solution particulière
- Rien ne défile, on ne peut pas remonter dans les historique du programme
Le mieux c'est que vous le testiez pour voir ce que ça donne
Voici el code que j'ai testé:
Code: Select all
(a0,b0,c)
Prgm
:Local a,b,c,g,p,k,q,r,s,l,m,nr,ns,u0
:pgcd(a0,b0)»u0
:If u0=1 Then
:  Output 1,1,"Solution particulière de l'équation:"
:  Output 1,2,a0
:  Output 3,2,"u +"
:  Output 6,2,b0
:  Output 8,2,"v ="
:  Output 11,2,u0
:  Output 1,3,"où, PGCD("
:  Output 10,3,a0
:  Output 12,3,";"
:  Output 13,3,b0
:  Output 15,3,")= 1"
:  Output 1,4,"                       "
:  Output 1,5,"====== Calcul ======"
:  a0»a
:  b0»b
:  1»p
:  0»k
:  0»g
:  1»s
:  4»y
:  While b=0
:    mod(a,b)»r
:    intDiv(a,b)»q
:    Output 1,y,a
:    Output 3,y,"="
:    Output 4,y,q
:    Output 6,y,"*"
:    Output 7,y,b
:    Output 9,y,"+"
:    Output 10,y,r
:    y+1»y
:    b»a
:    r»b
:    p-q*g»nr
:    k-q*s»ns
:    If r=0 Then
:      Output 1,y,r
:      Output 3,y,"="
:      Output 4,y,nr
:      Output 6,y,"*"
:      Output 7,y,a0
:      Output 9,y,"+"
:      Output 10,y,ns
:      Output 12,y,"*"
:      Output 13,y,b0
:      y+1»y
:      Output 1,y,"--------------"
:      y+1»y
:    EndIf
:    g»p
:    s»k
:    nr»g
:    ns»s
:  EndWhile
:  y+1»y
:  Output 1,y,"-----------------"
:  y+1»y
:  Output 1,y,"-----------------"
:  ((p*c)/(a))»l
:  ((k*c)/(a))»m
:  y+1»y
:  Output 1,y,"Solution particulière:"
:  y+1»y
:  Output 1,y,"("
:  Output 2,y,p
:  Output 4,y,";"
:  Output 5,y,k
:  Output 7,y,")"
:  y+1»y
:  Output 1,y,"Solution de l'équation:"
:  y+1»y
:  Output 1,y,a0
:  Output 3,y,"u + "
:  Output 7,y,b0
:  Output 9,y,"v ="
:  Output 12,y,c
:  Output 14,y,"; "
:  Output 16,y,"("
:  Output 17,y,";"
:  Output 18,y,m
:  Output 20,y,")"
:Else
:  Output 1,1,"Cette équation n'a pas de solution dans N car,"
:  Output 1,2,c
:  Output 3,2,"n'est pas multiple de pgcd:"
:  Output 1,3,a0
:  Output 3,3,";"
:  Output 4,3,b0
:  Output 6,3,")="
:  Output 8,3,u0
:EndIf
EndPrgm

Re: Problème algo euclide

Unread postPosted: 21 Jun 2015, 21:51
by Bisam
Comme je te l'ai dit, Output écrit à un endroit précis de l'écran.
Si tu décales seulement de quelques pixels comme tu le fais, les différentes lignes écrites se superposent.

Par ailleurs, que tu utilises Disp ou bien Output, tu ne peux de toute façon pas remonter dans ce que tu as affiché.
Il faut faire des Pause dans ton programme si tu veux noter les étapes.

Enfin, le code d'Hamza fonctionne très bien si tu remplaces Func et EndFunc par Prgm et EndPrgm.

Re: Problème algo euclide

Unread postPosted: 21 Jun 2015, 21:59
by bosskay
malheureusement le code de Hamza fonctionne pas pour moi j'ai déjà testé et je présume que le dans la 89 comme dans la 82 on est obliger de faire un scroll pour éviter que tout s'empile ! Pfiou c'est chiant bon pas grave

Re: Problème algo euclide

Unread postPosted: 21 Jun 2015, 22:07
by Bisam
As-tu lu ce que j'ai dit ?
Les seules choses qu'il faut modifier au code d'Hamza sont :
- remplacer Func par Prgm
- remplacer EndFunc par EndPrgm
- supprimer la ligne Return {l,m}