Skocz do zawartości
koszalek

[freepascal]kilka Problemów Z Freepascalem

Rekomendowane odpowiedzi

program test;uses crt;vara,b,c:longint;begin		b:=1000000;		c:=5790;		a:=b/c;		writeln(a);		readln;end.

program.pas(9,13) Error: Incompatible types: got "Extended" expected "LongInt"program.pas(12,4) Fatal: There were 1 errors compiling module, stoppingprogram.pas(0) Fatal: Compilation aborted
Dodawanie działa, odejmowanie, mnożenie, dzielenie NIE działa. Gdy longint zmienię na real to działa dzielenie... Edytowane przez koszalek

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Próbujesz przypisać do typu przechowującego liczby całkowite liczbę zmiennoprzecinkową. W Pascalu kontrola typów jest bardzo rygorystyczna, nie tak jak w C :wink:

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Już rozumiem ;) Ale do czego przydaje sie longint, chodzi o mniejsze zużycie pamięci? Mogło by przecież być coś obsługującego taki sam zakres ale z liczbami rzeczywistymi bo jeśli stosować real do zakresu takiego jaki ma longint to będzie strata pamięci.

 

Mam jeszcze dwa problemy.

 

Zauważyłem taki błąd w Pascalu:

vara,b,c:real;begin		b:=12345678901234567890;		c:=2;		a:=b*c;		writeln(a:1:2);		readln;end.
Gdy liczbę 12345678901234567890 pomnożę * 2 to wynik ukazuje sie taki: -12202130344950000000.00. A przecież powinna to być liczba dodatnia i nie pomnożyło chyba tego prawidłowo. Gdy na końcu dodam jakąś liczbę, nawet zero, po zerze to już nie ma tego problemu czyli 123456789012345678900 i wynik wtedy to 246913578024691000000.00

 

Drugi problem to że nie może być writeln(a:2) bo wynik wtedy to 5.0E-001. A wyczytałem że tak sie robi by były pokazane 2 miejsca po przecinku. A sie okazuje że jednak trzeba zawsze wcześniej określać ile ma być miejsca conajmniej przed przecinkiem zarezerwowane czyli musi być np 1:2 zamiast :2.

begin		b:=1;		c:=2;		a:=b/c;		writeln(a:2);		readln;end.
Może autor na stronie ma błąd:

Jeżeli program ma podzielić 1 na 2, wynik bez naszych dekoracji będzie paskudny, więc można napisać: "writeln(1/2:2)".

źródło: http://turbopascal.skryptoteka.pl/10.html

 

EDYCJA

Double i extended też nei działają poprawnie

Edytowane przez koszalek

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...