Sunteți pe pagina 1din 27

1

Capitolul 1. Hardware i software


Noiuni fundamentale
n viaa de zi cu zi operm cu dou tipuride entiti: materiale (care ocup un loc n spaiu) i nemateriale (numite generic "informaie"). Unele obiecte reprezint i una i alta, de exemplu un CD pe care este nregistrat un film. El este un obiect fizic, material, dar conine informaie. Dac uitm CD-ul pe bordul mainii, la soare, obiectul material va fi distrus fizic (iremediabil din pcate), informaia pe care o conine putnd fi totui reprodus procurnd o copie pe un suport similar sau pe un alt tip de suport (DVD). n cazul calculatorului, la componentele fizice ne referim folosind termenul generic "hardware" (prescurtat hard) iar la informaiile pe care le conine ne referim folosind termenul "software" (prescurtat soft).

Hardware-ul unui calculator este format din componentele electronice i mecanice: Microprocesor Memoria principal (intern, de tip RAM - random access memory sau ROM - read-only memory) Memoria extern (discuri magnetice, optice) Dispozitive periferice (de intrare: tastatura, mouse-ul, cititorul de coduri cu bare, de ieire: monitorul, imprimanta, boxele audio, de intrareieire: unitile de disc magnetic).

2 Software-ul unui calculator reunete informaiile pe care acesta le deine: date i programe. Un program este o list de instruciuni pe care procesorul le poate executa. Datele pot fi orice alt tip de informaie de care are nevoie un program: caractere, iruri de caractere, numere, imagini, secvene audio. Programele i datele sunt memorate n memoria calculatorului (intern sau extern) n acelai fel. Un program n curs de execuie ocup mpreun cu datele pe care le manipuleaz o zon din memoria RAM. Programul poate accesa datele de care are nevoie dar din afara acestuia, instruciunile i datele se confund.

Noiuni privind reprezentarea n calculator a informaiei


Din considerente legate de uurina realizrii circuitelor electronice necesare memorrii i prelucrrii, n calculator informaia este reprezentat n cod binar. Binar nseamn existena a doar dou stri, care prin convenie sunt '0' i '1' sau 'adevrat' i 'fals'.

Un bit este o cifr binar, putnd deci avea valoarea 0 sau 1. Pentru reprezentarea n binar a diferitelor tipuri de informaii (date) exist convenii de reprezentare, definite prin standarde. ntre acestea de notorietate este standardul ASCII, care specific modul de reprezentare n binar a caracterelor alfabetului englez i a diferitelor semne speciale, cu sau fr echivalent grafic. Exist ns reprezentri standard i a caracterelor altor limbi. Deoarece codul ASCII presupune utilizarea a 8 poziii binare, insuficiente pentru a reprezenta simbolurile grafece specifice tuturor limbilor, acestea se reprezint pe 16 poziii binare

3 (reprezentare numit Unicode). n Unicode de exemplu 1111100111111101

reprezit caracterul. Atribuirea configuraiilor binare Unicode pentru noi caractere este arbitrar i se realizeaz de ctre un comitet internaional de standardizare. Singura restricie la atribuirea unei noi configuraii binare este s nu mai fi fost utilizat. n cazul reprezentrii altor tipuri de informaii (imagine, sunet) lucrurile devin repede mult mai complexe, deoarece exist pentru fiecare dintre ele mai multe standarde i n timp apar altele noi. Esenial este numai faptul c : indiferent de natura informaiei, n final se ajunge la o codificare binar, informaia din memoria calculatorului este o succesiune de bii i ce reprezint acestea depinde doar de modul n care sunt utilizate de programele n execuie.

Octetul
Deoarece bitul este o unitate de memorare a informaiei prea mic i fr o semnificaie aparte, de regul memoria calculatorului este organizat n grupe de 8 bii. O celul de memorie de 8 bii se numete octet (engl. byte). 1 octet = 8 bii Octetul este suficient pentru memorarea unui caracter ASCII. Multiplii octetului : Denumire octet kilooctet (kilobyte), kB megaoctet (megabyte), MB gigaoctet (gigabyte), GB teraoctet (terabyte), TB Numr de octei 1 1024 1 048 576 1 073 741 824 1 099 511 627 776 Putere a lui 2 20 210 220 230 240

