Răspuns :
Răspuns:
#include <iostream>
#include <chrono>
#include <random>
constexpr int DIMENSIUNE_SET_UNU{49}, DIMENSIUNE_SET_DOI{6};
static int *creareSetNumere()
{
unsigned varSeed = std::chrono::steady_clock::now().time_since_epoch().count();
std::default_random_engine randomEngine(varSeed);
std::uniform_int_distribution<int> uniformIntDistribution(1, 100);
int *setNumere = new int[DIMENSIUNE_SET_UNU];
for (int i = 0; i < DIMENSIUNE_SET_UNU; i++)
setNumere[i] = uniformIntDistribution(randomEngine);
return setNumere;
}
static int *preluare6Numere(int *setNumere)
{
unsigned varSeed = std::chrono::steady_clock::now().time_since_epoch().count();
std::default_random_engine randomEngine(varSeed);
std::uniform_int_distribution<int> uniformIntDistribution(0, DIMENSIUNE_SET_UNU - 1);
int *setCu6Numere = new int[DIMENSIUNE_SET_DOI];
for (int i = 0; i < DIMENSIUNE_SET_DOI; i++)
setCu6Numere[i] = setNumere[uniformIntDistribution(randomEngine)];
return setCu6Numere;
}
static void swapNumere(int &primulNumar, int &alDoileaNumar)
{
int nrTemp = primulNumar;
primulNumar = alDoileaNumar;
alDoileaNumar = nrTemp;
}
static void selectionSort(int *setDeNumere, int dimensiuneSet)
{
int indexMinim{};
for (int i = 0; i < dimensiuneSet - 1; i++)
{
indexMinim = i;
for (int j = i + 1; j < dimensiuneSet; j++)
if (setDeNumere[j] < setDeNumere[indexMinim])
indexMinim = j;
swapNumere(setDeNumere[indexMinim], setDeNumere[i]);
}
}
static void afisareSirNumere(int *sirNumere, int dimensiuneNumere)
{
for (int i = 0; i < dimensiuneNumere; i++)
std::cout << sirNumere[i] << " ";
std::cout << std::endl;
}
static void elibereazaMemoria(int *setNumereInitial, int *noulSet)
{
delete[] setNumereInitial;
delete[] noulSet;
}
int main()
{
int *setNumereInitial = creareSetNumere();
std::cout << "Setul initial >> ";
afisareSirNumere(setNumereInitial, DIMENSIUNE_SET_UNU);
int *noulSet = preluare6Numere(setNumereInitial);
std::cout << "Setul cu cele 6 numere luate random din primul set inainte de sortare >> ";
afisareSirNumere(noulSet, DIMENSIUNE_SET_DOI);
std::cout << "Setul cu cele 6 numere luate random din primul set dupa sortare >> ";
selectionSort(noulSet, DIMENSIUNE_SET_DOI);
afisareSirNumere(noulSet, DIMENSIUNE_SET_DOI);
elibereazaMemoria(setNumereInitial, noulSet);
return 0;
}
Explicație:
- creareSetNumere(...) alocă o zonă de memorie în care salvăm 49 de numere generate random ( ca să nu le introducem noi de la tastatură ).
- preluare6Numere(...) alocă o zonă de memorie în care vom salva 6 numere pe care le vom prelua din cele 49 salvate anterior folosindu-ne de un index generat random cu valori între 0 și 48.
- afisareSirNumere(...) afișează numerele din interiorul zonelor de memorie.
- selectionSort(...) o să sorteze crescător zona cu cele 6 numere ( vezi mai multe detalii pe net despre cum funcționează algoritmul )
- swapNumere(...) interschimbă valorile variabilelor intre ele.
- elibereazaMemoria(...) eliberează zonele de memorie alocate dinamic deoarece întotdeauna când aloci dinamic pe HEAP trebuie să și dealoci din moment ce C++ nu are un Garbage Collector care să se ocupe cu asta.
Vă mulțumim că ați ales să vizitați site-ul nostru dedicat Informatică. Sperăm că informațiile disponibile v-au fost utile. Dacă aveți întrebări sau aveți nevoie de asistență suplimentară, vă rugăm să ne contactați. Revenirea dumneavoastră ne va bucura, iar pentru acces rapid, nu uitați să ne salvați la favorite!