Anda di halaman 1dari 10

CAPITOLUL I NOIUNI INTRODUCTIVE

1.1. Structura general a unui sistem de calcul 1.2. Algoritmi 1.2.1. Noiuni generale 1.2.2. Definiii i caracteristici 1.2.3. Reprezentarea algorimilor 1.3. Teoria rezolvrii problemelor

1.1. STRUCTURA GENERAL A UNUI SISTEM DE CALCUL


Calculatorul reprezint un sistem electronic (ansamblu de dispozitive i circuite diverse) complex care prelucreaz datele introduse ntr-o form prestabilit, efectueaz diverse operaii asupra acestora i furnizeaz rezultatele obinute (figura 1.1.). PROGRAM (ir de aciuni , prelucrri, algoritm) Date de ieire (rezultatele obinute)

Date de intrare (datele iniiale ale problemei)

Figura 1.1. Calculatorul - sistem automat de prelucrare a datelor Principalele avantaje ale folosirii calculatorului constau n: viteza mare de efectuare a operaiilor; capacitatea extins de prelucrare i memorare a informaiei. Dei construcia unui calculator - determinat de tehnologia existent la un moment dat, de domeniul de aplicaie, de costul echipamentului i de performanele cerute - a evoluat rapid n ultimii ani, sistemele de calcul, indiferent de model, serie sau generaie, au o serie de caracteristici comune. Cunoaterea acestor caracteristici uureaz procesul de nelegere i nvare a modului de funcionare i de utilizare a calculatorului. n orice sistem de calcul vom gsi dou pri distincte i la fel de importante: hardware-ul i software-ul. Hardware-ul este reprezentat de totalitatea echipamentelor i dispozitivelor fizice; Software-ul este reprezentat prin totalitatea programelor care ajut utilizatorul n rezolvarea problemelor sale (figura 1.2.). Software-ul are dou componente principale: Sistemul de operare (de exploatare) care coordoneaz ntreaga activitate a echipamentului de calcul. Sistemul de operare intr n funciune la pornirea calculatorului i asigur, n principal, trei funcii: Gestiunea echitabil i eficient a resurselor din cadrul sistemului de calcul; Realizarea interfeei cu utilizatorul; Furnizarea suportului pentru dezvoltarea i execuia aplicaiilor. Exemple de sisteme de operare: RSX11, CP/M, MS-DOS, LINUX, WINDOWS NT, UNIX. Sistemul de aplicaii (de programare): medii de programare, editoare de texte, compilatoare, programe aplicative din diverse domenii (economic, tiinific, financiar, divertisment). Componentele unui sistem de calcul pot fi grupate n uniti cu funcii c omplexe, dar bine precizate, numite uniti funcionale. Modelul din figura 1.3. face o prezentare simplificat a structurii unui calculator, facilitnd nelegerea unor noiuni i concepte de baz privind funcionarea i utilizarea acestuia. Denumirea fiecrei uniti indic funcia ei, iar sgeile - modul de transfer al informaiei.

3 SISTEM OPERARE UTILIZATOR

HARDWARE

