[FreePascal]Nie kompiluje sie gdy użyję extended lub real


(M4thy5) #1

Gdy jako typ wpiszę integer, longint to kompiluje sie. Nie kompiluje sie jednak gdy wpiszę extended lub real.

Błąd jest taki:

a.pas(10,13) Error: Ordinal expression expected

a.pas(16,4) Fatal: There were 1 errors compiling module, stopping

a.pas(0) Fatal: Compilation aborted

Kod:

uses crt;

var liczba,wynik,licznik:real;


begin

wynik:=1;

clrscr;

writeln('PROGRAM');

writeln;

write('podaj liczbę: ');

readln(liczba);

        for licznik:=1 to liczba do

        begin

                wynik:=wynik*licznik;

        end;

        writeln('wynik: ',wynik);


end.

Dlaczego nie kompiluje sie z tymi typami? P.S. Taki kod kompiluje sie z extended i real bez problemu:

uses crt;

var liczba,wynik,licznik:extended;


begin

liczba:=5;

wynik:=3;

licznik:=2;

writeln(liczba+wynik+licznik:2:1);


end.

([alex]) #2

Zmienna dla for musi być zmienną całkowitoliczbowa.


(M4thy5) #3

Gdy zmienię zmienną 'licznik' na integer to dalej jest problem ze skompilowaniem. Chyba zmienną 'liczba' też trzeba zmienić.


([alex]) #4

Jako granice zmiennej pętli muszą być podane wartości całkowite, więc albo liczba też całkowita albo:

for licznik:=1 to trunc(liczba) do

zamiast trunc dowolna funkcja która zaokrągla w ten czy inny sposób i zwraca wartość całkowitą.