Sunteți pe pagina 1din 9

Universitatea Liberă Internațională din Moldova

Facultatea Informatică, Inginerie, Design


Catedra Tehnologii informaționale și Design
Disciplina: Structuri de date și algoritmi în C++

Lucrare de laborator Nr.3

Tema : utilizarea structurilor și vectorilor de la structuri pentru scrierea


programelor în limbajul de programare C++.

A efectuat student gr.TIR-26 Guminiuc


Victor

A verificat profesor Mititelu Vitalii

Chișinău 2018
CUPRINS
1. Scopul lucrarii ............................................................................................................................................................................ 3
2. Sarcina ........................................................................................................................................................................................ 3
3. Teorie ......................................................................................................................................................................................... 3
4. Mersul lucrarii ............................................................................................................................................................................ 5
4.1 Scrierea progreamului ............................................................................................................................................................... 5
4.2 Rezultatul obtinut ..................................................................................................................................................................... 8
5. Concluzii .................................................................................................................................................................................... 8
1. Scopul lucrarii
Utilizarea structurilor și vectorilor de la structuri pentru scrierea programelor în limbajul de
programare C++.

2. Sarcina
Scrieți un program care permite utilizatorului să selecteze unul din punctele meniului (crearea
vectorului din structuri; afișarea conținutului vectorului; adăugarea datelor; modificarea datelor; eliminarea
datelor; căutarea datelor conform căruiva criteriu; sortarea datelor; ieșirea din program ș.a.). Tema, pe baza
căreia trebuie să creați baza de date, precum și câmpurile obligatorii, sunt indicate în varianta:

Varianta 7: Filme (Nr, Denumire, Gen, Regizor, Durată, Ţară)

3. Teorie
Folosirea tipului de date struct permite gruparea sub aceeaşi denumire a mai multor variabile
(numite câpuri) de tipuri diferite, cât şi accesul şi operarea cu aceste câmpuri. Tipul struct mai poartă şi
denumirea de tip de înregistrare.
O structură este compusă dintr-un număr de componente de anumite tipuri. Componentele structurii se
numesc câmpuri. Fiecare câmp trebuie să aparţină unui tip de date deja definit sau unui tip standard.

Sintaxa declarării unei structuri:

struct [nume_structura] {
tip_1 camp_1; tip_2 camp_2;
tip_n camp_n;
} [ lista_variabile_structura ];

Există două posibilităţi de declarare a variabilelor care alcătuiesc structura

1.Scriind la sfârşit numele variabilelor:


struct Elev
{ char nume[20], prenume[20]; float media_mate, media_info; int varsta;
} e1,e2;
2.Declarând variabilele aşa cum suntem obişnuiţi:
Elev el, e2;

Definiţia structurii poate fi făcută:

• În cadrul funcţiei main()


• Înaintea funcţiei main() (caz recomandat)

OBS: Numele structurii şi lista variabilelor pot lipsi dar nu simultan.


În cazul în care numele structurii lipseşte spunem că variabilele au tip structură anonim.

EXEMPLU :
struct Elev{ struct Elev{
char nume [20]; char nume [20];
char prenume [20]; char prenume [20];
float media; float media;
}; };

Elev e1, e2, ., en; struct Elev e1, e2, ., en;

Accesarea unui câmp al unei variabile a de tip structură, se face astfel:


Pentru accesul la câmpurile unei variabile de tip struct se foloseşte operatorul de selecţie directă, notat cu
‘.’, operator cu prioritate maximă.
Dacă inr este o variabilă de tipul Elev atunci:

 inr.nume - reprezintă şirul nume al variabilei inr;


 inr.nume[0] - reprezintă primul caracter al şirului nume;
 inr.nota mate - reprezintă câmpul nota_mate al variabilei inr.

Între două variabile de acelaşi tip struct se poate folosi atribuirea. Dacă inrl, inr2 sunt două variabile de tip
elev, prin atribuirea inr1=inr2, variabila inrl ia aceeaşi valoare ca variabila inr2. O astfel de atribuire se mai
numeşte copiere bit cu bit.

Citirea unei variabile de tip structură :

Metoda 1: Metoda 2:
void citire_elev(Elev &e) void citire elev(Elev &e)
{ {

cout<<”Nume:” ; cin>>e.nume; cin>>e. num e>>e. prenume>>e .media;


cout<<”Prenume:” cin>>e.prenume; }

cout<<”Media:” ;
} cin>>e.media;

Afisarea unei variabile de tip structura :