Vom utiliza n continuare termenii de citire pentru operaia de introducere (de intrare) de la tastatur a datelor iniiale ale unei probleme, i scriere pentru operaia de afiare (de ieire) a rezultatelor obinute. n cazul n care utilizatorul dorete s rezolve o problem cu ajutorul calculatorului, informaia de intrare (furnizat calculatorului de ctre utilizator) va consta din datele iniiale ale problemei de rezolvat i dintr -un program (numit program surs). n programul surs utilizatorul implementeaz (traduce) ntr-un limbaj de programare un algoritm (aciunile executate asupra datelor de intrare pentru a obine rezultatele). Aceast informaie de intrare este prezentat ntr-o forma extern, accesibil omului (numere, text, grafic) i va fi transformat de ctre calculator ntr-o forma intern, binar. Unitatea de intrare (cu funcia de citire) realizeaz aceast conversie a informaiei din format extern n cel intern. Din punct de vedere logic, fluxul (informaia) de intrare este un ir de caractere, din exterior ctre memoria calculatorului. Din punct de vedere fizic, unitatea de intrare standard este tastatura calculatorului. Tot ca uniti de intrare, pot fi enumerate: mouse-ul, joystick-ul, scanner-ul (pentru introducerea informaiilor grafice). Unitatea de ieire (cu funcia de scriere, afiare) realizeaz conversia invers, din formatul intern n cel extern, accesibil omului. Din punct de vedere fizic, unitatea de ieire standard este monitorul calculatorului. Ca uniti de ieire ntr-un sistem de calcul, mai putem enumera: imprimanta, plotter-ul, etc. Informaia este nregistrat n memorie. Memoria intern (memoria RAM - Random Acces Memory) se prezint ca o succesiune de octei (octet sau byte sau locaie de memorie). Un octet are 8 bii. Bit-ul reprezint unitatea elementar de informaie i poate avea una din valorile: 0 sau 1. Capacitatea unei memorii este dat de numrul de locaii pe care aceasta le conine i se msoar n multiplii de 1024 (2 10 ). De exemplu, 1 Mbyte=1024Kbytes; 1Kbyte=1024bytes. Numrul de ordine al unui octet n memorie se poate specifica printr -un cod, numit adres. Ordinea n care sunt adresate locaiile de memorie nu este impus, memoria fiind un dispozitiv cu acces aleator la informaie. n memorie se nregistreaz dou categorii de informaii: Date - informaii de prelucrat; Programe - conin descrierea (implementarea ntr-un limbaj de programare) a aciunilor care vor fi executate asupra datelor, n vederea prelucrrii acestora. n memoria intern este pstrat doar informaia prelucrat la un moment dat. Memoria intern are capacitate redus; accesul la informaia pastrat n aceasta este extrem de rapid, iar datele nu sunt pstrate dup terminarea prelucrrii (au un caracter temporar). Unitatea central prelucreaz datele din memoria intern i coordoneaz activitatea tuturor componentelor fizice ale unui sistem de calcul. Ea nglobeaz:

Microprocesorul- circuit integrat complex cu urmtoarele componente de baz: Unitatea de execuie (realizeaz operaii logice i matematice); Unitatea de interfa a magistralei (transfer datele la/de la microprocesor). Coprocesorul matematic circuit integrat destinat realizrii cu vitez sporit a operaiilor cu numere reale. Memorie intern Unitate de ieire (flux de ieire - ostream n C++)

Unitate de intrare (flux de intrare - istream n C++)

Unitate central

Memorie extern Figura 1.3. Unitile funcionale ale unui sistem de calcul n funcie de numrul de bii transferai simultan pe magistrala de date, microprocesoarele pot fi clasificate astfel: microprocesoare pe 8 bii (Z80, 8080); microprocesoare pe 16 bii (8086, 8088, 80286) cu coprocesoarele corespunztoare (8087, 80287); familii de procesoare pe 32 bii (80386DX, 80486, PENTIUM) cu coprocesoarele corespunztoare (ncepnd de la 486, coprocesoare sunt ncorporate microprocesoarelor). Memoria extern este reprezentat, fizic, prin unitile de discuri (discuri dure-hard disk, discuri flexibilefloppy disk, discuri de pe care informaia poate fi doar citit-CDROM, DVDROM, etc). Spre deosebire de memoria intern, memoria extern are capacitate mult mai mare, datele nregistrate au caracter permanent, n dezavantajul timpului de acces la informaie.

1.2. ALGORITMI 1.2.1. NOIUNI GENERALE


Algoritmul este conceptul fundamental al informaticii. Orice echipament de calcul poate fi considerat o main algoritmic. ntr-o definiie aproximativ algoritmul este un set de pai care definete modul n care poate fi dus la ndeplinire o anumit sarcin. Exemplu de algoritm: algoritmul de interpretare a unei buci muzicale (descris n partitur). Pentru ca o main de calcul s poat rezolva o anumit problem, programatorul trebuie mai nti s stabileasc un algoritm care s conduc la efectuarea la sarcinii respective. Exemplu: Algoritmul lui Euclid pentru determinarea celui mai mare divizor comun (cmmdc) a 2 numere ntregi pozitive. Date de intrare: cele 2 numere ntregi Date de iesire: cmmdc 1. Se noteaz cu A i B- cea mai mare, respectiv cea mai mic, dintre datele de intrare 2. Se mparte A la B i se noteaz cu R restul mpririi 3. a. Dac R diferit de 0, se atribuie lui A valoarea lui B i lui B valoarea lui R. Se revine la pasul 2. b. Dac R este 0, atunci cmmdc este B. Probleme legate de algoritmi Descoperirea unui algoritm care s rezolve o problem echivaleaz n esen cu descoperirea unei soluii a problemei. Dup descoperirea algoritmului, pasul urmtor este ca algoritmul respectiv s fie reprezentat ntro form n care s poat fi comunicat unei maini de calcul. Algoritmul trebuie transcris din forma
5

