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