C++: Functii si clase generice - aplicatii rezolvate


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 (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 array-urilor 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 supraîncarcarea explicita a unei functii generice (rezolvare...)

6) Sa se realizeze o clasa generica pentru lucrul cu stiva statica (rezolvare...)

7) Se va dezvolta o aplicatie pentru implementarea unei liste înlantuite cu elemente fiind numere întregi. Cerinta este a adapta aceasta aplicatie astfel încât tipul de date al elementelor listei sa fie unul universal (rezolvare...)


Rezolvari

#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;
}
 
void main()
{
 int a[20];
 double b[20];
 int m,n;
 
 citire(a,&m,'A');
 citire(b,&n,'B');
 
 afisare(a,m,'A');
 afisare(b,n,'B');
 
 cout<<"\nMaximul sirului A este: "<<maxim(a,m);
 cout<<"\nMaximul sirului B este: "<<maxim(b,n);
 
 int var;
 cin>>var;
}

#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 suma(T a[], int n)
{
  T sum;
  sum=0;
  for(int i=0;i<n;i++)
  {
    sum=a[i]+sum;
  }
  return sum;
}
 
void main()
{
 int a[20];
 double b[20];
 int m,n;
 
 citire(a,&m,'A');
 citire(b,&n,'B');
 
 afisare(a,m,'A');
 afisare(b,n,'B');
 
 cout<<"\nSuma sirului A este: "<<suma(a,m);
 cout<<"\nSuma sirului B este: "<<suma(b,n);
 
 int var;
 cin>>var;
}

//Exemplu de functie sablon

#include<iostream>
using namespace std;
 
template <class X>
void schimba(X &a, X &b)
{
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;
 
 int var;
 cin>>var;
}

#include<iostream>
using namespace std;
 
template <class tip1, class tip2>
 
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;
}
 
void main()
{
	f(10, "hi");
	f(0.3, 12L);
 
	int var;
	cin>>var;
}

#include<iostream>
using namespace std;
 
//Exemplu de functie sablon

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;
 
	int var;
	cin>>var;
}

#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;
 
	int var;
	cin>>var;
}

#include<iostream>
using namespace std;
#include<stdio.h>
#include<conio.h>

struct nod
{
	int inf;
	struct nod* next;
};
 
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)
	{
		switch(opt)
		{
			case 0:break;
 
			case 1:cout<<"Dati o valoare:";
			cin>>initVal;
			s.init(initVal);
			break;
 
			case 2:cout<<"Dati noul element:";
			cin>>initVal;
			s.push(initVal);
			break;
 
			case 3:cout<<"Elementul din varf a fost:"<<s.pop();
			getch();
			break;
 
			case 4:cout<<"Elementele aflate in stiva sunt:";
			s.afisare();
			getch();
			break;
 
			case 5:s.~stiva();
			cout<<"Lista a fost distrusa!";
			getch();
			break;
 
			default:cout<<"OPTIUNE GRESIT ALEASA!";
			getch();
		}
		optiune();
		cin>>opt;
	}
 
	cout<<"La revedere.";
	getch();
 
	int var;
	cin>>var;
}


COMENTARII

optional (nu va fi afisat pe website)
max: 255 caractere


Acest site utilizeaza cookie-uri. Navigand in continuare va exprimati acordul asupra folosirii cookie-urilor.