166
Bogdan Pătruţ (coordonator) Andreea Schmidt Anca Ioana Capră Mirela Vărnav Claudiu Căuneac Cătălin Ciocoiu Ionel Butucaru PROGRAMAREA CALCULATOARELOR ELECTRONICE. ÎNDRUMAR PENTRU LABORATOR EduSoft 2005

Pce Edusoft

Embed Size (px)

DESCRIPTION

pce

Citation preview

Page 1: Pce Edusoft

Bogdan Pătruţ (coordonator) Andreea Schmidt • Anca Ioana Capră • Mirela Vărnav Claudiu Căuneac • Cătălin Ciocoiu • Ionel Butucaru

PROGRAMAREA CALCULATOARELOR ELECTRONICE. ÎNDRUMAR PENTRU LABORATOR

EduSoft 2005

Page 2: Pce Edusoft

2

Redactor: Iulian Marius FURDU

Descrierea CIP a Bibliotecii Naţionale a României

Programarea calculatoarelor electronice : îndrumar pentru laborator / coord.: Bogdan Pătruţ ; Andreea Schmidt, Anca Ioana Capra, .... - Bacău : EduSoft, 2005 Bibliogr. ISBN 973-87496-1-1 I. Pătruţ, Bogdan (coord.) II. Schmidt, Andreea III. Capra, Anca Ioana 004.42

Copyright © 2005 Editura EduSoft Toate drepturile asupra prezentei ediţii sunt rezervate Editurii EduSoft. Reproducerea parţială sau integrală a conţinutului, prin orice mijloc, fără acordul scris al Editurii EduSoft este interzisă şi se va pedepsi conform legislaţiei în vigoare. Editura EduSoft 600065 Bacău, str. 9 Mai, nr. 82, sc. C, ap. 13 E-mail: [email protected], Web: www.edusoft.ro ISBN 973-87496-1-1

Page 3: Pce Edusoft

3

Bogdan Pătruţ (coordonator) Andreea Schmidt • Anca Ioana Capră • Mirela Vărnav Claudiu Căuneac • Cătălin Ciocoiu • Ionel Butucaru

PPRROOGGRRAAMMAARREEAA CCAALLCCUULLAATTOOAARREELLOORR

EELLEECCTTRROONNIICCEE

Îndrumar pentru laborator

- culegere de programe în Visual Basic -

EduSoft 2005

Page 4: Pce Edusoft

4

Bogdan Pătruţ Bogdan a absolvit Facultatea de Informatica din Universitatea "Al. I. Cuza" Iaşi în 1994. Este lector drd. la Universitatea din Bacau, Catedra de Matematică-Fizică-Informatică, unde ţine cursuri de Programarea calculatoarelor electronice, Sisteme expert de gestiune şi Sisteme informatice de asistare a deciziei la studenţii de la contabilitate şi informatică de gestiune. A publicat 11 cărţi (9 la Editura Teora), a publicat peste 25 articole ştiinţifice de specialitate şi este coautor al unei invenţii brevetate OSIM şi a unui contract de cercetare CNCSIS. Este pasionat de informatică, pictură şi familia sa. Adresa e-mail: [email protected]

Andreea Schmidt

Andreea a absolvit Colegiul National “Gh.Vranceanu”, profilul matematica-informatica, intensiv engleza. In prezent este studenta la Universitatea din Bacau,

specializarea Contabilitate si Informatica de Gestiune, anul II. Este pasionata de sport, literatura si nu in ultimul rand de informatica. Poate fi contactată la adresa

[email protected]

Anca Ioana Capra Dupa patru ani de matematica-informatica (intensiv engleza) la Colegiului National “Vasile Alecsandri”,. Anca s-a gandit sa-si ontinue studiile la specializarea Contabilitate si Informatica de Gestiune, fiind studenta la Universitatea din Bacau,. Este pasionata de informatica, muzica, animale, inot si calatorii. Poate fi contactată la adresa [email protected]

Mirela Elena Varnav

Mirela isi continua studiile incepute la Colegiului Economic “Ion Ghica”, profil finante-contabilitate. Acum este studenta la Universitatea din Bacau, specializarea

Contabilitate si Informatica de Gestiune anul II. Pasionata de muzica, dans, informatica si calatorii, adora sa faca plaja si sa manance in fata televizorului si a

calculatorului. Cand nu sta la TV, o puteti gasi prin e-mail la adresa [email protected]

Claudiu Dan Căuneac Absolvent al Colegiului Economic “Ion Ghica”, profil matematica-informatica. Acum este student al Universitatii Bacau, Facultatea de Stiinte Economice, sectia Contabilitate si Informatica de gestiune. Pentru informatii suplimentare il gasiti pe Claudiu la cursuri sau prin e-mail la adresa [email protected]

Ciocoiu Catalin

Catalin este absolvent al Colegiului Teoretic “Henri Coanda”, sectia matematica-informatica. In prezent este student la Universitatea Bacau, Facultatea de Stiinte

Economice, sectia Contabilitate si Informatica de Gestiune. Este pasionat de informatica si tot ce este nou in domeniul IT&C. Adresa de e-mail este:

[email protected]

Ionel Butucaru Iubeste viata, karate-ul, natura, stiintele exacte si jocurile PC. Ionel a terminat liceul “Dumitru Mangeron” la matematica-fizica. In prezent este student la Univesitatea din Bacau, la Contabilitate si Informatica de Gestiune. Un campion neintrecut la mancare, dar totusi reuseste sa se mentina in forma. Adresa sa de e-mail este: [email protected].

Page 5: Pce Edusoft

5

Cuprins Mărturisire 6 Introducere in Visual Basic prin exemple (Bogdan) 7 1. Programe simple cu butoane de comanda şi casete de text (Andreea, Cătălin) 35 2. Programe simple (Mirela, Ionuţ, Cătălin) 38 3. Programe cu liste, casete de validare, butoane de opţiune şi tabele (Anca, Andreea) 70 4. Programe diverse (Anca, Cătălin, Ionuţ) 117 5. Programe cu elemente avansate ale mediului Visual Basic (Claudiu) 136 6. O aplicaţie concretă, pas cu pas (Andreea) 152 Bibliografie 166

Page 6: Pce Edusoft

6

Mărturisire

Am început această carte ca pe o glumă. În stilul vorbelor pe care le arunc de multe ori la curs, ca să-i încurajez pe studenţii mei să lucreze (sau alteori ca să-i sperii puţin!), am spus la una dintre întâlnirile mele cu studenţii anului II Contabilitate şi Informatică de Gestiune, 2005: "Nu vreţi să mă ajutaţi să scriem o culegere de aplicaţii în Visual Basic? Cine mă ajută va lua 10 la examen.".

Nu (cred că) era prima dată când lansasem o asemenea invitaţie studenţilor mei, dar de fiecare dată se întâmpla la fel: nimeni nu era interesat, din diverse motive: fie că nu doreau pur şi simplu să ia 10, fie că nu doreau să muncească, fie că nu credeau că sunt ei în stare să realizeze aşa ceva (mai ales că de abia începusem să predau materia respectivă), fie că nu credeau că mă voi ţine de cuvânt, fie că nu le repetam sau nu le spuneam într-un mod convingător acest lucru. Nu ştiu dacă eu însumi credeam că pot face o carte împreună cu studenţii mei. Mărturisesc faptul că nu credeam că se poate aşa ceva în Universitatea Bacău. Dar iată că în anul II CIG din 2005 am avut surpriza să întâlnesc tineri ambiţioşi, conduşi de dorinţa de a lua 10 (nu ştiu), sau de pasiunea pentru ceea ce se întrezarea a fi programarea în Visual Basic (aş vrea să fie aşa). Cu ei am realizat această culegere de probleme. Ea va servi, în primul rând, colegilor lor, nu puţini la număr, care au picat examenul şi care au timp la dispoziţie o vară întreagă să o studieze. Ar putea fi considerat un gest frumos din partea celor mai buni, pentru cei mai puţini buni.

De fapt, această culegere e scrisă de ei. Eu nu am făcut decât sî o tehnoredactez, să mai corectez pe ici pe colo şi, fireşte, să coordonez acest colectiv tânăr. Aşa că, daţi-mi voie să mă numesc coordonator al cărţii (în fond asta ar trebui să fie un profesor, nu-i aşa?).

În rest, autorii au 19-20 ani şi sunt tineri ca şi voi, cândva "luptători" cu programarea în Visual Basic şi poartă nume obişnuite: Andreea, Anca, Mirela, Cătălin, Claudiu şi Ionel. Dar vă asigur că sunt nişte tineri care mi-au făcut o impresie bună neobişnuită!

Bogdan Pătruţ, martie 2005

Page 7: Pce Edusoft

7

Introducere in Visual Basic prin exemple (Bogdan)

1. Pornirea mediului de programare Visual Basic 5 Se poate face în mai multe moduri, de exemplu: 1. Dublu-click pe iconiţa corespunzătoare, dacă există o asemenea iconiţă pe Desktop-ul calculatorului ("masa de lucru") 2. Acţionând butonul Start din partea de stânga joc a ecranului, apoi opţiunea Programs, apoi alegând grupul Microsoft Visual Basic 5 şi, în final, Microsoft Visual Basic 5. La pornire veţi fi întâmpinat de un ecran precum cel din figura de mai jos şi, pentru a crea o aplicaţie executabilă standard, deocamdată veţi alege "Standard exe" şi veţi acţiona butonul Open.

După aceasta, Visual Basic va arăta ca în figura următoare, în care am pus în evidenţă principalele elemente care ne interesează pentru dezvoltarea unor aplicaţii simple.

Page 8: Pce Edusoft

8

Aşadar, urmăreşte cu atenţie cele 6 zone din mediul VB5, fiecare având importanţa ei şi mai târziu vei înţelege mai bine la ce ajută fiecare. Deocamdată îţi spun că un program (aplicaţie sau proiect) VB este compus din una sau mai multe forme. Acestea sunt ferestre ca cele din Windows, aşa cum arată şi forma ta Form1, din centrul ecranului (vezi zona 4). Deocamdată vom realiza împreună programe ce vor folosi doar o singură formă, dar dacă te vei descurca bine vom trece şi la programe cu mai multe forme. Structura proiectului tău se prezintă în zona 5. Pe forme pot fi amplasate diferite obiecte, precum butoane de comandă, casete de text, liste derulante sau tot felul de alte elemente de interfaţă pe care le-ai întâlnit în mai toate aplicaţiile din Windows (vezi zona 6). Vom numi aceste obiecte controale. Ele, ca şi forma, dealtfel, pot fi personalizate, stabilind diferite valori pentru proprietăţile lor, precum culoare, font, poziţie (vezi zona 7). Pentru ca ele să acţioneze în sensul dorit de tine, va trebui să le ataşăm anumite proceduri sau subrutine, adică mici bucăţi de cod, adică de program, scrise în Visual Basic. Dacă vrei să faci trecerea de la vizualizarea interfeţei la vizualizarea codului şi înapoi, va trebui să apeşi pe butoanele din zona 3. Aplicaţia ta este deja funcţională, dacă o vei porni:vei avea o fereastră simplă, forma Form1, pe care o poţi muta, redimensiona şi închide, ca orice fereastră din Windows. Deocamdată eşti în faza de proiectare (design), iar de acest lucru îţi poţi da seama în mai multe feluri. În zona 1 apare scris, printre altele, cuvântul "design". Pe de altă parte, Form1 are o serie de puncte pe ea, care nu sunt altceva decât punctele fixe ale unei grile, care te poate ajuta la amplasarea mai exactă a controalelor pe formă. În plus, în zona 2, butonul Start (ce seamănă cu butonul Play de la orice casetofon) este activ, pe când celelalte două nu. Dacă vrei să porneşti aplicaţia, trebuie să acţionezi pe butonul Start sau pe tasta F5. Cuvântul "design" din zona 1 va fi înlocuit de cuvântul "run" (deci aplicaţia rulează), grila de pe Form1 va dispărea, iar butonul Start va deveni inactiv, dar se vor activa celelalte două butoane (ne interesează

2. Butoanele de pornire şi

1. Remarcaţi că sunteţi în faza de

5 Structura proiectului tău4 Forma = programul tău

3 View Code şi View

6. Controalele ce vor fi amplasate pe forma ta şi vor fi programate de tine

7. Tabelul cu proprietăţţile formei sau ale controalelor de pe ea

Page 9: Pce Edusoft

9

butonul End). Abia acum poţi muta sau redimensiona fereastra ta, iar dacă vrei să opreşti programul, vei apăsa pe butonul End din zona 2 sau pe X-ul din colţul dreapta-sus al ferestrei Form1. 2. Primul tău program Ca să realizezi primul tău program în VB care să arate puţin altfel, să fie personalizat, şi să mai şi facă ceva, trebuie să priveşti cu atenţie tabelul de proprietăţi din dreapta. Acolo sunt trecute proprietăţile obiectului curent selectat, în cazul nostru Form1. În stânga tabelului sunt trecute proprietăţile, în ordine alfabetică, iar în dreapta valorile lor. De exemplu, proprietatea BackColor desemnează culoarea de fundal a formei, care are valoarea ButtonFace (în general gri) şi o poţi modifica, de exemplu, în albastru, ales din paleta de culori. O altă proprietate este Caption, care reprezintă textul scris în antetul formei. Scrie acolo, în loc de "Form1", textul "Primul meu program". Ai grijă să nu confunzi proprietatea Caption cu proprietatea (Name), care apare prima în tabelul de proprietăţi şi desemnează chiar numele formei tale (Form1). Schimbă şi proprietatea BorderStyle la valoarea 1-Fixed Single, pentru ca fereastra ta să nu mai poată fi redimensionată în timpul rulării programului tău. Dacă mai amplasezi pe formă, prin drag and drop, un buton de comandă, după ce l-ai ales din bara de instrumente din zona 6, el va apărea atât cu numele Command1, dar şi cu proprietatea Caption având valoarea tot Command1. Schimb-o în "Salut". Ai grijă ca nu cumva să schimbi proprietatea Caption de la Form1! Pentru a schimba valoarea unei anumite proprietăţi a unui anumit obiect, trebuie ca mai înainte să selectezi acel obiect, de exemplu printr-un simplu Click pe el. Porneşte acum programul tău şi, deşi dacă apeşi pe butonul Command1 (pe care stă scris cuvântul "Salut") nu se întămplă nimic, oricum arată mai bine!

Hai să facem ca atunci când apeşi pe butonul acesta să apară un mesaj, cu textul "Bună ziua!". Ei bine, ca să determinăm calculatorul/programul să se comporte aşa, va trebui să ştii că atunci când acţionezi într-un fel sau altul (de exemplu prin click de mouse) pe un control sau pe o formă, VB înţelege că ai produs un anumit eveniment. Un asemenea eveniment se numeşte Click şi se produce atunci când tu apeşi simplu cu mouse-ul pe butonul Command1. Pentru a-l face pe calculator să reacţioneze la Click-ul utilizatorului pe butonul Command1, va trebui să scriem o subrutină, numită chiar Command1_Click. Aceasta va fi o bucată de cod în VB ce va conţine o secvenţă de instrucţiuni, prin care se precizează ce anume trebuie să execute calculatorul/programul, de fiecare dată când se execută Click pe butonul Command1. Subrutina va începe cu Private Sub urmată de numele ei (Command1_Click) şi se va încheia cu End Sub.

Page 10: Pce Edusoft

10

Pentru a o scrie, trebuie ca programul tău să fie oprit. Apoi vei alege din zona 2 primul buton (View Code) şi vei face click pe el. Deasupra paginii albe care va apărea stau două liste (în prima scrie (general), iar în a doua (declarations)). Alege din prima controlul cu pricina, adică butonul de comandă Command1, iar în a doua va apărea automat cel mai frecvent eveniment asupra unui buton de comandă, adică evenimentul Click (dacă vei derula lista, vei observa că sunt mult mai multe evenimente acolo, dar pe tine deocamdată doar Click te interesează). După aceea scrie acest text, ca în figura de mai jos, apasă pe View Object (în zona 2) şi vei vedea că butonul reacţionează la apăsarea ta.

La apăsarea butonului, vei obţine următoarea casetă de mesaj (denumirea procedurii MsgBox tocmai de acolo vine), în care vbInformation este o constantă numerică ce simbolizează semnul de informaţie din casetă. Opreşte programul şi încearcă şi vbExclamation sau vbCritical pentru a vedea efectul.

Dacă eşti în faza de proiectare şi vrei să ajungi mai repede la codul asociat unui anumit obiect, poţi să faci dublu-click pe respectivul obiect; de exemplu, dacă ai dat View Object şi execuţi dublu-click pe butonul Command1, vei ajunge la subrutina Command1_Click, fără să mai acţionezi tu pe View Code (în zona 2).

Page 11: Pce Edusoft

11

3. Un salut special pentru tine! Vom încerca să complicăm puţin exemplul anterior, astfel încât VB să te salute special pe tine sau pe cineva, al cărui nume să fie scris într-o casetă de text. Hai să amplasăm, aşadar, sub butonul nostru o casetă de text. Priveşte zona 6 şi alege de acolo simbolul care conţine un "ab" (TextBox). Desenează caseta de text sub butonul Command1 şi apoi denumeşte această casetă Persoana, modificând proprietatea (Name) (prima din lista lui Text1). Şterge apoi conţinutul din interiorul casetei de text, care era trecut cu valoarea Text1 la proprietatea Text a acestei casete de text.

E momentul să ştii că dacă ai un obiect (formă sau control) care se numeşte X şi el are o proprietatea P, pentru a face referinţă la valoarea proprietăţii P a obiectului X va trebui să notezi acest lucru, în programul tău, prin X.P. Astfel, proprietatea Caption a butonului Command1 (care are valoarea Salut) se notează prin Command1.Caption, iar proprietatea Text a casetei de text Persoana prin Persoana.Text. Textul din interiorul casetei de text Persoana va trebui "adăugat" sau, mai bine zis, alipit (concatenat) salutului nostru, din subrutina Command1_Click. Aşadar, pentru ca să primim un salut pentru persoana al cărei nume va fi scris în caseta Persoana (în timpul funcţionării programului), va trebui să modificăm subrutina Command1_Click astfel: Private Sub Command1_Click() MsgBox "Buna ziua "+Persoana.Text+"!", vbInformation, "Salutare" End Sub Ce se va obţine? Dacă porneşti programul şi scrii în caseta de text Diana, vei obţine, la apăsarea butonului Command1 un salut special pentru Diana:

Această casetă de text se numea Text1, acum se

Page 12: Pce Edusoft

12

Aşadar, simbolul matematic + înseamnă, când este vorba despre texte, concatenare, adică alipirea unor texte. Probabil ai observat deja că textele (şirurile de caractere) constante (precum "Bună ziua" sau "Salutare") se scriu între ghilimele (şi nu apostrofuri, ca de exemplu în limbajul Pascal). Dacă nu vei introduce nimic în caseta de text, atunci nu te aştepta decât la un salut ca cel de mai înainte. Astfel, Persoana.Text va fi considerat şirul vid (fără nimic în el) şi va avea valoarea notată prin "". 4. Un calculator cu operaţii aritmetice Renunţă la proiectul vechi şi începe unul nou. Dacă vrei să renunţi, apeşi în meniu File->Remove project şi ţi se va cere să-l salvezi. Va trebui să dai un nume atât pentru fişierul ce cuprinde forma ta (interfaţa şi codul ei) Form1, căt şi un nume pentru proiectul în ansamblul său. Primul fişier va avea extensia FRM, iar al doilea VBP. Dacă mai tărziu vei realiza un fişier ce va conţine m forme şi n module (cod fără interfeţe), când va trebui să salvezi, vei da nume la m+n+1 fişiere, ultimul fiind însuşi proiectul, adică un fişier în care se păstrează informaţii despre structura aplicaţiei tale. De data aceasta, te rog să amplasezi pe forma ta trei casete de text (fără text în ele), fie ele Operand1, Operand2 şi Rezultat (denumeşte-le aşa modificând proprietăţile Name de la fiecare), precum şi patru butoane, pe care te rog să le denumeşti ButonPlus, ButonMinus, ButonOri şi ButonSupra, pentru a avea nume mai sugestive pentru cele patru butoane corespunzătoare celor patru operaţii aritmetice pe care vrem să le implementăm în programul nostru. Modifică şi proprietăţile Caption de la fiecare din cele patru butoane, punând pe ele simbolurile +, -, x şi :. Dacă ţi se pare că aceste simboluri sunt prea mici pentru butoanele pe care apar, nu ai decât să te foloseşti de proprietatea Font şi să le măreşti sau să le evidenţiezi (cu Bold).

Page 13: Pce Edusoft

13

Ataşează primului buton, cel pentru adunare (ButonPlus) următoarea subrutină, care vrea să adune numărul ce va fi scris în caseta Operand1 cu cel din caseta Operand2 şi să pună rezultatul în caseta Rezultat. Private Sub ButonPlus_Click() Rezultat.Text = Operand1.Text + Operand2.Text End Sub Acum porneşte programul, introdu un număr în caseta Operand1, un altul în caseta Operand2, apasă pe butonul de adunare şi... vei constata că numerele nu se adună corect.

Dacă observi cu atenţie, ele sunt considerate ca nişte texte care se "adună" precum textele, adică se concatenează. Acest lucru este firesc, deoarece Visual Basic interpretează conţinuturile celor două casete de text (Operand1 şi Operand2) ca fiind texte (şiruri de caractere sau date de tip String) şi nicidecum numere. Pentru ca totul să meargă aşa cum ne-am propus, adică să adăugăm numere, va trebui ca să convertim aceste texte la valorile numerice corespunzătoare, cu alte cuvinte să "scoatem" ghilimelele de la "20" şi "45", pentru a obţine 20 şi 45, deci şi suma lor 65 şi nu 2045. De "scoaterea" ghilimelelor se ocupă funcţia Val, iar de "punerea lor" se ocupă funcţia inversă ei, numită Str. Corect ar fi să scriem aşa: Rezultat.Text=Str(Val(Operand1.Text)+Val(Operand2.Text)), dar conversia de la valoarea numerică la textul necesar casetei Rezultat se face automat, aşadar e suficient să înlocuim subrutina greşită de mai sus cu cea corectă de mai jos: Private Sub ButonPlus_Click() Rezultat.Text = Val(Operand1.Text) + Val(Operand2.Text) End Sub

Page 14: Pce Edusoft

14

Acum nu ne rămâne decăt să realizăm şi celelalte trei subrutine asemănătoare, pentru ButonMinus, ButonOri şi ButonSupra: Private Sub ButonMinus_Click() Rezultat.Text = Val(Operand1.Text) - Val(Operand2.Text) End Sub Private Sub ButonOri_Click() Rezultat.Text = Val(Operand1.Text) * Val(Operand2.Text) End Sub Private Sub ButonSupra_Click() Rezultat.Text = Val(Operand1.Text) / Val(Operand2.Text) End Sub Indiferent cum aţi notat Caption-urile de pe cele două butoane pentru înmulţire şi împărţire, când va trebui să scrieţi codul veţi folosi * pentru înmulţire şi / pentru împărţire. Totul pare acum OK, dar încearcă să împarţi un număr oarecare la 0! Vei obţine un mesaj de eroare, apoi apasă pe End (şi nu pe Debug!). E normal, deoarece nu are sens împărţirea la zero. Aşadar, trebuie să testăm dacă nu cumva se încearcă o împărţire la zero, iar dacă împărţitorul ar fi 0 să nu se mai realitzeze împărţirea, ci să afişăm un mesaj de eroare, într-o casetă de mesaj. Aşadar, subrutina corectă pentru butonul de împărţire ar putea fi următoarea: Private Sub ButonSupra_Click() If Val(Operand2.Text) = 0 Then MsgBox "Nu se poate imparti la 0!", vbCritical, "Eroare" Else Rezultat.Text = Val(Operand1.Text) / Val(Operand2.Text) End If End Sub sau, echivalent: Private Sub ButonSupra_Click() If Val(Operand2.Text) <> 0 Then Rezultat.Text = Val(Operand1.Text) / Val(Operand2.Text) Else MsgBox "Nu se poate imparti la 0!", vbCritical, "Eroare" End If End Sub Acum programul nu se va bloca la împărţirea la zero:

Page 15: Pce Edusoft

15

5. Butoane de opţiune şi cadre Să începem un nou proiect, în care vom amplasa patru butoane de opţiune (Option Button): Option1, Option2, Option3 şi Option4, ale căror Caption-uri vor fi respectiv feminin, masculin, nefumator şi fumator. Dacă amplasaţi cele patru butoane de opţiune în cadrul formei, veţi observa, la rularea programului, că nu puteţi alege două din ele simultan, cum ar fi feminin şi nefumător, dar ar fi normal să se poată aşa ceva.

Atunci ştergeţi cele patru opţiuni şi desenaţi două cadre (Frame), în care veţi grupa căte două opţiunile, iar cadrelor le veţi pune Caption-urile "Sex" şi respectiv "Fumator?", ca în figura următoare. Mai mult, alegeţi valoarea True pentru proprietatea Value a lui Option1 şi a lui Option3, deci pentru "feminin" şi "nefumator". De data aceasta, vom putea alege, de exemplu, o femeie nefumătoare.. Mai adaugă şi un buton de comandă Command1 şi o casetă de text Text1, ca în figura următoare:

Page 16: Pce Edusoft

16

Ne propunem în continuare să scriem subrutina care atunci când executăm click pe butonul Command1 (cu Caption="Cel fel de om esti?") să primim răspunsul corespunzător în caseta de texte Text1. De exemplu, pentru situaţia din figura anterioară ar trebui să obţinem "Esti o femeie nefumatoare.". Nu este greu, dacă folosim două instrucţiuni IF imbricate (una într-alta). De remarcat că primul ELSE va corespunde ultimului IF ş.a.m.d.! Pentru a referi proprietatea Value pentru opţiunile Option1, Option2 ş.c.l, vom scrie Option1.Value, Option2.Value etc. Acestea pot avea valori boolene, deci pot fi True (adevărat) sau False (fals). Discuţia celor patru cazuri se va face mai întâi după sex, iar apoi după faptul dacă persoana respectivă fumează sau nu. Private Sub Command1_Click() If Option1.Value = True Then ' este femeie If Option3.Value = False Then Text1.Text = "Esti o femeie nefumatoare." Else Text1.Text = "Esti o femeie fumatoare." End If Else 'este barbat If Option3.Value = False Then Text1.Text = "Esti un barbat nefumator." Else Text1.Text = "Esti un barbat fumator." End If End If End Sub Comentariile sunt scrise cu apostrof în faţă şi ele sunt ignorate de VB; au doar rolul de a ne face pe noi să urmărim mai bine programul pe care l-am scris. Iată un exemplu din timpul funcţionării acestui program:

Text1

Command

Option

Option

Option

Option

Page 17: Pce Edusoft

17

6. Casete de validare Următorul proiect ne va spune ce pasiuni avem, după ce noi le vom selecta (bifa) dintr-un şir de patru pasiuni disponibile: literatura, muzica, sportul şi excursiile. Acestea vor fi reprezentate de patru casete de validare (Check Box), pe care le vom amplasa pe forma noastră şi se vor numi Check1, Check2, Check3, respectiv Check4. Să le păstrăm denumirile originale şi să le stabilim valorile pentru proprietăţile Caption ca fiind: literatura, muzica, sportul şi, respectiv, excursiile. Completează forma cu un buton de comandă (Command1, având Caption-ul "Ce pasiuni ai?"), precum şi cu o casetă de text Text1, fără text în interiorul ei (Text=""). Caută proprietatea MultiLine pentru caseta de text Text1 şi stabileşte-i valoarea la True, astfel încât textul va apărea acolo pe mai multe linii (dacă va fi cazul).

Când vei porni programul, vei constata că poţi alege 0, 1, 2, 3 sau chiar toate cele patru pasiuni, ceea ce nu se putea în cazul butoanelor de opţiune. O altă deosebire între casetele de validare (CheckBox) şi butoanele de opţiune (OptionButton) este că acestea din urmă aveau Value de tip Boolean (cu False şi True), pe când casetele de validare au Value de tip Integer, cu una din valorile 0 = nemarcat, 1 = marcat, 2 = gri, inactiv. Aşadar, dacă vrem să spunem, de exemplu, că am marcat (bifat) caseta de validare Check1, vom scrie Check1.Value=1.

Page 18: Pce Edusoft

18

Vrem ca la apăsarea butonului de comandă să ne apară în caseta Text1 un text de forma: "Pasiunile tale sunt literatura, sportul,". Sunt prea multe posibilităţi de a selecta sau nu cele patru pasiuni (mai precis sunt 16 variante), ca să facem o discuţie cu IF-THEN-ELSE, aşa că vom folosi patru IF-uri (fără ELSE), pentru a vedea dacă fiecare din cele patru casete de validare este bifată sau nu. Daca este, atunci Caption-ul ei va fi lipit unui şir de caractere T, iniţial vid. Subrutina va fi: Private Sub Command1_Click() T = "" If Check1.Value = 1 Then T = T + Check1.Caption + ", " If Check2.Value = 1 Then T = T + Check2.Caption + ", " If Check3.Value = 1 Then T = T + Check3.Caption + ", " If Check4.Value = 1 Then T = T + Check4.Caption + ", " Text1.Text = "Pasiunile tale sunt " + T End Sub

7. Vector de controale Programul anterior are un mic dezavantaj evident: apar patru instrucţiuni foarte asemănătoare scrise una sub alta, iar dacă am avea 20 de pasiuni Check1... Check20, ar trebui să scriem practic o instrucţiune de 20 de ori, cu mici modificări de numere de la un rând la altul. Mai firesc ar fi să putem vorbi despre un vector de 4 sau 20 asemenea casete de validare, în loc de 4 sau 20 de casete de validare distincte. Un vector grupează date de acelaşi fel, iar Visual Basic ne permite să grupăm chiar şi controale de acelaşi fel (în principiu numerotarea indicilor se face de la zero şi se păstrează în proprietatea Index a fiecărui control din vector, în parte). Cel mai simplu mod de a crea un vector de controale este următorul: amplasăm primul control şi-i dăm numele pe care vrem să-l aibă vectorul; selectăm controlul şi îl copiem în Clipboard (Edit->Copy) apoi readucem copia sa din Clipboard prin lipire (Edit->Paste) şi răspundem afirmativ la întrebarea dacă vrem să creăm un vector de controale. În cazul nostru, vom amplasa prima casetă de validare, o vom numi Check, iar apoi cu o comandă Copy şi 3 comenzi Paste vom crea restul elementelor din vector. Prima componentă a vectorului va

Page 19: Pce Edusoft

19

fi caseta Check(0) (are Index=0), iar celelalte Check(1), Check(2) şi Check(3). La componenta Check(1) vom fi întrebaţi aşa şi vom răspunde prin Yes:

Acum putem să adăugăm şi celelalte controale (butonul Command1 şi caseta Text1), iar codul butonului, pentru evenimentul Click, va fi următorul, mult mai elegant: Private Sub Command1_Click() T = "" For i = 0 To 3 If Check(i).Value = 1 Then T = T + Check(i).Caption + ", " Next i Text1.Text = "Pasiunile tale sunt " + T End Sub

8. Liste şi proprietăţi vectori Listele (simple) (ListBox), ca şi casetele combinate (ComboBox) au atăt proprietăţi de tipul celor cu care ne-am obişnuit deja, având tipuri de date elementare, căt şi proprietăţi de tip vectori. Vom discuta despre acestea mai târziu, când vom prezenta un exemplu mai complex. Deocamdată te rog să amplasezi în forma ta o listă simplă şi să scrii mai multe elemente în ea, fiecare pe un singur rând. Aceste elemente vor fi nişte denumiri de fructe şi vor fi scrise în proprietatea List, separate de Ctrl+Enter. La final, vei apăsa Enter. Noi am scris următoarele valori: mere, pere, portocale, caise, ananas, visine,. cirese, prune, gutui, zmeura, capsuni, piersici, dar lista ne afişează doar primele care încap şi automat creează o bară de derulare, pentru a permite vizualizarea şi celorlalte elemente (itemi) din listă, în timpul rulării programului:

Check(0)

Check(3)

Check(1)Comman

Text1

Check(2)

Page 20: Pce Edusoft

20

Observă că fructele apare în ordinea în care au fost introduse de noi, dar poate vrei ca ele să apară în ordine alfabetică. Pentru asta va trebui să modifici proprietatea Sorted a listei, din valoarea False în valoarea True. Fructele vor apărea ordonate alfabetic (crescător) în timpul rulării programului. De asemenea, dacă vrei să poţi alege mai multe fructe simultan, va trebui să schimbi valoarea proprietăţii MultiSelect, de la 0 la 1 sau 2.

În continuare să facem un mic program care, la acţionarea listei prin click (mai precis a unui element din ea, selectat sau nu), să ni se afişeze într-o casetă de text Text1 acel element. Trebuie să-ţi spun că există proprietatea Text pe care o au listele şi care păstrează întotdeauna ultimul element din listă pe care s-a făcut click. Astfel, dacă MultiSelect=0, atunci acesta este elementul selectat, dar pentru MultiSelect=1 sau MultiSelect=2, va fi doar ultimul element pe care s-a executat Click, ce poate fi selectat sau deselectat înapoi. Iată programul:

Private Sub Fructe_Click() Text1.Text = Fructe.Text

Page 21: Pce Edusoft

21

End Sub

În continuare micşorează puţin caseta de texte Text1, apoi amplasează între listă şi Text1 un buton de comandă Command1, aşa cum se vede în figura de mai jos.

Şterge codul subrutinei List1_Click, apoi ataşează butonului Command1 şi evenimentului Click următoarea subrutină:

Private Sub Command1_Click() n = 0 For i = 0 To Fructe.ListCount - 1 If Fructe.Selected(i) = True Then n = n + 1 End If Next i Text1.Text = n End Sub

Efectul va fi următorul: vei selecta mai multe fructe din listă, iar când vei apăsa pe buton, numărul lor va apărea în caseta de text Text1.

