Sunteți pe pagina 1din 7

PRELEGERE IV

PROGRAMAREA CALCULATOARELOR ŞI LIMBAJE DE PROGRAMARE

Studiul elementelor de bază din limbajul C++


I. Tipuri de programare. Structura unui program C++
Pe piaţa mondială a programării, limbajul C++ a ajuns unul dintre cele mai răspândite şi
apreciate limbaje de nivel mediu. Impunerea acestui limbaj se datorează nu numai
calităţilor şi posibilităţilor oferite de programarea în C++, care permit aplicarea adecvată
a mecanismelor de reprezentare, de prelucrare şi de control ale acesteia în construirea de
programe modulare şi structurate pentru rezolvarea problematicilor şi imperativelor
diverselor domenii de activitate umană, ci şi fabricarea pe o scară uriaşă şi la preţuri
accesibile a microcalculatoarelor şi reţelelor de calculatoare. Astfel, diferitele variante ale
acestui limbaj ce s-au succedat într-o perioadă relativ scurtă de timp, probează în plus
atenţia deosebită ce i s-a acordat de către specialiştii din industria software.
Cu limbajul C++ se pot realiza programe de gestiune a datelor, programe pentru
grafică, editoare de texte, programe pentru calcule ştiinţifice şi economice şi, chiar,
programe de sistem. În plus, acesta constituie un instrument de programare util, mai ales,
în învăţămîntul superior. Cîteva programe C++, în care gradul de complexitate variază
crescător de la primul către ultimul, sînt prezentate după introducere.
Nucleul de bază al lui C++ îl constituie limbajul C care a fost creat, în anul 1970,
în laboratoarele Bell, de către Dennis Ritchie. Prima carte de programare în limbajul C a
apărut, în 1978, sub semnătura autorilor Dennis Ritchie şi Brian Kernighan. Forma
standard ANSI (American National Standard Institute) a acestuia şi o serie de variante
standardizate s-au anunţat după 1990. Completările aduse de firma Borland formei Turbo
C şi versiunilor 1.0 şi 2.0 ale acesteia (un grup de funcţii video pentru modurile text şi
grafic, posibilitatea organizării memoriei în funcţie de cerinţele aplicaţiei, un compilator
rapid, un editor profesional de texte, un depanator, un ansamblor integrat, etc.) au permis
folosirea lor pe calculatoare personale compatibile IBM PC/XT/AT şi realizarea unei
programării structurate şi modulare.
Prima extensie a limbajului C s-a notat cu C+. Păstrînd toate elementele
limbajului C, această primă extensie urmăreşte realizarea unei programării rapide şi
eficientă.
După 1980, aplicînd principiile programării orientate pe obiect (POO) formei
ANSI a limbajului C, Bjorne Stroustrup generează şi standardizează limbajul C++. Cu
începere din 1988, la fel ca în cazul limbajului C, firma Borland din SUA pregăteşte
forma Turbo C++ pentru calculatoare personale compatibile IBM PC/XT/AT. Ultimele
versiuni ale lui Turbo C++ apar după 1990 şi permit o compatibilitate în sus alături de o
serie de înlesniri, cum ar fi: lucrul cu ferestre şi meniuri, un sistem de help adaptat la
context, lucrul cu mouse-ul şi foarte multe programe utilitare.

II. Structura unui program C++


Structura generală a unui program în limbajul C++ cuprinde un număr arbitrar de module
program, care se prezintă sub forma unei construcţii arborescente cu frunzele orientate în
jos şi descrie desfacerea în subprobleme a problemei de soluţionat precum şi legăturile
logice existente între acestea. Modulul care constituie rădăcina are caracterul de modul

