Klakulator

0

Chodzi oto aby niepowtarzać wiele razy tej samej instrukcji (IF). Jak umieścić procedurę ???Jak wprowadzić zabezpieczenie aby nie moża było wprowadzić wyrazów i literek???Dzieki z góry!

Oto kod:

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var liczba1,liczba2,wynik:real;
begin
if(edit1.text=)or(edit2.text=)then
begin
showmessage('podaj liczby!!!')
end
else
begin
liczba1:=strtofloat(trim(edit1.text));
liczba2:=strtofloat(trim(edit2.text));
wynik:=liczba1+liczba2;
edit3.text:=floattostrf(wynik,ffgeneral,10,0);
end;
end;
procedure Tform1.Button2Click(Sender: TObject);
var liczba1,liczba2,wynik:real;
begin
if(edit1.text=)or(edit2.text=)then
begin
showmessage('podaj liczby!!!')
end
else
begin
liczba1:=strtofloat(trim(edit1.text));
liczba2:=strtofloat(trim(edit2.text));
wynik:=liczba1-liczba2;
edit3.text:=floattostr(wynik);
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
var liczba1,liczba2,wynik:real;
begin
if(edit1.text=)or(edit2.text=)then
begin
showmessage('podaj liczby!!!')
end
else
begin
liczba1:=strtofloat(trim(edit1.text));
liczba2:=strtofloat(trim(edit2.text));
wynik:=liczba1*liczba2;
edit3.text:=floattostr(wynik);
end;
end;
procedure TForm1.Button4Click(Sender: TObject);
var liczba1,liczba2,wynik:real;
begin
if(edit1.text=)or(edit2.text=)then
begin
showmessage('podaj liczby!!!')
end
else
begin
liczba1:=strtofloat(trim(edit1.text));
liczba2:=strtofloat(trim(edit2.text));
if liczba2<>0 then
begin
wynik:=liczba1/liczba2;
edit3.text:=floattostr(wynik);
end
else
begin
showmessage('pamiętaj cholero nie dziel przez zero');
edit2.text:='';
end;
end;
end;

procedure TForm1.Button5Click(Sender: TObject);
var liczba1, wynik,liczba2,n:real;
begin
if(trim(edit1.text)=) or(trim(edit2.text)=)then
begin
showmessage('Proszę podać liczbę');
end
else
begin
liczba2:=strtofloat(trim(edit2.text));
liczba1:=strtofloat(trim(edit1.text));
n:=liczba2*ln(liczba1);
wynik:=exp(n);
edit3.text:=floattostrf(wynik,ffgeneral,10,0);
end;
end;

procedure TForm1.Button6Click(Sender: TObject);
var liczba1,wynik:real;
begin
if(trim(edit1.text)='')then
begin
showmessage('podaj liczbę');
end
else
begin
liczba1:=strtofloat(trim(edit1.text));
wynik:=sqrt(liczba1);
edit3.text:=floattostrf(wynik,ffgeneral,10,0);
end;
end;

end.

0

Zabezpieszenie przed wadliwym StrToInt - nie weim czy o to ci chodzi ale masz:

function IsInt(String: String): Boolean;
begin
  Result := True;
  try
    StrToInt(String);
    Exit;
  except 
    Result := False;
  end;
end;
0

uzyj funkcji.

function czyok:boolean;
begin
if (edit1='') or (edit2='') then
result:=false else result:=true;
end;

potem dajesz zamiast twoich IF'ow:

if not czyok then showmessage('nic nie ma') else
.....reszta

a zabezpieczenia:
w onkeydown:

if key not in [0..9] then key=0;

(cos w tym stylu, dokladnie nie pamietam)

0

Hey! Nie korzystaj także, z StrToFloat, tylko z StrToFloatDef...

0

Zrób jedną procedure dla wszystkich buttonów i ustaw im kolejne tagi. A z resztą masz gotowca:

procedure TForm1.ButtonClick(Sender: TObject);
var
  liczba1, liczba2, wynik: real;
begin
  try
    liczba1 := strtofloat(trim(edit1.text));
    liczba2 := strtofloat(trim(edit2.text));
    case (Sender as TButton).Tag of
      1: wynik := liczba1 + liczba2;
      2: wynik := liczba1 - liczba2;
      3: .....
    end;
    edit3.text := floattostrf(wynik, ffgeneral, 10, 0);
  except
    showmessage('wpisales nieprawidlowe liczby !')
  end;
end;
0
  1. Do wpisywania liczb uzywaj maskedita.
  2. Zrób jedną procedurkę
Wcisniecie(Sender: TObject);
begin
if (MaskEdit1.Text='') or (MaskEdit2.Text='') then ShowMessage('Brak liczb!')
else case (Sender as TButton).caption of
'+' : ShowMessage(StrToInt(MaskEdit1)+StrToInt(MaskEdit1));
'-' : ...
end; //Case
end; //Wcisniecie

I masz... Jak czegoś nie rozumiesz, to... pisz...

0

uzyj funkcji.

function czyok:boolean;
begin
if (edit1='') or (edit2='') then
result:=false else result:=true;
end;

potem dajesz zamiast twoich IF'ow:

if not czyok then showmessage('nic nie ma') else
.....reszta

a zabezpieczenia:
w onkeydown:

if key not in [0..9] then key=0;

(cos w tym stylu, dokladnie nie pamietam)

Function IsOk : Boolean;
Begin
Result:=Not ((Trim(Edit1.Text)='') and (Trim(Edit2.Text)=''));
End;

ladniej wyglada :-P

0

Result:=not ((Trim(Edit1.Text)=) and (Trim(Edit2.Text)=));

Result:=not ((Trim(Edit1.Text)=) <b>or</b> (Trim(Edit2.Text)=));

A w ogóle to po co sie bawić w funkcje sprawdzające czy edity nie sa puste i w kontrolowanie wpisywanych znakow do edita (do tego dochodzi jeszcze wklejanie, pozycja i ilosc przecinków...) jak wystarczy odczyt z editów umiescic miedzy try...except. Użycie StrToFloatDef w tej sytuacji tez jest bezsensem, bo tez kożysta z try...except.

1 użytkowników online, w tym zalogowanych: 0, gości: 1