Sunteți pe pagina 1din 12

CAP.

NOTIUNI INTRODUCTIVE - Calculatorul, un sistem automat de prelucrare a datelor

1.1. CALCULATORUL, UN SISTEM AUTOMAT DE PRELUCRARE A DATELOR


Calculatorul (mai precis, calculatorul numeric programabil) = sistem electronic (ansamblu de dispozitive si circuite diverse) complex, care preia (citeste) datele initiale ale unei probleme, pe baza unui program efectueaza diverse operatii (prelucrari) asupra acestora si furnizeaza (scrie, afiseaza) rezultatele obtinute (figura 1.1.).
Date de intrare (datele initiale ale problemei) PROGRAM (sir de actiuni , prelucrari, algoritm) Date de iesire (rezultatele obtinute)

Figura 1.1. Calculatorul - sistem automat de prelucrare a datelor Principalele avantaje ale utilizarii calculatorului: q viteza mare de efectuare a operatiilor; q capacitatea extinsa de prelucrare si memorare (inregistrare) a informatiei. Sistem de calcul = hardware + software. Hardware-ul = totalitatea echipamentelor si dispozitivelor fizice; q Software-ul = totalitatea programelor care ajuta utilizatorul in rezolvarea problemelor sale (figura 1.2.).
q

Software-ul are doua componente principale: Sistemul de operare (de exploatare) - coordoneaza intreaga activitate a echipamentului de calcul, este activat la pornirea calculatorului si asigura: Gestiunea echitabila si eficienta a resurselor din cadrul sistemului de calcul; Realizarea interfetei cu utilizatorul; Furnizarea suportului pentru dezvoltarea si executia aplicatiilor. Exemple de sisteme de operare: RSX11, CP/M, MS-DOS, LINUX, WINDOWS NT, UNIX. q Sistemul de aplicatii (de programe): medii de programare, editoare de texte, compilatoare, programe aplicative din diverse domenii (economic, stiintific, divertisment, etc.).

SISTEM OPERARE HARDWARE UTILIZATOR

SOFTWARE DE APLICATIE

SOFTWARE

Figura 1.2. Sistemul de calcul - sistem hardware-software

CAP. 1

NOTIUNI INTRODUCTIVE - Calculatorul, un sistem automat de prelucrare a datelor

1.1.1. UNITATILE FUNCTIONALE ALE UNUI SISTEM DE CALCUL Componentele unui sistem de calcul pot fi grupate in unitati cu functii complexe, bine precizate, numite unitati functionale (figura 1.3.).
Unitate de intrare (flux de intrare - istream in C++) Memorie interna Unitate de iesire (flux de iesire - ostream in C++)

Unitate centrala

Memorie externa

