Aide (addition)

Fermé
fmyl Messages postés 3 Date d'inscription samedi 13 décembre 2008 Statut Membre Dernière intervention 14 décembre 2008 - 13 déc. 2008 à 21:50
 olivier - 14 déc. 2008 à 18:23
salut tout le monde,
j'espére que vous allez tous bien
bon je veux que vous m'aider dans un projet d'algorithmique en pointeure des polynomes
j'ai le probléme exactement dand la parti d'addition
voici tt le code
program polynome;
uses fdelay,crt;
type pliste=^liste;
liste=record
coef:integer;
variable:char;
expo:integer;
suivant:pliste;
end;
var ch,ch1:string;
nb:integer;
choix:char;
tete,tete1,res,mul:pliste;
{////////////////////////////choix/////////////////////////////}
procedure affichermenu(choix:char);
BEGIN
CLRSCR;
TEXTBACKGROUND(red);
TEXTCOLOR(yellow);
gotoxy(34,5);
writeln(' MENU ');
gotoxy(19,7);
writeln('ADDITION 1');
gotoxy(19,8);
writeln('MULTIPLICATION 2');
gotoxy(19,9);
writeln('DEREVE 3');
gotoxy(19,10);
writeln('PUISSANCE 4');
gotoxy(19,11);
writeln('sortir 5');
gotoxy(22,13);
write('Donnez votre choix:[ ]');
GOTOXY(26,16);
textcolor(2);
gotoxy(15,15);
write('');
gotoxy(29,16);
write('');
gotoxy(42,13);

end;
{///////////////////////////lire///////////////////////////////}
procedure lire(s:string;var i:integer;var coef:integer;var variable:char;var expo:integer;var arret:boolean);
var fin_moins,fin:boolean;
valeur ,l :integer;
begin
arret:=false; fin_moins:=false;
while(s[i]=' ') do inc(i);
if(s[i]='-') then
begin
fin_moins:=true;
i:=i+1;
end;
l:=length(s); valeur:=0; fin:=false;
while(i<=l)and (not fin) do
begin
if(ord(s[i])>=ord('0')) and (ord(s[i])<=ord('9')) then
begin
valeur:=(valeur*10)+ord(s[i])-ord('0');
i :=i+1;
end
else fin:=true;
end;
if(fin_moins=true) then coef:=-valeur
else coef:=valeur;
variable:=s[i];
i:=i+1; fin:=false; valeur:=0;
while(i<=l)and (not fin) do
begin
if(ord(s[i])>=ord('0')) and (ord(s[i])<=ord('9')) then valeur:=(valeur*10)+ord(s[i])-ord('0')
else fin:=true;
i :=i+1;
end;
expo:=valeur;
if(i>l) then arret:=true
else begin
while(s[i]=' ') do inc(i);
inc(i);
end;
end;
(***********************creerL********************)
procedure creerL(s:string;var tete:pliste);
var p,q:pliste;
variable:char;
coef,expo,i:integer;
fin:boolean;
begin
fin:=false; tete:=nil; i:=1;
lire(s,i,coef,variable,expo,fin);
new(p);
p^.coef:=coef;
p^.variable:=variable;
p^.expo:=expo;
tete:=p;
while(not fin) do
begin
lire(s,i,coef,variable,expo,fin);
new(q);
q^.coef:=coef;
q^.variable:=variable;
q^.expo:=expo;
p^.suivant:=q;
p:=q;
end;
p^.suivant:=nil;
end;

(***********************affichage**********************)
procedure afficher_liste(tete:pliste);
var p:pliste;
op:integer;
begin
p:=tete; op:=0;
while p<>nil do
begin

if (p^.expo=0) and (p^.coef<>0)then
begin
if(op=1) then write(' + ');
write(p^.coef);
end
else if (p^.expo<>0) and (p^.coef<>0) then
begin
if(op=1) then write(' + ');
write(p^.coef,p^.variable,p^.expo);
end;
p:=p^.suivant;
op:=1;
end;
writeln;
end;
{////////////////////////liberation //////////////////////////////////}
procedure libererL(var tete:pliste);
var p,Q:pliste;
begin
P:=tete;
while (P<> nil) do
begin
Q:=P^.suivant;
dispose(P);
P:=Q;
end;
end;
(************************Derive****************************)
procedure derive(var tete:pliste);
var p:pliste;
begin
p:=tete;
if(p^.expo=0) then tete:=p^.suivant;
while(p<>nil) do
begin
if(p^.expo=0) then p^.coef:=0
else begin
p^.coef:=p^.coef * p^.expo;
dec(p^.expo);
end;
p:=p^.suivant;
end;
end;
{************************addition de 2 polynomes************************}
{procedure addition(var res:pliste;tete1:pliste;tete2:pliste);
var p1,p2,p,q:pliste;
C:CHAR;
begin
p1:=tete1; p2:=tete2;
if((tete1=nil) and (tete2=nil)) then res:=nil
else begin
new(p);
if(p1^.expo<p2^.expo) then
begin
p^.coef:=p1^.coef;
p^.variable:=p1^.variable;
p^.expo:=p1^.expo;
res:=p;
p1:=p1^.suivant;
end
else begin
if(p1^.expo>p2^.expo) then
begin
p^.coef:=p1^.coef;
p^.variable:=p1^.variable;
p^.expo:=p1^.expo;
res:=p;
p1:=p1^.suivant;
end
else begin
p^.coef:=p1^.coef+p2^.coef;
p^.variable:=p1^.variable;
p^.expo:=p1^.expo;
res:=p;
p2:=p2^.suivant;
p1:=p1^.suivant;
end;
end;
while((p1<>nil) and (p2<>nil)) do
begin
new(q);
if(p1^.expo<p2^.expo) then
begin
q^.coef:=p1^.coef;
q^.variable:=p1^.variable;
q^.expo:=p1^.expo;
p1:=p1^.suivant;
end
else begin
if(p1^.expo>p2^.expo) then
begin
q^.coef:=p2^.coef;
q^.variable:=p2^.variable;
q^.expo:=p2^.expo;
p2:=p2^.suivant;
end
else begin
q^.coef:=p1^.coef+p2^.coef;
q^.variable:=p1^.variable;
q^.expo:=p1^.expo;
p2:=p2^.suivant;
p1:=p1^.suivant;
end;
end;
p^.suivant:=q;
p:=q;
end;
if(p1<>nil) then
begin
while(p1<>nil) do
begin
new(q);
q^.coef:=p1^.coef;
q^.variable:=p1^.variable;
q^.expo:=p1^.expo;
p^.suivant:=q;
p:=q;
p1:=p1^.suivant;
end;
end
else begin
if(p2<>nil) then
begin
while(p2<>nil) do
begin
new(q);
q^.coef:=p2^.coef;
q^.variable:=p2^.variable;
q^.expo:=p2^.expo;
p^.suivant:=q;
p:=q;
p2:=p2^.suivant;
end;
end;
end;
p^.suivant:=nil;
end;
end; }
procedure addition(var res:pliste;tete1:pliste;tete2:pliste);
var p1,p2,p,q:pliste;
C:CHAR;
begin
p1:=tete1; p2:=tete2;
if((tete1=nil) and (tete2=nil)) then res:=nil
else begin
new(p);
if(p1^.expo<p2^.expo) then
begin
p^.coef:=p1^.coef;
p^.variable:=p1^.variable;
p^.expo:=p1^.expo;
res:=p;
p1:=p1^.suivant;
end
else begin
if(p1^.expo>p2^.expo) then
begin
p^.coef:=p2^.coef;
p^.variable:=p2^.variable;
p^.expo:=p2^.expo;
res:=p;
p2:=p2^.suivant;
end
else begin
p^.coef:=p1^.coef+p2^.coef;
p^.variable:=p1^.variable;
p^.expo:=p1^.expo;
res:=p;
p2:=p2^.suivant;
p1:=p1^.suivant;
end;
end;
while((p1<>nil) and (p2<>nil)) do
begin
new(q);
if(p1^.expo<p2^.expo) then
begin
q^.coef:=p1^.coef;
q^.variable:=p1^.variable;
q^.expo:=p1^.expo;
p1:=p1^.suivant;
end
else begin
if(p1^.expo>p2^.expo) then
begin
q^.coef:=p2^.coef;
q^.variable:=p2^.variable;
q^.expo:=p2^.expo;
p2:=p2^.suivant;
end
else begin
q^.coef:=p1^.coef+p2^.coef;
q^.variable:=p1^.variable;
q^.expo:=p1^.expo;
p2:=p2^.suivant;
p1:=p1^.suivant;
end;
end;
p^.suivant:=q;
p:=q;
end;
if(p1<>nil) then
begin
while(p1<>nil) do
begin
new(q);
q^.coef:=p1^.coef;
q^.variable:=p1^.variable;
q^.expo:=p1^.expo;
p^.suivant:=q;
p:=q;
p1:=p1^.suivant;
end;
end
else begin
if(p2<>nil) then
begin
while(p2<>nil) do
begin
new(q);
q^.coef:=p2^.coef;
q^.variable:=p2^.variable;
q^.expo:=p2^.expo;
p^.suivant:=q;
p:=q;
p2:=p2^.suivant;
end;
end;
end;
p^.suivant:=nil;
end;
end;

{************************Multplication de 2 polynomes************************}
procedure multiplication(var tete:pliste;tete1:pliste;tete2:pliste);
var p1,p2,p,q,r:pliste;
begin
p1:=tete1;tete:=nil;
while(p1<>nil) do
begin
p2:=tete2;
if(tete=nil) then
begin
new(p);
p^.coef:=(p1^.coef*p2^.coef);
p^.variable:=p1^.variable;
p^.expo:=(p1^.expo+p2^.expo);
tete:=p;
p2:=p2^.suivant;
end;
while(p2<>nil) do
begin
new(q);
q^.coef:=(p1^.coef*p2^.coef);
q^.variable:=p1^.variable;
q^.expo:=(p1^.expo+p2^.expo);
p^.suivant:=q;
p:=q;
p2:=p2^.suivant;
end;
p1:=p1^.suivant;
end;
p^.suivant:=nil;
end;
{************************Puissance dun polynome************************}
procedure Puissance(var tete:pliste;puis:integer);
var tete1,tete2:pliste;
i:integer;
begin
tete1:=tete; tete2:=tete; i:=1;
while(i<puis) do
begin
multiplication(tete,tete1,tete2);
tete2:=tete;
inc(i);
end;
end;

{œœœœœœœœœœœœœœœœœœœœœœœœœœœœProgram principalœœœœœœœœœœœœœœœœœœœœœœœ}
begin

{writeln('entre la premi‚re polynome');
(*readln(ch);*)
writeln('entrer la 2eme polynome');
(*readln(ch1); *)
{ch:='1X1 + 4X2 + 3X4';
ch1:='7X2 + 2X6 + 5X1'; }
{creerL(ch,tete);
afficher_liste(tete);
creerL(ch1,tete1);
afficher_liste(tete1); }
REPEAT
AFFICHERMENU(CHOIX);
CHOIX := Readkey;
CASE (CHOIX) Of
'1': BEGIN
CLRSCR;
writeln('Entrer la premi‚re polynome : ');
readln(ch);
writeln('Entrer la deusi‚me polynome : ');
readln(ch1);
creerL(ch,tete);
write('P1(X) = ');
afficher_liste(tete);
creerL(ch1,tete1);
write('P2(X) = ');
afficher_liste(tete1);
addition(res,tete,tete1);
write('P_Res(X) = ');
afficher_liste(res);
END;
'2':BEGIN
CLRSCR;
writeln('Entrer la premi‚re polynome : ');
readln(ch);
writeln('Entrer la deusi‚me polynome : ');
readln(ch1);
creerL(ch,tete);
write('P1(X) = ');
afficher_liste(tete);
creerL(ch1,tete1);
write('P2(X) = ');
afficher_liste(tete1);
multiplication(mul,tete,tete1);
write('P_Mul(X) = ');
afficher_liste(mul);
END;
'3': BEGIN
clrscr;
writeln('Entrer une polynome : ');
readln(ch);
creerL(ch,tete);
write('P1(X) = ');
afficher_liste(tete);
derive(tete);
write('P_Derive(X) = ');
afficher_liste(tete);
END;
'4':BEGIN
clrscr;
writeln('Entrer la premi‚re polynome :');
readln(ch);
writeln('Entrer la degr‚ de puissance : ');
readln(nb);
creerL(ch,tete);
write('P1(X) = ');
afficher_liste(tete);
puissance(tete,nb);
write('(P1(X))',nb,' = ');
afficher_liste(tete);
END;
END;
READLN;
UNTIL(CHOIX = '5');
{creerL(ch,tete);
afficher_liste(tete);
creerL(ch1,tete1);
afficher_liste(tete1);
{libererL(tete);
addition(res,tete,tete1);
afficher_liste(res);
{multiplication(mul,tete,tete1);
afficher_liste(mul);
puissance(tete,2);
afficher_liste(tete);
derive(tete);
afficher_liste(tete);}
readln;

end.



s'il vous plait aider moi plz
et merci d'avvance

5 réponses

Bon week-end à celui qui essaiera de déchiffrer les 488 lignes non indentées!
0
fmyl Messages postés 3 Date d'inscription samedi 13 décembre 2008 Statut Membre Dernière intervention 14 décembre 2008
13 déc. 2008 à 22:51
salut
oui ta raison il fallait que je posais juste l'addition mais j'ai posé tt pour savoir le bleme
mais en tout cas ta raison je ss désole
allors maintenant c'est juste l'addition
le probléme cé que cette adition ne fonction pas correctement j'essai mais j'echoué vous pouvez m'aider
addiion
procedure addition(var res:pliste;tete1:pliste;tete2:pliste);
var p1,p2,p,q:pliste;
C:CHAR;
begin
p1:=tete1; p2:=tete2;
if((tete1=nil) and (tete2=nil)) then res:=nil
else begin
new(p);
if(p1^.expo<p2^.expo) then
begin
p^.coef:=p1^.coef;
p^.variable:=p1^.variable;
p^.expo:=p1^.expo;
res:=p;
p1:=p1^.suivant;
end
else begin
if(p1^.expo>p2^.expo) then
begin
p^.coef:=p2^.coef;
p^.variable:=p2^.variable;
p^.expo:=p2^.expo;
res:=p;
p2:=p2^.suivant;
end
else begin
p^.coef:=p1^.coef+p2^.coef;
p^.variable:=p1^.variable;
p^.expo:=p1^.expo;
res:=p;
p2:=p2^.suivant;
p1:=p1^.suivant;
end;
end;
while((p1<>nil) and (p2<>nil)) do
begin
new(q);
if(p1^.expo<p2^.expo) then
begin
q^.coef:=p1^.coef;
q^.variable:=p1^.variable;
q^.expo:=p1^.expo;
p1:=p1^.suivant;
end
else begin
if(p1^.expo>p2^.expo) then
begin
q^.coef:=p2^.coef;
q^.variable:=p2^.variable;
q^.expo:=p2^.expo;
p2:=p2^.suivant;
end
else begin
q^.coef:=p1^.coef+p2^.coef;
q^.variable:=p1^.variable;
q^.expo:=p1^.expo;
p2:=p2^.suivant;
p1:=p1^.suivant;
end;
end;
p^.suivant:=q;
p:=q;
end;
if(p1<>nil) then
begin
while(p1<>nil) do
begin
new(q);
q^.coef:=p1^.coef;
q^.variable:=p1^.variable;
q^.expo:=p1^.expo;
p^.suivant:=q;
p:=q;
p1:=p1^.suivant;
end;
end
else begin
if(p2<>nil) then
begin
while(p2<>nil) do
begin
new(q);
q^.coef:=p2^.coef;
q^.variable:=p2^.variable;
q^.expo:=p2^.expo;
p^.suivant:=q;
p:=q;
p2:=p2^.suivant;
end;
end;
end;
p^.suivant:=nil;
end;
end;



merci et je ss désole pour ces milles lignes
s'il vous plait aidez moi
0
Je veux bien regarder ton turbo pascal, mais c'est vrai que l'indentation permet en général de corriger très vite les erreurs, très souvent il s'agit d'un problème de syntaxe d'ailleurs.
0
décrit ton problème.
quand survient il que se passe t il ?
J'aimerai gagner du temps de déchiffrage.
0

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

Posez votre question
fmyl Messages postés 3 Date d'inscription samedi 13 décembre 2008 Statut Membre Dernière intervention 14 décembre 2008
14 déc. 2008 à 12:52
bonjour
j'éspere que vous aavez bien
bon mon probeme est comme suit
dans l'execution l'addition ne fonctionne pas corectement par exemple
j'ai 2 polynomes et je veux calculer leur sommes
quand je fait (ceci est le premier bleme)

p1=2X1 + 3X2 + 5X6 + 3X4
P2=3X1 + 5X3 + 6X2
RES=5X1+3X2 +5X3 +6X2+5X6+3X4
(2éme bleme)
p1=2X3 + 5X2 +6X11 +1X4
P2=3X2+5X3+4X11+3X6+1X4
RES=3X2+7X3+5X2+10X11+2X4+3X6


je crois que maintenant le bleme est bien précie je sais que je vous dérange mais vraiment je veux que vous m'aider s'il vous plait
et merci
0
Attendez, je ne suis peut-être pas très bien réveillé, mais dans votre précédent message vous dites qu'il y a deux problèmes.

Or RES est bien égal à P1+P2. Quel est le problème ?
0