Salve a tutti!!! Chiedo aiuto nella soluzione del seguente esercizio che, pur essendo semplice, non mi riesce di risolvere completamente. Si tratta di scrivere la somma di due polinomi di grado qualunque con un programma Pascal, tenendo presente che un polinomio di grado qualsiasi( che noi supporremo non superi il grado dieci) può essere pensato come un array di record con quest'ultimo costituito da due campi, che rappresentano il coefficiente e l'esponente di ogni suo termine, rispettivamente. Nella soluzione che vi propongo ho usato due procedure, una per acquisire i due polinomi e rappresentarli in forma scritta e la seconda per calcolarne la somma, tenendo presente che se i due polinomi hanno gradi diversi n ed m ( con ad esempio n>m), si dovranno sommare solo i primi m coefficienti dei rispettivi termini lasciando inalterati gli altri n-m.
Il programma che presento è sintatticamente corretto ma non fornisce risultati esatti; ad esempio se il primo polinomio è: 2 x^2+3 x+1=0, e il secondo è 3 x^3+2x^2+5x+2=0, il risultato è: 5 X^2+3=0 e non 3x^3+4x^2+8x+3=0. Ecco il testo del programma:

codice:
program SommaDiPolinomi(input,output);
label 99;
const bell=07;
      n=10;
type termine = record
                     coeff : real;
                     esp : integer;
               end;
     pol=array[1..n]of termine;

var p,pol1,pol2,polsomma : pol;
    l,m,c1,c2 : integer;

procedure leggipolinomio( var p :pol; var c : integer; k : integer);
var i : integer;
begin
     if k>n
     then begin
               writeln(chr(bell),'Errore nei dati di ingresso! - STOP -');
               goto 99
          end
     else
         writeln('Fornire il polinomio in ingresso: ');
         writeln;
         for i:=1 to k
                   do begin
                           readln(p[i].coeff);
                           readln(p[i].esp);
                      end;
     readln(c);
     writeln;
     for i:=1 to k
              do write((p[i].coeff):2:2,' * X^ ',(p[i].esp):2,' + ');
     writeln(c,' = 0');

end;(* fine procedura leggipolinomio *)
procedure Somma( var polsomma : pol; c1,c2 : integer; pol1,pol2 : pol);
var i,d : integer;
begin
     if pol1[l].esp>=pol2[m].esp
     then begin
               for i:=1 to pol2[m].esp
                           do begin
                                   polsomma[i].coeff:=pol1[i].coeff+pol2[i].coeff;
                                   polsomma[i].esp:=pol1[i].esp;
                              end;
               for i:=pol2[m].esp+1 to pol1[l].esp
                   do begin
                           polsomma[i].coeff:=pol1[i].coeff;
                           polsomma[i].esp:=pol1[i].esp;
                      end
          end
     else begin
               for i:=1 to pol1[l].esp-1
                           do begin
                                   polsomma[i].coeff:=pol1[i].coeff+pol2[i].coeff;
                                   polsomma[i].esp:=pol2[i].esp;
                              end;
               for i:=pol1[l].esp to pol2[m].esp
                   do begin
                           polsomma[i].coeff:=pol2[i].coeff;
                           polsomma[i].esp:=pol2[i].esp;
                      end;
          end;
     d:=c1+c2;
     writeln;
     writeln('Il polinomio somma e'': ');
     writeln;
     if pol1[l].esp>pol2[m].esp
     then begin
               for i:=1 to pol1[l].esp
                               do write((polsomma[i].coeff):2:2,' * X^ ',(polsomma[i].esp):2,' + ');
               writeln(d,' = 0')
          end
     else begin
               for i:=1 to pol2[m].esp
                        do write((polsomma[i].coeff):2:2,' * X^ ',(polsomma[i].esp):2,' + ');
               writeln(d,' = 0');
          end;
end;(* fine procedura Somma *)

(*Corpo del programma *)
begin

     writeln('------------------ Dati di ingresso ----------------------------');
     writeln;
     write('Fornire il grado del primo polinomio: ');
     readln(l);
     writeln;
     write('Fornire il grado del secondo polinomio: ');
     readln(m);
     writeln;
     leggipolinomio(pol1,c1,l);
     writeln;
     leggipolinomio(pol2,c2,m);
     Somma(polsomma,c1,c2,pol1,pol2);
     99 :
     readln;


end.
Grazie a tutti coloro che saranno in grado di fornire la soluzione corretta del programma, segnalandomi gli errori. Ciao