Sunteți pe pagina 1din 5

Loa Andrei, Lucrarea nr.

1 Programarea calculatoarelor
1

Programarea calculatoarelor
1.1 Limbaje de programare
Limbajele de programare sunt elaborate pentru a implementa algoritmi. Orice algoritm se descrie ca succesiune de pai n care intervin operanzi i operatori pentru efectuarea de prelucrri. Orice limbaj de programare conine: * o list de operatori care arat care sunt operaiile aritmetice, logice i de compunere pe care le accept limbajul, devenind resurse la dispoziia programatorilor atunci cnd construiesc expresii mai simple sau mai complexe; lista operatorilor conine i prioritile asociate precum i regula de evaluare; * o list a cuvintelor cheie asociate unor comenzi executabile; este preferabil s existe o continuitate de la un limbaj la altul, pentru a nu se crea confuzii; aa se explic faptul c pentru implementarea structurii alternative se pstreaz construcia if() then else, pentru implementarea structurii repetitive se pstreaz instruciunile for(), while(), do until(), cu mici variaii; * * * * * * * *
Analiza comparat a complexitii entitilor text generate prin tehnici de programare

o list a cuvintelor cheie pentru definirea tipurilor de date fundamentale; o list de cuvinte cheie care joac rolul de atribute sau de specificatori; o list de delimitatori de blocuri i de instruciuni; mecanisme de construire a constantelor i identificatorilor; mecanisme de construire a expresiilor de definire i a expresiilor de referire; mecanisme de construire a subprogramelor; mecanisme de implementare a structurilor de control.

Orice limbaj are la baz un alfabet i un vocabular format din cuvinte cheie i cuvinte construite de utilizatori. Limbajele de programare au nregistrat evoluii spectaculoase, trecnd prin stadii care au impus modificri sau chiar dispariia. Aa s-a ntmplat cu limbajul FORTRAN, care a devenit n evoluia sa FORTRAN-4, FORTRAN-77, FORTRAN-90, iar variantele care au urmat au avut o asimilare limitat, limbajul fiind cu o rspndire extrem de redus. n schimb limbajul C++ prin capacitatea sa de a asimila construcii cu grad de complexitate foarte variat, s-a impus i s-a dezvoltat. Orientarea spre programarea vizual are o larg rspndire prin sugestivitatea abordrii n raport cu problema de rezolvat i operaiile mecanice pe care le presupune implementarea unui algoritm. Limbajele de nivel sczut presupun instruciuni pentru operaiile elementare. Programatorul trebuie s gestioneze descompunerea expresiilor pentru evaluarea din aproape n aproape. Limbajele de nivel ridicat includ construcii complexe, compuneri de expresii i prin atribuirea de calificative se obin efecte speciale n ceea ce privete referirile de operanzi i operatori. Sunt implementate structuri dintre cele mai variate, iar mecanismele de definire de operanzi i operatori au corespondent mecanisme de referire care genereaz efecte ce asigur generalitate i eficien tuturor construciilor; numai aa se explic creterea complexitii i diversitii aplicaiilor informatice de azi. 1

Loa Andrei, Lucrarea nr.1 Programarea calculatoarelor


2 Exemplificarea limbajelor de programare este realizat folosind numai limbajul C++. Elementele care definesc un limbaj sunt: alfabetul limbajului, vocabularul, operatorii i precedenele lor, identificatorii, declaraiile de funcii i variabile. Vocabularul limbajului C++ include cuvintele cheie: asm catch continue dynamic cast false if namespace public signed switch try unsigned wchar t auto char default else float inline new register sizeof template typedef using while bool class delete enum for int operator reinterpret cast static this typeid virtual break const do explicit friend long private return static cast throw typename void case const cast double extern goto mutable protected short struct true union volatile

Programarea calculatoarelor

Lista de operatori i prioritile sunt date n tabelul 1.1: Operatorii identificai n limbajul C++ Tabelul 1.1
Preceden 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Operatori () :: ! - (operator unar) & (adresa) ->* * (nmulire) + << < == & ( AND pe bii)
A