Figura 1.3. Unitatile functionale ale unui sistem de calcul Precizari: Intr-un calculator, toata informatia (numere, cuvinte, texte, desene, imagini, sunete, etc.) este reprezentata sub forma numerica. Programele - codificate tot sub forma numerica. Citire - operatia de introducere (de intrare) de la tastatura a datelor initiale ale unei probleme. Scriere - operatia de afisare (de iesire) a rezultatelor obtinute. La rezolvarea unei probleme, informatia de intrare (furnizata calculatorului de catre utilizator) va consta din datele initiale ale problemei de rezolvat si dintr-un program (numit program sursa). In programul sursa utilizatorul implementeaza (traduce) intr-un limbaj de programare un algoritm (actiunile executate asupra datelor de intrare pentru a obtine rezultatele). Informatia de intrare, aflata initial intr-o forma externa, accesibila omului (numere, text, grafica), va fi transformata de catre calculator - in vederea memorarii si prelucrarii - intr-o forma interna, binara. Unitatea de intrare (functia de citire) conversteste informatia din format extern in cel intern. Exemple: tastatura, mouse-ul, joystick-ul, scanner-ul. Unitatea de iesire (functia de scriere) converteste din formatul intern in cel extern. Exemple: monitorul, imprimanta, plotter-ul, etc. Informatia este inregistrata in memorie. Memoria interna (RAM - Random Acces Memory) = succesiune de octeti (octet, byte, locatie de memorie). Octet = grup de 8 biti. Bit-ul (binary unit) = unitatea elementara de informatie(valorile: 0 sau 1). Numarul de ordine al unui octet in memorie se poate specifica printr-un cod, numit adresa. Capacitatea unei memorii = numarul de locatii continute (multiplii de 1024 (2 10 )). Caracteristici: capacitate redusa, acces extrem de rapid la informatie, datele au caracter temporar. Unitatea centrala prelucreaza datele din memoria interna (extrage din memoria interna, secvential, instructiunile programului, le decodifica si le executa, efectueaza operatii aritmetice si logice asupra datelor) si coordoneaza activitatea componentelor fizice ale sistemului de calcul. Inglobeaza: q Microprocesorul - circuit integrat complex cu urmatoarele componente de baza: Unitatea de executie (realizeaza operatii logice si aritmetice); Unitatea de interfata a magistralei (transfera datele la/de la microprocesor). q Coprocesorul matematic realizarea cu viteza sporita a operatiilor cu numere reale. Memoria externa - unitatile de discuri (discuri dure-hard disk, discuri flexibile-floppy disk, discuri de pe care informatia poate fi doar citita-CDROM, DVDROM, etc) sau benzi magnetice. Caracteristici: capacitate mare, informatia inregistrata are caracter permanent, timp marit de acces.

CAP. 1

NOTIUNI INTRODUCTIVE - Calculatorul, un sistem automat de prelucrare a datelor

1.1.2. DATE, ALGORITMI SI PROGRAME Datele = reprezentari simbolice (numere, cuvinte, texte, imagini, sunete), fara semnificatie. Cind sunt interpretate de catre un anumit sistem de prelucrare, datele devin informatie. Algoritmul - concept fundamental al informaticii - set de pasi care defineste modul in care poate fi indeplinita o sarcina. Reprezentare - prin limbaje artificiale (pseudocod sau schema logica). Reprezentarea algoritmilor destinati calculatoarelor - prin programe (scrise in limbaje de programare - limbaje artificiale, riguros formalizate). Programul = ansamblu de instructiuni, executate de catre calculator: Program = Date + Algoritm. Orice echipament de calcul este o masina algoritmica. In realitate, programatorul nu scrie programul pentru calculatorul real, ci pentru un calculator abstract. In general, un calculator abstract are un set de instructiuni, un set de registri si un model de memorie. Un model abstract al unei unitati centrale (CPU, microprocesor) este prezentat in figura 1.4..
Unitatea de control Contorul programului (PC) Registru instructiune (RI) Indicatori ALU (Unitatea aritmetica si logica) Registrii de memorare Registrii de date Registrii de adrese

Registrii procesorului (asemeni locatiilor de memorie) - dispozitive in care se memoreaza numere binare de lungime fixa, specifica procesorului respectiv. Unitatea aritmetica si logica - operatii de calcul (adunare, scadere, inmultire, impartire, etc.). Unitatea de control repeta ciclul masinii: repeta extrage urmatoarea instructiune din memorie (pe baza adresei aflate in PC) decodifica instructiunea (sirul de biti) din registrul de instructiuni, RI (analizeaza codul operatiei si adresa operandului). executa instructiunea (efectuarea operatiei cerute de instructiunea aflata in RI). pina la executia instructiunii halt , de oprire

Fig. 1.4. Componentele procesorului abstract Instructiunile din program - codificate intern tot prin numere binare, care vor fi inregistrate in memorie, formate din cel putin doua parti: codul operatiei si adresa operandului. Una din primele descrieri a unui calculator programabil - masina von Neumann , formata din unitatea aritmetica si logica, unitatea de control, unitatea de intrare/iesire si unitatea de memorie. Functionarea ei - proces secvential: la un moment dat se executa o singura instructiune, iar executia unei instructiuni poate incepe numai dupa incheierea executiei instructiunii precedente. Majoritatea limbajelor de programare sunt realizate pentru calculatoare abstracte de tip von Neumann .

