Salve a tutti, sono un principiante che cerca di imparare qualcosa in più di questo linguaggio, e ho un grosso bisogno del vostro aiuto.
Come da titolo mi è stato dato un esercizio in cui dovevo trovare l'elemento più frequente e meno frequente di un vettore di interi.
Consultando un paio di siti (ahimé non molto chiari) e aggiungendo quel poco di conoscenza che ho del C, sono riuscito a creare un algoritmo che mi conta le frequenze di tutti i valori e mi stampa il valore più frequente, PROBLEMA: quando cerco di stampare anche il meno frequente mi stampa SEMPRE lo stesso valore più frequente di prima.
Ho provato a cambiare diversi parametri ma il risultato è sempre lo stesso, quindi essendo davvero disperato mi rivolgo a voi sperando che riusciate a chiarirmi le idee. Vi ringrazio in anticipo e spero di cuore di ricevere una soluzione al più presto.
Vi posto lo screen dell'eseguibile, e il mio algoritmo:
#include <stdlib.h>
#include <stdio.h>
int main() {
int vet[100], vetfreq[100];
int valore, i, j, conteggio,max,min;
printf("Inserisci il numero degli elementi del vettore\n");
scanf("%d", &valore);
printf("Inserisci i %d numeri seguiti da uno spazio\n", valore);
/* Legge elementi vettore */
for(i = 0; i < valore; i++){
scanf("%d", &vet);
vetfreq = -1;
}
/* Calcola la frequenza di ciasciun numero.
* per ogni elemento di vet, SE vetfreq = -1,
* significa che la frequenza non è ancora contata per quel numero
* mentre vetfreq = 0 significa che la frequenza è già contata per quel numero.
*/
for(i = 0; i < valore; i++){
conteggio = 1;
for(j = i+1; j < valore; j++){
if(vet==vet[j]) {
vetfreq[j] = 0;
conteggio++;
}
}
if(vetfreq!=0) { //Se iesimo valore del vettore conteggio è *diverso* da 0, allora assegnare conteggio a iesimo val di vettore conteggio//
vetfreq = conteggio; //cioè vuol dire che se non ha ancora contato quel valore, darà a quel valore un conteggio//
printf("valore %d: conteggio %d\n",vet, vetfreq); //mostra il conteggio delle frequenze di tutti i valori//
}
}
max = vetfreq[0];
for (i = 0; i < 100; i++){
if (vetfreq[i] > max) {
max = vet[i];
}
}
printf("\nIl valore con la frequenza massima e': %d\n", vetfreq[i]);
min = vetfreq[0];
for (i = 0; i < 100; i++){
if (vetfreq[i] < min) {
min = vet[i];
}
}
printf("\nIl valore con la frequenza minima e': %d\n", vetfreq[i]);
system("pause");
return 0;
}