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?

codice:
#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_inserito;
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";
}