Matematické Fórum

Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.

Nástěnka
22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.

Nejste přihlášen(a). Přihlásit

#1 29. 03. 2008 14:23 — Editoval Ginco (29. 03. 2008 14:24)

Ginco
Místo: Aš
Příspěvky: 617
Reputace:   
 

Delphi - Kalkulačka

Ahoj, jako seminární práci z ivt dělám kalkulačku v delphi

Je to celkem jednoduchá kalkulačka 2 edity, tlačítka s číslicemi 0-9

Jednoduché operace jako + - * / druhá mocnina odmocnina

Ale stále mi to hlásí nějakou chybu se kterou si nevím rady, tak se ptám, zda by mi někdo znalý v delphi nemohl nějak pomoci ( například bych to poslal mailem a nějak bychom se domluvili)
Tuto práci musím odevzdat do 11.4.  což je celkem hodně času, ale stejnak nestíham


Děkuji moc za každou pomoc

Offline

 

#2 30. 03. 2008 11:27

plisna
Místo: Brno
Příspěvky: 1503
Reputace:   
 

Re: Delphi - Kalkulačka

to ginco: a copak se mu (delphi) konkretne nelibi?

Offline

 

#3 30. 03. 2008 12:11

Ginco
Místo: Aš
Příspěvky: 617
Reputace:   
 

Re: Delphi - Kalkulačka

↑ plisna:

hlásí mi to nějakou chybu v zápisu, ale ten zápis by měl být v poho

Offline

 

#4 30. 03. 2008 12:16

Lukee
Administrátor
Místo: Opava
Příspěvky: 1863
Škola: UPOL, Informatika
Pozice: Roznašeč reklamních bannerů
Web
 

Re: Delphi - Kalkulačka

↑ Ginco: Zkus sem vložit aspoň ten kód, na kterém to háže chybu. Křiš?álová koule se mi zrovna rozbila ;-).


2+2=4

Offline

 

#5 30. 03. 2008 13:14 — Editoval Ginco (30. 03. 2008 13:15)

Ginco
Místo: Aš
Příspěvky: 617
Reputace:   
 

Re: Delphi - Kalkulačka

procedure TForm1.Button10Click(Sender: TObject);
begin
  if Form1.Edit1.Text = '0' then
    Form1.Edit1.Text := '9'
  else
    Form1.Edit1.Text := Form1.Edit1.Text + '9'
end;



procedure TForm1.Button11Click(Sender: TObject);
begin
Button15Click(Sender);
    operator:=krat;
    form1.Label1.Caption:='krát';
end;

procedure TForm1.Button14Click(Sender: TObject);
begin
Button15Click(Sender);  //pokud klikneme na toto talčítko, tak to zavolá button15 ve kterém je zadaný vzorec.
    operator:=minus;
    form1.Label1.Caption:='mínus';    //Label ukáže, že odečítáme
end;




procedure TForm1.Button12Click(Sender: TObject);
begin
Button15Click(Sender);
    operator:=plus;
    form1.Label1.Caption:='plus';
end;



procedure TForm1.Button13Click(Sender: TObject);
begin
Button15Click(Sender);
    operator:=deleno;
    form1.Label1.Caption:='dělěno';
end;



procedure TForm1.Button15Click(Sender: TObject);
begin
case operator of
    plus : begin
             Form1.Edit2.Text := floattostr(strtofloat(Form1.Edit2.Text) +
                            strtofloat(Form1.Edit1.Text));
             form1.Label2.Caption:='plus';
           end;

    minus : begin
              Form1.Edit2.Text := floattostr(strtofloat(Form1.Edit2.Text) -
                            strtofloat(Form1.Edit1.Text));
              form1.Label2.Caption:='mínus';
             end;

    deleno : begin     //////////// zde mi to hlásí chybu a konkrétně u té dvojtečky
               try
                  Form1.Edit2.Text := floattostr(strtofloat(Form1.Edit2.Text) /
                              strtofloat(Form1.Edit1.Text));
                  form1.Label2.Caption:='dělno';
                except
                  on EZeroDivide do form1.Label2.Caption:='Error /0';  //Nelze dělit nulou
                end;
    krat : begin
               try
                  Form1.Edit2.Text := floattostr(strtofloat(Form1.Edit2.Text) /
                              strtofloat(Form1.Edit1.Text));
                  form1.Label2.Caption:='krat';

                end;


end;
  form1.Edit1.Text := '0';
end;

end.

Offline

 

#6 30. 03. 2008 13:51

plisna
Místo: Brno
Příspěvky: 1503
Reputace:   
 