Acesta este ultimul element

pe care s-a executat Click

Caseta de text Text1

Lista Fructe

Page 22: Pce Edusoft

22

Hai să-ţi explic cum funcţionează această subrutină. În primul rând, trebuie să ştii că numărul de elemente dintr-o listă (de exemplu din lista Fructe) se stochează în proprietatea ListCount. Această proprietate nu poate fi accesată în faza proiectării, din tabelul de proprietăţi, dar poate fi folosită de programator în cod. Elementele listei se păstrează în proprietatea List, care este o proprietate de tip vector (de şiruri de caractere) şi sunt numerotate începând de la 0. Aşadar, primul fruct din lista noastră va fi Fructe.List(0), al doilea Fructe.List(1), al treilea Fructe.List(2) ş.a.m.d, iar cum numărul lor este Fructe.ListCount, ultimul va fi Fructe.List(Fructe.ListCount-1). Similară proprietăţii List este şi proprietatea Selected, care este tot un vector, de valori logice (boolene), Fructe.Selected(i) = True însemnând că fructul (elementul) respectiv este selectat, iar Fructe.Selected(i) = False însemnând că nu. Subrutina anterioară parcurge cu instrucţiunea FOR lista Fructe şi, de fiecare dată când găseşte un element selectat, creşte cu o unitate variabila n (iniţial aceasta fiind 0), iar la final depune valoarea n în caseta de text Text1, n reprezentând acum câte elemente s-au selectat. 9. Metode pentru liste Aşa cum ai observat mai înainte, listele au tot felul de proprietăţi, fie că ele sunt simple sau structurate (vectori). Dar atât listele, cât şi alte obiecte mai simple sau mai complexe mai au şi metode. Acestea sunt nişte acţiuni (proceduri) ataşate obiectelor respective, de exemplu metoda Clear a unei liste va elimina din listă toate elementele sale (o va "curăţa"). Astfel, dacă vrem ca ca în lista de fructe să nu mai fie nici un fruct, atunci va trebui să scriem Fructe.Clear, care este un apelul metodei Clear pentru lista Fructe. De asemenea, dacă amplasăm o casetă de text Text2 şi vrem ca să fie adăugat elementul din ea, la click pe un buton Command2, va trebui să scriem subrutina:

Private Sub Command2_Click() Fructe.AddItem Text2.Text End Sub

Să amplasăm în forma noastră aceste controale (Command2, Text2), precum şi încă o listă, numită Salata, şi un nou buton de comandă numit Command3, ca în figura de mai jos.

Page 23: Pce Edusoft

23

Vrem ca la acţionarea butonului Command3, toate elementele care au fost selectate în lista Fructe să fie trecute în lista Salata. Iată codul acestei subrutine:

Private Sub Command3_Click() Salata.Clear For i = 0 To Fructe.ListCount - 1 If Fructe.Selected(i) = True Then Salata.AddItem Fructe.List(i) End If Next i End Sub

Ea funcţionează astfel: se parcurge lista Fructe şi fiecare element i care este selectat (Fructe.Selected(i) = True) se adaugă listei Salata (prin Salata.AddItem Fructe.List(i)). Iată şi rezultatul:

caseta de text Text2

noua listă Salatalista Fructe

Text1Comman Comman

Comman

Page 24: Pce Edusoft

24

10. Un joc cu imagini şi cronometre În continuare ne propunem să realizăm un joc simplu, în care trebuie să omorâm, prin click de mouse, nişte muşte care apar în cinci zone ale formei noastre (în cele patru colţuri şi în centru). Muştele apar la un anumit interval de timp, iar dacă nu le "strivim", vor dispărea după acelaşi interval de timp. Dacă, însă, vom executa click pe ele, cât timp stau vii pe ecran, le vom omorâ, vom câştiga un punct şi apoi vor dispărea. Pentru a implementa un asemenea joc, avem nevoie de următoarele noi controale: imagini (Image), pentru a reprezenta muştele, şi cronometre (Timer) pentru a ţine evidenţa intervalelor de timp şi a apariţiei/dispariţiei muştelor). De fapt, chiar dacă jucătorul va avea impresia că apar mai multe muşte, noi vom folosi cinci controale de tip Image, în care vom avea fie imaginea unei muşte vii, fie a unei muşte moarte, fie nimic, cu sensul că în zona respectivă nu a apărut în acel moment nici o muscă. De asemenea, vom folosi proprietatea Tag pentru a stoca starea muştelor: 0 = lipsă, 1 = vie, 2 = moartă. Proprietatea Tag este comună tuturor controalelor şi este folosită pentru a stoca o informaţie suplimentară asociată respectivului control. Vom folosi două fişiere cu imagini, numite "muscav.jpg" pentru musca vie, respectiv "muscam.jpg" pentru cea moartă. Un control de tip Image are o proprietate Picture în care se stochează imaginea propriu-zisă. Acolo trebuie încărcatî imaginea dintr-un fişier, folosind funcţia LoadPicture. Astfel, dacă avem o muscă de indice Index, vom scrie Musca(Index).Picture = LoadPicture(App.Path+"\muscav.jpg") pentru a încărca imaginea cu musca vie în Musca(Index). App.Path semnifică calea aplicaţiei noastre, adică directorul în care am salvat proiectul nostru Visual Basic. Să începem proiectarea interfeţei jocului nostru: mai întâi amplasăm o imagine în centrul ecranului, pe care o denumim Musca. Controlul de tip Image, respectiv cronometru arată astfel:

Apoi, aşa cum am multiplicat casetele de text dintr-o secţiune anterioară, vom multiplica imaginea noastră, folosind Copy şi Paste, formând un vector de imagini, celelalte patru componente ale vectorului fiind amplasate în colţurile formei. Astfel, prima imagine va avea Index-ul 0, iar celelalte patru vor avea Index-ul 1, 2, 3 şi respectiv 4, aşa ca în imaginea de mai jos:

Musca(0)

Musca(1)

Musca(2)

Musca(4) Musca(3)

Page 25: Pce Edusoft

25

Apoi vom amplasa un cronometru în dreptul imaginii din centru, îl vom denumi Crono şi, cu Copy şi Paste îl vom multiplica de 4 ori, creând un vector. Iată rezultatul:

Aceste cronometre sunt un exemplu de controale "invizibile", în sensul că ele funcţionează fără ca să ni se înfăţişeze în vreun fel anume, de aceea poziţia lor nici nu contează. Ele vor "dispărea" imediat ce vom porni programul. Cronometrele au o singură proprietate importantă numită Interval. Este intervalul de timp după care intră în acţiune. După fiecare Interval milisecunde apare evenimentul Timer asupra cronometrulului şi noi trebuie să spunem ce vrem ca să se întâmple la fiecare astfel de "tic" al cronometrului. Fireşte, dacă musca asociată nu este pe ecran, atunci ea va apărea vie, iar dacă este (vie sau moartă) va dispărea. O altă subrutină pe care va trebui să o realizăm este asociată muştelor şi evenimentului Click, prin care noi încercăm să omorâm muştele. Dacă facem click pe o muscă vie, atunci o omorâm, iar dacă musca nu este facem click degeaba. Tot degeaba facem click şi pe o imagine cu o muscă moartă, deoarece nu putem omorâ o muscă de două ori. Vorbim de muşte vii şi moarte, dar vom avea nevoie de cele două fişiere în care să le păstrăm imaginile lor. Ori le desenăm noi, ori face rost de ele într-un fel sau altul, sau de imagini similare. Iată imaginile folosite de mine:

muscav.jpg

muscam.jpg Acum e momentul să scriem codul aplicaţiei noastre. În primul rând trebuie să scriem subrutina Form_Load, care este lansată în execuţie la pornirea aplicaţiei, adică la încărcarea formei. Aici vom

Crono(1) Crono(2)

Crono(4)Crono(0)Crono(3)

Page 26: Pce Edusoft

26

face iniţializările necesare. La început nu este nici o muscă pe ecran, iar cronometrele vor avea anumite valori pentru intervale. Private Sub Crono_Timer(Index As Integer) If Musca(Index).Tag = 0 Then 'musca nu este Musca(Index).Tag = 1 'musca va aparea vie ' incarcam si imaginea din fisierul muscav.jpg ' din calea curenta a aplicatiei Musca(Index).Picture = LoadPicture(App.Path + "\muscav.jpg") Else Musca(Index).Tag = 0 Musca(Index).Picture = LoadPicture() 'sterge musca End If End Sub În continuare vom scrie subrutina asociată trecerii intervalului de timp pentru un cronometru. Deşi sunt cinci cronometre, vom scrie doar o singură subrutină, care va avea ca argument indicele cronometrului. În această subrutină trebuie să descriem faptul că dacă musca respectivă nu este pe ecran, atunci ea să apară pe ecran vie, iar dacă este pe ecran (vie sau moartă) să dispară.

Private Sub Form_Load() Crono(0).Interval = 1200 Crono(1).Interval = 1500 Crono(2).Interval = 2000 Crono(3).Interval = 1800 Crono(4).Interval = 1300 For i = 0 To 4 Musca(i).Tag = 0 Next i ' facem fundalul alb pentru forma Form1.BackColor = RGB(255, 255, 255) End Sub

Ultima subrutină va descrie ce se întâmplă când se execută click pe o muscă. Dacă este vie va fi omorâtă, iar dacă e deja moartă sau nu, nu se va întâmpla nimic. Dacă vrem ca să existe un punctaj care să crească la fiecare muscă omorâtă, atunci va trebui să declarăm ca fiind globală variabila punctaj. La (General)(Declarations) vom scrie: Dim punctaj as Integer. Restul modificărilor le vei face tu! Ar fi bine ca, periodic, punctajul să fie reprezentat într-o etichetă, iar durata jocului să fie controlată de un alt cronometru. Private Sub Musca_Click(Index As Integer) If Musca(Index).Tag = 1 Then Musca(Index).Tag = 2 Musca(Index).Picture = LoadPicture(App.Path + "\muscam.jpg") End If End Sub

Page 27: Pce Edusoft

27

Un asemenea joc este prezentat în cartea mea "Aplicaţii în Visual Basic", apărută la Editura Teora, Bucureşti, 1998-2003. 11. Tabele Un control foarte util în dezvoltarea multor aplicaţii este Microsoft Flex Grid. Acest control nu poate fi găsit de la bun început în bara de instrumente din partea stângă a mediului Visual Basic. El trebuie adăugat în felul următor: din meniul VB alegi opţiunea Project, apoi Components... şi vei obţine o listă de alte componente ce pot fi adăugate la Toolbox, pentru proiectul tău. Alege din listă Microsoft Flex Grid şi bifează în dreptul acestei componente, apoi apasă pe butonul OK. În Toolbox va apărea simbolul controlului acesta:

Apoi vei putea amplasa un tabel (care iniţial va fi denumit MSFlexGrid1, dar noi îl vom redenumi T, de la tabel). Iniţial are două rânduri şi două coloane, dar putem modifica proprietăţile Rows şi Cols pentru a modifica numărul de rânduri, respectiv de coloane. Te rog să alegi valoarea 10 pentru Rows şi 5 pentru Cols. De fapt, rândurile sunt numerotate începând cu 0 şi până la T.Rows-1, iar coloanele de la 0 la T.Cols-1. Observi că primul rând şi prima coloană sunt gri. Ele sunt, de fapt, fixe, inaccesibile evenimentelor Click sau KeyPress. Şi numărul de rânduri, respectiv coloane fixe se poate schimba, cu ajutorul proprietăţilor FixedRows şi FixedCols.

Page 28: Pce Edusoft

28

Proprietăţi foarte importante sunt Row = rândul curent, Col = coloana curentă şi Text = textul din celula curentă. Dacă vrem să punem în celula (căsuţa) de pe rândul 2 şi coloana 3 informaţia (textul) "ABC" vom scrie următoarea secvenţă de trei atribuiri:

T.Row = 2 T.Col = 3 T.Text = "ABC"

O altă modalitate mult mai simplă va folosi proprietatea TextMatrix, care este o matrice a tuturor textelor din tabel. Astfel, acelaşi lucru se poate scrie mai simplu: T.TextMatrix(2,3)="ABC". Vei observa că toate rândurile au aceeaşi înălţime şi toate coloanele au aceeaşi lăţime. Cu RowHeight şi ColWidth poţi să modifici valorile, aceste proprietăţi fiind vectori. De exemplu, prin atribuirea T.ColWidth(0) = T.ColWidth(0) / 2 vom înjumătăţi grosimea primei coloane. Proprietatea AllowUserResizing are diferite valori ce permit utilizatorului să redimensioneze rândurile/coloanele tabelului. În continuare vom prezenta o mică subrutină care apelează la evenimentul KeyPress pentru a scrie în celulele tabelului T. Apoi vom folosi această subrutină în cadrul unui program care va calcula mediile unor studenţi, a căror nume apar în coloana 1, iar notele la teorie şi la practică în coloanele 2 şi 3. Private Sub T_KeyPress(KeyAscii As Integer) If (KeyAscii = 8) And (T.Text <> "") Then L = Len(T.Text) T.Text = Left(T.Text, L - 1) Else If KeyAscii >= 32 Then T.Text = T.Text + Chr$(KeyAscii) End If End If End Sub

Page 29: Pce Edusoft

29

Private Sub Command1_Click() For i = 1 To T.Rows - 1 If T.TextMatrix(i, 1) <> "" Then x = Val(T.TextMatrix(i, 2)) y = Val(T.TextMatrix(i, 3)) T.TextMatrix(i, 4) = (x + y) / 2 End If Next i End Sub Private Sub Form_Load() T.ColWidth(0) = T.ColWidth(0) / 2 T.ColWidth(1) = T.ColWidth(1) * 2 For i = 1 To T.Rows - 1 T.TextMatrix(i, 0) = i Next i T.TextMatrix(0, 0) = "Nr.crt" T.TextMatrix(0, 1) = "Numele si prenumele" T.TextMatrix(0, 2) = "Nota t." T.TextMatrix(0, 3) = "Nota p." T.TextMatrix(0, 4) = "Media" End Sub Private Sub T_KeyPress(KeyAscii As Integer) If (KeyAscii = 8) And (T.Text <> "") Then L = Len(T.Text) T.Text = Left(T.Text, L - 1) Else If KeyAscii >= 32 Then T.Text = T.Text + Chr$(KeyAscii) End If End If End Sub

Page 30: Pce Edusoft

30

12. Grafice Ar fi interesant să putem reprezenta grafic notele şi mediile acestor studenţi. Pentru aceasta vom folosi un alt control, pe care îl adăugăm în aceeaşi manieră ca şi pe FlexGrid. Se numeşte Microsoft Chart Control şi are proprietăţi asemănătoare controlului Ms Flex Grid, numai că, în loc de Col apare Column, în loc de Cols apare ColumnCount, în loc de Rows apare RowCount şi în loc de Text apare Data. Fireşte mai apar şi alte proprietăţi, dar te las să le descoperi singur. Amplasează un control Ms Chart în forma ta, alături de tabelul T, alegând pentru acesta Columns=3, Rows=9. Denumeşte graficul G şi modifică la True valoarea proprietăţii RandomFill. Apoi amplasează butonul Command2 şi asociază-i codul de mai jos, care va reprezenta grafic datele din tabelul T. Din păcate Ms Chart nu are o proprietate de genul lui TextMatrix, aşa că va trebui să lucrăm cu Row, Column şi Data. După ce scrii subrutina de mai jos, adaugă la subrutina Form_Load linia:

Command2_Click. Private Sub Command2_Click() For i = 1 To T.Rows - 1 For j = 2 To 4 G.Row = i G.Column = j - 1 G.Data = Val(T.TextMatrix(i, j)) Next j Next i End Sub

Page 31: Pce Edusoft

31

13. Fişiere text - să salvăm şi să restaurăm datele Cu Open cale + nume fişier For Output as #număr putem crea/deschide pentru scriere un fişier text cu numele şi calea precizate, asociindu-i numărul 1. Orice referire la acest fişier se va face prin intermediul numărului 1. Pentru ca să operăm simultan cu un al doilea fişier, va trebui să folosim un alt număr întreg. Pentru a adăuga la datele existente altele, va trebui ca fişierul text să se deschidă prin: Open cale + nume fişier For Append as #număr. Pentru a deschide fişierul în vederea citirii de date din el se foloseşte: Open cale + nume fişier For Input as #număr. Închiderea unui fişier deschis pentru citire/scriere/adăugare se face prin Close #număr. Scrierea de date se face cu Print #număr, expresiile_de_scris, iar citirea cu Input #număr, variabilele_de_citit (pentru numere) sau cu Line Input #număr, variabilele_de_citit (pentru şiruri de caractere).

Page 32: Pce Edusoft

32

Completând programul nostru cu cele două butoane (Command3, Command4), ca în figura de mai sus, şi scriind subrutinele de mai jos vom putea salva şi restaura datele salvate din fişierul text TABEL.TXT:

Private Sub Command3_Click() ' salvarea datelor Open App.Path + "\tabel.txt" For Output As #1 For i = 0 To T.Rows - 1 For j = 0 To T.Cols - 1 Print #1, T.TextMatrix(i, j) Next j Next i Close #1 End Sub Private Sub Command4_Click() ' incarcarea datelor Open App.Path + "\tabel.txt" For Input As #1 For i = 0 To T.Rows - 1 For j = 0 To T.Cols - 1 Line Input #1, s T.TextMatrix(i, j) = s Next j Next i Close #1 End Sub

Page 33: Pce Edusoft

33

14. Ordonarea datelor din tabel În sfârşit, să adăugăm aplicaţiei noastre încă două butoane, unul pentru a ordona elevii alfabetic (crecător după nume), iar unul pentru ordonarea descrescătoare după medii a elevilor. Ambele subrutinte vor folosi metoda de ordonare prin selecţie directă. Detalii despre metodele de sortare pot fi găsite în cursul meu de Programarea calculatoarelor electronice.

Private Sub Command5_Click() For i = 1 To T.Rows - 2 For j = i + 1 To T.Rows - 1 If T.TextMatrix(i, 1) > T.TextMatrix(j, 1) Then For k = 1 To 4 aux = T.TextMatrix(i, k) T.TextMatrix(i, k) = T.TextMatrix(j, k) T.TextMatrix(j, k) = aux Next k End If Next j Next i End Sub Private Sub Command6_Click() For i = 1 To T.Rows - 2 For j = i + 1 To T.Rows - 1 If T.TextMatrix(i, 4) < T.TextMatrix(j, 4) Then For k = 1 To 4

Page 34: Pce Edusoft

34

aux = T.TextMatrix(i, k) T.TextMatrix(i, k) = T.TextMatrix(j, k) T.TextMatrix(j, k) = aux Next k End If Next j Next i End Sub

Programul poate fi îmbunătăţit în mai multe moduri: pentru a permite un număr variabil de elevi, pentru a cere utilizatorului numele fişierului în care să se salveze datele sau de unde să se restaureze datele şi multe altele.

Page 35: Pce Edusoft

35

Capitolul 1. Programe simple cu butoane de comandă şi casete de text (Andreea, Cătalin) Andreea 1. Realizati un program care sa calculeze,la apasarea butonului "Buton", logaritmul unui numar oarecare scris intr-o casuta de text "Numar". Rezultatul sa se afiseze intr-o alta casuta de text, numita "Rezultat". Rezolvare.

Casutele de text se amplaseaza cu ajutorul controlului TextBox din Toolbox, se denumesc la proprietatea Name si se goleste continutul lor de la proprietatea Text din tabelul de proprietati din dreapta.

Butoanele se amplaseaza cu ajutorul controlului Command Button din Toolbox, se denumesc la proprietatea Name si se scrie in interiorul lor cu proprietatea Caption.

Subrutina care calculeaza logaritmul unui numar este urmatoarea: Private Sub Buton_Click() Rezultat.Text = Log(Numar.Text) End Sub

2. Realizati un program care sa calculeze, la apasarea butonului "Buton", media aritmetica dintre 2 numere scrise in 2 casute de text numite "a", respectiv "b", iar rezultatul sa se afiseze intr-o alta casuta de text numita "Rezultat". Rezolvare.

Casutele de text se amplaseaza cu ajutorul controlului TextBox din Toolbox, se denumesc la proprietatea Name si se goleste continutul lor de la proprietatea Text din tabelul de proprietati din dreapta.

Butoanele se amplaseaza cu ajutorul controlului Command Button din Toolbox, se denumesc la proprietatea Name si se scrie in interiorul lor cu proprietatea Caption.

Subrutina care calculeaza media aritmetica dintre 2 numere este urmatoarea: Private Sub Buton_Click() Rezultat.Text = (Val(a.Text) + Val(b.Text)) / 2 End Sub

Page 36: Pce Edusoft

36

3. Realizati un program care sa calculeze, la apasarea butonului "Buton", media armonica dintre 2 numere scrise in 2 casute de text numite "a", respectiv "b", iar rezultatul sa se afiseze intr-o alta casuta de text numita "Rezultat". Rezolvare.

Casutele de text se amplaseaza cu ajutorul controlului TextBox din Toolbox, se denumesc la proprietatea Name si se goleste continutul lor de la proprietatea Text din tabelul de proprietati din dreapta.

Butoanele se amplaseaza cu ajutorul controlului Command Button din Toolbox, se denumesc la proprietatea Name si se scrie in interiorul lor cu proprietatea Caption.

Subrutina care calculeaza media armonica dintre 2 numere este urmatoarea: Private Sub Buton_Click() Rezultat.Text = 2 / ((Val(1 / Val(a.Text))) + (Val(1 / Val(b.Text)))) End Sub

4. Realizati un program care sa calculeze, la apasarea butonului "Buton", media patratica dintre 2 numere scrise in 2 casute de text numite "a", respectiv "b", iar rezultatul sa se afiseze intr-o alta casuta de text numita "Rezultat". Rezolvare.

Casutele de text se amplaseaza cu ajutorul controlului TextBox din Toolbox, se denumesc la proprietatea Name si se goleste continutul lor de la proprietatea Text din tabelul de proprietati din dreapta.

Butoanele se amplaseaza cu ajutorul controlului Command Button din Toolbox, se denumesc la proprietatea Name si se scrie in interiorul lor cu proprietatea Caption.

Page 37: Pce Edusoft

37

Subrutina care calculeaza media patratica dintre 2 numere este urmatoarea: Private Sub Buton_Click() Rezultat.Text = Sqr(((Val(a.Text) * Val(a.Text)) + _ (Val(b.Text) * Val(b.Text))) / 2) End Sub

5. Realizati un program care sa calculeze, la apasarea butonului "Buton", media geometrica dintre 2 numere scrise in 2 casute de text numite "a", respectiv "b", iar rezultatul sa se afiseze intr-o alta casuta de text numita "Rezultat". Rezolvare.

Casutele de text se amplaseaza cu ajutorul controlului TextBox din Toolbox, se denumesc la proprietatea Name si se goleste continutul lor de la proprietatea Text din tabelul de proprietati din dreapta.

Butoanele se amplaseaza cu ajutorul controlului Command Button din Toolbox, se denumesc la proprietatea Name si se scrie in interiorul lor cu proprietatea Caption.

Subrutina care calculeaza media geometrica dintre 2 numere este urmatoarea: Private Sub Buton_Click() Rezultat.Text = Sqr(Val(a.Text) * Val(b.Text)) End Sub

Page 38: Pce Edusoft

38

Capitolul 2. Programe simple (Mirela, Ionuţ, Catalin) Mirela 1. Realizati un program care sa calculeze la banca BCR dobanda la luna, suma depusa+dobanda si comisionul retinut pentru depozit. Rezolvare Private Sub Command1_Click()

Text2.Text = (Text1.Text) * (1.1 / 100) Text3.Text = Val(Text1.Text) + Val(Text2.Text) Text4.Text = (Text1.Text) * (0.05 / 100)

End Sub

2. Faceti un program care sa calculeze cat reprezinta un procent dat dintr-o suma data. Rezolvare: Private Sub Command1_Click()

Text3.Text = Text1.Text * (Text2.Text / 100) End Sub Private Sub Command2_Click()

Text3.Text = "" Text2.Text = "" Text1.Text = ""

End Sub

Page 39: Pce Edusoft

39

3. Realizati un program care sub comanda unui buton sa afiseze caracterizarea unei persoane in urma bifarii a doua butoane ce corespund unor caracteristici sumare. Rezolvare: Private Sub Command1_Click()

If (Option1.Value = True) And (Option5.Value = True) Then Text1.Text = "Esti un copil coleric" ElseIf (Option1.Value = True) And (Option6.Value = True) Then

Text1.Text = "Esti un copil cu temperament sangvinic." ElseIf (Option1.Value = True) And (Option7.Value = True) Then

Text1.Text = "Esti un copil melancolic." ElseIf (Option2.Value = True) And (Option5.Value = True) Then

Text1.Text = "Esti un adolescent coleric." ElseIf (Option2.Value = True) And (Option6.Value = True) Then

Text1.Text = "Esti un adolescent cu temperament sangvinic." ElseIf (Option2.Value = True) And (Option7.Value = True) Then

Text1.Text = "Esti un adolescent melancolic." ElseIf (Option3.Value = True) And (Option5.Value = True) Then

Text1.Text = "Esti un (o) tanar(a) cu temperament coleric." ElseIf (Option3.Value = True) And (Option6.Value = True) Then

Text1.Text = "Esti un (o) tanar(a) cu temperament sangvinic." ElseIf (Option3.Value = True) And (Option7.Value = True) Then

Text1.Text = "Esti un (o) tanar(a) melancolic(a)." ElseIf (Option4.Value = True) And (Option5.Value = True) Then

Text1.Text = "Esti un adult coleric." ElseIf (Option4.Value = True) And (Option6.Value = True) Then

Text1.Text = "Esti un adult cu temperament sangvinic." ElseIf (Option4.Value = True) And (Option7.Value = True) Then

Text1.Text = "Esti un adult melancolic." End If

End Sub

Page 40: Pce Edusoft

40

4. Incercati sa faceti un program care sa descrie compatibilitatea dintre doua zodii dupa ce au fost bifate butoanele de optiune aferente zodiilor respective. Rezolvare: Private Sub Command1_Click() If Option1.Value = True And Option13.Value = True Then Text1.Text = "Pe cat de paradoxala este aceasta relatie, pe atat este ea de puternica. Daca veti face unele compromisuri totul va fi perfect" ElseIf Option1.Value = True And Option14.Value = True Then Text1.Text = "Veti fi fericiti in adevaratul sens al cuvantului. Nu aveti nici un motiv sa intarziati la Primarie." ElseIf Option1.Value = True And Option15.Value = True Then Text1.Text = "Relatia este mediocra si trebuie depuse multe eforturi pt ca ea sa ajunga la un nivel satisfacator." ElseIf Option1.Value = True And Option16.Value = True Then Text1.Text = "Sunteti atat de diferiti temperamental, incat pana si relatiile amicale de la care poate ati pornit se vor distruge in timp." ElseIf Option1.Value = True And Option17.Value = True Then Text1.Text = "Cea mai stralucitoare pereche cu putinta! Inteligenti si puternici, veti fi invidiati de toti de cei din jur." ElseIf Option1.Value = True And Option18.Value = True Then Text1.Text = "Daca nu veti fi prea taiosi unul cu celalalt, aveti toate sansele. " ElseIf Option1.Value = True And Option19.Value = True Then Text1.Text = "Nici macar sa nu incercati. Este un chin inutil." ElseIf Option1.Value = True And Option20.Value = True Then Text1.Text = "Raporturi bune, cu rezultate multumitoare. Daca asta vi se pare suficient, atunci n-aveti decat sa incercati." ElseIf Option1.Value = True And Option21.Value = True Then Text1.Text = "O legatura admirabila, plina de succes si prosperitate." ElseIf Option1.Value = True And Option22.Value = True Then Text1.Text = "Legatura va fi punctata de multe momente tensionate, dar ea are totusi mari sanse de reusita." ElseIf Option1.Value = True And Option23.Value = True Then Text1.Text = "Daca va place aventura, n-aveti decat sa incercati. Dar sa nu va mirati daca iesiti cam sifonati. " ElseIf Option1.Value = True And Option24.Value = True Then Text1.Text = "Daca dispuneti de putin tact si nu-l raniti pe bietul Pestisor, atunci veti fi fericiti."

Page 41: Pce Edusoft

41

ElseIf Option2.Value = True And Option13.Value = True Then Text1.Text = "Puteti obtine mari succese in acesta formula, daca va iubiti cu adevarat." ElseIf Option2.Value = True And Option14.Value = True Then Text1.Text = "Daca eliminati gelozia si secretele, viitorul va apartine." ElseIf Option2.Value = True And Option15.Value = True Then Text1.Text = "Singura relatie posibila este cea profesionala. In rest, nu va puteti intelege si nici aproba." ElseIf Option2.Value = True And Option16.Value = True Then Text1.Text = "Daca nu vreti sa-i faceti rau, lasati-o in pace si uitati ca v-ati intalnit." ElseIf Option2.Value = True And Option17.Value = True Then Text1.Text = "Aceasta relatie este un fel de competitie, in nici un caz un parteneriat." ElseIf Option2.Value = True And Option18.Value = True Then Text1.Text = "Cea mai buna relatie! Nu ezitati!" ElseIf Option2.Value = True And Option19.Value = True Then Text1.Text = "O relatie palida si rece. Nu veti fi satisfacut nici unul, nici celalalt." ElseIf Option2.Value = True And Option20.Value = True Then Text1.Text = "Daca renuntati la agresivitate, atunci lucrurile vor decurge normal. Dar fericirea este departe." ElseIf Option2.Value = True And Option21.Value = True Then Text1.Text = "Daca Taurul nu va fi tentat sa aiba secrete, atunci relatia va fi una extraordinara" ElseIf Option2.Value = True And Option22.Value = True Then Text1.Text = "O relatie prospera din toate punctele de vedere." ElseIf Option2.Value = True And Option23.Value = True Then Text1.Text = "Desi aveti unele gusturi comune, armonia legaturii d-voastra se va compromite rapid." ElseIf Option2.Value = True And Option24.Value = True Then Text1.Text = "Relatia este bazata pe intelegere si poate decurge linistit si armonios, daca nu sunteti prea pretentiosi." ElseIf Option3.Value = True And Option13.Value = True Then Text1.Text = "Doi oameni tari, inteligenti, dar excesiv de imprastiati. Cadeti de acord mai intai asupra scopului comun." ElseIf Option3.Value = True And Option14.Value = True Then Text1.Text = "Daca o veti convinge sa fie la fel de altruista ca d-voastra, va fi bine. Daca nu, atunci mai bine nu! " ElseIf Option3.Value = True And Option15.Value = True Then Text1.Text = "Este omul de care simtiti atata nevoie, din toate punctele de vedere! Dar s-ar putea sa nu reusiti un camin impreuna, pt ca nu aveti timp pt aceasta. " ElseIf Option3.Value = True And Option16.Value = True Then Text1.Text = "O pereche intr-adevar ideala. Spuneti da fara sa clipiti!" ElseIf Option3.Value = True And Option17.Value = True Then Text1.Text = "Fericirea e la un pas, armonia e ca si instalata...daca scapati de orgoliul dominarii" ElseIf Option3.Value = True And Option18.Value = True Then Text1.Text = "Da, se poate. Dar pregatiti-va, ca aveti de tras!" ElseIf Option3.Value = True And Option19.Value = True Then Text1.Text = "Cooperare, afinitati pe toata linia. Nu veti regreta niciodata!" ElseIf Option3.Value = True And Option20.Value = True Then Text1.Text = "O uniune conditionata. Sunteti prea critic cu slabiciunile ei. Daca o veti intelege, rasplata va fi dubla!" ElseIf Option3.Value = True And Option21.Value = True Then Text1.Text = "Va risipiti degeaba energia. Fericirea cu de-a sila nu se poate!" ElseIf Option3.Value = True And Option22.Value = True Then Text1.Text = "Este o partenera vesnic obosita si nervoasa. Nu va va aduce fericirea dorita." ElseIf Option3.Value = True And Option23.Value = True Then

Page 42: Pce Edusoft

42

