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