conceptual ntr-un set clar de instruciuni. Aceste instruciuni trebuie reprezentate ntr -un mod lipsit de ambiguitate. n acest domeniu, studiile se bazeaz pe cunotinele privitoare la gramatic i limbaj i au dus la o mare varietate de scheme de reprezentare a algoritmilor (numite limbaje de programare), bazate pe diverse abordri ale procesului de programare (numite paradigme de programare). Cutarea unor algoritmi pentru rezolvarea unor probleme din ce n ce mai complexe a avut ca urmare apariia unor ntrebri legate de limitele proceselor algoritmice, cum ar fi: Ce probleme pot fi rezolvate prin intermediul proceselor algoritmice? Cum trebuie procedat pentru descoperirea algoritmilor? Cum pot fi mbuntite tehnicile de reprezentare i comunicare a algoritmilor? Cum pot fi aplicate cunotinele dobndite n vederea obinerii unor maini algoritmice mai performante? Cum pot fi analizate i comparate caracteristicile diverilor algoritmi?

1.2.2. DEFINIII I CARACTERISTICI


Definiii: Algoritmul unei prelucrri const ntr-o secven de primitive care descrie prelucrarea. Algoritmul este un set ordonat de pai executabili, descrii fr echivoc, care definesc un proces finit. Proprietile fundamentale ale algoritmilor: Caracterul finit: orice algoritm bine proiectat se termin ntr-un numr finit de pai; Caracterul unic i universal: orice algoritm trebuie s rezolve toate problemele dintr-o clas de probleme; Realizabilitatea: orice algoritm trebuie s poat fi codificat ntr-un limbaj de programare; Caracterul discret: fiecare aciune se execut la un moment dat de timp; Caracterul determinist: ordinea aciunilor n execuie este determinat n mod unic de rezultatele obinute la fiecare moment de timp. Nerespectarea acestor caracteristici generale conduce la obinerea de algoritmi neperformani, posibil infinii sau nerealizabili.

1.2.3. REPREZENTAREA ALGORITMILOR


Reprezentarea (descrierea) unui algoritm nu se poate face n absena unui limbaj comun celor care vor s l neleag. De aceea s-a stabilit o mulime bine definit de primitive (blocuri elementare care stau la baza reprezentrii algoritmilor). Fiecare primitiv se caracterizeaz prin sintax i semantic. Sintaxa se refer la reprezentarea simbolic a primitivei; semantica se refer la semnificaia primitivei. Exemplu de primitiv: aer-din punct de vedere sintactic este un cuvnt format din trei simboluri (litere); din punct de vedere semantic este o substan gazoas care nconjoar globul pmntesc. Algoritmii se reprezint prin: scheme logice; pseudocod.

1.2.3.1. Reprezentarea algoritmilor prin scheme logice


Primitivele utilizate n schemele logice sunt simboluri grafice, cu funciuni (reprezent nd procese de calcul) bine precizate. Aceste simboluri sunt unite prin arce orientate care indic ordinea de execuie a proceselor de calcul. Categorii de simboluri:

Simboluri de nceput i sfrit Simbolul START desemneaz nceputul unui program sau al unui subprogram. Simbolul STOP desemneaz sfritul unui program sau al unui subprogram. Prezena lor este obligatorie. Semnific procese (operaii) de intrare/ieire (citirea sau scrierea)

START

STOP

Simbolul paralelogram
CITETE a, b

AFIEAZ a, b

Simbolul dreptunghi
a 34

Semnific o atribuire (modificarea valorii unei date).

