Sunteți pe pagina 1din 6

Ministerul Educaţiei al Republicii Moldova

Universitatea Tehnică a Moldovei

Departamentul informatica si ingineria sistemelor

RAPORTLucrarea de laborator Nr. 7


Tema: Sabloane.

A efectuat:st. gr. AI – 191 Taucci Afanasi

A verificat:lec. univ. Lisniс Inga

Chişinău 2020

Scopul lucrării:
• Studierea necesităţii şabloanelor;
• Studierea regulilor de definire şi utilizare a şabloanelor;
• Studierea specializării şabloanelor;
• Studierea potenţialelor probleme rezolvate cu ajutorul şabloanelor;

Varianta 12
а) Creaţi o funcţie şablon, de căutare a elementului al doilea minimal după mărime din elementele listei. De
exemplu: lista - 0 2 3 4 3 6, rezultatul - 2. Funcţia trebuie să lucreze cu masive de lungimi diferite.
b) Creaţi clasa parametrizată Matrix – matrice. Clasa trebuie să conţină constructorii, destructorii şi funcţiile
getRows, getCols, operatorii [], +=, -=, *= şi de intrare/ieşire.

Codul:
#include <stdio.h>
#include <iostream>
#include <math.h>

using namespace std;

template <class T>


T repet(T *tab, int n, T k){
int num = 0;
for (int i = 0; i < n; i++)
if (tab[i] == k)
num++;
return num;
}

int main(){
int *a;
float *b;
char *c;

cout << "Introdu marimea Listei A:" << endl;


int n = 0;
cin >> n;
a = new int[n];
cout << "Introdu Lista A: " << endl;
for (int i = 0; i < n; i++){
cout << i + 1 << ": ";
cin >> a[i];
}
cout << "Introdu Valoarea: " << endl;
int k;
cin >> k;
cout <<"Sunt Repetari: " << repet(a, n, k);
cout << endl << endl;
cout << "Introdu marimea Listei B:" << endl;
n=0;
cin >> n;
b = new float[n];
cout << "Introdu Lista B: " << endl;
for (int i = 0; i < n; i++){
cout << i + 1 << ": ";
cin >> b[i];
}
float k1;
cout << "Introdu Valoarea: " << endl;
cin >> k1;
cout << "Sunt Repetari: " << repet(b, n,k1);
cout << endl << endl;
cout << "Introdu marimea Listei C:" << endl;
n = 0;
cin >> n;
c = new char[n];
cout << "Introdu Lista C: " << endl;
for (int i = 0; i < n; i++){
cout << i + 1 << ": ";
cin >> c[i];
}
char k3;
cout << "Introdu Valoarea: " << endl;
cin >> k3;
cout << "Sunt Repetari: " << repet(c, n, k3);
cout << endl << endl;
system("pause");
}
#include <iostream>
#include <stdlib.h>
#include <conio.h>

using namespace std;

template <class T>


class List{
protected:
T* tab;
int n;
public:
List() : n(0), tab(NULL){}

List(int num){
n = num;
this->tab = new T[num];
}

List(const List & copy){


this->n = copy.n;
this->tab = new T[n];
for (int k = 0; k<n.copy; k++)
this->tab[k] = copy.tab[k];
}

~List(){
delete[] this->tab;
}

T & operator[](int pos){


if ((pos >= 0) && (pos<n))
return tab[pos];
}

int getLenght(){
return this->n;
}

friend ostream & operator << (ostream & out , List<T> & copy){
for (int j = 0; j < copy.n; j++){
out << j + 1 << ": " << copy.tab[j] << endl;
}
return out;
}

friend istream & operator>>(istream& in, List<T>& copy){


cout << "Introdu Lista: " << endl;
for (int i = 0; i < copy.n; i++){
cout << i + 1 << ": ";
in >> copy.tab[i];
}
return in;
}

void add(List <T> &vec){


cout << "Introduceti elementul care doriti sa adaugati" << endl;
T k;
cin >> k;
List<T> copy;
copy.tab = new T[vec.n+1];
vec.n++;
copy.n = vec.n;
for (int i = 0; i < copy.n; i++)
copy.tab[i] = vec.tab[i];
copy.tab[copy.n-1] = k;
delete[] vec.tab;
vec.tab = new T[copy.n];
vec.n = copy.n;
for (int i = 0; i <= copy.n; i++)
vec.tab[i] = copy.tab[i];
}

void in(int num){


cout << "Introduceti elementul: " << endl;
T i;
int l = 0;
cin >> i;
for (auto k = 0; k < num; k++)
if (tab[k] == i)
l++;
cout << "Elementul dat se include de " << l << "ori" << endl;
}

void remove(List<T> &vec, int num){


cout << "Introduceti pozitia elementului care doriti sa eliminati" << endl;
int k;
List<T> copy;
copy.tab = new T[num - 1];
copy.n = num - 1;
cin >> k;
k--;
for (auto i = k; i < vec.n; i++)
vec.tab[i] = vec.tab[i + 1];
for (int i = 0; i < copy.n; i++)
copy.tab[i] = vec.tab[i];
n--;
delete[] vec.tab;
vec.tab = new T[n];
for (int i = 0; i < n; i++)
vec.tab[i] = copy.tab[i];
}

};

