Sunteți pe pagina 1din 3

Tema: Templates: Template pentru clase şi funcţii.

Scopul lucrării: familiarizarea studenţilor cu clase şi funcţii generice.

Sarcina lucrarii
Fie o consecutivitate de numere întregi sau reale a1  a2 … an se dă în ordine descrescătoare şi fie se dă un număr
b (respectiv întreg sau real), pentru care trebuie să-i căutăm locul între numerele a1, …, an, astfel ca, după
introducerea numărului b în acest loc, consecutivitatea să rămînă sortată în aceeaşi ordine. Dacă unele elemente
sînt egale după valoare cu numărul b, acesta poate fi introdus în diferite locuri mai aproape de începutul
consecutivităţii. Această problemă poartă numele de problemă de căutare a locului elementului.. Pentru b sînt
n+1 posibilităţi: b  a1, a1<b a2, … an-1 <b  an, an < b şi ca soluţie a acestei probleme de căutare a locului
elementului b poate fi corespunzător unul din numerele 1, ..., n+1. Pentru rezolvarea acestei probleme va fi util
următorul algoritm care se numeşte algoritmul împărţirii în jumătăţi (algoritmul căutării binare). Se ia mai întîi 1
şi n + 1 în calitate de hotare de căutare a locului elementului, apoi pînă cînd valorile hotarelor nu coincid, pas cu
pas se mişcă aceste hotare în modul următor: se compară b cu as, unde s este partea întreagă mediei aritmetice a
valorilor hotarelor; dacă аs<b, atunci se înlocuieşte hotarul de jos precedent cu s+1, iar cel de sus rămîne fără
schimbare, în caz contrar, se lasă fără nici o schimbare hotarul de jos, iar hotarul de sus se schimbă cu s. Cînd
valorile hotarelor coincid, fiind egale cu careva număr t, executarea algoritmului descris se finalizează cu
rezultatul t. (Numărul de comparări necesare pentru acest algoritm nu excedă [log2 (n +1)]+1)
a) Sunt date numere reale a1, …, an, b1, …, bm (a1  a2 … an). Să se obţină numerele naturale k1, …, km astfel,
încît ki – să fie soluţia problemei căutării locului bi printre a1, …, an (i= 1, ..., m). Să se utilizeze algoritmul
căutării binare.
b) Tabelul de cîştiguri a loteriei este reprezentat prin tabelul de numere cîştigătoare a1, …, an şi tabelul de cîştiguri în
lei p1, …, pn (pi este cîştigul pentru numărul ai (i = 1, ..., n)). Să se determine suma cîştigurilor pentru biletele cu
numerele b1, …, bm. Să se utilizeze algoritmul căutării binare.
c). Fie locul numărului b printre cele ale consecutivităţii sortate crescător a1, …, an se va alege ca cel mai îndepărtat
loc de la începutul consecutivităţii neafectînd legitatea sortării crescătoare. Să se introducă schimbări în
descrierea algoritmului de împărţire în jumătăţi şi respectiv să se rezolve problema a).

Listingul programului:

#include <iostream>
#include <fstream>
#include <ctime>
#include <cstdlib>
using namespace std;
template <class T> class array1
{
private:
T *array;
T *newArray;
int NumberElements;
public:
array1(int Number)
{
NumberElements=Number;
array=new T[NumberElements];
newArray=new T[NumberElements+1];
}
~array1()
{
delete array;
delete newArray;
}
// complet array with random number;
void CompletArray();
// sorting array

void sortArray();

void insertNewElement();
void showFunction()
{ cout<<"Starting array:";
for (int i=0;i<NumberElements;i++)
{
cout<<array[i]<<" ";
}
cout<<endl<<"Final array:";
for (int i=0;i<NumberElements+1;i++)
{
cout<<newArray[i]<<" ";
}
}

};
template <class T>
void array1<T>::CompletArray()
{ cout<<"Enter elemnets"<<endl;
for (int i=0;i<this->NumberElements;i++)
{
cin>>this->array[i];
}

}
template <class T>
void array1<T>::insertNewElement()
{ int i=0,j=0;
T element;
cout<<"Enter newElement";
cin>>element;
while(i<NumberElements+1)
{
if((element>array[j])&&(i==j))
{
newArray[i]=element;
i++;
}
else
{
newArray[i]=array[j];
i++;
j++;
}

}
}
template <class T>
void array1<T>::sortArray()
{
T number;
for(int i=0;i<NumberElements-1;i++)
{
for(int j=0;j<NumberElements-i;j++)
{
if(this->array[j]<=this->array[j+1])
{
number=array[j];
array[j]=array[j+1];
array[j+1]=number;
}
}
}
}

int main()
{
int Number;
int newElement;
cout<<"Enter number element of array:";
cin>>Number;
array1<int> Object(Number);
Object.CompletArray();
Object.sortArray();
Object.insertNewElement();
Object.showFunction();

return 0;
}

Rezultat:

Concluzii:
În această lucrare de laborator am făcut cunoștință Template
pentru clase şi funcţii.. Ne-am
familiarizat cu concept
de creştea gradului de reutilizare a codului, programului

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