Metoda 1: Metoda 2:
cout<<a.camp_1<<endl; cout<<a.camp_1<<” “<<a.camp_2<<” ”...<<a.camp_n;
cout <<a.camp_2<<endl;
cout <<a.camp_n<<endl;

Vectori de structuri (înregistrări) :

Se poate declara un tablou cu elemente de tip structură:

typedef struct {
char nume [20]; char prenume [20]; float media;
} Elev;
Elev a[20];

Citirea a “n” componente ale vectorului “a” se poate face astfel:

Metoda 1: Metoda 2:
cout<<”n=”; cin>>n; cout<<”n=”; cin>>n;
for (i=1; i<=n; i++) for (i=1; i<=n; i++)
{ cin>>a[i] .nume>>a[i].prenume>>.>>a[i] .media;
cout<<”Nume:” ; cin>>a[i].nume;
cout<<”Prenume:”; cin>>a[i].prenume;
cout<<”Media:” ; cin>>a[i].media;
}
4. Mersul lucrarii
4.1 Scrierea progreamului
#include <iostream> case 8: isRunning=false ;break;
#include <string> default: cout<<" atentie introduceti (1-8)!!\n\n";
#include <vector> }
}
using namespace std; else
{
struct film menu();
{ }
int nr; }
string denumire="";
string gen=""; void continuare()
string regizor=""; {
int durata; cout << "\ntastati orice tasta pentru afisarea menuului ";
string tara=""; cin.ignore();
cin.get();
}; menu();
}
vector<film> filmArray;
bool isRunning = true; void creare()
bool isCreated = false; {
if (!isCreated)
{
void creare(); int i=0;
void afisare(); int arraySize=0;
void afisarefilm( int i); filmArray.resize(arraySize + 1);
void adaugare(); filmArray[i].nr = i + 1;
void modificare(); cout<<"Inreoduceti datele pentru Filmului cu
void eliminare(); nr"<<"["<<(i+1)<<"]\n";
void cautare(); cout << "Introduceti denumirea Filmului : " ;
void sortare(); cin >> filmArray[i].denumire;
void continuare(); cout << "Introduceti genul Filmului : " ;
void menu() cin >> filmArray[i].gen;
{ cout << "Introduceti regizorul Filmului : " ;
cout << "\n1.Crearea Vectorului" << endl; cin >> filmArray[i].regizor;
cout << "2.Afisarea Vectorului" << endl; cout << "Introduceti durata Filmului : " ;
cout << "3.Adaugare film" << endl; cin >> filmArray[i].durata;
cout << "4.Modificarea Datelor unui film" << endl; cout << "Introduceti tara Filmului : " ;
cout << "5.Eliminarea unui film" << endl; cin >> filmArray[i].tara;
cout << "6.Cautarea unui film" << endl; cout<<"\n";
cout << "7.Sortarea datelor" << endl; isCreated = true;
cout << "8.Esire din program" << endl; continuare();
cout << "Alegeti : "; }
int menuItem; else
cin >> menuItem; {
if (menuItem >0 && menuItem <9) cout << "Vectorul deja este creat\n\n" << endl;
{ continuare();
switch (menuItem) }
{ }
case 1: cout << "\nA fost aleasa optiunea 1\n";creare();
break; void afisarefilm(int i)
case 2: cout << "\nA fost aleasa optiunea {
2\n";afisare();break; cout << "Filmului cu nr[" << filmArray[i].nr << "] are
case 3: cout << "\nA fost aleasa optiunea urmatoarele date : " << endl;
3\n";adaugare();break; cout << "denumirea: " << filmArray[i].denumire << endl;
case 4: cout << "\nA fost aleasa optiunea cout << "genul: " << filmArray[i].gen << endl;
4\n";modificare();break; cout << "regizorul de: " << filmArray[i].regizor << endl;
case 5: cout << "\nA fost aleasa optiunea cout << "durata: " << filmArray[i].durata << endl;
5\n";eliminare();break; cout << "tara: " << filmArray[i].tara<<"\n";
case 6: cout << "\nA fost aleasa optiunea }
6\n";cautare();break;
case 7: cout << "\nA fost aleasa optiunea void afisare()
7\n";sortare();break; {
for (int i = 0; i < filmArray.size(); i++)
{ void swap(film & a, film & b)
afisarefilm(i); {
} film x;
continuare(); x = a;
} a = b;
b = x;
void adaugare() }
{
int add = filmArray.size(); void cautare()
filmArray.resize(add + 1); {
filmArray[add].nr = add + 1; int op = 0;
cout<<"Inreoduceti datele pentru Filmul cout << "\nDupa care criteriu va fi cautarea? : \n";
"<<"["<<(add+1)<<"]\n"; cout << "1.Numar" << endl;
cout << "Introduceti denumirea Filmului : " ; cout << "2.denumire" << endl;
cin >> filmArray[add].denumire; cout << "3.gen" << endl;
cout << "Introduceti genul Filmului : " ; cout << "4.regizor" << endl;
cin >> filmArray[add].gen; cout << "5.durata" << endl;
cout << "Introduceti regizorul Filmului : " ; cout << "6.tara" << endl;
cin >> filmArray[add].regizor; cout << "Alegeti : ";
cout << "Introduceti durata Filmului : " ; cin >> op;
cin >> filmArray[add].durata; int numar = 0;
cout << "Introduceti tara Filmului : " ; string denumire;
cin >> filmArray[add].tara; string gen;
continuare(); string regizor;
} int durata;
string tara;
void modificare() switch (op)
{ {
int n = 0; case 1:
cout << "\nIntroduceti numarul Filmului care va fi modificat cout << "\nIntroduceti Numarul Filmului care va fi cautat : "
: " << endl; << endl;
cin >> n; cin >> numar;
n--; for (int i = 0; i < filmArray.size(); i++)
cout<<"Inreoduceti datele modificate pentru Filmului cu {
nr"<<"["<<(n+1)<<"]\n"; if (filmArray[i].nr = numar)
cout << "Introduceti denumirea Filmului : " ; {
cin >> filmArray[n].denumire; afisarefilm(i);
cout << "Introduceti genul Filmului : " ; }
cin >> filmArray[n].gen; }
cout << "Introduceti regizorul Filmului : " ; continuare();
cin >> filmArray[n].regizor; break;
cout << "Introduceti durata Filmului : " ; case 2:
cin >> filmArray[n].durata; cout << "\nIntroduceti denumirea Filmului care va fi cautat :
cout << "Introduceti tara Filmului : " ; " << endl;
cin >> filmArray[n].tara; cin >> denumire;
menu(); for (int i = 0; i < filmArray.size(); i++)
} {
if (filmArray[i].denumire == denumire)
void eliminare() {
{ afisarefilm(i);
int n = 0; }
cout << "\nIntroduceti Numarul Filmului care va fi eliminat }
: " << endl; continuare();
cin >> n; break;
if (n > 0 && n <= filmArray.size()) case 3:
{ cout << "\nIntroduceti genul Filmului care va fi cautat : " <<
filmArray.erase(filmArray.begin() + n - 1); endl;
} cin >> gen;
else for (int i = 0; i < filmArray.size(); i++)
{ {
cout << "Filmului cu asa numar nu exista !!!" << endl; if (filmArray[i].gen == gen)
continuare(); {
} afisarefilm(i);
menu(); }
} }
continuare(); }
break; continuare();
case 4: break;
cout << "\nIntroduceti regizorul Filmului care va fi cautat : " default:
<< endl; cout << "Numarul introdus nu corespunde nici unui punct
cin >> regizor; din menu : " << endl;
for (int i = 0; i < filmArray.size(); i++) continuare();
{ break;
if (filmArray[i].regizor == regizor) }
{ }
afisarefilm(i);
} void sortare()
} {
continuare(); bool isChanged = true;
break;
case 5: if (isChanged)
cout << "\nIntroduceti durata Filmului care va fi cautat : " {
<< endl; isChanged = false;
cin >> durata; for (int i = 0; i < filmArray.size() - 1; i++)
for (int i = 0; i < filmArray.size(); i++) {
{ if (filmArray[i].nr > filmArray[i+1].nr)
if (filmArray[i].durata = durata) {
{ swap(filmArray[i], filmArray[i + 1]);
afisarefilm(i); isChanged = true;
} }
} }
continuare(); }
break; else continuare();
case 6: }
cout << "\nIntroduceti tara Filmului care va fi cautat : " <<
endl; int main()
cin >> tara; {
for (int i = 0; i < filmArray.size(); i++) while (isRunning)
{ {
if (filmArray[i].tara == tara) menu();
{ }
afisarefilm(i); return 0;
} }
4.2 Rezultatul obtinut
5. Concluzii
Am avut insarcinarea a scrie un program care permite utilizatorului să selecteze unul din punctele
meniului (crearea vectorului din structuri; afișarea conținutului vectorului; adăugarea datelor; modificarea
datelor; eliminarea datelor; căutarea datelor conform căruiva criteriu; sortarea datelor; ieșirea din program
ș.a.).
La scrierea programului am folosit structurile, vectorii de structuri, functii pentru prelucrarea datelor
din structuri (adaugare, stergere, actualizare, cautare si afisarea totalului).

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