[] ~ * (dereferire) Sizeof .* / >> <= !=

-> ++

>

>=

| && || ?: = ,

+=

-=

etc.

Alfabetul limbajului C++ este alctuit din urmtoarele caractere:


abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ 012356789

Loa Andrei, Lucrarea nr.1 Programarea calculatoarelor


3
!#%&()*+,-./ :;<=>?[\]^_{|}~ spaiu, TAB, CR/LF

Identificatorul este numele dat de programator variabilelor, funciilor, etichetelor i a altor obiecte definite de el. Mecanismul de construire al acestuia este acelai n toate limbajele de programare importante: primul caracter este o liter sau un caracter de subliniere, iar caracterele care urmeaz sunt litere, cifre sau caractere de subliniere. Cuvintele cheie asociate limbajului nu sunt acceptate ca identificatori.
Analiza comparat a complexitii entitilor text generate prin tehnici de programare

Exemple de identificatori valizi sunt: _matrice, mat1234, arb43bin, for123. Exemple de identificatori invalizi sunt: 12matrice, for, etc. Prototipul de funcie n C++ este urmtorul:
tip_rezutat nume_funcie ( list_parametrii ) {corp_func}

Declararea operanzilor se face astfel: tip_operand

list_de_variabile;

Exist numeroase lucrri, [IVANI98], [SMEU01], [SMEU02], [STROU87], care detaliaz limbajul C++ evideniind caracteristicile sale cele mai puternice, studiul acestui limbaj nefiind obiectivul acestei lucrri.

1.2 Implementarea algoritmilor,


Analiza comparat a complexitii entitilor text generate prin tehnici de programare

Algoritmul este finit pentru c n momentul n care nu mai exist interschimbri, nseamn ca irul este sortat. Pentru implementare trebuie rspuns la ntrebrile: * * ct de lungi sunt irurile de termeni care se sorteaz; dac sortarea este nsoit i de interschimbarea altor cmpuri. Funcie de rspunsurile date se procedeaz la definirea unui algoritm de sortare n fiiere sau la construirea unui algoritm de sortare exclusiv n memorie. Implementarea algoritmilor depinde de: * * * * experiena programatorilor; resursele hardware i software disponibile; resursele financiare care stau la baza demersului; timpul n care trebuie rezolvat problema.

n mod normal, trebuie s se porneasc de la problema de rezolvat. Aceasta impune cum se stocheaz datele iniiale, cum se gestioneaz rezultatele intermediare i cum sunt memorate rezultatele finale. Implementarea algoritmilor necesit efectuarea de calcule privind necesarul de memorie pentru a stoca rezultatele intermediare i finale, precum i datele iniiale n timpul prelucrrii. Sunt preferai algoritmii care nu necesit zone importante de memorie pentru rezultate intermediare. Pentru calculul mediei aritmetice care utilizeaz ct mai puin memorie, programul ce 3

Loa Andrei, Lucrarea nr.1 Programarea calculatoarelor


4 implementeaz algoritmul este urmtorul:
#include <stdio.h> int main() { int i, n, s, x; float xm; s = 0; printf("Introduce numarul de elemente:"); scanf("%d", &n); for ( i = 0; i < n; i++ ) { printf( "Introduce x[%d] = ", i ); scanf("%d", &x); s += x; } xm = (float)s/n; printf( "Media aritmetica este %f", xm );Programarea calculatoarelor

