Inserito elementi un array determinare il più frequente

di il
7 risposte

Inserito elementi un array determinare il più frequente

Ciao ho un problema. Ho questo esercizio : //inserisci n numeri maggiori di ESTREMOINF e minori di ESTREMOSUP (estremi inclusi) e cerca quali siano i valori più frequenti. Ho provato a realizzare il programma ma non capisco perchè non vada. Potreste darmi una mano? (sono piuttosto nabbo) Grazie
il codice è questo:
//inserisci n numeri maggiori di ESTREMOINF e minori di ESTREMOSUP (estremi inclusi) e cerca quali siano i valori più frequenti.

#include <iostream>
#include <stdio.h>
using namespace std;

#define DIM 9999 //dimensione max vettore
#define ESTREMOINF 18 //Numero minimo accettato
#define ESTREMOSUP 90 //Numero massimo accettato
	
int main(){      //funzione principale
    int i,j;
    int sentinella=0;
	int valore=0; //valore intero chiesto in input
	int elenco[DIM];
    int popular = elenco[0];
    int temp=0, tempCount, count=1;
    cout << "Enter the elements: " << endl;
    
    cout <<"inserisci il numero da inserire nell'insieme.(Deve essere compreso tra 18 e 90)"<<endl<<endl;
cout <<"Inserisci 0 se vuoi terminare l'esecuzione del programma"<<endl<<endl;

do{    //ciclo che ripeta l'inserimento
cin >> valore;
if((valore>=ESTREMOINF)and(valore<=ESTREMOSUP)){
elenco[i]=valore;
i=i+1;
}
else{
	if(valore!=0)
cout <<"Errore! Inserisci un numero compreso tra 18 e 90" <<endl;
}
}
while (valore != sentinella);

// inizio parte per verificare quale sia il numero più frequente e meno frequente
    
    
    for (i=0;i<DIM;i++)
    {
        tempCount = 0;
        temp=elenco[i];
        tempCount++;
        for(j=i+1;j<DIM;j++)
        {
            if(elenco[j] == temp)
            {
                tempCount++;
                if(tempCount > count)
                {
                    popular = temp;
                    count = tempCount;
                }
            }
        }
    }
    cout << "Il valore con la maggior frequenza e':" <<  popular;
}

