Occorrenze

di il
10 risposte

Occorrenze

Ciao a tutti. Pongo subito il problema: Ho creato un programma in c che
conta le occorrenze di ogni numero inserito. Il programma funge ma vorrei
che mi visualizzasse per ogni intero il numero totale delle occorrenze di quel
intero; per esempio anzichè intero 2 = 1 occorrenza, intero 2 = 2 occorrenza...
Vi mostro qui il programma:

/*Conta occorrenze in un array di 10 interi positivi*/

#include <stdio.h>

#define N 10

main()
{
int i, h, vet[N], freq[N]={0};

printf("Inserire %d interi: \n", N);

for(i=0; i<N; i++){
printf("Nr.%d = ", i+1);
scanf("%d", &vet);
}

printf("\n\n");

for(h=0; h<N; h++){
++freq[vet[h]];
if(vet[h] == vet[h+1])
vet[h++];
printf("%d = %6d\n", vet[h], freq[vet[h]);
}

printf("\n\n");

return 0;

}

Se qualcuno mi può aiutare gli sarei molto grato.
grazie

10 Risposte

  • Re: Occorrenze

    Prima di tutto inserisci il codice tra i tag code.
    spiegati meglio perchè sinceramente non ho inteso quale sia il problema
  • Re: Occorrenze

    Grazie d'avermi risposto Net_Raider. Mi spiego meglio: se in un vettore ho il 4
    3 volte, il 2 5 volte... vorrei che quando stampo a video il suddetto vettore di 10 elementi
    apparisse un solo 4 e 3 come numero di occorrenze, e un solo 2 e 5 come numero di occorrenze;
    Spero di essermi spiegato bene.
    un esempio di output:
    vettore[10]
    2
    4
    5
    7
    2
    4
    4
    2
    2
    2

    frequenze:
    2 = 5
    4 = 3
    5 = 1
    7 = 1
    Grazie
  • Re: Occorrenze

    Vediamo se ho capito:
    devi fare un programma che dati un certo numero di interi, il programma calcoli e restituisca la frequenza di ogni numero, giusto?
    ora, l'output che tu vuoi ottenere è del tipo:
    il numero x0 è ripetuto y0 volte
    il numero x1 è ripetuto y1 volte
    il numero x2 è ripetuto y2 volte

    ho capito bene?
  • Re: Occorrenze

    Esattamente così. E' ciò che vorrei che facesse ma non ricordo la procedura per
    fare ciò; se tu mi potessi aiutare a risolvere questo problema te ne sarei grato...
    Grazie per l'interessamento...ciao
  • Re: Occorrenze

    Una domanda... ma gli interi inseriti possono essere maggiori di 'N' ?

    Saluti,
    Max
  • Re: Occorrenze

    Ciao Max. 'N' si riferisce alla lunghezza massima dell'array. Esso, quindi può contenere
    da 0 interi a n-1 interi. L'array ospiterà qualsiasi intero negativo o positivo.
    Il programma dovrà visualizzare in output le occorrenze di ogni numero inserito.
    Esempio: Vorrei che il programma mi visualizzasse senza ripetizioni anzichè:

    4 = 1 (occorrenza)
    4 = 2 (occorrenza)
    4 = 3 (occorrenza)

    questo:

    4 = 3 (occorrenze)

    Tutto qui!!

    Ciao
  • Re: Occorrenze

    Ixamit ha detto bene, se N = 10 e tu inserisci 121

    questa istruzione ti darà Segmentation Fault
    ++freq[vet[h]]
    perchè incrementerai freq[121] che ovviamente non esiste dato che freq ha solo 10 elementi

    una soluzione elementare sarebbe effettuare il controllo con un algoritmo di brute force, ad esempio

    questo è pseudocodice
    
    for i = 0 to N -1
         memorizza in v[i] il numero immesso da tastiera
    
    for i = 0 to N - 1
         for j = 0 to N - 1
              if(v[i] == v[j]) then freq[i]++
    
    for i = 0 to N - 1
         printf("%d si ripete %d volte\n", v[i], freq[i]);
    
    implementa questo codice in c
  • Re: Occorrenze

    Grazie di nuovo Net_Raider. Non sono piu' entrato nel forum per via
    l'esame di fondamenti;
    Provero' questo codice in c e poi ti faro' sapere.
    Mi sei stato molto d' aiuto, Grazie a presto
  • Re: Occorrenze

    E di che
  • Re: Occorrenze

    Ciao, il problema del pseudocodice scritto da Net_Rider è che viene ripetuta la visualizzazione di numeri già contati. Un'alternativa può essere il seguente:
    
    /*Conta occorrenze in un array di 10 interi positivi*/
    
    #include <stdio.h>
    
    #define N 10
    
    main()
    {
    int i, h, vet[N], freq[N]={0};
    bool flag;
    
    printf("Inserire %d interi: \n", N);
    
    for(i=0; i<N; i++){
    printf("Nr.%d = ", i+1);
    scanf("%d", &vet[i]);
    }
    
    printf("\n\n");
    
    
    for(h=0; h<N; h++)
    {
    	flag=0;
    	for (i=0;i<h-1;i++)
    		if (vet[h]==vet[i]) // controlla che quel numero non sia già stato considerato in precedenza
    		{flag=1; break;}
    	if (flag!=1){ // se il numero non è stato considerato in precedenza, allora conta quante volte compare nel vettore e visualizza il numero di comparse
    		freq[h]=1;
    		for (i=h+1;i<N;i++)
    	  		if(vet[h] == vet[i]) freq[h]++;
    		printf("Numero %d = visualizzato %d volte\n", vet[h], freq[h]);
    	}
    }
    
    printf("\n\n");
    
    return 0;
    
    }
    
    
    Ciao ciao
Devi accedere o registrarti per scrivere nel forum
10 risposte