Simbolul romb Simbolul romb este utilizat pentru decizii (figura 1.4.). Se testeaz ndeplinirea condiiei din blocul de decizie. Dac aceast condiie este ndeplinit, se execut ACIUNE1. Dac nu, se execut ACIUNE2. La un moment dat, se execut sau ACIUNE1, sau ACIUNE2.

NU

Condiie ndeplinit ?

DA

ACIUNE2

ACIUNE1

Figura 1.4. Structura de decizie Cu ajutorul acestor simboluri grafice se poate reprezenta orice algoritm. Repetarea unei secvene se realizeaz prin combinarea simbolurilor de decizie i de atribuire. Structurile repetitive obinute pot fi: cu test iniial sau cu test final. Structuri repetitive cu test initial Se evalueaz condiia de test (figura 1.5.). Dac aceasta este ndeplinit, se execut ACIUNE1. Se revine apoi i se testeaz iar condiia. Dac este ndeplinit, se execut (se repet) ACIUNE1, .a.m.d. Abia n momentul DA NU Condiie n care condiia nu mai este ndeplinit, se ndeplinit trece la execuia ACIUNE2. ? Astfel, ct timp condiia este ndeplinit, se ACIUNE2 ACIUNE1 repet ACIUNE1. n cazul n care, la prima testare a condiiei, aceasta nu este ndeplinit, se execut ACIUNE2. Astfel, este posibil ca s o nu fie executat niciodat. Exis i situaii care se repetitiv tie de lacu nceput de cte oriACIUNE1 se va repeta anumit aciune. n aceste cazuri se Figura 1.5. n Structur test iniial folosete tot o structur de control repetitiv cu test iniial. Se utilizeaz un contor (numeric) pentru a ine o eviden a numrului de execuii ale aciunii. De cte ori se execut aciunea, contorul este incrementat.
contor valoare_iniial NU valoare_contor valoare_final DA

Se atribuie contorului valoarea iniial (figura 1.6.). Ct timp condiia (valoarea contorului este mai mic sau egal cu valoarea final) este ndeplinit, se repet:

ACIUNE

ACIUNE

incrementare contor (se adun 1 la valoarea anterioar a contorului).

valoare_contor

valoare_contor + 1

Structur repetitiv cu test final: Se execut mai nti ACIUNE1. Se testeaz apoi condiia (figura 1.7.). Se repet ACIUNE1 ct timp condiia este ndeplinit. n acest caz, corpul ciclului (ACIUNE1) este executat cel puin o dat.

ACIUNE 1

Condiie ndeplinit ? NU ACIUNE 2

DA

Figura 1.7. Structur repetitiv cu test final

1.2.3.2. Reprezentarea algoritmilor prin pseudocod


Pseudocodul este inspirat din limbajele de programare, nefiind ns att de formalizat ca acestea. Pseudocodul reprezint o punte de legtur ntre limbajul natural i limbajele de programare. Nu exist un standard pentru regulile lexicale. Limbajul pseudocod permite comunicarea ntre oameni, i nu comunicarea om-maina (precum limbajele de programare). Pseudocodul utilizeaz cuvinte cheie (scrise cu majuscule subliniate) cu urmtoarele semnificaii: Sfrit algoritm: SFRIT nceput algoritm: NCEPUT Citire (introducere) date: CITETE lista Scriere (afiare) date: SCRIE lista Atribuire: <Structura de decizie (alternativ): DAC condiie ATUNCI aciune1 ALTFEL aciune2 Structuri repetitive cu test iniial: CT TIMP condiie REPET aciune PENTRU contor=val_ini LA val_fin [PAS] REPET aciune; Structuri repetitive cu test final: REPET aciune CT TIMP condiie sau: REPET aciune PN CND condiie Pe lng cuvintele cheie, n reprezentarea algoritmilor n pseudocod pot apare i propoziii nestandard a caror detaliere va fi realizat ulterior. n cazul n care se realizeaz un algoritm modularizat, pot apare cuvintele cheie: SUBALGORITM nume (lista_intrri) CHEAM nume (lista_valori_efective_de_intrare)
8

Exemple: Se vor reprezinta n continuare algoritmii de rezolvare pentru cteva probleme simple (pentru primele 2 probleme se va exemplifica i modul de implementare a acestor algoritmi n limbajul C++). 1. Se citesc 2 valori numerice reale, care reprezint dimensiunile (lungimea i limea unui dreptunghi). S se calculeze i s se afieze aria dreptunghiului.
ALGORITM aflare_arie_drept INCEPUT CITETE L,l aria <- L*l AFIEAZA aria SFARIT

