C, stampa a video di un array senza ripetizioni

di il
6 risposte

C, stampa a video di un array senza ripetizioni

Salve a tutti! Sto avendo dei problemi nella scrittura di questo programma, in particolare non riesco a trovare il modo di stampare a video la sequenza di numeri senza ripetizioni, dato che trovare la frequenza di apparizione per ciascun elemento è una questione abbastanza elementare. Qualcuno è così gentile da aiutarmi? Sto letteralmente impazzendo! Grazie a tutti!
Il testo dell'esercizio è questo:
"Si sviluppi un programma in linguaggio C che riceva in ingresso una sequenza di al più 100
numeri interi diversi da zero, terminata da uno zero, e mostri a video la sequenza dei numeri distinti
(senza ripetizioni) ricevuti, ciascuno accompagnato dalla frequenza di apparizione nella sequenza
d’ingresso.
Ad esempio, se si riceve la sequenza:
12 10 -8 10 10 12 3 0
il programma dovrà mostrare a video:
12: 28.6%
10: 42.8%
-8: 14.3%
3: 14.3%"
Io sono a questo punto (per ora mi son disinteressato della condizione di fine inserimento se l'utente inserisce 0, prima voglio capire come mandare a video la sequenza senza ripetizioni )
#include <stdio.h>
#define DIM 100

void trovaFrequenza(int vettore[], int dimensione)
{
	int i, j;
	float frequenza;
	float percentuale;
	for(i=0; i<dimensione; i++)
	{
		frequenza = 0;
		for(j=0; j<dimensione; j++)
		{
			if(vettore[i] == vettore[j])
				frequenza++;
		}
		percentuale = (frequenza/dimensione)*100;
	}
printf("[%d]: %.2f\n", vettore[i], percentuale);
}
int main()
{
	int vettore[DIM];
	int i;
	int k;
	printf("Inserire un vettore di %d interi:\n", DIM);
	for(i=0; i<DIM; i++)
	{
		scanf("%d", &vettore[i]);
	}
	
	for(i=0; i<k; i++)
	{
		printf("[%d]", vettore[i]);
	}
	trovaFrequenza(vettore, DIM);
	return 0;
}

6 Risposte

  • Re: C, stampa a video di un array senza ripetizioni

    Ti do un consiglio: Man mano che acquisisci i valori incrementa le occorrenze. Se non hai imparato le strutture usa un altro vettore per le occorrenze. Quindi avrai V[100] per i numeri e OCC[100] per le occorrenze. così non devi fare altro che dividere il valore di OCC con il totale dei numeri acquisiti. Ad ogni acquisizione vai ad incrementare il valore delle occorrenze se il numero esiste oppure inserisci il nuovo numero in V e metti OCC a 1.
  • Re: C, stampa a video di un array senza ripetizioni

    Non riesco bene a capire cosa fare, cioè io arrivo al punto di avere i due array V[100] e OCC[100] però non ho ben capito il collegamento tra V e OCC...
  • Re: C, stampa a video di un array senza ripetizioni

    Pseudocodice:

    inserisci un numero (diciamo l'iesimo)
    cerca nel vett il numero
    se il numero esiste in vett
    occ++;
    altrimenti
    vett = numero
    occ = 1;
    i++;
  • Re: C, stampa a video di un array senza ripetizioni

    Sarà che sono ottuso, ma proprio non riesco a capire..le ho provate tutte (array di float contenente tutte le frequenze, ecc) ma proprio non mi esce e non lo capisco..pazienza passerò al prossimo
  • Re: C, stampa a video di un array senza ripetizioni

    Cmq mi riferivo ad una cosa così
    #include <stdio.h>
    #define DIM 100
    
    int cercaValore( int v[], int dim,int valore ) 
    {
    	int i = 0;
    	for(i = 0; i < dim; i++)
    	{
    		if(v[i]  ==  valore)
    			return i;
    	}
    	return -1;
    }
    
    int main()
    {
    	int vettore[DIM] = {0};
    	int occ[DIM]= {0};
    	int indice = 0;
    	int valore = 0;
    	int ret = -1;
    	int i;
    	int valori = 0;
    
    	printf("Inserire un vettore di interi:\n0 per interrompere\n");
    	for(indice=0; indice < DIM; indice++,valori++)
    	{
    		scanf("%d", &valore);
    		if(valore == 0)
    			break;
    		ret = cercaValore(vettore,indice,valore);
    		if(ret != -1)
    		{
    			occ[ret]++;
    			indice--;
    		}
    		else
    		{
    			vettore[indice] = valore;
    			occ[indice] = 1;
    		}
    	}
    
    	for(i =  0; i < indice; i++)
    	{
    		printf("%d: %.2f%%\n",vettore[i],100 * ((float)occ[i])/valori);
    	}
    	return 0;
    }
  • Re: C, stampa a video di un array senza ripetizioni

    Grazie mille!! non ci sarei mai arrivato, stavo impazzendo ahahah
Devi accedere o registrarti per scrivere nel forum
6 risposte