Runtime error 216

0

Witam
Robiłem zacząłem robić program do schematu Hornera
Oto to co do tej pory zrobiłem
http://wklej.to/DDEz
Jednak po wpisaniu wielomianu wyskakuje error:

Runtime error 216 at 00404343

Czy ktoś ma pomysł od czego to zależy i jak to naprawić ??

0

po pierwsze indeksy są liczone od 0 więc jak podasz liczbę elementów -> 5 to tablica będzie zawierała się w przedziale [0..4] a więc odwołanie

 Wx[xn]

jest błędne powinno być

 Wx[xn-1]

po drugie nie zadeklarowałeś rozmiaru dla tablicy Px...

0

Pozmieniałem tak jak powiedziałeś ale nadal wyskakuje ten błąd.
Niestety

0

program Schemat_Hornera;

{$APPTYPE CONSOLE}

var
  //Zmienne
  xn:integer=0;            //zmienna od wartosci najwyzszej potegi
  //Tablice
  Wx:array of integer;     //tablica wielomianu
  Px:array of integer;     //tablica p
  Qx:array of integer;     //tablica q
  //Tymczasowe
  pom2:integer=0;          //pomocnicza do wpisywania wielomianu oraz do dzielenie modularnego
  temp1:integer=0;         //pomocnicza do zmiany znaku od "x0"
  temp2:integer=0;         //pomocnicza od zmiany znaku od "xn"
  lt:integer=0;            //pomocnicza do przesuwania tablicu Px
  ble:integer=0;           //tymczasowa do testów


begin
Writeln ('Podaj wartosc najwyzszej potegi');
  Readln(xn);                                                   //Stopien wielomianu
  SetLength(Wx,xn);
  Writeln('Podaj kolejno wartosci stojace przy potegach');

  while pom2<xn do
    begin
      Readln(Wx[pom2]);          //Wpisywanie wielomianu
      pom2:=pom2+1;
    end;

  if Wx[xn-1]<0 then
    begin
      temp2:=-Wx[xn-1];            //Zmiana znaku przy "xn"
      //Writeln(temp2);
    end;

  if Wx[0]<0 then
    begin
      temp1:=-Wx[0];             //Zmiana znaku przy "x0"
      //Writeln(temp1);
    end;

      while ble<xn do
    begin
      Writeln(Wx[ble]);
      ble:=ble+1;
    end;

    pom2:=0;

      SetLength(Px,xn*2);

if Wx[xn-1]=1 then
  begin
    pom2:=pom2+1;
    if  Wx[xn-1] mod pom2 =0 then
      begin
        Px[lt]:=Wx[xn-1];
        Px[lt+1]:=-Wx[xn-1];
        lt:=lt+2;
      end;
                  ble := 0;
        while ble<lt do
    begin
      Writeln(Px[ble]);
      ble:=ble+1;
    end;

 Readln;
end;
readln;
end.


0

chociaż program powinien się odpalić a w przypadku przekroczenia tablicy powinien pojawić się odpowiedni wyjątek, a więc...

http://support.microsoft.com/kb/259279/pl

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