CAP. 1

NOTIUNI INTRODUCTIVE - Algoritmi

1.2. ALGORITMI
Algoritmul - conceptul fundamental al informaticii. Intuitiv, un exemplu de algoritm: algoritmul de interpretare a unei bucati muzicale (descris prin partitura). Exemplu: Algoritmul lui Euclid pentru determinarea celui mai mare divizor comun (cmmdc) a 2 numere intregi pozitive. Date de intrare: cele 2 numere intregi. Date de iesire: cel mai mare divizor comun al numerelor (cmmdc). 1. Se noteaza cu A si B- cea mai mare, respectiv cea mai mica, dintre datele de intrare. 2. Se Imparte A la B si se noteaza cu R restul impartirii. 3. a. Daca R diferit de 0, se atribuie lui A valoarea lui B si lui B valoarea lui R. Se revine la pasul 2. b. Daca R este 0, atunci cmmdc este B.

1.2.1. DEFINITII SI CARACTERISTICI Definitie: Algoritmul - un set ordonat de pasi executabili, descrisi fara echivoc, defininind un proces finit. Proprietatile fundamentale ale algoritmilor: q Caracterul finit; q Caracterul unic si universal; q Caracterul realizabil; q Caracterul discret; q Caracterul determinist.

1.2.2. REPREZENTAREA ALGORITMILOR Reprezentarea (descrierea) unui algoritm in vederea intelegerii acesuia de catre oameni se realizeaza prin diferite limbaje artificiale, bazate pe o multime bine definita de primitive (blocuri elementare pe care se bazeaza reprezentarea). Fiecare primitiva se caracterizeaza prin sintaxa (reprezentarea simbolica a primitivei) si semantica (semnificatia primitivei). Cele mai raspindite limbaje artificiale (destinate oamenilor) de reprezentare a algoritmilor sunt: q schema logica; q pseudocodul. 1.2.2.1. Reprezentarea algoritmilor prin scheme logice Primitivele - simboluri grafice, cu functiuni (reprezentind procese de calcul) bine precizate, unite prin arce orientate care indica ordinea de executie a actiunilor. Categoriile de simboluri utilizate in schemele logice: simboluri de inceput si sfirsit (fig. 1.5.a) care desemneaza inceputul, respectiv sfirsitul unui algoritm (program sau subprogram), simbolul paralelogram (fig. 1.5.b) - semnifica procese (operatii) de intrare/iesire, simbolul dreptunghi (fig. 1.5.c) - semnifica calcul si atribuire si simbolul romb (fig. 1.6.) - utilizat in cazul deciziilor. Cu ajutorul acestor simboluri grafice se poate reprezenta orice algoritm. Repetarea unei secvente se realizeaza prin combinarea simbolurilor de decizie si de atribuire. Structurile repetitive obtinute pot fi: cu test initial sau cu test final.

CAP. 1

NOTIUNI INTRODUCTIVE - Algoritmi

START

CITESTE a, b

a 34

STOP

AFISEAZA

a, b

a)

b) Figura 1.5. Primitive folosite in schema logica

c)

NU

Conditie indeplinita?

DA

ACTIUNE2

ACTIUNE1

Figura 1.5. Structura de decizie


q

Structura de control repetitiva, cu test initial (fig. 1.6 sau 1.7). Se evalueaza conditia de test (figura 1.6.). Daca aceasta este indeplinita, se executa ACTIUNE1. Se revine apoi si se testeaza iar conditia. Daca este indeplinita, se executa (se repeta) ACTIUNE1, s.a.m.d. Abia in momentul in care conditia nu mai este indeplinita, se executa ACTIUNE2. Astfel, cit timp conditia este indeplinita, se repeta ACTIUNE1. In cazul in care, la prima testare a conditiei, aceasta nu este indeplinita, se executa ACTIUNE2. Astfel, este posibil ca ACTIUNE1 sa nu fie executata niciodata.