START

CITETE L, l

aria <- L * l

Implementare:

AFIEAZ aria

#include <iostream.h> void main( ) { double L, l; cout<<"Lungime="; cin>>L; cout<<"Laime="; cin>>l; double aria = L * l; cout << "Aria="<< aria; }

STOP

2. Se citesc 2 valori reale. S se afiseze valoarea maximului dintre cele 2 numere.


ALGORITM max_2_nr INCEPUT CITESTE a, b DACA a >= b ATUNCI max<-a ALTFEL max<-b AFISEAZA max SFARIT

Sau:

ALGORITM max_2_nr NCEPUT CITETE a, b DACA a >= b ATUNCI AFISEAZA a ALTFEL AFISEAZA b SFARIT

Implementare n limbajul C++:

#include <iostream.h> #include <iostream.h> void main( ) void main( ) { float a, b; { float a, b, max; cout<<"a=";cin>>a; cout<<"a="; cin>>a; cout<<"b="; cin>>b; cout<<"b="; cin>>b; if (a >= b) if (a >= b) cout<<"Maximul este:"<<a; max = a; else else max = b; cout<<"Maximul este:"<<b; } este:"<<max;} 3. Scout<<"Maximul se citeasc cte 2 numere ntregi, pn la ntlnirea perechii de numere 0, 0. Pentru fiecare pereche de