7 Risposte

  • Re: Inserito elementi un array determinare il più frequente

    Scusa, ma a che serve sentinella?
    E perché usi i (senza inizializzazione) per contare il totale degli input per poi azzerare la stessa variabile nel primo for?
  • Re: Inserito elementi un array determinare il più frequente

    Weierstrass ha scritto:


    Scusa, ma a che serve sentinella?
    E perché usi i (senza inizializzazione) per contare il totale degli input per poi azzerare la stessa variabile nel primo for?
    Per quanto riguarda l'inizializzazione di i, credo di averla dimenticata. sentinella serve affinché io posso usare il programma fin quando non inserisco lo 0. Appena inserisco lo 0 me lo deve chiudere. La parte iniziale nonostante ciò funziona, l'unico problema è per quanto riguarda la frequenza massima. Sono piuttosto nuovo e sono 4 giorni che ci provo.
  • Re: Inserito elementi un array determinare il più frequente

    La parte iniziale funziona per caso: se non inizializzi i a zero rischi di scrivere in un'area di memoria a caso.
    Sentinella non serve: while(valore !=0) o direttamente while(valore)

    Sulla seconda parte ti ho già scritto che il totale degli input lo butti via e fai il ciclo su 9999 elementi. E comunque quello che fai non ha senso. Ci sono molte strade per contare la frequenza massima. Prova a fare un altro array occorrenze[ESTREMOSUP+1] e conta per ogni indice quante volta appare nell'array precedente: tutti gli indici n tali che occorrenze[n] = valore massimo sono le tue soluzioni. Non è il modo più efficiente per risolvere il problema, ma dato che sei alle prime armi...
  • Re: Inserito elementi un array determinare il più frequente

    Weierstrass ha scritto:


    La parte iniziale funziona per caso: se non inizializzi i a zero rischi di scrivere in un'area di memoria a caso.
    Sentinella non serve: while(valore !=0) o direttamente while(valore)

    Sulla seconda parte ti ho già scritto che il totale degli input lo butti via e fai il ciclo su 9999 elementi. E comunque quello che fai non ha senso. Ci sono molte strade per contare la frequenza massima. Prova a fare un altro array occorrenze[ESTREMOSUP+1] e conta per ogni indice quante volta appare nell'array precedente: tutti gli indici n tali che occorrenze[n] = valore massimo sono le tue soluzioni. Non è il modo più efficiente per risolvere il problema, ma dato che sei alle prime armi...
    Devo far si che sentinella sia una costante in modo tale che nel caso volessi modificare il valore, basta farlo all'inizio e non in tutto il programma. In questo caso sentinella é uguale a 0. Per la seconda parte invece non ho capito come calcolare la massima frequenza. Poi ho inizializzato, mi ero solo dimenticato.
  • Re: Inserito elementi un array determinare il più frequente

    ThatsViraaa ha scritto:


    Weierstrass ha scritto:


    La parte iniziale funziona per caso: se non inizializzi i a zero rischi di scrivere in un'area di memoria a caso.
    Sentinella non serve: while(valore !=0) o direttamente while(valore)

    Sulla seconda parte ti ho già scritto che il totale degli input lo butti via e fai il ciclo su 9999 elementi. E comunque quello che fai non ha senso. Ci sono molte strade per contare la frequenza massima. Prova a fare un altro array occorrenze[ESTREMOSUP+1] e conta per ogni indice quante volta appare nell'array precedente: tutti gli indici n tali che occorrenze[n] = valore massimo sono le tue soluzioni. Non è il modo più efficiente per risolvere il problema, ma dato che sei alle prime armi...
    Devo far si che sentinella sia una costante in modo tale che nel caso volessi modificare il valore, basta farlo all'inizio e non in tutto il programma. In questo caso sentinella é uguale a 0.
    Allora devi fare una #define e il tuo while diventerà qualcosa tipo while (valore != ESCAPE_KEY), di certo non è la strada più sensata usare una variabile inutile, che poi il codice diventa illeggibile e inefficiente. E comunque non sei coerente con te stesso, visto che dovresti comunque modificare tutte le stringhe a monte tipo "Inserisci 0 se vuoi terminare l'esecuzione del programma" o "Errore! Inserisci un numero compreso tra 18 e 90"
    Per la seconda parte invece non ho capito come calcolare la massima frequenza.
    Questo sta a te farlo. Trova il valore massimo dell'array occorrenze
    #include <iostream>
    #include <stdio.h>
    using namespace std;
    
    #define ESTREMOINF 18 //Numero minimo accettato
    #define ESTREMOSUP 90 //Numero massimo accettato
    #define ESCAPE_KEY 0
    	
    int main(){
        int valore = ESCAPE_KEY; //valore intero chiesto in input
        int occorrenze[ESTREMOSUP + 1] = {0};
    
        cout <<"Inserisci gli elementi della sequenza (devono essere valori compresi tra " << ESTREMOINF << " e " << ESTREMOSUP <<")"<<endl<<endl;
        cout <<"Inserisci " << ESCAPE_KEY << " se vuoi terminare l'esecuzione del programma"<<endl<<endl;
    
        do{    //ciclo che ripeta l'inserimento
            cin >> valore;
            if(valore>=ESTREMOINF && valore<=ESTREMOSUP)
                occorrenze[valore]++;
            else
                if(valore!=ESCAPE_KEY)
                    cout <<"Errore! Inserisci un numero compreso tra " << ESTREMOINF << " e " << ESTREMOSUP <<endl;
        }while (valore!=ESCAPE_KEY);
    
        return 0;
    }
  • Re: Inserito elementi un array determinare il più frequente

    Ora dico come lo risolverei io:
    Variabili necessarie: l'array originale, un secondo array di pari lunghezza a tutti 0, un contatore a, un contatore b variabile massimo.
    Punto 1: capire quanti elementi uguali ci sono:
    Ciclo for per tutto l'array (conta a)
    {
    ciclo for da a alla fine dell'array (conta b)
    {
    Se l'elemento b esimo dell'array originale é uguale all'elemento a esimo
    {
    L'elemento a esimo del secondo array sale di 1
    }}}

    2: trova a quale indice dell'array secondo corrisponde il valore massimo
    Massimo vale 0
    For su tutto l'array (conta a)
    {
    Se l'a esimo elemento dell'array é maggiore del massimo esimo elemento dell'array
    {
    Massimo=a
    }}

    3: stampare il risultato: il valore più frequente é quello corrispondente al massimo esimo elemento dell'array proncipale.

    Dove sbaglio?
  • Re: Inserito elementi un array determinare il più frequente

    Tralasciamo per il momento l'algoritmo che hai riportato, ma perché dici "dove sbaglio"? Hai tradotto il tutto in codice e ti sei accorto che non funziona?
Devi accedere o registrarti per scrivere nel forum
7 risposte