Prośba o wytłumaczeniu kodu programu.

0

Witam, były ktoś w stanie wytłumaczyć mi kod tego programu :
program wielomiany;

uses crt, sysutils, strutils;
 
 
const
    max_stopien = 10;
 
 
type
    vect = array[0..(2*max_stopien)] of integer;
{wspolczynniki w tablicy przechowywane sa w kolejnosci od wyrazu wolnego do najwyzszego stopnia}
 
 
procedure odczytaj_linie(var v : vect; linia : string);
var
    temp : vect;
    i, j, kod : integer;
begin
    for i := 0 to max_stopien do
        begin
            val(extractword(i + 1, linia, [' ']), temp[i], kod);
            if kod <> 0 then
                break;
        end;
    j := 0;
    i := i - 1;
    while i >= 0 do
        begin
            v[j] := temp[i];
            i := i - 1;
            j := j + 1;
        end;
end;
 
 
procedure wczytaj_plik(var zrodlowy_a, zrodlowy_b : vect);
var
    f : Text;
    linia : string;
begin
    if not (fileexists('wielomiany.txt')) then
        begin
            writeln('Plik wielomiany.txt nie istnieje!');
            halt(1);
        end;
    assign(f, 'wielomiany.txt');
    reset(f);
 
    readln(f, linia);
    odczytaj_linie(zrodlowy_a, linia);
 
    readln(f, linia);
    odczytaj_linie(zrodlowy_b, linia);
 
    close(f);
end;
 
 
procedure dodawanie(zrodlowy_a, zrodlowy_b : vect; var wynikowy : vect);
var
    i : integer;
begin
    for i := 0  to max_stopien do
        wynikowy[i] := zrodlowy_a[i] + zrodlowy_b[i];
end;
 
 
procedure odejmowanie(zrodlowy_a, zrodlowy_b : vect; var wynikowy : vect);
var
    i : integer;
begin
    for i := 0  to max_stopien do
        wynikowy[i] := zrodlowy_a[i] - zrodlowy_b[i];
end;
 
 
procedure mnozenie(zrodlowy_a, zrodlowy_b : vect; var wynikowy : vect);
var
    i, j : integer;
begin
    for i := 0  to max_stopien do
        for j := 0 to max_stopien do
            wynikowy[i + j] := wynikowy[i+j] + zrodlowy_a[i] * zrodlowy_b[j];
end;
 
 
procedure wyswietl(wynikowy : vect);
var
    i : integer;
begin
    write('Wynikowy wielomian: ');
    for i := (2 * max_stopien) downto 2 do
        if wynikowy[i] <> 0 then
            if wynikowy[i] >= 0 then
                write('+', wynikowy[i], 'x^', i)
            else
                write(wynikowy[i], 'x^', i);
    if wynikowy[1] <> 0 then
        if wynikowy[1] >= 0 then
            write('+', wynikowy[1], 'x')
        else
            write(wynikowy[1], 'x');
    if wynikowy[0] <> 0 then
        if wynikowy[0] >= 0 then
            write('+', wynikowy[0])
        else
            write(wynikowy[0]);
    writeln;
    writeln('Wciśnij [enter] aby powrócić do menu');
    readln;
end;
 
 
var
    zrodlowy_a, zrodlowy_b, wynikowy : vect;
    wybor : integer;
    i : integer;
begin
    for i := 0 to (2 * max_stopien) do
        begin
            zrodlowy_a[i] := 0;
            zrodlowy_b[i] := 0;
        end;
    wczytaj_plik(zrodlowy_a, zrodlowy_b);
    repeat
        //clrscr;
        for i := 0 to (2 * max_stopien) do
            wynikowy[i] := 0;
        writeln('1 - dodawanie wielomianow');
        writeln('2 - odejmowanie wielomianow');
        writeln('3 - mnozenie wielomianow');
        writeln('0 - wyjscie');
        readln(wybor);
        if wybor = 0 then
            break
        else if wybor = 1 then
            begin
                dodawanie(zrodlowy_a, zrodlowy_b, wynikowy);
                wyswietl(wynikowy);
            end
        else if wybor = 2 then
            begin
                odejmowanie(zrodlowy_a, zrodlowy_b, wynikowy);
                wyswietl(wynikowy);
            end
        else if wybor = 3 then
            begin
                mnozenie(zrodlowy_a, zrodlowy_b, wynikowy);
                wyswietl(wynikowy);
            end;
    until false;
end.

Głównie chodzi mi o mnożenie wielomianów.Z góry dziękuję za pomoc.

0

pomnóż sobie na karce:
(Ax3+Bx2+Cx+D)*(Ex2+Fx+G) a potem popatrz na kod.

1 użytkowników online, w tym zalogowanych: 0, gości: 1