1
principal (main), pentru care calculatorul generează un cod special ce va constitui pentru
sistemul de operare codul de recunoaştere al programului, la faza de lansare în execuţie a
programului. Fiecare modul de program la rîndul său este format din funcţiile care
concură la rezolvarea unei subprobleme.
Intern, aceste funcţii formează fişiere de program. Cu alte cuvinte, programul C++ este
ansamblul fişierelor de program care grupează toate funcţiile necesare rezolvării unei
probleme, constituind ceea ce se numeşte un proiect. Fişierele de program pot fi
compilate şi testate independent, chiar de programatori diferiţi, şi apoi grupate într-un
proiect, utilizînd opţiunile comenzii Project din menu-ul Turbo C++.
Deoarece funcţia rămîne elementul de bază în construcţia unui program şi, în plus,
prezentarea ei completă se face abia în capitolul 4, acum, se impun cîteva precizări, strict
necesare în înţelegerea şi urmărirea programelor specificate pe parcursul lucrării, cu
privire la sintaxa, modul de definire şi prototipul (modul de declarare) ale acesteia.
Funcţia este modalitatea obişnuită prin care programatorul îşi stabileşte un set
generalizat de instrucţiuni, referitor la rezolvarea unei acţiuni, în care prezenţa
variabilelor specificate prin argumente nu este obligatorie. Deoarece prin intermediul
argumentelor (atunci cînd există), funcţia poate efectua prelucrările componente cu
diverse valori, returnînd rezultate de un tip precizat, rezultă că ea poate fi activată în
acelaşi modul de program ori de cîte ori contextul de rezolvare o impune.
Funcţiile din acelaşi modul de program sau din module de program diferite se pot apela
reciproc. Un apel recursiv se generează atunci cînd o funcţie se apelează pe ea însăşi de
un numar finit de ori.
Două elemente definitorii intervin în structura unei funcţii:
antetul sau linia de definiţie a funcţiei;
corpul funcţiei.
Antetul cuprinde informaţii utilizate la apelarea funcţiei din diferite puncte ale
programului, şi anume: tipul rezultatului, numele funcţiei şi lista parametrilor formali.
Pentru fiecare parametru se precizează tipul şi numele simbolic de recunoaştere.
Corpul funcţiei este format din directive preprocesor, declaraţii de tip şi o listă de
instrucţiuni, care codifică prelucrările ce urmează să le facă funcţia în diferite activări
concrete.
Definiţia funcţiei poate interveni sau nu (de exemplu, funcţia standard) în programul
sursă, alături de diverse apeluri ale acesteia. În general, definiţia unei funcţii se plasează
după modulul main(). De aceea, pentru verificarea corectitudinii apelului unei funcţii,
compilatorului i se furnizează informaţii cu privire la tipul rezultatului, la numărul şi
tipurile parametrilor, la eventuale conversii de tip în lista parametrilor, chiar la începutul
programului prin prototipul funcţiei.
Formatul unui prototip de funcţie este, de fapt, un şablon simplificat al antetului funcţiei
respective. Acesta cuprinde tipul rezultatului, numele funcţiei şi lista cu declaraţiile
parametrilor formali. Numele de recunoaştere ale parametrilor formali sînt opţionale.
Pe lîngă posibilitatea de definire a funcţiilor de tip utilizator, biblioteca limbajului pune
la dispoziţia programatorului un număr ridicat de funcţii standard (predefinite) gata
compilate. La lista funcţiilor matematice uzuale, a funcţiilor destinate tratării şirurilor, a
valorilor ordinale sau a fişierelor se adaugă cele care oferă posibilităţi de utilizare mai
simplă, în diferite operaţii de intrare/ieşire, a dispozitivelor calculatorului (cum ar fi:
ecranul, imprimanta, etc.) şi ale căror coduri sînt înglobate în aşa-numitele directive.

2
Sintaxa unei directive începe cu simbolul # şi menţionarea ei la începutul unui program
permite procesorului includerea, înainte de trecerea programului prin faza de compilare, a
codurilor funcţiilor standard apelate.
O funcţie poate fi apelată de mai multe ori în diverse situaţii concrete. Apelul unei funcţii
trebuie să fie în concordanţă cu modul de definire al funcţiei şi cuprinde numele funcţiei
urmat între paranteze simple de lista parametrilor actuali. Orice neconcordanţă de număr,
de tip, de dimensiune sau de poziţie între listele de parametri formali şi actuali este
semnalată ca eroare de sintaxă.
În cazul standard, programatorul nu trebuie să cunoască structura propiu-zisă a funcţiilor,
ci doar sintaxa apelurilor acestora.
Opţional, diverse declaraţii de variabile şi definiţii de tipuri pot fi organizate în
aşa-numitul modul de date comune (globale). Pe lîngă modulul de date globale, la care
are acces orice funcţie din componenţa programului, fiecare modul de program poate să
conţină declaraţii de variabile şi definiţii de tipuri specifice utilizabile numai în acel
modul. Schematic, structura unui program C++ se poate reprezenta în modul următor
(extensia fişierului program în formatul sursă este .cpp, de exemplu nimic.cpp):
Program_cpp:
directive procesor
prototipuri de funcţii
declaraţii globale
modulul principal (main)
funcţii
Conştientizarea procesului de fixare a numărului, a ordinii şi a structurii funcţiilor
componente unui modul de program implică un grad ridicat de dificultate şi nu este unic,
acesta depinzînd de complexitatea problemei de rezolvat, de metoda matematică utilizată
în aflarea soluţiei, de experienţa utilizatorului şi nu în ultimul rînd de configuraţia
hardware a sistemului de prelucrare automată a datelor. Nu sînt tipare standardizate
pentru găsirea unui răspuns corect, deşi în matematică pentru partea de demonstrare
automată a teoremelor sînt încercări reuşite de formalizare a acestui proces cu ajutorul
computerului. Pentru începători, şi nu numai, se recomandă întocmirea unei scheme
logice sau a unei reprezentări în limbajul pseudocod care, după cum vom vedea în primul
capitol, constituie un ghid logic în configurarea corectă a acestui proces.
In concluzie, după faza de compilare a modulelor din programul sursă, generată prin
activarea comenzii Compile, rezultă produsele (codurile) corespunzătoare obiect sau
binar translatabile (BT). În faza de execuţie, activată prin comanda Run, acestea
împreună cu codurile funcţiilor standard din bibliotecile de tip C++ sau utilizator trec,
mai întîi, prin faza de editare a legăturilor, pentru obţinerea produsului executabil sau a
produsului imagine memorie translatabilă (IMT), apoi urmează execuţia propiu-zisă a
fişierului executabil cu date de test.