Dac pentru memorarea unei date sunt necesari mai mult de 8 bii se va folosi o suucesiune de mai muli octei.

4 Fiecare celul de memorie (de 1 octet) are i o adres care permite accesarea ei.

La pornirea calculatorului fiecare celul de memorie din memoria RAM are o valoare arbitrar. Adresa unei celule i coninutul ei sunt mrimi care nu au nimic n comun.

Coninutul memoriei
n timpul funcionrii calculatorului, memoria acestuia reine n celulele sale configuraii binare specifice diferitelor informaii coninute. Se poate spune de asemenea c fiecare octet conine un numr ntreg ntre 0 i 255 (255 este cel mai mare numr ntreg care se poate reprezenta folosind 8 poziii binare). Procesorul calculatorului poate accesa o celul de memorie (un octet) de la o adres dat pentru a realiza dou funcii fundamentale: 1. poate scrie n celul. Coninutul anterior al acesteia este nlocuit cu o nou valoare.

2. poate citi valoarea din celul. Procesorul obine o copie a coninutului celulei. Coninutul celulei rmne neschimbat. n timpul executrii unui program, o serie de valori din memorie rmn neschimbate n timp ce altele se modific pe msur ce execuia programului progreseaz. De obicei rmn fixe celulele care conin date de intrare sau instruciunile programului. Dac o celul conine valori calculate, valoarea ei iniial va fi probabil necunoscut, arbitrar, dar va fi modificat pe parcursul execuiei programului. Procesoarele actuale pot citi sau scrie n memorie 8, 16, 32 sau 64 poziii binare simultan, deci 1, 2, 4 sau 8 octei. La scrierea unui program ntr-un limbaj de programare de nivel nalt nu este necesar inerea evidenei adreselor locaiilor din memorie care conin date sau informaii despre tipul acestora. Datorit faptului c n program pot fi incluse declaraii prin care fiecrei date i se precizeaz tipul i i se asociaz un nume, n program celulele de memorie vor fi referite prin numele lor, calculul adreselor i utilizarea lungimii corecte ale fiecrei date realizndu-se automat.

Folosirea discului magnetic


Pentru pstrarea pemanent a informaiei, aceasta este memorat pe discuri magnetice printr-un procedeu similar nregistrrii sunetului pe o band de casetofon.

Procesul este reversibil, deci se poate scrie i citi n mod repetat. Fizic, un hard-disk este format din dou sau mai multe discuri rigidizate ntre ele i acoperite cu un material feromagnetic. Un bloc de capete de citire/scriere poate fi plasat pe diferite circumferine ale discului. Citirea sau scrierea se realizeaz cu viteze relativ reduse (de peste 1000 ori mai lent dect n cazul memoriei RAM). La fel cum celulele memoriei centrale sunt dispuse din punct de vedere conceptual unele dup altele i au fiecare o adres fizic, i poziiile pe care se poate plasa fiecare dintre capetele de citire/scriere sunt precis definite i au asociate adrese fizice. Pe disc, informaia este organizat n fiiere. Fiierul conine informaii de acelai fel (un ansamblu de date, un program etc). Fiecare fiier are un nume i ocup pe disc o zon definit printr-o adres cunoscut de sistemul de operare. Accesul la fiiere, citirea i scrierea lor i organizarea discului astfel nct fiierele s fie rapid accesate sunt de altfel funcii principale ale sistemului de operare al calculatorului. Aplicaiile care realizeaz accesarea unor fiiere vor realiza aceasta indirect, prin intermediul unor funcii specializate disponibile la nivelul sistemului de operare.

7 Fiierele pot fi de multe tipuri. Tipul unui fiier este dat de natura informaiilor pe care le conine i este precizat prin extensia care este plasat n continuarea numelui. Exemple: prog.exe - fiier coninnd un program executabil, prelucrare.cpp - fiier coninnd un program surs scris n C++, info.txt, - fiier coninnd un text f1.dat. - fiier coninnd date necesare unei aplicaii.