Re: Delphi - Kalkulačka

to ginco:

jen tak zbezne jsem si vsimnul chybejiciho sluvka end; tady:

deleno : begin     //////////// zde mi to hlásí chybu a konkrétně u té dvojtečky
               try
                  Form1.Edit2.Text := floattostr(strtofloat(Form1.Edit2.Text) /
                              strtofloat(Form1.Edit1.Text));
                  form1.Label2.Caption:='dělno';
                except
                  on EZeroDivide do form1.Label2.Caption:='Error /0';  //Nelze dělit nulou
                end;
             end; <-- tady

Offline

 

#7 30. 03. 2008 14:30

Ginco
Místo: Aš
Příspěvky: 617
Reputace:   
 

Re: Delphi - Kalkulačka

↑ plisna:

super, ale ted mam chybu u krat u toho end;

Offline

 

#8 30. 03. 2008 19:32

plisna
Místo: Brno
Příspěvky: 1503
Reputace:   
 

Re: Delphi - Kalkulačka

to ginco: u krat taky chybi end;

Offline

 

#9 31. 03. 2008 18:18

Ginco
Místo: Aš
Příspěvky: 617
Reputace:   
 

Re: Delphi - Kalkulačka

↑ plisna:
deleno : begin
               try
                  Form1.Edit2.Text := floattostr(strtofloat(Form1.Edit2.Text) /
                              strtofloat(Form1.Edit1.Text));
                  form1.Label2.Caption:='děleno';
                except
                  on EZeroDivide do form1.Label2.Caption:='Error /0';  //Nelze dělit nulou
                end;
                end;
    krat : begin
               try
                  Form1.Edit2.Text := floattostr(strtofloat(Form1.Edit2.Text) /
                              strtofloat(Form1.Edit1.Text));
                  form1.Label2.Caption:='krat';

               end;   tady mezi "d" a středníkem mi to hlásí chybu
               end;



   form1.Edit1.Text := '0';
   end;
end.

Offline

 

#10 31. 03. 2008 19:10

Kondr
Veterán
Místo: Linz, Österreich
Příspěvky: 4247
Škola: FI MU 2013
Pozice: Vývojář, JKU
Reputace:   38 
 

Re: Delphi - Kalkulačka

Tak jednu zásadní chybu vidím v tom, že krát provádí dělení, navíc je tam try a není tam ani except ani finally.
Obecné připomínky: to form1. není potřeba psát a procedury na psaní číslic není potřeba psát jako 10 oddělených procedur... stačí přidat caption objektu Sender na konec textu, stejně tak jde sloučit obsluhu všech tlačítek krát,plus,mínus,děleno do jednoho.


BRKOS - matematický korespondenční seminář pro střední školy

Offline

 

#11 31. 03. 2008 19:32

Ginco
Místo: Aš
Příspěvky: 617
Reputace:   
 

Re: Delphi - Kalkulačka

↑ Kondr:

Paráda dík

Já jsem celkem začátečník, takže jsem se to snažil udělat co nejprostěji( neříkám že tvůj postup není jednoduší), ale aspoň to už klape, i když je tam ještě moře nedokonalostí, každopádně dík a určitě se ještě ozvu

Offline

 

#12 05. 04. 2008 14:19 — Editoval Ginco (05. 04. 2008 20:46)

Ginco
Místo: Aš
Příspěvky: 617
Reputace:   
 

Re: Delphi - Kalkulačka

malej dotaz : jak udělat odmocninu? 

mam deklarované i : integer;



i:=strtoint(edit1.Text); // ta odmocnina by měla být vypočtena z edit1
Form1.Edit3.Text := sqrt(i) ; // tady by se měl zobrazit výsledek




rekapitulace : mam 2 edity vstupní a jeden výstupní, ze kterého bych vždy dělal odmocninu, ale nevim jak to udělat.

Všem co pomůžou dík

Offline

 

#13 05. 04. 2008 21:06

Kondr
Veterán
Místo: Linz, Österreich
Příspěvky: 4247
Škola: FI MU 2013
Pozice: Vývojář, JKU
Reputace:   38 
 

Re: Delphi - Kalkulačka

Určitě je potřeba to převést mezi řetězcem a reálným číslem (ne celým):

i:=strtofloat(edit1.Text); // ta odmocnina by měla být vypočtena z edit1
Form1.Edit3.Text := floattostr(sqrt(i)) ; // tady by se měl zobrazit výsledek


BRKOS - matematický korespondenční seminář pro střední školy

Offline

 

#14 09. 04. 2008 18:31

