Sunteți pe pagina 1din 6

Laborator 1 PC: Subprograme, particularități de utilizare.

Crearea și utilizarea
UNIT-urilor în C++
Obiectivul laboratorului: Organizarea aplicațiilor de consolă la nivel de module

Beneficiul: Programarea modulară presupune gruparea procedurilor cu funcționalități asemănătoare în același fișier,
numit unitate de compilare.

✓ Un program mare poate fi ușor de scris, de înțeles și de modificat dacă este modular;
✓ Un program mare poate fi reutilizat în mai multe aplicații, ceea ce reduce efortul de programare al unei
noi aplicații;
✓ Un program mare poate fi scris și verificat separat de restul aplicației, ceea ce reduce timpul de punere la
punct a unei aplicații mari;
✓ Întreținerea unei aplicații este simplificată, deoarece modificările se fac numai în anumite subprograme
și nu afectează alte subprograme( care nici nu mai trebuie compilate).
Cuprins
Laboratorul trata aspecte referitoare la:
- Modificatorul const
- Supraîncărcarea funcțiilor
- Aplicații modulare C/C++;
- Directiva include;
- Exemplu de program;
- Pointeri către funcții;
- Exemplu de utilizare;
- Partea practică a laboratorului
Modificatorul const
Utilizarea modificatorului const, în procesul de elaborare a problemelor bazate pe funcții poate aduce mai multe
avantaje:
1. Parametrii de tip valoare precedați de modificatorul const nu vor fi modificați în cadrul funcției;
2. De regulă, pentru parametrii formali se creează a câte o copie în stivă, însă pentru parametri formali de
tip constantă această copie nu se creează, prin urmare programul devine mai rapid.
Exemplu

Supraîncărcarea funcțiilor

Funcțiile care au unul și același nume diferă între ele prin tipurile parametrilor și/sau numărul de parametri se
numesc funcții supraîncărcate (engl. overload)
Procesul de creare a funcțiilor respective se numește supraîncărcare (engl. overloading)
1
Exemplu:

Aplicații modulare C/C++

Codul este împărțit în mai multe fișiere:


• header(.h) – conțin declarații (interfața)
• de implementare(.c/.cpp) – conțin definiția(implementarea) funcțiilor

✓ În cadrul modulelor funcțiile se grupează astfel încât fiecare dintre modul să ofere o funcționalitate bine
definită.
✓ Când un fișier .h se modifică este nevoie de recompilare a tuturor unit-urilor care se referă (direct sau
indirect) la el.
✓ Fișierele .c/.cpp se pot compila separat, modificarea implementării nu afectează modulele care folosesc (ele
se referă doar definițiile de header)
✓ Detaliile de implementare sunt ascunse în fișierul .h

Directiva include

Pentru a avea acces la funcțiile declarate într-un modul (biblioteca de funcții) se folosește directiva #include
Preprocesorul include fișierul referit în fișierul sursă în locul unde apare directiva.

Există două variante pentru a referi un modul: < > sau “ “


#include”fișierul_meu.h” – caută fișierul header relativ la directorul curent al aplicației
#include < iostream.h> – caută fișierul header în bibliotecile system (standard compiler include paths)

2
Exemplu de program: Elaborarea unui program pentru gestiunea datelor despre tipul de date student

Fișierul student.h

3
Pointeri către funcții
Pointerii în limbajele c/c++ sunt foarte populari
Așa cum rezultatul returnat de către o funcție este scris în memorie, prin intermediul pointerului către funcție,
poate fi apelat acel rezultat. Prin urmare, când se vorbește de pointerii către funcții se are în vedere variabile
pointer care conțin adresa de început a codului executabil al unei funcții.

Utilizarea pointerilor către funcții se manifestă prin:


1. Transferul ca parametru al adresei unei funcții:
2. Apelul funcției cu ajutorul pointerului.

Forma de utilizare a pointerilor către funcții este următoarea :


