Aide (addition)

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
Configuration: Windows XP
Firefox 3.0.1

5 réponses

  • Votes
  • Date
  • Date décroissante
  1. Bon week-end à celui qui essaiera de déchiffrer les 488 lignes non indentées!
    1. 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
      1. 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.
        1. décrit ton problème.
          quand survient il que se passe t il ?
          J'aimerai gagner du temps de déchiffrage.
          1. 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
            1. 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 ?