Ĺadny brzuch
Podczas tworzenia programu z wykorzystaniem odwrotnej notacji polskiej (plik binmath.pas z eksperta plus 1/2005) natknąłem się na jedną dziwną moim zdaniem rzecz. A mianowicie funkcja zwróciła mi wynik 9,000 z działania 2,2 + 3,6. Może mi ktoś powiedzieć, jak to naprawić. Chyba, że ja się gdzieś pomyliłem. Proszę o pomoc
Użytkownik dawwin edytował ten post 23 lipiec 2008, 13:39
Forum jest nie tylko dla ludzi kupujących czasopismo, rozumiesz?
Forum jest nie tylko dla ludzi kupujących czasopismo, rozumiesz?
Ale są tu też ludzie, którzy je kupują
Użytkownik dawwin edytował ten post 23 lipiec 2008, 11:59
Ale są tu też ludzie, którzy je kupują A nie mógłbyś podać kodu?
Raport poszedł.
A nie mógłbyś podać kodu?
http://uploader.pl/?d=1E92D71B1
Cały kod programu
Forum jest nie tylko dla ludzi kupujących czasopismo, rozumiesz?
No wiesz, ja mam na belce tytułowej napisane:
Forum Czytelników czasopisma Ekspert
Nie marudź bo sam dostaniesz raport.
PS. jak już, mogłeś napisać "Forum jest nie tylko dla ludzi kupujących czasopismo Ekspert PLUS, rozumiesz?" wtedy żadnych wątów nikt by mieć nie mógł :P Lapsus słowny :)
dawwin, najlepiej użyj programu porównującego, i sprawdź różnice pomiędzy BinMath.pas z płyty KŚEP i Twoim kodem. Potem, jakby różnic nie było, spójrz na kluczową metodę w Unit1.pas, czyli ObliczWyrazenie.
Tak na moje oko to błąd powinien być w funkcji STF i FTS, zobacz czy gdzieś nie użyłeś ich zamiennie.
//EDYCJA:
Taaa, to błąd w kodzie z Eksperta!!! Złe są chyba funkcje STF i FTS, prawidłowo powinny wyglądać tak:
//zamiana napisu na liczbę typu DOUBLE, z podmianą kropki na przecinek function STF(A : String) : Double; var i : Integer; begin for i:=1 to Length(A) do if A[i]=',' then A[i]:='.'; Result:=StrToFloat(A); end; //zamiana liczby DOUBLE na napis, z podmianą przecinka na kropkę function FTS(A : Double) : String; var i : Integer; begin Result:=FloatToStr(A); for i:=1 to length(Result) do if Result[i]='.' then Result[i]:=','; end;
Przecież Floaty mają kropki jako znaczniki przedziału rozwinięcia dziesiętnego, a nie przecinki <_<
Proszę kogoś o sprawdzenie tego, ja teraz żadnego kompilatora Delphi nie mam.
Użytkownik Tomek92 edytował ten post 28 lipiec 2008, 12:23
Masz rację, tylko ja to zrobiłem trochę inaczej. W obydwu funkcjach dałem zamianę przecinka na kropkę i działa. Dzięki za pomoc
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
Użytkownik dawwin edytował ten post 23 lipiec 2008, 13:39
Forum jest nie tylko dla ludzi kupujących czasopismo, rozumiesz?
Forum jest nie tylko dla ludzi kupujących czasopismo, rozumiesz?
Ale są tu też ludzie, którzy je kupują
Użytkownik dawwin edytował ten post 23 lipiec 2008, 11:59
Ale są tu też ludzie, którzy je kupują A nie mógłbyś podać kodu?
Raport poszedł.
A nie mógłbyś podać kodu?
http://uploader.pl/?d=1E92D71B1
Cały kod programu
Forum jest nie tylko dla ludzi kupujących czasopismo, rozumiesz?
No wiesz, ja mam na belce tytułowej napisane:
Forum Czytelników czasopisma Ekspert
Nie marudź bo sam dostaniesz raport.
PS. jak już, mogłeś napisać "Forum jest nie tylko dla ludzi kupujących czasopismo Ekspert PLUS, rozumiesz?" wtedy żadnych wątów nikt by mieć nie mógł :P Lapsus słowny :)
dawwin, najlepiej użyj programu porównującego, i sprawdź różnice pomiędzy BinMath.pas z płyty KŚEP i Twoim kodem. Potem, jakby różnic nie było, spójrz na kluczową metodę w Unit1.pas, czyli ObliczWyrazenie.
Tak na moje oko to błąd powinien być w funkcji STF i FTS, zobacz czy gdzieś nie użyłeś ich zamiennie.
//EDYCJA:
Taaa, to błąd w kodzie z Eksperta!!! Złe są chyba funkcje STF i FTS, prawidłowo powinny wyglądać tak:
//zamiana napisu na liczbę typu DOUBLE, z podmianą kropki na przecinek function STF(A : String) : Double; var i : Integer; begin for i:=1 to Length(A) do if A[i]=',' then A[i]:='.'; Result:=StrToFloat(A); end; //zamiana liczby DOUBLE na napis, z podmianą przecinka na kropkę function FTS(A : Double) : String; var i : Integer; begin Result:=FloatToStr(A); for i:=1 to length(Result) do if Result[i]='.' then Result[i]:=','; end;
Przecież Floaty mają kropki jako znaczniki przedziału rozwinięcia dziesiętnego, a nie przecinki <_<
Proszę kogoś o sprawdzenie tego, ja teraz żadnego kompilatora Delphi nie mam.
Użytkownik Tomek92 edytował ten post 28 lipiec 2008, 12:23
Masz rację, tylko ja to zrobiłem trochę inaczej. W obydwu funkcjach dałem zamianę przecinka na kropkę i działa. Dzięki za pomoc