III. Cîteva exemple de programe C++


Programele C++ se scriu cu litere mici. Numerotarea liniilor din structura programelor
prezentate mai jos este un subterfugiu prin care se speră o urmărire uşoară şi o înţelegere
rapidă a textului acestora din partea cititorului, neintervenind în formatul general al
instrucţiunilor.

3
Aşa cum s-a precizat deja, la sfîrşitul fiecărui program într-un chenar se prezintă
conţinutul ecranului utilizator în urma lansării în execuţie a programului cu datele de test
introduse de programator, adică mesajele şi rezultatele corespunzătoare furnizate de către
computer.
Primul program nu rezolvă nimic, al doilea tipăreşte pe ecranul monitorului
cuvîntul NIMIC, iar ultimele calculează media aritmetică a n valori reale prin intermediul
instrucţiunilor for, while şi do - while.
Observaţie. Comentariul din primele linii anunţă scopul programului respectiv şi
este delimitat de /* şi */. Indiferent de situarea lui în componenţa programului acesta este
ignorat de calculator începînd cu faza de compilare. Se recomandă, aşa cum se observă în
ultimele trei programe, alinierea frazelor într-un text clar şi uşor de urmărit pentru ca
scrierea programului să permită totodată şi întocmirea documentaţiei acestuia. Spre
deosebire de limbajul C, în C++ pe lîngă comentarii imbricate solicitate explicit prin
meniul de opţiuni, se pot utiliza comentarii sfîrşit de linie //. Textul care urmează după //
pînă la sfîrşitul liniei se consideră un text comentariu. Comentariu sfîrşit de linie poate să
apară şi printre liniile de comentariu delimitate prin /* şi */.
a. /* Programul nu rezolva nimic */
void main(void)
{
; //Instructiunea vida
}

Modulul principal al programului (main) se declară în linia numerotată cu 1, iar liniile 2 -


4 descriu blocul determinat de instrucţiunea vidă. Acoladele { } sînt separatorii care
delimitează o construcţie sintactică de tipul bloc sau instrucţiune compusă. Vom vedea
mai tîrziu că acoladele intervin în structura instrucţiunilor atunci cînd, practic, este nevoie
de mai multe instrucţiuni în locul în care sintaxa lor prevede doar o instrucţiune.
b. /* Programul scrie cuvintul NIMIC */
#include <stdio.h>
void main(void)
{
printf(“\n\n NIMIC \n\n”); //Se scie vocabula NIMIC
}
-
NIMIC
-
Acum, vom lămuri numai liniile 1 şi 4, care, în ordine, precizează directiva standard de
introducere/vizualizare date (stdio.h) şi respectiv funcţia predefinită printf() de scriere,
pe dispozitivul standard de ieşire al calculatorului (display-ul), a textelor şi datelor în
forma cerută de programator. Pe rîndul marcat de cursor (liniuţa de inserare), din prima
coloană se tipăreşte cuvîntul NIMIC, lăsîndu-se un rînd liber atît înaintea rîndului scris
cît şi după acesta.
c. /* Programul calculeaza media aritmetica a
n valori reale introduse de la tastatura
calculatorului cu ajutorul lui for */
#include <stdio.h>

