Esercizio semplice è contare quante volte un singolo numero si ripete all’interno di un vettore. Leggermente più ostico è contare le ripetizioni di tutti i numeri presenti nel vettore di partenza e tenerne memoria in altre strutture dati di supporto.
L’idea è semplice. Prendiamo un vettore di esempio con i seguenti valori
2 2 1 3 2 5 6 5 7 5 2
Prendendo ogni singolo numero, contiamo le ripetizioni ottenendo:
2 si ripete 4 volte
1 si ripete 1 volta
3 si ripete 1 volta
5 si ripete 2 volte
6 si ripete 1 volta
7 si ripete 1 volta
Bene, compreso il senso delle ripetizioni, vogliamo salvarci a parte un vettore con i valori individuali 2, 1, 3, 5, 6, 7 in un vettore e 4, 1,1,2,1,1 in un terzo vettore.
#include <iostream>
#include <time.h>
#include <stdlib.h>
#include <iomanip> // std::setw
using namespace std;
#define N 100
void generaVettore(int _vettore[])
{
//genero un vettore con numeri da 1 a 10
int numero;
for (int i= 0; i < N; i++)
{
numero = rand() % 10 + 1;
_vettore[i] = numero;
}
}
void inizializza(int _vettore[])
{
for(int i=0; i < N; i++)
{
_vettore[i] = 0; //inizializzo i vettori di supporto a zero
}
}
bool cerca(int _vettore[], int _numero)
{
for(int i=0; i < N; i++)
{
if(_vettore[i] == _numero)
return true;
}
return false;
}
int cercaIndice(int _vettore[], int _numero)
{
for(int i=0; i < N; i++)
{
if(_vettore[i] == _numero)
return i;
}
return -1; //torna in caso di errore
}
void stampa(int _vettore[])
{
for (int i=0; i < N; i++)
if (_vettore[i])
cout << setw(3)<<_vettore[i];
}
int main()
{
srand(time(NULL));
int indice=0;
int indiceDaAggiornare= 0;
int vettoreNumeri[N];
generaVettore(vettoreNumeri);
int vettoreModale[N];
int vettoreRipetizioni[N];
inizializza(vettoreModale);
inizializza(vettoreRipetizioni);
//comincio a scorrere il vettore dei numeri casuali
for (int i=0; i < N; i++)
{
if (!cerca(vettoreModale,vettoreNumeri[i]))
{
//non ho catalogato il numero ancora
vettoreModale[indice]= vettoreNumeri[i];
vettoreRipetizioni[indice]= 1;
indice++;
}
else
{
indiceDaAggiornare= cercaIndice(vettoreModale,vettoreNumeri[i]);
vettoreRipetizioni[indiceDaAggiornare]++;
}
}
stampa(vettoreNumeri);
cout << endl << "-------------------------------------------------------------------------"<<endl;
cout << "Vettore elementi :";
stampa(vettoreModale);
cout << endl;
cout << "Vettore ripetizioni:";
stampa(vettoreRipetizioni);
return 0;
}
Ultima modifica 5 Giugno 2022