cum sa memorezi orice fara sa tii minte
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 la f(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 ca Aprinde(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 este Aprinde(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 a valoarea 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”.
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 a era 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 a rezultatul 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).