contor valoare_initiala NU NU Conditie indeplinita? DA val_contor val_finala DA

ACTIUNE ACTIUNE2 ACTIUNE1 val_contor

val_contor + 1

Figura 1.6. Structura repetitiva cu test initial

Figura 1.7. Structura repetitiva cu test initial, cu numar cunoscut de pasi

In situatiile in care se stie de la inceput de cite ori se va repeta o anumita actiune, se foloseste tot o structura de control repetitiva cu test initial. Se utilizeaza un contor (numeric) pentru a tine o evidenta a numarului de executii ale actiunii. La fiecare executie a actiunii, contorul este incrementat. Se atribuie contorului valoarea initiala (figura 1.7.). Cit timp conditia (valoarea contorului este mai mica sau egala cu valoarea finala) este indeplinita, se repeta: q ACTIUNE q incrementare contor (se aduna 1 la valoarea anterioara a contorului).

CAP. 1

NOTIUNI INTRODUCTIVE - Algoritmi

Structura de control repetitiva, cu test final: Se executa mai intii ACTIUNE1. Se testeaza apoi conditia (figura 1.8.). Se repeta ACTIUNE1 cit timp conditia este indeplinita. In acest caz, corpul ciclului (ACTIUNE1) este executat cel putin o data.

ACTIUNE1

Conditie indeplinita

DA

NU ACTIUNE2

Figura 1.8. Structura repetitiva cu test final 1.2.2.2. Reprezentarea algoritmilor prin pseudocod Pseudocodul este inspirat din limbajele de programare, nefiind insa atit de formalizat ca acestea; fiind o reprezentare textuala, bazata pe un vocabular restrins, reprezinta o punte de legatura intre limbajul natural si limbajele de programare. Nu exista un standard pentru regulile lexicale. Pseudocodul utilizeaza o serie de cuvinte cheie (scrise cu majuscule subliniate) cu urmatoarele semnificatii: Sfirsit algoritm: Inceput algoritm: Citire (introducere) date: Scriere (afisare) date: Atribuire: Structura de decizie (alternativa): Structuri repetitive cu test initial:
SFIRSIT INCEPUT CITESTE lista_valori SCRIE lista_valori <DACA conditie ATUNCI actiune1 ALTFEL actiune2 CIT TIMP conditie REPETA actiune PENTRU contor=val_init LA val_fin [PAS] REPETA actiune; REPETA actiune CIT TIMP conditie REPETA actiune PINA CIND conditie

Structuri repetitive cu test final: sau:

Pe linga cuvintele cheie, in reprezentarea algoritmilor in pseudocod pot apare si propozitii nestandard, a caror detaliere va fi realizata ulterior. In cazul in care se realizeaza un algoritm modularizat, pot apare cuvintele cheie:
SUBALGORITM CHEAMA nume (lista_intrari) nume (lista_valori_efective_de_intrare)

Asa cum se observa, operatiile folosite in descrierea unui algoritm sunt: q Operatii de intrare/iesire, care permit comunicarea intre viitorul program si utilizator; q Operatii de calcul si atribuire; q Operatii de control, care exprima rationamentul uman.

CAP. 1

NOTIUNI INTRODUCTIVE - Algoritmi

Exemple: Se vor reprezenta in continuare algoritmii de rezolvare pentru citeva probleme simple (pentru primele 2 probleme se exemplifica si implementarea algoritmilor in limbajul C++). 1. Se citesc 2 valori numerice reale, care reprezinta dimensiunile (lungimea si latimea unui dreptunghi). Sa se calculeze si sa se afiseze aria dreptunghiului.
ALGORITM aflare_arie_drept INCEPUT CITESTE L,l aria <- L*l AFISEAZA aria SFIRSIT

START

CITESTE L, l

aria <- L * l AFISEAZA aria

Implementare:

STOP

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

