Problem z funkcjami sterującymi

2012-02-19 14:25

Rejestracja: 8 lat temu

Ostatnio: 8 lat temu

0

Mam takie zadanie:

Zad. 1. (Zadanie 1 z listy 1 dr Heleny Krupickiej) Dany jest wielomian W(x) =
a0 · xn + a1 · xn−1 + . . . + an. Napisz program, który:
1) wczyta: stopien wielomianu W i jego całkowite współczynniki (od a0 do an),
2) wypisze ten wielomian,
3) obliczy jego pochodna,
4) wypisze te pochodna,
5) za pomoca schematu Hornera obliczy wartosc pochodnej w punkcie 2 i wypisze
ja.
Uwaga: wielomian nalezy wypisac czytelnie, bez składników o zerowych współczynnikach
(za wyjatkiem wielomianu zerowego) i bez zbednych operatorów +.
Przykład wyników dla danych n = 5 i współczynników 2 0 0 3 0 1:
W(x) = 2 · x5 + 3 · x2 + 1 · x0.
W0(x) = 10 · x4 + 6 · x1
W0(2) = 172

const max = 30;

var st: integer;
    wsp: array[0..max] of integer;

{tylko plus na poczatku}
procedure WypiszWielomian;
var k: integer;
begin
    write('W(x)=');
    for k:=0 to st do
    begin
        if (wsp[k] < 0) then
        begin
{           if (wsp[k] = 0) then
            begin
                write;
            end
            else }
            write(wsp[k],'x^',st-k);
        end
        else
            if (wsp[k] = 0) then
            begin
                write;
            end
            else
            write('+',wsp[k],'x^',st-k);
    end;
    writeln;
end;

{dziala nie do konca, ' }
procedure ObliczPochodna;
var k: integer;
    i, wynik: integer;
begin
    write('Pochodna W(x)=');
    i:=st;
    for k:=0 to st do
    begin
        i:=i-1;
        if (i = -1) then
        begin
            write;
        end;
        if ( st = 0) then
        begin
            write(wsp[k]);
        end
        else
        write(wsp[k]*(st-k),'x^',i,'+');
    end;
end;
Podaj stopien wielomianu: 3
Podaj wspolczynniki (od najwiekszej potegi): 5 2 1 0
W(x)=+5x^3+2x^2+1x^1
Pochodna W(x)=15x^2+4x^1+1x^0+0x^-1+
d:\Studia\Pascal>D:\Studia\Pascal\ZAD1_L~1.EXE
Podaj stopien wielomianu: 3
Podaj wspolczynniki (od najwiekszej potegi): -2 0 -2 0
W(x)=-2x^3-2x^1
Pochodna W(x)=-6x^2+0x^1+-2x^0+0x^-1+

Co zrobić aby w pochodnej było W(x)=15x^2+4x^1+1 zamiast W(x)=15x^2+4x^1+1x^0+0x^-1+

I jeszcze jak napisać W'(x)=? Jak tak wpiszę otrzymuję syntax error.

edytowany 3x, ostatnio: madmike, 2012-02-19 18:19

Pozostało 580 znaków

2012-02-19 16:55

Rejestracja: 10 lat temu

Ostatnio: 6 lat temu

0

Ja to widzę tak:

  1. Deklarujesz dwie tablice - wspWielomianu i wspPochodnej
  2. Wczytujesz stopień wielomianu "st"
  3. W pętli od st do 0 wczytujesz współczynniki wielomianu (for i:= st downto 0)
  4. W pętli od st do 1 obliczasz współczynniki pochodnej i zapisujesz je do tablicy wspPochodnej pod indeksami od st-1 do 0
  5. Wypisujesz wielomian a następnie pochodną.
    Dzięki takiemu podejściu wystarczy napisać tylko jedną procedurę wypisującą wyniki. Wiadomo przecież, że obliczona pochodna jest również wielomianem, tylko mniejszego stopnia.
    Procedura obliczająca pochodną (w zarysie):
    procedure ObliczPochodna;
    begin
    for i:= st downto 1 do begin
    if wspWielomianu[i] = 0 then wspPochodnej[i-1]:= 0
    else wspPochodnej:= {Tutaj Twoje obliczenia}
    end;
    end;

    Procedura wypisująca na ekranie wielomian (jako parametry przyjmuje tablicę zawierającą współczynniki wielomianu lub pochodnej oraz stopień)

    procedure WypiszWyniki(const Tablica: wsp; Stopien: Integer);
    begin
    for i:= Stopien downto 0 do
    if Tablica[i] <> 0 then begin {Tylko niezerowe współczynniki}
      if i > 1 then {Dodajemy x^i}
      else if i = 1 then {Dodajemy samo x}
      else {Tutaj tylko sam współczynnik}
    end;
    end;

Odpowiedź na drugie pytanie jest krótka:

Write('Pochodna W''(x) = ');

To tyle. Dalej próbuj sam i ewentualnie pytaj, ale najpierw próbuj :)

Pozostało 580 znaków

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