koszalek Opublikowano 17 Marca 2009 Zgłoś Opublikowano 17 Marca 2009 (edytowane) 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 abortedDodawanie działa, odejmowanie, mnożenie, dzielenie NIE działa. Gdy longint zmienię na real to działa dzielenie... Edytowane 17 Marca 2009 przez koszalek Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
bilas Opublikowano 17 Marca 2009 Zgłoś Opublikowano 17 Marca 2009 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: Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
koszalek Opublikowano 17 Marca 2009 Zgłoś Opublikowano 17 Marca 2009 (edytowane) 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 18 Marca 2009 przez koszalek Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...