Extensia unui fiier este important i pentru faptul c este folosit de sistemul de operare Windows pentru a stabili aciunea care trebuie executat dac acesta este selectat printr-un dublu clic cu mouse-ul. Astfel, dac fiierul are extensia .txt sistemul va lansa n execuie o aplicaie specializat pe tratarea fiierelor de text iar dac extensia este .exe va ncrca n memoria principal coninutul fiierului i l va lansa n execuie.

Operaiile executate de un procesor


n timpul funcionrii unui calculator, activitatea procesorului const n executarea cu mare vitez a unor instruciuni elementare aparinnd unui set de instruciuni pe care circuitele sale le pot executa. Instruciunile sunt plasate n memorie, una dup alta, formnd un program executabil. Instruciunile programului executabil sunt denumite i instruciuni n limbaj main, deoarece ele pot fi executate imediat de ctre procesor. Exemple de instruciuni executabile de ctre procesor: citirea coninutului unei celule de memorie, testarea unui bit al unei configuraii binare citite (dac este 1 sau 0), incrementarea cu o unitate a unei celule de memorie, adunarea unui numr din procesor cu un numr aflat ntr-o celul din memoria principal etc. O instruciune n limbaj main const dintr-o secven de octei care conine att codul operaiei de executat ct i informaiile necesare adresrii operanzilor implicai. Dup executarea instruciunii curente procesorul execut instruciunea plasat n memorie n continuare sau, dac instruciunea curent este o instruciune de salt, execut o alt instruciune, aflat la o adres indicat n cadrul instruciunii de salt. Instruciunile pot forma astfel structuri logice complexe, calculatorul devenind instrumentul ideal pentru transmiterea i procesarea volumelor mari de

