Kalkulator jak w windowsie

0

Witam,
Staram się napisać podobny kalkulator jak w windows'ie ale nie wiem jak zrobć z tylko 1 editem, z 2 editami i 1 labelem latwo, a mnei interesuje jak zrobic z 1 editem i zeby obliczalo tak jak w windows'owym, mianowicie chodzi o to ze jak wpisze np 321 i wcisne button + to ta liczba zniknie po czym wpisuje np 2 i po wcisnieciu = wyskakuje wynik 323. Da się coś takiego zrobić?

0

Da się zrobić wszystko...
Musisz, zapisać gdzie edit. i następnie wyzerować go.

Masz tu przykład.

procedure TForm1.btnDodaj(Sender: TObject);

begin
if i = 0
then
begin
i := strtoint(edit1.text);
edit1.text := '';
end
else
s := strtoint(edit1.text);
edit1.text := '';



end;

procedure TForm1.btnWynik(Sender: TObject);
var
x : integer;
begin
x := i + s;
edit1.text := inttostr(x);

end;

Co prawda przykład działa tylko na 2 liczbach, ale jak pomyslisz to ogarniesz to :P

0

Ok dzieki, jeszcze jedno pytanie, jakie jest polecenie na usuniecie tej liczby z pamięci ?

0

Utwórz strukturę dynamiczną, np. lista, stos, kolejka. Jak to zrobisz, to będziesz wiedział jak dodawać do niej liczby lub usuwać. Nie polecam korzystania ze zwykłych tablic statycznych do takiego zadania. Ogólnie to szybciej i lepiej jest napisać parser wyrażeń matematycznych zamiast naśladować prymitywny kalkulator. Szybciej wpisać z klawiatury liczby, nazwy funkcji, działania itp. niż szukać na przyciskach kalkulatora. Oczywiście możesz zrobić przyciski wstawiające nazwy funkcji, liczbę PI itp., bo ludzie różnie nazywają funkcje w kalkulatorach (np. masz atan i arctan itp.), ale całe wyrażenie zawrzesz w jednym edicie, bez potrzeby odkładania działań i liczb na stos.

0

Dzieki za rade Spine, zrobie tak jak pisałeś tylko z przyciskami, takie wymogi zadania ;/

0

Wyzerowanie zmiennej? s := nil albo s := 0
chyba nie jestem pewien.

0

Racja ;p jak moglem zapomniec ^^

cos mi nie pasuje

bo mam ten kod pod przyciskiem =

procedure TForm1.Button15Click(Sender: TObject);
begin
b := strtofloat(edit1.Text);
x :=a + b;
edit1.text := floattostr(x);
end; 

to jest git tylko ze wtedy po wcisnieciu = bedzie mi tylko dodawac probowalem dodac ten kod od +

procedure TForm1.Button11Click(Sender: TObject);
begin
if a = 0 then
begin
a := strtofloat(edit1.text);
edit1.text := '';
end
else
b := strtofloat(edit1.text);
edit1.text := '';
x := a + b;
edit1.text := floattostr(x); 

to mi nie resetuje edita tylko dodaje do 1 cyfre 2 po czym wychodzi 12

0

Mógłbys pokazać zmienne, czy są globalne czy w przycisku oraz jakos jasniej opisać problem?

0

Włącz windowsowego kalkulatora i zobacz jak działa wciskasz 1 klikasz + wpisujesz 1 i dajesz + to ci wychodzi 2
wlasnie cos takiego chce zrobic bo jak mam przy plusie

procedure TForm1.btnDodaj(Sender: TObject);
 
begin
if i = 0
then
begin
i := strtoint(edit1.text);
edit1.text := '';
end
else
s := strtoint(edit1.text);
edit1.text := ''; 

to mi nie doda dopiero gdy wcisne = ale za kazdym razem bedzie mi dodawalo gdy wcisne = dlatego chce zrobic tak jak napisalem wyzej

0

Jakbyś formatował kod, to byś wiedział, co masz źle.
Else Begin
(* ... *)
End;

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