Documente Academic
Documente Profesional
Documente Cultură
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.).
SOFTWARE DE APLICATIE
SOFTWARE
CAP. 1
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
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
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
START
CITESTE a, b
a 34
STOP
AFISEAZA
a, b
a)
c)
NU
Conditie indeplinita?
DA
ACTIUNE2
ACTIUNE1
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.
val_contor + 1
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
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
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
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
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; }
Sau:
ALGORITM max_2_nr INCEPUT CITESTE a, b DACA a >= b ATUNCI AFISEAZA a ALTFEL AFISEAZA b SFIRSIT
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
a b
CAP. 1
CAP. 1
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
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.
CAP. 1
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