metodologia rezolvarii problemelor de informatica in stilul oop

112
  UNIVERSITATEA DE STAT TIRASPOL COLEGIUL FINANCIAR - BANCAR Silviu GÎNCU Metodologia rezolvării  problemelor de informatică în stilul orientat pe obiecte

Upload: hellsingz

Post on 08-Oct-2015

71 views

Category:

Documents


1 download

DESCRIPTION

xcv

TRANSCRIPT

  • UNIVERSITATEA DE STAT TIRASPOL

    COLEGIUL FINANCIAR - BANCAR

    Silviu GNCU

    Metodologia rezolvrii problemelor de informatic n

    stilul orientat pe obiecte

  • Copie autorizata pentru studenii CFBC

    Aprobat de Senatul Universitii de Stat Tiraspol

    Recenzeni: Andrei Braicov, doctor, confereniar universitar, UST Alexandru Lazari, doctor, lector superior, USM

    ISBN 978-9975-76-085-0. Silviu Gncu, 2012

    DESCRIEREA CIP A CAMEREI NAIONALE A CRII Gncu, Silviu. Metodologia rezolvrii problemelor de informatic n stilul orientat pe obiecte / Silviu Gncu; Univ. de Stat Tiraspol, Catedra Informatic i Tehnologii Informaionale. Ch. : Univ. de Stat Tiraspol, 2012. 112 p. (Informatica). 60 ex. ISBN 978-9975-76-085-0. 37.016.046:004 G 57

  • 3

    Prefa

    Pentru a rezolva probleme trebuie s rezolvi probleme

    Stilul de programare orientat pe obiecte (POO) este utilizat pentru rezolvarea problemelor de informatic cu un grad sporit de dificultate. Conform acestui stil programul const dintr-o colecie de obiecte, uniti individuale de cod care interacioneaz ntre ele.

    Elaborarea unui program n stilul POO presupune a organiza codul acestuia n uniti de program care s opereze cu obiecte. n acest sens elaborarea programului const n prelucrarea obiectelor existente sau crearea lor n dependen de specificul problemei.

    Prezenta lucrare tiinifico-didactic cuprinde o gam variat de programe rezolvate i o serie de probleme pentru rezolvare independent. Este o continuare a ghidului de iniiere Borland C++ Builder (lucrarea 2 din referinele bibliografice).

    Este adresat studenilor specialitii informatic, profesorilor de informatic ct i tuturor celor care sunt interesai de tehnologia POO.

    Problemele rezolvate au ca scop prezentarea principalelor concepte care stau la baza POO. n baza acestora este prezentat metodologia de creare a unei clase; de definirea datelor i prelucrarea metodelor; de iniializare a datelor obiectului prin intermediul constructorului; de creare a relaiilor dintre clase (motenire) i a relaiilor dintre obiecte (agregare). Programele sunt rezolvate n baza limbajului de programare C++, limbaj ce se afl la temelia mai multor medii de programare vizual (C++ Builder, Visual C++, etc.).

    Un salt important n dezvoltarea tehnologiilor informaionale s-a produs odat cu apariia mediilor de programare vizual orientate pe obiecte. Pentru formarea deprinderilor de realizare a aplicaiilor Windows orientate pe obiecte sunt prezentate o serie de aplicaii care ilustreaz modalitatea de gestionare a componentelor, de utilizare a elementelor de grafic, de creare a noi tipuri de date i de utilizare a lor ntr-un mediu de programare vizual. Drept mediu de programare este utilizat platforma Borland C++ Builder.

    Pentru dezvoltarea abilitilor de programare, recomand cititorilor rezolvarea a ct mai multe probleme.

    Autorul

  • 4

    Sugestii metodologice 1. Modelul orientat pe obiecte Conform Grady Booch tehnologia orientat pe obiecte a fost conceput n

    baza principiilor de abstractizare, incapsulare, modularitate, ierarhizare, tipizare, paralelilism i persisten. Ceea ce este important const n faptul c aceste principii se regsesc n modelul orientat pe obiecte.[4, p.25].

    1. Abstractizare - procesul care capteaz caracteristicile eseniale ale unui obiect, caracteristici ce difereniaz acest obiect de toate celelalte tipuri de obiecte. Prin abstractizare se rezolv problemele cu un grad sporit de complexitate. Abstractizarea se manifest prin determinarea similaritii dintre anumite obiecte, situaii sau procese din lumea real i n luarea deciziilor, ignornd pentru moment deosebirile dintre obiecte;

    2. Incapsulare - procesul mental executat pe o abstractizare n care elementele structurale ale abstractizrii sunt izolate de cele ce constituie comportamentul su. Servete la separarea interfeei vizibile a unei abstractizri de implementarea sa;

    3. Modularitate - procesul de divizare a unui sistem complex n pri (module) manevrabile. Modularitatea este caracteristica de divizare a programului n mai multe uniti care sunt compilate separat, dar simultan i comunic ntre ele;

    4. Ierarhizare - procesul de clasificare pe nivele de abstractizare; 5. Tipizare reprezint un mod de protejare a obiectelor. Prin intermediul tipizrii se face distincie dintre obiectele diferitor clase, astfel obiectele nu pot fi schimbate sau, n unele cazuri, aceast schimbare este limitat; 6. Concurena (paralelism) este o proprietate, prin intermediul creia se permite ca mai multe obiecte diferite s fie n execuie n acelai timp. Sistemele care implic concurena sunt sisteme cu procesoare multiple, n care mai multe procese sau thread-uri (fire de execuie) pot fi executate concurent pe procesoare diferite. 7. Persistena este proprietatea obiectelor care implic existena acestora i dup ncetarea procesului care le-a creat. Starea obiectului i codul corespunztor metodelor sunt memorate n baza de date. Tipurile obiectelor pot fi declarate persistente prin folosirea cuvntului cheie persistent la momentul declarrii, variabila fiind i ea constrns la un tip persistent. Eseniale pentru limbajele de programare orientate pe obiect sunt primele patru caracteristici. Un limbaj de programare este orientat pe obiecte dac susine primele patru caracteristici.

    2. Caracteristici ale programrii orientate pe obiecte Din perspectiva programrii, rezolvarea unei probleme se poate face pe 3

    direcii:

  • 5

    a) Rezolvarea orientat pe algoritm; b) Rezolvarea orientat pe date; c) Rezolvarea orientat pe obiect, combin tendinele primelor dou abordri.

    Programarea orientat pe obiecte POO presupune unirea datelor cu subprogramele care prelucreaz aceste date ntr-un tot ntreg, numit obiect. Acest stil de scriere a codului, numit tehnologie, ofer posibiliti de modelare a obiectelor, a proprietilor i a relaiilor dintre ele, dar i posibilitatea de a descompune o problem n componentele sale (soft mai mentenabil, adaptabil, reciclabil). Acest mod de rezolvare se bazeaz pe crearea de obiecte i pe interaciunea dintre ele. Cele mai importante caracteristici ale tehnologiei orientate pe obiecte sunt:

    Obiectul asociaz datele mpreun cu operaiile necesare prelucrrii. Datele sunt informaii de structur descrise de o mulime de atribute ale obiectului, iar operaiile (metodele) acioneaz asupra atributelor obiectului i eventual, asupra altor obiecte;

    Clasa reunete o colecie de obiecte care partajeaz aceeai list de atribute informaionale i comportamentale;

    Incapsularea principiul care se bazeaz pe combinarea datelor cu operaiile de gestionare a obiectului i proprietatea obiectelor de a ascunde datele i operaiile proprii fa de alte obiecte;

    Instanierea operaia prin care se creeaz un obiect i apoi se iniializeaz cu date specifice;

    Motenirea principiul prin care putem reutiliza i extinde clasele existente. Acest mecanism permite unei noi clase s beneficieze de atributele i metodele definite ntr-o clas deja existent;

    Agregarea operaiile cu ajutorul crora clasele sunt descompuse n uniti mai mici, care la fel sunt clase. O clas agregat este o clas ale crei obiecte conin alte obiecte.

    Polimorfismul posibilitatea de a putea aplica n moduri diferite o aceeai operaie mai multor clase. Prin operaie nelegem orice metod sau operator. Polimorfismul reprezint abilitatea unor obiecte similare de a rspunde la acelai mesaj n moduri diferite.

    3. Limbaje de programare orientate pe obiecte

    Un limbaj de programare reprezint un set de specificaii necesare reprezentrii algoritmilor. Dezvoltarea limbajelor de programare a cunoscut n timp mai multe generaii.

    Prima generaie a limbajelor de programare o constituie perioada 1954-1958. Limbajele din aceast generaie au fost concepute pentru a simplifica complexitatea formulelor matematice. Sunt caracteristice limbajele: FORTRAN I, ALGOL-58, Flowmatic i IPL V.

  • 6

    A doua generaie dateaz anilor 1959-1961 i se caracterizeaz prin concentrarea ateniei asupra abstraciunilor algoritmice. n acea perioad calculatoarele au devenit mai puternice, ele fiind utilizate n soluionarea problemelor de ordin economic, de eviden a personalului, etc. Sunt utilizate limbajele: FORTRAN II, ALGOL-60, COBOL, Lisp.

    Odat cu apariia tranzistoarelor, costul unui calculator a sczut considerabil, astfel producerea lor a crescut esenial. Creterea productivitii acestora a dus la apariia unei noi generaii a limbajelor de programare n perioada 1962-1970. Au aprut limbaje precum: PL/I, ALGOL-68, Pascal, Simula. Aceste limbaje se caracterizeaz prin faptul c ofer un alt nivel de abstractizare a datelor, oferind programatorului posibilitatea de a crea noi tipuri de date.

    Perioada 1970-1980 se caracterizeaz prin apariia mai multor limbaje de programare, care nu au fcut fa cerinelor pieii. Problema abstractizrii obiectelor a fost caracteristic perioadei 1970-1980, astfel au aprut limbajul Simula, iar n baza acestuia i altele precum Smalltalk, Object Pascal, C++, CLOS, Ada i Eiffel. Aceste limbaje au fost numite orientate pe obiecte.

    Lansarea sistemului de operare Windows a impus firmele specializate s dezvolte produse noi, destinate implementrii pe calculator a unor programe concepute n baza unui limbaj de programare. Astfel au aprut mai multe medii de programare vizual, destinate dezvoltrii rapide a aplicaiilor Windows orientate pe obiecte. Mediile de programare conin o gam larg de biblioteci, care sunt compuse din clase. Spre exemplu, mediul de programare C++ Builder conine biblioteca VCL (Visual Componente Library) format din clase, funcii i variabile necesare pentru elaborarea de aplicaii. O clas, n mediul de programare vizual, este completat cu dou elemente noi:

    Proprieti reprezint starea unui obiect, din punct de vedere sintactic datele unui obiect sunt transformate n proprieti, care au ataat n fa cuvntul cheie __property.

    Evenimente reprezint o legtur dintre o aciune n sistem (apsarea unei taste, deplasarea maus-ului, etc.) i o secven de cod care rspunde la aciunea efectuat.

    Instanele unor astfel de clase sunt numite componente. O component este definit ca fiind o clas ce deriv direct sau indirect din clasa TComponent. [5, p. 17]

    Unitatea de baz a unei aplicaii Windows o constituie componentele. Acestea pot fi grupate n:

    Componente container pot conine pe suprafaa lor alte componente. De exemplu: Form, GroupBox, etc.;

    Componente de aciune destinate prelucrrii unei aciuni (efectuarea unui

  • 7

    click, etc.). De exemplu: Button i alte derivate ale acesteia; Componente valoare prin intermediul crora este prezentat o informaie. De

    exemplu: Label, Edit, etc.; Componente de selecie (CheckBox, RadioButton, etc); Componente de listare (ListBox, MonthCalendar, etc.); Componente pentru prelucrarea grafic (Obiectul Canvas), etc. Prin intermediul componentelor un mediu de programare ofer posibilitatea

    utilizatorului de a dezvolta aplicaii Windows orientate pe obiecte.

    4. Tendine n prezent tehnologiile informaionale se afl n continu cretere. Astfel, au

    aprut noi platforme de dezvoltare. Concomitent cu acestea s-au dezvoltat i mediile de programare vizual orientate pe obiecte. Ele ofer posibilitatea de a elabora diverse produse software. Prin intermediul lor se pot realizeaz:

    a) aplicaii Windows orientate pe obiecte; b) aplicaii Windows pentru gestiunea bazelor de date; c) aplicaii Windows pentru lucru n reea; d) aplicaii pentru gestiunea paginilor web, etc.

    Elaborare unei aplicaii Windows orientat pe obiecte presupune: 1. A gestiona componentele oferite de ctre mediul de programare utilizat. Un

    mediu de programare vizual orientat pe obiecte conine o gam larg de componente destinate procesrii datelor. Pentru gestiunea lor, sunt necesare cunotine n ceea ce privete structura obiectelor. Aceasta presupune a studia proprietile, metodele i evenimentele caracteristice unei componente i modalitate de modificare a lor n dependen de specificul problemei.

    2. A elabora componente noi. n cazul n care mediul de programare nu ofer suficiente componente, apare tendina de elaborare a lor.

    Observm necesitatea studierii programrii orientate pe obiecte n ambele cazuri.

    5. Dificulti n nsuirea programrii orientate pe obiecte n prezent conform literaturii de specialitatea din domeniu [3],[4],[10], etc., i a

    planurilor de nvmt ale universitilor din Republica Moldova i nu numai, tehnologia programrii orientat pe obiecte este format n baza:

    a) unui limbaj de programare de uz general, cele mai frecvent utilizate fiind Object Pascal, C++, C#;

    b) unui mediu de programare cu elemente de programare vizual, cele mai frecvent utilizate fiind: Borland Delphi/Builder, Java, Visual C++, Visual Basic, etc.

  • 8

    n timp s-a observat c studenii ntmpin mai multe dificulti n nsuirea deprinderilor de utilizare a tehnologiei orientate pe obiecte. De cele mai multe ori acestea se datoreaz:

    1. Lipsei unui model, care s se expun asupra coninuturilor i asupra metodelor de predare/nvare.

    2. Insuficienei de probleme rezolvate, prin intermediul crora s se prezinte modalitatea de elaborare a unui program n stilul de programare orientat pe obiecte.

    3. Gradului sporit de dificultate al problemelor propuse spre rezolvare n cadrul orelor de laborator, etc.

    6. Reflecii privind coninutul i organizarea procesului de instruire Pentru nlturarea dificultilor ntlnite n procesul de studiu al POO se

    recomand: 1. A utiliza modelul moderat de formare a competenelor, elaborat de ctre un

    grup de cercettori din Belgia (X. Rogiers, J.-M. De Ketele, F.-M. Grard). Conform modelului formarea competenei se realizeaz n trei etape:

    a) Structurare a resurselor. Aceast etap presupune studierea materialului teoretic, concepte, noiuni, definiii, etc.;

    b) Integrare a resurselor. Resursele teoretice sunt integrate prin prisma exemplelor. Fiecare dintre exemple avnd drept scop final prezentarea unei sau a mai multor caracteristici ale POO.

    c) Transfer sau adaptarea la noi situaii. n cadrul acestei etape sunt propuse probleme care difer, dar nu considerabil de problemele din cadrul etapei a doua. Astfel dac problema este rezolvat atunci transferul este realizat. 2. De a realiza un studiu de caz asupra unui proiect. Astfel vor fi prezentate

    avantajele oferite de ctre POO comparativ cu alte stiluri de programare. 3. A propune spre rezolvare la orele de laborator un set de probleme astfel

    nct: a) Gradul de dificultate al problemelor s nu fie foarte ridicat; b) Problemele propuse spre rezolvare s cuprind majoritatea conceptelor POO

    studiate; c) Problemele propuse s ofere continuitate n procesul de studiu; d) S realizeze un proiect care s cuprind n structura sa mai multe module.

  • 9

    Capitolul I Limbajul C++

    C++ (pronunat n romn C plus plus i n englez si plas plas) este un limbaj de programare orientat pe obiecte. A fost creat de ctre Bjarne Stroustrup, lansarea comercial datnd anului 1985. n 1990 devine unul dintre cele mai populare limbaje de programare comerciale.

    1. Crearea de obiecte

    Problem exemplu. Creai obiectul dreptunghi

    date: lungimile laturilor; metode: citire, afiare, iniializare, determinare a perimetrului i ariei. Se vor introduce datele despre dou dreptunghiuri i se vor afia datele despre

    dreptunghiul cu suprafaa maxim i dreptunghiul cu perimetrul minim. Rezolvare :

    #include class dreptunghi{ double lung,lat; public: void citire();//pentru citirea datelor void afisare();//pentru afisare double arie(); double perimetru(); void init(double a, double b){lung=a;lat=b;}

    }; void dreptunghi::citire(){ cout

  • 10

    if(a.perimetru()

  • 11

    6. Creai obiectul ecuaie1 - va reprezenta o ecuaie de gradul 1 ax+b=0. date: a, b; metode: citire, afiare, iniializare, soluie. Se vor introduce datele despre dou ecuaii i se vor afia ecuaiile introduse ct

    i soluiile acestora. 7. Creai obiectul ecuaie2 - va reprezenta o ecuaie ptratic de ordinul doi

    ax2+bx+c=0. date: a, b, c; metode: citire, afiare, discriminant, soluie. Se vor introduce datele despre dou ecuaii i se vor afia ecuaiile introduse,

    discriminantul fiecrei ecuaii ct i soluiile acestora.

    8. Creai obiectul persoana, date: nume, anul naterii, genul, nlimea; metode: citire, afiare, virsta, greutate (se va determina conform formulelor: Gmasculin=50+0.75*(nlime-150) + (vrsta-20)/4 pentru genul masculin; Gfeminin=Gmasculin10 pentru genul feminin.

    De la tastatur se citesc datele despre n persoane. S se afieze: e) Lista turor persoanelor; f) Lista persoanelor cu o vrst mai mare dect 25 ani; g) Lista persoanelor cu o greutate cuprins ntre 55 i 80 kg.

    9. Creai obiectul student date: nume, anul naterii, notele la trei discipline; metode: citire, afiare, virsta, media, restana (va returna 1 doar dac studentul

    are cel puin o not mai mic dect 5), bursa (va fi egal cu 500 lei dac studentul nu are restan i media este mai mare dect 7.5).

    De la tastatur se citesc datele despre n studeni. S se afieze: a) Lista tuturor studenilor; b) Lista studenilor restanieri; c) Lista studenilor care au burs; d) Lista studenilor cu o vrst mai mic dect 18 ani.

    10. Creai obiectul angajat date: nume, funcia, anul angajrii, ore lucrate, plata pentru o or; metode: citire, afiare, stagiu (diferena dintre anul curent i anul angajrii),

    salariu calculat (se va determina conform formulei: ore lucrate* plata pentru o or), spor (va constitui 15% din salariul calculat, dac stagiul este mai mare dect 5 ani i

  • 12

    mai mic sau egal dect 8 ani i 25%, dac stagiu este mai mare dect 8 ani), Salariu primit (se va determina conform formulei: salariu calculat+spor).

    De la tastatur se citesc datele despre n angajai. S se afieze: a) Lista tuturor angajailor; b) Lista angajailor cu un stagiu mai mare dect 10 ani; c) Lista angajailor cu un salariu mai mare dect 1000;

    2. Constructori

    Clas-pereche este numit o clas cu dou date, care de obicei sunt dou

    numere n1 i n2. Este necesar de a elabora un program, prin intermediul cruia se va crea tipul de date clas-pereche. n toate sarcinile trebuie s fie prezente:

    a) Trei tipuri de constructori: fr parametri, cu parametri, de copiere; b) Destructorul; c) Metoda de citire; d) Metoda de afisare;

    Toate aceste condiii necesit a fi respectate pentru urmtoarele cazuri.

    Problem exemplu Cmpul n1 - numr real, Cmpul n2 numr real. Creai metoda suma() va returna suma numerelor.

    Rezolvare :

    #include class numar{ double n1,n2; public: numar(){n1=n2=0;} numar(double a,double b){n1=a;n2=b;} numar(numar&); void citire(); void afisare(); double suma(); ~numar(){cout

  • 13

    numar a;//constructor fara parametri a.citire();a.afisare(); numar b(3.2,8.5);//constructor cu parametri b.afisare(); numar c(a);//constructor de copiere c.afisare(); numar *p; //utilizarea pointerilor p=new numar;//apelarea constructorului fara parametri p->afisare(); delete p;//distrugerea obiectului p=new numar(5,6);//apelarea constructorului cu parametri p->afisare();delete p; p=new numar(b);//apelarea constructorului de copiere p->afisare();delete p; }

    1. Cmpul n1 - un numr ntreg, Cmpul n2 numr real nenul. Creai metoda

    power() va returna numrul n2 la puterea n1. 2. Cmpul n1 - un numr ntreg, Cmpul n2 numr real. Creai metoda

    intreg() - care va returna partea ntreag a fraciei n1/n2. Metoda trebuie s verifice inegalitatea numitorului cu zero.

    3. Cmpul n1 - un numr real pozitiv (preul bunurilor), Cmpul n2 numr

    ntreg pozitiv (numrul de bunuri). Creai metoda cost() va returna numrul ce reprezint valoarea total a bunurilor.

    4. Cmpul n1 - un numr ntreg pozitiv (calorii la 100g), Cmpul n2 numr real (greutatea produsului n kilograme). Creai metoda calorii() va returna numrul de calorii ale produsului.

    5. Cmpul n1 - un numr real (suma depozitul n lei), Cmpul n2 numr real

    (procentul anual). Creai metoda valoare(int) va returna suma de bani mpreun cu calcularea dobnzii timp de 1, 2, 3, 4 ani.

    6. Cmpul n1 - un numr ntreg pozitiv (numrul de ore), Cmpul n2 un

    numr ntreg pozitiv (numrul de minute). Creai metoda secunde() va returna numrul total al secundelor scrise n cele dou cmpuri.

    7. Cmpul n1 - un numr real (coordonata x), Cmpul n2 numr real (coordonata y). Creai metoda distanta() va returna distana de la punctul (0,0) la punctul cu coordonatele (n1, n2).

    8. Cmpul n1 - un numr real (cateta a a unui triunghi dreptunghic), Cmpul n2

    numr real (cateta b). Creai metodele:

  • 14

    ipotenuza() va returna lungimea ipotenuzei triunghiului dreptunghic; arie() - va returna aria triunghiului; perimetru() - va returna perimetrul triunghiului. 9. Cmpul n1 - un numr real (salariul pentru o zi), Cmpul n2 numr ntreg

    (numrul de zile lucrate timp de o lun). Creai metoda suma() va returna salariul pentru un an al muncitorului.

    10. Cmpul n1 - un numr ntreg pozitiv (durata unui apel telefonic n secunde),

    Cmpul n2 numr real (costul n lei al unui minut). Creai metoda cost() va returna costul total al apelului.

    3. Motenire simpl

    Problem exemplu n calitate de clas de baz se consider clasa binar. n

    calitate de date vor fi dou valori reale. Metodele vor fi: a) constructorul cu i fr parametri; b) metodele de citire i afisare.

    Creai clasa dreptunghi, derivata clasei binar. Pentru clasa dreptunghi vor fi implementate metodele de determinare a suprafeei i a perimetrului.

    De la tastatur se citesc datele despre n dreptunghiuri. Elaborai un program prin intermediul cruia la ecran se vor afia datele despre toate dreptunghiurile, dreptunghiul cu suprafaa maxim i dreptunghiul cu perimetrul maxim.

    Rezolvare :

    #include class binar{ protected: double a,b; public: binar(){a=b=0;} binar(int i, int j){a=i;b=j;} void citire(); void afisare(); }; class dreptunghi : public binar{ public: dreptunghi(){}; dreptunghi(int i,int j):binar(i,j){}; double arie(); double perimetru(); }; void binar::citire(){couta>>b;} void binar::afisare(){cout

  • 15

    double dreptunghi::perimetru(){return 2*(a+b);} main(){ dreptunghi t[100]; int am,pm,i,n;double ma=0,mp=0; coutn; for(i=0;i

  • 16

    4. Creai clasa prism (baza este dreptunghi), derivata clasei triad. Pentru clasa prism vor fi implementate metodele de determinare a suprafeei totale, laterale i de determinare a volumului.

    De la tastatur se citesc datele despre n prisme. Elaborai un program prin intermediul cruia, la ecran se vor afia datele despre toate prismele, prisma cu suprafa maxim, prisma cu volumul maxim.

    5. Creai clasa piramid (baza este dreptunghi), derivata clasei triad. Pentru clasa piramid vor fi implementate metodele de determinare a suprafeei totale, laterale i de determinare a volumului.

    De la tastatur se citesc datele despre n piramide. Elaborai un program prin intermediul cruia, la ecran se vor afia datele despre toate piramidele, piramida cu suprafa maxim, piramida cu volumul maxim.

    B. n calitate de clas de baz se va crea clasa persoana. date: nume, prenume, anul, cnp (codul personal de 13 cifre); metode : citire, afiare, virsta.

    6. Creai clasa Salariat, derivata clasei persoana. Pentru clasa salariat vor fi adugate:

    date: numrul de ore lucrate, plata pentru o or, anul angajrii; metode: vor fi redefinite metodele de citire i afiare, salariu. Salariul va fi

    determinat conform formulei : nr_ore*plata. De la tastatur se citesc datele despre n salariai. Elaborai un program prin

    intermediul cruia la ecran se vor afia datele despre toi salariaii, salariatul cel mai tnr i salariatul cu salariu maxim.

    7. Creai clasa Student, derivata clasei persoana. Pentru clasa student vor fi adugate:

    date: media notelor curente, grupa; metode: vor fi redefinite metodele de citire i afiare, bursa. Bursa va fi

    determinat conform fomulei: media*75 lei, dac media este mai mare dect 7.5, n caz contrar va fi 0.

    De la tastatur se citesc datele despre n studeni. Elaborai un program prin intermediul cruia la ecran se vor afia datele despre toi studenii, studentul cel mai tnr, studentul cu bursa maxim. 8. Creai clasa Sofer, derivata clasei persoana. Pentru clasa ofer vor fi adugate:

  • 17

    date: distana parcurs (n km), plata pentru 1 km; metode: vor fi redefinite metodele de citire i afiare, plata. Prin intermediul

    metodei Plata, se va determina costul unei curse efectuate de ctre ofer dup formula: distanta*plata pentru 1 km.

    De la tastatur se citesc datele despre n oferi. Elaborai un program prin intermediul cruia la ecran se vor afia datele despre toi oferii, oferul cel mai tnr, oferul cu plata maxim. 9. Creai clasa Angajat_calificat, derivata clasei Salariat (prob. 6). Pentru clasa Angajat_calificat vor fi adugate:

    date: gradul calificrii (1 superior, 2 mediu, 3 inferior); metode: vor fi redefinite metodele de citire i afiare, salariu. Salariu va fi

    determinat conform formulei : nr_ore*plata*(100%+calificare),

    3%,302%,401%,50

    gradulpentrugradulpentrugradulpentru

    calificare

    De la tastatur se citesc datele despre n angajai calificai. Elaborai un program prin intermediul cruia la ecran se vor afia datele despre toi angajaii, angajatul cel mai tnr i angajatul cu salariu maxim. 10. Creai clasa Piramida, derivata clasei triunghi (prob. 1).

    date: nlimea piramidei, metode: citire i afiare, suprafaa_total i volum. De la tastatur se citesc datele despre n piramide i m triunghiuri. Elaborai un

    program prin intermediul cruia, la ecran se vor afia datele despre toate piramidele (triunghiurile), piramida (triunghiul) cu suprafa maxim, piramida cu volumul maxim, triunghiul cu perimetrul minim.

    4. Funcii virtuale i polimorfism

    Problem exemplu. [2, p. 180]. 1. Se consider drept baz clasa numar (va avea n calitate de date un numr real). n baza acestei clase se deriv clasele patrat i triunghi_echilateral. S se implementeze polimorfismul pentru metodele: citire, afiare, suprafaa i perimetru. De la tastatur se citete numrul de figuri. Elaborai un program care va permite :

    a) citirea figurilor de la tastatur; b) afiarea acestora;

  • 18

    c) afiarea figurilor sub form de ptrat; d) afiarea figurilor sub form de triunghi; e) afiarea figurii cu suprafa maxim; f) afiarea figurii cu perimetru maxim; g) afiarea perimetrului total al figurilor; h) afiarea suprafeei totale a figurilor; i) sortarea figurilor n ordine descresctoare suprafeei.

    2. Se consider drept baz clasa doi (va avea n calitate de date dou numere reale). n baza acestei clase se deriv clasele dreptunghi i triunghi_dreptunghic. S se implementeze polimorfismul pentru metodele: citire, afiare, suprafaa i perimetru. De la tastatur se citete numrul de figuri. Elaborai un program care va permite :

    a) citirea figurilor de la tastatur; b) afiarea acestora; c) afiarea figurilor sub form de dreptunghi; d) afiarea figurilor sub form de triunghi; e) afiarea figurii cu suprafa maxim; f) afiarea figurii cu perimetru maxim; g) afiarea perimetrului total al figurilor; h) afiarea suprafeei totale a figurilor; i) sortarea figurilor n ordine descresctoare suprafeei.

    3. Se consider drept baz clasa tread (va avea n calitate de date dou numere reale i un numr ntreg). n baza acestei clase se deriv clasele paralelogram i triunghi. S se implementeze polimorfismul pentru metodele: citire, afiare, suprafaa i perimetru. De la tastatur se citete numrul de figuri. Elaborai un program care va permite :

    a) citirea figurilor de la tastatur; b) afiarea acestora; c) afiarea figurilor sub form de paralelogram; d) afiarea figurilor sub form de triunghi; e) afiarea figurii cu suprafa maxim; f) afiarea figurii cu perimetru maxim; g) afiarea perimetrului total al figurilor; h) afiarea suprafeei totale a figurilor; i) sortarea figurilor n ordine descresctoare suprafeei.

  • 19

    4. Se consider drept baz clasa patrulater. n baza acestei clase se deriv clasele paralelogram i trapez. S se implementeze polimorfismul pentru metodele: citire, afiare, suprafaa i perimetru. De la tastatur se citete numrul de figuri. Elaborai un program care va permite :

    a) citirea figurilor de la tastatur; b) afiarea acestora; c) afiarea figurilor sub form de paralelogram; d) afiarea figurilor sub form de trapez; e) afiarea figurii cu suprafa maxim; f) afiarea figurii cu perimetru maxim; g) afiarea perimetrului total al figurilor; h) afiarea suprafeei totale a figurilor; i) sortarea figurilor n ordine descresctoare suprafeei.

    5. Se consider drept baz clasa dreptunghi. n baza acestei clase se deriv

    clasele piramid i prism. S se implementeze polimorfismul pentru metodele: citire, afiare, suprafaa i volum. De la tastatur se citete numrul de figuri. Elaborai un program care va permite :

    a) citirea figurilor de la tastatur; b) afiarea acestora; c) afiarea figurilor sub form de piramid; d) afiarea figurilor sub form de prism; e) afiarea figurii cu suprafa maxim; f) afiarea figurii cu volum maxim; g) afiarea volumului total al figurilor; h) afiarea suprafeei totale a figurilor; i) sortarea figurilor n ordine descresctoare suprafeei.

    6. Se consider drept baz clasa paralelogram. n baza acestei clase se deriv clasele piramid i prism. S se implementeze polimorfismul pentru metodele: citire, afiare, suprafaa i volum. De la tastatur se citete numrul de figuri. Elaborai un program care va permite :

    a) citirea figurilor de la tastatur; b) afiarea acestora; c) afiarea figurilor sub form de piramid; d) afiarea figurilor sub form de prism; e) afiarea figurii cu suprafa maxim; f) afiarea figurii cu volum maxim; g) afiarea volumului total al figurilor;

  • 20

    h) afiarea suprafeei totale a figurilor; i) sortarea figurilor n ordine descresctoare suprafeei.

    7. Se consider drept baz clasa cerc. n baza acestei clase se deriv clasele con i cilindru. S se implementeze polimorfismul pentru metodele: citire, afiare, suprafaa i volum. De la tastatur se citete numrul de figuri. Elaborai un program care va permite :

    a) citirea figurilor de la tastatur; b) afiarea acestora; c) afiarea figurilor sub form de con; d) afiarea figurilor sub form de cilindru; e) afiarea figurii cu suprafa maxim; f) afiarea figurii cu volum maxim; g) afiarea volumului total al figurilor; h) afiarea suprafeei totale a figurilor; i) sortarea figurilor n ordine descresctoare suprafeei.

    8. Se consider ierarhia: Persoana, Angajat i Student. Clasele Angajat i

    Student sunt derivatele clasei Persoana. n clasa persoan vor fi definite urmtoarele: date: numele, prenumele, anul naterii; metode: Citire citirea de la tastatur a datelor despre persoan, Afisare afiarea la consol a datelor despre persoan; Virsta va returna vrsta persoanei.

    n clasa Angajat suplimentar vor mai fi declarate: date: Ore numrul de ore lucrate, Pl_ora plata pentru o or, funcia; metode: Bani va determina salariul angajatului conform formulei: ore*pl_ora.

    n clasa Student suplimentar vor mai fi declarate date: media, grupa; metode Bani va determina bursa studentului conform formulei: media*75 lei,

    dac media studentului este mai mare dect apte, n caz contrar returneaz 0. Pentru aceast ierarhie se va implementa polimorfismul pentru metodele citire,

    afiare, bani. De la tastatur se citete numrul total de persoane n (n

  • 21

    d) Suma total de bani, pe care o primesc toate persoanele citite; e) Persoana sau persoanele ce primesc cei mai muli bani; f) Persoana sau persoanele ce primesc cei mai puini bani; g) Persoana sau persoanele cele mai tinere; h) Afiarea persoanelor n ordine descresctoare veniturilor acumulate; i) Afiarea persoanelor n ordine cresctoare vrstei.

    5. Motenire multipl

    A. Problem exemplu n calitate de clase de baz se consider clasele patrat i

    triunghi echilateral. Aceste clase deriv clasa figura, format dintr-un ptrat i un triunghi echilateral, grafic figura se reprezint:

    Creai clasa figura, derivata claselor patrat i triunghi echilateral, dac

    lungimea laturii triunghiului echilateral este egal cu a+0.3*a, unde a este lungimea laturii ptratului. Pentru clasa figura vor fi implementate metodele de determinare a suprafeei i a perimetrului.

    Rezolvare :

    #include #include class patrat{ public: double lp; patrat(){lp=0;} patrat(double a){lp=a;} void cit_patrat(); void afis_patrat(); double per_patrat(){return 4*lp;} double arie_patrat(){return lp*lp;} }; void patrat::cit_patrat(){ cout

  • 22

    double per_triunghi(){return 3*lt;} double arie_triunghi(){return sqrt(3)*0.25*lt*lt;} }; void tr_echil::cit_triunghi(){ cout

  • 23

    cercului) i nlimea triunghiului isoscel. Pentru clasa figura vor fi implementate metodele de determinare a suprafeei i a perimetrului.

    3. n calitate de clase de baz se consider clasele trapez isoscel i triunghi

    isoscel. Aceste clase deriv clasa figura, format dintru-un trapez isoscel i un triunghi isoscel, grafic figura se reprezint:

    Creai clasa figura, derivata claselor trapez isoscel i triunghi isoscel, dac se

    cunosc lungimile bazelor trapezului (lungimea laturii triunghiului isoscel este egal cu lungimea bazei mari a trapezului), iar nlimile trapezului i a triunghiului sunt de aceiai mrime. Pentru clasa figura vor fi implementate metodele de determinare a suprafeei i a perimetrului.

    4. n calitate de clase de baz se consider clasele cerc i figura (exemplul

    rezolvat). Aceste clase deriv clasa figura_noua (format dintr-un cerc i figura prezentat n exemplul rezolvat), grafic figura_noua se reprezint:

    Creai clasa figura_noua, derivata claselor cerc i figura, dac se cunoate

    lungimea laturii ptratului, lungimea diametrului cercului este egal cu lungimea laturii ptratului, iar lungimea laturii triunghiului echilateral este egal cu a+0.3*a, unde a este lungimea laturii ptratului. Pentru clasa figura_noua vor fi implementate metodele de determinare a suprafeei i a perimetrului.

    5. n calitate de clase de baz se consider clasele patrat i figura (problema 3).

    Aceste clase deriv clasa figura_noua (format dintr-un ptrat i figura din problema 3), grafic figura_nou se reprezint:

    Creai clasa figura_noua, derivata claselor figura i patrat, dac se cunoate datele despre figur (problema 3), iar lungimea laturii ptratului este egal cu lungimea bazei mici a trapezului isoscel. Pentru clasa figura_noua vor fi implementate metodele de determinare a suprafeei i a perimetrului.

    B. Problem exemplu [2, p. 185-186]. 6. Se consider ierarhia format din clasele: Clas de baz: Punct cu cmpurile: coordonatele punctului i culoarea; Clase derivate: triunghi echilateral (punctul se consider a fi n centrul triunghiului): lungimea

    laturii;

  • 24

    cerc: lungimea razei; figur (triunghi nscris n cerc) derivata claselor cerc i triunghi. Metodele de citire i desenare vor fi implementate pentru fiecare clas din

    ierarhie. De la tastatur se citete un numr ntreg n (n

  • 25

    despre leu temperatura minim suportat, ara de provenien; despre urs - perioada de hibernare; despre cprioar - numrul de pui. Pentru fiecare clasa se vor implementa att o funcie de citire a datelor, ct i o

    funcie de afiare a acestora, funcii ce vor fi declarate ca funcii pur virtuale n cadrul clasei de baz CAnimal. Creai clasa CRezervatie care s conin o mulime de animale i s se populeze rezervaia.

    10. Se consider ierarhia: Persoana, Angajat, Student i Student_angajat. Clasele Angajat i Student sunt derivatele clasei Persoana, iar clasa Student_angajat este derivata claselor Student i Angajat. n clasa persoan vor fi definite urmtoarele:

    date: numele, prenumele, anul naterii; metode: Citire citirea de la tastatur a datelor despre persoan, Afisare afiarea la consol a datelor despre persoan; Virsta va returna vrsta persoanei.

    n clasa Angajat suplimentar vor mai fi declarate: date: Ore numrul de ore lucrate, Pl_ora plata pentru o or, funcia; metode: Bani va determina salariul angajatului conform formulei: ore*pl_ora.

    n clasa Student suplimentar vor mai fi declarate date: media, grupa; metode Bani va determina bursa studentului conform formulei: media*75 lei,

    dac media studentului este mai mare dect apte, n caz contrar returneaz 0. Clasa Student_angajat va conine metode pentru citire, afiare, Bani (salariu

    +bursa). Pentru aceast ierarhie se va implementa polimorfismul pentru metodele citire,

    afiare, bani. De la tastatur se citete numrul total de persoane n (n

  • 26

    6. Suprancrcarea operatorilor

    Problem exemplu. [2, p. 164-168]. 1. Se consider clasa timp, cu urmtoarea structur:

    class timp{ int ora,min, sec;//14:24:35 public: timp(); timp(int,int,int); // };

    Elaborai un program, prin intermediul cruia pentru clasa timp vor fi suprancrcai:

    a) Operatorul + va efectua suma dintre dou obiecte de tipul timp; b) Operatorul - va efectua diferena dintre dou obiecte de tipul timp; c) Operatorul ++ incrementarea cu o secund; d) Operatorul -- decrementarea cu o secund; e) Operatorul = f) Operatorii >>,, >=, ,, >=,

  • 27

    3. Se consider clasa fractie, cu urmtoarea structur: class fractie{ public: int numitor,numarator;// 14/35 fractie (); fractie (int,int); // };

    Elaborai un program prin intermediul cruia pentru clasa fractie, vor fi suprancrcai:

    a) Operatorii aritmetici +, -, *, / ; b) Operatorii incrementare i decrementare ++, --; c) Operatorul =; d) Operatorii >>,, >=, ,

  • 28

    int k;// lungimea sirului public: string ();//va aloca dinamic 255 de elemente string (int);//se transmite lungimea sirului int ToInt(string); string ToString(int); int cauta(char); // };

    Elaborai un program, prin intermediul cruia pentru clasa string, vor fi suprancrcai:

    a) Operatorul + va concatena dou iruri; b) Operatorul =; c) Operatorii de comparaie ==,!=, >, >=, ,>,, >=,

  • 29

    Trinom (double, double, double); void Radacini(); // };

    Elaborai un program, prin intermediul cruia pentru clasa trinom, vor fi suprancrcai:

    a) Operatorul + va efectua operaia de adunare dintre dou trinoame; b) Operatorul - va efectua operaia de scdere dintre dou trinoame; c) Operatorul =; d) Operatorii de comparaie ==,!=, >, >=, ,>,, >=,

  • 30

    e) metoda de excludere va exclude un obiect din Heap; f) metoda de cutare va fi suprancrcat, astfel nct cutarea se va efectua dup

    un parametru i mai muli parametri; g) metode pentru filtrarea datelor; h) dou metode de sortare, una dup un cmp cu valori numerice, alta dup un

    cmp text; i) un meniu, prin intermediul cruia utilizatorul va avea posibilitatea de a alege

    operaia dorit. Realizare:

    Crem fiierul lista.in i l salvm n directoriul curent. n fiier datele vor fi scrise n mod corespunztor figurii:

    #include #include #include #include class TStudent{ char *nume,*grupa; int anul,id; double media; TStudent *next;//adresa umatorului element TStudent(); friend istream & operator>>(istream &, TStudent *&); friend ostream & operator(istream &is, TStudent *&t){ coutanul; coutt->media; return is; }

  • 31

    ostream & operatorp->media; p->next=prim;prim=p; }f.close(); } void lista::afisare(){ cout

  • 32

    void lista::cauta(char *nume){ TStudent *p;p=prim; while(p!=NULL){ if(stricmp(p->nume,nume)==0) coutmedia>=media&&p->anul==anul) cout(b->media))schimb(a,b); b=b->next; }a=a->next; } clrscr(); cout

  • 33

    1. Elaborai un program prin intermediul cruia vor fi gestionate filmele de la un cinematograf. Despre un film se cunosc urmtoarele date: numele filmului, anul ediiei, actorul principal, regizorul, bugetul filmului, ora de difuzare a filmului n cinematograf. 2. Elaborai un program prin intermediul cruia vor fi gestionate mai multe state prezente la un concurs. Despre fiecare stat se cunosc urmtoarele date: numele rii, preedintele, suprafaa, numrul de locuitori, continentul. 3. Elaborai un program prin intermediul cruia vor fi gestionate crile unei biblioteci. Despre fiecare carte se cunosc urmtoarele date: denumirea crii, autorul, editura, numrul de pagini, anul ediiei, preul. 4. Elaborai un program prin intermediul cruia vor fi gestionate calculatoarele unei universiti. Despre un calculator se cunosc urmtoarele date: tipul monitorului, capacitatea procesorului, cantitatea memoriei operative, placa video, hard disk-ul. 5. Elaborai un program prin intermediul cruia vor fi gestionate telefoanele mobile ale unui magazin. Despre un telefon se cunosc urmtoarele date: marca, anul ediiei, culoarea, preul, termenul de garanie, tipul camerei video. 6. Elaborai un program prin intermediul cruia vor fi administrate hotelurile dintr-o ar. Despre un hotel se cunosc urmtoarele date: nume hotel, adresa, numrul de stele, numrul de odi (camere), costurile minim i maxim pentru o camer. 7. Elaborai un program prin intermediul cruia vor fi gestionate automobilele dintr-un salon auto. Despre un automobil se cunosc urmtoarele date: marca, anul ediiei, culoarea, preul, capacitatea motorului, consumul la 100 km. 8. Creai un tip de date matr_complex, care va fi o matrice de numere complexe. Asupra acestui tip de date vor fi suprancrcai toi operatorii specifici unei matrice.

    9. Elaborai un program prin intermediul cruia se va crea tipul de date tablou bidimensional cu linii de lungime variabil, notat TBV. Pentru obiectul de tip TBV se vor implementa metodele:

    a) citire() citirea elementelor obiectului; b) afisare() afiarea elementelor obiectului; c) minime() afiarea elementelor minime de pe fiecare linie;

  • 34

    d) maxime() afiarea elementelor maxime de pe fiecare linie; e) sum_max() determinarea sumei elementelor maxime de pe fiecare linie; f) sum_min() determinarea sumei elementelor minime de pe fiecare linie; g) cauta(int e) va returna valoare 1 dac elementul e exist i 0 n caz contrar; h) sort() sortarea n ordine cresctoare pe linii a obiectului de tip TBV; i) *sort([char mod],[int linie]) sortarea cu transmitere de parametri c (ordine cresctoare) sau d (ordine descresctoare) n calitate de mod i cu indicarea liniei.

    10. Elaborai un program prin intermediul cruia se va efectua evidena personalului dintr-o instituie. n instituia dat sunt urmtoarele tipuri de personal : Angajat despre care se cunosc datele: numele, prenumele, codul fiscal, numrul de ore lucrate, plata pentru o or. n calitate de metode vor fi: citirea datelor de la tastatur, afiarea datelor la ecran, determinarea salariului conform formulei: salariu=ore_lucrate*plata_ora. Angajat de baz despre care se cunosc datele: numele, prenumele, codul fiscal, numrul de ore lucrate, plata pentru o or, gradul (0,1,2,3), anul angajrii. n calitate de metode vor fi: citirea datelor de la tastatur, afiarea datelor la ecran, determinarea salariului conform formulei: salariu=ore_lucrate*plata_ora. Angajatul va beneficia i de un adaos la salariu. Salariaii cu gradul 0 vor avea un adaos de 50%, gradul 1 40%, gradul 2 30%. n dependen de stagiu adaosul va fi de 35% pentru cei cu un stagiu 10 ani, 25% pentru cei cu un stagiu 3 ani i

  • 35

    Capitolul II Mediul de programare vizual C++ Builder

    C++Builder este un mediu de dezvoltare rapid a aplicaiilor produs de filiala CodeGear a Embarcadero Technologies pentru scrierea programelor n limbajul de programare C++. Prima versiune dateaz anului 1997. Se presupune c o versiune viitoare a CodeGear C++Builder va avea suport pentru x86/64 i va crea cod nativ x86/64.

    Programele au fost elaborate n versiunea C++ Builder 6.

    Probleme rezolvate

    Problema1 Reduceri Elaborai o aplicaie care va determina reducerea unui produs cumprat.

    Cumprtorul beneficiaz de reducere n urmtoarele cazuri : a) n cazul n care suma este mai mare ca 1000 lei reducerea este de 3%;

    b) n zilele de odihn reducerea este de 2%. n rezultatul efecturii unui click pe butonul Reducere, n componenta Label va

    fi afiat informaia complet despre reducere cu indicarea sumei finale. n cazul n care reduceri nu sunt, va fi afiat mesajul corespunztor. Informaia despre zilele de odihn va fi determinat n baza analizei datei curente. Forma aplicaiei va arta astfel :

    Realizare:

    Pe suprafaa formei plasm componentele: Label1 modificm proprietatea Caption n Suma (lei); Label2 eliminm textul de la proprietatea Caption i setm dimensiunile corespunztor; Edit1 - eliminm textul de la proprietatea Text;

  • 36

    Button1 modificm proprietatea Caption n Reducere; Pentru componenta Form1 setm proprietile:

    Caption=Reduceri Position= poScreenCenter Width=300 Height=200

    Prelucrm evenimentul Button1Click: double suma, reducere, ziua; TDateTime data=Now();//stabilim timpul curent suma=Edit1->Text.ToDouble(); if(suma>1000) reducere=suma*0.03;ziua=DayOfWeek(data); if(ziua==7||ziua==1) reducere+=suma*0.02; Label2->Caption="Reducerea este in marime de " +AnsiString(reducere)+'\n'+ "Suma Achitata:="+AnsiString(suma-reducere);

    Problema2 Termopan Elaborai o aplicaie, prin intermediul creia va fi posibil de determinat costul

    unui geam termopan. Preurile sunt: 1m2 cost 179 lei, pervazul ferestrei cost 39 lei/m. Aplicaia va arta astfel :

    Realizare:

    Pe suprafaa formei plasm componentele: Label1 modificm proprietatea Caption n Lungimea (cm); Label2 modificm proprietatea Caption n Latimea (cm); Label3 eliminm textul de la proprietatea Caption i setm dimensiunile corespunztor; Edit1 - eliminm textul de la proprietatea Text; Edit2 - eliminm textul de la proprietatea Text; Button1 modificm proprietatea Caption n Determinare cost; CheckBox1 - modificm proprietatea Caption n Pervaz; RadioGroup1 - modificm proprietatea Caption n Geam, iar prin intermediul proprietii Items introducem simplu i dublu;

  • 37

    Pentru componenta Form1 setm proprietile: Caption=Geam termopan Position= poScreenCenter Width=400 Height=210

    Prelucrm evenimentul Button1Click: double lung, lat, cost; bool pervaz=CheckBox1->Checked; lung=Edit1->Text.ToDouble()*0.01; lat=Edit2->Text.ToDouble()*0.01; cost=lung*lat*179; if(RadioGroup1->ItemIndex==1) cost=cost*2; if(pervaz)cost+=lung*39;Label3->Caption="Costul ferestrei este de "+ AnsiString(cost)+" lei";

    Problema3 Navigator Elaborai o aplicaie prin intermediul creia va fi efectuat navigarea n

    sistemul de fiiere al calculatorului. Efectund operaia double-click pe numele fiierului, acesta va fi deschis. Prin intermediul unui buton cu titlul Cauta se va efectua cutarea fiierelor dup nume, iar datele despre acestea vor fi adugate ntr-o component de tip TMemo. Componentei de tip TMemo i va fi ataat un meniu contextual cu titlul Salveaza, efectuarea unui click pe suprafaa acestuia va salva cutarea n fiierul date.txt aflat n directoriul curent. Realizare:

    Pe suprafaa formei plasm corespunztor componentele: FileListBox1 pentru afiarea fiierelor; FilterComboBox1 modificm proprietatea FileList n FileListBox1, prin intermediul proprietii filter crem urmtorul filtru:

    DirectoryListoBox1 modificm proprietatea DirList n FilelistBox1; DriveComboBox1 modificm proprietatea FileList n DirectoryListoBox1; Label1 modificm proprietatea Caption n Indica numele fisierului; Edit1 - eliminm textul de la proprietatea Text;

  • 38

    Button1 modificm proprietatea Caption n Cauta; PopupMenu1 double-click pe subcomponent i scriem textul Salveaza; Memo1 modificm proprietatea PopupMenu n PopupMenu1, iar ScollBars=ssBoth;

    Forma aplicaiei va arta astfel :

    Pentru cutare vom scrie n antetul fiierului Unit1.cpp funcia: void ListFiles(AnsiString path, TStrings* List){ TSearchRec sr; AnsiString nume=Form1->Edit1->Text; if(FindFirst(path+"*.*", faAnyFile, sr) == 0){ do{if (sr.Attr & faDirectory){ if(sr.Name!=".") if (sr.Name!=".."){ ListFiles(path+sr.Name+"\\",List); } }else{AnsiString adresa=sr.Name; if( AnsiPos(nume,adresa)>0) List->Add(path+sr.Name); }}while (FindNext(sr) == 0); FindClose(sr);}} Prelucrm evenimentul FileListBox1DblClick AnsiString str=FileListBox1->Directory+"\\"; str=str+FileListBox1->Items->Strings[FileListBox1->ItemIndex]; ShellExecute( Sender,"open",str.c_str(),NULL,NULL,1);

    Prelucrm evenimentul Button1Click

    AnsiString disc=AnsiString(DriveComboBox1->Drive); ListFiles(disc+":\\",Memo1->Lines);

    Prelucrm evenimentul Salveaza1Click Memo1->Lines->SaveToFile("date.txt");

    Problema4 Depozit bancar Elaborai o aplicaie care va permite determinarea profitului n urma depunerii

    unei sume de bani. Banca ofer urmtoarele tipuri de depozite :

  • 39

    DEPOZITE N MDL Tipul

    depozitului Termenul de plasare

    Rata dobnzii anuala

    Retrageri din cont

    Flexibil

    3 luni 8%

    DA 6 luni 9% 12 luni 10% 24 luni 11% 36 luni 12%

    Rentier

    3 luni 9%

    NU 6 luni 10% 12 luni 11% 24 luni 12% 36 luni 13%

    DEPOZITE N USD I EUR

    Exclusiv

    3 luni 2%

    DA 6 luni 2,5% 12 luni 3% 24 luni 3,5% 36 luni 4%

    Major

    3 luni 3%

    NU 6 luni 3,5% 12 luni 4% 24 luni 4,5% 36 luni 5%

    Forma aplicaiei va arta astfel :

    Realizare:

    Pe suprafaa formei plasm componentele corespunztor: ComboBox1 pentru selectarea valutei, prin intermediul proprietii Items introducem valutele existente: MDL, USD, EUR; ComboBox2 pentru selectarea termenului de depozit, prin intermediul proprietii

  • 40

    Items introducem valorile: 3, 6, 12, 24, 36; ComboBox3 pentru selectarea numelui depozitului; Edit1 pentru indicarea sumei depuse; Button1 pentru determinarea dobnzii; 6 componente de tip TLabel corespunztor formei aplicaiei.

    Declaraii: AnsiString denumire; int termen; struct depozit{ AnsiString tip; double rata[5]; }dep[4];

    Elaborm funcia ce returneaz indocile de ordine al termenului de depozit: int k(int w){ int c; switch(w){ case 3: c=0;break; case 6: c=1;break; case 12: c=2;break; case 24: c=3;break; case 36: c=4;break;

    } return c;

    } Prelucrm evenimentul FormCreate

    dep[0].tip="Flexibil"; for(int i=0;iAdd("Flexibil"); ComboBox3->Items->Add("Rentier");} else {ComboBox3->Items->Add("Exclusiv"); ComboBox3->Items->Add("Major");}

    Prelucrm evenimentul Button1Click double suma, dobinda; suma=Edit1->Text.ToDouble(); for(int i=0;iCaption="Dobinda este in marime de: "+ FormatFloat("#.###",dobinda)+ '\n'+"Suma finala:="+FormatFloat("#.###",suma+dobinda);

  • 41

    Prelucrm evenimentul ComboBox3Change int n=ComboBox3->ItemIndex; if(n!=-1)denumire=ComboBox3->Items->Strings[n];

    Prelucrm evenimentul ComboBox2Change int n=ComboBox2->ItemIndex; if(n!=-1)termen=ComboBox2->Items->Strings[n].ToInt();

    Problema5 Ceas Mecanic [14, p.104-109] Elaborai o aplicaie prin intermediul creia va fi simulat un ceas mecanic.

    Forma aplicaiei va arta astfel:

    Realizare: Pe suprafaa formei plasm componenta Timer1:

    Declaraii: #include #pragma hdrstop #define R 100 #define rad 0.0174533//unghiul de rotire in radiani #include "Unit1.h" #include "DateUtils.hpp" #include "math.h" #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; int x0,y0,ahr,amin,asec;

    Prelucrm evenimentul FormCreate TDateTime t=Now(); ClientHeight=(R+30)*2; ClientWidth=(R+30)*2; Form1->Caption="Ceas mecanic"; x0=R+30;y0=R+30; ahr=90-HourOf(t)*30-(MinuteOf(Today())/12)*6; amin=90-MinuteOf(t)*6; asec=90-SecondOf(Today())*6; Timer1->Interval=1000; Timer1->Enabled=true;

    Elaborm funcia:

  • 42

    void vector(int x0,int y0, int a, int l){ int x,y; Form1->Canvas->MoveTo(x0,y0); x=x0+l*cos(a*rad); y=y0-l*sin(a*rad); Form1->Canvas->LineTo(x,y);

    } Elaborm funcia:

    void desen(){ TDateTime t; Form1->Canvas->Pen->Color=clBtnFace; Form1->Canvas->Pen->Width=3; vector(x0,y0,ahr,R-20); vector(x0,y0,amin,R-15); vector(x0,y0,asec,R-7); t=Now(); ahr=90-HourOf(t)*30-(MinuteOf(t)%12)*6; amin=90-MinuteOf(t)*6; asec=90-SecondOf(t)*6; Form1->Canvas->Pen->Width=3; Form1->Canvas->Pen->Color=clGreen; vector(x0,y0,ahr,R-20); Form1->Canvas->Pen->Width=2; Form1->Canvas->Pen->Color=clBlack; vector(x0,y0,amin,R-15); Form1->Canvas->Pen->Width=1; Form1->Canvas->Pen->Color=clRed; vector(x0,y0,asec,R-7);

    } Prelucrm evenimentul FormPaint

    int x,y,a=0,h=3,pw; TBrushStyle bs; TColor pc; bs=Canvas->Brush->Style; pc=Canvas->Pen->Color; pw=Canvas->Pen->Width; Canvas->Brush->Style=bsClear; Canvas->Pen->Width=1; Canvas->Pen->Color=clBlack; while(aMoveTo(x,y); if((a%30)==0){ Canvas->Ellipse(x-2,y-2,x+3,y+3); x=x0+(R+15)*cos(a*rad); y=x0-(R+15)*sin(a*rad); Canvas->TextOutA(x-5,y-7,IntToStr(h)); h--; if(h==0)h=12;

    } else Canvas->Ellipse(x-1,y-1,x+1,y+1); a=a+6;

  • 43

    } Canvas->Brush->Style=bs; Canvas->Pen->Color=pc; Canvas->Pen->Width=pw; desen();

    Prelucrm evenimentul Timer1Timer desen();

    Problema6 Calculator pentru numere complexe Elaborai o aplicaie prin intermediul creia se va efectua operaii cu numere

    complexe. Forma aplicaiei va arta astfel:

    Realizare:

    Pe suprafaa formei plasm corespunztor componentele: Edit1, Edit2 pentru scrierea numerelor complexe, vom seta proprietatea Text cu ir vid; Button1, Button2, Button3, Button4 butoane pentru efectuarea calculelor cu numere complexe, setm proprietatea Caption a fiecrui buton, n mod corespunztor: Suma, Diferenta, Produsul, Citul; Label1, Label2 conform figurii; Label3 pentru afiarea rezultatului, vom seta proprietatea Caption cu ir vid;

    Crem tipul de date complex: class complex{ public: double x,y;//complex=x+yi complex(){x=y=0.0;} complex(double a,double b){x=a;y=b;} complex(AnsiString s); friend complex operator+(complex,complex); friend complex operator-(complex,complex); friend complex operator*(complex,complex); friend complex operator/(complex,complex); complex operator=(complex b){x=b.x;y=b.y;return *this;} AnsiString ToStr(); friend complex ToComplex(AnsiString); };

  • 44

    complex::complex(AnsiString s){ AnsiString sx,sy,sc; int a=s.Pos("+"); if(a==0)a=s.Pos("-"); if(a==1){ sc=s.SubString(2,s.Length()-1); a=sc.Pos("-")+1; } sx=s.SubString(1,a-1); sy=s.SubString(a,s.Length()-a); x=sx.ToDouble(); y=sy.ToDouble(); } AnsiString complex::ToStr(){ AnsiString s=""; s=s+AnsiString(x); if(y>=0)s=s+"+"; s=s+AnsiString(y)+"i"; return s; } complex ToComplex(AnsiString s){ complex z(s); return z; } complex operator+(complex a,complex b){ complex c; c.x=a.x+b.x; c.y=a.y+b.y; return c; } complex operator-(complex a,complex b){ complex c; c.x=a.x-b.x; c.y=a.y-b.y; return c; } complex operator*(complex a,complex b){ complex c; c.x=a.x*b.x-a.y*b.y; c.y=a.x*b.y+a.y*b.x; return c; } complex operator/(complex a,complex b){ complex c; c.x=(a.x*b.x+a.y*b.y)/(b.x*b.x+b.y*b.y); c.y=(-a.x*b.y+a.y*b.x)/(b.x*b.x+b.y*b.y); return c; }

    Prelucrm evenimentul Button1Click complex a(Edit1->Text); complex b(Edit2->Text); complex c=a+b; AnsiString rez;

  • 45

    rez="("+a.ToStr()+")"+"+"+"("+b.ToStr()+")"+"="+c.ToStr(); Label3->Caption=rez;

    Prelucrm evenimentul Button2Click complex a(Edit1->Text); complex b(Edit2->Text); complex c=a-b; AnsiString rez; rez="("+a.ToStr()+")"+"-"+"("+b.ToStr()+")"+"="+c.ToStr(); Label3->Caption=rez;

    Prelucrm evenimentul Button3Click complex a(Edit1->Text); complex b(Edit2->Text); complex c=a*b; AnsiString rez; rez="("+a.ToStr()+")"+"*"+"("+b.ToStr()+")"+"="+c.ToStr(); Label3->Caption=rez;

    Prelucrm evenimentul Button4Click complex a(Edit1->Text); complex b(Edit2->Text); complex c=a/b; AnsiString rez; rez="("+a.ToStr()+")"+"/"+"("+b.ToStr()+")"+"="+c.ToStr(); Label3->Caption=rez;

    Problema7 Evidena personalului unei instituii Elaborai un program prin intermediul cruia se va efectua evidena

    personalului dintr-o instituie. n instituia dat sunt urmtoarele tipuri de personal : Angajat despre care se cunosc datele: nume, prenume, codul fiscal, numrul de ore lucrate, plata pentru o or. n calitate de metode vor fi: citirea datelor de la tastatur, afiarea datelor la ecran, determinarea salariului, conform formulei:

    salariu=ore_lucrate*plata_ora. Student despre care se cunosc datele: nume, prenume, codul fiscal, grupa, media. n calitate de metode vor fi: citirea datelor de la tastatur, afiarea datelor la ecran, determinarea bursei. Bursa studentului o vom determina astfel:

    5.9,5005.95.8,4005.85.7,300

    5.7,0

    mediadacleimediadacleimediadaclei

    mediadacleiBursa

    Student Angajat despre care se cunosc datele: nume, prenume, codul fiscal, grupa, media, numrul de ore lucrate, plata pentru o or. n calitate de metode vor fi: citirea datelor de la tastatur, afiarea datelor, determinarea bursei i a salariului. Metodele bursa i salariu vor efectua calculele

  • 46

    conform formulelor din clasele precedente. Asupra personalului vor fi efectuate operaii de adugare a unei persoane,

    excludere, afiare a tuturor persoanelor din instituie, ct i determinarea bugetului lunar al personalului instituiei.

    Realizare: Forma aplicaiei va arta astfel:

    Pe suprafaa formei plasm corespunztor componentele:

    GroupBox1, modificm proprietatea Caption n Indicati datele despre personal. Plasm n interiorul acesteia componentele: RadioGroup1 i efectum setrile: Caption=Indicai tipul Items adugm: Student, Angajat, Student Angajat Columns=3 8 componente de tip TEdit, modificnd proprietatea Name n mod corespunztor: nume, prenume, idnp, grupa, media, functia, ore, plata. Pentru fiecare component se va modifica proprietatea Text n ir vid. 8 componente de tip TLabel; Button1 pentru adugarea informaiei, setm proprietatea Caption=Adauga; Pe suprafaa mai plasm componentele: Button2 pentru afiarea personalului, setm proprietatea Caption=Afisare personal; Button3 pentru afiarea sumei ce necesit a fi achitat, setm proprietatea

  • 47

    Caption=Suma ce necesita a fi achitata; Button4 pentru a exclude din personal, setm proprietatea Caption=Excludeti; Memo1 pentru afiarea informaiei.

    Codul surs: class Persoana{ protected: AnsiString nume,prenume,idnp,tip; public: Persoana(){tip="Persoana";} virtual AnsiString afisare(); AnsiString cod(){return idnp;} virtual void citire(); virtual double salariu(){return 0;} virtual double bursa(){return 0;}

    }; class Angajat:virtual public Persoana{ protected: AnsiString functia; int ore; double pl_ora; public: Angajat(){tip="Angajat";} void citire(); AnsiString afisare(); double salariu();

    }; class Student:virtual public Persoana{ protected: AnsiString grupa; double media; public: Student(){tip="Student";} void citire(); AnsiString afisare(); double bursa();

    }; class Stud_Ang:public Student,public Angajat{ public: Stud_Ang(){tip="Student angajat";} void citire(); AnsiString afisare();

    }; void Persoana::citire(){ nume=Form1->nume->Text;prenume=Form1->prenume->Text; idnp=Form1->idnp->Text;}

    AnsiString Persoana::afisare(){ AnsiString s=tip+" "+nume+" "+prenume+" "+idnp+" "; return s;}

    void Angajat::citire(){ Persoana::citire(); functia=Form1->functia->Text; ore=Form1->ore->Text.ToInt();

  • 48

    pl_ora=Form1->plata->Text.ToDouble();} AnsiString Angajat::afisare(){ AnsiString s=Persoana::afisare(); s=s+functia+" "+FormatFloat("0.00",salariu()); return s;}

    double Angajat::salariu(){return ore*pl_ora;} void Student::citire(){ Persoana::citire(); grupa=Form1->grupa->Text; media=Form1->media->Text.ToDouble();}

    AnsiString Student::afisare(){ AnsiString s=Persoana::afisare(); s=s+grupa+" "+FormatFloat("0.00",bursa()); return s;}

    double Student::bursa(){ if(mediamedia->Text.ToDouble(); functia=Form1->functia->Text; ore=Form1->ore->Text.ToInt(); pl_ora=Form1->plata->Text.ToDouble();}

    AnsiString Stud_Ang::afisare(){ AnsiString s=Persoana::afisare(); s=s+grupa+" "+functia+" "+FormatFloat("0.00",bursa()+salariu()); return s;}

    class celula{ public: Persoana *p; celula *next; celula(){next=NULL;} void cit(int); AnsiString afis(){return p->afisare();} double consum();

    }; double celula::consum(){return p->bursa()+p->salariu();} void celula::cit(int i){ switch(i){ case 0 : p=new Student;break; case 1 : p=new Angajat;break; case 2 : p=new Stud_Ang;break;

    }p->citire();} class lista{ celula *prim; public: lista(){prim=NULL;} void afisare(); void inserare(int); void exclude(AnsiString); double bani();

  • 49

    ~lista(); }; void lista::afisare(){ Form1->Memo1->Clear(); if(prim==NULL) Form1->Memo1->Lines->Add("Lista este vida"); else{ Form1->Memo1->Lines->Add("Lista Personalului"); celula *p;p=prim; while(p!=NULL){ Form1->Memo1->Lines->Add(p->afis());p=p->next;

    }}} void lista::inserare(int i){ celula *q;q=new celula; q->cit(i);q->next=prim;prim=q;}

    void lista::exclude(AnsiString c){ celula *w,*q;w=prim; if(w->p->cod()==c){prim=w->next;delete w;} else{while(w->next->p->cod()!=c && w!=NULL)w=w->next; if(w!=NULL){q=w->next;w->next=q->next;delete q;}}}

    lista::~lista(){ celula *p,*q; if(prim!=NULL) do{p=prim;prim=prim->next;delete p;}while(prim!=NULL);}

    double lista::bani(){double d=0;celula *p;p=prim; while(p!=NULL){d=d+p->consum();p=p->next;} return d;}

    Declaraii: lista p;

    Prelucrm evenimentul Button1Click p.inserare(RadioGroup1->ItemIndex); Button2Click(Sender); RadioGroup1->ItemIndex=-1; nume->Clear();prenume->Clear(); idnp->Clear();grupa->Clear(); media->Clear();functia->Clear(); ore->Clear();plata->Clear();

    Prelucrm evenimentul RadioGroup1Click switch(RadioGroup1->ItemIndex){ case 0: Button1->Caption="Adauga student";break; case 1: Button1->Caption="Adauga angajat";break; case 2: Button1->Caption="Adauga student angajat";break;

    } Prelucrm evenimentul Button2Click

    p.afisare(); Prelucrm evenimentul Button3Click

    ShowMessage("Suma ce necesita a fi achitata este "+ FormatFloat("0.00",p.bani()));

    Prelucrm evenimentul Button4Click AnsiString s=InputBox("Excludere","Indicati codul fiscal al persoanei ce urmeaza a fi exclusa",""); p.exclude(s);Button2Click(Sender);

  • 50

    Probleme pentru rezolvare independent

    1. Forme (ferestre). 1. Elaborai o aplicaie prin intermediul creia va fi afiat o fereastr cu urmtoarele setri: dimensiunile 400400, culoarea albastr, poziia centru sus, titlu numele i prenumele studentului, utilizatorului i se va interzice redimensionarea formei. 2. Elaborai o aplicaie care la efectuarea unui click pe suprafaa formei va modifica, n mod aleator, culoarea formei (minim 5 culori). Indicaie : pentru generarea culorilor va fi utilizat funcia random. 3. Elaborai o aplicaie care la efectuarea unui click va exclude bara de titlu a formei, iar la efectuarea double-click va afia bara de titlu a formei cu titlul respectiv SALUT. 4. Elaborai o aplicaie care va modifica titlul formei n dependen de evenimentul care a avut loc. De exemplu, la efectuarea double-click pe suprafaa formei titlul va fi A fost efectuat double-click. 5. Elaborai o aplicaie care la efectuarea unui double-click va modifica consecutiv valoarea proprietii BorderStyle. 6. Elaborai o aplicaie care: a) la apsarea tastei x va nchide aplicaia; b) la apsarea tastei L va mri lungimea ferestrei cu 10%; c) la apsarea tastei l va micora lungimea ferestrei cu 10%; d) la apsarea tastei H va mri nlimea ferestrei cu 10%; e) la apsarea tastei h va micora nlimea ferestrei cu 10%; f) la apsarea tastei c va poziiona fereastra la centru; g) la apsarea tastei + va mri dimensiunea ferestrei cu 10%; h) la apsarea tastei - va micora dimensiunea ferestrei cu 10%. 7. Elaborai o aplicaie care : a) la apsarea tastei va deplasa fereastra n sus; b) la apsarea tastei va deplasa fereastra n jos; c) la apsarea tastei va deplasa fereastra n dreapta; d) la apsarea tastei va deplasa fereastra n stnga.

  • 51

    8. Elaborai o aplicaie care va afia iniial forma la centrul suprafeei de lucru. La apsare tastelor , forma se va deplasa pe diagonala principal a suprafeei de lucru. Apsarea caracterului s va poziiona forma n centru, iar la apsarea tastelor , forma se va deplasa pe diagonala secundar. Apsarea caracterului p va poziiona forma n centru, iar forma se va deplasa pe diagonala principal la apsarea tastelor ,. 9. Elaborai o aplicaie care va afia forma pe centru suprafeei de lucru cu dimensiunile 300300. Se va interzice modificare dimensiunilor formei. La efectuarea unui click pe suprafaa formei aceasta se va deplasa consecutiv: stnga sus, dreapta sus, dreapta jos, stnga jos, centrul. 10. Elaborai o aplicaie care va permite redimensionarea formei de la tastatur. Pentru a redimensiona nlimea utilizatorul va tasta caracterul h, apoi o cifr c din intervalul [1,8], iar n dependen de cifra tastat nlimea formei va fi 100*c. Pentru modificarea limii se va proceda n mod similar prin tastarea caracterului w.

    2. Componenta Button. 1. Creai aplicaia SHOW/HIDE. Pe suprafaa formei cu titlul SHOW/HIDE sunt plasate 3 butoane, cu titlurile respective: show, hide, show/hide. La efectuarea unui click pe unul din primele 2 butoane butonul show/hide va fi ascuns sau afiat, n dependen de butonul apsat. 2. Creai aplicaia MOUSE. Pe suprafaa formei cu titlul MOUSE sunt plasate 3 butoane, cu titlurile respective: crCros, crHelp, crNoDrop. La efectuarea unui click pe unul dintre butoane, pe suprafaa formei mausul va lua forma cu proprietatea corespunztoare titlului butonului. 3. Creai aplicaia DEPLASARE. Pe suprafaa formei cu titlul DEPLASARE vor fi plasate 4 butoane, cu titlurile respective: sus, jos, dreapta, stnga. Efectuarea unui click pe unul din butoane va deplasa forma cu 20% fa de poziia precedent a formei. 4. Creai aplicaia MARESTE. Pe suprafaa formei cu titlul MARESTE va fi plasat un singur buton cu titlul +, butonul va fi poziionat n mijlocul formei. Efectuarea unui click pe suprafaa butonului va mri dimensiunea acestuia cu 15%, dac dimensiunea butonului depete dimensiunea formei, atunci forma se nchide.

  • 52

    5. Creai aplicaia OPERATII. Pe suprafaa formei cu titlul OPERATII vor fi plasate 2 butoane. Primul buton va fi implicit (proprietatea Default setat la true) efectuarea unui click pe suprafaa acestuia sau apsarea tastei Enter va modifica titlul acestuia n AM TASTAT ENTER, butonul doi cu titlul ESC, buton de anulare a formei (proprietatea Cancel setat la true), efectuarea unui click pe suprafaa acestuia sau tastarea tastei ESC va nchide forma. 6. Creai aplicaia INCREMENTARE/DECREMENTARE. Pe suprafaa formei cu titlul 0 se plaseaz dou butoane cu titlurile respectiv incrementare/decrementare. Efectuarea unui click pe unul dintre butoane va modifica titlul formei incrementnd o unitate, respectiv decrementnd o unitate. 7. Creai aplicaia DEPLASARE. Pe suprafaa formei cu titlul DEPLASARE se plaseaz un buton fr titlu. La tastarea tastelor , , , se va deplasa butonul, n dependen de tasta apsat, cu 15% fa de poziia precedent. Dac butonul iese de pe suprafaa formei, atunci el revine n partea opus. 8. Creai aplicaia CULOARE. Pe suprafaa formei cu titlul CULOARE vor fi plasate 5 butoane cu titlurile respectiv: rosu, verde, galben, negru, alb. Efectuarea unui click pe unul din butoane va modifica coloare formei corespunztor butonului apsat. 9. Creai aplicaia POZITIE. Pe suprafaa formei cu titlul POZITIE vor fi plasate 6 butoane cu titlurile respectiv: stnga sus, dreapta sus, dreapta jos, stnga jos, centru, deplasare. La efectuarea unui click pe unul din primele 5 butoane, butonul cu titlul deplasare, se va deplasa n concordan cu titlul butonului apsat. 10. Creai aplicaia SCARA. Pe suprafaa formei cu titlul SCARA se plaseaz 5 butoane. La efectuarea unui click pe suprafaa formei butoanele vor avea dimensiunile 30*80, titlurile corespunztor 1, 2, 3, 4, 5 i vor fi aranjate n form de scar (de la 1 la 5).

    3. Componenta Edit 1. Creai aplicaia TITLUL FORMEI. Pe suprafaa formei sunt plasate componentele Buton (cu titlul Scrie) i Edit. La efectuarea unui click pe suprafaa butonului titlul ferestrei va corespunde cu textul din cutia Edit.

  • 53

    2. Creai aplicaia COPY_PASTE. Pe suprafaa formei sunt plasate dou butoane i dou cutii de editare. La efectuarea unui click pe primul buton se va copia textul din prima cutie n cutia a doua, iar la efectuarea unui click pe butonul doi se va copia textul din a doua cutie n prima. Modificai titlul butoanelor n conformitate cu operaiile care se efectueaz. La elaborarea acestei aplicaii se vor utiliza metodele caracteristice pentru prelucrarea textului din cutie (CopyToClipboard, PasteFromClipboard). 3. Creai aplicaia SCRIE. Pe suprafaa formei sunt plasate dou butoane cu titlurile Scrie i Interzice. Dup efectuare unui click pe butonul Scrie utilizatorul va avea posibilitatea de a edita text n cutie. Efectuarea unui click pe butonul Interzice nu va permite utilizatorului editarea textului n cutie. 4. Creai aplicaia CARACTER. Pe suprafaa formei sunt plasate trei cutii de editare. n fiecare dintre cutii la ntlnirea caracterului a, acesta va fi exclus, dublat, respectiv triplat. 5. Creai aplicaia EDITARE. Pe suprafaa formei sunt dou cutii de editare. n prima cutie se va permite numai editarea cifrelor, n cutia a doua numai caractere ale alfabetului latin.

    6. Creai aplicaia TRANSFORMA. Pe suprafaa formei cu titlul TRANSFORMA se plaseaz 3 butoane cu titlurile respectiv: minuscule, majuscule, normal i o component Edit. n cutia de editare utilizatorul va culege un text. La efectuarea unui click pe butonul majuscule, textul din cutie va transformat n majuscule, similar minuscule, iar la efectuarea unui click pe butonul normal, textul va reveni la forma iniial. 7. Creai aplicaia LOGARE. Pe suprafaa formei cu titlul LOGARE se plaseaz 3 componente Edit i un buton implicit cu titlul Validare. n prima component se va scrie numele utilizatorului, n a doua component parola (textul pentru parol va fi nlocuit cu caracterul *). La efectuarea unui click pe butonul Validare, a treia cutie de editare va conine un mesaj care va specifica succesul sau insuccesul logrii. n cazul n care logarea a fost cu succes, numele utilizatorului va fi scris n titlul ferestrei. 8. Creai aplicaia VOCALE. Pe suprafaa formei este plasat componenta Edit1. La introducerea textului n cutie, titlul formei va indica numrul de apariii ale vocalelor n cutie.

  • 54

    9. Creai aplicaia COLOANE. Pe suprafaa formei cu titlul COLOANE se plaseaz 4 componente Edit i 4 componente Buton. La efectuarea unui click pe suprafaa formei componentele Buton vor fi aranjate ntr-o coloan, iar componentele Edit ntr-o alt coloan. 10. Creai aplicaia OnKeyPress. Pe suprafaa formei este plasat o component Edit. De prelucrat evenimentul OnKeyPress al componentei astfel nct: a) la tastarea caracterului q tot textul din cutie se va dubla; b) la tastarea caracterului w tot textul din cutie se va tripla; c) la tastarea caracterului e textul din cutie va fi exclus; d) la tastarea caracterului r titlul formei va fi identic cu textul din cutie.

    4. iruri de caractere i componenta Label

    1. Creai aplicaia Sir_1. Pe suprafaa formei cu titlul Sir_1 se plaseaz 2 componente Edit, un buton cu titlul Caut i o component Label. n prima component Edit se va scrie o fraz, n a doua un cuvnt (silab, caracter). La efectuarea unui click pe butonul Caut, n componenta Label se va afia poziia iniial n ir a cuvntului cutat. n cazul n care cuvntul nu se include n fraz, va fi afiat un mesaj corespunztor.

    2. Creai aplicaia Sir_2. Pe suprafaa formei cu titlul Sir_2 se plaseaz 2 componente Edit, un buton cu titlul Exclude i o component Label. n prima component Edit se va scrie o fraz, n a doua un cuvnt (silab, caracter). La efectuarea unui click pe butonul Exclude, cuvntul din fraza editat va fi exclus din fraz, rezultatul va fi afiat prin intermediul componentei Label.

    3. Creai aplicaia Sir_3. Pe suprafaa formei cu titlul Sir_3 se plaseaz 2

    componente Edit, un buton cu titlul Numara i o component Label. n prima component Edit se va scrie o fraz, n a doua un cuvnt (silab, caracter). La efectuarea unui click pe butonul Numara, n componenta Label se va scrie numrul de apariii a cuvntului n fraz.

    4. Creai aplicaia Replace. Pe suprafaa formei cu titlul Replace se plaseaz

    3 componente Edit, un buton cu titlul Replace i o component Label. n prima component Edit se va scrie o fraz, n a doua un cuvnt (silab, caracter) care urmeaz a fi nlocuit, n a treia componenta se va scrie textul cu care urmeaz a fi nlocuit. La efectuarea unui click pe butonul Replace, va avea loc nlocuirea textului. Rezultatul va fi scris n componenta Label.

  • 55

    5. Creai aplicaia Palindrom. ntr-o cutie de editare se intoduce un cuvnt. La efectuarea unui click pe butonul Verifica se va afia prin intermediul unei componente Label, dac cuvntul introdus este palindrom. 6. Creai aplicaia Cifre. Pe suprafaa formei cu titlul Cifre se va plasa o component Edit, care va permite numai editarea cifrelor. La efectuarea unui click pe butonul Numara, n componenta label va fi afiat cifra care apare de cele mai multe ori, de cele mai puine ori, ct i numrul de repetri ale fiecrei cifre. 7. Creai aplicaia Inversul. Pe forma cu titlul Inversul sunt plasate componentele Edit, Buton cu titlul Modifica i o component Label. n cutia de editare se vor scrie mai multe cuvinte. La efectuarea unui click pe butonul Modifica, fiecare cuvint va fi nlocuit cu inversul su (de la sfrit la nceput). irul modificat va fi afiat n componenta Label. 8. Creai aplicaia Cuvnt maxim. Pe suprafaa formei cu titlul Cuvnt maxim sunt plasate componentele Edit, Buton cu titlul Determina i o component Label. n cutia de editare se vor scrie mai multe cuvinte. La efectuarea unui click pe butonul Determina, n componenta Label va fi scris cel mai mare cuvnt. 9. Creai aplicaia Litere. Pe suprafaa formei cu titlul Litere se va plasa o component Edit, n care se va scrie un ir de caractere. La efectuarea unui click pe butonul Exclude, n componenta label va fi afiat irul fr de cifre. 10. Creai aplicaia ASCII. Pe forma cu titlul ASCII sunt plasate componentele Edit, Buton cu titlul Arata i o component Label. n cutia de editare se vor scrie caractere. La efectuarea unui click pe butonul Arata n componenta Label vor fi scrise codurile ASCII ale caracterelor scrise n componenta Edit. 11. Creai aplicaia Calculator. Prin intermediul a trei cutii de editare utilizatorul introduce dou valori ntregi i un operator (+, -, *, /, %). La efectuarea unui click pe butonul Calcul se va afia prin intermediul unei componente Label rezultatul operaiei dintre cele dou valori i operatorul indicat. 12. Elaborai o aplicaie care va verifica dac greutatea i nlimea unui copil corespund vrstei. Vrsta copilului se va introduce prin intermediul unei componente Edit. Formule de calcul : greutate=2*v+8 (n kg), nlime=5*v+80 (n cm).

  • 56

    La efectuarea unui click pe butonul Determina se va indica n 2 componente Label greutatea i nlimea determinate dup formulele de mai sus. 13. Elaborai o aplicaie care s modeleze jocul Ghici numarul. Jocul const n faptul c este generat un numr aleator pe intervalul 0..9 de ctre calculator. Utilizatorul ntroduce o valoare de la 0 la 9 ntr-o cutie de editare, dup efectuarea unui click pe butonul GHICI, este afiat prin intermediul unei componente Label valoarea dat de calculator. n cazul n care utilizatorul a ghicit, va fi afiat un mesaj care va indica acest fapt. 14. Creai aplicaia Ecuaii, care va permite determinarea soluiilor urmtoarelor ecuaii :

    a) ax+b=0; b) 02 cbxax .

    Rezultatele vor fi afiate prin intermediul componentelor Label. 15. Creai aplicaia Sistem de ecuaii, care s determine soluiile unui sistem de ecuaii cu dou necunoscute. Rezultatele vor fi afiate prin intermediul componentelor Label. 16. Creai aplicaia Triunghi. Prin intermediul a 3 cutii de editare se introduc 3 valori numerice, care reprezint lungimile laturilor unui triunghi. La efectuarea unui click pe butonul Calcul se va determina:

    a) tipul triunghiului (ascuit, obtuz, dreptunghic), utiliznd teorema lui Pitagora;

    b) aria triunghiului (Formula lui Heron); c) perimetrul triunghiului.

    n cazul n care valorile introduse nu pot forma un triunghi, va fi afiat un mesaj, care va indica aceasta i nu se va efectua nici un calcul. Rezultatele vor fi afiate prin intermediul componentelor Label. 17. Creai aplicaia Divizor i Multiplu comun. Prin intermediul a dou componente Edit se citesc dou numere ntregi. La efectuarea unui click pe butonul Determina n componenta Label se va fia cel mai mare divizor comun, ct i cel mai mic multiplu comun. 18. Creai aplicaia Numere prime. Prin intermediul unei componente Edit se citete un numr ntreg. La efectuarea unui click pe butonul Determina ntr-o component Label vor fi afiate toate numerele prime mai mici sau egale cu numrul

  • 57

    citit. 19. Creai aplicaia Combinri. Prin intermediul a dou componente Edit se vor citi 2 numere ntregi n i r. ntr-o component Label se va afia valoarea: rnC , calculat conform formulei:

    )!!*(!

    rnrnC rn

    20. Creai aplicaia Numere prietene. Prin intermediul a dou componente Edit se citesc 2 numere ntregi. Dou numere se numesc prietene dac posed proprietatea: fiecare din ele este egal cu suma divizorilor inferiori celuilalt, de exemplu 220 i 284. Prin intermediul unei componente Label se va afia dac numerele sunt sau nu prietene. 21. Creai aplicaia Numar perfect. Prin intermediul unei componente Edit se citete un numr ntreg. Prin intermediul unei componente Label se va afia dac numrul este perfect, supraperfect sau imperfect. Numrul este perfect dac suma divizorilor inferiori acestuia este egala cu el nsui, dac suma este mai mic ca numrul atunci el este imperfect, dac suma este mai mare ca numrul dat atunci el se numete supraperfect.

    5. Aplicaii multiforme. 1. Elaborai o aplicaie multiform. Aplicaia va fi format din 3 forme. Pe suprafaa formei principale (forma 1) este plasat un buton cu titlul Forma Noua. La efectuarea unui click pe suprafaa acestuia, este ascuns forma principal i afiat o alt form similar formei principale, titlul acestei forme fiind Forma 1. Efectuarea unui click pe butonul Forma Noua ascunde forma i afieaz o alt forma cu titlul Forma 2, .d. nchiderea unei dintre forme va genera nchiderea aplicaiei. 2. Elaborai o aplicaie care la efectuarea unui click pe butonul cu titlul Intro, va afia o fereastr de dialog prin care i se va cere utilizatorului s-i scrie prenumele (de exemplu Ion). Dup efectuarea unui click pe butonul Ok, fereastra va fi nchis i va fi afiat o alta fereastr, cu un mesaj de salut (de exemplu Salut Ion). 3. Elaborai o aplicaie prin intermediul creia la efectuarea unui click pe butonul Afisare de pe suprafaa formei, vor fi afiate 8 ferestre de dialog aranjate pe diagonala principal a monitorului.

  • 58

    4. Creai aplicaia Tabla Inmultirii. Pe suprafaa formei cu titlul Tabla Inmultirii, este plasat butonul Verifica. Efectuarea unui click pe suprafaa acestuia, afieaz o fereastr de dialog. Aceast fereastr conine o ntrebare de genul x*y= ?, unde 1

  • 59

    interiorul acesteia este afiat un cod aleator format din 4 cifre), o component Edit (n cadrul acestei componente utilizatorul va scrie codul afiat n Label), un buton de comand. La efectuarea unui click pe butonul de comand se va verifica corectitudinea codului, dac codul este scris corect, atunci fereastra modal este nchis. La elaborarea aplicaiei vor fi excluse alte posibiliti de nchidere a ferestrei modale. 10. Elaborai o aplicaie care la lansare va afia o form, prin intermediul creia se va cere utilizatorului s introduc numele i parola. Validarea acestora se va efectua prin efectuare unui click pe butonul Validare sau apsnd tasta Enter. Dac numele i parola sunt corecte se va deschide o nou form, iar precedenta va fi ascuns. Scrierea greit a numelui sau a parolei de trei ori consecutiv va nchide forma proiectului.

    6. Aplicaii cu butoane 1. Creai aplicaia CONTOR. Pe suprafaa ferestrei principale sunt plasate componentele: Edit, un buton UpDown asociat componentei Edit, un grup de 4 butoane radio, cu titlurile respectiv uniti, zeci, sute, mii. La efectuarea unui click pe unul dintre butoanele radio valoarea din cutia de editare va fi incrementat sau decrementat corespunztor butonului radio. 2. Creai aplicaia GRUPURI. Pe suprafaa ferestrei principale sunt plasate dou grupuri de butoane radio, o cutie de editare i un buton de comand. Primul grup conine 3 opiuni (forma, cutia, ambele). Al doilea grup conine 6 opiuni (diferite culori). La efectuarea unui click pe butonul de comand pentru form i pentru cutia de editare vor fi efectuate modificrile setate corespunztor seleciei efectuate. De ex. dac n primul grup este bifat opiunea ambele, iar al n al doilea opiunea galben, atunci att forma ct i cutia vor avea culoarea galben. 3. Elaborai o aplicaie care s modeleze jocul Rspuns corect. Utilizatorului i se adreseaz un set de 5 ntrebri cu 4 variante de rspuns. Utilizatorul va bifa rspunsul, pe care l consider corect, dup care va efectua un click pe butonul cu titlul Raspuns. Efectuarea operaiei click va afia un mesaj prin care se va indica numrul de rspunsuri corecte. 4. Creai aplicaia POZIIE. Pe suprafaa ferestrei principale sunt plasate 3 grupuri de butoane radio:

  • 60

    a) Grupul Pozitie va conine urmtoarele opiuni: Centru, Stinga sus, Stinga jos, Dreapta sus, Dreapta jos.

    b) Grupul Culoare va conine o list cu 5 opiuni cu diferite culori. c) Grupul Dimensiune va conine urmtoarele opiuni: 200200, 200300,

    300200, 400500, 500400. Efectuarea unui click pe fiecare grup va afia forma cu setrile selectate.

    5. Creai aplicaia CONVERTOR. Aceast aplicaie va permite efectuarea

    urmtoarelor transformri: a) milimetri, centimetri, decimetri, kilometri, dac valoarea iniial se consider

    dat n metri; b) miligrame, kilograme, tone, centigrame, dac valoarea iniial se consider

    dat n grame; c) sptmni, zile, minute, secunde, dac valoarea iniial se consider dat n ore.

    La elaborarea aplicaiei vor fi utilizate componente RadioGroup (cte un grup pentru fiecare caz). Pentru fiecare caz va fi afiat rezultatul n componente Label. 6. Creai aplicaia Arie & Perimetru. Forma aplicaiei va arta astfel:

    La efectuarea unui click pe butonul Determina va fi afiat aria i perimetrul figurii corespunztoare. Modificarea lungimilor laturilor va modifica n mod corespunztor aria i perimetru figurilor. 7. Creai aplicaia Triunghi n baza aplicaiei Arie & Perimetru. 8. Creai aplicaia Test. Utilizatorului i se adreseaz o ntrebare i 8 variante de rspuns. Rspunsurile vor fi afiate prin intermediul unui grup de butoane radio. Prin intermediul unei componente Edit i al unui buton de tip TUpDown, utilizatorul va avea posibilitatea de a micora/mri numrul variantelor de rspuns pe segmentul [3;8]. La bifarea rspunsului va fi afiat un mesaj n care se va indica corectitudinea rspunsului.

  • 61

    9. Creai aplicaia Baza. Pe suprafaa formei sunt plasate 8 componente CheckBox, 8 componente Label, o cutie de editare. Prin intermediul cutiei de editare se va introduce un numr ntreg. Butoanele de tip TCheckBox vor avea titlurile: baza doi, baza trei,..., baza nou. La bifarea butoanelor numrul introdus va fi transformat corespunztor bazei selectate i afiat (doar dac este bifat) prin intermediul componentelor de tip TLabel. 10. Creai aplicaia Butoane Radio. Pe suprafaa formei cu titlul Butoane Radio este plasat o component RadioGroup i un buton de comand. La efectuarea unui click pe suprafaa butonului de comand n componenta RadioGroup vor fi adugate 10 butoane cu titlurile respectiv 0,1,...,9. Butoanele vor fi divizate n trei coloane. La selectarea butonului cu valoare maxim, n cutie va fi adugat nc un buton (urmtorul dup numrul maxim). Se va permite adugarea de noi butoane, doar dac valoarea butonului maxim nu depete 50. La selectarea butonului cu titlul 0, va fi exclus butonul cu valoarea maximal, excluderea se va efectua doar dac numrul de butoane depete valoare 3. La efectuarea unui click pe oricare alt buton din cutie, va fi afiat un mesaj care va conine titlul butonului selectat.

    7. Aplicaii cu meniuri

    1. Creai aplicaia Meniu. Se va crea un meniu principal cu urmtoarele opiuni: a) poziie cu opiunile: sus, jos, stnga, dreapta centru; b) dimensiuni cu opiunile: 200200, 200300, 300200, 400500,

    500400; c) culoare cu opiunile ase tipuri de culori. La efectuarea unui click pe una dintre opiunile meniului, structura formei va fi

    modificat n mod corespunztor.

    2. Pentru o form vor fi creat un meniu contextual cu urmtoarele opiuni: a) poziie cu opiunile: sus, jos, stnga, dreapta centru; b) dimensiuni cu opiunile: 200200, 200300, 300200, 400500,

    500400; c) culoare cu opiunile ase tipuri de culori. La efectuarea unui click pe una dintre opiunile meniului, structura formei va fi

    modificat n mod corespunztor. 3. Creai aplicaia Sir. Pe suprafaa formei cu titlul Sir se plaseaz o

    component Memo i se creeaz un meniu principal cu opiunile: a) Cauta va cuta un text;

  • 62

    b) Exclude va exclude un text; c) Inlocuieste va nlocui un text cu alt text.

    4. Creai aplicaia Caractere. Pe suprafaa formei cu titlul Caractere se plaseaz o component Memo i se creeaz un meniu contextual, ataat componentei Memo, cu opiunile:

    a) Vocale va determina numrul de vocale; b) Linia maxima va determina linia de lungime maxim; c) Linia minima va determina linia de lungime minim; d) Majuscule va transforma textul n majuscule; e) Minuscule va transforma textul n minuscule; f) Normal va afia textul cu formatarea sa iniial; g) Save va salva textul n fiierul date.txt.

    5. Creai aplicaia Numr. Prin intermediul unei componente de tip TEdit se citete un numr format din mai multe cifre (va fi permis numai editarea cifrelor). La efectuarea unui click pe butonul cu titlul Proprietati n componenta Memo se vor afia:

    a) numrul de cifre; b) prima cifr; c) ultima cifr; d) suma cifrelor; e) scrie numai cifrele pare; f) scrie numai cifrele impare; Pe suprafaa formei va mai fi plasat un buton cu titlul Save, acionarea cruia

    va permite salvarea informaiei n fiier.

    6. Creai aplicaia Numere. Prin intermediul a trei componente de tip TEdit se citesc 3 numere ntregi. La efectuarea unui click pe butonul cu titlul Numere n componenta Memo se va afia:

    a) divizorii primului numr i care nu sunt divizori pentru al doilea numr; b) cel mai mare divizor comun; c) cel mai mic multiplu comun.

    Pe suprafaa formei va mai fi plasat un buton cu titlul Save, acionarea cruia va permite salvarea informaiei n fiier. 7. Creai aplicaia Coduri ASCII. La elaborarea aplicaiei va fi utilizat componenta Memo i va fi creat un meniu contextual cu opiunile:

  • 63

    ASCII Caractere Deschide Deschide Transforma Transforma Salvare Salvare

    Efectuarea unui click pe opiunea Deschide va scrie caracterele din fiier (ascii.txt/caractere.txt) n componenta Memo; Efectuarea unui click pe opiunea Transforma va transforma textul n cod ASCII (va transforma codul n text) , apoi acesta va fi scris n componenta Memo; Efectuarea unui click pe opiunea Salvare va scrie caracterele din Memo n unul din fiierele (ascii.txt, dac textul a fost transformat n cod i respectiv caractere.txt); 8. Creai aplicaia Cifre. La elaborarea aplicaiei va fi utilizat componenta Memo i va fi crea