Sunteți pe pagina 1din 4

Chişinău – 2014

Tema: Clase (constructori, destructori).Funcţii şi clase prietene.

Scopul lucrării: familiarizarea studenţilor cu noţiunea de clase, utilizarea


constructorilor, destructorilor, cu funcţii şi clase prietene

Sarcina lucrarii
6. Scrieţi un program care la o singură trecere prin fişierul fin fără utilizare a
fişierelor suplimentare va tipări elementele fişierului fin în următoarea ordine:
– toate elementele mai mici ca valoarea a,
– elementele din segmentul [a,b],
– restul elementelor păstrînd aceeaşi ordine din fişierul fin. (a<b, a şi b sînt
cunoscute şi sînt de acelaşi tip ca şi elementele fişierului fin).

#include <iostream>
#include <string>
#include <fstream>
#include <cstdlib>
using namespace std;

class LUCRU_CU_FISIER
{ int n, a, b;
struct NODE { int inf; NODE *next; };
NODE *cap=NULL;

public:

LUCRU_CU_FISIER () { cout<<"Constructor predefinit!"<<endl; }


LUCRU_CU_FISIER (int inc, int sfir)
{ a = inc; b = sfir; cout<<"Constructor cu parametru! "<<endl; }
LUCRU_CU_FISIER (LUCRU_CU_FISIER &c)
{a=c.a; b=c.b; cout<<"Constructor de copiere! "<<endl;}
~LUCRU_CU_FISIER () {}; // destructor

void SETAB() // functia de setare a intervalului [a,b]


{
do
{
cout << "A = "; cin>>a;
cout << "B = "; cin>>b;
if(a>b)
cout<<"[Eroare] Setare"<<endl<<"Fii mai atent, A trebuie sa fie mai mic ca
B"<<endl<<"Mai incearca! "<<endl;
else
cout<<"[OK] Setare !!!"<<endl;
} while(a>b);
}

void IMPORT() // functia de importare a datelor din fisierul fin


{ ifstream file;
file.open("fin");
if(file.is_open())
{
while (!file.eof())
{ file>>n; cout << n << " ";
AddList(n);
}
}
file.close();
cout<<endl<<"[OK] Importare Date"<<endl;
}

void AddList(int n)
{
NODE *N=new NODE;
N->inf=n;
N->next=NULL;
NODE *T = cap;
if (T)
{
while ( T->next != NULL )
T = T->next;
T->next=N;
}
else
{
cap = N;
}
}

void ShowList_Restul() // functia de afisare a restul elementelor păstrînd aceeaşi ordine din
fişierul fin, (a<b)
{ NODE *T=cap;
if ( T==NULL)
cout<<"[Eroare] Elemente"<<endl; else {
while(T) {
if(T->inf>a && T->inf>b)
cout<<T->inf<<" ";
T=T->next; }
}
cout<<endl; }

void ShowList_Interval_A_B() // functia de afisare a elementelor din segmentul [a,b]


{ NODE *T=cap;
if ( T==NULL)
cout<<"[Eroare] Elemente"<<endl; else {
while(T) { if(T->inf>a && T->inf<b)
cout<<T->inf<<" ";
T=T->next; }
}
cout<<endl; }

void ShowList_Mai_Mici_Ca_A() // functia de afisare a elementelor mai mici ca valoarea a


{ NODE *T=cap;
if ( T==NULL)
cout<<"[Eroare] Elemente"<<endl; else {
while(T) { if(T->inf<a)
cout<<T->inf<<" ";
T=T->next; }
}
cout<<endl; }
};

void MENU() // functia meniu principal


{
cout<<"\t| Meniu |\n";
cout<<endl<< "[1] Stabileste A si B";
cout<<endl<< "[2] Importarea Datelor din fisierul fin";
cout<<endl<< "[3] Toate elementele mai mici ca A";
cout<<endl<< "[4] Elementele din segmentul [a,b]";
cout<<endl<< "[5] Restul elementelor";
cout<<endl<< "[0] Iesire";
cout<<endl<<">> ";
}

int main()
{
LUCRU_CU_FISIER FIN;
char alegere;
while(true)
{
MENU();
cin>>alegere;
switch(alegere)
{
case '1': FIN.SETAB(); break;
case '2': FIN.IMPORT(); break;
case '3': FIN.ShowList_Mai_Mici_Ca_A(); break;
case '4': FIN.ShowList_Interval_A_B(); break;
case '5': FIN.ShowList_Restul(); break;
case '0': exit(0); break;
}
}
return 0;
}
Concluzie: În procesul de elaborare a programului am făcut cunoştinţă cu
noua structură de gestionare a datelor, anume clasa ce permite prelucrarea
datelor sub formă de obiecte, păstrînd integritatea lor şi excuzînd
posibilitatea de prelucrare greşită a datelor complexe identice (cu metode
identice). Elaborind programul am utilizat constructori, destructori si clase
prietene.