Text1.Text = "Perechea ideala! Nu va speriati daca ea face primul pas, dar nu-i place timiditatea d-voastra." ElseIf Option3.Value = True And Option24.Value = True Then Text1.Text = "Fericirea va ramane o necunoscuta pt d-voastra." ElseIf Option4.Value = True And Option13.Value = True Then Text1.Text = "Foarte greu se va realiza aceasta legatura, dar nu este imposibil." ElseIf Option4.Value = True And Option14.Value = True Then Text1.Text = "Relatia nu este chiar romantica, dar poate fi profitabila pt ambii nativi, pt ca Taurul da dovada de multa inteligenta." ElseIf Option4.Value = True And Option15.Value = True Then Text1.Text = "O combinatie de mare succes. Racul se va simti ocrotita de energicul Gemeni, care va fi foarte magulit de rolul sau." ElseIf Option4.Value = True And Option16.Value = True Then Text1.Text = "Va veti intelege foarte bine atat timp cat o veti lasa pe ea sa conduca jocurile de culise." ElseIf Option4.Value = True And Option17.Value = True Then Text1.Text = "Cea mai profitabila este legatura profesionala. In rest, doar daca doriti sa aveti o aventura..." ElseIf Option4.Value = True And Option18.Value = True Then Text1.Text = "O astfel de relatie nu straluceste prin nimic pt ca cei doi nativi au dorinte si intentii destul de diferite. Mai aveti timp sa va razganditi." ElseIf Option4.Value = True And Option19.Value = True Then Text1.Text = "Din capul locului trebuie sa spuneti nu. Altfel, trebuie sa va asteptati la o viata incolora, inodora si insipida." ElseIf Option4.Value = True And Option20.Value = True Then Text1.Text = "O relatie perfecta atat timp cat femeia Scorpion nu va fi ranita. Ea este mult mai sensibila decat d-voastra. De aceea trebuie sa fiti foarte atenti la ceea ce spuneti si ce faceti." ElseIf Option4.Value = True And Option21.Value = True Then Text1.Text = "Relatia in sine poate avea si partile ei bune, dar numai dragostea nu este suficienta. Nu au conflicte prea mari, dar nici prea multe interese comune." ElseIf Option4.Value = True And Option22.Value = True Then Text1.Text = "La inceput poate exista un mare sentiment de prietenie, dar, cu timpul, acesta se va stinge, ajungandu-se la o indiferenta totala." ElseIf Option4.Value = True And Option23.Value = True Then Text1.Text = "Nu aveti sanse de reusita pt ca firea d-voastra nu accepta senzatiile tari pe care le cauta tot timpul Varsatorul." ElseIf Option4.Value = True And Option24.Value = True Then Text1.Text = "O relatie excelenta, in care fericirea si prosperitatea vor fi la ordinea zilei" ElseIf Option5.Value = True And Option13.Value = True Then Text1.Text = "Daca cuvantul perfectiune ar avea un superlativ, acesta ar defini relatia d-voastra. Iubirea si intelegerea dintre d-voastra sunt rar intalnite in alte situatii." ElseIf Option5.Value = True And Option14.Value = True Then Text1.Text = "Veselia si superficialitate Leului dau de cap seriosului si profundului nativ Taur, asa ca cel mai bine este sa va opriti la timp." ElseIf Option5.Value = True And Option15.Value = True Then Text1.Text = "Aveti toate sansele de fericire. Este una dintre cele mai stabile relatii." ElseIf Option5.Value = True And Option16.Value = True Then Text1.Text = "O relatie greu de imaginat. Ironia si duritatea Leului il ranesc prea mult pe fragilul si sesibilul Rac. " ElseIf Option5.Value = True And Option17.Value = True Then Text1.Text = "Daca veti sti sa va menajati reciproc orgoliul, veti avea un mariaj de vis." ElseIf Option5.Value = True And Option18.Value = True Then Text1.Text = "Cu toata admiratia pe care o poate avea Fecioara fata de Leu, cel mai bine ar fi sa pastrati distanta. " ElseIf Option5.Value = True And Option19.Value = True Then

Page 43: Pce Edusoft

43

Text1.Text = "Chiar daca aveti multe lucruri in comun, in special inteligenta, aveti putine sanse de succes impreuna pt ca sunteti foarte diferiti temperamental." ElseIf Option5.Value = True And Option20.Value = True Then Text1.Text = "O relatie palida, care nu are prea mult viitor, avand in vedere exigentele Leului." ElseIf Option5.Value = True And Option21.Value = True Then Text1.Text = "Daca veti face unele concesii de ambele parti, o astfel de relatie poate fi armonioasa, chiar fericita." ElseIf Option5.Value = True And Option22.Value = True Then Text1.Text = "Cel mai bine ar fi sa ramaneti prieteni pt ca sunteti destul de diferiti temperamental. " ElseIf Option5.Value = True And Option23.Value = True Then Text1.Text = "Nu este o relatie fericita, pt ca va suspectati reciproc si nu sunteti de acord nici macar asupra obiectivelor comune. " ElseIf Option5.Value = True And Option24.Value = True Then Text1.Text = "Poate exista o astfel de relatie, dar ea nu va ajunge niciodata la incandescenta." ElseIf Option6.Value = True And Option13.Value = True Then Text1.Text = "O relatie excelenta, intre doi oameni activi si materialisti. Vi se prevad mari realizari in casnicie. " ElseIf Option6.Value = True And Option14.Value = True Then Text1.Text = "Chiar daca vor exista unele dificultati de comunicare, veti reusi sa le depasiti si sa aveti o casnicie fericita si de durata." ElseIf Option6.Value = True And Option15.Value = True Then Text1.Text = "Dragostea incipienta se va topi cu timpul si nu vor ramane decat regrete." ElseIf Option6.Value = True And Option16.Value = True Then Text1.Text = "Va iritati unul pe altul si este greu de crezut ca veti ramane prea mult timp impreuna." ElseIf Option6.Value = True And Option17.Value = True Then Text1.Text = "Singurul domeniu in care puteti sta alaturi este cel profesional. Si nici acolo nu este sigur." ElseIf Option6.Value = True And Option18.Value = True Then Text1.Text = "Daca veti lasa la o parte luptele pt suprematie, ati putea avea sanse de reusita." ElseIf Option6.Value = True And Option19.Value = True Then Text1.Text = "Iubirea initiala se va stinge cu timpul pt ca nu veti reusi sa va descoperiti sufletele unul in fata celuilalt." ElseIf Option4.Value = True And Option20.Value = True Then Text1.Text = "Desi ea are nevoie de mintea d-voastra, nu veti putea comunica prea bine fiindca sunteti foarte diferiti sentimental." ElseIf Option6.Value = True And Option21.Value = True Then Text1.Text = "Nentelegerile dintre d-voastra, care au la baza diferenta temperamentala, nu vor reusi decat sa distruga un eventual sentiment de dragoste." ElseIf Option6.Value = True And Option22.Value = True Then Text1.Text = "O combinatie splendida, bazata pe intelegere, iubire si armonie." ElseIf Option6.Value = True And Option23.Value = True Then Text1.Text = "Amandoi sunteti inzestrati cu spirite combative, iar hartuiala va fi la ordinea zilei. Mai bine nu!" ElseIf Option6.Value = True And Option24.Value = True Then Text1.Text = "Intre d-voastra nu exista nici un fel de compatibilitate sentimentala, poate cel mult una profesionala." ElseIf Option7.Value = True And Option13.Value = True Then Text1.Text = "Nu va potriviti sub nici un aspect. Aceasta aventura nu poate avea un final fericit. Mai e timp sa va razganditi." ElseIf Option7.Value = True And Option14.Value = True Then Text1.Text = "Relatie mediocra, fara mari furtuni, dar si fara stralucire. Daca iubirea dintre voi va fi suficient de mare, atunci ati avea oarecare sanse de reusita." ElseIf Option7.Value = True And Option15.Value = True Then

Page 44: Pce Edusoft

44

Text1.Text = "Sunteti complementari din toate punctele de vedere. Mariajul este o chestiune de timp." ElseIf Option7.Value = True And Option16.Value = True Then Text1.Text = "Sansele sunt de 50 %. Iubirea initiala ar putea sa se piarda pe drum sau sa devina foarte viguroasa in timp." ElseIf Option7.Value = True And Option17.Value = True Then Text1.Text = "O relatie sentimentala este prea putin probabila pt ca Leul considera ca aveti o fire cam labila. " ElseIf Option7.Value = True And Option18.Value = True Then Text1.Text = "Nu va agreati in mod deosebit, dar, daca vreti neaparat sa incercati, nu aveti decat. S-ar putea sa iesiti cam jumuliti." ElseIf Option7.Value = True And Option19.Value = True Then Text1.Text = "Sunt sanse mari de reusita, daca veti reusi sa vorbiti pe aceeasi lungime de unda!" ElseIf Option7.Value = True And Option20.Value = True Then Text1.Text = "Va cam enervati unul pe altul si, daca nu veti da dovada de mai multa intelegere reciproca, va veti desparti dupa un timp." ElseIf Option7.Value = True And Option21.Value = True Then Text1.Text = "Pe zi ce trece, relatia voastra va deveni tot mai puternica." ElseIf Option7.Value = True And Option22.Value = True Then Text1.Text = "Vorbiti limbi diferite, dar puteti ajunge la un oarecare consens, daca veti fi mai concesiv cu ea. Totusi, relatia nu va atinge cote prea inalte." ElseIf Option7.Value = True And Option23.Value = True Then Text1.Text = "Va asteapta clipe minunate impreuna. Sunteti o pereche de mare succes!" ElseIf Option7.Value = True And Option24.Value = True Then Text1.Text = "O legatura durabila, puternica si fericita." ElseIf Option8.Value = True And Option13.Value = True Then Text1.Text = "Mare noroc ca v-ati intalnit! Aveti toate sansele de fericire." ElseIf Option8.Value = True And Option14.Value = True Then Text1.Text = "Chiar daca veti incerca imposibilul, aceasta relatie nu are sorti de izbanda. Veti cheltui timp si energie degeaba." ElseIf Option8.Value = True And Option15.Value = True Then Text1.Text = "Este o relatie modesta, mai putin din punct de vedere profesional, unde veti colabora excelent. Din pacate, este prea putin." ElseIf Option8.Value = True And Option16.Value = True Then Text1.Text = "O relatie excelenta, ambii nativi potrivindu-se din toate punctele de vedere. Casa de piatra!" ElseIf Option8.Value = True And Option17.Value = True Then Text1.Text = "Chiar daca va respectati reciproc, nu reusiti sa comunicati pe plan sentimental. Opriti-va la timp!" ElseIf Option8.Value = True And Option18.Value = True Then Text1.Text = "Compromisuri peste compromisuri! Nu aceasta este calea spre fericire!" ElseIf Option8.Value = True And Option19.Value = True Then Text1.Text = "Nimic nu va sta in cale! Intre voi este o potrivire perfecta. " ElseIf Option8.Value = True And Option20.Value = True Then Text1.Text = "Agonie si extaz! Acestea sunt coordonatele unei astfel de relatii. Daca aveti nervii tari, atunci puteti sa incercati!" ElseIf Option8.Value = True And Option21.Value = True Then Text1.Text = "Aceasta relatie este cat se poate de anodina. Nu straluceste prin nimic, dar nici nu se remarca prin ceva deosebit. Daca va place linistea si anonimatul, atunci v-ati gasit perechea ideala!" ElseIf Option8.Value = True And Option22.Value = True Then Text1.Text = "Chiar daca exista dificultati de comunicare la inceput, cu timpul veti reusi sa le depasiti si sa formati o pereche foarte bine sudata." ElseIf Option8.Value = True And Option23.Value = True Then Text1.Text = "Intr-adevar, ati gasit femeia potrivita! Veti avea o relatie completa, atat in plan sentimental, cat si profesional." ElseIf Option8.Value = True And Option24.Value = True Then Text1.Text = "Cu toate ca sunteti compatibili,dupa un timp ati putea avea mari disensiuni asupra unor probleme grave, pe care ati tot amanat sa le rezolvati."

Page 45: Pce Edusoft

45

ElseIf Option9.Value = True And Option13.Value = True Then Text1.Text = "Daca nu va produceti necazuri unul altuia, o astfel de pereche nu va intalni nici o piedica in viata. Putina rabdare si fericirea si multumirea vor veni!" ElseIf Option9.Value = True And Option14.Value = True Then Text1.Text = "Posesivi si materialisti in aceeasi masura, vor reusi sa aiba o relatie excelenta, bazata pe admiratie." ElseIf Option9.Value = True And Option15.Value = True Then Text1.Text = "Nici macar sa nu va ganditi! Sunteti atat de diferiti, incat nu merita efortul." ElseIf Option9.Value = True And Option16.Value = True Then Text1.Text = "Daca aveti suficienti bani pt a satisface capriciile unei astfel de sotii, precum si o rabdare colosala, n-aveti decat sa incercati!" ElseIf Option9.Value = True And Option17.Value = True Then Text1.Text = "Pt cei din jurul d-voastra, fericirea si bunastarea pe care le veti avea sunt de invidiat." ElseIf Option9.Value = True And Option18.Value = True Then Text1.Text = "Cel mai bine ar fi sa nu va intalniti! Cu firea ei analitica si extrem de critica, nu veti avea nici macar o ora linistita." ElseIf Option9.Value = True And Option19.Value = True Then Text1.Text = "Daca sunteti dispus la compromisuri si nu va deranjeaza banalitatea, puteti incerca!" ElseIf Option9.Value = True And Option20.Value = True Then Text1.Text = "Amandoi sunteti plini de viata, dar, pt a avea o casnicie fericita, trebuie sa aveti si o motivatie concreta. Altfel, numarul divorturilor va creste cu inca unul." ElseIf Option9.Value = True And Option21.Value = True Then Text1.Text = "O relatie afectuoasa si constiincioasa: ambii fiind doi oameni foarte calculati, arareori se vor intalni cu pasiunea." ElseIf Option9.Value = True And Option22.Value = True Then Text1.Text = "Da! Iata o relatie extrem de fericita pt ambii parteneri." ElseIf Option9.Value = True And Option23.Value = True Then Text1.Text = "O relatie armonioasa si reusita, daca ea va avea mai mult tact, iar el va fi mai putin critic." ElseIf Option9.Value = True And Option24.Value = True Then Text1.Text = "Cu toate ca sunteti legati afectiv, sinceritatea sentimentelor nu ii va ajuta prea mult." ElseIf Option10.Value = True And Option13.Value = True Then Text1.Text = "Ambii au caractere deosebit de puternice, dar pot convetui pasnic avand in vedere respectul reciproc de care dau dovada." ElseIf Option10.Value = True And Option14.Value = True Then Text1.Text = "Este una din cele mai bune legaturi posibile. Veti forma o echipa redutabila si un cuplu fericit." ElseIf Option10.Value = True And Option15.Value = True Then Text1.Text = "Cel mai bine este sa fiti doar prieteni. Singura colaborare posibila este cea in plan profesional." ElseIf Option10.Value = True And Option16.Value = True Then Text1.Text = "Nici macar sa nu incercati! Sunteti cu mult prea diferiti!" ElseIf Option10.Value = True And Option17.Value = True Then Text1.Text = "Nu este o legatura prea grozava. Leul il scoate din sarite pe Capricorn, care poate sa izbucneasca, producand adevarate dezastre in jur." ElseIf Option10.Value = True And Option18.Value = True Then Text1.Text = "Daca relatia cu un Taur este cotata ca foarte buna, aflati ca cea cu o nativa a zodiei Fecioara este exceptionala! Intelegerea dintre cei doi este totala." ElseIf Option10.Value = True And Option19.Value = True Then Text1.Text = "Nu aveti prea multe de impartit, astfel incat relatia dintre d-voastra va fi, in cel mai bun caz, mediocra. " ElseIf Option10.Value = True And Option20.Value = True Then Text1.Text = "Nimic nu pare sa va atraga unul spre celalalt, dar, daca reusiti sa va cunoasteti unul pe celalalt, putetispune ca a dat norocul peste d-voastra!" ElseIf Option10.Value = True And Option21.Value = True Then

Page 46: Pce Edusoft

46

Text1.Text = "Un mariaj de exceptie! Armonie, liniste, intelegere, succes. Dar, pt ca exista si un mic 'dar', este posibil la un moment dat ca Capricornul sa fie iritat de oportunismul Sagetatorului. " ElseIf Option10.Value = True And Option22.Value = True Then Text1.Text = "In general, relatia va fi dominata de sentimentul prieteniei. Poate exista un mariaj gen 'cooperare', dar nu pe termen lung. Daca totusi vreti sa izbanditi, stabiliti mai intai cine e 'seful'!" ElseIf Option10.Value = True And Option23.Value = True Then Text1.Text = "Pt inceput, Capricornul ar putea fi fascinat de personalitatea Varsatorului. Dar vraja sa va sfarama repede, pt ca Capricornul va fi iritat de manifestarile libertine ale Varsatorului." ElseIf Option10.Value = True And Option24.Value = True Then Text1.Text = "Intre cei doi nativi pot exista animozitati, dar vor fi in stare sa treaca peste ele. Totusi, cele mai bune raporturi intre Capricorn si Pesti sunt cele in plan profesional. " ElseIf Option11.Value = True And Option13.Value = True Then Text1.Text = "Daca stabiliti de la inceput cine este seful, atunci aveti sanse." ElseIf Option11.Value = True And Option14.Value = True Then Text1.Text = "Puteti fi fascinat de un 'Taur', dar nu pt mult timp. Au loc prea multe certuri intre d-voastra." ElseIf Option11.Value = True And Option15.Value = True Then Text1.Text = "Ati gasit combinatia ideala. Spuneti 'da' fara nici un fel de ezitare!" ElseIf Option11.Value = True And Option16.Value = True Then Text1.Text = "Daca veti da dovada de diplomatie si de maleabilitate, puteti deveni un cuplu de invidiat." ElseIf Option11.Value = True And Option17.Value = True Then Text1.Text = "Poate exista o atractie la inceput, dar conflictele apar rapid si nu pot fi aplanate. Despartirea este iminenta." ElseIf Option11.Value = True And Option18.Value = True Then Text1.Text = "Nu comunicati bine si aveti interese diferite. Nu prea aveti sanse de reusita." ElseIf Option11.Value = True And Option19.Value = True Then Text1.Text = "O legatura de aur! Nu putem decat sa va dorim viata lunga." ElseIf Option11.Value = True And Option20.Value = True Then Text1.Text = "O astfel de relatie nu poate fi decat foarte buna sau foarte proasta, cale de mijloc nu exista." ElseIf Option11.Value = True And Option21.Value = True Then Text1.Text = "Ceva nu se leaga intre voi. Poate ar fi bine sa renuntati." ElseIf Option11.Value = True And Option22.Value = True Then Text1.Text = "Cel mai bine este sa nu va intalniti. Sunteti atat de diferiti, incat, oricat de mult credeti ca va iubiti, tot nu veti reusi." ElseIf Option11.Value = True And Option23.Value = True Then Text1.Text = "Singura d-voastra problema ar fi banii. Daca reusiti sa tineti bine fraiele compartimentului financiar, atunci veti avea o relatie minunata." ElseIf Option11.Value = True And Option24.Value = True Then Text1.Text = "Cam greu, dar este totusi posibil, daca reusiti sa gasiti calea de mijloc." ElseIf Option12.Value = True And Option13.Value = True Then Text1.Text = "Oricat de surprinzatoare ar parea, o astfel de relatie este totusi posibila, in ciuda diferentelor notabile intre caracterele celor doi." ElseIf Option12.Value = True And Option14.Value = True Then Text1.Text = "Chiar daca sunteti construiti la fel, comunicarea merge foarte prost. Unul dintre voi ar trebui sa cedeze." ElseIf Option12.Value = True And Option15.Value = True Then Text1.Text = "Conflictele dintre d-voastra vor face deliciul vecinilor. Este o pierdere de timp incercarea de a mentine o astfel de relatie." ElseIf Option12.Value = True And Option16.Value = True Then Text1.Text = "Este relatia ideala din toate punctele de vedere. Veti fi fericiti impreuna si veti avea multe reusite." ElseIf Option12.Value = True And Option17.Value = True Then Text1.Text = "Chiar nu aveti nici un punct comun. Este mai bine sa spuneti 'NU' de la bun inceput."

Page 47: Pce Edusoft

47

ElseIf Option12.Value = True And Option18.Value = True Then Text1.Text = "Veti cauta sa va dominati reciproc, reusind sa produceti doar dezastre. Cel mai bine este sa va vedeti fiecare de drum." ElseIf Option12.Value = True And Option19.Value = True Then Text1.Text = "Raporturile dintre d-voastra sunt excelente. Comunicati foarte bine si veti avea foarte multe realizari." ElseIf Option12.Value = True And Option20.Value = True Then Text1.Text = "Este una din cele mai bune relatii ale Pestelui. Intre d-voastra chiar poate exista iubirea." ElseIf Option12.Value = True And Option21.Value = True Then Text1.Text = "Predomina sentimentul de prietenie si de respect reciproc. Dragostea nu este punctul forte al acestei relatii." ElseIf Option12.Value = True And Option22.Value = True Then Text1.Text = "Puteti sa va gasiti multe puncte comune de interes, dar, pt ca legatura sa reziste, sentimentele trebuie sa fie foarte puternice." ElseIf Option12.Value = True And Option23.Value = True Then Text1.Text = "Numai diplomatia Pestelui nu este suficienta pt a avea o relatie armonioasa. Lipseste increderea intre parteneri." ElseIf Option12.Value = True And Option24.Value = True Then Text1.Text = "Daca partenerii nu s-ar miorlai atat si ar fi mai atenti la nevoile celuilalt, atunci relatia ar putea merge foarte bine. " End If End Sub

5. Realizati un program care sa scrie intr-o caseta de text lunile cand se culeg fructele selectate din lista de tip Combo. Rezolvare:

Page 48: Pce Edusoft

48

Private Sub Command1_Click() If fructe.Text = "alune" Then Text1.Text = "se culeg in luna august" ElseIf fructe.Text = "mere" Then Text1.Text = "se culeg vara si toamna in functie de soiul lor" ElseIf fructe.Text = "pere" Then Text1.Text = "se culeg vara si toamna in functie de soiul lor " ElseIf fructe.Text = "struguri" Then Text1.Text = "se culeg in lunile: august, septembrie si octombrie" ElseIf fructe.Text = "gutui" Then Text1.Text = "se culeg in noiembrie" ElseIf fructe.Text = "prune" Then Text1.Text = "se culeg in lunile: septembrie, octombrie" ElseIf fructe.Text = "perje" Then Text1.Text = "se culeg in lunile: septembrie, octombrie" ElseIf fructe.Text = "cirese" Then Text1.Text = "se culeg in lunile: mai, iunie" ElseIf fructe.Text = "visine" Then Text1.Text = "se culeg la sfarsitul lunii iunie" ElseIf fructe.Text = "piersici" Then Text1.Text = "se culeg in luna iulie" ElseIf fructe.Text = "caise" Then Text1.Text = "se culeg in luna iulie" ElseIf fructe.Text = "zarzare" Then Text1.Text = "se culeg in luna iulie" ElseIf fructe.Text = "pepeni" Then Text1.Text = "se culeg in luna august" ElseIf fructe.Text = "capsuni" Then Text1.Text = "se culeg in lunile: iunie,iulie" ElseIf fructe.Text = "fragi" Then Text1.Text = "se culeg in lunile: iunie,iulie" ElseIf fructe.Text = "zmeura" Then Text1.Text = "se culege in luna august" ElseIf fructe.Text = "nuci" Then Text1.Text = "se culeg in luna octombrie" ElseIf fructe.Text = "mure" Then Text1.Text = "se culeg la sfarsitul lunii octombrie" ElseIf fructe.Text = "dude" Then Text1.Text = "se culeg in lunile: iunie,iulie" End If End Sub

Page 49: Pce Edusoft

49

6. Faceti un program care sa calculeze echivalentul in lei a celor 5 monede (euro, lira sterlina, $ american, $ australian, $ canadian). Tot in acest program realizati un meniu care sa incarce o a doua forma in care sa fie scris cursul zilei al valutei. Rezolvare: Se vor crea doua forme: • Form1 ce contine cinci cadre, fiecare cadru avand cate doua casete de text si un buton de

comanda; de asemenea, in Form1 va fi si un element de meniu "Curs valutar"->"Cursul zilei"; • Form2 ce contine un tabel cu doua coloane si 6 randuri (un rand - capul tabelului si 5 randuri

pentru cele cinci valute).

Codul din prima forma (Form1) va fi: Private Sub Command1_Click()

Text2.Text = Text1.Text * 28500 End Sub Private Sub Command2_Click()

Text8.Text = Text7.Text * 37500 End Sub Private Sub Command3_Click()

Text4.Text = Text3.Text * 54000 End Sub

Page 50: Pce Edusoft

50

Private Sub Command4_Click() Text6.Text = Text5.Text * 22000

End Sub Private Sub Command5_Click()

Text10.Text = Text9.Text * 23200 End Sub Private Sub mnuCursvalutarCursulzilei_Click()

Load Form2 Form2.Enabled = True Form2.Show

End Sub

Codul lui Form2 va fi cel de mai jos. Evident, valorile se vor modifica din program, in functie de cursul valutare al zilei respective.

Private Sub Form_Load()

T.ColWidth(0) = T.ColWidth(0) * 2 T.TextMatrix(0, 0) = "Moneda de schimb" T.TextMatrix(0, 1) = "Cursul zilei" T.TextMatrix(1, 0) = "Euro" T.TextMatrix(2, 0) = "$ american" T.TextMatrix(3, 0) = "Lira sterlina" T.TextMatrix(4, 0) = "$ australian" T.TextMatrix(5, 0) = "$ canadian" T.TextMatrix(1, 1) = "37500" T.TextMatrix(2, 1) = "28500" T.TextMatrix(3, 1) = "54000" T.TextMatrix(4, 1) = "22000" T.TextMatrix(5, 1) = "23200"

End Sub

7. Realizati un program care dupa scrierea oricarei luni a anului intr-o caseta de text si la tastarea butonului de comanda sa afiseze denumirea populara corespunzatoare lunii respective. Rezolvare:

Private Sub Command1_Click()

If Text1.Text = "ianuarie" Then Text2.Text = "Gerar" ElseIf Text1.Text = "februarie" Then Text2.Text = "Faurar" ElseIf Text1.Text = "martie" Then

Page 51: Pce Edusoft

51

Text2.Text = "Martisor" ElseIf Text1.Text = "aprilie" Then Text2.Text = "Prier" ElseIf Text1.Text = "mai" Then Text2.Text = "Florar" ElseIf Text1.Text = "iunie" Then Text2.Text = "Ciresar" ElseIf Text1.Text = "iulie" Then Text2.Text = "Cuptor" ElseIf Text1.Text = "august" Then Text2.Text = "Gustar" ElseIf Text1.Text = "septembrie" Then Text2.Text = "Rapciune " ElseIf Text1.Text = "Octombrie" Then Text2.Text = "Brumarel" ElseIf Text1.Text = "noiembrie" Then Text2.Text = "Brumar" ElseIf Text1.Text = "decembrie" Then Text2.Text = "Undrea" End If

End Sub 8. Faceti programul ecuatiei de gradul I ax+b=0. Rezolvare: Private Sub Command1_Click()

If a = 0 Then If b = 0 Then MsgBox "identitate 0=0", vbExclamation, "Atentie" Else MsgBox "egalitate imposibila", vbExclamation, "Atentie" End If Else

rezultat.Text = -b / a End If

End Sub Private Sub Command2_Click()

a.Text = "" b.Text = "" rezultat.Text = ""

End Sub

9. Faceti programul ecuatiei de gradul II ax2+bx+c=0. Rezolvare: Private Sub buton_Click() If a.Text = 0 Then

Page 52: Pce Edusoft

52

If b.Text = 0 Then If Val(c.Text) = 0 Then

MsgBox "identitate 0=0", vbInformation Else

MsgBox "egalitate imposibila", vbInformation End If

Else x.Text = Val(-c.Text) / Val(b.Text)

End If Else

delta.Text = Val(b.Text) * Val(b.Text) - 4 * Val(a.Text) * Val(c.Text) End If If Val(delta.Text) > 0 Then

x1.Text = (-Val(b.Text) - Val(Sqr(delta.Text))) / (2 * Val(a.Text)) x2.Text = (-Val(b.Text) + Val(Sqr(delta.Text))) / (2 * Val(a.Text))

Else If Val(delta.Text) = 0 Then

x.Text = -Val(b.Text) / (2 * Val(a.Text)) Else

MsgBox "Ecuatia nu are solutii", vbInformation, "Atentie!!!" End If

End If End Sub

10. Realizati un program care sa afiseze intr-o caseta de text informatii ce particularizeaza fiecare tara selectata din lista de tip Combo. Rezolvare: Private Sub Command1_Click() If tara.Text = "Canada" Then

Text1.Text = "tara Marilor Lacuri" ElseIf tara.Text = "S.U.A." Then

Text1.Text = "se gaseste Marele Canion" ElseIf tara.Text = "Mexic" Then

Text1.Text = "este cea mai veche civilizatie existenta-Imperiul Maya-din Pen. Yutacan" ElseIf tara.Text = "Venezuela" Then

Text1.Text = "tara pestilor electrici, in fluviul Orinoco" ElseIf tara.Text = "Brazilia" Then

Text1.Text = "are cea mai mare jungla existenta (Jungla Amazonului)" ElseIf tara.Text = "Columbia" Then

Text1.Text = "are capitala situata la cea mai mare inaltime-Bogota" ElseIf tara.Text = "Peru" Then

Text1.Text = "se gaseste lacul cu o linie navigabila la cea mai mare altitudine (L. Titicaca-3812m)" ElseIf tara.Text = "China" Then

Text1.Text = "are cea mai mare populatie de pe glob" ElseIf tara.Text = "Rusia" Then

Text1.Text = "este cel mai intins stat de pe glob" ElseIf tara.Text = "India" Then

Text1.Text = "al doilea stat ca populatie de pe glob" ElseIf tara.Text = "Indonezia" Then

Text1.Text = "este cel mai intins stat insular" ElseIf tara.Text = "Japonia" Then

Text1.Text = "este tara cu cea mai mare activitate seismica" ElseIf tara.Text = "Australia" Then

Text1.Text = "este tara marsupialelor" ElseIf tara.Text = "Spania" Then

Text1.Text = "este cea mai productiva tara europeana d.p.v. agricol" ElseIf tara.Text = "U.K." Then

Page 53: Pce Edusoft

53

Text1.Text = "tara prin care trece meridianul de 0 grade (Greendwich)" ElseIf tara.Text = "Franta" Then

Text1.Text = "este renumita prin Turnul Eiffel (peste 300m)" ElseIf tara.Text = "Italia" Then

Text1.Text = "aici se gaseste orasul laguna (Venetia)" ElseIf tara.Text = "Romania" Then

Text1.Text = "se remarca prin Delta Dunarii-cea mai bogata delta in flora si fauna din Europa" ElseIf tara.Text = "Turcia" Then

Text1.Text = "se afla orasul Istambul, situat pe doua continente" ElseIf tara.Text = "Egipt" Then

Text1.Text = "tara piramidelor" ElseIf tara.Text = "Etiopia" Then

Text1.Text = "tara eucaliptilor" ElseIf tara.Text = "Nigeria" Then

Text1.Text = "este cea mai populata tara africana" ElseIf tara.Text = "R.D. Congo" Then

Text1.Text = "tara diamantelor" ElseIf tara.Text = "Africa de Sud" Then

Text1.Text = "tara aurului" ElseIf tara.Text = "Norvegia" Then

Text1.Text = "tara fiordurilor abisale" End If End Sub

11. Sa se faca un program care sub comanda unui buton sa deschida o caseta de preluare a datelor de la utilizator referitoare la greutatea unei persoane, iar la apasarea butonului OK sa se deschida o caseta in care sa scrie: “Greutatea d-voastra este de…” cate kg au fost scrise in caseta anterioara. Rezolvare: Private Sub Greutate_Click() Dim intgreutate As Integer intgreutate = InputBox("Introduceti greutatea dumneavoastra: ", "Culegere date") If intgreutate >= 100 Then MsgBox "Greutatea dumneavoastra este de: " & intgreutate & " kg.Sunteti un om cu greutate!", vbInformation, "Greutate" Else MsgBox "Greutatea dumneavoastra este de: " & intgreutate & " kg.", vbInformation, "Greutate" End If End Sub 12. Sa se realizeze un program care sa scrie intr-o caseta de text tarile in care se vorbeste limba selectata din lista de tip Combo. Rezolvare:

Page 54: Pce Edusoft

54

Private Sub Command1_Click() If limbi.Text = "araba" Then Text1.Text = "Emiratele Arabe Unite, Oman, Siria, Israel, Iordania, Yemen, Arabia Saudita, Egipt, Sudan, Etiopia,Tunisia, Maroc" ElseIf limbi.Text = "engleza" Then Text1.Text = "U.K., S.U.A., Canada, Australia, Noua Zeelanda, Africa de Sud, Guyana Engleza" ElseIf limbi.Text = "chineza" Then Text1.Text = "China, Taiwan, Hong Kong" ElseIf limbi.Text = "franceza" Then Text1.Text = "Franta, Canada, Elvetia, Guyana Franceza" ElseIf limbi.Text = "hindi" Then Text1.Text = "India, Bhutan, Bangladesh, Sri Lanka" ElseIf limbi.Text = "indoneza" Then Text1.Text = "Indonezia, Madagascar, Filipine, Malaysia, Brunei" ElseIf limbi.Text = "japoneza" Then Text1.Text = "Japonia" ElseIf limbi.Text = "papuana" Then Text1.Text = "Papua-Noua Guinee, Australia" ElseIf limbi.Text = "persana" Then Text1.Text = "Iran, Afghanistan, Pakistan" ElseIf limbi.Text = "portugheza" Then Text1.Text = "Brazilia, Portugalia" ElseIf limbi.Text = "somaleza" Then Text1.Text = "Somalia, Djibouti, Kenya" ElseIf limbi.Text = "spaniola" Then Text1.Text = "Spania, Mexic, Venezuela, Columbia, Ecuador, Peru, Chile, Argentina, Paraguay, Uruguay, Panama, Costa Rica, Cuba" ElseIf limbi.Text = "swahili" Then Text1.Text = "Camerun, R.D. Congo, Gabon, Congo, Uganda, Tanzania, Zambia, Mozambic, Malawi, Angola, Ruanda, Burundi" ElseIf limbi.Text = "turca" Then Text1.Text = "Turcia" End If End Sub

13. Sa se faca un program care sa calculeze media aritmetica a trei numere. Rezolvare:

Private Sub Command1_Click() media.Text = Val(Val(a.Text) + Val(b.Text) + Val(c.Text)) / 3

End Sub

14. Sa se realizeze un program sub comanda unui buton Sfat care la apasarea lui sa scrie pe el: “Un mar pe zi te scuteste de mers la doctor”. Rezolvare: Private Sub buton_Click()

buton.Caption = "Un mar pe zi te scuteste de mers la doctor" End Sub 15. Sa se faca un program care sa scrie intr-o caseta de text continentul aferent tarii selectate din lista de tip Combo. Rezolvare:

Page 55: Pce Edusoft

55

Private Sub Command1_click() If tari.Text = "Angola" Then

Text1.Text = "esti african" ElseIf tari.Text = "Suedia" Then

Text1.Text = "esti european" ElseIf tari.Text = "S.U.A." Then

Text1.Text = "esti din America de Nord" ElseIf tari.Text = "Arabia Saudita" Then

Text1.Text = "esti asiatic" ElseIf tari.Text = "Argentina" Then

Text1.Text = "esti din America de Sud" ElseIf tari.Text = "Australia" Then