numere citite, s se afieze maximul. Algoritm care utilizeaz structur repetitiv cu test iniial:
ALGORITM max_perechi1 INCEPUT CITESTE a,b CAT TIMP(a#0sau b#0)REPETA INCEPUT DACA (a>=b) ATUNCI AFISEAZA a ALTFEL AFISEAZA b CITESTE a,b SFARSIT SFARSIT ALGORITM max_perechi2 INCEPUT a 3 CAT TIMP (a#0 sau b#0) REPETA INCEPUT CITESTE a, b DACA (a>=b) ATUNCI AFISEAZA a ALTFEL AFISEAZA b SFARSIT SFARSIT

Algoritm care utilizeaz structur repetitiv cu test final:


ALGORITM max_perechi3 INCEPUT REPETA INCEPUT CITETE a,b DACA (a>=b) ATUNCI AFIEAZA ALTFEL AFIEAZA SFARIT CAT TIMP (a#0 sau b#0) SFARIT

a b

1.3. TEORIA REZOLVRII PROBLEMELOR


Creterea complexitii problemelor supuse rezolvrii automate (cu ajutorul calculatorului) a determinat ca activitatea de programare s devin, de fapt, un complex de activiti. Pentru rezolvarea unei probleme trebuie parcurse urmtoarele etape: Analiza problemei (nelegerea problemei i specificarea cerinelor acesteia). Se stabileste ce trebuie s fac aplicaia, i nu cum. Se stabilesc datele de intrare (identificarea mediului iniial) i se stabilesc obiectivele (identificarea mediului final, a rezultatelor); Proiectarea (conceperea unei metode de rezolvare a problemei printr-o metod algoritmic); Implementarea (codificarea algoritmului ales ntr-un limbaj de programare); Testarea aplicaiei obinute (verificarea corectitudinii programului); Exploatarea i ntreinerea (mentenana, activitatea de modificare a aplicaiei la cererea beneficiarului sau n urma unor deficiene constatate pe parcursul utilizrii aplicaiei). n acest context, activitatea de programare a devenit o activitate organizat, defi nindu-se metode formale de dezvoltare a fiecrei etape. Etapele descrise anterior alctuiesc ciclul de via al unui produs software i constituie obiectul de studiu al disciplinei numite ingineria sistemulor de programe (software engineering). Teoreticienii ingineriei programrii consider c rezolvarea unei probleme se poate face pe 3 direcii: Rezolvarea orientat pe algoritm (pe aciune), n care organizarea datelor este neesenial; Rezolvarea orientat pe date, aciunile fiind determinate doar de organizarea datelor; Rezolvarea orientat obiect, care combin tendinele primelor dou abordri. Abordarea aleas determin modelarea problemei de rezolvat. Dintre metodele de proiectare orientate pe algoritm amintim: metoda programrii structurate i metoda rafinrii succesive. Ambele au ca punct de plecare metoda de proiectare top-down, considerat ca fiind o metod clasic de formalizare a procesului de dezvoltare a unui produs software. La baza metodei top-down st descompunerea funcional a problemei P, adica gsirea unui numr de subprobleme P 1 , P 2 , ... P n , cu urmtoarele proprieti:

Fiecare subproblem P i (1<=i<=n) poate fi rezolvat independent. Dac nu constituie o problem elementar, poate fi, la randul ei, descompus; Fiecare subproblem P i este mai simpl dect problema P; Soluia problemei P se obine prin reuniunea soluiilor subproblemelor P i ; Procesul de descompunere se oprete n momentul n care toate subproblemele P i obinute sunt elementare, deci pot fi implementate;

Comunicarea ntre aceste subprobleme se realizeaz prin intermediul parametrilor. Implementarea metodei top-down ntr-un limbaj de programare se face cu ajutorul modulelor de program (funcii sau proceduri n limbajul Pascal, funcii n limbajul C).
P P 10 P1 P2 P3

Descompunerea funcional a unui program P const n identificarea funciilor (task-urilor, sarcinilor) principale ale programului (P 1 , P 2 , P ), fiecare dintre aceste funcii reprezentnd un subprogram (figura
3

1.3.1.

Etapele rezolvrii unei probleme cu ajutorul calculatorului

S detaliem n continuare etapa de implementare. Dup analiza problemei i stabilirea algoritmului, acesta trebuie tradus (implementat) ntr-un limbaj de programare.

Srierea (editarea) programului surs. Programele surs sunt fiiere text care conin instruciuni (cu sintactica i semantica proprii limbajului utilizat). Programul (fiierul) surs este creat cu ajutorul unui editor de texte i va fi salvat pe disc (programele surs C primesc, de obicei, extensia .c, iar cele C++, extensia .cpp). Pentru a putea fi executat, programul surs trebuie compilat i linkeditat. Compilarea Procesul de compilare este realizat cu ajutorul compilatorului, care translateaz codul surs n cod obiect (cod main), pentru ca programul s poat fi neles de calculator. n cazul limbajului C, n prima faz a compilrii este invocat preprocesorul. Acesta recunoate i analizeaz mai nti o serie de instruciuni speciale, numite directive procesor. Verific apoi codul surs pentru a constata dac acesta respect sintaxa i semantica limbajului. Dac exist erori, acestea sunt semnalate utilizatorului. Utilizatorul trebuie s corecteze erorile (modificnd programul surs). Abia apoi codul surs este translatat n cod de asamblare, iar n final, n cod main, binar, propriu calculatorului. Acest cod binar este nu mit cod obiect i de obicei este memorat ntr-un alt fiier, numit fiier obiect. Fiierul obiect va avea, de obicei, acelai nume cu fiierul surs i extensia .obj. Linkeditarea Dupa ce programul surs a fost translatat n program obiect, el este va fi supus operaiei de linkeditare. Scopul fazei de linkeditare este acela de a obine o form final a programului, n vederea execuiei acestuia. Linkeditorul leag modulele obiect, rezolv referinele ctre funciile externe i rutinele din biblioteci i produce cod executabil, memorat ntr-un alt fisier, numit fiier executabil (acelai nume, extensia .exe) Execuia Lansarea n execuie const n ncrcarea programului executabil n memorie i startarea execuiei sale.

Cod surs

(Preprocesor) Compilator

Cod obiect

Linkeditor

Cod executabil

Figura 1.9. Etapele necesare obinerii fiierului executabil Observaii: 1. Mediile de programare integrate (BORLANDC, TURBOC) nglobeaz editorul, compilatorul, linkeditorul i depanatorul (utilizat n situaiile n care apar erori la execuie);
11

2. Dac nu se utilizeaz un mediu integrat, programatorul va apela n mod explicit (n linie de comand) un editor de texte, compilatorul, linkeditorul. Lansarea n execuie se va face tot din linie de comand. 3. Extensiile specificate pentru fiierele surs, obiect i executabile sunt

12

Anda mungkin juga menyukai