4
void main(void)
{
int i, nr_elem;
float x;
double suma = 0, medie_a;
prinf(“\n Introduceti nr. val. care intra in medie :”);
scanf(“%d”, &nr_elem);
for( i = 1 ; i <= nr_elem ; i++ )
{
printf(“\n Introduceti o valoare reala oarecare :”);
scanf( “%f”, &x);
suma += x;
}
medie_a = suma/nr_elem; //Formula de calcul a mediei
printf(“\n Media aritmetica este = %f ”, medie_a,”\n”);
}
Introduceti nr. val. care intra in medie : 3
Introduceti o valoare reala oarecare : 4.
Introduceti o valoare reala oarecare : 5.
Introduceti o valoare reala oarecare : 6.
Media aritmetica este = 5.000000
-
În liniile 4-6 se declară următoarele tipuri de variabile: i şi nr_elem întregi, x reală în
simplă precizie, iar suma şi medie_a reale în dublă precizie. Variabila suma se
iniţializează cu zero.
Tipărirea textelor din liniile 7, 11 şi 16 este precedată de poziţionarea cursorului la
început de rînd (\n). În general, înţelesul acestor texte este un indiciu de cum ar trebui să
acţioneze operatorul pe perioada execuţiei programului.
Liniile 8 şi 12 descriu directiva de introducere a datelor cunoscute (nr_elem şi x) de la
claviatura calculatorului. Argumentul “%d” este un descriptor de valoare întreagă, iar
“%f” unul de valoare reală.
Instrucţiunea for permite execuţia repetată a grupului de operaţii din intervalul 11-13 cu
valori diferite pentru variabilile cu care se lucrează. Astfel, operaţiile de scriere a textului
Introduceţi o valoare reală , de citire a valorii variabilei x şi de sumare a lui x la variabila
suma se produc de nr_elem ori. Evidenţa contorizării exacte a numărului de repetării este
ţinută prin variabila i, care primeşte valori în intrvalul închis [1, nr_elem] cu
pasul de variaţie 1. Expresia i++ este echivalentă cu ++i sau cu i = i+1;.
Linia 15 descrie o instrucţiune de atribuire prin care se aplică formula de calcul a mediei
aritmetice.
d. /* Programul calculeaza media aritmetica a
n valori reale introduse de la tastatura
calculatorului cu ajutorul lui while */
#include <stdio.h>
#include <conio.h>
void main(void)
{

5
int i = 1, nr_elem;
float x;
double suma = 0, medie_a;
clrscr();
printf(“ \n Introduceti numarul valorilor care\ intra in medie :”);
scanf(“%d”, &nr_elem);
while(i <= nr_elem)
{
print(“\n Introduceti o valoare reala \
oarecare :”);
scanf(“%f”, &x);
suma += x;
i++;
}
medie_a = suma/nr_elem;
printf(“\n Media aritmetica este = %f ”, medie_a,”\n”);
getch();
}
Introduceti nr. val. care intra in medie : 2
Introduceti o valoare reala oarecare : 14.
Introduceti o valoare reala oarecare : 6.
Media aritmetica este = 10.000000

Din directiva conio.h se utilizează, în linia 8, funcţia de vidare a ecranului, clrscr(), şi, în
linia 20, funcţia de citire fără ecou (de la tastatura monitorului) a unui caracter, getch().
Includerea acesteia în program se face prin linia 2. Iniţializarea contorului i s-a realizat în
linia 5, simultan cu declararea acestuia de tip întreg. Execuţia repetată a grupului de linii
13 – 16 se simbolizează cu instrucţiunea while, care se produce atîta timp cît se verifică
testul i<=nr_elem. Întoarcerea la ecranul editorului se face după apăsarea unei taste
oarecare de pe claviatura microcalculatorului, adică după satisfacerea funcţiei getch().
e. /* Programul calculeaza media aritmetica a
n valori reale introduse de la tastatura
calculatorului cu ajutorul lui do-while */
#include <stdio.h>
#include <conio.h>
void main(void)
{
int i = 1,nr_elem;
float x;
double suma = 0, medie_a;
clrscr();
printf(“\n Introduceti numarul valorilor care\ intra in medie :”);
scanf(“%d”, &nr_elem);
do
{
print(“\n Introduceti o valoare reala\

6
oarecare :”);
scanf(“%f”, &x);
suma += x;
i++;
}
while(i <= nr_elem);
medie_a = suma / nr_elem;
printf(“\n Media aritmetica este = %f ”, medie_a);
getch();
}
Introduceti nr. val. care intra in medie : 4
Introduceti o valoare reala oarecare : 2.
Introduceti o valoare reala oarecare : 5.
Introduceti o valoare reala oarecare : 6.
Introduceti o valoare reala oarecare : 11.
Media aritmetica este = 6.000000
Aşa cum se anunţă în comentariul de la începutul programului, ciclarea grupului de linii
33 – 38 se realizează cu instrucţiunea do - while din liniile 32 şi 39.

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