UNIX, Linux, Programare, Scripting, Retele
unix, linux, programare, script, hosting, server, retele
Lista Forumurilor Pe Tematici
UNIX, Linux, Programare, Scripting, Retele | Reguli | Inregistrare | Login

POZE UNIX, LINUX, PROGRAMARE, SCRIPTING, RETELE

Nu sunteti logat.
Nou pe simpatie:
irina_dragalasa
Femeie
24 ani
Bucuresti
cauta Barbat
26 - 65 ani
UNIX, Linux, Programare, Scripting, Retele / Delphi / Tutorial Delphi - calculator simplu Moderat de DarkByte
Autor
Mesaj Pagini: 1
DarkByte
Moderator

Inregistrat: acum 19 ani
Postari: 10
Vom face un calculator chiar super simplu... stie doar adunare, scadere, inmultire si impartire, folosind doar numere intregi. La impartire se va afisa catul si restul impartirii.

Am sa pornesc presupunand ca aveti Delphi deschis, ca nu va e foame si ma deranjati in timp ce explic , ca bietul vostru calculator are chef de Delphi azi, ca nu sunteti voi deranjati de verisorii vostrii din strainatate care tocmai azi si-au gasit sa va faca vizite, etc, bla bla...

Hint: Cand selectati un obiect pentru a-l pune pe forma (fereastra programul dvs), daca tineti apasata tasta Shift, puteti pune acelasi obiect de mai multe ori. La fiecare click, acel obiect va fi adaugat pe forma. Pentru a "scapa" de obiectul respectiv, selectati iconita care reprezinta un cursor de mouse.

Bun... cand a pornit Delphi, puteti seta numele formei (de fapt, titlul ferestrei). Selectati din Object Inspector proprietatea Caption si scrieti acolo "Delphi Super calculator" (e primul la unii, deci chiar e super )

Alegeti Label (afiseaza un text oarecare)
din prima fisa (Standard) al barii de instrumente.
Puneti 2 labeluri pe forma. Dati click pe unul dintre ele, selectati proprietatea Caption din Object Inspector, scrieti (fara ghilimele) "Calculator simplu" (puteti scrie de fapt orice, e pentru facilitarea intelegerii programului cand il veti gasi peste ceva timp, aruncat in vreun director ). La al doilea Label faceti la fel, dar scrieti "Rezultatul este: ".

