PDA

Visualizza la versione completa : [C++] Programma media alunni


pongo
19-02-2014, 14:37
Programma che fa uso dei vettori per fare alcune operazioni sui voti degli alunni:

non va la funzione numero 4 per la ricerca della posizione di un certo valore nel vettore e non va nemmeno il calcolo della media, potete correggere gli errori presenti in questo codice per favore? Passando i vettori per indirizzo alle funzioni codeblocks bloccava la compilazione, cosa comporta il passarli per valore?


#include <iostream>

using namespace std;

const int max_alunni= 32;
int voti[max_alunni];
int i,somma_voti, num_alunni, quanti_sopra_media,cerca_voto,posizione,voto_inser ito;
float media;

//procedura per il caricamento degli elementi del vettore
void carica_vettore(int vet[], int n)
{
int i;
for(i=0;i<n;i++)
{
cout<<"Inserisci voto n: "<<i+1<<" ";
cin>>vet[i];
}
}
//funzione per determinare il valore minimo presente nel vettore
int posizione_min(int vet[], int n)
{
int pos_min=0;
for(i=0;i<n;i++)
{
if(vet[i]<vet[pos_min])
pos_min= i;
}
return pos_min;
}

//funzione per determinare il valore massimo presente nel vettore
int posizione_max(int vet[], int n)
{
int pos_max=0;
for(i=1;i<n;i++)
{
if(vet[i]>vet[pos_max])
pos_max= i;
}
return pos_max;
}

//funzione per la ricerca di un valore nel vettore
int cerca_vettore(int vet[], int n, int cercato)//restituisce il primo voto trovato
{
int posizione=0;
do
{
if(vet[i]==cercato)
posizione= i;
i=i+1;
}while(i!=n or posizione==0);
return posizione;
}

//funzione per l'ordinamento del vettore mediante algoritmo di scambio semplice(bubble sort)
void bubble_sort(int vet[], int n)
{
int i,j,tmp;
for(i=0;i<n;i++)
{
for(j=0;j<n-1;j++)
{
if(vet[j]>vet[j+1])
{
tmp=vet[j];
vet[j]= vet[j+1];
vet[j+1]= tmp;
}
}
}
}

//funzione che conta il numero di occorrenze di un determinato valore nel vettore
int conta_alunni(int vet[], int n, int voto_cercato)
{
int i, quanti;
for(i=0;i<n;i++)
{
if(vet[i]==voto_cercato)
quanti= quanti+1;
}
return quanti;
}
int main()
{
somma_voti=0; media=0; quanti_sopra_media=0;
cout<<"Quanti alunni ci sono?";
cin>>num_alunni;
cout<<"Inserisci ora i voti degli alunni: ";

//caricamento voti alunni
carica_vettore(voti, num_alunni);


//voto minimo e massimo
cout<<"Il voto piu basso e' " <<voti[posizione_min(voti,num_alunni)]<<" ";
cout<<"Quello piu alto e invece: " <<voti[ posizione_max(voti,num_alunni)];
cout<<endl;
posizione di inserimento di un voto
cout<<"Vuoi sapere in che posizione hai inserito un determinato voto? Inserisci il voto: ";
cin>>cerca_voto;
posizione= cerca_vettore(voti,num_alunni,cerca_voto);
if (posizione>0)
cout<<"Voto "<<cerca_voto <<"trovato in posizione "<<posizione;
else
cout<<"Voto non trovato";
cout<<endl;

//media voti
for(i=1;i<num_alunni;i++)
somma_voti=somma_voti+voti[i];
media= somma_voti/num_alunni;
cout<<"La media dei voti degli alunni e': " <<media;
cout<<endl;

//quanti alunni hanno un voto sopra la media

for(i=0;i<num_alunni;i++)
if(voti[i]>media)
quanti_sopra_media=quanti_sopra_media+1;


cout<<"Ci sono " <<quanti_sopra_media<<" voti sopra la media";

//ordinamento voti in ordine crescente

cout<<"I voti inseriti in ordine crescente sono i seguenti: ";

bubble_sort(voti,num_alunni);

for(i=0;i<num_alunni;i++)
cout<<" "<<voti[i];

//numero di alunni che hanno preso un certo voto
cout<<"Vuoi sapere quanti alunni hanno preso un determinato voto? Inserisci un voto da 1 a 10:";
cin>>voto_inserito;

cout<<"Hanno preso il voto: "<<voto_inserito<<" "<<conta_alunni(voti,num_alunni,voto_inserito)<<"alunni";
}

LeleFT
19-02-2014, 14:42
Un primo errore:




int cerca_vettore(int vet[], int n, int cercato)//restituisce il primo voto trovato
{
int posizione=0;
do
{
if(vet[i]==cercato)
posizione= i;
i=i+1;
}while(i!=n or posizione==0);
return posizione;
}



L'OR logico si fa con il doppio pipe... ma questo dovrebbe dare un errore in compilazione, quindi non dovrebbe nemmeno "partire".


Ciao. :ciauz:

pongo
19-02-2014, 16:10
Grazie, lo compilava uguale code blocks, comunque anche inserendo il doppio pipe(||) al posto di or il programma continua ad andare in crash quando viene chiesto di voler sapere in che posizione si trova un determinato voto. Per quanto riguarda il passaggio degli array alle funzioni di default avviene per indirizzo giusto? Cioč viene passato il puntatore al primo elemento dell'array usando la notazione di questo codice vero?

Loading