Rexlu 170 Napisano 9 Marca 2015 Udostępnij Napisano 9 Marca 2015 (edytowane) Witajcie, Dużo pojawia się tematów z pytaniami o kalkulator (pewno dlatego, że każdy taki pisze wchodząc świat programowania) Dlatego też, że jako dzisiaj przypomniałem sobie pascala pomagając właśnie w takim temacie, napisałem kalkulator stringowy liczb rzeczywistych. Tzn. wpisujemy całą frazę i on liczy np. 255.3*8.25 Jest zabezpieczony przed złośliwym użytkownikiem. Liczby po przecinku podaje bez zbędnych "zer". Zapętlony w nieskończoność. Myślę, że przyda się wielu początkującym. Oczywiście nie mówię, że jest on idealny, bo zdaję sobie z tego sprawę, że można byłoby go napisać o wiele lepiej. Można by podpiąć Pascal: program Kalkulator_by_Rexlu_v2; Uses CRT,SysUtils; var dlugosc,i: integer; l1,l2,wynik,reszta:real; dzialanie, sl1, sl2,poprzecinku: string; znak:char; zledane,przerwac:boolean; begin Repeat przerwac:=false; Write('Wpisz dzialanie: '); readln(dzialanie); dlugosc:=length(dzialanie); for i:=1 to dlugosc do begin if (dzialanie[i]='0') or (dzialanie[i]='1') or (dzialanie[i]='2') or (dzialanie[i]='3') or (dzialanie[i]='4') or (dzialanie[i]='5') or (dzialanie[i]='6') or (dzialanie[i]='7') or (dzialanie[i]='8') or (dzialanie[i]='9') or (dzialanie[i]='+') or (dzialanie[i]='-') or (dzialanie[i]='/') or (dzialanie[i]='*') or (dzialanie[i]='.') or (dzialanie[i]=',') or (dzialanie[i]=' ') then zledane:=false else zledane:=true; if zledane=true then przerwac:=true; end; if przerwac=true then Writeln('Podano zle dane') else begin for i:=1 to dlugosc do begin if (dzialanie[i]=',') then dzialanie[i]:='.'; if (dzialanie[i]=' ') then delete(dzialanie,i,1); end; dlugosc:=length(dzialanie); for i:=1 to dlugosc do begin if (dzialanie[i]='+') or (dzialanie[i]='-') or (dzialanie[i]='*') or (dzialanie[i]='/') then begin znak:=dzialanie[i]; sl1:=copy(dzialanie, 1, i-1); sl2:=copy(dzialanie, i+1, dlugosc-i); break; end; end; l2:=StrToFloat(sl2); l1:=StrToFloat(sl1); writeln; case znak of '+': wynik:=l1+l2; '-': wynik:=l1-l2; '*': wynik:=l1*l2; '/': wynik:=l1/l2; else Writeln('Wystapil Blad - nie mozna wykonac takiego dzialania'); end; reszta:=frac(wynik); poprzecinku:=FloatToStr(reszta); for i:=3 to 11 do if (poprzecinku[i]='0') or (i=length(poprzecinku)+1) then begin break; end; if wynik=int(wynik) then Writeln('Wynik: ', wynik:1:0) else Writeln('Wynik: ', wynik:1:i-3); end; readln(); until false; end. Edytowane 9 Marca 2015 przez Rexlu Cytuj Link to post Share on other sites
Recommended Posts
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ą.