Skocz do zawartości

[Gotowiec] Kalkulator Stringowy


Recommended Posts

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 przez Rexlu
Link to post
Share on other sites

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ść
Odpowiedz w tym wątku...

×   Wklejono zawartość z formatowaniem.   Usuń 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.

  • Ostatnio przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×
×
  • Dodaj nową pozycję...