Problème en pascal(dev-pas) + question

grad -  
 grad -
Bonjour,
je veux faire un progrmme en pascal sous le compilateur Dev-Pascal qui serait comme ça:


program exemple;
uses wincrt;
var a,b:real;
...
Begin

write(' Donnez l'équation de la droite qui sera de la forme y=ax+b')


Je veux ici à l'execution que j'entre l'équation de la droite (par exemple y=5x+3) sans la méthode entre la variable a et ensuite la varible b c'est à dire sans cette méthode : read (a) et read(b)

autrement dit je veux que l'ordinateur sache et affecte la valeur entre = et x comme a et la dernière valeur comme b

end.

*autre chose: comment faire pour compiler et/ou rédiger un programme en language assembleur?
Configuration: Windows XP
Internet Explorer 6.0

14 réponses

  1. ko3biss
     
    je v te donner juste une idéé a résoudre ce probléme

    on va commencer par saisir l'equation de la droite sous forme d'une chaine de caractére
    le 3éme caractére ca sera la valeur du variable a
    le dernier caractére ca sera la valeur du variable b .
    ensuite on va utiliser la procédure val (ch,n,e) pour convertir la chaine en nombres.
    0
  2. grad
     
    oui maid il ya un inconvénient :
    ceci vaut seulement si a et b sont constitués d'un seul chiffre par exemple si a=12 le a s'étendera sur 2 caractères

    aussi tu peux me donner une réponse plus concrète en m'indiquant les déclarations de variables...
    dans val(ch,n,e) que représentent le n et le e et le ch

    *autre chose: comment faire pour compiler et/ou rédiger un programme en language assembleur?
    0
  3. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  4. salhi
     
    bonjour,
    Ne t’inquiète pas, voilà une solution à ton problème:

    program exemple;
    uses wincrt;
    var a,b:real;
    eq:string;
    err,p1,p2:integer;

    Begin

    writeln(' Donnez l''équation de la droite qui sera de la forme y=ax+b');
    readln(eq);
    p1:=pos('=',eq); {déterminer la position de '=' dans l'équation}
    p2:=pos('x',eq); { déterminer la position de x dans l'équation}
    VAL(copy(eq,p1+1,p2-1-p1),A,err); {a commence de p1+1 est fini en p2-1}

    if(err<>0)then
    write('il y a une erreur dans l''équation à la position ',err)
    else
    begin
    p1:= pos('+',eq);
    VAL(copy(eq,p1+1,length(eq)-p1),B,err); {B de p1 jusqu'à length(eq)}
    if(err=0)then
    {vous avez A et B vous pouvez maintenant les manipuler}
    {mais pour vérifier:}
    Writeln('A= ',A:4:2,' et B= ',B:4:2)
    else
    Writeln('il y a une erreur dans l''équation à la position ',err);
    end;
    END.
    0
  5. freeze
     
    c'est compris merci

    Je me suis inspiré de ce que tu m'a dis et j'ai écris un petit programme qui lis a,b, et c en entrant un équation sous forme
    ax²+bx+c=0 , j'ai compilé la source mais j'ai reçu une erreure ( je ne sais pas pourquoi ?) :

    voici la source :

    program Untitled;
    var a,b,c,delta,xun,xdeux:real;
    eq:string;
    err,p1,p2,p3:integer;
    Begin
    Writeln('***Résoudre les équations du second degré***');
    writeln('L''équation sera de la forme ax²+bx+c=0.');
    writeln('Entrez votre équation:');
    read(eq);
    p1:=pos('x²',eq); { déterminer la position de x² dans l'équation}
    p2:=pos('x+',eq); { déterminer la position de x+ dans l'équation}
    p3:=pos('=',eq); { déterminer la position de = dans l'équation}
    VAL(copy(eq,0,p1-1),a,err); {a commence de 0 et finit en p1-1}
    while err<>0 do
    begin
    write('Il y a une erreur sytaxique dans l''équation,retapez la:');
    read(eq);
    readln;readln;
    end
    VAL(copy(eq,p1+1,p2-1),b,err); {b de p1+1 jusqu'à p2 - 2 }
    while err<>0 do
    begin
    write('Il y a une erreur sytaxique dans l''équation,retapez la:');
    read(eq);
    readln;readln;
    end
    VAL(copy(eq,p2+1,p3-1,c,err); {c de p2+1 jusqu'à p3-1}
    while err<>0 do
    begin
    write('Il y a une erreur sytaxique dans l''équation,retapez la:');
    read(eq);
    readln;readln;
    end
    end.


    vous pouvez m'aidez à savoir l'erreur et à la corriger ???
    0
  6. salhi
     
    bonjour,
    pour la syntaxe, il vous manque deux ; après les deux end avant VAL et une parenthèse dans --VAL(copy(eq,p2+1,p3-1,c,err); {c de p2+1 jusqu'à p3-1} --après p3-1.
    mais il y a aussi des erreurs de sémentique:
    A savoir: lorsque en écrit p:=pos('x+',eq) , et p prend par exemple 5, ca signifie que x est la position 5 e + est la position 6 et alors c commence de p+2 et non pas de p+1.
    d'autre part n'oublier pas d'insérer la ligne --uses wincrt;-- à la deuxième ligne sinon le programme ne fonctionnera pas.
    Essayes maintenant de corriger votre programme et informes moi de ce que ce passe.
    0
  7. salhi
     
    Attention: en Pascal, la première position dans une chaine est 1 et non pas 0:
    copy(eq,1,.... à la place de copy(eq,0,........
    0
  8. salhi
     
    si vous n'arrivez pas voilà une autre remarque très importante:
    dans danc copy(ch,p,n): n représente le nombre de caractère qu'on va copier donc pour copier une sous chaîne qui commance de p1 et qui finit à p2: il faut écrire copy(eq,p1,p2-p1+1) puisque le nombre de caractère entre p1 et p2 est: p2-p1+1.
    voilà, je pense comme ça le problème est résolu. mais, si tu veux je t'envoies le code corrigé?
    bonne journée.
    0
  9. grad
     
    merci j'ai corrigé le programme et maintenat il fontione 0 error 0 warning
    0
  10. grad
     
    NON

    le programme se compile et s'éxecute mais à chaque équation que je lui entre il m'affiche
    Il y a une erreur sytaxique dans l''équation,retapez la:

    par exemple : 3x²+2x+2=0 ---------------> Il y a une erreur sytaxique dans l''équation,retapez la:

    j'ai corrigé les erreurs et voici la nouvelle source :
    program Untitled;
    uses wincrt;
    var a,b,c,delta,xun,xdeux:real;
    eq:string;
    err,p1,p2,p3:integer;
    Begin
    Writeln('***Résoudre les équations du second degré***');
    writeln('L''équation sera de la forme ax²+bx+c=0.');
    write('Entrez votre équation:');
    read(eq);
    p1:=pos('x²',eq); { déterminer la position de x² dans l'équation}
    p2:=pos('x+',eq); { déterminer la position de x+ dans l'équation}
    p3:=pos('=',eq); { déterminer la position de = dans l'équation}
    while err<>0 do
    begin
    write('Il y a une erreur sytaxique dans l''équation,retapez la:');
    read(eq);
    p1:=pos('x²',eq); { déterminer la position de x² dans l'équation}
    p2:=pos('x+',eq); { déterminer la position de x+ dans l'équation}
    p3:=pos('=',eq); { déterminer la position de = dans l'équation}
    VAL(copy(eq,1,p1-1),a,err); {a commence de 0 et finit en p1-1}
    readln;readln;
    end;
    VAL(copy(eq,1,p1-1),a,err); {a commence de 0 et finit en p1-1}
    while err<>0 do
    begin
    write('Il y a une erreur sytaxique dans l''équation,retapez la:');
    read(eq);
    p1:=pos('x²',eq); { déterminer la position de x² dans l'équation}
    p2:=pos('x+',eq); { déterminer la position de x+ dans l'équation}
    p3:=pos('=',eq); { déterminer la position de = dans l'équation}
    VAL(copy(eq,p1+2,p2-1),b,err); {b de p1+2 jusqu'à p2 - 2 }
    readln;readln;
    end;
    VAL(copy(eq,p1+2,p2-1),b,err); {b de p1+2 jusqu'à p2 - 2 }
    while err<>0 do
    begin
    write('Il y a une erreur sytaxique dans l''équation,retapez la:');
    read(eq);
    p1:=pos('x²',eq); { déterminer la position de x² dans l'équation}
    p2:=pos('x+',eq); { déterminer la position de x+ dans l'équation}
    p3:=pos('=',eq); { déterminer la position de = dans l'équation}
    VAL(copy(eq,p2+2,p3-1),c,err); {c de p2+2 jusqu'à p3-1}
    readln;readln;
    end;
    VAL(copy(eq,p2+2,p3-1),c,err); {c de p2+2 jusqu'à p3-1}
    writeln('a=',a,'b=',b,'c=',c);
    readln;readln;
    end.


    * AUTRE CHOSE : Comment indiquer a l'ordinateur que si a est collé au b l'ordinateur lui affecte la valeur de 1 (c'est a dire le ce qui est entre a et b) ?
    0
  11. salhi
     
    si vous avez bien lis ma réponse j'ai vous dis que dns copy(eq,p,n), n représente le nombre de caractères à extraire et non pas la position de fin et puisque le nombre de caractères entre p1 et p2 est (p2-p1+1) donc ce n'est plus copy(eq,p1+2,p2-1) qui veut dire que b de p1+2 jusqu' p2-2 mais c'est copy(eq,p1+2,p2-1-(p1+2)+1).
    vous pouvez maintenant essayé en attendant que je vous prépare le code complet.
    0
  12. salhi
     
    voilà la solution, elle donne bien le résultat, lisez bien les commentères.
    ----------------
    program Untitled;
    uses wincrt;
    var a,b,c,delta,xun,xdeux:real;
    eq:string;
    err,p1,p2,p3:integer;
    Begin
    Writeln('***Résoudre les équations du second degré***');
    writeln('L''équation sera de la forme ax²+bx+c=0.');
    write('Entrez votre équation:');
    readln(eq); {éviter tjs l'utilisation de read, utilises readln }
    p1:=pos('x²',eq); { déterminer la position de x² dans l'équation}
    p2:=pos('x+',eq); { déterminer la position de x+ dans l'équation}
    p3:=pos('=',eq); { déterminer la position de = dans l'équation}
    {--ici la valeur initiale de err est déjà 0 donc il ne va jamais entrer à la boucle --}
    (* il faut donc faire monter la ligne de calcul de a*)
    VAL(copy(eq,1,p1-1),a,err); {a commence de 0 et finit en p1-1}
    while err<>0 do
    begin
    write('Il y a une erreur sytaxique dans l''équation,retapez la:');
    readln(eq);
    p1:=pos('x²',eq); { déterminer la position de x² dans l'équation}
    p2:=pos('x+',eq); { déterminer la position de x+ dans l'équation}
    p3:=pos('=',eq); { déterminer la position de = dans l'équation}
    VAL(copy(eq,1,p1-1),a,err); {a commence de 0 et finit en p1-1}

    end;
    {-- cette ligne est déplacer vers le haut--
    VAL(copy(eq,1,p1-1),a,err); {a commence de 0 et finit en p1-1}
    (**** même chose pour toutes les boucles ****)
    VAL(copy(eq,p1+2,p2-1-(p1+2)+1),b,err); {b de p1+2 jusqu'à p2 - 2 }
    while err<>0 do
    begin
    write('Il y a une erreur sytaxique dans l''équation,retapez la:');
    readln(eq);
    p1:=pos('x²',eq); { déterminer la position de x² dans l'équation}
    p2:=pos('x+',eq); { déterminer la position de x+ dans l'équation}
    p3:=pos('=',eq); { déterminer la position de = dans l'équation}
    VAL(copy(eq,p1+2,p2-1-(p1+2)+1),b,err); {b de p1+2 jusqu'à p2 - 2 }

    end;
    {--même chose ---VAL(copy(eq,p1+2,p2-1),b,err); {b de p1+2 jusqu'à p2 - 2 }
    VAL(copy(eq,p2+2,p3-1-(p2+2)+1),c,err); {c de p2+2 jusqu'à p3-1}
    while err<>0 do
    begin
    write('Il y a une erreur sytaxique dans l''équation,retapez la:');
    readln(eq);
    p1:=pos('x²',eq); { déterminer la position de x² dans l'équation}
    p2:=pos('x+',eq); { déterminer la position de x+ dans l'équation}
    p3:=pos('=',eq); { déterminer la position de = dans l'équation}
    VAL(copy(eq,p2+2,p3-1-(p2+2)+1),c,err); {c de p2+2 jusqu'à p3-1}

    end;
    {-- de même ---VAL(copy(eq,p2+2,p3-1),c,err); {c de p2+2 jusqu'à p3-1}
    writeln('a=',a:4:2,' b=',b:4:2,' c=',c:4:2);
    readln;readln;
    end.
    --------------
    reste à résoudre maintenant avec delta, il y a plein de conditions à faire. bonne chance.
    0