/*template <class T>


istream& operator>>(istream& in, List<T>& copy){
cout << "Introdu Lista: " << endl;
for (int i = 0; i < copy.n; i++){
cout << i + 1 << ": ";
in >> copy.tab[i] >> " ";
}
return in;
}

template <class T>


ostream& operator << (ostream & out, List<T>& copy){
for (j = 0; j < copy.n; j++){
out << i + 1 << ": " << copy.tab[j] << endl;
}
return out;
}*/

int main(){
system("cls");
int k, k1;
List<int> *a;
List<float> *b;
int n;
cout << "Introdu Marimea Listei A: " << endl;
cin >> n;
a = new List<int>(n);
cin >> (*a);
int n1;
cout << endl;
cout << "Introdu Marimea Listea B: " << endl;
cin >> n1;
b = new List <float>(n1);
cin >> (*b);

int aleg, exit = 0;


do{
system("cls");
cout << "Alegeti optiunea " << endl;
cout << "1. Afisarea elementelor" << endl;
cout << "2. Introducerea Elementelor noi" << endl;
cout << "3. Controlarea elementelor" << endl;
cout << "4. Excluderea elementelor" << endl;
cout << "5. Depistarea marimii elementelor" << endl;
cout << "6. Returnarea elementului de pe o pozitie" << endl;
cin >> aleg;
switch (aleg){
case 1:
cout << "Afisarea Datelor" << endl;
cout << "Lista A: " << endl;
cout << *a;
cout << endl;
cout << "Lista B: " << endl;
cout << *b;
system("pause");
break;

case 2:
cout << "Introducerea datelor:" << endl;
cout << "Lista A: " << endl;
(*a).add(*a);
cout << "Lista B: " << endl;
k1 = (*b).getLenght();
(*b).add(*b);
system("pause");
break;

case 3:
cout << "Controlarea elementelor" << endl;
cout << "Lista A: " << endl;
k = (*a).getLenght();
(*a).in(k);
cout << endl;
cout << "Lista B: " << endl;
k1 = (*b).getLenght();
(*b).in(k1);
system("pause");
break;

case 4:
cout << "Excluderea elementelor" << endl;
cout << "Lista A: " << endl;
k = (*a).getLenght();
(*a).remove(*a,k);
cout << endl;
cout << "Lista B: " << endl;
k1 = (*b).getLenght();
(*b).remove(*b, k1);
system("pause");
break;

case 5:
cout << "Marimea elementelor: " << endl;
cout << "Lista A: " << endl;
cout << (*a).getLenght();
cout << endl;
cout << "Lista B: " << endl;
cout << (*b).getLenght();
system("pause");
break;
case 6:
cout << "Returnarea elementelor " << endl;
cout << "Introdu pozitia: " << endl;
int i;
cin >> i;
i--;
cout << "Lista A: " << endl;
cout << (*a)[i];
cout << endl;
cout << "Lista B: " << endl;
cout << (*b)[i];
system("pause");
break;

case 0:
exit = 1;
break;
}
} while (!exit);
}

Intrebari de control:
1. Ce reprezintă prin sine șabloanele?

Șabloanele reprezintă prin sine un mecanism ce permite să scrii un algoritm, care nu este legat de un tip anumit. Cel mai
des, șabloanele sunt utilizate pentru crearea container şi algoritmi abstracți.

2. Care sunt avantajele utilizării șabloanelor?

Șabloanele creează aprovizionarea, care, ca urmare, se utilizează deja cu tipurile de date specificate. Dacă șabloanele sunt
utilizate cu câteva tipuri de date diferite, compilatorul creează un codul necesar pentru fiecare tip în parte. Simțitor
micșorează codul de ieșire, care duce la, micșorarea cantității de erori, micșorează introducerea modificărilor în cod și
micșorează prezentarea programelor în general, așa cum se micșorează calitatea tipurilor și funcțiilor date.

3. Pentru ce se utilizează specializarea?

Specializarea se utilizează cînd avem o funcție parametrizată dar totuși există un anume timp care nu poate fi procesat de
această funcție, ca de exemplu o funcție de comparare a 2 valori, dacă trimitem 2 șiruri de caractere o să fie comparate
pointerii lor ci nu șirurile.

4. Ce poate fi un șablon?

Șabloanele sunt clase și funcții.

5. Care sunt problemele utilizării șabloanelor?

Problemele utilizării șabloanelor sunt că este foarte complicat și are o sintaxă neobișnuită ce duce la utilizarea rară a lui.

6. Utilizarea șabloanelor duce la economia memoriei?

Șabloanele economisesc memoria doar dacă în ce privește fișierele ce conțin codul sursă deoarece ele ne permit să
minimizăm codul scris.

7. Dar a timpului de executare a compilării codului?

Șabloanele nu micșorează compilarea modulului, mai degrabă chiar invers, dar simțitor micșorează codul de ieșire.

8. Poate o clasă șablon să moștenească una obișnuită și invers?

Șabloanele clasei pot fi moștenite, așa ca și cele obișnuite, cu aceasta, și acel de bază, așa și a cel derivat pot fi clase
obișnuite.

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