tip_val_intoarse (*nume_pointer)(lista_param_formali);
nume_pointer – este un pointer de tipul ”funcție cu rezultatul tipul_valoarii_intoarse”.
În declarația anterioară trebuie remarcat rolul parantezelor, pentru a distinge între declarația unei funcții care
întoarce un pointer și declarația unui pointer de funcție:
tip_val_intoarse *nume_pointer(lista_param_formali);
tip_val_intoarse (*nume_pointer)(lista_param_formali);

Exemple:
Fie dat prototipul funcției f cu doi parametri: int d(double a, int b);
atunci instrucțiunea : int (pointer *)(double, int);
permite declararea unui pointer către funcția f, prin intermediul numelui pointer
int i,j;
double d;
pointer=f;
atribui adresa codului executabil al funcției f pointerului pointer:
j=*pointer(d,i);

4
Apelul funcției f, folosind pointer

Exemplu de utilizare
Pointerii catre functii pot fi utilizati si în calitate de parametric formali. Un astfel de exemplu este si urmatorul
program:
#include <iostream.h>
double f1(double x){return 2*x*x;}
double f2(double a, double(*f)(double)){
return (f(a)+f(a*a))/2;
}
main(){
double x,d;
cout<<"X=:";cin>>x;
d=f2(x,f1);
cout<<"Valoarea functiei: "<<d;
}

Partea practică a laboratorului:

Probleme propuse spre rezolvare independentă


I. Cerințe generale
a) Fiecare elev își va alege tema în mod independent și o va consulta cu profesorul.
b) În baza temei alese va fi creat un tip de date cu cel puțin cinci câmpuri dintre care în mod obligatoriu: unul
dintre ele sa fie de tip șir de caractere; unul dintre ele sa fie de tip număr întreg și unul de tip număr real.
c) Pentru tipul dat într-un fișier textual se vor înscrie datele despre cel puțin 10 înregistrări pentru tipul creat.
d) Datele despre tipul creat vor fi prelucrate prin intermediul unui program în limbajul C++.

II. Cerințe față de program


Programul va conține un meniu principal, cu următoarele opțiuni:
a) Afișarea informației în forma tabelara
b) Adăugarea unei informații.
c) Excluderea unei informații
d) Sortarea datelor după anumite câmpuri
e) Căutarea unei informații
f) Operații de filtrare a datelor
g) Salvarea datelor într-un fișier, numele căruia se citește de la tastatura.
h) Meniurile D, E, F vor conține sub meniuri cu cel puțin 3 opțiuni fiecare

III. Cerințe față de organizarea programului


a) Programul va structurat în module (vezi Exemplu de program)
b) În cadrul programului se vor utiliza funcții supraîncărcate (vezi Supraîncărcarea funcțiilor, Fișierul student.h)
c) În cadrul funcțiilor va fi utilizat modificatorul const (vezi Modificatorul const, Fișierul student.h)

Exemple de tipuri de date:


- Numele tipului Film
Câmpuri de tip caracter: Denumire, Regizor
Câmpuri de tip număr întreg: anul producerii, durata (în minute)
Câmpuri de tip număr real: costul.
- Numele tipului pacient
Câmpuri de tip caracter: nume, prenume
Câmpuri de tip număr întreg: anul nașterii
Câmpuri de tip data calendaristică: data internării (zi, lună, an).
5
- Numele tipului Calculator
Câmpuri de tip caracter: Marca
Câmpuri de tip număr întreg: capacitate Hard, capacitate memorie operativă
Câmpuri de tip număr real: capacitate procesor, cost.
- Numele tipului Depozit_produse
Câmpuri de tip caracter: Denumire_produs, producător
Câmpuri de tip număr întreg: anul producerii, termen de valabilitate (în zile)
Câmpuri de tip număr real: costul.
Câmpuri de tip data calendaristică: data producerii (zi, lună, an).
- Numele tipului Țară
Câmpuri de tip caracter: Denumire, Capitală
Câmpuri de tip număr întreg: suprafață, populație
Câmpuri de tip număr real: venit pe cap de locuitor.

De studiat:
tema 6 pag 218 din E. Cerchez, M. Șerban, Programarea în limbajul C/C++ pentru liceu, volumul 1, 2005

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