Urmatoarea iconita, dupa Label, este Edit (casuta text)
. Selectati acest obiect si plasati 3 pe forma. In primele 2 casute text vom primi inputul (cele doua numere), iar in a treia vom afisa rezultatul. Ati putea alinia primele doua casute dupa primul Label (cel cu "Calculator simplu", iar ultima casuta dupa al doilea Label. Selectati cele trei casute text, cautati proprietatea Text (in Object Inspector) si scrieti "0" (zero). Asta va fi valoarea implicita a celor 3 casute.

In momentul acesta, forma ar trebui sa arate cam asa:


In continuare, puneti 4 Radio-buttons (butoane care se exclud reciproc)
pe forma (cu ele se va alege operatia). Denumiti-le, in ordine, "Adunare", "Scadere", "Inmultire", "Impartire intreaga".
Ex. Click pe RadioButton1, alegi proprietatea Caption, scrii "Adunare".
Dupa ce ati terminat cu asta, selectati primul RadioButton, alegeti din Object Inspector proprietatea Checked si schimbati-o pe True (veti vedea ca acum RadioButton1 va fi cel selectat).

Ultima componenta a formei va fi un Button (buton normal)
. Dati click pe el, alegeti proprietatea Caption, scrieti "Calculeaza" (textul de pe buton).

Ok, acum, daca tot am terminat cu design-ul, ar fi cazul sa facem si un pic de programare

Apasati F12 pentru Toggle Form/Unit (schimba intre sursa programului si partea vizuala) si veti vedea o gramada de linii scrise de Delphi (ce baiat bun )

Veti vedea asta -->

Singura diferenta este ca, in imaginea mea, exista linia "operatie : integer = 1" (cea selectata), adica am definit o variabila de tip intreg (integer ia valori intre -32768 si 32767, adica, in hexazecimal, intre $8000 si $7FFF), care are valoarea initiala 1. Denumirea acestui tip de definire de variabile este "variabila predefinita". Seamana cu declaratia unei constante, dar, spre deosebire de aceasta, ii putem schimba valoarea din program.
Aceasta variabila va avea grija sa ne "spuna" ce operatie trebuie sa facem, deci, cand vom selecta un alt RadioButton, vom modifica valoarea acestei variabile.
Hai sa vedem cum facem asta.

Dati dublu-click pe RadioButton1. Sursa programului va aparea in fata, cursorul fiind plasat chiar in interiorul procedurii procedure TForm1.RadioButton1Click(Sender: TObject);. Asta inseamna ca partea de cod ce o vom scrie aici va fi apelata in momentul in care utilizatorul programului selecteaza acest RadioButton. Pe noi ne intereseaza sa modificam variabila "operatie" in asa fel incat sa reflecte alegerea facuta, deci, chiar la cursor, veti scrie:

Code:

operatie := 1;

adica veti asigna variabilei "operatie" valoarea 1.

Atentie: Semnul ; este strict necesar, el arata compilatorului ca se termina o anume comanda (sau linie de cod). Sunt cazuri cand acest lucru nu este necesar, de exemplu, dupa "begin" sau dupa un "end" care este urmat de un alt end.
Exista un caz cand acest semn nu numai ca nu este necesar, dar este strict interzis.. In exemplul de mai jos este exemplificat acest caz.

Code:

If conditie Then comanda1
        Else comanda2;

Dupa "comanda1" este interzis ";", dand eroare la compilare.

Ok, trecand de paranteza, faceti la fel cu celelalte 3 butoane de excludere, avand grija ca la selectarea celui de-al doilea, variabila sa ia valoarea 2, si asa mai departe.
Daca ati procedat corect, in sursa veti avea urmatorul cod:

Code:

procedure TForm1.RadioButton1Click(Sender: TObject);
begin
  operatie:=1;
end;

procedure TForm1.RadioButton2Click(Sender: TObject);
begin
  operatie:=2;
end;

procedure TForm1.RadioButton3Click(Sender: TObject);
begin
  operatie:=3;
end;

procedure TForm1.RadioButton4Click(Sender: TObject);
begin
  operatie:=4;
end;

Tot ce mai avem de facut acum e sa implementam bucata de cod care va rula la apasarea butonului "Calculeaza".
Dand dublu-click pe el, la fel ca si in cazul butoanelor de excludere de mai sus, veti ajunge in sursa. Acum sa ne gandim un pic. Vom avem nevoie de 3 variabile intregi, pentru cele 2 numere si rezultatul operatiei si inca o variabila pentru restul intreg, in caz ca e selectata optiunea "impartire"
Pe acestea le vom pune de tip Longint (plaja de valori intre -2147483648 si 2147483647, adica intre $80000000 si $7FFFFFFF in hexa) pentru a avea mai multa libertate
Deci, inainte de begin va trebui adaugat urmatorul cod:

Code:

var t1,t2,suma,rest:longint;

Sa vedem exact cum facem calculele.
Prima oara, luam valorile din Edit1 si Edit2.

Code:

t1 := StrToInt(Edit1.Text);
t2 := StrToInt(Edit2.Text);

Functia StrToInt transforma un sir de caractere in numar intreg. De mentionat ca, in cazul ca sirul nu contine doar cifre, va rezulta o mica si frumoasa eroare, ca si urmatoarea
(s-a intamplat incercand sa adun valoarea 1 cu caracterul 'p'

Ok, acum avem (sau nu) valorile date de utilizator in variabilele "t1" si "t2".
Tinand cont de variabila "operatie", trebuie sa calculam un rezultat. Daca operatie este 1, trebuie sa facem o adunare, daca e 3, facem o inmultire, etc.
Pentru conditii, exista comanda If... Then... Else, dar noi avem 4 valori din care sa alegem, asa ca vom folosi comanda Case
Sintaxa este urmatoarea:

Code:

Case variabila Of
  valoare1: comanda1;
  valoare2: comanda2;
  ...
  valoareX: comandaX;
  Else comandaY;
End;

Mai clar, comanda Case verifica valoarea variabilei "variabila", si executa comanda respectiva. Daca nu se potriveste cu nici un din valorile date, va executa "comandaY" de pe ramura "Else". De mentionat:
-"comanda" se refera la orice fel de comanda, inclusiv "begin... end".
-variabilele de tip String (sir de caractere) nu se pot alege cu comanda "Case".

Revenind, "Case"-ul nostru va arata in felul urmator:

Code:

Case operatie Of
  1: comanda de adunare;
  2: comanda de scadere;
  3: comanda de inmultire;
  4: comanda de impartire;
End;

Primele 3 comenzi sunt foarte usoare, e de ajuns sa faceti cate o asignare, ca mai jos:

Code:

Case operatie Of
  1: suma := t1 + t2;
  2: suma := t1 - t2;
  3: suma := t1 * t2;
  4: comanda de impartire;
End;

Probleme avem insa la impartire, unde trebuie sa verificam ca impartitorul (t2) sa nu fie 0, iar daca nu e, trebuie sa calculam catul si restul intreg. (pentru impartire normala se va folosi, simplu, operandul "/", dar nu e cazul). Catul intreg se va calcula cu operandul "div" (divide), iar catul intreg cu "mod" (modulo).

Cam acestea ar fi calculele, iar codul va fi urmatorul:

Code:

t1:=StrToInt(Edit1.Text);
  t2:=StrToInt(Edit2.Text);
  case operatie of
    1:suma:=t1+t2;
    2:suma:=t1-t2;
    3:suma:=t1*t2;
    4:begin
        if t2 <> 0 then begin {verificam sa nu fie 0}
          suma:=t1 div t2;
          rest:=t1 mod t2;
                        end
      end;
  end;

Ultima lucru care mai este de facut este sa afisam rezultatul. Se va face simplu, adaugand dupa "end"-ul de la "Case" urmatoarele:

Code:

case operatie of
    1..3 :Edit3.Text:=IntToStr(suma);
    4:if t2 = 0 then Edit3.Text:='Nu se poate imparti la 0 (zero) !!!'
                else Edit3.Text:='Catul este: '+IntToStr(suma)+', restul este: '+IntToStr(rest);
  end;

Functia IntToStr face exact inversul functiei StrToInt, transformand un numar in text. Este necesar acest lucru pentru ca "Edit" nu poate afisa numere, doar caractere.
Deci, verificam pentru ce operatie afisam rezultatul, pentru primele 3 nefiind nici o problema. La impartire, verificam (din nou) impartitorul, afisand fie un mesaj de eroare, fie rezultatul (catul si restul). Sa aveti grija la virgule si apostroafe

Daca ati facut totul bine, salvati (sper ca ati mai salvat pe parcurs, altfel, cu o pana de curent, o puteti lua de la inceput ) si porniti programul cu F9.

Pentru codul sursa + executabil, click aici.

Observatii: programul nu verifica introducerea incorecta de date, nici eventualele calcule care depasesc limitele de valori. Puteti incerca sa adaugati aceste functionalitati programului... Haide, haide, ca nu e greu... stiti cum e, Practice makes perfect Spor la treaba


_______________________________________
Portal SkullBox
SkullBox Forum
IP Finder and web browser details revealer


pus acum 19 ani
   
Pagini: 1  

Mergi la