Problem z funkcjami sterującymi

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.

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 :)

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