Sunteți pe pagina 1din 7

REFERAT DE LABORATOR Nr.

REFERAT DE LABORATOR NR. 1

TEMA: Familiarizarea cu mediul CodeBlocks. Primul program.

1. Scrieţi programul următor, parcurgeţi fiecare etapă necesară obţinerii fişierului executabil
(editarea fişierului sursă şi salvarea acestuia, compilarea, linkeditarea şi lansarea în
execuţie) şi urmăriţi rezultatele obţinute în urma execuţiei.

Primul lucru pe care îl avem de făcut după ce deschidem mediul CodeBlocks, este crearea unui
fișier sursă. Aceasta se realizeaza din meniul File, submeniul New, opţiunea Empty File. După
deschiderea fișierului sursă, acesta trebuie să fie salvat și să primească un nume. Salvarea și
denumirea fișierului sursă se face accesând meniul File, submeniul Save File As. În fereastra
care ne apare, selectam directorul (locul) unde dorim să salvăm fișierul, și îl denumim cu un
nume ales de noi, cu extensia .cpp (de exemplu program.cpp). Este necesar să specificăm
extensia, deoarece, implicit, fișierele C/C++ vor primi extensia .c, specifică programelor scrise
în limbaj C, iar noi utilizăm instrucţiuni ale limbajului C++ în program. În continuare, urmează
să scriem programul (instrucţiunile care îl compun) în acest fișier sursă.

Să considerăm un exemplu foarte simplu: programul afişează pe ecran un mesaj (mesajul


Primul meu program). Informaţia de prelucrat (de intrare) este însăşi mesajul (o constantă şir
de caractere), iar prelucrarea ei constă în afişarea pe monitor.

Exemplu:

#include <iostream>

using namespace std;

int main()
{
// comentariu pe o singura linie
/* comentariu pe
mai multe linii */
cout<<"Primul meu program\n";
}

După scrierea programului, acesta urmează a fi compilat pentru obţinera fișierului obiect (cu
extensia .o). În acest scop, din meniul Build selectăm opţiunea Compile current file. Dacă nu
avem erori la compilare, urmează faza de linkeditare, în urma căreia obţinem fișierul
executabil (extensia .exe). Aceasta se realizează din meniul Build, selectând opţiunea Build. În
continuare, dacă nu avem erori nici în această fază, urmează să executăm programul creat
selectând opţiunea Run din meniul Build. După fiecare modificare pe care o aducem
programului, acesta trebuie recompilat și creat din nou fișierul executabil pentru ca acesta să
conţină ultimele modificări. În caz contrar, se va executa vechea versiune a programului
nostru, ce-a dinaintea modificărilor. Acești 3 pași prezentaţi (compilare, editare de legături,

1
REFERAT DE LABORATOR Nr.1

execuţie) se pot face separat, după cum am prezentat mai sus, sau grupat, apelând opţiunea
Build and run din meniul Build, sau, și mai simplu, apăsând tasta F9.

În continuare, urmează explicarea în detaliu a programului anterior.