Ginco
Místo: Aš
Příspěvky: 617
Reputace:   
 

Re: Delphi - Kalkulačka

↑ Kondr:

takže si (i) mám deklarovat jako string??
hlásí mi to chybu přesně :   Form1.Edit3.Text := floattostr(sqrt(*i)) ;

* = zde

takto jsem dělal mocninu a odmocninu

    mocnina : begin

                  Form1.Edit3.Text := floattostr(strtofloat(Form1.Edit1.Text)*
                            strtofloat(Form1.Edit1.Text));
              end;
       sqrt : begin

                Form1.Edit3.Text := floattostr(sqrt(i)) ; // tady by se měl zobrazit výsledek
              end;

Offline

 

#15 09. 04. 2008 19:04

Ginco
Místo: Aš
Příspěvky: 617
Reputace:   
 

Re: Delphi - Kalkulačka

ještě dotaz, jakto, že když dám krát, tak mi to nejdříve sečte, potom dám znova krát a vynásobí se to, když hned nato dám děleno, tak to vynásobí, potom vydělí,   nevíte někdo jak to ošéfovat?

Offline

 

#16 09. 04. 2008 20:33

plisna
Místo: Brno
Příspěvky: 1503
Reputace:   
 

Re: Delphi - Kalkulačka

to ginco:

"takže si (i) mám deklarovat jako string??
hlásí mi to chybu přesně :   Form1.Edit3.Text := floattostr(sqrt(*i)) ;"

a nekrici nahodou kvuli tomu, ze nezna funkci sqrt?

Offline

 

#17 10. 04. 2008 19:51

Ginco
Místo: Aš
Příspěvky: 617
Reputace:   
 

Re: Delphi - Kalkulačka

↑ plisna:

dík za radu, už to funguje


ted bych potřeboval pár rad: třeba jak udělat to, abych do editu mohl zadat jen jednu desetinou čárku;
že kurzor bude okamžitě po spuštění v editu, a že když budu dělit nulou, že mi to nezařve chybu;
dík nikde jsem podobné informace nenašel, kdyžtak mě jen nahoďte, já to pak zvládnu :-)

Offline

 

#18 10. 04. 2008 20:01

Saturday
Einstein
Příspěvky: 813
Škola: MFF UK
Reputace:   
Web
 

Re: Delphi - Kalkulačka

Tak sem jeste dej svou aktualni verzi kodu


