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

Fermé
grad - 24 déc. 2007 à 12:29
 grad - 26 déc. 2007 à 19:27
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?
A voir également:

14 réponses

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
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
répondez moi
0
répondez moi
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
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
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
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
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
merci j'ai corrigé le programme et maintenat il fontione 0 error 0 warning
0
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
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
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
OK
0