Text1.Text = "esti australian" ElseIf tari.Text = "Bolivia" Then

Text1.Text = "esti din America de Sud" ElseIf tari.Text = "Bulgaria" Then

Text1.Text = "esti european" ElseIf tari.Text = "Canada" Then

Text1.Text = "esti din America de Nord" ElseIf tari.Text = "Chile" Then

Text1.Text = "esti din America de Sud" ElseIf tari.Text = "China" Then

Text1.Text = "esti asiatic" ElseIf tari.Text = "Columbia" Then

Text1.Text = "esti din America de Sud" ElseIf tari.Text = "Congo" Then

Text1.Text = "esti african" ElseIf tari.Text = "Danemarca" Then

Text1.Text = "esti european" ElseIf tari.Text = "Egipt" Then

Text1.Text = "esti african" ElseIf tari.Text = "Etiopia" Then

Text1.Text = "esti african" ElseIf tari.Text = "Franta" Then

Text1.Text = "esti european" ElseIf tari.Text = "Grecia" Then

Text1.Text = "esti european" ElseIf tari.Text = "India" Then

Text1.Text = "esti asiatic" ElseIf tari.Text = "Indonezia" Then

Text1.Text = "esti asiatic" ElseIf tari.Text = "Irak" Then

Text1.Text = "esti asiatic" ElseIf tari.Text = "Iran" Then

Text1.Text = "esti asiatic"

Page 56: Pce Edusoft

56

ElseIf tari.Text = "Italia" Then Text1.Text = "esti european"

ElseIf tari.Text = "Japonia" Then Text1.Text = "esti asiatic"

ElseIf tari.Text = "Libia" Then Text1.Text = "esti asiatic"

ElseIf tari.Text = "Norvegia." Then Text1.Text = "esti european"

ElseIf tari.Text = "Maroc" Then Text1.Text = "esti african"

ElseIf tari.Text = "Mexic" Then Text1.Text = "esti din America Centrala"

ElseIf tari.Text = "Mongolia" Then Text1.Text = "esti asiatic"

ElseIf tari.Text = "Peru" Then Text1.Text = "esti din America de Sud"

ElseIf tari.Text = "Polonia" Then Text1.Text = "esti european"

ElseIf tari.Text = "Romania" Then Text1.Text = "esti european"

ElseIf tari.Text = "Rusia" Then Text1.Text = "esti european daca locuiesti in vestul Muntilor Ural si

asiatic daca locuiesti in estul lor" ElseIf tari.Text = "Sudan" Then

Text1.Text = "esti african" ElseIf tari.Text = "Spania" Then

Text1.Text = "esti european" ElseIf tari.Text = "Turcia" Then

Text1.Text = "esti asiatic" ElseIf tari.Text = "Venezuela" Then

Text1.Text = "esti din America de Sud" End If End Sub Private Sub Command2_Click()

Text1.Text = "" End Sub 16. Faceti un program care sub comanda unui buton sa deschida o caseta de preluare a datelor de la utilizator referitoare la varsta unei persoane, iar la apasarea butonului OK sa se deschida o caseta in care scrie: “Aveti varsta de…” cati ani au fost scrisi in caseta anterioara. Rezolvare: Private Sub Command1_Click() Dim intvarsta As String intvarsta = InputBox("Introduceti varsta dumneavoastra: ", "Culegere date") MsgBox "Aveti varsta de: " & intvarsta & " ani.", vbInformation, "Varsta" End Sub

17. Sa se faca un program care sa afiseze intr-o eticheta valoarea atinsa la executie pe o bara de derulare verticala. Aceasta valoare reprezinta data de nastere a unei persoane. In acelasi timp sa scrie intr-o caseta se text: “Ziua d-voastra de nastere este…” respectiva data aleasa. Rezolvare: Amplasati pe forma o caseta de text si o bara de derulare verticala, pentru care stabiliti proprietatea min la valoarea 1 si max la valoarea 31. Apoi scrieti urmatoarea subrutina: Private Sub VScroll1_Change()

Page 57: Pce Edusoft

57

Label1.Caption = VScroll1.Value Text1.Text = "Ziua dumneavoastra de nastere este " & Label1.Caption

End Sub

18. Sa se realizeze un program care la apasarea unui buton sa afiseze intr-o caseta de text denumirea in zodiacul chinezesc si caracteristicile zodiei scrise Rezolvare: Dupa ce pe forma veti amplasa trei casete de text (Text1 - pentru zodia clasica (zodiac european), Text2 pentru caracteristici si Text3 pentru zodia din zodiacul chinezesc) si un buton Command1, veti scrie urmatorul cod: Private Sub Command1_Click() If Text1.Text = "berbec" Then Text3.Text = "dragon" ElseIf Text1.Text = "taur" Then Text3.Text = "sarpe" ElseIf Text1.Text = "gemeni" Then Text3.Text = "cal" ElseIf Text1.Text = "rac" Then Text3.Text = "oaie" ElseIf Text1.Text = "leu" Then Text3.Text = "maimuta" ElseIf Text1.Text = "fecioara" Then Text3.Text = "cocos" ElseIf Text1.Text = "balanta" Then Text3.Text = "caine" ElseIf Text1.Text = "scorpion" Then Text3.Text = "mistret" ElseIf Text1.Text = "sagetator" Then Text3.Text = "sobolan" ElseIf Text1.Text = "capricorn" Then Text3.Text = "bivol" ElseIf Text1.Text = "varsator" Then Text3.Text = "tigru" ElseIf Text1.Text = "pesti" Then Text3.Text = "iepure" End If If Text1.Text = "berbec" Then Text2.Text = "Barbatul este: mandru, sincer, tenace, impetuos are o energie inepuizabila, uraste minciuna, iute la manie. Femeia este: rationala, pasionala, mandra, voluntara." ElseIf Text1.Text = "taur" Then Text2.Text = "Barbatul este: inteligent, intelept, siret om de afaceri, imprevizibil, norocos. Femeia Sarpe este considerata femeia fatala." ElseIf Text1.Text = "gemeni" Then Text2.Text = "Barbatul este: foarte popular, agreabil, inzestrat cu multa inteligenta; este cel mai rapid semn zodiacal. Femeia este: inteligenta, vioaie, mereu in miscare, are nevoie de libertate si aventura." ElseIf Text1.Text = "rac" Then Text2.Text = "Barbatul este: o fire blanda, dotat cu un puternic simt artistic. Femeia este: foarte cocheta si curata, fragila si deseori timida, ii place sa fie alintata." ElseIf Text1.Text = "leu" Then Text2.Text = "Barbatul este: ager, vesel, sociabil, inventiv, mare strateg, dotat cu logica si originalitate. Femeia este: naturala, vesela, independenta, provocatoare, excelenta gospodina, prudenta si rationala." ElseIf Text1.Text = "fecioara" Then

Page 58: Pce Edusoft

58

Text2.Text = "Barbatul este: sincer, bine intentionat, foarte mandru, ii place sa contrazica. Femeia este: energica, ordonata, discreta, amabila si exigenta." ElseIf Text1.Text = "balanta" Then Text2.Text = "Barbatul este: inzestrat cu un suflet nobil, onest, amabil, reprezinta o permanenta atractie pt femei. Femeia este: naturala, calda, fara inhibitii." ElseIf Text1.Text = "scorpion" Then Text2.Text = "Barbatul este: cinstit, simplu, hotarat, curajos, viril, plin de energie si altruist. Femeia este: modesta si rezervata, risipitoare si vulnerabila la deceptii." ElseIf Text1.Text = "sagetator" Then Text2.Text = "Barbatul este: muncitor, econom, ambitios, lacom si zgarcit. Femeia este: zgarcita si buna gospodina." ElseIf Text1.Text = "capricorn" Then Text2.Text = "Barbatul este: calm, metodic, rabdator, neobosit, incapatanat si introvertit.Femeia este: gospodina, harnica si devotata familiei, fidela si responsabila." ElseIf Text1.Text = "varsator" Then Text2.Text = "Barbatul este: dinamic, impulsiv, curajos, tenace, razbunator si optimist.Femeia este: mondena si cocheta, geloasa si posesiva, sensibila, romantica si pasionala." ElseIf Text1.Text = "pesti" Then Text2.Text = "Barbatul este: discret, linistit, introvertit, egoist, oportunist, lenes si snob. Femeia este: intelegatoare, placuta si rafinata si materialista" End If End Sub Mirela şi Ionuţ 19. Pe o forma faceti urmatoarele subrutine: • unul care la comanda unui buton sa adauge intr-o lista cifrele scrise intr-o caseta de text; • unul care sub comanda unui buton sa stearga toate elementele din lista; • unul care sub comanda unui buton sa adune elementele scrise in lista; • unul care sub comanda unui buton sa realizeze operatia de scadere din primul numar a sumei

celorlalte numere Rezolvare: Private Sub Command1_Click()

x = 0 For i = 0 To List1.ListCount

x = x + Val(List1.List(i)) Next i Text1.Text = Str(x)

End Sub Private Sub Command2_Click()

List1.AddItem Text1.Text Text1.Text = ""

End Sub Private Sub Command3_Click()

x = List1.List(0) For i = 1 To List1.ListCount

x = x - Val(List1.List(i)) Next i Text1.Text = Str(x)

End Sub Private Sub Command4_Click()

Page 59: Pce Edusoft

59

List1.Clear End Sub 20. Realizati un program care sub comanda unui buton sa afiseze intr-o caseta de text culoarea corespunzatoare amestecului rezultat in urma bifarii a doua butoane de optiune ce corespund celor doua culori. Tot aici scrieti un program care sub comanda unui buton sa arate culoarea scrisa in caseta de text. Rezolvare:

Private Sub Command1_Click() If Option1.Value = True And Option4.Value = True Then

Text1.Text = "verde" ElseIf Option1.Value = True And Option5.Value = True Then

Text1.Text = "bleu" ElseIf Option1.Value = True And Option6.Value = True Then

Text1.Text = "bleumarin" ElseIf Option2.Value = True And Option4.Value = True Then

Text1.Text = "orange" ElseIf Option2.Value = True And Option5.Value = True Then

Text1.Text = "roz" ElseIf Option2.Value = True And Option6.Value = True Then

Text1.Text = "grena sau visiniu" End If End Sub Private Sub Command2_Click() If Text1.Text = "verde" Then

Label1.BackColor = 32768 ElseIf Text1.Text = "bleu" Then

Label1.BackColor = 16777088 ElseIf Text1.Text = "bleumarin" Then

Label1.BackColor = 4194304 ElseIf Text1.Text = "orange" Then

Label1.BackColor = 33023 ElseIf Text1.Text = "roz" Then

Label1.BackColor = 16744703 ElseIf Text1.Text = "grena sau visiniu" Then

Label1.BackColor = 192 End If End Sub 21. Scrieti un program care la derularea barei orizontale de derulare sa afiseze intr-o eticheta valoarea ce se modifica mereu. Aceasta valoare reprezinta anul nasterii unei persoane 'Tot acest

Page 60: Pce Edusoft

60

program sa scrie intr-o caseta de text: "Sunteti nascut(a) in anul...". Pe aceasta forma scrieti o subrutina sub comanda unui buton care sa scrie intr-o caseta de text varsta persoanei respective. Rezolvare: Private Sub Command1_Click()

T = "Aveti varsta de: " & Val(2005 - Val(Label1.Caption)) & " ani." End Sub Private Sub HScroll1_Change()

Label1.Caption = HScroll1.Value Text1.Text = "Sunteti nascut(a) in anul " & Label1.Caption & "."

End Sub

22. Scrieti un program care in urma bifarii catorva casete de validare si la comanda unui buton sa apara intr-o caseta de text un text de forma: "Culorile tale preferate sunt: roz, alb..."; si daca nici o caseta de validare nu este bifata sa afiseze: "Culorile tale preferate nu se afla printre cele listate?". Rezolvare: Private Sub Command1_Click()

If Check1(0).Value = 1 Then T = T + Check1(0).Caption + ", " If Check1(1).Value = 1 Then T = T + Check1(1).Caption + ", " If Check1(2).Value = 1 Then T = T + Check1(2).Caption + ", " If Check1(3).Value = 1 Then T = T + Check1(3).Caption + ", " If Check1(4).Value = 1 Then T = T + Check1(4).Caption + ", " If Check1(5).Value = 1 Then T = T + Check1(5).Caption + ", " If Check1(6).Value = 1 Then T = T + Check1(6).Caption + ", " If Check1(7).Value = 1 Then T = T + Check1(7).Caption + ", " If Check1(8).Value = 1 Then T = T + Check1(8).Caption + ", " If Check1(9).Value = 1 Then T = T + Check1(9).Caption + ". " If T = "" Then

Text1.Text = "Culorile tale preferate nu sunt printre cele listate?" Else

Text1.Text = "Culorile tale preferate sunt: " + T End If

End Sub

Page 61: Pce Edusoft

61

23. Realizati un program sa afiseze in caption-ul unui buton de optiune daca un numar este sau nu divizibil cu 3 si/sau 5, iar rezultatele impartirii la 3 si 5 sa le afiseze in doua casete de text. Rezolvare: Private Sub Command1_Click()

If Text1.Text = "" Then MsgBox "Introduceti numarul", vbCritical, "Eroare"

Else If Text1.Text Mod 3 = 0 Then

Text2.Text = Text1.Text / 3 Else

Text2.Text = "" End If If Text2.Text <> "" Then Option1.Caption = "Este divizibil cu 3" Option1.Value = True Else Option1.Caption = "Nu-i divizibil cu 3" Option1.Value = False End If

End If End Sub Private Sub Command2_Click()

If Text1.Text = "" Then MsgBox "Introduceti numarul", vbCritical, "Eroare"

Else If Text1.Text Mod 5 = 0 Then Text3.Text = Text1.Text / 5 Else Text3.Text = "" End If If Text3.Text <> "" Then Option1.Caption = "Este divizibil cu 5" Option1.Value = True Else Option1.Caption = "Nu-i divizibil cu 5" Option1.Value = False End If

End If End Sub

Page 62: Pce Edusoft

62

24. 'Scrieti un program care sa afiseze intr-o eticheta valoarea atinsa la executie pe o bara de derulare orizontala. In acelasi timp sa scrie in caption-ul unei casete de validare daca numarul este par sau impar si pentru numerele pare sa bifeze caseta iar pentru cele impare nu. Rezolvare: Private Sub HScroll1_Change() Label1.Caption = HScroll1.Value If Val(Label1.Caption) Mod 2 = 0 Then Check1.Value = 1 Else Check1.Value = 0 End If If Check1.Value = 1 Then Check1.Caption = "Este numar par." Else Check1.Caption = "Este numar impar." End If If Val(Label1.Caption) = 0 Then Check1.Caption = "Este numar nul." End If End Sub

Page 63: Pce Edusoft

63

25. Faceti un program care sa sorteze conturile de venituri si cheltuieli si sa le aseze in liste separate. Rezolvare: Private Sub Command1_Click()

For i = 0 To List2.ListCount - 1 If Left(List2.List(i), 1) = 6 Then

Chelt.AddItem List2.List(i) Else

Ven.AddItem List2.List(i) End If

Next i End Sub

26. Scrieti un program care sa calculeze suma: S=1³+2³+3³+…+n³. Rezolvare: Private Sub Command1_Click()

S = 0 For i = 1 To n

S = S + i * i * i Next i Text2.Text = Str(S)

End Sub 27. Realizati un program care in urma selectarii prefixului, cuvantului radacina si sufixului, si la comanda unui buton sa afiseze cuvantul nou format intr-o caseta de text. Private Sub Command1_Click() If (prefix.Text = "im" And cuvrad.Text = "batran") And sufix.Text = "it" Then Text1.Text = "imbatranit" ElseIf (prefix.Text = "neim" And cuvrad.Text = "batran") And sufix.Text = "it" Then Text1.Text = "neimbatranit" ElseIf (prefix.Text = "neim" And cuvrad.Text = "batran") And sufix.Text = "it" Then Text1.Text = "neimbatranit" ElseIf (prefix.Text = "im" And cuvrad.Text = "batran") And sufix.Text = "esc" Then

Page 64: Pce Edusoft

64

Text1.Text = "imbatranesc" ElseIf cuvrad.Text = "batran" And sufix.Text = "esc" Then Text1.Text = "batranesc" ElseIf cuvrad.Text = "batran" And sufix.Text = "este" Then Text1.Text = "batraneste" ElseIf cuvrad.Text = "batran" And sufix.Text = "ete" Then Text1.Text = "batranete" ElseIf (cuvrad.Text = "flor" And prefix.Text = "in") And sufix.Text = "it" Then Text1.Text = "inflorit" ElseIf (cuvrad.Text = "flor" And prefix.Text = "in") And sufix.Text = "este" Then Text1.Text = "infloreste" ElseIf (cuvrad.Text = "flor" And prefix.Text = "nein") And sufix.Text = "it" Then Text1.Text = "neinflorit" ElseIf (cuvrad.Text = "flor" And prefix.Text = "in") And sufix.Text = "esc" Then Text1.Text = "infloresc" ElseIf cuvrad.Text = "flor" And sufix.Text = "icica" Then Text1.Text = "floricica" ElseIf cuvrad.Text = "flor" And sufix.Text = "ar" Then Text1.Text = "florar" ElseIf cuvrad.Text = "flor" And sufix.Text = "areasa" Then Text1.Text = "florareasa" ElseIf cuvrad.Text = "flor" And sufix.Text = "icele" Then Text1.Text = "floricele" End If If Text1.Text = "" Then MsgBox "Acest cuvant nu exista in DEX-ul limbii romane.", vbCritical, "Atentie!!!" End If End Sub 28. Realizati un program care in urma selectarii prefixului, cuvantului radacina si sufixului, si la comanda unui buton sa afiseze cuvantul nou format intr-o caseta de text. Rezolvare Private Sub Command1_Click() If (prefix.Text = "im" And cuvrad.Text = "batran") And sufix.Text = "it" Then Text1.Text = "imbatranit" ElseIf (prefix.Text = "neim" And cuvrad.Text = "batran") And sufix.Text = "it" Then Text1.Text = "neimbatranit" ElseIf (prefix.Text = "neim" And cuvrad.Text = "batran") And sufix.Text = "it" Then Text1.Text = "neimbatranit" ElseIf (prefix.Text = "im" And cuvrad.Text = "batran") And sufix.Text = "esc" Then Text1.Text = "imbatranesc" ElseIf cuvrad.Text = "batran" And sufix.Text = "esc" Then Text1.Text = "batranesc" ElseIf cuvrad.Text = "batran" And sufix.Text = "este" Then Text1.Text = "batraneste" ElseIf cuvrad.Text = "batran" And sufix.Text = "ete" Then Text1.Text = "batranete" ElseIf (cuvrad.Text = "flor" And prefix.Text = "in") And sufix.Text = "it" Then Text1.Text = "inflorit" ElseIf (cuvrad.Text = "flor" And prefix.Text = "in") And sufix.Text = "este" Then Text1.Text = "infloreste" ElseIf (cuvrad.Text = "flor" And prefix.Text = "nein") And sufix.Text = "it" Then

Page 65: Pce Edusoft

65

Text1.Text = "neinflorit" ElseIf (cuvrad.Text = "flor" And prefix.Text = "in") And sufix.Text = "esc" Then Text1.Text = "infloresc" ElseIf cuvrad.Text = "flor" And sufix.Text = "icica" Then Text1.Text = "floricica" ElseIf cuvrad.Text = "flor" And sufix.Text = "ar" Then Text1.Text = "florar" ElseIf cuvrad.Text = "flor" And sufix.Text = "areasa" Then Text1.Text = "florareasa" ElseIf cuvrad.Text = "flor" And sufix.Text = "icele" Then Text1.Text = "floricele" End If If Text1.Text = "" Then MsgBox "Acest cuvant nu exista in DEX-ul limbii romane.", vbCritical, "Atentie!!!" End If End Sub