8 date, manipularea modelelor matematice asociate proceselor fizice sau pentru conducerea unor procese tehnologice complexe. Aceasta este tot ce tie s fac un (micro)procesor. Procesoarele actuale execut astfel de instruciuni elementare ntr-un timp foarte scurt: t<2-20 sec. sau, altfel spus, cu frecvene superiore valorii de 1 GHz, (220 operaii/sec.). Fiecare procesor are setul su de instruciuni main. Chiar dac realizeaz n mare aceleai operaii, procesoarele care echipeaz calculatoarele DELL difer de cele care echipeaz calculatoarele Apple Macintosh. Programul n limbaj main nu este deci portabil, el este specific unui anumit procesor sau, mai exact, unei anumite familii de procesoare. Din fericire, pentru a programa calculatorul nu este necesar cunoaterea programrii microprocesorului. Programarea se realizeaz n limbaje de nivel nalt (C, C++, C#, Java, etc), folosind un set redus de instruciuni complexe. O aplicaie specializat va analiza codul scris i va transforma instruciunile de nivel nalt n instruciuni elementare, executabile de ctre procesor.

Exemplu simplificat de programare n limbaj main


S presupunem c dispunem de o periu de dini electric avnd motorul electric de rotire a capului de periat controlat de un microprocesor. De altfel multe dintre aparatele electrocasnice ncep s fie astfel realizate. Setul de instruciuni executabile de microprocesorul periuei este urmtorul:

Instruciune microprocesor 0000 0000 0000 0001 0000 0010 0000 0100 0000 1000 Stop

Machine Operation

Rotaie perie spre stnga Rotaie perie spre dreapta Salt la nceputul programului Salt peste instruciunea urmtoare dac ntreruptorul este deschis

9 Memoria "echipamentului" este urmtoarea:

Adresa Instruciune 0 1 2 3 4 La pornirea periuei, se lanseaz n execuie programul din memorie ncepnd cu adresa 0. Programul este reluat (de la adresa 0) la execuia instruciunii avnd codul 0000 0100 i trebuie s se opreasc din execuie la acionarea ntreruptorului periuei. Soluia problemei n limbaj main este urmtoarea:

Adresa Instruciune 0 1 2 3 4 0000 0001 0000 0010 0000 1000 0000 0100 0000 0000 Rotaie perie spre stnga Rotaie perie spre dreapta

Explicaie

Salt peste instruciunea urmtoare dac ntreruptorul este deschis Salt la nceputul programului Stop

Instruciunile de la adresele 0 la 3 formeaz un ciclu. Ele se execut continuu pn ce condiia de ieire din ciclu (ntreruptor deschis) este ndeplinit. Astfel de cicluri se ntlnesc practic n toate programele programele de calculator iar scrierea lor, chiar n limbaje evoluate, nu este tocmai simpl. .

10

Capitolul 2. Programarea aplicaiilor simple n C i C++


Aspecte generale
Avnd n vedere att dificultile legate de cunoaterea arhitecturii i funcionrii unui microprocesor ct i cele legate de descompunerea unui proces de prelucrare de date n instruciuni elementare, pe care acesta le poate executa, foarte rar se apeleaz la programarea n limbaj main. Programele de calculator sunt scrise de regul n limbaje de nivel nalt, cele mai folosite fiind C, C++, Java sau BASIC. Dup scrierea programului ntr-unul dintre limbajele de nivel nalt menionate, o aplicaie specializat va analiza i va traduce fiecare instruciune din program ntr-o succesiune de instruciuni n limbaj main. Exemplu de program scris n C++:
#include <iostream> using namespace std; void main() { int sum = 0; int i, j; i = 2; j = 2; sum = i + j; cout << "Suma = " << sum << endl; }

Dup scrierea programului folosind un editor de texte simplu (Notepad este perfect), programul este nregistrat pe disc (salvat pe disc). La salvare i se va da un nume, de exemplu suma.cpp. Se remarc folosirea extensiei .cpp, specific fiierelor care conin programe scrise n acest limbaj. Etapa care urmeaz salvrii este traducerea programului n limbaj main. Aceast operaie poart numele de compilare iar aplicaia care o execut se numete compilator. n urma compilrii se obine un alt fiier, suma.exe. Sufixul .exe indic faptul c fiierul rezultat n urma compilrii conine un program executabil.

suma.cpp

compilator

suma.exe

Traducerea programului surs

11

Programul rezultat, suma.exe poate fi executat imediat.

Un dublu clic pe

pictograma acestuia n fereastra aplicaiei WindowsExplorer produce efectul urmtor:

dublu clic

Interpretoare
Se cunoate deja faptul c programele scrise n limbaje de nivel nalt nu pot fi n nici un caz executate imediat de ctre microprocesor. Ele trebuie traduse mai nti n limbajul acestuia. O soluie frecvent folosit este ns utilizarea unui interpretor care traduce pe rnd instruciunile limbajului de nivel nalt i execut codul rezultat n urma traducerii pe msur ce acesta devine disponibil. Interpretorul este o aplicaie care creeaz utilizatorului impresia c folosete un calculator capabil s execute direct instruciunile de nivel nalt pe care acesta i le transmite.

12

Interpretor BASIC (program executabil)

Program surs Interpretarea programului surs

Procesor

ntr-un astfel de caz, procesorul execut alternativ instruciunile interpretorului, care traduce instruciunile programului surs i instruciunile rezultate n urma interpretrii fiecreia dintre liniile programului surs. Pe toat durata procesului, n memoria principal se vor afla simultan interpretorul i programul surs. Interpretorul const dintr-un ansamblu de instruciuni n cod main pe care procesorul le poate executa imediat iar programul surs const dintr-un ansamblu de instruciuni pe care interpretorul le cunoate i le poate prelucra. Dei adoptarea unei astfel de soluii ncetinete semnificativ viteza de rulare a unei aplicaii, ea rmne interesant dac se urmrete asigurarea portabilitii aplicaiilor sau dac viteza de execuie nu este un factor relevant.

Medii de programare
Realizarea ciclului de aciuni necesar realizrii unui program presupune: Scrierea programului surs, cu ajutorul unui editor de texte; Compilarea acestuia; Execuia; Depanarea, dac rezultatele obinute relev erori de logic. n englez o astfel de eroare este numit "bug" (ploni!), pentru corectare fiind folosit un debugger (depanator) care permite executarea linie cu linie a programului surs i afiarea permanent a valorilor variabilelor. Aceste etape pot fi parcurse folosind un ansamblu de aplicaii (editor de texte, compilator, depanator etc) sau o singur aplicaie care s le integreze pe toate. Evident varianta a doua este mai bun deoarece volumul de operare scade

13

semnificativ (practic pentru toate comenzile exist butoane care sunt acionate cu mouse-ul) i scrierea programului se realizeaz mai uor, editorul folosit evideniind n timpul scrierii blocurile lexicale folosite i zonele n care textul surs este neinteligibil. Pentru limbajul C, o soluie bun este mediul Visal C++. Numele mediului indic faptul c este destinat scrierii n limbajul Visual C++. ns limbajul C++ integreaz perfect limbajul C, oferind n plus un superset de instruciuni necesare programrii obiectuale, deci un mediu de programare pentru C++ este utilizabil i pentru scrierea de programe n C standard.

Dezvoltarea n Visual C++ de aplicaii tip Console


Un mediu de dezvoltare complex cum este Visual C++ permite realizarea multor tipuri de aplicaii. Precizarea nc de la nceputul realizrii unei aplicaii a tipului acesteia este necesar deoarece Visual C++ este mai mult dect un mediu de programare, este un generator de aplicaii. Pentru anumite tipuri de aplicaii, pri importante ale acestora sunt generate automat. Aplicaiile care nu au o interfa grafic sunt executate n fereastra Command Prompt a sistemului de operare, tipul acestora fiind denumit console application. Dup instalarea mediului de dezvoltare, acesta se lanseaz n execuie ca orice aplicaie Windows:

14

Fereastra afiat este tipic pentru o aplicaie Windows profesional, respectiv are o bar de meniuri, una sau mai multe bare cu instrumente i o zon util mprit n mai multe panouri. Crearea unui nou proiect Crearea unei aplicaii ncepe cu crearea unui proiect (File / New):

15

La crearea proiectului se va selecta ca i tip Win32 / Win32 Console Application i i se va da un nume (caseta de text Name). Caseta de text Location conine calea spre directorul n care se dorete crearea proiectului. Dup apsarea butonului OK mediul de programare va afia o fereastr n care se va selecta caseta de validare "Empty Project".

16

Rezultat:

n continuare se va aduga proiectului un prim fiier care va conine codul surs al aplicaiei. n toate aplicaiile care vor urma, numele acestuia va coincide sistematic cu numele proiectului. Pentru a aduga fiierul, se va selecta n meniul contextual afiat la selectarea cu mouse-ul a opiunii Source Files opiunea Add / New Item.

17

n continuare se adaug n fereastra de editare programul surs i se salveaz (File / Save sau se apas butonul corespunztor de pe bara cu instrumente).

Deoarece un proiect poate conine mai multe fiiere surs, selectarea fiierului a crui coninut dorim s fie afiat n fereastra de editare se realizeaz folosind intrrile din arborele afiat n panoul din stnga (tabul Solution Explorer). Compilarea programului Pentru crearea unui program executabil, se selecteaz mai nti n meniul Build opiunea Compile Suma.cpp. Dac programul nu prezint erori de sintax, dup compilare se va selecta n acelai meniu opiunea Build Suma. Etapa declanat prin selectarea acestei opiuni se numete editare de legturi (Link) i este necesar deoarece programele sunt construtuite de regul din mai multe module rezultate din procese separate de compilare care trebuie unite ntr-un executabil unic. ntre modulele care trebuie unite un loc aparte l ocup funciile standard ale limbajului, apelate n cadrul aplicaiei scrise. Acestea realizeaz calcule matematice (sin, cos, etc), operaii de intrare/ieire, procesarea irurilor de caractere, etc.. Aceste funcii sunt memorate n stare compilat n fiiere cu o organizare aparte numite biblioteci de funcii. Organizarea acestor fiiere permite extragerea rapid a secvenelor de program executabil corespunznd diferitelor funcii coninute.

18

Chiar i programul simplu pe care l-am scris este constituit din mai multe module. De exemplu linia:
cout << "Suma este " << sum << endl;

conine cout, << i endl. Simbolul "<<" este un operator de extragere dintr-un flux de date, practic o funcie dintr-o bibliotec, deci coninutul acesteia va fi inclus n aplicaie n momentul ediiei de legturi. Pentru a se putea realiza compilarea liniilor care conin astfel de entiti, programele C++ vor ncepe de regul cu o serie de directive de compilare. n exemplul dat ele sunt urmtoarele:
#include <iostream> using namespace std;

Execuia programului Pentru execuia programului se va selecta n meniul Debug opiunea Start Without Debugging sau se vor apsa simultan tastele Ctrl i F5:

Rezultatul executrii programului va fi afiat ntr-o fereastr DOS:

19

Scrierea n C (C++) a unui program simplu Se dorete scrierea unui mic program care s ne permit s ne calculm greutatea ideal. Formula de calcul este:
g = 50 + 0.75 * (h 150) + 0.25 * (v 20)

n relaie g este greutatea ideal, h este nlimea n cm iar v este vrsta n ani. Pentru femei, rezultatul trebuie nmulit cu 0.9. Soluie:
#include <iostream> using namespace std; void main() { int h, v; double g; (corpul funciei main) cout << "h="; cin >> h; cout << "v="; cin >> v; g = 50.0+0.75*(h-150)+0.25*(v-20); cout <<"greutatea g (barbat) = " << g << endl; cout <<"greutatea g (femeie) = " << 0.9*g << endl; }

Observaii: 1. Programul const dintr-o funcie, main(). Corpul funciei este plasat ntre acolade. n orice program C (sau C++) trebuie s existe o funcie denumit main(), de unde va ncepe execuia programului. 2. 3. Variabilele folosite, h, v i g sunt declarate nainte de a fi folosite. Pentru declararea variabilelor ntregi h i v s-a folosit cuvntul int (prescurtare de la integer); 4. Pentru declararea variabilei reale g s-a folosit cuvntul double;

20

5.

Numele funciei principale este precedat de void (vid).

n mod

normal o funcie returneaz o valoare i n faa numelui ei se declar tipul valorii returnate. Dac nu se scrie nimic, se subnelege c funcia returneaz un int. Tot prin convenie se declar de tip void funcia care nu returneaz nici o valoare. 6. Pentru afiarea pe ecran (consol, fiierul standard de ieire) a unor mesaje (iruri de caractere) s-a folosit instruciunea cout; cout << "h="; 7. Pentru citirea de la tastatur a valorilor variabielor s-a folosit cin: cin >> h; 8. Pentru afiarea rezultatelor s-a folosit din nou cout. Dac se

execut succesiv mai multe instruciuni cout, valorile vor fi afiate una dup alta, trecndu-se la linie nou numai dup umplerea liniei curente. Pentru a comanda trecerea imediat la linie nou se adaug n lista de valori afiate endl (un ir constant care conine caracterul <Carriage Return>, reprezentat n C prin '\n'). 9. Pentru a putea realiza operaiile de intrare-ieire folosind cin i cout, prima linie a programului indic includerea fiierului <iostream>. Dac se creaz un proiect (Greutate), un fiier surs (Greutate.cpp), n urma realizrii i rulrii programului executabil greutate.exe pe un set de date (h=178, v=38) se obine rezultatul:

Comentarii
ntr-un program scris n C++ pot fi folosite dou tipuri de comentarii:

comentarii "n linie", introduse prin //. ncheie la sfritul liniei curente

Un astfel de comentariu se

21

comentarii pe unul sau mai multe rnduri consecutive. conine comentariul este delimitat prin /*

Zona care

(comentariu) */.

De regul se folosesc comentariile n linie, cel de-al doilea tip fiind folosit frecvent n timpul depanrii programelor mari i complexe, pentru a suprima din program anumite zone. Exemplu:
#include <iostream> void main() { cout << "On a withered branch" << '\n'; // Primul vers cout << "A crow has just alighted:" << '\n'; // Versul 2 cout << "Nightfall in autumn." << '\n'; // Versul 3 }

Structurile de control ale limbajelor


n exemplele date, prelucrarea informaiilor s-a realizat prin instruciuni i apeluri ale unor funcii. Instruciunile executabile dintr-o unitate de program sunt scrise dup stabilirea de ctre programator a algoritmului de rezolvare. Un algoritm poate fi definit ca fiind o mulime ordonat de pai executabili care definesc un proces finit. Algoritmii au o serie de proprieti fundamentale:

generalitate (algoritmul determin modul de rezolvare a unui tip de probleme i nu a unei probleme particulare). finitudine (execuia algoritmului trebuie s se termine ntr-un numr finit de pai - operaii). rigurozitate (fiecare pas al algoritmului trebuie s fie precis definit) executabilitate (fiecare pas al algoritmului trebuie s fie executat de calculator) eficien (se determin din punct de vedere al timpului de execuie i al memoriei ocupate) unicitate (pentru acelai set de date de intrare trebuie s determine aceleai rezultate).

Pentru descrierea algoritmilor, n limbajele de nivel nalt sunt definite instruciuni.

22

Pascal
D A
Instr.1 Exp

C, C++, Java
if Exp Instr. 1 ; else Instr. 2 ;

N U
Instr.2

if Exp then Instr. 1 else Instr. 2 ;

N U

Exp

while Exp do Instr ;

while Exp Instr ;

Instr

D A

Instr

repeat Instr until not Exp ;


D U

do
Instr while Exp ;

Exp

N A

case N of C1 : Secv. 1 ; C2 : Secv. 2 ; N = C1 N = C2 N = C3 C3 : Secv. 3 ; end ; Secv. 1 Secv. 2 Secv. 3

switch (N) { case C1 : Secv. 1 ; case C2 : Secv. 2 ; case C3 : Secv. 3 ; };

i := 1 NU iN DA Corp ciclu i := i+1

for i := 1 to N do begin Corp ciclu ; end ;

for (i = 1; i <= N; i++) { Corp ciclu; };

23

Tipuri de date
Ce reprezint un ir de caractere scos din orice context poate fi n cel mai fericit caz ghicit. Deoarece memoria calculatorului conine un ir aproape infinit de cifre binare, n cazul ei situaia e i mai complicat. Este deci evident c fr definirea unor reguli de reprezentare a informaiei i fr cunoaterea modului de ocupare a memoriei calculatorului, informaia pe care aceasta o conine ar fi lipsit de orice semnificaie. Pe de alt parte definirea precis a modului de reprezentare a informaiei n calculator condiioneaz arhitectura hardware a acestuia, n mod deosebit pe cea a procesorului.

Tipuri de date elementare


n limbajele evoluate sunt definite de obicei 8 tipuri de date elementare (primitive):

byte

short

int

long

float

double

char

boolean

n C (C++) exist doar cele subliniate. La declarea diferitelor variabile folosite ntr-un program denumirile tipurilor trebuie scrise cu litere mici. De altfel n limbajul C i derivatele sale (C++, Java) se face distincie ntre literele mari i cele mici. Dac trebuie declarat un ir de valori de un anumit tip se va indica ntre paranteze drepte numrul de elemente din ir. Exemple: int a, b[100], c=0; double p[30], q[20][30]; Pentru irul b compilatorul va rezerva 100 de celule consecutive pentru 100 de valori ntregi. Indicele folosit la selectarea unei valori oarecare poate varia ntre 0 i 99. Variabila q corespunde unei matrici bidimensionale avnd 20 de linii i 30 de coloane. Indicii se scriu separat, ntre paranteze drepte i pot varia de la 0 la 19 respectiv de la 0 la 29. Se poate omite indicele al doilea, q[i] desemnnd linia i.

24

Tipuri pentru numere ntregi Tip


short int long

Mrime
16 bii 16 bii 32 bii

Domeniu
-32,768 la +32,767 idem (aprox)-2 miliarde la +2 miliarde

Tipuri pentru numere reale Tip


float double

Mrime
32 bits 64 bits

Domeniu
-3.4E+38 to +3.4E+38 -1.7E+308 to 1.7E+308

Cunoaterea exact a modului de stabilire a configuraiei binare pentru un numr n diverse reprezentri nu este necesar. Pentru valorile citite sau scrise pe ecran conversia este realizat automat de funciile apelate pentru citire-scriere. Pentru numerele scrise direct n relaiile de calcul din program (numite i literali) conversia este realizat de compilator. Exemplu: g = 50.0+0.75*(h-150)+0.25*(v-20); Relaia din dreapta egalului comport 5 literali. Literalii scrii cu punct zecimal vor fi convertii implicit n double iar cei fr punct zecimal n int. Dac dorim s influenm modul de reprezentare a literalilor, dup valoarea numeric trebuie adugat un caracter, astfel:

f sau F pentru float, d sau D pentru double, L pentru long (se poate i l dar se confund cu 1).

n unele situaii este bine s se foloseasc la scrierea literalilor notaia tiinific (cu exponent). De exemplu: 1.23E+02 -1.235E+02 -1.98234234E+05 3.81E-06 sunt literali reprezentai n dubl precizie. Datorit limitrii mrimii spaiului de memorie folosit pentru reprezentare, precizia reprezentrii numerelor reale este limitat. Pentru float ea este de 7 cifre zecimale iar pentru double de 15 cifre zecimale.

25

Tipul char
Prelucrarea datelor cu ajutorul calculatorului se reduce frecvent la operaii cu iruri de caractere. Pentru manipularea acestora, n C (C++) exist tipul char. n C un caracter se reprezint folosind apostroful. Astfel 'C' sau '&' sunt caractere. Caractere care nu au simblol grafic se vor indica printr-o succesiune de dou caractere (secven escape) astfel: '\n' (LF), '\a' (bell), '\b' (backspace), '\f' (pagin nou, formfeed), '\r' (retur car, carriage return), '\t' (tab orizontal), '\v' (tab vertical). Dac se cunoate codul ASCII al unui caracter (vezi tabelul) se poate reprezenta un caracter fr echivalent grafic i printr-o construcie de forma '\xhh' sau '\Xhh' unde hh reprezint codul ASCII n hexazecimal al caracterului. Astfel '\n' (LF) este echivalent cu '\x0A'. irurile de caractere se reprezint folosind pentru delimitare caractere " (ghilimele). Exemplu: "Acesta este un ir". "" este un ir vid. ntr-un ir pot figura secvenele escape definite, de exemplu : "Sir de caractere\nscris pe doua linii" sau "Sir \" cu ghilimele". Reprezentarea intern a unui ir de caractere se ncheie cu '\0' (0 sau caracterul NULL). Acesta servete la recunoaterea sfritului acestuia. Accesul la caracterele unui ir de caractere se poate face folosind indici. Astfel, dac s este un ir de caractere, s[0] este primul caracter i s[5] este caracterul al 6-lea.

26

Tabela ASCII (partea I)

Exemplu: Gsii lungimea unui ir de caractere citit de la tastatur: #include <iostream> using namespace std;
void main() { char s[200]; int i; cout << "Introduceti un sir, fara spatii:"; cin >> s; i = 0 ; while (s[i] != '\0') i++; cout << "Sirul are " << i << " caractere" << endl; }

Variant pentru iruri lungi, cu spaii, care se ncheie la apsarea tastei <Enter>:

27

#include <iostream> using namespace std; void main() { char s[200]; int i; cout << "Introduceti o linie de text:"; cin.getline( s, 199 ); i = 0 ; while (s[i] != '\0') i++ ; cout << "Sirul are " << i << " caractere" << endl; }