Să se scrie o aplicaţie C/C++ care alocă dinamic memorie necesară pentru stocarea a
n<=10.000 de numere întregi. Programul iniţializează numerele cu valori aleatoare
între 1 şi Max<=100 (folosiţi funcţiile srand() şi/sau rand() în VC++). Scrieţi o
funcţie care afişează cele mai frecvente k<=10 numere şi numărul lor de apariţii în
tabloul iniţial.
Răspunsuri la întrebare
Răspuns:
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
const int MAX_NUMBERS = 10000; // numarul maxim de numere
const int MAX_VALUE = 100; // valoarea maxima a numerelor
const int K = 10; // numarul de numere cele mai frecvente
// functia care aloca dinamic memorie pentru un vector de numere
int *allocateNumbers(int n)
{
int *numbers = new int[n];
return numbers;
}
// functia care initializeaza vectorul cu numere aleatoare
void initializeNumbers(int *numbers, int n)
{
srand(time(NULL)); // initializam generatorul de numere aleatoare
for (int i = 0; i < n; i++)
{
numbers[i] = rand() % MAX_VALUE + 1; // generam un numar aleator intre 1 si MAX_VALUE
}
}
// functia care afiseaza cele mai frecvente k numere si numarul lor de aparitii in vector
void displayMostFrequentNumbers(int *numbers, int n, int k)
{
// vector pentru a stoca frecventa numerelor
int frequency[MAX_VALUE + 1] = {0};
// calculam frecventa fiecarui numar
for (int i = 0; i < n; i++)
{
frequency[numbers[i]]++;
}
// afisam cele mai frecvente k numere si numarul lor de aparitii
cout << "Cele mai frecvente " << k << " numere si numarul lor de aparitii:" << endl;
for (int i = 1; i <= MAX_VALUE; i++)
{
if (k == 0)
{
break;
}
// afisam numarul si numarul lui de aparitii doar daca frecventa este mai mare decat 0
if (frequency[i] > 0)
{
cout << i << ": " << frequency[i] << endl;
k--;
}
}
}
int main()
{
int n;
cout << "Introduceti numarul de numere: ";
cin >> n;
int *numbers = allocateNumbers(n);
initializeNumbers(numbers, n);
int k;
cout << "Introduceti numarul de numere cele mai frecvente care doriti sa fie afisate: ";
cin >> k;
displayMostFrequentNumbers(numbers, n, k);
delete[] numbers;
return 0;
}
Explicație:
Daca vrei sa ai alta functie de random poti schimba