Se constat c pentru a reutiliza datele pentru alte calcule, acest deziderat este imposibil de realizat. Pentru a reutiliza datele, este necesar ca ele s se salveze n memorie, n structuri de date corespunztoare, i apoi s intre n prelucrarea efectiv. Algoritmul este un aspect, programul este o concretizare, una din concretizri, totul depinznd de programator. 1.3 Lucru cu fiiere Fiierele, bazele de date, sunt fundamentale pentru rezolvarea problemelor n care se manipuleaz volume mari de date. Fiierul este o colecie de date reprezentnd informaii privind elementele unei colectiviti. Dac datele privind un element Ai al colectivitii {A1, A2, ., An} are lungime constant L baii, atunci fiierul F are o lungime lg(F) = n * L baii. Fiecare articol descrie un element al colectivitii. Poziia pi a articolului care se refer la elementul Ai din colectivitate mpreun cu o valoare unic, numit cheie, notat k i, formeaz o pereche ( ki, pi). Unui fiier F i se asociaz un ir de perechi (k1, p1), (k 2, p2), ..., (kn, pn). Dac se efectueaz operaii precum adugarea, inserarea, tergerea, interschimbarea de articole, este preferabil ca ele s se efectueze asupra irului de perechi, fr a provoca schimbri la nivel fizic, ntruct operarea pe zonele de memorie asociate fiierului au durate care reduc volumul tranzaciilor pe unitatea de timp. Dac ntre cheile k1, k2,....................., kn i poziiile p1, p2, ...., pn se identific o dependen, atunci se construiete o expresie analitic folosind relaia: pi = f (ki) Se obine deplasarea articolului Ai prin relaia:
Di = pi * LAi

Problemele se trateaz similar i n cazul n care lungimile articolelor sunt diferite. Dac articolul Ai are o lungime proprie Li, deplasarea sa Di se obine din relaia: Dt = ^YJDA] +D0
J=1

unde D0 este deplasarea primului articol.


Analiza comparat a complexitii entitilor text generate prin tehnici de programare

Pentru a crete viteza de identificare a unui articol, fiierul F este mprit n r pri, figura 1.2.

Figura 1.2 Divizarea

Loa Andrei, Lucrarea nr.1 Programarea calculatoarelor


5
fiierului F

Dac se efectueaz traversarea fiierului F pentru a gsi articolul cu cheia kx, sunt necesare suficient de multe operaii de citire. Dac se construiete irul de r perechi (k1`, p1`), (k2`, p2`)..(kr`, pr`) se traverseaz mai nti irul de perechi, se obine selectarea zonei din fiier unde se afl articolul cu cheia kx dup care se procedeaz la traversarea secvenial a zonei, articol cu articol, pn la identificarea celui cutat. Este important ca de la nceput articolele s fie dispuse n zonele fiierului F cu condiia: k1 < k2 < .. < kn Subirului de perechi i se asociaz un alt subir, cutarea secvenial efectundu-se pe dou niveluri. Raionamentul se dezvolt, fiind necesar un echilibru ntre numrul nivelurilor de indexare i efortul de traversare secvenial n cadrul fiecrui nivel. Dac se adaug atribute, se construiesc tripletele care se asociaz articolelor fiierului (k 1,p1,a1), (k2,p2,a2), ...., (kn,pn,an). Operaiile de intersecie, reuniune de iruri de triplete conduc la extragerea din fiier a articolelor ale cror cmpuri au valori ce corespund unor combinaii de atribute. Viteza de derulare a tranzaciilor depinde strict de ntreaga filosofie de a organiza procesele de referire ale articolelor din zona de date a fiierului. Lucrul cu indexuri, cu deplasri i mai ales structurile arborescente asociate perechilor de cutare influeneaz duratele tranzaciilor.
Bibliografie:

1. The C++ Programming Language - Stroustrup ~ 900 pag, ed 3


- cartea oficial a limbajului C++, care detaliaz cam tot ce ine de limbaj (a nu se confunda cu specificaia tehnic); autorul ei e inventatorul C++

2. C++ Primer - Lippman et al ~ 1200 pag, ed 4


- o carte introductiv n C++ destul de folosit; detaliaz pe rnd programarea procedural, STL i OOP n C++

3. Effective C++ and More Effective C++ - Meyers ~ 400 pag, 2 vol
- tehnici eficiente/avansate de programare n C++

4. Modern C++ Design Generic Programming and Design Patterns Applied - Andrei

Alexandrescu ~ 300 pag - carte scris de un romn, despre tehnici avansate de programare n C++ cu accentul pe templates (generics)

S-ar putea să vă placă și