Documente Academic
Documente Profesional
Documente Cultură
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.
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
}
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.