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

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. 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.
    1. 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.
      1. 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) ?
        1. merci j'ai corrigé le programme et maintenat il fontione 0 error 0 warning
          1. 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.
            1. 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,........
              1. 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.
                1. 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 ???
                  1. 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.
                    1. 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?
                      1. 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.