2. Se citesc 2 valori reale. Sa 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 SFIRSIT

Sau:

ALGORITM max_2_nr INCEPUT CITESTE a, b DACA a >= b ATUNCI AFISEAZA a ALTFEL AFISEAZA b SFIRSIT

Implementare in limbajul C++:


#include <iostream.h> void main( ) { float a, b, max; cout<<"a="; cin>>a; cout<<"b="; cin>>b; if (a >= b) max = a; else max = b; cout<<"Maximul este:"<<max;} #include <iostream.h> void main( ) { float a, b; cout<<"a=";cin>>a; cout<<"b="; cin>>b; if (a >= b) cout<<"Maximul este:"<<a; else cout<<"Maximul este:"<<b;}

3. Sa se citeasca cite 2 numere intregi, pina la intilnirea perechii de numere 0, 0. Pentru fiecare pereche de numere citite, sa se afiseze maximul. Algoritm care utilizeaza structura repetitiva cu test initial:
ALGORITM max_perechi1 INCEPUT CITESTE a,b CIT TIMP(a#0sau b#0)REPETA INCEPUT DACA (a>=b) ATUNCI AFISEAZA a ALTFEL AFISEAZA b CITESTE a,b SFIRSIT SFIRSIT ALGORITM max_perechi2 INCEPUT a <- 3 CIT TIMP (a#0 sau b#0) REPETA INCEPUT CITESTE a, b DACA (a>=b) ATUNCI AFISEAZA a ALTFEL AFISEAZA b SFIRSIT SFIRSIT

CAP. 1

NOTIUNI INTRODUCTIVE - Algoritmi

Algoritm care utilizeaza structura repetitiva cu test final:


ALGORITM max_perechi3 INCEPUT REPETA INCEPUT CITESTE a,b DACA (a>=b) ATUNCI AFISEAZA ALTFEL AFISEAZA SFIRSIT CIT TIMP (a#0 sau b#0) SFIRSIT

a b

CAP. 1

NOTIUNI INTRODUCTIVE - Limbaje de programare

1.3. LIMBAJE DE PROGRAMARE


Algoritmul de rezolvare a unei probleme trebuie transcris (pentru a putea fi inteles de catre calculator) din forma conceptuala intr-un set clar de instructiuni (schema de reprezentare a algoritmilor, limbaj de programare), reprezentate intr-un mod lipsit de ambiguitate. Definitie: Limbajele de programare sunt limbaje artificiale, care permit descrierea riguros formalizata a datelor si a algoritmului, intr-un program, care sa fie inteles de catre calculator. 1.3.1. Scurt istoric Principalele etape ale evolutiei: Limbaje din generatia Intii: Limbajele masina (cod masina), in care datele si instructiunile erau exprimate sub o forma binara, specifica doar masinii pe care se executa programul. Limbaje din generatia a doua: Limbajele de asamblare, in care se folosesc mnemonice pentru instructiunile limbajului masina (de exemplu, pentru operatia de incarcare intr-un registru, nu se mai foloseste codul binar al acesteia, ci mnemonicul LD) si nume descriptive (numite adesea identificatori) pentru operanzi (nume care inlocuiesc adresele de memorie ale operanzilor). Programul scris in limbaj de asamblare este convertit, automat, in cod masina, de catre programul numit asamblor. Dezavantaje dependenta de o anumita masina si nivelul scazut al primitivelor folosite de catre programator. Limbaje din generatia a treia, sau limbajele de nivel inalt - limbaje de programare apropiate de limbajele umane naturale (cu primitive de nivel inalt), puternic formalizate. Exemple: Basic (limbaj interpretat), FORTRAN, Pascal, C, C++ (limbaje compilate), etc. In cazul limbajelor compilate, programul sursa, exprimat cu ajutorul primitivelor de nivel inalt, este compilat, translatat in limbaj masina (de catre compilator), specific calculatorului pe care se va executa. In timpul executiei, in memoria calculatorului se gaseste programul binar rezultat dupa compilare; acest program poate fi executat direct de catre procesorul calculatorului respectiv, deoarece foloseste setul de instructiuni specific acestuia. In cazul limbajelor interpretate, in timpul executiei programului, in memoria calculatorului se gaseste chiar programul sursa, impreuna cu un program binar numit interpretor. Acesta parcurge instructiunile programului sursa si le interpreteaza, adica le traduce in instructiuni binare, apartinind setului de instructiuni ale procesorului, si le transmite procesorului spre executie. 1.3.2. Limbajele C si C++ Limbajele C si C++ sunt limbaje de programare de nivel inalt. Limbajul C - aparut in 1970, creat de Dennis Ritchie, in laboratoarele AT&T Bell. Limbajul C face parte din familia de limbaje concepute pe principiile programarii structurate, la care ideea centrala este structureaza pentru a stapini o aplicatie . Proiectat initial pentru dezvoltarea sistemelor de operare si a compilatoarelor, popularitatea limbajului a crescut rapid datorita elegantei si a multiplelor posibilitati oferite programatorului (puterea si flexibilitatea unui limbaj de asamblare); ca urmare, au aparut numeroase alte implementari. De aceea, in anii 80 se impune necesitatea standardizarii acestui limbaj.

CAP. 1

NOTIUNI INTRODUCTIVE - Limbaje de programare

In perioada 1983-1990, un comitet desemnat de ANSI (American National Standards Institute) a elaborat un compilator ANSI C, care permite scrierea unor programe care pot fi portate fara modificari, pe orice sistem. Limbajul C++ - apare la inceputul anilor 80, autor - Bjarne Stroustrup. El este o varianta imbunatatita a limbajului C (un superset al limbajului C), mai riguroasa si mai puternica, completata cu constructiile necesare aplicarii principiilor programarii orientate pe obiecte (POO). Limbajul C++ pastreaza toate elementele limbajului C, beneficiind de eficienta si flexibilitatea acestuia. Incompatibilitatile intre limbajele C si C++ sunt minore, de aceea, modulele C pot fi incorporate in proiecte C++ cu un efort minim. 1.3.3. Conventii folosite In prezentarea sintaxei Orice forma sintactica generala a unei constructii dintr-un limbaj de programare poate avea urmatoarele componente: componente obligatorii si componente optionale; componente care apar in instructiune o singura data sau care se pot repeta; componente (numite simboluri terminale, sau cuvinte cheie) a caror forma este invariabila si componente (numite simboluri neterminale) care se vor inlocui la scrierea programului prin alte componente, conform unor reguli. La prezentarea sintaxei limbajelor C/C++, se vor folosi urmatoarele conventii: Simbolurile terminale sunt scrise cu caractere normale, ingrosate, si vor apare in program exact ca in forma generala; Simbolurile neterminale apar In forma generala, ca <nume_simbol> si vor fi inlocuite la scrierea programului cu alte simboluri. Simbolurile optionale apar in forma generala intre paranteze [ ]. Daca doua sau mai multe simboluri sunt separate prin caracterul |, se va alege doar unul dintre ele.

CAP. 1

NOTIUNI INTRODUCTIVE - Teoria rezolvarii problemelor

1.4. TEORIA REZOLVARII PROBLEMELOR


Cresterea complexitatii problemelor supuse rezolvarii automate (cu ajutorul calculatorului) a determinat ca activitatea de programare sa devina, de fapt, un complex de activitati organizate pe etape. Pentru fiecare etapa au fost definite metodele formale de dezvoltare. Pentru rezolvarea unei probleme trebuie parcurse urmatoarele etape: q Analiza problemei ( ntelegerea problemei si specificarea cerintelor acesteia). Se stabileste ce trebuie sa faca aplicatia, si nu cum; se stabilesc datele de intrare (identificarea mediului initial) si obiectivele (identificarea mediului final, a rezultatelor); q Proiectarea (conceperea metodei de rezolvare a problemei, printr-un algoritm); q Implementarea (codificarea algoritmului ales ntr-un limbaj de programare); q Testarea aplicatiei obtinute (verificarea corectitudinii programului); q Exploatarea si ntretinerea (mentenanta, constind n modificarea aplicatiei la cererea beneficiarului sau n urma unor deficiente constatate pe parcursul utilizarii aplicatiei). Etapele descrise anterior alcatuiesc ciclul de viata al unui produs software si constituie obiectul de studiu al disciplinei numite ingineria sistemelor de programe (software engineering). Teoreticienii ingineriei programarii considera ca n rezolvarea unei probleme se poate alege una din urmatoarele trei abordari: q Rezolvarea orientata pe algoritm (pe actiune), n care organizarea datelor este neesentiala; q Rezolvarea orientata pe date, actiunile fiind determinate doar de organizarea datelor; q Rezolvarea orientata obiect, care combina tendintele primelor doua abordari. Abordarea aleasa determina modelarea problemei de rezolvat. Dintre metodele de proiectare orientate pe algoritm amintim: metoda programarii structurate si metoda rafinarii succesive. Ambele au ca punct de plecare metoda de proiectare top-down, considerata ca fiind o metoda clasica de formalizare a procesului de dezvoltare a unui produs software. La baza metodei top-down sta descompunerea functionala a problemei P, adica gasirea unui numar de subprobleme P 1 , P 2 , ... P n , cu urmatoarele proprietati: q Fiecare subproblema P i (1 i n) poate fi rezolvata independent. Daca nu constituie o problema elementara, poate fi, la rindul ei, descompusa; q Fiecare subproblema P i este mai simpla decit problema P; q Solutia problemei P se obtine prin reuniunea solutiilor subproblemelor P i ; q Procesul de descompunere se opreste n momentul n care toate subproblemele P i obtinute sunt elementare, deci pot fi implementate; Comunicarea ntre aceste subprobleme se realizeaza prin intermediul parametrilor. Implementarea metodei top-down ntr-un limbaj de programare se face cu ajutorul modulelor de program (functii sau proceduri n limbajul Pascal, functii n limbajele C, C++).
P P1
P

P2

P3

P4

P5

Descompunerea functionala a unui program P consta n identificarea functiilor (task-urilor, sarcinilor) principale ale programului (P 1 , P 2 , P 3 ), fiecare dintre aceste functii reprezentind un subprogram (figura 1.9.). Problemele de pe acelasi nivel i sunt independente unele fata de altele.

Figura 1.9. Descompunerea functionala

CAP. 1

NOTIUNI INTRODUCTIVE - Etapele rezolvarii unei probleme cu ajutorul calculatorului

1.5. ETAPELE REZOLVARII UNEI PROBLEME CU AJUTORUL CALCULATORULUI


Sa detaliem in continuare etapa de implementare. Dupa analiza problemei si stabilirea algoritmului, acesta trebuie tradus (implementat) intr-un limbaj de programare.
q q

Srierea (editarea) programului sursa Compilarea - realizata cu ajutorul compilatorului, care translateaza codul sursa in cod obiect (cod masina), pentru ca programul sa poata fi inteles de calculator. In prima faza a compilarii este invocat preprocesorul care recunoaste si analizeaza mai intii directivele preprocesor. Verifica apoi codul sursa pentru a constata daca acesta respecta sintaxa limbajului si semanaleaza eventualele erori. Linkeditarea (editarea de legaturi) - Scopul fazei de linkeditare este acela de a obtine o forma finala a programului, in vederea executiei acestuia. Linkeditorul leaga modulele obiect, rezolva referintele catre functiile externe si rutinele din biblioteci si produce cod executabil. Executia - Lansarea in executie consta in incarcarea programului executabil in memorie si startarea executiei sale.

Cod sursa

(Preprocesor) Compilator

Cod obiect

Linkeditor

Cod executabil

Figura 1.10. Etapele necesare obtinerii fisierului executabil

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