Documente Academic
Documente Profesional
Documente Cultură
1) Sa se construiasca o functie generica (template) care sa poata determina valoarea maxima a elementelor unui array numeric, oricare ar fi tipul standard al elementelor acestuia. Sa se scrie functia main() care sa apeleze functia construita, pentru 2 array-uri, de tipuri diferite. Elmentele arrayurilor vor fi citite de la tastatura in tehnica OOP (rezolvare...)
2) Sa se construiasca o functie generica (template) care sa poata determina suma elementelor unui array numeric, oricare ar fi tipul standard al elementelor acestuia. Sa se scrie functia main() care sa apeleze functia construita, pentru 2 array-uri, de tipuri diferite. Elmentele arrayurilor vor fi citite de la tastatura in tehnica OOP (rezolvare...)
3) Sa se construiasca o functie generica ce inverseaza ntre ele valorile celor doua variabile cu care este apelata (rezolvare...)
4) Sa se construiasca un program care creeaza o functie generica cu doua tipuri generice (rezolvare...)
5) Sa se construiasca o functie generica ce inverseaza ntre ele valorile celor doua variabile cu care este apelata, folosind suprancarcarea explicita a unei functii generice (rezolvare...)
7) Se va dezvolta o aplicatie pentru implementarea unei liste nlantuite cu elemente fiind numere ntregi. Cerinta este a adapta aceasta aplicatie astfel nct tipul de date al elementelor listei sa fie unul universal (rezolvare...)
Rezolvari 1) Sa se construiasca o functie generica (template) care sa poata determina valoarea maxima a elementelor unui array numeric, oricare ar fi tipul standard al elementelor acestuia. Sa se scrie functia main() care sa apeleze functia construita, pentru 2 array-uri, de tipuri diferite. Elmentele array-urilor vor fi citite de la tastatura in tehnica OOP. #include<iostream> using namespace std;
template<class T>
void citire(T a[], int* n, char c) { cout<<"Citim sirul "<<c<<endl; cout<<"\tdati dimensiunea: "; cin>>*n; cout<<"\tintroduceti elementele:\n"; for(int i=0;i<*n;i++) { cout<<"\t\telementul ["<<i+1<<"]= "; cin>>a[i]; } }
template<class T> void afisare(T a[], int n, char c) { cout<<"Sirul "<<c<<" este: "; for(int i=0;i<n;i++) cout<<a[i]<<' '; cout<<endl; }
template<class T> T maxim(T a[], int n) { T max; max=a[0]; for(int i=1;i<n;i++) if(a[i]>max) max=a[i];
return max; }
citire(a,&m,'A'); citire(b,&n,'B');
afisare(a,m,'A'); afisare(b,n,'B');
2) Sa se construiasca o functie generica (template) care sa poata determina suma elementelor unui array numeric, oricare ar fi tipul standard al elementelor acestuia. Sa se scrie functia main() care sa apeleze functia construita, pentru 2 array-uri, de tipuri diferite. Elmentele array-urilor vor fi citite de la tastatura in tehnica OOP. #include<iostream> using namespace std;
{ cout<<"Citim sirul "<<c<<endl; cout<<"\tdati dimensiunea: "; cin>>*n; cout<<"\tintroduceti elementele:\n"; for(int i=0;i<*n;i++) { cout<<"\t\telementul ["<<i+1<<"]= "; cin>>a[i]; } }
template<class T> void afisare(T a[], int n, char c) { cout<<"Sirul "<<c<<" este: "; for(int i=0;i<n;i++) cout<<a[i]<<' '; cout<<endl; }
template<class T> T suma(T a[], int n) { T sum; sum=0; for(int i=0;i<n;i++) { sum=a[i]+sum; }
return sum; }
citire(a,&m,'A'); citire(b,&n,'B');
afisare(a,m,'A'); afisare(b,n,'B');
3) Sa se construiasca o functie generica ce inverseaza ntre ele valorile celor doua variabile cu care este apelata. //Exemplu de functie sablon
{ X temp; temp=a; a=b; b=temp; } void main() { int i=0, j=10; float x=10.3, y=4.8; char a='A', b='B';
cout<<"Valorile intregi originale :"<<i<<' '<<j<<endl; schimba(i,j); //inverseaza intregii cout<<"Valorile intregi inversate :"<<i<<' '<<j<<endl<<endl; cout<<"Valorile reale originale :"<<x<<' '<<y<<endl; schimba(x,y); //inverseaza float cout<<"Valorile reale inversate :"<<x<<' '<<y<<endl<<endl; cout<<"Valorile caracter originale :"<<a<<' '<<b<<endl; schimba(a,b); //inverseaza intregii cout<<"Valorile caracter inversate :"<<a<<' '<<b<<endl<<endl;
4) Sa se construiasca un program care creeaza o functie generica cu doua tipuri generice. #include<iostream> using namespace std;
void f (tip1 x, tip2 y) //merge si pe doua linii cu conditia ca intre aceste doua linii sa fie trecuta vreo instructiune { cout<<x<<' '<<y<<endl; }
5) Sa se construiasca o functie generica ce inverseaza ntre ele valorile celor doua variabile cu care este apelata, folosind suprancarcarea explicita a unei functii generice. #include<iostream> using namespace std;
template <class X> void schimba(X &a, X &b) { X temp; temp=a; a=b; b=temp;
void schimba(int &a, int &b) { int temp; temp=a; a=b; b=temp+1; cout<<"Functie suprascrisa."<<endl; }
void main() { int i=0, j=10; float x=10.3, y=4.8; char a='A', b='B'; cout<<"Valorile intregi originale :"<<i<<' '<<j<<endl; schimba(i,j); //inverseaza intregii cout<<"Valorile intregi inversate :"<<i<<' '<<j<<endl<<endl; cout<<"Valorile reale originale :"<<x<<' '<<y<<endl; schimba(x,y); //inverseaza float cout<<"Valorile reale inversate :"<<x<<' '<<y<<endl<<endl; cout<<"Valorile caracter originale :"<<a<<' '<<b<<endl; schimba(a,b); //inverseaza intregii cout<<"Valorile caracter inversate :"<<a<<' '<<b<<endl<<endl;
6) Sa se realizeze o clasa generica pentru lucrul cu stiva statica. #include<iostream> using namespace std;
template <class X> class Stiva_Vector { X *memorie; int dimensiune; int vf; public: Stiva_Vector(int); ~Stiva_Vector(){delete memorie;} virtual int push(X); virtual int pop(X&); virtual int varf(X&); virtual int goala() { vf=-1; return vf; } virtual int plina() { vf=dimensiune-1; return vf; } }; template <class X> Stiva_Vector<X>::Stiva_Vector(int dim) { dimensiune=dim; memorie=new X[dimensiune]; vf=-1;
} template <class X> int Stiva_Vector<X>::push(X v) { if(vf<dimensiune-1) { memorie[++vf]=v; return 1; } else return 0; } template <class X> int Stiva_Vector<X>::pop(X& v) { if(vf!=-1) { v=memorie[vf--]; return 1; } else return 0; } template <class X> int Stiva_Vector<X>::varf(X& t) { if(vf!=-1) { t=memorie[vf]; return 1; } else return 0; } void main() {
int c; Stiva_Vector<int>*a=new Stiva_Vector<int>(255); cout<<"Introduceti un numar (-1 face oprirea): "; cin>>c; while(c!=-1) { a->push(c); cout<<"Introduceti un numar (-1 face oprirea): "; cin>>c; } cout<<endl; while(a->pop(c)) { cout<<c<<" "; } cout<<endl; delete a;
7) Se va dezvolta o aplicatie pentru implementarea unei liste nlantuite cu elemente fiind numere ntregi. Cerinta este a adapta aceasta aplicatie astfel nct tipul de date al elementelor listei sa fie unul universal. #include<iostream> using namespace std; #include<stdio.h> #include<conio.h>
struct nod {
typedef struct nod nod; class stiva { nod *vf; public: stiva(); ~stiva(); void init(int); void push(int); //adaugarea unui element in stiva void afisare(); int pop(); //extragerea unui element din stiva int goala(); };
stiva::stiva() { vf=NULL; } void stiva::init(int val) { vf=new nod; vf->next=NULL; vf->inf=val; } void stiva::push(int val) {
nod* aux=new nod; aux->inf=val; aux->next=vf; vf=aux; } int stiva::pop() { nod *aux=vf; int n; if (vf) { n=vf->inf; vf=vf->next; delete(aux); } else cout<<"Lista goala!"; return n; } void stiva::afisare() { nod *aux=vf; while(aux) { cout<<aux->inf<<" "; aux=aux->next; } cout<<endl; } stiva::~stiva() {
nod *aux=vf; while(vf) { aux=vf; vf=vf->next; delete(aux); } } int stiva::goala() { if(vf!=NULL) return 1; else return 0; } void optiune() { getch(); cout<<"1.Initializare 4.Afisare stiva"<<endl; cout<<"2.Introducere element 5.Distrugere stiva"<<endl; cout<<"3.Scoatere element 0.STOP"<<endl; cout<<endl<<endl<<"Introduceti optiunea: "; } void main() { stiva s,s1; cout<<"Acest program foloseste lista pe post de stiva, implementand "; cout<<"operatiile de baza de pe stiva."; optiune(); int opt,initVal; cin>>opt; while (opt)