Cătălin: Observatie. Pe pagina web a culegerii (http://stiinte.ub.ro/bogdan/cursuri/pce/indrumar) veti gasi un program complex, numit „Calculator universal”, realizat de Catalin, care realizeaza calcule de arii pentru figuri geometrice diferite, precum si alte calcule. 29. Aria trapezului Rezolvare

Private Sub Command1_Click() baza_mica = Val(Text1.Text) baza_mare = Val(Text2.Text)

Page 66: Pce Edusoft

66

inaltimea = Val(Text3.Text) aria = (baza_mica + baza_mare) * inaltimea / 2 Text4.Text = aria End Sub

30. Aria triunghiului folosind formula lui Heron Rezolvare:

Private Sub Command1_Click() a = Val(Text1.Text) b = Val(Text2.Text) c = Val(Text3.Text) p = (a + b + c) / 2 aria = Sqr(p * (p - a) * (p - b) * (p - c)) Text4.Text = aria End Sub

31. Aria unui triunghiu la care se cunoaste inaltimea si baza. Rezolvare

Private Sub Command1_Click() baza = Val(Text1.Text) inaltimea = Val(Text2.Text) aria = baza * inaltimea / 2 Text3.Text = aria End Sub

Page 67: Pce Edusoft

67

32. Aria si perimetrul cercului in functie de lungimea razei. Rezolvare:

Private Sub Command1_Click() Dim pi As Single pi = 3.1415926 raza = Val(Text1.Text) aria = pi * raza * raza perimetrul = 2 * pi * raza Text2.Text = aria Text3.Text = perimetrul End Sub

33. Aria dreptunghiului Rezolvare:

Private Sub Command1_Click() lat = Val(Text1.Text) lung = Val(Text2.Text) aria = lat * lung perim = 2 * (lat + lung) Text3.Text = aria Text4.Text = perim End Sub

Page 68: Pce Edusoft

68

34. Aria paralelogramului Rezolvare

Private Sub Command1_Click() baza = Val(Text2.Text) inaltimea = Val(Text1.Text) aria = baza * inaltimea Text3.Text = aria End Sub

35. Scrieti un program pentru a calcula, in functie de un numar natural n introdus de la tastatura, urmatoarele sume si produse:

S1 = 1+3+5+...+(2n-1) S2 = 1x2 + 2x3 + 3x4 + ... + nx(n+1) S3 = 1/1 + 1/.2 + 1/3 + ... + 1/n (S3 este numar real!) P1 = 1x2x3x...xn (n!) P2 = 1x3x5x...x(2n-1) P3 = 1 x 1/2 x 3 x 1/4 x .... (n factori, P3 este numar real!)

Rezolvare Amplasati in forma programului o caseta de text Text1 pentru introducerea valorii lui n si cate o caseta de text, Text2...Text7 pentru fiecare din valorile ce trebuie calculate. In final, amplasati un buton de comanda Command1 si scrieti urmatoarea subrutina: In loc de tipul Integer se poate folosi tipul Long (pentru numere intregi mai lungi, iar in loc de Single tipul Double pentru o precizie mai buna a numerelor reale). Private Sub Command1_Click() Dim n As Integer: Dim i As Integer Dim S1 As Integer: Dim S2 As Integer Dim S3 As Single: Dim P1 As Integer Dim P2 As Integer: Dim P3 As Single n=Val(Text1.Text) S1=0 For i=1 To n S1=S1+2*i-1 Next i

Page 69: Pce Edusoft

69

S2=0 For i=1 to n S2=S2+i*(i+1) Next i S3=0 For i=1 to n S3=S2+1/i Next i P1=1 For i=1 to n P1=P1*i Next i P2=1 For i=1 to n P2=P2*(2*i-1) Next i P3=1 For i=1 to n If i Mod 2 = 1 Then P3=P3*1/i

Else P3=P3*i End If Next i Text2.Text=S1 Text3.Text=S2 Text4.Text=S3 Text5.Text=P1 Text6.Text=P2 Text7.Text=P3

End If

Page 70: Pce Edusoft

70

Capitolul 3. Programe cu liste, casete de validare, butoane de opţiune şi tabele (Anca, Andreea) Anca 1.O forma contine :

• 2 liste: Numere si NumerePare • caseta de text Text1 • 2 butoane: Command1 si Command2

Sa se scrie doua subrutine asociate celor doua butoane astfel: • subrutina asociata evenimentului Click pe butonul Command2 care sa adauge in lista

Numere numerele scrise in caseta de text Text1. • subrutina asociata evenimentului Click pe butonul Command1 care sa copieze in lista

NumerePare numai numerele pare din lista Numere Rezolvare:

Private Sub Command1_Click() For i = 0 To Numere.ListCount - 1 If Numere.List(i) Mod 2 = 0 Then NumerePare.AddItem Numere.List(i) End If Next i End Sub Private Sub Command2_Click() Numere.AddItem Text1.Text End Sub

2. O forma contine:

• un vector de controale Check1 cu 6 componente, fiind etichetate cu denumiri din sport • un buton Buton1 cu Caption-ul “Ce sporturi practici?” • o caseta de text Text1

Page 71: Pce Edusoft

71

Sa se scrie subrutina asociata evenimentului Click pe butonul Buton1 care afiseaza in caseta de text sporturile selectate, separate prin virgule. Rezolvare

Private Sub Buton1_Click() x = "" For i = 0 To 5 If Check1(i).Value = 1 Then x = x + Check1(i).Caption + "," End If Next i Text1.Text = "Practici " + x End Sub

3. Sa se scrie un program care sa calculeze suma cu TVA, stiindu-se suma fara TVA si avand posibilitatea de a alege cota de impunere (19% sau 9%). Rezolvare:

Private Sub Command1_Click() If Option1.Value = True Then x = 0.09 * Text1.Text Else x = 0.19 * Text1.Text End If Text2.Text = Val(Text1.Text) + x End Sub

Page 72: Pce Edusoft

72

4. O forma contine:

• un tabel T • 2 casete de text: Text1 si Text2 • 2 etichete: Label 1 si Label 2 • un buton Command1 cu Caption-ul “Afiseaza anotimpul”

Tabelul are doua coloane, prima coloana contine nume de flori, iar a doua coloana numele anotimpului in care infloreste floarea respectiva. Sa se scrie subrutina asociata evenimentului Click pe butonul Command1 care, la introducerea in caseta de text Text1 a unui nume de floare , sa afiseze in caseta de text Text2 anotimpul in care aceasta infloreste sau, daca floarea nu exista in tabel sa afiseze acest lucru. Rezolvare: Private Sub Command1_Click() gasit = False For i = 1 To T.Rows - 1 If T.TextMatrix(i, 0) = Text1.Text Then Text2.Text = T.TextMatrix(i, 1) gasit = True End If Next i If gasit = False Then Text2.Text = "Nu exista aceasta floare" End If End Sub Private Sub Form_Load() T.ColWidth(0) = T.ColWidth(0) * 2 T.ColWidth(1) = T.ColWidth(1) * 2 T.TextMatrix(0, 0) = "Floare" T.TextMatrix(0, 1) = "Anotimp" End Sub Private Sub T_KeyPress(KeyAscii As Integer) If (KeyAscii = 8) And (T.Text <> "") Then L = Len(T.Text) T.Text = Left(T.Text, L - 1) Else

Option1

Option2

Text2

Text1

Command1

Page 73: Pce Edusoft

73

If KeyAscii >= 32 Then T.Text = T.Text + Chr$(KeyAscii) End If End If End Sub

5. O forma contine:

• un tabel T • o lista List1 • o caseta de text Text1 • un buton Command1 cu Caption-ul “Afiseaza”

In tabel se vor trece nume de autori intr-o coloana si operele acestora in cealalta. Sa se scrie subrutina care, la apasarea butonului Command1, sa afiseze in lista List1 toate operele autorului trecut in caseta Text1. Rezolvare: Private Sub Form_Load() T.ColWidth(0) = T.ColWidth(0) / 2 T.ColWidth(1) = T.ColWidth(1) * 2 T.ColWidth(2) = T.ColWidth(2) * 2 For i = 1 To T.Rows - 1 T.TextMatrix(i, 0) = i Next i T.TextMatrix(0, 0) = "Nr.crt" T.TextMatrix(0, 1) = "Autor" T.TextMatrix(0, 2) = "Titlu" End Sub Private Sub T_KeyPress(KeyAscii As Integer) If (KeyAscii = 8) And (T.Text <> "") Then L = Len(T.Text) T.Text = Left(T.Text, L - 1) Else If KeyAscii >= 32 Then T.Text = T.Text + Chr$(KeyAscii) End If End If End Sub Private Sub Command1_Click() List1.Clear

Page 74: Pce Edusoft

74

gasit = False For i = 1 To T.Rows - 1 If Left(T.TextMatrix(i, 1), Len(Text1.Text)) = Text1.Text Then List1.AddItem T.TextMatrix(i, 2) gasit = True End If Next i If gasit = False Then List1.AddItem "Acest scriitor nu figureaza in biblioteca" End If End Sub

6. Sa se scrie un program care sa calculeze media ponderata intre doua note pentru n elevi, prima nota avand ponderea 25%, iar a doua 75%. Rezolvare:

Vom folosi un tabel de tip MS Flex Grid, cu 5 coloane (una pentru numarul curent, una pentru numele elevilor, coloanele 2 si 3 pentru notele elevilor, iar ultima coloana pentru mediile ponderate). Private Sub Command1_Click() For i = 1 To Tabel.Rows - 1 If Tabel.TextMatrix(i, 1) <> "" Then Tabel.TextMatrix(i, 4) = (Val(Tabel.TextMatrix(i, 2) * 25) _ + Val(Tabel.TextMatrix(i, 3) * 75)) / 100 End If Next i End Sub Private Sub Form_Load() Tabel.ColWidth(0) = Tabel.ColWidth(0) / 2 Tabel.ColWidth(1) = Tabel.ColWidth(1) * 2 Tabel.TextMatrix(0, 0) = "Nr.crt" Tabel.TextMatrix(0, 1) = "Nume si prenume" Tabel.TextMatrix(0, 2) = "Nota 1" Tabel.TextMatrix(0, 3) = "Nota 2" Tabel.TextMatrix(0, 4) = "Media" For i = 1 To Tabel.Rows - 1

Page 75: Pce Edusoft

75

Tabel.TextMatrix(i, 0) = i Next i End Sub Private Sub Tabel_KeyPress(KeyAscii As Integer) If (KeyAscii = 8) And (Tabel.Text <> "") Then L = Len(Tabel.Text) Tabel.Text = Left(Tabel.Text, L - 1) Else If KeyAscii >= 32 Then Tabel.Text = Tabel.Text + Chr$(KeyAscii) End If End If End Sub

7. O forma contine:

• un tabel denumit Tabel (cu 6 coloane si 10 randuri) ce contine date despre masini: marca, modelul, capacitatea cilindrica, combustibilul si pretul

• 2 controale de tip Combo, unul pentru alegerea marcii si al doilea pentru model • lista List1 • un buton Command1

Sa se scrie subrutina care, la apasarea butonului Command1, sa afiseze in lista List1 toate autoturismele avand marca si modelul specificate si toate informatiile despre acestea. 8. Sa se realizeze un program care sa contina:

• un tabel cu nume de persoane si numere de telefon • caseta de text pentru a introduce numele cautat • un buton • lista

si sa permita afisarea intr-o lista a numelor cautate si a numerelor de telefon, unele sub altele. Rezolvare: Private Sub Command1_Click() gasit = False For i = 1 To Agenda.Rows - 1 If Left(Agenda.TextMatrix(i, 1), Len(Text1.Text)) = Text1.Text Then

Page 76: Pce Edusoft

76

List1.AddItem Agenda.TextMatrix(i, 1) List1.AddItem Agenda.TextMatrix(i, 2) gasit = True End If Next i If gasit = False Then List1.AddItem "Aceasta persoana nu este in agenda!" End If End Sub Private Sub Agenda_KeyPress(KeyAscii As Integer) If (KeyAscii = 8) And (Agenda.Text <> "") Then L = Len(Agenda.Text) Agenda.Text = Left(Agenda.Text, L - 1) Else If KeyAscii >= 32 Then Agenda.Text = Agenda.Text + Chr$(KeyAscii) End If End If End Sub Private Sub Form_Load() Agenda.ColWidth(0) = Agenda.ColWidth(0) / 2 Agenda.ColWidth(1) = Agenda.ColWidth(1) * 2 Agenda.TextMatrix(0, 0) = "Nr.crt." Agenda.TextMatrix(0, 1) = "Nume si prenume" Agenda.TextMatrix(0, 2) = "Telefon" For i = 1 To Agenda.Rows - 1 Agenda.TextMatrix(i, 0) = i Next i End Sub

9. O forma contine:

• un control de tip Combo care contine toate lunile anului • caseta de text • un buton de comanda

Sa se scrie subrutina care permite alegerea unei luni si afiseaza, la apasarea butonului, anotimpul din care face parte luna respectiva. Rezolvare:

Private Sub Command1_Click()

Page 77: Pce Edusoft

77

Select Case Combo1.Text Case "ianuarie", "februarie", "decembrie" Text1.Text = "iarna" Case "martie", "aprilie", "mai" Text1.Text = "primavara" Case "iunie", "iulie", "august" Text1.Text = "vara" Case Else Text1.Text = "toamna" End Select End Sub

10. Sa se realizeze un program sub forma unui dictionar roman-englez, putandu-se alege dintr-o lista cuvinte in limba romana, acestea fiind traduse in limba engleza. Rezolvare

Private Sub Command1_Click() Select Case Combo1.Text Case "mar" Text1.Text = "apple" Case "masina" Text1.Text = "car" Case "cal" Text1.Text = "horse" Case "pisica" Text1.Text = "cat" Case "casa" Text1.Text = "house" Case "paine" Text1.Text = "bread" Case "caine" Text1.Text = "dog" End Select End Sub

Page 78: Pce Edusoft

78

11. O forma contine doua controale de tip Combo, cu ajutorul carora se poate selecta data nasterii (ziua si luna), afisandu-se zodia. Rezolvare Private Sub Buton1_Click() Select Case Combo2.Text Case "ianuarie" Select Case Combo1.Text Case 1 To 20 Text1.Text = "capricorn" Case Else Text1.Text = "varsator" End Select Case "februarie" Select Case Val(Combo1.Text) Case 1 To 19 Text1.Text = "varsator" Case Else Text1.Text = "pesti" End Select Case "martie" Select Case Val(Combo1.Text) Case 1 To 20 Text1.Text = "pesti" Case Else Text1.Text = "berbec" End Select Case "aprilie" Select Case Val(Combo1.Text) Case 1 To 20 Text1.Text = "berbec" Case Else Text1.Text = "taur" End Select Case "mai" Select Case Val(Combo1.Text) Case 1 To 21 Text1.Text = "taur" Case Else Text1.Text = "gemeni" End Select Case "iunie"

Page 79: Pce Edusoft

79

Select Case Val(Combo1.Text) Case 1 To 21 Text1.Text = "gemeni" Case Else Text1.Text = "rac" End Select Case "iulie" Select Case Val(Combo1.Text) Case 1 To 23 Text1.Text = "rac" Case Else Text1.Text = "leu" End Select Case "august" Select Case Val(Combo1.Text) Case 1 To 23 Text1.Text = "leu" Case Else Text1.Text = "fecioara" End Select Case "septembrie" Select Case Val(Combo1.Text) Case 1 To 23 Text1.Text = "fecioara" Case Else Text1.Text = "balanta" End Select Case "octombrie" Select Case Val(Combo1.Text) Case 1 To 23 Text1.Text = "balanta" Case Else Text1.Text = "scorpion" End Select Case "noiembrie" Select Case Val(Combo1.Text) Case 1 To 22 Text1.Text = "scorpion" Case Else Text1.Text = "sagetator" End Select Case "decembrie" Select Case Val(Combo1.Text) Case 1 To 22 Text1.Text = "sagetator" Case Else Text1.Text = "capricorn" End Select End Select End Sub

Page 80: Pce Edusoft

80

12. O forma contine:

• doua liste: List1 si List2 • caseta de text Text1 • un buton Command1

Lista List1 contine nume de persoane. Sa se scrie subrutina asociata evenimentului Click pe butonul Command1 care sa afiseze in lista List2 toate numele care incep cu litera specificata in caseta de text. Rezolvare Private Sub Command1_Click() For i = 0 To List1.ListCount - 1 If (Left(List1.List(i), Len(Text1.Text)) = Text1.Text) Then List2.AddItem List1.List(i) End If Next i End Sub

13. Sa se realizeze un program care afiseaza zodia in zodiacul chinezesc, in functie de anul nasterii, folosindu-se butoane de optiune. Rezolvare Private Sub Command1_Click() For i = 0 To 11 If Option1(i) = True Then Select Case i Case 0 Text1.Text = "Sobolan" Case 1 Text1.Text = "Bivol" Case 2

Page 81: Pce Edusoft

81

Text1.Text = "Tigru" Case 3 Text1.Text = "Iepure" Case 4 Text1.Text = "Dragon" Case 5 Text1.Text = "Sarpe" Case 6 Text1.Text = "Cal" Case 7 Text1.Text = "Capra" Case 8 Text1.Text = "Maimuta" Case 9 Text1.Text = "Cocos" Case 10 Text1.Text = "Caine" Case 11 Text1.Text = "Porc" End Select End If Next i End Sub

14. Sa se scrie un program care afiseaza zodia in zodiacul chinezesc, folosindu-se, de aceasta data, un control de tip Combo, care sa permita alegerea anului nasterii.

Page 82: Pce Edusoft

82

Rezolvare

Private Sub Command1_Click() Select Case Combo1.Text Case 1960, 1972, 1984, 1996 Text1.Text = "Sobolan" Case 1961, 1973, 1985, 1997 Text1.Text = "Bivol" Case 1962, 1974, 1986, 1998 Text1.Text = "Tigru" Case 1963, 1975, 1987, 1999 Text1.Text = "Iepure" Case 1964, 1976, 1988, 2000 Text1.Text = "Dragon" Case 1965, 1977, 1989, 2001 Text1.Text = "Sarpe" Case 1966, 1978, 1990, 2002 Text1.Text = "Cal" Case 1967, 1979, 1991, 2003 Text1.Text = "Capra" Case 1968, 1980, 1992, 2004 Text1.Text = "Maimuta" Case 1969, 1981, 1993 Text1.Text = "Cocos" Case 1970, 1982, 1994 Text1.Text = "Caine" Case 1971, 1983, 1995 Text1.Text = "Porc" End Select End Sub

15. O forma contine:

• lista Animale cu nume de animale • caseta de text Text1 • un buton Command1

Sa se scrie subrutina asociata evenimentului Click pe butonul Command1 care sa afiseze in caseta Text1 elementul selectat din lista. Rezolvare Private Sub Command1_Click() For i = 0 To Animale.ListCount - 1 Text1.Text = Animale.Text

Page 83: Pce Edusoft

83

Next i End Sub

16. Sa se realizeze un program care sa permita alegerea unui judet din lista Combo1 si sa afiseze in caseta de text Text1 resedinta de judet, la apasarea butonului Command1. Rezolvare Private Sub Command1_Click() Select Case Combo1.Text Case "Bacau" Text1.Text = "Bacau" Case "Braila" Text1.Text = "Braila" Case "Botosani" Text1.Text = "Botosani" Case "Galati " Text1.Text = "Galati" Case "Bihor" Text1.Text = "Oradea" Case "Dolj" Text1.Text = "Craiova" Case "Iasi" Text1.Text = "Iasi" Case "Mures" Text1.Text = "Tg. Mures" Case "Neamt" Text1.Text = "Piatra Neamt" Case "Vaslui" Text1.Text = "Vaslui" Case "Salaj" Text1.Text = "Zalau" Case "Suceava" Text1.Text = "Suceava" End Select End Sub

17. O forma contine:

• un control de tip Combo ce contine nume de tari • caseta de text Text1 • un buton Command1

Page 84: Pce Edusoft

84

Sa se scrie subrutina asociata evenimentului Click pe butonul Command1 care sa afiseze in caseta Text1 continentul pe care se afla tara respectiva. Rezolvare Private Sub Command1_Click() Select Case Combo1.Text Case Combo1.Text = "Romania", "Austria", "Franta", _ "Spania", "Italia", "Belgia", "Olanda" Text1.Text = "Europa" Case Combo1.Text = "Nigeria", "Zair", "Libia", _ "Liban", "Ciad", "Sudan", "Angola", "Kenya" Text1.Text = "Africa" Case Combo1.Text = "Columbia", "Venezuela", "Peru", _ "Bolivia", "Argentina", "Brazilia" Text1.Text = "America de Sud" Case Combo1.Text = "Canada", "S.U.A.", "Mexic" Text1.Text = "America de Nord" Case Combo1.Text = "Afghanistan", "Thailanda", _ "China", "Pakistan", "Japonia", "Coreea", "Vietnam" Text1.Text = "Asia" End Select End Sub

18. O forma contine:

• un control de tip Combo cu ingrediente pentru prajituri • lista List1

Sa se scrie subrutina care, in momentul cand s-a facut Click pe un ingredient din lista Combo1, sa-l afiseze pe acesta in lista List1. Rezolvare

Private Sub Combo1_Click() List1.AddItem Combo1.Text End Sub

19. Sa se realizeze un program care sa afiseze intr-o lista alimentele cu putine calorii folosite intr-un regim de slabit, repartizate pe principalele mese ale zilei. Rezolvare

Private Sub Command1_Click() List1.Clear Select Case Combo1.Text Case "Micul dejun" List1.AddItem "1 ou fiert" List1.AddItem "Cafea sau ceai" Case "Pranz" List1.AddItem "Peste slab la gratar"

Page 85: Pce Edusoft

85

List1.AddItem "Salata de cruditati" Case "Cina" List1.AddItem "Pui fara piele fiert" List1.AddItem "Salata de cruditati" End Select End Sub

20. Sa se realizeze un program care sa afiseze intr-o lista cele mai importante orase dintr-o tara, tara alegandu-se dintr-o lista de tip Combo. Rezolvare Private Sub Command1_Click() Orase.Clear Select Case Combo1.Text Case "Italia" Orase.AddItem "Roma" Orase.AddItem "Torino" Orase.AddItem "Milano" Orase.AddItem "Venetia " Case "Franta" Orase.AddItem "Paris" Orase.AddItem "Lyon" Orase.AddItem "Toulouse" Orase.AddItem "Nantes" Case "Spania" Orase.AddItem "Madrid" Orase.AddItem "Lisabona" Orase.AddItem "Sevilla" Orase.AddItem "Barcelona" Case "Germania" Orase.AddItem "Berlin" Orase.AddItem "Koln" Orase.AddItem "Bremen" Orase.AddItem "Munchen" Case "Marea Britanie" Orase.AddItem "Londra" Orase.AddItem "Birmingham" Orase.AddItem "Manchester" Orase.AddItem "Liverpool" End Select End Sub

Page 86: Pce Edusoft

86

21. O forma contine trei butoane de optiune cu numele unor sporturi. Sa se realizeze un program care sa afiseze intr-o lista accesoriile necesare practicarii sportului selectat. Rezolvare Private Sub Command1_Click() List1.Clear If Option1.Value = True Then List1.AddItem "Racheta" List1.AddItem "Minge de tenis" Else If Option2.Value = True Then List1.AddItem "Schiuri" List1.AddItem "Clapari" List1.AddItem "Ochelari" Else If Option3.Value = True Then List1.AddItem "Tac" List1.AddItem "Bile" List1.AddItem "Masa de biliard" End If End If End If End Sub

Page 87: Pce Edusoft

87

22. O forma contine:

• 3 butoane de optiune: Meniul1, Meniul2, Meniul3 • lista • un buton

Sa se scrie subrutina asociata evenimentului Click pe buton care sa afiseze in lista felurile de mancare continute de meniul selectat. Rezolvare Private Sub Command1_Click() List1.Clear If Option1.Value = True Then List1.AddItem "Ciorba de perisoare" List1.AddItem "Piure cu ficatei" List1.AddItem "Gogosi cu ciocolata" Else If Option2.Value = True Then List1.AddItem "Ciorba de vacuta" List1.AddItem "Cartofi pai cu piept de pui" List1.AddItem "Clatite cu gem" Else If Option3.Value = True Then List1.AddItem "Ciorba de burta" List1.AddItem "Frigarui" List1.AddItem "Salata de fructe" End If End If End If End Sub

Page 88: Pce Edusoft

88

23. Sa se realizeze un program care sa afiseze greutatea unei lingurite dintr-un anumit ingredient, folosind butoane de optiune. Rezolvare

Private Sub Command1_Click() For i = 0 To 3 If Option1(i).Value = True Then Select Case i Case "0" Text1.Text = "5g" Case "1" Text1.Text = "7g" Case "2" Text1.Text = "6g" Case "3" Text1.Text = "10g" End Select End If Next End Sub

24. O forma contine:

• un tabel T cu 3 coloane si 10 randuri ce contine numere • un cadru Frame1 • 2 butoane de optiune situate in interiorul cadrului • un buton de comanda Command1

Page 89: Pce Edusoft

89

Sa se scrie subrutina asociata evenimentului Click pe butonul Command1 care sa realizeze media, aritmetica sau geometrica, in functie de butonul de optiune ales, a celor doua numere situate pe acelasi rand si sa o afiseze pe a treia coloana a tabelului. 25. O forma contine:

• un tabel T cu 10 randuri si 2 coloane in care vor fi introduse animale si felul lor ("domestic" sau "salbatic")

• un cadru ce contine doua butoane de optiune cu caption-ul “domestice”, respectiv “salbatice”

• lista List1 • un buton Command1

Sa se scrie subrutina care afiseaza in lista List1 toate animalele, domestice sau salbatice, in functie de optiunea aleasa. Rezolvare Private Sub t_KeyPress(KeyAscii As Integer) If (KeyAscii = 8) And (T.Text <> "") Then L = Len(T.Text) T.Text = Left(T.Text, L - 1) Else If KeyAscii >= 32 Then T.Text = T.Text + Chr$(KeyAscii) End If End If End Sub Private Sub Command1_Click() List1.Clear If Option1.Value = True Then For i = 0 To T.Rows - 1 If T.TextMatrix(i, 1) = "domestic" Then List1.AddItem T.TextMatrix(i, 0) End If Next i Else For i = 0 To T.Rows - 1 If T.TextMatrix(i, 1) = "salbatic" Then List1.AddItem T.TextMatrix(i, 0) End If Next i End If End Sub Private Sub Form_Load() T.TextMatrix(0, 0) = "Animal" T.TextMatrix(0, 1) = "Felul" End Sub

Page 90: Pce Edusoft

90

26. Realizati un program care sa afiseze suma elementelor dintr-o lista intr-o caseta de text. Rezolvare Private Sub Command1_Click() Suma = 0 For i = 0 To List1.ListCount - 1 Suma = Suma + List1.List(i) Next i Text1.Text = Suma End Sub

27. Scrieti un program care sa afiseze intr-o caseta de text elementul maxim dintr-o lista. Rezolvare Private Sub Command1_Click() Text1.Text = List1.List(1) For i = 1 To List1.ListCount - 1 If Val(Text1.Text) < List1.List(i) Then Text1.Text = List1.List(i) End If Next i End Sub 28. Scrieti un program care sa caute un element intr-o lista si sa afiseze intr-o caseta de text daca acesta exista in lista sau nu.

Page 91: Pce Edusoft

91

Rezolvare Private Sub Command1_Click() gasit = False While (i <= List1.ListCount) And (Not gasit) If List1.List(i) = Text1.Text Then gasit = True Else i = i + 1 End If Wend If gasit Then MsgBox "Elementul " + Text1.Text + " exista in lista" Else MsgBox "Elementul " + Text1.Text + " nu exista in lista" End If End Sub

29.O forma contine:

• trei butoane cu Caption-ul “Metru”, “Litru”,”Gram” • doua liste List1 si List2

Sa se scrie subrutinele asociate evenimentului Click pe cele trei butoane care sa afiseze in lista List1 multiplii unitatii de masura selectate, iar in lista List2, submultiplii acesteia. Rezolvare

Private Sub Command1_Click() List1.Clear List1.AddItem "decametru" List1.AddItem "hectometru" List1.AddItem "kilometru" List2.Clear List2.AddItem "decimetru" List2.AddItem "centimetru" List2.AddItem "milimetru" End Sub Private Sub Command2_Click() List1.Clear List1.AddItem "decalitru" List1.AddItem "hectolitru" List1.AddItem "kilolitru" List2.Clear List2.AddItem "decilitru" List2.AddItem "centilitru" List2.AddItem "mililitru" End Sub Private Sub Command3_Click() List1.Clear List1.AddItem "decagram"

Page 92: Pce Edusoft

92

List1.AddItem "hectogram" List1.AddItem "kilogram" List2.Clear List2.AddItem "decigram" List2.AddItem "centigram" List2.AddItem "miligram" End Sub

30. O forma contine: • 2 casete de text • 3 butoane de optiune (“decimetri”, “centimetri”,”milimetri”) • un buton de comanda Sa se scrie subrutina asociata evenimentului Click pe butonul de comanda care sa transforme valoarea in metri scrisa in caseta de text Text1 in unitatea de masura selectata si sa o afiseze in caseta Text2. Rezolvare Private Sub Command1_Click()

If Option1.Value = True Then Text2.Text = Text1.Text * 10 Else If Option2.Value = True Then Text2.Text = Text1.Text * 100 Else Text2.Text = Text1.Text * 1000 End If End If

End Sub

31. O forma contine:

• lista de tip Combo • 2 casete de text • un buton de comanda

Sa se scrie subrutina asociata evenimentului Click pe butonul de comanda care sa transforme suma din caseta Text1, din lei in valuta aleasa din lista.

Page 93: Pce Edusoft

93

Rezolvare Private Sub Command1_Click() Select Case Combo1.Text Case "Euro" Text2.Text = (Text1.Text) / 37283 Case "Dolar SUA" Text2.Text = (Text1.Text) / 28997 Case "Lira sterlina" Text2.Text = (Text1.Text) / 54234 End Select End Sub

32. O forma contine:

• lista de tip Combo1 • 2 butoane de comanda cu Caption-ul “vanzare”, respectiv “cumparare” • caseta de text

Sa se scrie subrutinele corespunzatoare celor doua butoane care sa afiseze in caseta de text cursul practicat de casa de schimb la vanzare, respectiv cumparare, pentru valuta aleasa din lista. Rezolvare Private Sub Command1_Click() Select Case Combo1.Text Case "Euro" Text1.Text = "37 500 lei" Case "Dolar SUA" Text1.Text = "29 200 lei" End Select End Sub Private Sub Command2_Click() Select Case Combo1.Text Case "Euro" Text1.Text = "35 500 lei" Case "Dolar SUA" Text1.Text = "27 000 lei" End Select End Sub

33. O forma contine:

• un tabel T cu 2 coloane si 10 randuri • un buton de comanda • caseta de validare

Sa se scrie subrutina asociata evenimentului Click pe butonul de comanda prin care, daca caseta este marcata, sa afiseze in a doua coloana dublul numerelor din prima, iar daca nu este marcata, sa afiseze jumatatea lor. Rezolvare Private Sub Command1_Click() If Check1.Value = 1 Then For i = 1 To T.Rows - 1 T.TextMatrix(i, 1) = 2 * Val(T.TextMatrix(i, 0))

Page 94: Pce Edusoft

94

Next i Else For j = 1 To T.Rows - 1 T.TextMatrix(j, 1) = Val(T.TextMatrix(j, 0)) / 2 Next j End If End Sub Private Sub t_KeyPress(KeyAscii As Integer) If (KeyAscii = 8) And (T.Text <> "") Then L = Len(T.Text) T.Text = Left(T.Text, L - 1) Else If KeyAscii >= 32 Then T.Text = T.Text + Chr$(KeyAscii) End If End If End Sub

34. Sa se scrie un program care sa clasifice produse dupa un cod numeric, in functie de felul produsului, cum ar fi: alimentara, cosmetice, chimice, imbracaminte, incaltaminte. Rezolvare Private Sub Command1_Click() For i = 1 To Tabel.Rows - 1 If (Option1.Value = True) And _ (Left(Tabel.TextMatrix(i, 2), 1) = "1") Then List1.AddItem Tabel.TextMatrix(i, 1) Else If (Option2.Value = True) And _ (Left(Tabel.TextMatrix(i, 2), 1) = "2") Then List1.AddItem Tabel.TextMatrix(i, 1) Else If (Option3.Value = True) And _ (Left(Tabel.TextMatrix(i, 2), 1) = "3") Then List1.AddItem Tabel.TextMatrix(i, 1) Else If (Option4.Value = True) And _ (Left(Tabel.TextMatrix(i, 2), 1) = "4") Then List1.AddItem Tabel.TextMatrix(i, 1) Else If (Option5.Value = True) And _ (Left(Tabel.TextMatrix(i, 2), 1) = "5") Then List1.AddItem Tabel.TextMatrix(i, 1)

Page 95: Pce Edusoft

95

End If End If End If End If End If Next i End Sub Private Sub Command3_Click() Open App.Path + "\tabel.txt" For Output As #1 For i = 1 To Tabel.Rows - 1 For j = 1 To Tabel.Cols - 1 Print #1, Tabel.TextMatrix(i, j) Next j Next i Close #1 End Sub Private Sub Command2_Click() Open App.Path + "\tabel.txt" For Input As #1 For i = 1 To Tabel.Rows - 1 For j = 1 To Tabel.Cols - 1 Line Input #1, s Tabel.TextMatrix(i, j) = s Next j Next i Close #1 End Sub Private Sub Form_Load() Tabel.ColWidth(0) = Tabel.ColWidth(0) / 2 Tabel.ColWidth(1) = Tabel.ColWidth(1) * 2 For i = 1 To Tabel.Rows - 1 Tabel.TextMatrix(i, 0) = i Next i Tabel.TextMatrix(0, 0) = "Nr. crt." Tabel.TextMatrix(0, 1) = "Produs" Tabel.TextMatrix(0, 2) = "Cod" End Sub Private Sub Tabel_KeyPress(KeyAscii As Integer) If (KeyAscii = 8) And (Tabel.Text <> "") Then L = Len(Tabel.Text) Tabel.Text = Left(Tabel.Text, L - 1) Else If KeyAscii >= 32 Then Tabel.Text = Tabel.Text + Chr$(KeyAscii) End If End If End Sub

Page 96: Pce Edusoft

96

35.Sa se realizeze un program pt farmacii care sa arate ce medicamente sunt compensate, cu cit sunt compensate, sau gratuite. Rezolvare Private Sub Command1_Click() Open App.Path + "\tabel1.txt" For Output As #1 For i = 1 To T.Rows - 1 For j = 1 To T.Cols - 1 Print #1, T.TextMatrix(i, j) Next j Next i Close #1 End Sub Private Sub Command2_Click() Open App.Path + "\tabel1.txt" For Input As #1 For i = 1 To T.Rows - 1 For j = 1 To T.Cols - 1 Line Input #1, s T.TextMatrix(i, j) = s Next j Next i Close #1 End Sub Private Sub Command3_Click() For i = 1 To T.Rows - 1 If T.TextMatrix(i, 1) = Text1.Text Then Text2.Text = T.TextMatrix(i, 2) End If Next i End Sub Private Sub t_KeyPress(KeyAscii As Integer) If (KeyAscii = 8) And (T.Text <> "") Then

Page 97: Pce Edusoft

97

L = Len(T.Text) T.Text = Left(T.Text, L - 1) Else If KeyAscii >= 32 Then T.Text = T.Text + Chr$(KeyAscii) End If End If End Sub Private Sub Form_Load() T.ColWidth(0) = T.ColWidth(0) / 2 T.ColWidth(1) = T.ColWidth(1) * 2 T.ColWidth(2) = T.ColWidth(2) * 2 T.TextMatrix(0, 0) = "Nr.crt." T.TextMatrix(0, 1) = "Medicament" T.TextMatrix(0, 2) = "Felul" For i = 1 To T.Rows - 1 T.TextMatrix(i, 0) = i Next i End Sub

36. Realizati un program care sa calculeze numarul destinului in functie de numele persoanei, adunand cifrele corespunzatoare literelor din nume, astfel: 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Daca se obtine un numar din mai multe cifre, acestea vor fi adunate pana se va obtine un numar simplu (dintr-o singura cifra).

Page 98: Pce Edusoft

98

Rezolvare

Private Sub Command1_Click() s = 0 For i = 1 To Len(Text1.Text) x = Left(Text1.Text, i) k = Right(x, 1) Select Case k Case "A", "J", "S" j = 1 Case "B", "K", "T" j = 2 Case "C", "L", "U" j = 3 Case "D", "M", "V" j = 4 Case "E", "N", "W" j = 5 Case "F", "O", "X" j = 6 Case "G", "P", "Y" j = 7 Case "H", "Q", "Z" j = 8 Case "I", "R" j = 9 End Select s = s + j If Len(s) = 2 Then s = Val(Left(s, 1)) + Val(Right(s, 1)) End If Next i Text2.Text = s End Sub 37. Realizati un program care sa descompuna numerele in mii, sute, zeci si unitati.

Page 99: Pce Edusoft

99

Rezolvare: Amplasati in forma dumneavoastra un buton de comanda Command1 si o caseta de text Text1, unde se va introduce (la rularea programului) numarul respectiv (de exemplu 3452). Nu se va putea introduce aici un numar cu mai mult de 4 cifre (subrutina va afisa un mesaj corespuznator). Amplasati, apoi, pe forma inca patru casete de text (Text2, Text3, Text4 si Text5) corespunzatoare cifrei miilor, sutelor, zecilor si unitatilor. Scrieti urmatorul cod: Private Sub Command1_Click() If Len(Text1.Text) <= 4 Then Text5.Text = Right(Text1.Text, 1) If Len(Text1.Text) >= 2 Then Text4.Text = Left(Right(Text1.Text, 2), 1) Else Text4.Text = "0" End If If Len(Text1.Text) >= 3 Then Text3.Text = Left(Right(Text1.Text, 3), 1) Else Text3.Text = "0" End If If Len(Text1.Text) >= 4 Then Text2.Text = Left(Text1.Text, 1) Else Text2.Text = "0" End If Else MsgBox "Dati un numar mai mic" End If End Sub 38. Realizati un program care sa afiseze in doua liste diferite vocalele si consoanele dintr-un cuvant. Rezolvare: Private Sub Command1_Click() For i = 1 To Len(Text1.Text) j = Left(Text1.Text, i) k = Right(j, 1) Select Case k Case "a", "e", "i", "o", "u", "A", "E", "I", "O", "U" Vocale.AddItem k Case Else Consoane.AddItem k End Select Next i End Sub 39. O forma contine o bara de derulare cu valori intre 1 si 100. Sa se scrie subrutina asociata evenimentului click pe butonul Command1 care sa afiseze in caseta de text Text1 patratul valorii selectate prin intermediul barei de derulare. Rezolvare:

Private Sub bara_Change() Label1.Caption = bara.Value End Sub Private Sub Command1_Click() Text1.Text = bara.Value * bara.Value End Sub

Page 100: Pce Edusoft

100

Andreea 40. Realizati un program care, la apasarea butonului "Buton", sa preia dintr-o lista, numita "NumerePozitive", care contine numere pozitive, doar numerele mai mici de 10. Aceste numere sa fie afisate intr-o alta lista, denumita "MaiMiciDeZece" care este goala la inceput. Rezolvare.

O lista simpla se amplaseaza cu ajutorul controlului ListBox din Toolbox si se denumeste folosind proprietatea "Name". Scrieti numerele pozitive la proprietatea "List", separate prin Ctrl+Enter.

Butoanele se amplaseaza cu ajutorul controlului Command Button din Toolbox si se denumesc la proprietatea Name.

Subrutina care da solutia programului este urmatoarea: Private Sub Buton_Click() MaiMiciDeZece.Clear For i = 0 To NumerePozitive.ListCount - 1 If NumerePozitive.List(i) < 10 Then MaiMiciDeZece.AddItem NumerePozitive.List(i) End If Next i End Sub unde: ListCount = Numarul elementelor din lista Clear = Sterge elementele din lista List(i) = Elementul din lista de pe pozitia i lista.AddItem elem = Adauga elementul "elem" la lista "lista"

41. Realizati un program care, la apasarea butonului "Buton", sa preia dintr-o lista, numita "Numere", care contine numere pozitive si negative, doar numerele negative. Aceste numere sa fie afisate intr-o alta lista, denumita "NumereNegative" care este goala la inceput. Rezolvare.

Page 101: Pce Edusoft

101

O lista simpla se amplaseaza cu ajutorul controlului ListBox din Toolbox si se denumeste folosind proprietatea "Name". Scrieti numerele pozitive si negative la proprietatea "List", separate prin Ctrl+Enter.

Butoanele se amplaseaza cu ajutorul controlului Command Button din Toolbox si se denumesc la proprietatea Name.

Subrutina care da solutia programului este urmatoarea: Private Sub Buton_Click() NumereNegative.Clear For i = 0 To Numere.ListCount - 1 If Numere.List(i) < 0 Then NumereNegative.AddItem Numere.List(i) End If Next i End Sub unde: ListCount = Numarul elementelor din lista Clear = Sterge elementele din lista List(i) = Elementul din lista de pe pozitia i lista.AddItem elem = Adauga elementul "elem" la lista "lista"

42. Realizati un program care, la apasarea butonului "Buton", sa preia dintr-o lista, numita "Numere", care contine numere pozitive si negative, doar numerele negative, si modulul acestor numere sa fie afisat intr-o alta lista, denumita "ModulNumere" care este goala la inceput. Rezolvare.

O lista simpla se amplaseaza cu ajutorul controlului ListBox din Toolbox si se denumeste folosind proprietatea "Name". Scrieti numerele pozitive si negative la proprietatea "List", separate prin Ctrl+Enter.

Butoanele se amplaseaza cu ajutorul controlului Command Button din Toolbox si se denumesc la proprietatea Name.

Subrutina care da solutia programului este urmatoarea: Private Sub Buton_Click() ModulNumere.Clear For i = 0 To Numere.ListCount - 1 If Numere.List(i) < 0 Then ModulNumere.AddItem Abs(Numere.List(i)) End If Next i End Sub unde: ListCount = Numarul elementelor din lista Clear = Sterge elementele din lista

Page 102: Pce Edusoft

102

List(i) = Elementul din lista de pe pozitia i lista.AddItem elem = Adauga elementul "elem" la lista "lista" 43. Realizati un program care, la apasarea butonului "Buton", sa preia dintr-o lista, numita "NumerePozitive", care contine numere pozitive, doar numerele pare. Aceste numere sa fie afisate intr-o alta lista, denumita "NumerePare" care este goala la inceput. Rezolvare.

O lista simpla se amplaseaza cu ajutorul controlului ListBox din Toolbox si se denumeste folosind proprietatea "Name". Scrieti numerele pozitive la proprietatea "List", separate prin Ctrl+Enter.

Butoanele se amplaseaza cu ajutorul controlului Command Button din Toolbox si se denumesc la proprietatea Name.

Subrutina care da solutia programului este urmatoarea: Private Sub Buton_Click() NumerePare.Clear For i = 0 To NumerePozitive.ListCount - 1 If NumerePozitive.List(i) Mod 2 = 0 Then NumerePare.AddItem NumerePozitive.List(i) End If Next i End Sub unde: ListCount = Numarul elementelor din lista Clear = Sterge elementele din lista List(i) = Elementul din lista de pe pozitia i lista.AddItem elem = Adauga elementul "elem" la lista "lista" 44. Realizati un program care, la apasarea butonului "Buton", sa preia dintr-o lista, numita "NumerePozitive", care contine numere pozitive, doar numerele impare. Aceste numere sa fie afisate intr-o alta lista, denumita "NumereImpare" care este goala la inceput. Rezolvare.

O lista simpla se amplaseaza cu ajutorul controlului ListBox din Toolbox si se denumeste folosind proprietatea "Name". Scrieti numerele pozitive la proprietatea "List", separate prin Ctrl+Enter.

Butoanele se amplaseaza cu ajutorul controlului Command Button din Toolbox si se denumesc la proprietatea Name.

Subrutina care da solutia programului este urmatoarea: Private Sub Buton_Click() NumereImpare.Clear For i = 0 To NumerePozitive.ListCount - 1 If NumerePozitive.List(i) Mod 2 <> 0 Then NumereImpare.AddItem NumerePozitive.List(i) End If Next i End Sub unde: ListCount = Numarul elementelor din lista Clear = Sterge elementele din lista List(i) = Elementul din lista de pe pozitia i lista.AddItem elem = Adauga elementul "elem" la lista "lista" 45. Amplasati intr-o forma o eticheta pe care sa scrie: "Nota dumneavoastra este mai mare sau egala cu 5?", 2 casete de validare numite "DA", respectiv "NU" si in care sa scrie "DA", respectiv "NU",

Page 103: Pce Edusoft

103

si o caseta de text, numita "Rezultat". Realizati un program care, la validarea casetei "DA" sa afiseze in caseta de text, textul "Felicitari!Ati promovat examenul!" iar la validarea casetei "NU" sa fie afisat textul "Ne pare rau dar trebuie sa mai studiati!Ati picat examenul!". Rezolvare.

Etichetele se creeaza cu ajutorul controlului Label din Toolbox si se scrie in interiorul lor folosind proprietatea "Caption" din tabelul de proprietati din dreapta.

Casutele de text se amplaseaza cu ajutorul controlului TextBox din Toolbox, se denumesc la proprietatea Name si se goleste continutul lor de la proprietatea Text din tabelul de proprietati din dreapta.

Casetele de validare de amplaseaza cu ajutorul controlului Check Box din Toolbox, de denumesc la proprietatea "Name" si se scrie in interiorul lor la proprietatea "Caption".

Subrutinele corespunzatoare casetelor de validare "DA", respectiv "NU" sunt urmatoarele: Private Sub DA_Click() If DA.Value = 1 Then NU.Value = 0 Rezultat.Text = "Felicitari!Ati promovat examenul!" End If End Sub Private Sub NU_Click() If NU.Value = 1 Then DA.Value = 0 Rezultat.Text = _ "Ne pare rau dar trebuie sa mai studiati! Ati picat examenul!" End If End Sub unde: CheckBox.Value = 0 - caseta este nemarcata = 1 - caseta este marcata = 2 - caseta este inactiva

46. Amplasati intr-o forma o eticheta pe care sa scrie: "2+5*(6-9/3)/lg10=17 ?", 2 casete de validare numite "DA", respectiv "NU" si in care sa scrie "DA", respectiv "NU", si o caseta de text, numita "Rezultat". Realizati un program care, la validarea casetei "DA" sa afiseze in caseta de text, textul "Raspunsul este corect" iar la validarea casetei "NU" sa fie afisat textul "Raspunsul este incorect". Rezolvare.

Etichetele se creeaza cu ajutorul controlului Label din Toolbox si se scrie in interiorul lor folosind proprietatea "Caption" din tabelul de proprietati din dreapta.

Page 104: Pce Edusoft

104

Casutele de text se amplaseaza cu ajutorul controlului TextBox din Toolbox, se denumesc la proprietatea Name si se goleste continutul lor de la proprietatea Text din tabelul de proprietati din dreapta.

Casetele de validare de amplaseaza cu ajutorul controlului Check Box din Toolbox, de denumesc la proprietatea "Name" si se scrie in interiorul lor la proprietatea "Caption".

Subrutinele corespunzatoare casetelor de validare "DA", respectiv "NU" sunt urmatoarele: Private Sub DA_Click() If DA.Value = 1 Then NU.Value = 0 Rezultat.Text = "Raspunsul este corect." End If End Sub Private Sub NU_Click() If NU.Value = 1 Then DA.Value = 0 Rezultat.Text = "Raspunsul este incorect." End If End Sub unde:

CheckBox.Value = 0 - caseta este nemarcata = 1 - caseta este marcata = 2 - caseta este inactiva

47. Realizati un vector cu 5 casete de validare, care sa se numeasca "Check" si scrieti in interiorul fiecareia diferite materii de studiu, cum ar fi: Programarea calculatoarelor, Statistica, Contabilitate finaciara, Finante publice, etc. Amplasati apoi un buton numit "Buton" si pe care sa scrie: "Ce materii preferati?" si o casuta de text, numita "Rezultat". Creati o subrutina care, la efectuarea unui click pe buton, sa afiseze in casuta de text: "Materiile tale preferate sunt:" + materiile corespunzatoare casutelor bifate. Rezolvare.

Modul de a crea un vector de casete de validare este urmatorul: amplasam prima caseta de validare si-i dam numele "Check", selectam controlul si il copiem in Clipboard (Edit->Copy), apoi readucem copia sa din Clipboard prin lipire (Edit->Paste) si raspundem afirmativ la intrebarea daca vrem sa cream un vector de controale. Prima componenta a vectorului va fi caseta Check(0), iar celelalte Check(1), Check(2), Check(3) si Check(4).

Butoanele se amplaseaza cu ajutorul controlului Command Button din Toolbox si se denumesc la proprietatea Name.

Page 105: Pce Edusoft

105

Casutele de text se amplaseaza cu ajutorul controlului TextBox din Toolbox, se denumesc la proprietatea Name si se goleste continutul lor de la proprietatea Text din tabelul de proprietati din dreapta.

Subrutina care da solutia programului este urmatoarea: Private Sub Buton_Click() R = "" For i = 0 To 4 If Check(i).Value = 1 Then R = R + Check(i).Caption + ", " Next i Rezultat.Text = "Materiile tale preferate sunt: " + R End Sub unde: Check(i).Value = 1 - casutele sunt marcate Check(i).Caption = continutul casetelor, aflat la proprietatea Caption

48. Realizati un vector cu 8 casete de validare, care sa se numeasca "Check" si scrieti in interiorul fiecareia diferite fructe, cum ar fi: ananas, piersici, mere, pere, etc. Amplasati apoi un buton numit "Buton" si pe care sa scrie: " Salata de fructe va contine:" si o lista, numita "Salata", care sa nu aiba nici un element. Realizati o subrutina care, la apasarea butonului, sa adauge in lista fructele corespunzatoare casetelor bifate. Rezolvare.

Modul de a crea un vector de casete de validare este urmatorul: amplasam prima caseta de validare si-i dam numele "Check", selectam controlul si il copiem in Clipboard (Edit->Copy), apoi readucem copia sa din Clipboard prin lipire (Edit->Paste) si raspundem afirmativ la intrebarea daca vrem sa cream un vector de controale. Prima componenta a vectorului va fi caseta Check(0), iar celelalte Check(1), Check(2), Check(3), Check(4), Check(5), Check(6) si Check(7).

Butoanele se amplaseaza cu ajutorul controlului Command Button din Toolbox si se denumesc la proprietatea Name.

O lista simpla se amplaseaza cu ajutorul controlului ListBox din Toolbox si se denumeste folosind proprietatea "Name".

Subrutina care da solutia programului este urmatoarea: Private Sub Buton_Click() Salata.Clear For i = 0 To 7 If Check(i).Value = 1 Then Salata.AddItem Check(i).Caption End If

Page 106: Pce Edusoft

106

Next i End Sub unde: Check(i).Value = 1 - casutele sunt marcate Check(i).Caption = continutul casetelor, aflat la proprietatea Caption Clear = Sterge elementele din lista lista.AddItem elem = Adauga elementul "elem" la lista "lista"

49. Realizati un vector cu 9 casete de validare, care sa se numeasca "Check" si scrieti in interiorul fiecareia diferite nume de persoane. Amplasati apoi un buton care sa se numeasca "Buton' si pe care sa scrie "Prietenii mei sunt:". Adaugati formei un tabel care sa aiba la inceput o coloana si nici un rand. Creati o subrutina care, la apasarea butonului, sa adauge in tabel numele corespunzatoare casetelor bifate. Rezolvare.

Modul de a crea un vector de casete de validare este urmatorul: amplasam prima caseta de validare si-i dam numele "Check", selectam controlul si il copiem in Clipboard (Edit->Copy), apoi readucem copia sa din Clipboard prin lipire (Edit->Paste) si raspundem afirmativ la intrebarea daca vrem sa cream un vector de controale. Prima componenta a vectorului va fi caseta Check(0), iar celelalte Check(1), Check(2), Check(3), Check(4), Check(5), Check(6), Check(7) si Check(8).

Butoanele se amplaseaza cu ajutorul controlului Command Button din Toolbox si se denumesc la proprietatea Name.

Pentru a realiza un tabel alegeti din Toolbox controlul MSFlexGrid (Daca controlul Microsoft Flex Grid nu se gaseste de la bun inceput in bara de instrumente din partea stanga a mediului Visual Basic, el trebuie adaugat in felul urmator: din meniul VB alegeti optiunea Project, apoi Components si veti obtine o lista de alte componente ce pot fi adaugate la Toolbox. Alegeti din lista Microsoft Flex Grid si bifati in dreptul acestei componente, apoi apasati pe butonul OK. In Toolbox va aparea simbolul acestui control.). Initial tabelul va fi numit "MSFlexGrid1" (trebuie denumit "T") si va avea 2 randuri si 2 coloane, dar putem modifica proprietatile Rows si Cols pentru a modifica numarul de randuri, respectiv de coloane (tabelul trebuie sa contina o coloana si nici un rand). Coloana este fixa la inceput. Pentru a schimba acest lucru trebuie modificata proprietatea FixedCols cu valoarea "0".

Page 107: Pce Edusoft

107

Subrutina este urmatoarea: Private Sub Buton_Click() k = 0 T.Rows = 1 For i = 0 To 8 If Check(i).Value = 1 Then k = k + 1 T.Rows = k T.TextMatrix(k - 1, 0) = Check(i).Caption End If Next i End Sub unde: T.Rows = numarul de randuri T.TextMatrix(k-1,0) = celula corespunzatoare randului k-1 si coloanei 0 Check(i).Value = 1 - casutele sunt marcate Check(i).Caption = continutul casetelor, aflat la proprietatea Caption

50. Amplasati intr-o forma o eticheta pe care sa scrie: "Ce bauturi va plac mai mult?", 2 butoane de optiune pe care sa scrie "bauturile racoritoare", respectiv "bauturile alcoolice" si o casuta de text, numita "Rezultat" care sa fie goala la inceput. Realizati un program care sa afiseze in casuta de text: "Sunteti o persoana care prefera bauturile racoritoare in locul celor alcoolice. Foarte bine!", daca primul buton de optiune este selectat, si respectiv textul: "Atentie! Consumul excesiv de alcool dauneaza grav sanatatii! daca al doilea buton de optiune este selectat. Rezolvare.

Etichetele se creeaza cu ajutorul controlului Label din Toolbox si se scrie in interiorul lor folosind proprietatea "Caption" din tabelul de proprietati din dreapta.

Butoanele de optiune se creeaza cu ajutorul controlului Option Button din Toolbox, se denumesc la proprietatea "Name" si se scrie in interiorul lor la proprietatea "caption".

Page 108: Pce Edusoft

108

Casutele de text se amplaseaza cu ajutorul controlului TextBox din Toolbox, se denumesc la proprietatea Name si se goleste continutul lor de la proprietatea Text din tabelul de proprietati din dreapta.

Subrutinele corespunzatoare butoanelor de optiune "Option1", respectiv "Option2" sunt: Private Sub Option1_Click() If Option1.Value = True Then Rezultat.Text = "Sunteti o persoana care prefera bauturile" + _ " racoritoare in locul celor alcoolice. Foarte bine!" End If End Sub Private Sub Option2_Click() If Option2.Value = True Then Rezultat.Text = "Atentie! "+ "Consumul excesiv de alcool dauneaza grav sanatatii!" End If End Sub unde:

Option1.Value = True - butonul de optiune este selectat Option1.value = False - butonul de optiune nu este selectat

51. Desenati 3 cadre si puneti-le Caption-urile "Sex", "Statut" si respectiv "Copii". Grupati in fiecare cadru cate 2 butoane de optiune, pe care scrieti in ordine: "feminin", "masculin", "casatorit", "necasatorit", "da", "nu". Amplasati apoi un buton numit "Buton" si pe care sa scrie:"Ce fel de om esti:" si o casuta de text, numita "Rezultat" care sa fie goala la inceput. Creati subrutina care, la apasrea butonului, sa afiseze un text corespunzator butoanelor de optiune selectate. Rezolvare.

Cadrele se creeaza cu ajutorul controlului "Frame" din Toolbox, iar in antetul lor se scrie la proprietatea "Caption".

Butoanele de optiune se creeaza cu ajutorul controlului Option Button din Toolbox, se denumesc la proprietatea "Name" si se scrie in interiorul lor la proprietatea "caption".

Butoanele se amplaseaza cu ajutorul controlului Command Button din Toolbox si se denumesc la proprietatea Name.

Casutele de text se amplaseaza cu ajutorul controlului TextBox din Toolbox, se denumesc la proprietatea Name si se goleste continutul lor de la proprietatea Text din tabelul de proprietati din dreapta.

Page 109: Pce Edusoft

109

Subrutina este urmatoarea: Private Sub Buton_Click() If Option1.Value = True Then If Option3.Value = True Then If Option5.Value = True Then Rezultat.Text = "Esti o femeie casatorita, care are copii." Else Rezultat.Text = "Esti o femeie casatorita, care nu are copii." End If Else If Option5.Value = True Then Rezultat.Text = "Esti o femeie necasatorita, care are copii." Else Rezultat.Text = "Esti o femeie necasatorita, care nu are copii." End If End If Else If Option3.Value = True Then If Option5.Value = True Then Rezultat.Text = "Esti un barbat casatorit, care are copii." Else Rezultat.Text = "Esti un barbat casatorit, care nu are copii." End If Else If Option5.Value = True Then Rezultat.Text = "Esti un barbat necasatorit, care are copii." Else Rezultat.Text = "Esti un barbat necasatorit, care nu are copii." End If End If End If End Sub

unde: Option1.Value = True - butonul de optiune este selectat Option1.value = False - butonul de optiune nu este selectat

52. Amplasati o eticheta pe care sa scrie: "8-25/5+lne*264=267 ?", 2 butoane de optiune in interiorul carora sa scrie "DA", respectiv "NU", un buton, numit "Buton" si in care sa scrie "Raspuns" si o caseta de text, numita "Rezultat", care sa fie goala la inceput. Realizati un program care, la apasarea butonului, sa afiseze in casuta de text: "Raspunsul este corect.", daca a fost selectat butonul de optiune "Option1", respectiv textul: "Raspunsul este incorect.", daca a fost selectat butonul de optiune "Option2".

Page 110: Pce Edusoft

110

Rezolvare.

Etichetele se creeaza cu ajutorul controlului Label din Toolbox si se scrie in interiorul lor folosind proprietatea "Caption" din tabelul de proprietati din dreapta.

Butoanele de optiune se creeaza cu ajutorul controlului Option Button din Toolbox, se denumesc la proprietatea "Name" si se scrie in interiorul lor la proprietatea "caption".

Casutele de text se amplaseaza cu ajutorul controlului TextBox din Toolbox, se denumesc la proprietatea Name si se goleste continutul lor de la proprietatea Text din tabelul de proprietati din dreapta.

Butoanele se amplaseaza cu ajutorul controlului Command Button din Toolbox, se denumesc la proprietatea Name si se scrie in interiorul lor cu "Caption".

Subrutina care ofera solutia de rezolvare a programului este urmatoarea: Private Sub Buton_Click() If Option1.Value = True Then Rezultat.Text = "Raspunsul este corect." Else Rezultat.Text = "Raspunsul este incorect." End If End Sub unde:

Option1.Value = True - butonul de optiune este selectat Option1.value = False - butonul de optiune nu este selectat

53. Amplasati intr-o forma un buton care sa senumeasca "Buton" si pe care sa scrie "Executa", 2 butoane de optiune pe care sa scrie "Adauga element", respectiv "Sterge element", o casuta de text numita "Fructe" si o lista simpla care sa se numeasca "Salata" si care sa contina cateva nume de fructe. Realizati un program care, la apasarea butonului, sa adauge in lista numele fructului scris in casuta de text, daca este selectat butonul "Option1", si sa il stearga din lista, daca este selectat butonul "Option2". Rezolvare.

Butoanele de optiune se creeaza cu ajutorul controlului Option Button din Toolbox, se denumesc la proprietatea "Name" si se scrie in interiorul lor la proprietatea "caption".

Casutele de text se amplaseaza cu ajutorul controlului TextBox din Toolbox, se denumesc la proprietatea Name si se goleste continutul lor de la proprietatea Text din tabelul de proprietati din dreapta.

Butoanele se amplaseaza cu ajutorul controlului Command Button din Toolbox, se denumesc la proprietatea Name si se scrie in interiorul lor cu "Caption".

O lista simpla se amplaseaza cu ajutorul controlului ListBox din Toolbox si se denumeste folosind proprietatea "Name". Scrieti numele de fructe la proprietatea "List", separate prin Ctrl+Enter, iar la final apasati Enter.

Subrutina care ofera solutia de rezolvare a programului este urmatoarea: Private Sub Buton_Click() If Option1.Value = True Then Salata.AddItem Fructe.Text Else For i = 0 To Salata.ListCount - 1 If Salata.List(i) = Fructe.Text Then Salata.RemoveItem i End If Next i End If End Sub

unde: Option1.Value = True - butonul de optiune este selectat Option1.value = False - butonul de optiune nu este selectat

Page 111: Pce Edusoft

111

lista.AddItem elem = Adauga elementul "elem" la lista "lista" lista.RemoveItem i = Sterge elementul de pe pozitia i din lista "lista"

ListCount = Numarul elementelor din lista List(i) = Elementul din lista de pe pozitia i

54. Amplasati 2 butoane de optiune, 2 casete de validare si un buton, numit "Buton" si pe care sa scrie "Bifeaza". Realizati un program care, la apasarea butonului, sa bifeze prima caseta de validare, daca a fost selectat primul buton de optiune, respectiv a doua caseta, daca a fost selectat cel de-al doilea buton de optiune (casetele de validare nu trebuie sa fie bifate in acelasi timp). Rezolvare.

Butoanele de optiune se creeaza cu ajutorul controlului Option Button din Toolbox, se denumesc la proprietatea "Name" si se scrie in interiorul lor la proprietatea "caption".

Butoanele se amplaseaza cu ajutorul controlului Command Button din Toolbox, se denumesc la proprietatea Name si se scrie in interiorul lor cu "Caption".

Casetele de validare de amplaseaza cu ajutorul controlului Check Box din Toolbox, de denumesc la proprietatea "Name" si se scrie in interiorul lor la proprietatea "Caption".

Subrutina este urmatoarea: Private Sub Buton_Click() If Option1.Value = True Then Check1.Value = 1 Check2.Value = 0 Else Check2.Value = 1 Check1.Value = 0 End If End Sub unde:

Option1.Value = True - butonul de optiune este selectat Option1.value = False - butonul de optiune nu este selectat

CheckBox.Value = 0 - caseta este nemarcata = 1 - caseta este marcata = 2 - caseta este inactiva 55. Realizati un tabel, numit "T", care sa aiba o coloana si 7 randuri.Apoi amplasati un buton, care sa se numeasca "Buton" si pe care sa scrie "Suma cifrelor pare". Scrieti in primele 6 randuri diferite cifre pare si impare. Creati un program care, la apasarea butonului sa calculeze in ultimul rand al tabelului suma cifrelor pare din randurile precedente.

Page 112: Pce Edusoft

112

Rezolvare. Pentru a realiza un tabel alegeti din Toolbox controlul MSFlexGrid (Daca controlul

Microsoft Flex Grid nu se gaseste de la bun inceput in bara de instrumente din partea stanga a mediului Visual Basic, el trebuie adaugat in felul urmator: din meniul VB alegeti optiunea Project, apoi Components si veti obtine o lista de alte componente ce pot fi adaugate la Toolbox. Alegeti din lista Microsoft Flex Grid si bifati in dreptul acestei componente, apoi apasati pe butonul OK. In Toolbox va aparea simbolul acestui control.). Initial tabelul va fi numit "MSFlexGrid1" (trebuie denumit "T") si va avea 2 randuri si 2 coloane, dar putem modifica proprietatile Rows si Cols pentru a modifica numarul de randuri, respectiv de coloane (tabelul trebuie sa contina o coloana si 7 randuri). Coloana si randurile sunt fixe la inceput. Pentru a schimba acest lucru trebuie modificate proprietatile FixedCols si FixedRows cu valoarea "0".

Butoanele se amplaseaza cu ajutorul controlului Command Button din Toolbox, se denumesc la proprietatea Name si se scrie in interiorul lor cu "Caption".

Pentru a scrie in randurile tabelului trebuie folosita urmatoarea subrutina asociata formei: Private Sub Form_Load() T.TextMatrix(0, 0) = 5 T.TextMatrix(1, 0) = 15 T.TextMatrix(2, 0) = 456 T.TextMatrix(3, 0) = 258 T.TextMatrix(4, 0) = 48 T.TextMatrix(5, 0) = 36 End Sub

Subrutina care da solutia programului este urmatoarea: Private Sub Buton_Click() s = 0 For i = 0 To T.Rows - 1 If Val(T.TextMatrix(i, 0)) Mod 2 = 0 Then

s = s + Val(T.TextMatrix(i, 0)) End If Next i T.TextMatrix(6, 0) = s End Sub unde: T.TextMatrix(i,0) = scrie in celula corespunzatoare randului i si coloanei 0 T.Rows = numarul de randuri al tabelului x mod y = restul impartirii lui x la y

56. Realizati un tabel, numit "T", care sa aiba o coloana si 7 randuri.Apoi amplasati un buton, care sa se numeasca "Buton" si pe care sa scrie "Produsul cifrelor impare". Scrieti in primele 6 randuri diferite cifre pare si impare. Creati un program care, la apasarea butonului sa calculeze in ultimul rand al tabelului produsul cifrelor impare din randurile precedente.

Page 113: Pce Edusoft

113

Rezolvare.

Pentru a realiza un tabel alegeti din Toolbox controlul MSFlexGrid (Daca controlul Microsoft Flex Grid nu se gaseste de la bun inceput in bara de instrumente din partea stanga a mediului Visual Basic, el trebuie adaugat in felul urmator: din meniul VB alegeti optiunea Project, apoi Components si veti obtine o lista de alte componente ce pot fi adaugate la Toolbox. Alegeti din lista Microsoft Flex Grid si bifati in dreptul acestei componente, apoi apasati pe butonul OK. In Toolbox va aparea simbolul acestui control.). Initial tabelul va fi numit "MSFlexGrid1" (trebuie denumit "T") si va avea 2 randuri si 2 coloane, dar putem modifica proprietatile Rows si Cols pentru a modifica numarul de randuri, respectiv de coloane (tabelul trebuie sa contina o coloana si 7 randuri). Coloana si randurile sunt fixe la inceput. Pentru a schimba acest lucru trebuie modificate proprietatile FixedCols si FixedRows cu valoarea "0".

Butoanele se amplaseaza cu ajutorul controlului Command Button din Toolbox, se denumesc la proprietatea Name si se scrie in interiorul lor cu "Caption".

Pentru a scrie in randurile tabelului trebuie folosita urmatoarea subrutina asociata formei: Private Sub Form_Load() T.TextMatrix(0, 0) = 5 T.TextMatrix(1, 0) = 15 T.TextMatrix(2, 0) = 456 T.TextMatrix(3, 0) = 258 T.TextMatrix(4, 0) = 48 T.TextMatrix(5, 0) = 36 End Sub Subrutina care da solutia programului este urmatoarea: Private Sub Buton_Click() p = 1 For i = 0 To T.Rows - 1 If Val(T.TextMatrix(i, 0)) Mod 2 <> 0 Then p = p * Val(T.TextMatrix(i, 0))

End If Next i T.TextMatrix(6, 0) = p End Sub

unde: T.TextMatrix(i,0) = scrie in celula corespunzatoare randului i si coloanei 0 T.Rows = numarul de randuri al tabelului x mod y = restul impartirii lui x la y

57. Realizati un tabel, numit "T", care sa aiba 2 coloane si 4 randuri.Apoi amplasati un buton, care sa se numeasca "Buton" si pe care sa scrie "Executa". Scrieti in cele 4 randuri diferite cifre. Creati

Page 114: Pce Edusoft

114

un program care, la apasarea butonului sa afiseze, in cea de-a doua coloana, cifrele din prima coloana dar cu semnul "-". Rezolvare.

Pentru a realiza un tabel alegeti din Toolbox controlul MSFlexGrid (Daca controlul Microsoft Flex Grid nu se gaseste de la bun inceput in bara de instrumente din partea stanga a mediului Visual Basic, el trebuie adaugat in felul urmator: din meniul VB alegeti optiunea Project, apoi Components si veti obtine o lista de alte componente ce pot fi adaugate la Toolbox. Alegeti din lista Microsoft Flex Grid si bifati in dreptul acestei componente, apoi apasati pe butonul OK. In Toolbox va aparea simbolul acestui control.). Initial tabelul va fi numit "MSFlexGrid1" (trebuie denumit "T") si va avea 2 randuri si 2 coloane, dar putem modifica proprietatile Rows si Cols pentru a modifica numarul de randuri, respectiv de coloane (tabelul trebuie sa contina 2 coloane si 4 randuri). Coloana si randurile sunt fixe la inceput. Pentru a schimba acest lucru trebuie modificate proprietatile FixedCols si FixedRows cu valoarea "0".

Butoanele se amplaseaza cu ajutorul controlului Command Button din Toolbox, se denumesc la proprietatea Name si se scrie in interiorul lor cu "Caption".

Pentru a scrie in randurile tabelului trebuie folosita urmatoarea subrutina asociata formei: Private Sub Form_Load() T.TextMatrix(0, 0) = 5 T.TextMatrix(1, 0) = 15 T.TextMatrix(2, 0) = 456 T.TextMatrix(3, 0) = 258 End Sub Subrutina care da solutia programului este urmatoarea:

Private Sub Buton_Click() For i = 0 To T.Rows - 1 T.TextMatrix(i, 1) = -T.TextMatrix(i, 0) Next i End Sub unde: T.TextMatrix(i,0) = scrie in celula corespunzatoare randului i si coloanei 0 T.Rows = numarul de randuri al tabelului

58. Amplasati, intr-o forma, o lista simpla, care sa se numeasca "Animale" si care sa contina diferite nume de animale. Creati posibilitatea de a selecta mai multe elemente din lista. Adaugati un tabel, numit "T" care sa contina, la inceput, o coloana si nici un rand (coloana nu trebuie sa fie fixa) si un buton, numit "Buton" si pe care sa scrie "Executa". Realizati un program care, la apasarea butonului, sa afiseze pe randurile tabelului elementele selectate din lista. Tabelul trebuie sa contina atatea randuri, cate elemente au fost selectate.

Page 115: Pce Edusoft

115

Rezolvare. O lista simpla se amplaseaza cu ajutorul controlului ListBox din Toolbox si se denumeste

folosind proprietatea "Name". Scrieti numele de animale la proprietatea "List", separate prin Ctrl+Enter, iar la final apasati Enter. pentru a selecta mai multe elemente din lista trebuie modificata proprietatea "Multiselect" cu valoarea "1-Simple".

Pentru a realiza un tabel alegeti din Toolbox controlul MSFlexGrid (Daca controlul Microsoft Flex Grid nu se gaseste de la bun inceput in bara de instrumente din partea stanga a mediului Visual Basic, el trebuie adaugat in felul urmator: din meniul VB alegeti optiunea Project, apoi Components si veti obtine o lista de alte componente ce pot fi adaugate la Toolbox. Alegeti din lista Microsoft Flex Grid si bifati in dreptul acestei componente, apoi apasati pe butonul OK. In Toolbox va aparea simbolul acestui control.). Initial tabelul va fi numit "MSFlexGrid1" (trebuie denumit "T") si va avea 2 randuri si 2 coloane, dar putem modifica proprietatile Rows si Cols pentru a modifica numarul de randuri, respectiv de coloane (tabelul trebuie sa contina o coloana si nici un rand). Coloana este fixa la inceput. Pentru a schimba acest lucru trebuie modificata proprietatea FixedCols cu valoarea "0".

Butoanele se amplaseaza cu ajutorul controlului Command Button din Toolbox, se denumesc la proprietatea Name si se scrie in interiorul lor cu "Caption".

Subrutina este urmatoarea: Private Sub Buton_Click() k = 0 T.Rows = 1 For i = 0 To T.Rows - 1 For j = 0 To Animale.ListCount - 1 If Animale.Selected(j) = True Then k = k + 1 T.Rows = k T.TextMatrix(k - 1, 0) = Animale.List(j) End If Next j Next i End Sub unde: T.TextMatrix(i,0) = scrie in celula corespunzatoare randului i si coloanei 0 T.Rows = numarul de randuri al tabelului ListCount = Numarul elementelor din lista List(j) = Elementul din lista de pe pozitia i Lista.Selected(j)=True - elementul de pe pozitia j din lista este selectat

59. Realizati un tabel, numit "N", care sa contina o coloana si 6 randuri si scrieti in fiecare rand diverse nume de persoane.Amplasati un alt tabel, "T", care sa aiba la inceput o coloana si nici un rand, si un buton, numit "Buton" si pe care sa scrie "Executa". Realizati un program care, la

Page 116: Pce Edusoft

116

apasarea butonului, sa afiseze in tabelul "T", doar numele care incep cu litera "A". Tabelul trebuie sa contina atatea randuri, cate nume incep cu "A". Rezolvare.

Pentru a realiza un tabel alegeti din Toolbox controlul MSFlexGrid (Daca controlul Microsoft Flex Grid nu se gaseste de la bun inceput in bara de instrumente din partea stanga a mediului Visual Basic, el trebuie adaugat in felul urmator: din meniul VB alegeti optiunea Project, apoi Components si veti obtine o lista de alte componente ce pot fi adaugate la Toolbox. Alegeti din lista Microsoft Flex Grid si bifati in dreptul acestei componente, apoi apasati pe butonul OK. In Toolbox va aparea simbolul acestui control.). Initial tabelul va fi numit "MSFlexGrid1" (trebuie denumit "T" sau "N") si va avea 2 randuri si 2 coloane, dar putem modifica proprietatile Rows si Cols pentru a modifica numarul de randuri, respectiv de coloane (tabelul "T" trebuie sa contina o coloana si nici un rand, iar "N" trebuie sa aiba o coloana si 6 randuri). Coloana este fixa la inceput. Pentru a schimba acest lucru trebuie modificata proprietatea FixedCols cu valoarea "0".

Butoanele se amplaseaza cu ajutorul controlului Command Button din Toolbox, se denumesc la proprietatea Name si se scrie in interiorul lor cu "Caption".

Pentru a scrie in randurile tabelului "N" trebuie folosita urmatoarea subrutina asociata formei: Private Sub Form_Load() N.TextMatrix(0, 0) = "Ana": N.TextMatrix(1, 0) = "Alina" N.TextMatrix(2, 0) = "Diana": N.TextMatrix(3, 0) = "Andrei" N.TextMatrix(4, 0) = "Bianca": N.TextMatrix(5, 0) = "Radu" End Sub

Subrutina care da solutia programului este urmatoarea: Private Sub Buton_Click() k = 0 T.Rows = 1 For i = 0 To T.Rows - 1 For j = 0 To N.Rows - 1 If Left(N.TextMatrix(j, 0), 1) = "A" Then k = k + 1 T.Rows = k T.TextMatrix(k - 1, 0) = N.TextMatrix(j, 0) End If Next j Next i End Sub unde: T.TextMatrix(i,0) = scrie in celula corespunzatoare randului i si coloanei 0 T.Rows = numarul de randuri al tabelului Left(N.TextMatrix(j, 0), 1) = "A" - prima litera a cuvantului scris pe randul j, coloana 0 din tabelul "N" este "A"

Page 117: Pce Edusoft

117

Capitolul 4. Programe diverse (Anca, Cătălin, Ionuţ) Anca 1. Realizati un program care sa contina un tabel cu produse si pretul acestora si sa afiseze cate bucati din fiecare produs pot fi cumparate cu o anumita suma inscrisa intr-o caseta de text. Rezolvare:

Private Sub Command1_Click() For i = 1 To T.Rows - 1 If T.TextMatrix(i, 1) <> "" Then If Val(T.TextMatrix(i, 2)) <= Val(Text1.Text) Then nr = (Text1.Text) \ (T.TextMatrix(i, 2)) End If List1.AddItem T.TextMatrix(i, 1) List1.AddItem nr End If Next i End Sub Private Sub Form_Load() T.ColWidth(0) = T.ColWidth(0) / 2 T.ColWidth(1) = T.ColWidth(1) * 2 For i = 1 To T.Rows - 1 T.TextMatrix(i, 0) = i Next i T.TextMatrix(0, 0) = "Nr. crt." T.TextMatrix(0, 1) = "Produs" T.TextMatrix(0, 2) = "Pret" End Sub Private Sub T_KeyPress(KeyAscii As Integer) If (KeyAscii = 8) And (T.Text <> "") Then L = Len(T.Text) T.Text = Left(T.Text, L - 1) Else If KeyAscii >= 32 Then

Page 118: Pce Edusoft

118

T.Text = T.Text + Chr$(KeyAscii) End If End If End Sub 2.Realizati un tabel cu abonatii la o societate prestatoare de servicii si situatia platilor. Sa se afiseze intr-o lista abonatii restantieri si valoarea restantelor. Rezolvare

Private Sub Command1_Click() For i = 1 To Tabel.Rows - 1 If Val(Tabel.TextMatrix(i, 2)) <> 0 Then List1.AddItem Tabel.TextMatrix(i, 1) List1.AddItem Tabel.TextMatrix(i, 2) End If Next i End Sub Private Sub Form_Load() Tabel.ColWidth(0) = Tabel.ColWidth(0) / 2 Tabel.ColWidth(1) = Tabel.ColWidth(1) * 2 For i = 1 To Tabel.Rows - 1 Tabel.TextMatrix(i, 0) = i Next i Tabel.TextMatrix(0, 0) = "Nr. crt." Tabel.TextMatrix(0, 1) = "Abonat" Tabel.TextMatrix(0, 2) = "Restanta" End Sub Private Sub Tabel_KeyPress(KeyAscii As Integer) If (KeyAscii = 8) And (Tabel.Text <> "") Then L = Len(Tabel.Text): Tabel.Text = Left(Tabel.Text, L - 1) Else If KeyAscii >= 32 Then Tabel.Text = Tabel.Text + Chr$(KeyAscii) End If End If End Sub

Page 119: Pce Edusoft

119

3. O forma contine - un tabel cu nume de persoane, varsta si sexul acestora - doua butoane de optiune: “Femeie” si “Barbat” - doua liste de tip combo pentru varsta minima si maxima - o lista Realizati o subrutina care sa afiseze in lista persoanele care corespund descrierii. Rezolvare:

Private Sub Command1_Click() If Option1.Value = True Then For i = 1 To T.Rows - 1 If T.TextMatrix(i, 2) = "F" Then If (T.TextMatrix(i, 3) >= Combo1.Text) And _ (T.TextMatrix(i, 3) <= Combo2.Text) Then List1.AddItem T.TextMatrix(i, 1) End If End If Next i Else If Option2.Value = True Then For j = 1 To T.Rows - 1 If T.TextMatrix(j, 2) = "M" Then If (T.TextMatrix(j, 3) >= Combo1.Text) And _ (T.TextMatrix(j, 3) <= Combo2.Text) Then List1.AddItem T.TextMatrix(j, 1) End If End If

Option1

Option2

Combo2

Combo1

Command1

Command2

T

List1

Page 120: Pce Edusoft

120

Next j End If End If End Sub Private Sub Command2_Click() Open App.Path + "\t.txt" For Output As #1 For i = 1 To T.Rows - 1 For j = 0 To T.Cols - 1 Print #1, T.TextMatrix(i, j) Next j Next i Close #1 End Sub Private Sub Form_Load() T.ColWidth(0) = T.ColWidth(0) / 2 T.ColWidth(1) = T.ColWidth(1) * 2 For i = 1 To T.Rows - 1 T.TextMatrix(i, 0) = i Next i T.TextMatrix(0, 0) = "Nr. crt." T.TextMatrix(0, 1) = "Nume si prenume" T.TextMatrix(0, 2) = "Sex" T.TextMatrix(0, 3) = "Varsta" Open App.Path + "\t.txt" For Input As #1 For i = 1 To T.Rows - 1 For j = 0 To T.Cols - 1 Line Input #1, s T.TextMatrix(i, j) = s Next j Next i Close #1 End Sub Private Sub T_KeyPress(KeyAscii As Integer) If (KeyAscii = 8) And (T.Text <> "") Then L = Len(T.Text) T.Text = Left(T.Text, L - 1) Else If KeyAscii >= 32 Then T.Text = T.Text + Chr$(KeyAscii) End If End If End Sub 4. O forma contine un tabel cu nume de domnitori si anii de domnie si o lista de tip combo cu numele tuturor domnitorilor. Realizati o subrutina asociata evenimentului click pe butonul Command1 care sa afiseze intr-o caseta de text anii de domnie ai domnitorului selectat din lista. Rezolvare: Private Sub Command1_Click() Open App.Path + "\tabel.txt" For Output As #1 For i = 1 To T.Rows - 1 For j = 0 To T.Cols - 1 Print #1, T.TextMatrix(i, j) Next j Next i Close #1 End Sub

Page 121: Pce Edusoft

121

Private Sub Command2_Click() For i = 1 To T.Rows - 1 If T.TextMatrix(i, 1) = Combo1.Text Then Text1.Text = T.TextMatrix(i, 2) End If Next i End Sub Private Sub Form_Load() T.ColWidth(0) = T.ColWidth(0) / 2 T.ColWidth(1) = T.ColWidth(1) * 2 For i = 1 To T.Rows - 1 T.TextMatrix(i, 0) = i Next i T.TextMatrix(0, 0) = "Nr. crt." T.TextMatrix(0, 1) = "Domnitorul" T.TextMatrix(0, 2) = "Domnie" Open App.Path + "\tabel.txt" For Input As #1 For i = 1 To T.Rows - 1 For j = 0 To T.Cols - 1 Line Input #1, s T.TextMatrix(i, j) = s Next j Next i Close #1 End Sub Private Sub T_KeyPress(KeyAscii As Integer) If (KeyAscii = 8) And (T.Text <> "") Then L = Len(T.Text) T.Text = Left(T.Text, L - 1) Else If KeyAscii >= 32 Then T.Text = T.Text + Chr$(KeyAscii) End If End If End Sub

Page 122: Pce Edusoft

122

Cătălin 5. Sa se realizeze un program care sa contina o bila (realizata prin controlul Shape) colorata, care la pornirea programului sa aiba o miscare diagonala, ca pe o masa de biliard: la lovirea oricareia din cele patru margini ale formei, bila se va reflecta sub acelasi unghi, conform legii reflexiei. Rezolvare Dim pas As Integer Dim vx As Integer Dim vy As Integer Private Sub Form_Load()

pas = 100 vx = 1 vy = 1

End Sub Private Sub Timer_Timer()

If bila.Left + bila.Width >= Form1.Width Or bila.Left <= 0 Then vx = -vx If bila.Top + bila.Height >= Form1.Height Or bila.Top <= 0 Then vy = -vy bila.Left = bila.Left + pas * vx bila.Top = bila.Top + pas * vy

End Sub

6. Sa se realizeze un program asemanatori celui anterior, dar bila sa nu aiba decat o miscare de sus in jos si inapoi. Rezolvare: Dim pas As Integer Dim vy As Integer Private Sub Form_Load()

pas = 100 vy = 1

End Sub Private Sub Timer_Timer()

If bila.Top + bila.Height >= Form1.Height Or bila.Top <= 0 Then vy = -vy bila.Top = bila.Top + pas * vy

End Sub 7. Sa se realizeze un program asemanatori celui anterior, dar bila sa aiba o miscare pe orizontala, de la stanga la dreapta si inapoi.

Page 123: Pce Edusoft

123

Rezolvare: Dim pas As Integer Dim vx As Integer Private Sub Form_Load()

pas = 100 vx = 1

End Sub Private Sub Timer_Timer()

If bila.Left + bila.Width >= Form1.Width Or bila.Left <= 0 Then vx = -vx bila.Left = bila.Left + pas * vx

End Sub 8. Sa se realizeze un program care sa afiseze la deschidere un calculator compus din sapte butoane: "C" - sterge,"+" - aduna,"/" - imparte,"x"- inmulteste, "-" - scade, "R"- radical, "%" - procent si trei casete de text. In primele doua sa se introduca de catre utilizator operanzii (numere), iar in a treia sa se afiseze rezultatul! La fiecare apasare de buton operatia atribuita acestuia sa aiba loc iar cifrele din primele casete de text sa se stearga. Iar la fiecare operatie care nu se poate realiza sa se afiseze motivul! Rezolvare:

Private Sub anuleaza_Click()

a.Text = "" b.Text = "" r.Text = ""

End Sub Private Sub aduna_Click()

r.Text = Val(a.Text) + Val(b.Text) End Sub Private Sub sacde_Click()

r.Text = Val(a.Text) - Val(b.Text) End Sub Private Sub imparte_Click()

If Val(b.Text) = 0 Then r.Text = "impartirea la 0 imposibila"

Page 124: Pce Edusoft

124

Else r.Text = Val(a.Text) / Val(b.Text) End If

End Sub Private Sub inmulteste_Click()

r.Text = Val(a.Text) * Val(b.Text) End Sub Private Sub la_suta_Click()

r.Text = (Val(a.Text) / 100) * Val(b.Text) End Sub Private Sub radical_Click()

If Val(a.Text) < 0 Then r.Text = "din nr negative nu se poate extrage radical" Else r.Text = Sqr(Val(a.Text)) End If

End Sub 9. Sa se realizeze un program care sa determine relatia de mai mare sau mai mic intre doua numere. Rezolvare: Amplasati trei casete de text, a si b pentru operanzi si r pentru rezultat si butonul de comanda compara. Scrieti urmatorul cod: Private Sub compara_Click()

If Val(a.Text) < Val(b.Text) Then r.Text = "nr " + a.Text + " este mai mic ca nr " + b.Text Else r.Text = "nr " + a.Text + " este mai mare ca nr " + b.Text End If

End Sub

10. Scrieti un program care, folosind un cronometru, sa alterneze textul de pe un buton de comanda. La apasarea butonul de comanda, se va afisa Caption-ul acelui buton. Rezolvare Amplasati pe forma un cronometru (Timer1) si un buton de comanda Command1. La proprietatea Intrerval a lui Timer1 scrieti, de exemplu, valoarea 1000 (pentru o secunda). Valoarea 0 inseamna nefunctionarea cronometrului, deci va trebui sa scrieti o valoare intreaga mai mare ca zero. Codul asociat celor doua controale va fi:

Private Sub Timer1_Timer()

Page 125: Pce Edusoft

125

If Command1.Caption = "PRIMUL TEXT" Then Command1.Caption = "AL DOILEA TEXT" Else Command1.Caption = "PRIMUL TEXT" End If End Sub Private Sub Command1_Click() MsgBox Command1.Caption End Sub

11. Scrieti un program care sa alterneze continutul unei casete cu imagine, la fiecare secunda. Rezolvare Sa consideram trei fisiere JPG, numite "unu.jpg", "doi.jpg" si "trei.jpg". Evident, in locul lor ar putea fi alte fisiere JPG. Amplasam un control de tip Image si un cronometru. Cronometrul Timer1 va avea Interval=1000 (reprezentand o secunda). In proprietatea Tag a lui Image1 vom scrie 1, iar in proprietatea Picture vom incarca prima imagine ("unu.jpg"). Codul pentru cronometru va fi:

Private Sub Timer1_Timer() If Image1.Tag=1 Then Image1.Tag=2 Image1.Picture=LoadPicture(App.Path + "\doi.jpg") ElseIf Image1.Tag=2 Then Image1.Tag=3 Image1.Picture=LoadPicture(App.Path+"\trei.jpg") Else Image1.Tag=1 Image1.Picture=LoadPicture(App.Path+"\unu.jpg") End If End Sub

Propunem cititorului realizarea acestui program cu instructionea Select Case si generalizarea sa petru un numar mai mare de fisiere cu imagini. 12. Scrieti un program care sa determine care este cel mai mic element dintr-o lista de numere intregi. Rezolvare Fie lista L, avand elementele deja puse in ea (fie in etapa de proiectare a programului, fie in urma apelarii metodei AddItem, din program). Pentru a determina cel mai mic element al listei, vom folosi urmatorul algoritm (atasat unui buton de comanda Command1):

Private Sub Command1_Clic() minim=Val(L.List(0)) N=L.ListCount-1 For i=1 to N If Val(L.List(i))<minim Then minim=Val(L.List(i)) End If Next i MsgBox "Minimul listei este " & minim End Sub

In acest program am presupus ca lista are cel putin un element.

Page 126: Pce Edusoft

126

Ionuţ 13. Realizaţi un program care, pentru un număr natural cu valoarea maximă 100, îl scrie în cuvinte. Rezolvare Private Sub Command1_Click() If X.Text = "" Then MsgBox "Introduceti un nr, va rog!", vbOKOnly, "Atentie" Else Text1.Text = X Mod 10 Text2.Text = X / 10 Text3.Text = X \ 10 T4.Text = X \ 100 nr = Val(Text1) Select Case nr 'Case 0: z = "zero" Case 1: z = "unu" Case 2: z = "doi" Case 3: z = "trei" Case 4: z = "patru" Case 5: z = "cinci" Case 6: z = "sase" Case 7: z = "sapte" Case 8: z = "opt" Case 9: z = "noua" End Select Y = z If Text3.Text = "1" Then 'sunt nr de la 10 la 19 nr = Val(Text1) Select Case nr Case 0: z = "zece" Case 1: z = "unsprezece" Case 2: z = "doisprezece" Case 3: z = "treisprezece" Case 4: z = "paisprezece" Case 5: z = "cincisprezece" Case 6: z = "saisprezece" Case 7: z = "saptesprezece" Case 8: z = "optsprezece" Case 9: z = "nouasprezece" End Select Y = z Else If Text3.Text = "0" Then 'sunt nr de la 0 la 9 nr = Val(Text1) Select Case nr Case 0: z = "zero" Case 1: z = "unu" Case 2: z = "doi" Case 3: z = "trei" Case 4: z = "patru" Case 5: z = "cinci" Case 6: z = "sase" Case 7: z = "sapte" Case 8: z = "opt" Case 9: z = "noua" End Select Y = z ElseIf Text3.Text = 2 Then If Text1.Text = "0" Then Y = "douazeci" Else

Page 127: Pce Edusoft

127

c = "douazeci si" Y = c + " " + z.Text End If ElseIf Text3.Text = 3 Then If Text1.Text = "0" Then Y = "treizeci" Else c = "treizeci si" Y = c + " " + z.Text End If ElseIf Text3.Text = 4 Then If Text1.Text = "0" Then Y = "patruzeci" Else c = "patruzeci si" Y = c + " " + z.Text End If ElseIf Text3.Text = 5 Then If Text1.Text = "0" Then Y = "cincizeci" Else c = "cincizeci si" Y = c + " " + z.Text End If ElseIf Text3.Text = 6 Then If Text1.Text = "0" Then Y = "saizeci" Else c = "saizeci si" Y = c + " " + z.Text End If ElseIf Text3.Text = 7 Then If Text1.Text = "0" Then Y = "saptezeci" Else c = "saptezeci si" Y = c + " " + z.Text End If ElseIf Text3.Text = 8 Then If Text1.Text = "0" Then Y = "optzeci" Else c = "optzeci si" Y = c + " " + z.Text End If ElseIf Text3.Text = 9 Then If Text1.Text = "0" Then Y = "nouazeci" Else c = "nouazeci si" Y = c + " " + z.Text End If ElseIf Text3.Text = 10 Then Y = "o suta" End If End If End If Command1.Enabled = False End Sub Private Sub Command2_Click() X.Text = "" Y.Text = "" Command1.Enabled = True

Page 128: Pce Edusoft

128

X.SetFocus End Sub

14. Realizati un program care, la incercarea apasarii unui buton, acesta sa fuga din calea mouse-ului. Rezolvare. Vom realiza urmatorul program distractiv.

Private Sub Command1_Click() End End Sub Private Sub Form_Load() MsgBox "Alegeti o foaie de calcul Excel" OLE1.Visible = False Command1.Caption = "Sfarsit" CommonDialog1.ShowOpen OLE1.CreateLink (CommonDialog1.filename) OLE1.AppIsRunning = True OLE1.DoVerb End Sub

15. Realizati un program care sa determine, in functie de talie, varsta si sex, masa ideala a unei persoane.

Page 129: Pce Edusoft

129

Rezolvare Vom realiza programul cu intrebarile structurate in 4 forme, astfel: Form1:

Private Sub Command1_Click() If Text1.Text = "" Then MsgBox "Introdu totusi niste valori in caseta de text!!!", vbCritical, "N-ai uitat ceva?" ElseIf Val(Text1.Text) > 250 Then MsgBox "HA! Ha! Ha! Bun venit in tara piticilor!", vbExclamation, "Hai sa nu ne mintim!!!" Text1.Text = "" Text1.SetFocus ElseIf Val(Text1.Text) < 150 Then MsgBox "Acest program functioneaza doar pentru persoanele peste 150 de cm!", vbInformation, "Informatie" Text1.Text = "" Text1.SetFocus Else Form1.Visible = False Load Form2 Form2.Visible = True Form2.Text1.SetFocus End If End Sub Form2:

Private Sub Command1_Click() If Len(Text1.Text) > 2 Then MsgBox "N-ai murit inca??!!", vbExclamation, "HA HA HA...i sa nu ne mintim!!!" Text1.Text = "" Text1.SetFocus ElseIf Text1.Text = "" Then MsgBox "Siii...ce varsta ai?", vbExclamation, "N-ai uitat nimic?!" Text1.SetFocus Else

Page 130: Pce Edusoft

130

Form2.Visible = False Load Form3 Form3.Visible = True End If End Sub Private Sub Command2_Click() Form2.Visible = False Form1.Visible = True End Sub Form3

Private Sub Command1_Click() On Error GoTo acolo Form3.Visible = False Load Form4 Form4.Visible = True If Form3.Option1.Value = True Then Form4.Label2.Caption = 50 + 0.75 * (Form1.Text1.Text - 150) + (Form2.Text1.Text - 20) / 4 Else: Form4.Label2.Caption = 50 + 0.75 * (Form1.Text1.Text - 150) + (Form2.Text1.Text - 20) / 4 - 10 End If acolo: If Err.Number = 13 Then Unload Form4 MsgBox "INTRODU varsta corect!!!", vbExclamation, "Te crezi smecher(a) K mine?!" Err.Clear Unload Form3 Form2.Visible = True Form2.Text1.SetFocus End If End Sub Private Sub Command2_Click() Form3.Visible = False Form2.Visible = True End Sub Form4: Private Sub Command1_Click() Unload Form4 Unload Form3 Unload Form2 Unload Form1 End Sub

Page 131: Pce Edusoft

131

16. Acelasi program, ca la 15, dar totul intr-o singura fereastra (dupa una cu explicatii). Rezolvare: Form1

Private Sub Command1_Click() If Text1.Text = "" Or Text2.Text = "" Then MsgBox "Introdu datele in casetele de text!!!" Else If Option1.Value = True Then Label4.Caption = 50 + 0.75 * (Text1.Text - 150) + (Text2.Text - 20) / 4 ElseIf Option2.Value = True Then Label4.Caption = 50 + 0.75 * (Text1.Text - 150) + (Text2.Text - 20) / 4 - 10 Else MsgBox "Alege sexul?", vbOKOnly, "Ai sarit o etapa!!!" End If End If If Val(Label4.Caption) < 0 Then MsgBox "Am mentionat ca programul functioneaza la persoanele peste 150 de cm!!!", vbCritical, "EROARE!" Text1.Text = "" Label4.Caption = "" Text1.SetFocus End If End Sub Private Sub Command2_Click() Unload Form1 End Sub Private Sub Command3_Click() Text1.Text = "" Text2.Text = "" Option1.Value = False Option2.Value = False Label4.Caption = "" Text1.SetFocus End Sub

Page 132: Pce Edusoft

132

Form2 (prima care va porni)

Private Sub Command1_Click() Unload Form2 Load Form1 Form1.Visible = True End Sub

17. Scrieri un program in care, prin intermediul unor butoane de optiune, dintr-o forma, sa se modifice o alta forma. Rezolvare: Form1

Private Sub Command1_Click() Load Form2 Form2.Visible = True End Sub

Page 133: Pce Edusoft

133

Form2

Private Sub Command1_Click() If Option2.Value = True Then Form1.Height = Form1.Height + 150 ElseIf Option1.Value = True Then Form1.Height = Form1.Height - 150 ElseIf Option3.Value = True Then Form1.Width = Form1.Width - 150 ElseIf Option4.Value = True Then Form1.Width = Form1.Width + 150 ElseIf Option5.Value = True Then Form1.Height = Form1.Height + 150 Form1.Width = Form1.Width + 150 ElseIf Option6.Value = True Then Form1.Height = Form1.Height - 150 Form1.Width = Form1.Width - 150 End If End Sub Private Sub Command2_Click() Unload Form2 End Sub 18. Dintr-o forma, prin intermediul unor butoane, sa se deplaseze o alta forma.

Page 134: Pce Edusoft

134

Rezolvare Form1

Private Sub Care_Click() MsgBox "Muta forma intr-o pozitie favorabila!", vbInformation, "Un program care..." End Sub Private Sub Command1_Click() Load Form2 Form2.Enabled = True Form2.Visible = True End Sub Form2

Private Sub Command1_Click() Unload Form2 End Sub Private Sub Image1_Click() Form1.Top = Form1.Top - 250 End Sub Private Sub Image2_Click() Form1.Left = Form1.Left + 250 End Sub Private Sub Image3_Click() Form1.Top = Form1.Top + 250 End Sub Private Sub Image4_Click() Form1.Left = Form1.Left - 250 End Sub

Page 135: Pce Edusoft

135

Page 136: Pce Edusoft

136

Capitolul 5. Programe cu elemente avansate ale mediului Visual Basic (Claudiu) 1. Sa se creeze un vector de controale Shape. Rezolvare Programul este un exemplu de folosire a unui vector de controale.Pentru crearea unui vector de controale la momentul executiei trebuie numai scris numarului de ordine al unui control de la care vrem sa pornim sa facem vectorul, in cazul programului Shape(0).Urmatoarele controale se incarca prin intermediul instructiunii Load. Proprietatea Shape a controlui Shape are 6 valori fiecare indicand o anumita forma geometrica a controlului.Proprietatea FillStyle determina modul in care este colorat controlul, opac, transparent, sau cu diferite linii. Controalele sunt mutate pentru a nu se suprapune.

Private Sub Form_Load() Shape(0).FillStyle = 0 Shape(0).FillColor = vbGreen Shape(0).Shape = 0 For i = 1 To 5

Load Shape(i) Shape(i).Shape = i Shape(i).FillStyle = 0 Shape(i).FillColor = vbMagenta Shape(i).Top = Shape(i - 1).Top + 500 Shape(i).Left = Shape(i - 1).Left + i / 2 * 300 Shape(i).Visible = True

Next i End Sub

2 Sa se scrie un program care sa deseneze o elipsa ale carei semiaxe sunt date de utilizator. Rezolvare: Programul arata modul de lucru cu instructiunea Circle, instructiune care poate desena si elipse dar trebuie specificat aspectul, adica raportul dintre lungimea celor 2 semiaxe. Programul nu masoara dimensiunile in twips ci in centimetrii, acest lucru se face prin intermediul instructiunii: Scale (-3540, 2505)-(3540, -2505) Cu ajutorul evenimentelor GotFocus a casetelor de text, in care trebuie introduse dimensiunile semiaxelor, casetele devin goale daca se vrea introducerea a noi dimensiuni a semiaxelor.

Shape(0) - singurul existent in faza de proiectare

Page 137: Pce Edusoft

137

Dim a, b As Byte Dim aspect As Single Private Sub Command1_Click()

a = Val(Text1.Text) b = Val(Text2.Text) aspect = b / a Text3.Text = aspect Label5.Visible = False Label6.Visible = False Form1.Cls Circle (7, 5), 3, , , , aspect

End Sub Private Sub Form_Paint()

ScaleMode = vbCentimeters Circle (7, 5), 3, , , , 2 Line (5, 5)-(9, 5) Line (7, 2)-(7, 8)

End Sub Private Sub Text1_GotFocus()

If Text1.Text <> "" And Text2.Text <> "" Then Text1.Text = "" Text2.Text = ""

End If End Sub Private Sub Text2_GotFocus()

If Text1.Text <> "" And Text2.Text <> "" Then Text1.Text = "" Text2.Text = ""

End If End Sub

Page 138: Pce Edusoft

138

3. Sa se scrie un program care sa mute o forma folosind proprietatile Left si Top. Rezolvare: Programul foloseste functia Rnd care returneaza un numar aleatoriu.Acest numar e folosit pentru a determina pozitia la care se muta form-ul.Form-ul se muta la fiecare 250 de milisecunde, acest lucru se face prin intermediul unui control Timer.Functia Rnd returneaza urmatorul numar aleatoriu pornind de la numarul anterior generat, pentru a evita acest lucru se foloseste instructiunea Randomize care face ca functia Rnd sa returneze un numar aleatoriu pornind de la ceasul sistemului.

Dim aleatoriu, semnleft, semntop As Single Dim pozitieleft, pozitietop As Integer Dim i As Byte Private Sub Command1_Click()

End End Sub Private Sub Form_Load()

Timer1.Interval = 250 i = 0

End Sub Private Sub Timer1_Timer()

Do While i < 1 Randomize aleatoriu = Rnd Select Case aleatoriu Case Is < 0.25

semnleft = -1 Case 0.25 To 0.5

semntop = -1.15 Case 0.5 To 0.75

semnleft = 1.66 Case Is > 0.75

semntop = 1 End Select pozitieleft = Form1.Left + semnleft * aleatoriu * 4000 pozitietop = Form1.Top + semntop * aleatoriu * 3000 If pozitieleft < 7635 And pozitietop < 5235 And pozitieleft > 0 _ And pozitietop > 0 Then

Form1.Move Form1.Left+semnleft*aleatoriu*3000,Form1.Top _ + semntop * aleatoriu * 4000 i = 1

End If Loop

End Sub

Page 139: Pce Edusoft

139

4. Sa se creeze un program care sa afiseze numele autorilor din tabelul Authors al bazei de date BIBLIO intr-o caseta de text.Sa se foloseasca un control Data. Rezolvare:

Se amplaseaza pe forma un control de tip Data (cu numele Data1), apoi se realizeaza conexiune cu baza de date respective, stabilind proprietatile corespunzatoare ale acestui control, asa cum rezulta din urmatoarele figuri.

Programul leaga prin cod o caseta de text de o baza de date.Pentru a lega baza de date se foloseste un control Data care furnizeaza datele necesare controlului caseta de text.Legarea casetei de text de controlul Data se face prin atribuirea proprietatii DataSource ca valoare numelui controlului Data si proprietatii DataField ca valoare numele campului tabelul bazei de date de care vrem sa ne legam. Proprietatii Connect a controlului Data ii atribuim ca valoare tipul de baza de data de care dorim se ne legam, in cazul programului Access, proprietatii DatabaseName ii atribuim ca valoare calea si numele fisierului ce contine baza de date,proprietatii RecordSource i se atribuie ca valoare numele tabelului din baza de date ce ne intereseaza. Toate aceste lucruri se pot face fara a scrie nici o linie de cod, toate valorile date fiind scrise in fereastra de proprietati. 5. Sa se creeze un program care sa afiseze intr-un tabel MSFlexgrid continutul tabelului Authors din baza de date BIBLIO. Rezolvare

Amplasati un control Data si un tabel MSFlexGrid corespunzator (10 randuri si 5 coloane).

Page 140: Pce Edusoft

140

Dupa ce realizati conexiune cu baza de date, ca la programul anterior, scrieti urmatorul cod: Private Sub Form_Load()

Data1.DatabaseName = "C:\Program Files\DevStudio\VB\BIBLIO.MDB" Data1.RecordSource = "Authors"

End Sub Programul contine un control MSFlexGrid care este legat de baza de date BIBLIO, baza de date ce este furnizata cu limbajul de programare Visual Basic si are scop didactic. Legarea unui tabel de o baza de date se face prin intermediul unui control data.Prin intermediul proprietatii DataBaseName a contolului data se specifica baza de date de care sa se lege controlul. Data1.DatabaseName = "C:\Program Files\DevStudio\VB\BIBLIO.MDB" Proprietati RecordSource i se da ca valoare numele tabelului din cadrul bazei de date cu care vrem sa legam controlul data: Data1.RecordSource = "Authors" Mai sunt si alte 2 proprietati ale controlului Data care nu pot fi specificate la momentul executiei, deci nu pot fi stabilite prin cod, ci trebuie stabilite la momentul scrieri programului.In fereastra de proprietati, in dreptul proprietatii RecordsetType se alege Dynaset si in dreptul proprietatii Connect se alege Acces, acesta fiind tipul bazei de date de care se leaga controlul.Controlului MSFlexgrid trebuie sa aiba ca valoare a proprietatii DataSource numele controlului Data pe care il folosim pentru a ne lega de o baza de date. 6. Sa se scrie un program care sa afiseze la apasarea unui buton un text peste o imagine continuta intr-o caseta cu imagine. Rezolvare

Command1

Picture1

Page 141: Pce Edusoft

141

Private Sub Command1_Click()a

Picture1.CurrentX = 600 Picture1.CurrentY = 1700 Picture1.FontSize = 12 Picture1.ForeColor = RGB(255, 255, 255) Picture1.Print "Scriu pe o caseta cu imagine" Command1.Visible = False

End Sub Private Sub Form_Load()

Form1.Width = 7000 Form1.Height = 5000 Picture1.AutoSize = True Picture1.Picture = LoadPicture("C:\Program Files\DevStudio\VB\”+ _ “samples\PGuide\PalMode\FOREST.jpg")

End Sub 7. Sa se scrie un program care sa permita mutarea unui control. Rezolvare

Programul arata modul in care se foloseste evenimentul DragDrop al unui form.Controlul folosit pentru demonstrare este un buton a carei proprietate DragMode are valoarea 1.Aceasta valoare face ca controlul sa poata fi mutat foarte simplu fara a fi nevoie sa se scrie cod pentru fiecare eveniment in parte (Drag si apoi Drop), dar ii afecteaza modul de comportare in cazul evenimentului click.Mutarea propriu-zisa a controlului se face cu ajutorul metodei Move.Procedura evenimentului DragDrop deja ne da controlul asupra caruia are loc acest eveniment si deasemenea si pozitia in care a fost eliberat controlul prin variabilele X si Y.Pentru ca miscarea sa fie naturala controlul este mutat astfel incat mijlocul sau ( X - Source.Width / 2), (Y - Source.Height / 2) sa corespunda locului in care se afla pointerul mouse-ului in momentul in care a fost eliberat.

Private Sub Form_DragDrop(Source As Control, X As Single, Y As Single)

Source.Move (X - Source.Width / 2), (Y - Source.Height / 2) End Sub Private Sub Form_Load()

Command1.DragMode = 1 End Sub

8. Sa se scrie un program care sa sesiseze cand un control este miscat peste un alt control, dar sa nu permita mutarea acelui control. Rezolvare Private Sub Form_DragOver(Source As Control, X As Single, Y As Single, State As Integer) Label1.Caption = "Tocmai ati folosit facilitatea drag-and-drop" End Sub Private Sub Form_Load() Command1.DragMode = 1 End Sub Private Sub Label3_DragDrop(Source As Control, X As Single, Y As Single) Label1.Caption = "Ati eliberat butonul pe dreptunghiul albastru" End Sub

Page 142: Pce Edusoft

142

9. Sa se scrie un program care sa contina doua casete de text si care sa permita mutarea textului selectat dintr-o caseta de text in alta. Rezolvare:

Private Sub Form_Load() Text1.OLEDragMode = 1 Text1.OLEDropMode = 2 Text2.OLEDragMode = 1 Text2.OLEDropMode = 2 End Sub

10. Sa se creeze o clasa care sa aiba o proprietate care sa contina un numar, si o metoda care sa calculeze aria unui cerc de raza egala cu valoarea retinuta in proprietate.Sa se foloseasca clasa in cadrul unui program care sa calculeze aria unui cerc de raza data. 11. Sa se creeze o bara de instrumente. Rezolvare Amplasati in partea de sus a formei un control Picture1 de tip PictureBox, peste care suprapuneti trei controale de tip Image (Image1, Image2 si Image3):

Apoi scrieti urmatorul cod: Private Sub Form_Load() Set Image1.Picture = _ LoadPicture("C:\Program Files\DevStudio\VB\samples\PGuide\Optimize\COG.bmp") Set Image2.Picture = _ LoadPicture("C:\Program Files\DevStudio\VB\samples\PGuide\Optimize\MONITOR.bmp") Set Image3.Picture = _ LoadPicture("C:\Program Files\DevStudio\VB\samples\PGuide\Optimize\ROOT.bmp") End Sub Private Sub Image1_Click() MsgBox ("A fost apasat primul 'buton'") End Sub

Label2 (initial Caption="")

Command1

Label1

Label3

Page 143: Pce Edusoft

143

Private Sub Image2_Click() MsgBox ("A fost apasat al doilea 'buton'") End Sub Private Sub Image3_Click() MsgBox ("A fost apasat al treilea 'buton'") End Sub

Programul arata modul in care se poate construi o bara de instrumente.S-a folosit un control Picture care a fost folosit ca container pentru alte 3 controale Image.Fiecarui control Image i-a fost atribuita cate o imagine specificandu-se calea fisierului care contine imaginea pe care am dorit s-o afisam pe „buton”.Operatia ce ar trebui sa fie determinata de apasarea unui anumit buton se faca prin intermediul evenimentului click al controlului Image.

Controlul Picture s-a folosit doar pentru o mai usoara manipulare a controalelor Image. 12. Sa se scrie un program care sa contina doua casete de text si sa nu permita mutarea textului selectat dintr-o caseta de text in alta Rezolvare:

Private Sub Form_Load() Text1.OLEDragMode = 1 Text1.OLEDropMode = 2 Text2.OLEDragMode = 1 Text2.OLEDropMode = 0 End Sub

13. Sa se scrie un program care sa permita in timpul executiei alegerea obiectului ce va fi inserat intr-un container OLE. Rezolvare Amplasati pe forma un control OLE cu numele OLE1 si un buton de comanda Command1. Scrieti apoi codul urmator: Private Sub Command1_Click()

OLE1.InsertObjDlg OLE1.SizeMode = 2

End Sub Private Sub Form_Load()

Command1.Caption = "Insereaza un obiect in containerul OLE" End Sub 14. Sa se scrie un program care sa permita cautarea printre fisierele din calculator, si care la selectarea unuia sa afiseze un mesaj. Rezolvare Amplasati un control FileListBox, un control DriveListBox si unul DirListBox, ca in figura de mai jos si scrieti urmatorul cod:

Private Sub Dir1_Change() File1.Path = Dir1.Path End Sub Private Sub Drive1_Change() Dir1.Path = Drive1.Drive End Sub

Page 144: Pce Edusoft

144

Private Sub File1_Click() MsgBox "Ati selectat un fisier" End Sub

15. Sa se scrie un program care sa permita cautarea printre fisierele din calculator, si care la selectarea unuia sa afiseze un mesaj care sa contina numele fisierului ales, precum si directorul, si unitatea de disc in care se afla. Rezolvare Private Sub Dir1_Change()

File1.Path = Dir1.Path End Sub Private Sub Drive1_Change()

Dir1.Path = Drive1.Drive End Sub Private Sub File1_Click()

MsgBox "Ati selectat fisierul " & File1.filename & " din directorul " & Dir1.Path & " din unitatea de disc " & Drive1.Drive

End Sub 16. Sa se scrie un program care sa caute un fisier dupa nume odata ce a fost selectat directorul sau subdirectorul in care se afla fisierul. Rezolvare

Dim i As Integer Dim gasit As Boolean Private Sub Command1_Click()

Do While i < File1.ListCount And gasit = False File1.ListIndex = i numefis = File1.List(i) If LCase(Text1.Text) = LCase(numefis) Then

gasit = True MsgBox "Am gasit fisierul"

End If

Page 145: Pce Edusoft

145

i = i + 1 Loop

End Sub Private Sub Form_Load()

i = 0 Text1.Text = "" Command1.Caption = "Cauta"

End Sub Private Sub Dir1_Change()

File1.Path = Dir1.Path End Sub Private Sub Drive1_Change()

Dir1.Path = Drive1.Drive End Sub

Programe comentate 17. Programul arata modul in care poate fi folosit un control numit CommonDialog. Acest control poate fi folosit pentru a selecta un anumit fisier si a returna calea acestuia.

Metoda ShowOpen arata fereastra prin care se poate selecta fisierul dorit, iar proprietatea FileName returneaza calea si numele fisierului ales.

Proprietatea Filter permite selectarea fisierelor ce sunt afisate dupa extensia lor: CommonDialog1.Filter = "Fisiere text (.txt)|*.txt"

caracterul „|” separa o scurta descriere Fisiere text (.txt) de modul de specificare a extensiei dorite *.txt.

Private Sub Form_Load() CommonDialog1.Filter = "Fisiere text (.txt)|*.txt" CommonDialog1.ShowOpen Text1.Text = CommonDialog1.filename End Sub

Page 146: Pce Edusoft

146

18. Programul permite alegerea si afisarea unei imagini, dar deseneaza deasupra ei o linie.Grosimea liniei e stabilita prin intermediul proprietatii Drawidth.Proprietatea DrawStyle determina modul in care se vor vedea elementele grafice desenate pe controlul Picture.Proprietatea AutoRedraw daca are valoarea True face ca elementele grafice suprapuse peste o imagine sa fie pastrate in memorie si ca acestea sa-si pastreze proportiile fata de dimensiunea controlului daca dimensiunea acestuia se schimba.Daca proprietatea are valoarea False elementele grafice sunt doar desenate pe ecran si nu sunt pastrate in memorie in timpul rularii programului. Desenarea liniei se face prin intermediul instructiunii Line: Command1.Visible = False

Private Sub Command1_Click() Form1.Left = 0 Form1.Top = 0 Form1.Height = Screen.Height Form1.Width = Screen.Width

Page 147: Pce Edusoft

147

Picture1.AutoSize = True CommonDialog1.Filter = "Fisiere ce contin imagini (*.jpg)|*.jpg" CommonDialog1.ShowOpen Set Picture1.Picture = LoadPicture(CommonDialog1.filename) Picture1.AutoRedraw = True Picture1.DrawStyle = vbSolid Picture1.DrawWidth = 3 Picture1.Line (400, 1000)-(10400, 1000) Command1.Visible = False End Sub

19. Programul afiseaza o imagine selectata de utilizator si la apasarea unui buton scrie un text deasupra ei.Stabilirea locului in care se va scrie textul se face prin instructiunile: Picture1.CurrentX = 600

Picture1.CurrentY = 1700 Dimensiunea literelor se face prin intermediul proprietatii FontSize si scrierea efective se face prin intermediul metodei Print.Valoarea proprietatii AutoSize este True, deci controlul Picture este redimensionat automat la dimensiunea imaginii.

Private Sub Command1_Click() Picture1.CurrentX = 600 Picture1.CurrentY = 1700 Picture1.FontSize = 18 Picture1.Print "Scriu pe o caseta cu imagine" Command1.Visible = False End Sub Private Sub Form_Load() Form1.Width = 7000 Form1.Height = 5000 CommonDialog1.Filter = "Fisiere ce contin imagini (*.jpg)|*.jpg" CommonDialog1.ShowOpen Picture1.AutoSize = True Picture1.Picture = LoadPicture(CommonDialog1.filename) End Sub

20. Programul leaga un fisier ales de utilizator de un container OLE.Containerul OLE poate fi legat sau poate contine diferite obiecte inserabile.Tipurile obiectelor ce pot fi inserate in containerele OLE sau legate de acestea pot fi selectate in momentul crearii programului sau pot fi alese prin cod in momentul executiei.

Programul leaga un obiect inserabil prin cod in momentul executiei programului.Controlul CommonDialog e folosit pentru a da o mai mare flexibilitate programului.Metoda CreateLink a containerului OLE are nevoie de calea fisierului ce va fi legat de control si pentru a furniza aceasta cale este folosita proprietatea FileName a controlului CommonDialog.

La apasarea butonului formul pe care se afla containerul isi mareste dimensiunile la dimensiunile ecranului, pentru a face acest lucru este folosit obiectl Screen.Form-ul este aliniat cu ecranul prin modificarea proprietatilor Left si Top, iar containerul OLE este marit si pozitionat exact peste form.Programul insa dupa afisarea fisierului legat in containerul OLE nu sterge butonul.

Private Sub Command1_Click() OLE1.SizeMode = 1 End Sub Private Sub Command2_Click() OLE1.SizeMode = 0 End Sub Private Sub Command3_Click() OLE1.SizeMode = 2

Page 148: Pce Edusoft

148

End Sub Private Sub Command4_Click() OLE1.SizeMode = 3 End Sub Private Sub Form_Load() Form1.Left = 0 Form1.Top = 0 Me.Width = Screen.Width Me.Height = Screen.Height CommonDialog1.ShowOpen OLE1.CreateLink (CommonDialog1.filename) End Sub Programul arata modul in care sunt afisate obiectele legate in containerul OLE cand este

modificata proprietatea SizeMode.Valoarea 0 obiectul este „taiat” de marginile containerului,1 obiectul este intins sa corespunda dimensiunilor containerului, dar nu se pastreaza proportiile originale, 2 containerul este redimensionat pentru a afisa in totalitate obiectul, 3 obiectul este redimensionat pentu a incapea in container, dar se are grija sa se pastreze proportiile originale.

In program pentru a se referi la form-ul curent este folosit cuvantul rezervat Me.

21. Programul permite vizualizarea unui fisier ales de utilizator ce contine o imagine.In caseta cu lista a fisierelor sunt afisate numai fisierele care au extensii folosite pentru fisiere ce contin imagini, acest lucru se face prin atribuirea unei valori proprietatii Pattern File1.Pattern = "*.bmp;*.ico;*.wmf;*.emf"

Programul are deasemenea si un sistem de tratare a erorilor, adica cand are loc o eroare ea este intrceptata si in loc de opri programul se executa o anumita sectiune de cod.Semnalarea unui astfel de sistem se face prin instruciunea: On Error GoTo tratareerori unde tratareerori este o eticheta.Dupa sfarsitul procedurii in care este folosit acest sistem se scrie codul care va fi executat daca se intercepeaza o eroare.In cazul programului exista cod de tratare a 2 erori, daca nu exista nici o discheta in unitate, sau unitatea nu functioneaza, si unitatea nu exista.Exista si un al treilea caz, cand apare o alta eroare, dar acest caz e tratat doar prin afisarea numarului si descrierea erorii.

Instructiunea Resume face ca programul sa reia instructiunea in timpul careia a aparut eroarea, Resume Next face ca programul sa reia instructiunea urmatoare celei in timpul executiei careia a aparut eroarea.

Page 149: Pce Edusoft

149

Instructiunea Stop opreste derularea programului dar nu il descarca din memorie si nici nu sterge valoarea vreunei variabile.

Err este un obiect care contine informatii despre erorile aparute in timpul executiei, informatii ce pot fi obtinute prin intermediul proprietatilor Number si Description.

Dim a As String Dim nr As Integer Private Sub Dir1_Change() File1.Path = Dir1.Path End Sub Private Sub Drive1_Change() On Error GoTo tratareerori Dir1.Path = Drive1.Drive Exit Sub tratareerori: If Err.Number = 71 Then b = "Unitatea floppy nu este pregatita sau nu este nici o discheta introdusa in ea" If MsgBox(b, vbOKOnly) = vbOK Then Resume Else Resume Next End If ElseIf Err.Number = 68 Then MsgBox "Aceasta unitate sau cale nu exista " & Drive1.Drive, vbExclamation Resume Next Else MsgBox "A aparut o eroare neasteptata :" & Str(Err.Number) & Err.Description, vbCritical Stop End If Resume End Sub

Page 150: Pce Edusoft

150

Private Sub File1_Click() nr = File1.ListIndex a = File1.List(nr) MsgBox File1.Path & "\" & a numefis = File1.Path & "\" & a Image1.Picture = LoadPicture(numefis) End Sub Private Sub Form_Load() Image1.Stretch = True Label1.Caption = "Selectati fisierul ce contne imaginea ce doriti sa o vedeti" File1.Pattern = "*.bmp;*.ico;*.wmf;*.emf"

End Sub 22. Amplasati pe o forma un buton de comanda Command1, un control CommonDialog1 si un control OLE1. Programul creeaza o legatura intre un container OLE si un fisier la alegerea utilizatorului. Activarea aplicatiei care a creat fisierul se face prin instructiunea: OLE1.AppIsRunning = True

Metoda DoVerb efectueaza actiunea desemnata prin numarul care o urmeaza, daca nici o valoare nu o urmeaza, cum e cazul programului, atunci se considera valoarea implicita, 0.

Cele doua instructiuni sunt folosite pentru a grabi activarea obiectului inserat. Private Sub Command1_Click() End End Sub Private Sub Form_Load() MsgBox "Alegeti o foaie de calcul Excel" OLE1.Visible = False Command1.Caption = "Sfarsit" CommonDialog1.ShowOpen OLE1.CreateLink (CommonDialog1.filename) OLE1.AppIsRunning = True OLE1.DoVerb End Sub 23. Visual Basic permite selectarea obiectului ce va fi inserat intr-un container OLE si de catre utilizator, acest lucru se face cu ajutorul metodei InsertObjDlg. Private Sub Command1_Click()

OLE1.InsertObjDlg OLE1.SizeMode = 2

End Sub Private Sub Form_Load()

Command1.Caption = "Insereaza un obiect in containerul OLE" End Sub 24. Programul permite utilizatorului inserarea intr-un container OLE a obiectului inserabil pe care il doreste si deasemenea permite salvarea obiectului intr-un fisier ales tot de catre el.

Salvarea obiectului dintr-un container OLE se face cu ajutorul metodei SaveToFile, daca obiectul e legat se pastreaza numai legatura se pastreaza, daca obiectul e inserat se pastreaza tot.

Deschiderea unui fisier se face prin instructiunea Open urmata de calea si numele fisierului, apoi se scrie modul de acces la fisier.In cazul programului fisierul e deschis pentru orice tip de acces, si de scriere si de citire.Dupa modul de deschidere al fisierului trebuie specificat numarul de ordine al fisierului.Un fisier odata de a fost deschis nu trebuie uitat a fi inchis prin instructiunea:

Close #1

Page 151: Pce Edusoft

151

Private Sub Command1_Click() CommonDialog1.ShowOpen Open CommonDialog1.filename For Random As #1 OLE1.SaveToFile 1: Close #1

End Sub Private Sub Form_Load()

Command1.Caption = "Salveaza" OLE1.InsertObjDlg OLE1.AppIsRunning = True

End Sub 25. Progamul contine doua containere OLE si intr-unul dintre ele este incorporat un obiect inserabil de tip Paint.Picture, deci poate fi creata o imagine de tip bitmap.Primele doua ghilimele din instructiunea de mai jos sunt necesare pentru a specifica ca obiectul inserat nu se creeaza plecand de la un fisier deja existent, ci se creeaza un obiect incorporat vid de tip Paint.Picture. Obiectul inserat este activat prin intermediul metodei DoVerb.

OLE1.CreateEmbed "", "Paint.Picture" Programul permite salvarea desenului creat, precum si vizualizarea desenului salvat intr-un

fisier ales de utilizator si care trebuie sa existe inainte de a incerca salvarea obiectului. Private Sub Command2_Click() OLE2.Visible = True CommonDialog1.ShowOpen Open CommonDialog1.filename For Binary As #1 OLE2.ReadFromFile 1 Close #1 End Sub Private Sub Command1_Click() CommonDialog1.ShowOpen Open CommonDialog1.filename For Binary As #1 OLE1.SaveToFile 1 Close #1 End Sub Private Sub Form_Load() Command2.Caption = "Deschide cei in fisier" Command1.Caption = "Salveaza in fisier" OLE2.Visible = False OLE1.CreateEmbed "", "Paint.Picture" OLE1.DoVerb End Sub

Page 152: Pce Edusoft

152

Capitolul 6. O aplicaţie concretă, pas cu pas (Andreea)

Paşii de urmat pentru crearea unui program în Visual Basic, pentru recomandarea tratamentelor pentru diferite afecţiuni:

1. Denumiti forma in care lucrati: "Medicamente" si scrieti in antetul formei: "Spune NU durerii". 2. Realizati un tabel care sa se numeasca: "M" si care sa contina 6 coloane si 51 de randuri, dintre care prima coloana si primul rand sa fie fixe.(Daca controlul Microsoft Flex Grid nu se gaseste de la bun inceput in bara de instrumente din partea stanga a mediului Visual Basic, el trebuie adaugat in felul urmator: din meniul VB alegeti optiunea Project, apoi Components si veti obtine o lista de alte componente ce pot fi adaugate la Toolbox. Alegeti din lista Microsoft Flex Grid si bifati in dreptul acestei componente, apoi apasati pe butonul OK. In Toolbox va aparea simbolul acestui control.) 3. Adaugati in partea de sus a tabelului o eticheta pe care sa scrie: "Lista Medicamente:". Mariti si ingrosati literele, apoi schimbati-le culoarea. 4. Injumatatiti prima coloana a tabelului si dublati coloanele 2,4,5,6. 5. Scrieti in randul fix urmatoarele cuvinte care vor reprezenta capurile de tabel:

Coloana 1-"Nr.crt" Coloana 2-"Denumire" Coloana 3-"Prezentare" Coloana 4-"Tara/Firma" Coloana 5-"Indicatii" Coloana 6-"Contraindicatii". Numerotati fiecare rand in celulele din prima coloana. 6. Realizati o subrutina care sa permita scrierea in tabel apeland la evenimentul KeyPress. 7. Realizati 2 butoane: unul care sa permita adaugarea unui rand la tabel care se va numi: "AdaugaRand" si pe care sa scrie "+" si unul care sa realizeze stergerea unui rand din tabel, care sa se numeasca: "StergeRand" si pe care sa scrie: "-".(Randul adaugat trebuie sa fie numerotat corespunzator) 8. Realizati un buton cu ajutorul caruia sa salvati datele inregistrate in tabel care sa se numeasca: "Salveaza" si pe care sa scrie: "Salveaza datele" si un alt buton prin care sa incarcati datele care sa aiba numele: "Incarca" si pe care sa scrie: "Incarca datele". 9. Consultand o carte de medicina (ex: Prof.dr.Dan Georgescu-"Produse farmaceutice", Editura National, Bucuresti,1998) completati celulele tabelului cu 50 de medicamente necesare pentru tratarea urmatoarelor tipuri de afectiuni: alcoolism, alergii, anemie, arsuri, astm alergic, boli dermatologice, bronsite acute si cronice, constipatie, dureri de cap, dinti, stomac, eczeme, efort, emotii, entorse, febra, gripa, greata, voma, insomnii, menopauza, migrene, oboseala, etc, impreuna cu caracteristicile lor. Ex: 1 Acid acetilsalicilic CP RO, SICOMED febra, gripa, dureri de dinti risc hemoragic. Creati posibilitatea de a mari sau micsora celulele cu ajutorul mouse-ului. 10. Pentru a facilita utilizarea programului creati posibilitatea de a incarca datele automat la apasarea butonului Start. 11. Realizati o subrutina care sa permita ordonarea alfabetica a datelor din fiecare coloana.

Page 153: Pce Edusoft

153

12. Amplasati in forma o lista simpla care sa contina tipurile de forme de prezentare ale medicamentelor inregistrate. Lista sa se numeasca: "Prez", sa fie de tip CheckBox iar elementele sale sa se poata ordona alfabetic.Adaugati in partea de sus a listei o eticheta pe care sa scrie: "Forme de prezentare". 13. Realizati 2 butoane: unul care sa permita bifarea tuturor casutelor din lista, care sa se numeasca "BifeazaToate" si pe care sa se afle semnul: "+" si un buton care sa realizeze deselectarea tuturor casutelor bifate, care sa se numeasca: "DeselecteazaToate" si pe care sa scrie: "-". 14. Realizati o lista care sa contina toate afectiunile pe care le-ati trecut in tabel la categoria Indicatii", lista care sa se numeasca: "Afectiuni", iar elementele sale sa fie ordonate alfabetic.Creati posibilitatea de a selecta mai multe elemente din lista. Adaugati in partea de sus a listei o eticheta pe care sa scrie:"Selectati afectiunile". 15. Amplasati 2 butoane: unul care sa permita selectarea tuturor elementelor din lista de afectiuni, sa se numeasca: "Selecteaza" si pe care sa se afle semnul: "+" si un buton care sa realizeze deselectarea tuturor elementelor, sa se numeasca: "Deselecteaza" si pe care sa scrie: "-". 16. Realizati un tabel care sa se numeasca: "T" si care sa contina 6 coloane si un rand fix. Creati posibilitatea de a mari sau micsora celulele cu ajutorul mouse-ului. 17. Injumatatiti prima coloana si dublati coloanele 2,4,5,6. 18. Scrieti in randul fix urmatoarele cuvinte care vor reprezenta capurile de tabel: Coloana 1-"Nr.crt" Coloana 2-"Denumire" Coloana 3-"Prezentare" Coloana 4-"Tara/Firma" Coloana 5-"Indicatii" Coloana 6-"Contraindicatii". 19. Realizati un buton care sa se numeasca si pe care sa scrie: "Tratament". 20. Creati o subrutina care sa permita, la actionarea butonului Tratament si dupa selectarea formelor de prezentare si a afectiunilor, afisarea medicamentelor si a caracteristicilor lor (prezente in tabelul M) corespunzatoare afectiunilor selectate. 21. Scrieti subrutina care realizeaza ordonarea alfabetica a tuturor coloanelor din tabelul: "T". 22. Amplasati o eticheta in partea de jos a aplicatiei care sa contina urmatoarea atentionare: ATENTIE: Aceasta aplicatie ofera informatii despre posibilele tratamente ale unor afectiuni, dar NU inlocuieste sfatul medicului!". 23. Schimbati culoarea de fundal a formei. 24. Realizati un buton care sa se numeasca: "End" si pe care sa scrie: "Iesire", care sa realizeze iesirea din program.

Page 154: Pce Edusoft

154

Rezolvări 1. Pentru a denumi forma scrieti la proprietatea "Name",din tabelul de proprietati, cuvantul "Medicamente", iar pentru a scrie in antetul formei, scrieti la proprietatea "Caption" in loc de "Form1", textul "Spune NU durerii!". 2. Pentru a realiza un tabel alegeti din Toolbox controlul MSFlexGrid. Initial tabelul va fi numit "MSFlexGrid1" (trebuie denumit "M") si va avea 2 randuri si 2 coloane, dar putem modifica proprietatile Rows si Cols pentru a modifica numarul de randuri, respectiv de coloane (tabelul trebuie sa contina 51 de randuri si 6 coloane).Prima coloana si primul rand sunt fixe de la inceput. 3. Etichetele se amplaseaza cu ajutorul controlului "Label" din Toolbox. Scrieti la proprietatea Caption, textul "Lista medicamente:". Marimea si fondul literelor se pot modifica de la proprietatea "Font" din tabelul de proprietati din dreapta. Culoarea literelor se poate schimba folosind proprietatea "ForeColor". 4. La inceput toate coloanele au aceeasi latime. Cu ColWidth se pot modifica valorile, aceasta proprietate fiind un vector. De exemplu, prin atribuirea M.ColWidth(0)=M.ColWidth(0)/2 se va injumatati grosimea primei coloane, respectiv, prin atribuirea M.ColWidth(1)=M.ColWidth(1)*2 se va dubla grosimea celei de-a doua coloane.

Private Sub Form_Load() M.ColWidth(0) = M.ColWidth(0) / 2 M.ColWidth(1) = M.ColWidth(1) * 2 M.ColWidth(3) = M.ColWidth(3) * 2 M.ColWidth(4) = M.ColWidth(4) * 2 M.ColWidth(5) = M.ColWidth(5) * 2 End Sub

5. Pentru a scrie in randul fix trebuie folosita proprietatea TextMatrix. De exemplu, prin atribuirea M.TextMatrix(0,0)="Nr.crt", in celula corespunzatoare primului rand si primei coloane va scrie "Nr.crt".

Pentru a numerota fiecare rand se utilizeaza instructiunea repetitiva cu contor, "For", astfel: For i = 1 To M.Rows - 1 M.TextMatrix(i, 0) = i Next i

Page 155: Pce Edusoft

155

6. Subrutina care realizeaza scrierea in tabelul "M", apeland la evenimentul KeyPress, este urmatoarea: Private Sub M_KeyPress(KeyAscii As Integer) If (KeyAscii = 8) And (M.Text <> "") Then L = Len(M.Text) M.Text = Left(M.Text, L - 1) Else If KeyAscii >= 32 Then M.Text = M.Text + Chr$(KeyAscii) End If End If End Sub 7. Butoanele se amplaseaza cu ajutorul controlului "Command Button" din Toolbox, se denumesc la proprietatea "Name" si se scrie in interiorul lor cu ajutorul proprietatii "Caption".

Subrutina asociata butonului "AdaugaRand" este urmatoarea: Private Sub AdaugaRand_Click() x = M.Rows M.Rows = x + 1 x = M.Rows M.TextMatrix(x - 1, 0) = x - 1 End Sub

Subrutina asociata butonului "StergeRand" este urmatoarea: Private Sub StergeRand_Click() x = M.Rows M.Rows = x - 1 End Sub 8. Butoanele se amplaseaza cu ajutorul controlului "Command Button" din Toolbox, se denumesc la proprietatea "Name" si se scrie in interiorul lor cu ajutorul proprietatii "Caption".

Cu Open cale + nume fisier For OutPut as #numar putem crea/deschide pentru scriere un fisier text cu numele si calea precizate, asociindu-i numarul 1. Orice referire la acest fisier se va face prin intermediul numarului 1. Pentru salvarea datelor, se parcurge tabelul pe randuri si coloane si fiecare element al tabelului este scris in fisier, cu ajutorul comenzii Print.Scrierea de date se face cu Print #numar, expresiile_de_scris.Inchiderea unui fisier deschis pentru scriere se face prin Close #numar.

Subrutina care realizeaza salvarea datelor este urmatoarea : Private Sub Salveaza_Click()

Page 156: Pce Edusoft

156

Open App.Path + "\tabel.txt" For Output As #1 Print #1, M.Rows For i = 0 To M.Rows - 1 For j = 0 To M.Cols - 1 Print #1, M.TextMatrix(i, j) Next j Next i Close #1 End Sub

Pentru a deschide fisierul in vederea citirii de date din el se foloseste : Open cale + nume fisier For Input as #numar. Citirea de date se face cu Input #numar, variabilele_de_citit (pentru numere) sau cu Line Input #numar, variabilele_de_citit (pentru siruri de caractere). Inchiderea unui fisier deschis pentru citire se face prin Close #numar. Subrutina care realizeaza incarcarea datelor este urmatoarea: Private Sub Incarca_Click() Open App.Path + "\tabel.txt" For Input As #1 Input #1, x M.Rows = x For i = 0 To M.Rows - 1 For j = 0 To M.Cols - 1 Line Input #1, s M.TextMatrix(i, j) = s Next j Next i Close #1 End Sub

9. Posibilitatea de a mari sau micsora celulele din tabel cu ajutorul mouse-ului se creeaza cu proprietatea AllowUserResizing care are diferite valori ce permit utilizatorului sa redimensioneze randurile/coloanele tabelului. 10. Pentru ca datele sa se incarce automat, adaugati la codul atasat formei urmatoarul text:

Page 157: Pce Edusoft

157

Incarca_Click

11. Cu ajutorul urmatoarei subrutine se pot ordona alfabetic toate coloanele tabelului "M" prin efectuarea unui simplu Click pe fiecare coloana. S-a folosit instructiunea de selectie multipla Case si metoda de ordonare prin selectie directa.

Exemplu general: metoda consta in determinarea la fiecare pas i din cei n-1, a celui mai mic element dintre X(i), X(i+1), X(i+2),…X(n), care va ocupa pozitia i. Asadar, in fiecare pas i vom compara pe X(i) cu elementele X(j), cu j de la i+1 la n, iar ori de cate ori se gaseste un element X(j) mai mare decat X(i), cele doua elemente se interschimba. Prin urmare, la pasul i are loc o selectie directa a elementului ce va ocupa pozitia a i-a in vectorul ordonat. Private Sub M_Click() Select Case M.Col Case 1: For i = 1 To M.Rows - 2 For j = i + 1 To M.Rows - 1 If M.TextMatrix(i, 1) > M.TextMatrix(j, 1) Then For k = 1 To 5 aux = M.TextMatrix(i, k) M.TextMatrix(i, k) = M.TextMatrix(j, k) M.TextMatrix(j, k) = aux Next k End If Next j Next i Case 2: For i = 1 To M.Rows - 2 For j = i + 1 To M.Rows - 1 If M.TextMatrix(i, 2) > M.TextMatrix(j, 2) Then For k = 1 To 5 aux = M.TextMatrix(i, k) M.TextMatrix(i, k) = M.TextMatrix(j, k) M.TextMatrix(j, k) = aux Next k End If Next j Next i

Page 158: Pce Edusoft

158

Case 3: For i = 1 To M.Rows - 2 For j = i + 1 To M.Rows - 1 If M.TextMatrix(i, 3) > M.TextMatrix(j, 3) Then For k = 1 To 5 aux = M.TextMatrix(i, k) M.TextMatrix(i, k) = M.TextMatrix(j, k) M.TextMatrix(j, k) = aux Next k End If Next j Next i Case 4: For i = 1 To M.Rows - 2 For j = i + 1 To M.Rows - 1 If M.TextMatrix(i, 4) > M.TextMatrix(j, 4) Then For k = 1 To 5 aux = M.TextMatrix(i, k) M.TextMatrix(i, k) = M.TextMatrix(j, k) M.TextMatrix(j, k) = aux Next k End If Next j Next i Case 5: For i = 1 To M.Rows - 2 For j = i + 1 To M.Rows - 1 If M.TextMatrix(i, 5) > M.TextMatrix(j, 5) Then For k = 1 To 5 aux = M.TextMatrix(i, k) M.TextMatrix(i, k) = M.TextMatrix(j, k) M.TextMatrix(j, k) = aux Next k End If Next j Next i End Select End Sub

Page 159: Pce Edusoft

159

12. Lista simpla o puteti amplasa cu ajutorul controlului ListBox din Toolbox. Denumirea listei se realizeaza la proprietatea "Name", modificati proprietatea "Sorted" cu valoarea True si proprietatea "Style" cu valoarea 1-CheckBox. Scrieti tipurile de forme de prezentare ale medicamentelor la proprietatea List, separate de Ctrl+Enter. La final apasati Enter.

Etichetele se creeaza cu ajutorul controlului Label din Toolbox si se scrie in interiorul lor folosind proprietatea "Caption" din tabelul de proprietati din dreapta. 13. Butoanele se amplaseaza cu ajutorul controlului "Command Button" din Toolbox, se denumesc la proprietatea "Name" si se scrie in interiorul lor cu ajutorul proprietatii "Caption".

Aceasta subrutina permite bifarea tuturor casutelor din lista cu forme de prezentare prin actionarea butonului "BifeazaToate". Private Sub BifeazaToate_Click() For i = 0 To Prez.ListCount - 1 Prez.Selected(i) = True Next i End Sub

Urmatoarea subrutina permite deselctarea tuturor casutelor din lista cu forme de prezentare, la apasarea butonului "DeselecteazaToate". Private Sub DeselecteazaToate_Click() For i = 0 To Prez.ListCount - 1 Prez.Selected(i) = False Next i End Sub unde: ListCount = Numarul elementelor din lista Selected() = Vector numerotat incepand cu 0, cu valori de tip Boolean ce contine True dca elementul este selectat, respectiv False, daca nu este selectat.

14. O lista simpla se amplaseaza cu ajutorul controlului ListBox din Toolbox si se denumeste folosind proprietatea "Name". Scrieti afectiunile la proprietatea List, separate prin Ctrl+Enter, iar la final apasati Enter. Modificati proprietatea "Sorted" cu valoarea True pentru ca elementele sa se

Page 160: Pce Edusoft

160

ordoneze alfabetic. Posibilitatea de a selecta mai multe elemente din lista se poate crea, modificand proprietatea "MultiSelect" cu valoarea 1-Simple.

Etichetele se creeaza cu ajutorul controlului Label din Toolbox si se scrie in interiorul lor folosind proprietatea "Caption" din tabelul de proprietati din dreapta. 15. Butoanele se amplaseaza cu ajutorul controlului "Command Button" din Toolbox, se denumesc la proprietatea "Name" si se scrie in interiorul lor cu ajutorul proprietatii "Caption".

Aceasta subrutina permite selectarea tuturor elementelor din lista de afectiuni prin actionarea asupra butonului "Selecteaza". Private Sub Selecteaza_Click() For i = 0 To Afectiuni.ListCount - 1 Afectiuni.Selected(i) = True Next i End Sub

Urmatoarea subrutina permite deselectarea tuturor elementelor selectate din lista de afectiuni prin actionarea asupra butonului "Deselecteaza". Private Sub Deselecteaza_Click() For i = 0 To Afectiuni.ListCount - 1 Afectiuni.Selected(i) = False Next i End Sub unde: ListCount = Numarul elementelor din lista Selected() = Vector numerotat incepand cu 0, cu valori de tip Boolean ce contine True dca elementul este selectat, respectiv False, daca nu este selectat.

16. Pentru a realiza un tabel alegeti din Toolbox controlul MSFlexGrid. Initial tabelul va fi numit "MSFlexGrid1" (trebuie denumit "T") si va avea 2 randuri si 2 coloane, dar putem modifica proprietatile Rows si Cols pentru a modifica numarul de randuri, respectiv de coloane (tabelul trebuie sa contina 1 rand si 6 coloane). Numarul de randuri, respectiv coloane fixe se poate schimba, cu ajutorul proprietatilor FixedRows si FixedCols.

Page 161: Pce Edusoft

161

Posibilitatea de a mari sau micsora celulele din tabel cu ajutorul mouse-ului se creeaza cu proprietatea AllowUserResizing care are diferite valori ce permit utilizatorului sa redimensioneze randurile/coloanele tabelului. 17. La inceput toate coloanele au aceeasi latime. Cu ColWidth se pot modifica valorile, aceasta proprietate fiind un vector. De exemplu, prin atribuirea M.ColWidth(0)=M.ColWidth(0)/2 se va injumatati grosimea primei coloane, respectiv, prin atribuirea M.ColWidth(1)=M.ColWidth(1)*2 se va dubla grosimea celei de-a doua coloane. 18. Pentru a scrie in randul fix trebuie folosita proprietatea TextMatrix. De exemplu, prin atribuirea M.TextMatrix(0,0)="Nr.crt", in celula corespunzatoare primului rand si primei coloane va scrie "Nr.crt".

19. Butoanele se amplaseaza cu ajutorul controlului "Command Button" din Toolbox, se denumesc la proprietatea "Name" si se scrie in interiorul lor cu ajutorul proprietatii "Caption". 20. Pentru a crea o astfel de subrutina avem nevoie mai intai de o functie care sa vada daca este marcat vreun element din lista cu forme de prezentare. Aceasta functie este: Function EsteMarcat(ByVal s As String) ok = False For i = 0 To Prez.ListCount - 1 If Prez.List(i) = s And Prez.Selected(i) = True Then ok = True

Page 162: Pce Edusoft

162

End If Next i EsteMarcat = ok End Function

Subrutina care permite, la actionarea butonului Tratament si dupa selectarea formelor de prezentare si a afectiunilor, afisarea medicamentelor si a caracteristicilor corespunzatoare afectiunilor selectate este urmatoarea: Private Sub Tratament_Click() n = Afectiuni.ListCount k = 0: T.Rows = 1 For j = 0 To n - 1 If Afectiuni.Selected(j) = True Then For i = 1 To M.Rows - 1 If InStr(M.TextMatrix(i, 4), Afectiuni.List(j)) <> 0 And _ EsteMarcat(M.TextMatrix(i, 2)) Then k = k + 1 T.Rows = k + 1 T.TextMatrix(k, 0) = k T.TextMatrix(k, 1) = M.TextMatrix(i, 1) T.TextMatrix(k, 2) = M.TextMatrix(i, 2) T.TextMatrix(k, 3) = M.TextMatrix(i, 3) T.TextMatrix(k, 4) = M.TextMatrix(i, 4) T.TextMatrix(k, 5) = M.TextMatrix(i, 5) End If Next i End If Next j End Sub unde: InStr(S,L) = 0, daca L nu se afla in S = pozitia in care se afla L in S.

Page 163: Pce Edusoft

163

21. Cu ajutorul urmatoarei subrutine se pot ordona alfabetic toate coloanele tabelului "T" prin efectuarea unui simplu Click pe fiecare coloana. S-a folosit instructiunea de selectie multipla Case si metoda de ordonare prin selectie directa. Exemplu general: metoda consta in determinarea la fiecare pas i din cei n-1, a celui mai mic element dintre X(i), X(i+1), X(i+2),…X(n), care va ocupa pozitia i. Asadar, in fiecare pas i vom compara pe X(i) cu elementele X(j), cu j de la i+1 la n, iar ori de cate ori se gaseste un element X(j) mai mare decat X(i), cele doua elemente se interschimba. Prin urmare, la pasul i are loc o selectie directa a elementului ce va ocupa pozitia a i-a in vectorul ordonat. Private Sub T_Click() Select Case T.Col Case 1: For i = 1 To T.Rows - 2 For j = i + 1 To T.Rows - 1 If T.TextMatrix(i, 1) > T.TextMatrix(j, 1) Then For k = 1 To 5 aux = T.TextMatrix(i, k) T.TextMatrix(i, k) = T.TextMatrix(j, k) T.TextMatrix(j, k) = aux Next k End If Next j Next i Case 2: For i = 1 To T.Rows - 2 For j = i + 1 To T.Rows - 1

Page 164: Pce Edusoft

164

If T.TextMatrix(i, 2) > T.TextMatrix(j, 2) Then For k = 1 To 5 aux = T.TextMatrix(i, k) T.TextMatrix(i, k) = T.TextMatrix(j, k) T.TextMatrix(j, k) = aux Next k End If Next j Next i Case 3: For i = 1 To T.Rows - 2 For j = i + 1 To T.Rows - 1 If T.TextMatrix(i, 3) > T.TextMatrix(j, 3) Then For k = 1 To 5 aux = T.TextMatrix(i, k) T.TextMatrix(i, k) = T.TextMatrix(j, k) T.TextMatrix(j, k) = aux Next k End If Next j Next i Case 4: For i = 1 To T.Rows - 2 For j = i + 1 To T.Rows - 1 If T.TextMatrix(i, 4) > T.TextMatrix(j, 4) Then For k = 1 To 5 aux = T.TextMatrix(i, k) T.TextMatrix(i, k) = T.TextMatrix(j, k) T.TextMatrix(j, k) = aux Next k End If Next j Next i Case 5: For i = 1 To T.Rows - 2 For j = i + 1 To T.Rows - 1 If T.TextMatrix(i, 5) > T.TextMatrix(j, 5) Then For k = 1 To 5 aux = T.TextMatrix(i, k) T.TextMatrix(i, k) = T.TextMatrix(j, k) T.TextMatrix(j, k) = aux Next k End If Next j Next i End Select End Sub 22. Etichetele se creeaza cu ajutorul controlului Label din Toolbox si se scrie in interiorul lor folosind proprietatea "Caption" din tabelul de proprietati din dreapta. 23. Schimbarea culorii de fundal a formei se realizeaza cu ajutorul proprietatii BackColor din tabelul de proprietati din dreapta. 24. Butoanele se amplaseaza cu ajutorul controlului "Command Button" din Toolbox, se denumesc la proprietatea "Name" si se scrie in interiorul lor cu ajutorul proprietatii "Caption".

Urmatoarea subrutina realizeaza iesirea din program prin actionarea butonului "End". Private Sub End_Click() End End Sub

Page 165: Pce Edusoft

165

Page 166: Pce Edusoft

166

Bibliografie 1. Bogdan Pătruţ - Programarea calculatoarelor electronice, curs pentru studenţii anului II, Contabilitate şi informatică de gestiune, Universitatea din Bacău, 2004, http://bacau.inf.ro/bogdan/cursuri/pce 2. Bogdan Pătruţ -Aplicaţii în Visual Basic, Editura Teora, Bucureşti, 1998-2004 3. Luminita Fanaru, Ioan Brava – Visual Basic. Primii pasi si urmatorii, Editura Polirom, Iasi, 2003 4. * * * - Ghidul programatorului in Visual Basic 6, Microsoft Press – Teora, 1998 5. * * * - Microsoft Visual Basic Help, www.microsoft.com