Pagina 1 di 1

[RISOLTO][C++] Array calcolo delle occorrenze

Inviato: giovedì 12 maggio 2016, 18:46
da Tino-Tom
Salve a tutti, devo scrivere questo programma in c++ :

Scrivere un programma in C++ che prenda in input dall'utente n valori interi memorizzandoli in un'array.
Implementare Selection Sort e utilizzarlo per ordinare l'array. Trovare e stampare a video:
• l'array ordinato;
• il valore più piccolo, il più grande e quello col maggior numero di occorrenze.

Fino al valore più grande e più piccolo ci sono ! Il problema e che non riesco a capire come calcolare il valore col maggior numero di occorrenze. Io ho sempre inserito un numero in input e con un contatore mi sono calcolato quante volte compare, qui invece vuole sapere direttamente qual'è quello col maggior numero di occorrenze. Qualcuno potrebbe aiutarmiii :muro: :muro: :muro:

Ecco qui il mio codice cosi che potete vedere se fino al valore più piccolo e più grande è giusto

Codice: Seleziona tutto

#include<iostream>
using namespace std;
const int DIM=100;

void CaricaVettore(int v[DIM], int n){

	for(int i=0; i<n; i++)
	{
		cout<<"Inserisci il "<<i+1<<" elemento: ";
		cin>>v[i];
	}

}

void Stampa(int v[DIM], int n){

	for(int i=0; i<n; i++)
	{
		cout<<v[i]<<"\t";
	}
	cout<<endl;
}

void SelectionSort(int v[DIM], int n) {
    int min;

    for(int i=0;i<n;i++) 
    {
        min = i;
        for(int j=i+1;j<n;j++)
        {
            if(v[j] < v[min])
                min = j;
        }

    	int aux=v[i];
    	v[i]=v[min];
    	v[min]=aux;
    }
}

int RicercaMax(int v[DIM], int n){

	int max=0;

	max=v[0];
	for(int i=0; i<n; i++)
	{
		if(v[i]>max)
		{
			max=v[i];
		}
	}

	return max;
}

int RicercaMin(int v[DIM], int n){

	int min=0;

	min=v[0];
	for(int i=0; i<n; i++)
	{
		if(v[i]<min)
		{
			min=v[i];
		}
	}

	return min;
}

int main(){

	int vett[DIM], n;

	cout<<"Inserisci dimensione vettore: ";
	cin>>n;
	cout<<endl;

	CaricaVettore(vett,n);

	cout<<"\n***ECCO IL VETTORE***"<<endl;
	Stampa(vett,n);

	cout<<"\n***ECCO IL VETTORE ORDINATO***"<<endl;
	SelectionSort(vett,n);
	Stampa(vett,n);

	cout<<"\nIl valore piu' grande e': "<<RicercaMax(vett,n)<<endl;
	cout<<"Il valore piu' piccolo e': "<<RicercaMin(vett,n)<<endl<<endl;

}

Re: [C++] Array calcolo valore col maggior numero di occorre

Inviato: giovedì 12 maggio 2016, 19:21
da SuperStep
per calcolare il valore con il maggior numero di occorrenze basta creare una struttura di tipo matrice (prima righa numero, seconda riga occorrenze) oppure un HashMap (numero, occorrenze) dove vai a riportare iterando sul vettore le occorrenze di ogni numero, dopo di che', fai una ricerca delle occorrenze maggiori e prendi il numero associato.

Re: [C++] Array calcolo valore col maggior numero di occorre

Inviato: giovedì 12 maggio 2016, 20:06
da Tino-Tom
Potresti farmi vedere un'esempio ? Ancora sono alle prime armi e non capisco bene come si fa :cry:

Re: [C++] Array calcolo valore col maggior numero di occorre

Inviato: venerdì 13 maggio 2016, 15:11
da SuperStep
certo, eccolo:

Codice: Seleziona tutto

#include <iostream>

using namespace std;

const int DIM = 10;

int array  [DIM] = {0,1,2,3,3,3,4,4,8,9}; //inserisco qui l'arrai in modo che hai un esempio visibile, il 3 e' il numero con il maggior numero di occorrenze
int matrix [DIM][2];

/**
 * Questa funzione calcola le occorrenze di un array di 
 * dimensione @param2 e le posiziona in una matrice @param3
 * --------------------------
 * @param 1 - dimensione array/matrix(MAX)
 * @param 2 - array
 * @param 3 - matrice
 */
void calcolaOccorrenze(int, int [], int [DIM][2]);

/**
 * Questa funzione cerca un determinato elemento in una matrice
 * con dimensione passata come argomento
 * -------------------------- 
 * @param 1 - dimensione matrice
 * @param 2 - matrice
 * @param 3 - elemento da cercare
 * @return  - La posizione dell'elemento oppure -1 se non esiste
 */
int  exists(int, int[DIM][2], int);

/**
 * Questa funzione manda su stdout
 * il contenuto della matrice @param2
 * --------------------------
 * @param 1 - dimensione matrice
 * @param 2 - matrice
 */
void printMatrix(int, int[DIM][2]);

int
main(int argc, char * argv [])
{
	
	calcolaOccorrenze(DIM, array, matrix);
}

void
calcolaOccorrenze(int size, int a[], int b[DIM][2]){
	int i, matrixSize = 0;
	int pos;	
	for(int i=0; i<size; i++){
	    pos = -1;
		if((pos = exists(matrixSize,b,a[i])) == -1){
			b[matrixSize][0] = a[i]; //Setto il numero
			b[matrixSize][1] = 1;    //Setto le occorrenze (1 inizialmente)

			matrixSize ++;
		}
		else {
			b[pos][1]++; //Incremento le occorrenze
		}
	}

	printMatrix(matrixSize,b);
}

int
exists(int size, int matrix[DIM][2], int num){
	int i;

	for(i=0; i<size; i++){
		if(matrix[i][0] == num) return i;
	}

	return -1;
}

void
printMatrix(int size, int matrix[DIM][2]){
	int i;
	for(i=0; i<size; i++){
		cout << "il numero " << matrix[i][0] << " possiede " << matrix[i][1] << " Occorrenze." << endl;
	}
}
questo e' l'esempio di output:

Codice: Seleziona tutto

il numero 0 possiede 1 Occorrenze.
il numero 1 possiede 1 Occorrenze.
il numero 2 possiede 1 Occorrenze.
il numero 3 possiede 3 Occorrenze.
il numero 4 possiede 2 Occorrenze.
il numero 8 possiede 1 Occorrenze.
il numero 9 possiede 1 Occorrenze.
lascio a te l'arduo compito di prendere il numero con il piu' alto numero di occorrenze (in questo caso il numero 3 con 3 occorrenze) e farne cio' che vuoi.

Re: [C++] Array calcolo valore col maggior numero di occorre

Inviato: sabato 14 maggio 2016, 14:29
da Tino-Tom
Grazie mille dell'aiuto :D :D