Unitatea de Curs:: Programarea Procedurală

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

Sunteți pe pagina 1din 18

Unitatea de curs:

Programarea Procedurală
Tema lecției: Subprograme,
particularități de utilizare
Profesor: Eugenia Burca
Master în Informatică
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, dar 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)
Unitatea de curs:
Programarea Modulară
(elemente)
Tema lecției: Crearea și utilizarea UNIT-urilor în C++
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).
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 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 pe care le folosesc (ele se referă doar la 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 în directoriul curent al


aplicației;

#include < iostream.h> – caută fișierul header în bibliotecile system


(standard compiler include paths)
Exemplu de program
Elaborarea unui
program pentru
gestiunea datelor
despre tipul de
date student.

Conținutul
programululi
main.cpp
- Programul
principal
Fișierul student.h
Fișierul student.in
Problemă: Ionel a cumpărat mai multe cărţi. Pentru o mai bună evidenţă a lor el a
hotărât să elaboreze un program prin intermediul căruia să gestioneze mai eficient datele despre
cărţi. El a hotărât ca despre o carte să păstreze informaţii referitoare la: titlul cărţii; numele şi
prenumele autorului; numărul de pagini; anul ediţiei; preţul. Să se elaboreze un program prin
intermediul căruia se va crea un meniu cu următoarele opţiuni:
1) Afişarea tuturor cărţilor;
2) Afişarea cărţilor tipărite recent (ultimii trei ani);
3) Afişarea cărţilor unui anumit autor;
4) Afişarea tuturor cărţilor în ordine descrescătoare a preţului.
Pentru ca programul să fie mai eficient, datele despre cărţi se vor citi din fişierul carti.in.
Structura fişierului:

În prima linie din fişier se indică numărul total de cărţi, iar în următoarele rânduri, se enumeră
datele despre fiecare carte conform condiției problemei.
#include <iostream>
#include <iomanip>
#include <fstream>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#define anul 2021
using namespace std;
struct carte{
char titlu[40],n_a[15],p_a[15];
int nr_p,an_ed;
float pret;
}*t, aux;
int i,j,n;
ifstream f;
char c, nume[15];
main(){
f.open("carti.in"); f>>n;
t=new carte[n];//se aloca memorie din heap
for(i=0;i<n;i++){
f>>t[i].titlu>>t[i].n_a>>t[i].p_a;
f>>t[i].nr_p>>t[i].an_ed>>t[i].pret;
}
f.close();
do{
system("cls");
cout<<"Afisati"<<endl<<"1 - Toate cartile "<<endl;
cout<<"2 - Cartile tiparite recent"<<endl;
cout<<"3 - Cartile unui autor"<<endl;
cout<<"4 - In ordine descresatoare a pretului"<<endl;
cout<<"0 - Iesire";
c=getch();
system("cls");
switch(c){
case '1':cout<<"Lista tuturor cartilor"<<endl;
cout<<setw(20)<<"Titlu"<<setw(15)<<"Nume";
cout<<setw(15)<<"Prenume"<<setw(8)<<"Pagini";
cout<<setw(8)<<"Anul ed"<<setw(8)<<"Pret"<<endl;
for(i=0;i<n;i++)
{
cout<<setw(20)<<t[i].titlu<<setw(15)<<t[i].n_a;
cout<<setw(15)<<t[i].p_a<<setw(8)<<t[i].nr_p;

cout<<setw(8)<<t[i].an_ed<<setw(8)<<t[i].pret<<endl;
}
getch();break;
case '2': cout<<"Cartile tiparite recent"<<endl;
cout<<setw(20)<<"Titlu"<<setw(15)<<"Nume";
cout<<setw(15)<<"Prenume"<<setw(8)<<"Pagini";
cout<<setw(8)<<"Anul ed"<<setw(8)<<"Pret"<<endl;
for(i=0;i<n;i++) if(anul-t[i].an_ed<=3){
cout<<setw(20)<<t[i].titlu<<setw(15)<<t[i].n_a;
cout<<setw(15)<<t[i].p_a<<setw(8)<<t[i].nr_p;

cout<<setw(8)<<t[i].an_ed<<setw(8)<<t[i].pret<<endl;
}
getch();break;
case '3': cout<<"Indicati numele autorului";cin>>nume;
cout<<"Cartile autorului "<<nume<<endl;
cout<<setw(20)<<"Titlu"<<setw(15)<<"Nume";
cout<<setw(15)<<"Prenume"<<setw(8)<<"Pagini";
cout<<setw(8)<<"Anul ed"<<setw(8)<<"Pret"<<endl;
for(i=0;i<n;i++) if(strcmpi(nume,t[i].n_a)==0){
cout<<setw(20)<<t[i].titlu<<setw(15)<<t[i].n_a;
cout<<setw(15)<<t[i].p_a<<setw(8)<<t[i].nr_p;
cout<<setw(8)<<t[i].an_ed<<setw(8)<<t[i].pret<<endl;
}
getch(); break;
case '4':
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(t[j].pret>t[i].pret) {aux=t[i];t[i]=t[j];t[j]=aux;}
cout<<"In ordine descrescatoare a pretului"<<endl;
cout<<setw(20)<<"Titlu"<<setw(15)<<"Nume";
cout<<setw(15)<<"Prenume"<<setw(8)<<"Pagini";
cout<<setw(8)<<"Anul ed"<<setw(8)<<"Pret"<<endl;
for(i=0;i<n;i++){
cout<<setw(20)<<t[i].titlu<<setw(15)<<t[i].n_a;
cout<<setw(15)<<t[i].p_a<<setw(8)<<t[i].nr_p;
cout<<setw(8)<<t[i].an_ed<<setw(8)<<t[i].pret<<endl;
}
getch();break;
}
}while(c!='0');
delete [] t;
}
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 fi structurat în module (vezi diapozitivul 8-10)
b) În cadrul programului se vor utiliza funcții supraîncărcate (vezi diapozitivul 3, 8-10)
c) În cadrul funcțiilor va fi utilizat modificatorul const (vezi diapozitivul 2, 9)
De studiat tema 6 pag 218 din E.
Cerchez, M. Șerban, Programarea
în limbajul C/C++ pentru liceu,
2005

SUCCESE!!!

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