Prima linie este o directivă preprocesor (indicată de simbolul #) care determină includerea
în fişierul sursă a fişierului header cu numele iostream. Acest header permite realizarea
afişării pe monitor.

Programul conţine doar o funcţie, funcţia principală, main, al cărei antet (linia 5) indică:
- tipul valorii returnate de funcţie (int, funcţia returnează o valoare intreagă - un cod
de eroare in cazul funcţiei main);
- numele funcţiei (main);
- lista declaraţiilor argumentelor primite de funcţie, încadrată de cele 2 paranteze
rotunde.

Funcţiile comunică între ele prin argumente. Aceste argumente reprezintă datele de intrare
ale funcţiei. În cazul nostru, nu avem nici un argument în acea listă, deci antetul funcţiei putea
apare şi sub forma:
int main(void)

Ceea ce urmează după simbolul //, până la sfârşitul liniei, este un comentariu, care va fi
ignorat de către compilator. Comentariul poate conţine un text explicativ, informaţii
lămuritoare la anumite aspecte ale problemei sau observaţii. Daca vrem să folosim un
comentariu care cuprinde mai multe linii, vom delimita începutul acestuia prin simbolulurile
/*, iar sfârşitul - prin */ (vezi liniile 8, 9). Introducerea comentariilor în programele sursă
uşurează înţelegerea acestora. În general, se recomandă introducerea unor comentarii după
antetul unei funcţii, pentru a preciza prelucrările efectuate în funcţie, anumite limite impuse
datelor de intrare, etc.

Începutul şi sfârşitul corpului funcţiei main sunt indicate de cele doua acoalade { (linia 6),
respectiv } (linia 11).

Corpul funcţiei este format două instrucţiuni, care implementează o operaţie de scriere.
Cuvântul cout este un cuvânt predefinit al limbajului C++ - console output - care desemnează
dispozitivul logic de ieşire; simbolul << este operatorul de transfer al informaţiei. Folosite
astfel, se deschide un canal de comunicaţie a datelor către dispozitivul de ieşire (în cazul
acesta, monitorul). După operator se specifică informaţiile care vor fi afişate (în acest
exemplu, un şir de caractere constant). Faptul că este un şir constant de caractere este indicat
de ghilimelele care îl încadrează. Pe ecran va fi afişat fiecare caracter din acest şir, cu exceptia
grupului \n. Deşi grupul este format din două caractere, acesta va fi interpretat ca un singur
caracter - numit caracter escape - care determină poziţionarea cursorului la începutul
următoarei linii a ecranului. O secvenţă escape (cum este \n) furnizează un mecanism general
şi extensibil pentru reprezentarea caracterelor invizibile sau greu de obţinut. La sfârşitul
instructiunii apare ; .

2
REFERAT DE LABORATOR Nr.1

Linia 3, mai exact conceptul de spaţiu al numelor (namespace), va fi explicat în cele ce


urmează. Un spaţiu al numelor reprezintă un context pentru care un simbol (un identificator)
are o anumită semnificaţie.

Cele mai simple limbaje de programare au un singur spaţiu al numelor, iar în acel context sunt
utilizaţi toţi identificatorii (nume ale variabilelor, ale funcţiilor, etc)

Alte limbaje oferă posibilitatea de a lucra cu mai multe spaţii ale numelor, independente.
Avantajele acestui mod de lucru este acela că programatorul poate folosi în cadrul unei
aplicaţii (complexe) biblioteci diverse, dezvoltate de către programatori diferiţi, fără a exista
pericolul ”confuziilor” atunci când programatorii folosesc aceiași identificatori pentru funcţii
sau date diferite. Mecanismul care previne ”coliziunile de nume” a fost introdus în 1995 în
standardul C++ cu ajutorul cuvântului cheie namespace. Fiecare namespace definește un
domeniu în care sunt plasaţi identificatorii. Pentru a folosi un membru al unui namespace,
acesta trebuie să fie precedat de numele namespace-ului.

Biblioteca standard ANSI C++ (care oferă facilităţi precum cout, cin) este ”împachetată” în
spaţiul numelor numit std (spaţiu care nu este consultat implicit). Pentru a accesa
identificatorii din acest namespace, putem proceda în diverse moduri:
1. Specificând explicit, de fiecare dată, apartenenţa identificatorului la numele spaţiului
(std::cout, std::cin)
2. Folosind using namespace std în interiorul fiecărei funcţii în care se utilizeaza
identificatori din biblioteca standard. O altă variantă este folosirea în interiorul unei
astfel de funcţii a directivei using std::cout.
3. Folosind using namespace std la începutul fiecărui fișier sursă, soluţie
satisfăcătoare în cazul aplicaţiilor simple (cazul nostru), dar nesatisfăcătoare în cazul
aplicaţiilor complexe. Aplicând această soluţie, putem omite extensia .h pentru
headerele incluse.

Namespace-ul std este recunoscut de orice compilator ANSI C++. În plus, programatorul
își poate defini propriile spaţii de nume.

În exemplul urmator, vom afisa textul pe ecran pe mai multe randuri:

Exemplu 2:

#include <iostream>
using namespace std;
int main()
{
cout<<"Primul meu program\n";
cout<<"pe doua randuri";
}

3
REFERAT DE LABORATOR Nr.1

2. Se citesc 2 valori numerice intregi. Sa se calculeze şi să se afişeze suma, produsul si


diferenţa lor:

#include <iostream>
//includem fisierul header iostream, ce permite efectuarea operatiilor
//de intrare-iesire (afisari pe ecran si citiri de date de la tastatura)

using namespace std;

int main()
//functia principala a programului

{
int a,b,c;
//declaram 3 variabile de tip intreg (int), a, b si c ce vor fi utilizate
//pentru stocarea celor doua numere pe care dorim sa le adunam (a, b),
//precum si pentru stocarea rezultatului adunarii (c)

cout<<"Introduceti primul numar:";


//afisam pe ecram constanta sir de caractere (textul) dintre ghilimele

cin>>a;
//citim de la tastatura o valore ce va fi atribuita variabilei a

cout<<"Introduceti al doilea numar:";


//afisam pe ecram constanta sir de caractere (textul) dintre ghilimele

cin>>b;
//citim de la tastatura o valore ce va fi atribuita variabilei b

c=a+b;
//variabila c va lua valoarea rezultata in urma evaluarii expresiei din
//partea dreapta a semnului = (a+b, adica suma dintre valorile
//variabilelor a si b)

cout<<"Suma numerelor "<<a<<" si "<<b<<" este: "<<c;


//vom afisa pe ecran constanta sir de caractere (textul) dintre ghilimele
//(Suma numerelor), apoi, cu ajutorul operatorului << combinam aceasta
//afisare cu afisarea valorii variabilei a (a fara ghilimele), apoi
//afisam constanta sir de caractere ( si ), valoarea variabilei b (b fara
//ghilimele), textul ( este: ), iar apoi valoarea variabilei c
}

4
REFERAT DE LABORATOR Nr.1

3. Se citesc 2 valori numerice reale, care reprezintă dimensiunile (lungimea şi lăţimea unui
dreptunghi). Să se calculeze şi să se afişeze aria dreptunghiului.

START

CITESTE L, l ALGORITM
aflare_arie_drept
INCEPUT
CITESTE L,l
aria <- L * l aria <- L*l
AFISEAZA aria
AFISEAZA aria SFIRSIT

STOP

Implementare:
#include <iostream>
using namespace std;
int main()
{
double L, l;
//declaram doua variabile (L si l) de tip real (double) ce vor fi
//utilizate la stocarea valorilor lungimii si latimii dreptunghiului

cout<<"Lungime=";
//afisam pe ecram constanta sir de caractere (textul) dintre ghilimele
//(Lungime=)

cin>>L;
//citim de la tastatura o valore ce va fi atribuita variabilei L

cout<<"Latime=";
//afisam pe ecram constanta sir de caractere (textul) dintre ghilimele
//(Latime=)

cin>>l;
//citim de la tastatura o valore ce va fi atribuita variabilei l

double aria = L * l;
//declaram o variabila (aria) de tip real, pe care o si initializam cu
//rezultatul evaluarii expresiei din partea dreapta a semnului =
//(rezultatul inmultirii dintre L si l)

cout << "Aria="<< aria;


//afisam constanta sir de caractere (textul) dintre ghilimele (Aria=),
//precum si valoarea variabilei aria (aria fara ghilimele)
}

5
REFERAT DE LABORATOR Nr.1

4. Se citesc 2 valori reale. Să se afişeze 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

Implementare în limbajul C++:

#include <iostream>
using namespace std;
int main()
{
float a, b, max;
//declaram 3 variabile de tip real (float), a , b si max. a si b vor fi
//utilizate pentru stocarea celor 2 numere, in timp ce max va fi utilizat
//pentru memorarea maximului celor doua numere.

cout<<"a=";
//afisam pe ecram constanta sir de caractere (textul) dintre ghilimele
//(a=)

cin>>a;
//citim de la tastatura o valore ce va fi atribuita variabilei a

cout<<"b=";
//afisam pe ecram constanta sir de caractere (textul) dintre ghilimele
//(b=)

cin>>b;
//citim de la tastatura o valore ce va fi atribuita variabilei b

if (a >= b)
//instructiune conditionala; daca expresia dintre paranteze (a>=b) este
//adevarata, atunci se va executa instructiunea de dupa if (max=a).
//Daca conditia este falsa, se va executa instructiunea de dupa else
//(max=b). Adica, daca a>=b, atunci max va lua valoarea variabilei a.
//Altfel, va lua valoarea variabilei b, ceea ce inseamna ca max va memora
//valoarea ce-a mai mare dintre a si b.
max = a;
else max = b;

cout<<"Maximul este:"<<max;
//afisam constanta sir de caractere (textul) dintre ghilimele (Maximul
//este: ), precum si valoarea variabilei max (max fara ghilimele)
}

6
REFERAT DE LABORATOR Nr.1

5. Proiectaţi un algoritm care să rezolve o ecuaţie de gradul I (de forma ax + b = 0), unde a, b
sunt numere reale. Discuţie după coeficienţi. Implementaţi algoritmul în limbajul C.

6. Reprezentaţi prin sheme logice algoritmii de la punctele 4 şi 5

Evaluare