In prima lectie de programare ai vazut ca cel mai important lucru pe
care trebuie sa-l cunosti legat de programarea calculatoarelor este acela ca dispui de un set de instructiuni elementare cu ajutorul carora poti construi programe oricat de complexe. La fel cum un arhitect poate realiza constructii spectaculoase folosind doar cateva materiale de baza. Ai avut apoi (in articolul anterior) posibilitatea de a testa cele invatate si de a-ti exersa creativitatea intr-o maniera interactiva.
Acum e timpul sa intelegi si cel de-al doilea pilon pe care se bazeaza programarea calculatoarelor. Utilizandu-l, nu numai ca vei putea sa iti reduci dimensiunea programelor scriind portiuni generice, ci iti vei extinde enorm gama de aplicatii pe care le poti realiza. Este vorba despre variabile. Practic nu exista program care sa nu le foloseasca. Bine, cu exceptia programelor scrise in lectiile trecute ai putea zice. Si ai avea dreptate. Partial. Caci desi variabilele nu intervin explicit in acele programe, ele se regasesc implicit in instructiunile Aprinde si Stinge. Iti amintesti ca le-am prezentat generic sub forma Aprinde(x, y) si Stinge(x, y)? Ei bine, x si y de aici sunt variabile. Sunt niste obiecte ce pot retine valori. Apoi, cu ajutorul acestor valori instructiunea Aprinde, de exemplu, va sti ce beculete sa aprinda. (A se remarca faptul ca atat Aprinde(x, y), cat si Stinge(x, y), ne duc cu gandul laf(x, y). Va amintiti de la matematica ce notati de obicei prin f(x, y)? O functie f de doua variabile, x si y. (Ca sa fim si mai rigurosi, de fapt f(x, y) reprezinta valoarea acestei functii in punctul (x, y).) Acesta este motivul pentru care instructiuni caAprinde(x, y) si Stinge(x, y) sunt numite functii (iar scrierea lor intr-un program poarta numele de apel al functiei). Vom vedea intr-o lectie ulterioara ca ne putem construi singuri astfel de functii, pe baza unor functii de baza pe care le avem la dispozitie.)
Ce este, deci, o variabila?
Am spus anterior ca este un soi de obiect (virtual) ce poate retine valori. E ca o mica bucata de hartie pe care calculatorul poate scrie valori cu creionul si le poate sterge cu guma de sters. Hai sa vedem cum stau lucrurile pe exemple concrete. Sa construim, pentru inceput, o variabila numita a. Putem face acest lucru scriind: var a Daca dorim sa-i dam acum lui a o valoare, sa zicem 3, o putem face scriind pur si simplu: a = 3 (Nota: Declararea si initializarea unei variabile se poate face si intr-o singura instructiune, de genul var a = 3 .) Bun, avem acum o variabila numita a, in care am stocat valoarea 3. Sa vedem cum o putem folosi. Ce credeti ca vor face, de exemplu, instructiunile urmatoare: Aprinde(a, 1) Aprinde(a, a) Daca ai zis ca prima dintre ele aprinde beculetul de la coordonatele (3, 1), ai avut dreptate. Caci valoarea stocata in variabila a la momentul executiei instructiunii Aprinde(a, 1) este 3, deci instructiunea care se executa practic esteAprinde(3, 1). Similar, cea de-a doua instructiune este echivalenta cu Aprinde(3, 3) (deci efectul sau va fi acela de a aprinde punctul de la coordonatele (3, 3)). Daca m-ai urmarit pana aici ar trebui sa iti fie usor sa intelegi efectul urmatorului program: var a = 1 Aprinde(a, 1) Aprinde(a, 2) a = 2 Aprinde(a, 1) Aprinde(a, 2) In prima linie se declara variabila a si i se atribuie valoarea 1. In urmatoarele doua linii se aprind punctele (1, 1) si (1, 2). Apoi se atribuie variabilei a valoarea 2. (Adica valoarea anterioara (si anume valoarea 1) se sterge, si se scrie in avaloarea 2.) Deci ultimele doua instructiuni vor aprinde punctele (2, 1) si (2, 2). (O modalitate mai practica de a explica functionarea unui program o constituie comentariile. Putem introduce un comentariu intr-un program scriind //. Atat aceste doua simboluri, cat si tot ce urmeaza dupa ele pana la sfarsitul liniei (adica acolo unde se apasa tasta Enter) nu va fi considerat instructiune, ci va fi ignorat de catre calculator.) Varianta comentata a programului anterior ar putea arata astfel: // Program de desenare patrat var a = 1 // definesc variabila a si o initializez cu valoarea 1 Aprinde(a, 1) // aprind punctul (a, 1), adica (1, 1) caci valoarea din a este 1 Aprinde(a, 2) // aprind punctul (a, 2), adica (1, 2) a = 2 // sterg valoarea anterioara scrisa in a, si scriu in variabila a valoarea 2 Aprinde(a, 1) // aprind punctul (a, 1), adica (2, 1) caci valoarea din a este 2 Aprinde(a, 2) // aprind punctul (a, 2), adica (2, 2) In varianta aceasta, atat instructiunile programului, cat si explicatiile, se pot pune laolalta intr-un acelasi program. Ba chiar este recomandat ca orice program sa contina comentarii, pentru a facilita intelegerea ulterioara a lui.)
Dupa atata teorie, haide sa si experimentam ceva. Copiaza, te rog, programul anterior in caseta de mai jos, dupa care apasa butonul Executa programul.
1
Gata? Programul a avut efectul asteptat? Esti liber sa faci modificari la el si sa vezi noile rezultate. Ce ar fi daca in linia 4 in loc de a = 2 ai scrie a = a+1? Ce crezi ca s-ar modifica? Daca ai avut curiozitatea de a testa programul, atunci ai vazut ca rezultatul final este acelasi. Ceea ce era si normal, nu? Hai sa vedem mai indeaproape ce face instructiunea a = a+1. Mai intai aduna 1 la valoarea stocata in a (si daca te uiti la a doua linie din program vei vedea ca in aera stocata valoarea 1, deci rezultatul operatiei acesteia de adunare va fi 2), dupa care memoreaza valoarea calculata in a (bineinteles, dupa ce sterge in prealabil vechea valoare din a). Scrisa in cuvinte, instructiunea a = a+1 s-ar traduce in stocheaza in variabila arezultatul adunarii dintre valoarea curenta din a si valoarea 1.
Dar daca as vrea sa folosesc in program o a doua variabila, numita b si avand stocata in ea valoarea 7, cum as face? Bineinteles, cu intructiunea var b = 7. Similar, cu var c as defini o a treia variabila, numita c. In conditiile astea, ce ar face intructiunea c = b+a? Dar instructiunea c = b-a? Poti vedea pe viu rezultatele acestor instructiuni ruland programul de mai jos: var a = 3 var b = 7 var c c = b+a Aprinde(c, c) c = b-a Aprinde(c, c) Ce s-a intamplat? Prima instructiune Aprinde(c, c) a aprins punctul de la coordonatele (10, 10), iar cea de-a doua instructiune Aprinde(c, c) a aprins punctul de la coordonatele (4, 4). Exact asa cum te asteptai, nu? (In caz ca totusi e ceva neclar, te rog sa nu eziti a lasa un comentariu cu intrebarile tale.)
Propun sa incheiem aceasta lectie introductiva despre variabile cu analiza programului urmator: // Defineste doua variabile var a = 1 var b = 10 // Aprinde pe linia 1 punctul corespunzator valorii din variabila a Aprinde(a, 1) // Aprinde pe linia 2 punctul corespunzator valorii variabilei b Aprinde(b, 2) // Si acum sa definim o a treia variabila, c, si sa facem niste operatii var c = a a = b b = c // Oare ce s-a intamplat? Sa vedem in continuare // Aprinde pe linia 3 punctul corespunzator valorii variabilei a Aprinde(a, 3) // Aprinde pe linia 4 punctul corespunzator valorii variabilei b Aprinde(b, 4)
Ai rulat programul anterior? E clar ce face? Spune-ti, te rog, intrebarile intr-un comentariu mai jos (sau lasa-ne cateva exemple sau idei de programe interesante ce pot fi facute cu informatiile invatate pana acum). Dau share: Facebook14 Twitter Google Email
ANTE RI ORUL: cum sa il desenezi pe Mickey Mouse dintr-o apasare de buton URMATORUL : secretul gandirii calculatoarelor
7 comments
Sign in or Post as Guest 3 people listening
+ Follow Share Post comment as... Newest | Oldest | Top Comments
Andrei123May 7, 2014 Hmm, exista si coordonata 0! FlagShare LikeReply
GeorgeSFNov 8, 2013 Pai cred ca e simpla explicatia. Se aprinde (1.1); (1.4); (10.2); (10.3).
FlagShare LikeReply
GeorgeSFNov 8, 2013 Am incercat si eu o varianta de test al acestui program. Sper ca nu l-am gresit.
// Defineste doua variabile var a = 1 var b = 10 var c = 5 var d = 3
// Aprinde pe linia 1 punctul corespunzator valorii din variabila a Aprinde(a, 1)
// Aprinde pe linia 2 punctul corespunzator valorii variabilei b Aprinde(b, 2)
// Aprinde pe linia 2 punctul corespunzator valorii variabilei c Aprinde(c, 5)
// Aprinde pe linia 2 punctul corespunzator valorii variabilei d Aprinde(d, 7)
// Si acum sa definim o a treia variabila, c, si sa facem niste operatii var c = a a = b b = c c = d d = a
// Oare ce s-a intamplat? Sa vedem in continuare
// Aprinde pe linia 3 punctul corespunzator valorii variabilei a Aprinde(a, 3)
// Aprinde pe linia 4 punctul corespunzator valorii variabilei b Aprinde(b, 4)
// Aprinde pe linia 3 punctul corespunzator valorii variabilei c Aprinde(c, 3)
// Aprinde pe linia 9 punctul corespunzator valorii variabilei d Aprinde(d, 9) FlagShare 1 LikeReply
Florin Birleanu moderatorNov 8, 2013 @GeorgeSF Super! Spor in continuare! :-) FlagShare LikeReply
katySep 1, 2013 Da, am rulat :) Se aprinde (1.1) ; (1,4) ; (2, 10) ; (3,10 ) FlagShare 1 LikeReply
Florin Birleanu moderatorSep 2, 2013 (Ai inversat ordinea coordonatelor. Mai intai e x (a cata coloana, de la stanga la dreapta), iar apoi e y (a cata linie, de jos in sus).) FlagShare 1 LikeReply