Lasciate ogni speranza. | Podílí se na Encyklopedii Fyziky (http://fyzika.jreichl.com) | Oblíbený IT projekt http://online-domain-tools.com

Offline

 

#19 10. 04. 2008 20:08

Ginco
Místo: Aš
Příspěvky: 617
Reputace:   
 

Re: Delphi - Kalkulačka

je to bez čísel jen tlačítka s funkcemi( krat,sqrt,...)
taky jsem to trochu předělal, mám 2 edity vstupní a 1 výstupní, jenž zobrazuje výsledek
ke každému z těch 2 editu je přidán radiobutton



procedure TForm1.Button12Click(Sender: TObject);
    begin
        Form1.Edit3.Text := floattostr(strtofloat(Form1.Edit1.text) +  strtofloat(Form1.Edit2.Text));
        form1.Label1.Caption:='plus';
    end;

procedure TForm1.Button13Click(Sender: TObject);
    begin
        form1.Label1.Caption:='děleno';    //Label ukáže, že odečítáme
        try Form1.Edit3.Text := floattostr(strtofloat(Form1.Edit1.Text) / strtofloat(Form1.Edit2.Text));
        except on EZeroDivide do form1.Label2.Caption:='Error /0';  //Nelze dělit nulou
    end;
    end;
procedure TForm1.Button11Click(Sender: TObject);
    begin
        try Form1.Edit3.Text := floattostr(strtofloat(Form1.Edit1.Text) * strtofloat(Form1.Edit2.Text));
        finally
    end;
    form1.Label1.Caption:='krat';
    end
procedure TForm1.Button14Click(Sender: TObject);
    begin
        Form1.Edit3.Text := floattostr(strtofloat(Form1.Edit1.Text) - strtofloat(Form1.Edit2.Text));
        Form1.Label1.Caption:='mínus';
    end;
procedure TForm1.Button16Click(Sender: TObject);
    begin
        Form1.Label1.Caption:='odmocnina';
        i:=strtofloat(edit1.Text);
        Form1.Edit3.Text := floattostr(sqrt(i)) ;
    end;

procedure TForm1.Button17Click(Sender: TObject);
    begin
Form1.Label1.Caption:='mocnina';
  i:=strtofloat(edit1.Text);
  Form1.Edit3.Text := floattostr(i*i) ;
    end;
procedure TForm1.FormCreate(Sender: TObject);
    begin
        edit1.Text:= '';
        edit2.Text:= '';
        edit3.Text:= '';
        radiobutton1.checked:=true;
        radiobutton2.checked:=false;
    end;



end.

Offline

 

#20 10. 04. 2008 20:49

plisna
Místo: Brno
Příspěvky: 1503
Reputace:   
 

Re: Delphi - Kalkulačka

to osetreni vice desetinnych carek v jednom zapise muzes napriklad osetrit tak, ze pri kazdem stisku klavesy projdes vsechny znaky v danem editboxu a spoctes v nem pocet carek, pokud jich bude vice nez jedna, tak provedes patricne napravne kroky (vynadani uzivateli apod.). jinak pro to, aby jsi mohl opakovat kus kodu pri kazdem stisku klavesy (respektive pri kazde zmene obsahu editboxu) ti dobre poslouzi udalost OnChange komponenty Edit

Offline

 

#21 10. 04. 2008 20:51

Saturday
Einstein
Příspěvky: 813
Škola: MFF UK
Reputace:   
Web
 

Re: Delphi - Kalkulačka

Dej dohromady kod odsud: http://www.delphibasics.co.uk/RTL.asp?Name=AnsiPos

s udalosti stisknuti klavesy v tvem edit boxu:

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  // #8 is Backspace
  if not (Key in [#8, '0'..'9']) then begin
    ShowMessage('Invalid key');
    // Discard the key
    Key := #0;
  end;
end;

(tato funkce povoluje jen ciselny vstup do Edit1 textboxu)


Lasciate ogni speranza. | Podílí se na Encyklopedii Fyziky (http://fyzika.jreichl.com) | Oblíbený IT projekt http://online-domain-tools.com

Offline

 

#22 10. 04. 2008 21:14

Ginco
Místo: Aš
Příspěvky: 617
Reputace:   
 

Re: Delphi - Kalkulačka

↑ Saturday:

dík za rady, ale mam ještě dotaz:


toto: procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); musím ještě napsat do type?

zkusil jsem to, ale napsalo to : expected '=' but'('found

myslí, že problém je v tom, že to nemám vložené do events( událostí) ale bohužel nevím jak na to

Offline

 

#23 10. 04. 2008 21:21

Saturday
Einstein
Příspěvky: 813
Škola: MFF UK
Reputace:   
Web
 

Re: Delphi - Kalkulačka

2Ginco: jen si klikni levym tlacitkem na formulari na svuj textbox a v okne properties (byva vpravo dole) si vyber udalosti a dvakrat si poklikej do okenka s udalosti keypress a pak obsah funkce v mem prispevku vyse do vygenerovane funkce


Lasciate ogni speranza. | Podílí se na Encyklopedii Fyziky (http://fyzika.jreichl.com) | Oblíbený IT projekt http://online-domain-tools.com

Offline

 

#24 10. 04. 2008 21:43

Ginco
Místo: Aš
Příspěvky: 617
Reputace:   
 

Re: Delphi - Kalkulačka

↑ Saturday:

super, dík, já to úplně zapomněl

ještě musim přijít na tu nulu v dělení a kurzor hned po spuštění a je to celkem fajn

jinak ta stránka je pecka :)

Offline

 

#25 10. 04. 2008 21:47

Saturday
Einstein
Příspěvky: 813
Škola: MFF UK
Reputace:   
Web
 

Re: Delphi - Kalkulačka

Resit to pres vyjimky je samozrejme mozne:

  try Form1.Edit3.Text := floattostr(strtofloat(Form1.Edit1.Text) / strtofloat(Form1.Edit2.Text));
        except on EZeroDivide do form1.Label2.Caption:='Error /0';  //Nelze dělit nulou

nicmene, ja bych asi pouzil obycejnou podminku:

if (strtofloat(Form1.Edit2.Text)=0) then

MsgBox("Nulou nepodelis.. 11. bozi prikazani");

else

Form1.Edit3.Text := floattostr(strtofloat(Form1.Edit1.Text) / strtofloat(Form1.Edit2.Text));

end if;

===============================================
Nejsem si moc jisty syntaxi, momentalne se mi to plete se C# ;-), ale logika je doufam jasna


Lasciate ogni speranza. | Podílí se na Encyklopedii Fyziky (http://fyzika.jreichl.com) | Oblíbený IT projekt http://online-domain-tools.com

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson