c calcolare in numero dei voti di un atleta

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Scrivi risposta
Avatar utente
fenics
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 640
Iscrizione: giovedì 20 agosto 2009, 10:09
Contatti:

c calcolare in numero dei voti di un atleta

Messaggio da fenics »

Salve a tutti, per la verifica di informatica alla mia scuola devo fare un programma in cui io giudice assegno per 5 atleti dei punteggi. Il programma mi stampa il numero del punteggo che è presente + volte
e io ho fatto così, solo che il risultato non porta:

Codice: Seleziona tutto

#include<stdio.h>

#define ATLETI 5
int main()
{
    int vet[ATLETI]={1,2,3,4,5};
    int i, p=0, c=0;

    printf("Assegna 5 voti\n");

    for(i=1; i<=ATLETI; i++)
        {
            scanf("%8d",&vet[i]);
            printf("%s%15s\n","Atleta","Punteggio");
            printf("%6d%15d\n",i,vet[i]);

            if(vet[i]==p)
            {
            c=c+1;
            }
        }
            printf("\nIl voto %d e' assegnato %d volte\n",p,c);

            return 0;
}
es: se io assegno 6, 5, 7, 6,9, lui mi calcola solo l'ultimo, oppure se metto 5 volte "6" mi dice che il 6 è presente solo una volta
Avatar utente
ienaplinsky
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 954
Iscrizione: giovedì 21 gennaio 2010, 9:56
Località: Napoli

Re: c calcolare in numero dei voti di un atleta

Messaggio da ienaplinsky »

ciao allora incominciamo dagli errori il vettore contiene 5 elementi con indici che vanno da 0 a 4

Codice: Seleziona tutto

vet[ATLETI];
nel for parti da 1 e finisci a 5 salvando in aeree di memoria che non hai allocato quando accedi a vet[5] quindi il for da cosi

Codice: Seleziona tutto

for(i=1; i<=ATLETI; i++)
diventa

Codice: Seleziona tutto

for(i=0; i<ATLETI; i++)
poi

Codice: Seleziona tutto

if(vet[i]==p)
            {
            c=c+1;
            }
p lo inizializzi a 0, quindi se non inserisci un numero uguale a 0 per i voti nell if non ci entrerai mai e c non sarà mai incrementato.
suggerimenti per risolvere l' esercizio
se sai il range dei voti (ad esempio da 1 a 10), puoi crearti un array di frequenze di 10 elementi, e ogni volta che esce un voto aumenti l' elemento dell' array che ha come indice quel voto, ricordandoti sempre di salvare l' indice dell' elemento che ha frequenza massima. In questo modo puoi anche estrarre voti che hanno la stessa frequenza, ad esempio se inserisci 2 volte 1 e 2 volte 2 sei in grado di dire all' utente che due voti hanno la stessa frequenza e quali sono, se il range dei voti non lo conosci o scansioni il vettore dei voti in cerca del voto più frequente oppure usi la stessa tecnica di sopra con un array di frequenze più grande
Avatar utente
fenics
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 640
Iscrizione: giovedì 20 agosto 2009, 10:09
Contatti:

Re: c calcolare in numero dei voti di un atleta

Messaggio da fenics »

non ho capito come pèrocedere con il programma. Mi faresti un esempio?? O mi dici tu come fare di modo che poi io studio su il tuo codice??
Avatar utente
ienaplinsky
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 954
Iscrizione: giovedì 21 gennaio 2010, 9:56
Località: Napoli

Re: c calcolare in numero dei voti di un atleta

Messaggio da ienaplinsky »

supponiamo che i voti ammissibili sono i numeri da 1 a 10, crei un array di frequenze[10] (inizializzando tutti gli elementi a 0), un indice per ricordarti la frequenza massima (lo inizializzi a -1 ad esempio), entri nel for l' utente inserisce un voto lo salvi nel vettore dei voti, aumenti di uno frequenza[voto_appena_inserito - 1]++(-1 sempre per il discorso che si parte da 0), se l' indice che contiene il voto massimo è uguale a -1 allora salvi il voto appena inserito nell' indice, altrimenti controlli se la frequenza[indice - 1] < frequenza[voto_appena_inserito - 1] sovrascrivi indice con il voto appena inserito
Avatar utente
fenics
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 640
Iscrizione: giovedì 20 agosto 2009, 10:09
Contatti:

Re: c calcolare in numero dei voti di un atleta

Messaggio da fenics »

in pratica devo rifare tutto il programma allora
Avatar utente
ienaplinsky
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 954
Iscrizione: giovedì 21 gennaio 2010, 9:56
Località: Napoli

Re: c calcolare in numero dei voti di un atleta

Messaggio da ienaplinsky »

devi aggiungere solo quello che ti ho detto, prova ad implementarlo se poi hai problemi ti aiuto inzia a buttare giù qualcosa
Avatar utente
fenics
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 640
Iscrizione: giovedì 20 agosto 2009, 10:09
Contatti:

Re: c calcolare in numero dei voti di un atleta

Messaggio da fenics »

Codice: Seleziona tutto

#include<stdio.h>

#define ATLETI 5

int main()
{
    int vet[ATLETI]={1,2,3,4,5};
    int occorrenze[10];
    int i, p=0;

    printf("Assegna 5 voti\n");

    for(i=0; i<ATLETI; i++)
        {
            scanf("%8d",&vet[i]);
            printf("%s%15s\n","Atleta","Punteggio");
            printf("%6d%15d\n",i,vet[i]);

            for(occorrenze[10]=-1; p<occorrenze[10]; occorrenze[-1]++)
            {
                printf("%d",occorrenze[5]);
            }
            if(occorrenze[i]==-1)
            printf("\nIl voto %d e' assegnato %d volte\n",p,occorrenze[5]);
        }
            return 0;
}
ci sono quasi??
Avatar utente
ienaplinsky
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 954
Iscrizione: giovedì 21 gennaio 2010, 9:56
Località: Napoli

Re: c calcolare in numero dei voti di un atleta

Messaggio da ienaplinsky »

Codice: Seleziona tutto

for(occorrenze[10]=-1; p<occorrenze[10]; occorrenze[-1]++)
            {
                printf("%d",occorrenze[5]);
            }
            if(occorrenze[i]==-1)
            printf("\nIl voto %d e' assegnato %d volte\n",p,occorrenze[5]);
ci sono molti errori occorrenze[10] e occorrenze[-1] non fanno parte dell' array, ripeto gli indici vanno da 0 a 9, poi questo for dipende da quello che c'era nelle zone di memoria che non sono state inizializzate, p vale 0 non cambia mai, poi perchè stampare occorrenze[5]

io intendevo qualcosa del genere

Codice: Seleziona tutto

#include<stdio.h>

#define ATLETI 5
#define VOTI 10 // range dei voti da 1 a 10
int main()
{
  int voto, frequenzaVoti[VOTI] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; // l' array va inizializzato
  int indiceFrequenzaMax = -1, i;
  
  printf("Assegna 5 voti\n");
 
  for(i=0; i<ATLETI; i++)
    {
      // ti assicuri che non venga inserito input indesiderato
      do {
	       scanf("%8d", &voto);
      } while(voto < 1 || voto > 10);
      
      printf("%s%15s\n","Atleta","Punteggio");
      printf("%6d%15d\n",i + 1,voto);
      frequenzaVoti[voto - 1]++;
      // se l' indice è uguale a -1 allora è il primo giro 
      // e lo poni uguale all' unico voto inserito
      if(indiceFrequenzaMax == -1) {
	        indiceFrequenzaMax = voto - 1;
      } // altrimenti controlli se la frequenza del voto inserito è maggiore di quella attualmetne massima
      else if(frequenzaVoti[indiceFrequenzaMax] < frequenzaVoti[voto - 1]) {
	        indiceFrequenzaMax = voto - 1;
      }
      
    }
  
  // serve se vuoi ammettere che possono essere più voti con la stessa frequenza
  for(i = 0; i < VOTI; i++) {
    if(frequenzaVoti[i] == frequenzaVoti[indiceFrequenzaMax]) {
      printf("\nIl voto %d e' assegnato %d volte\n", i + 1, frequenzaVoti[indiceFrequenzaMax]);
    }
  }
  
  
  return 0;
}
Avatar utente
fenics
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 640
Iscrizione: giovedì 20 agosto 2009, 10:09
Contatti:

Re: c calcolare in numero dei voti di un atleta

Messaggio da fenics »

Non ci sarei mai arrivato. Ora mi studio il codice e vedo di rifarlo senza guardare. Beh Grazie 1000, un cosa, l'istruzione do cosa fa esattamente??
Avatar utente
ienaplinsky
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 954
Iscrizione: giovedì 21 gennaio 2010, 9:56
Località: Napoli

Re: c calcolare in numero dei voti di un atleta

Messaggio da ienaplinsky »

è un costrutto del c tipo il while solo che il do while viene eseguito almeno una vota
maggiori info
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 6 ospiti