Credo che l'errore sia un errore di base di interpretazione sul costrutto degli array:
sappiamo che un array va da indice 0 ad indice N.
Nel ciclo while tu scrivi:
codice:
while (i < n){
max = a[i]
if(a[i+1] > max)
{
max = a[i+1];
i = i + 1;
}
}
che oltre al carattere di ; c'è anche l'errore che si verifica al raggiungimento dell'ultimo indice dell'array da controllare.
Infatti: se hai un array di 3 valori (quindi n=3 ed indici da 0 a 2), l'ultimo ciclo dovrebbe controllare questo:
codice:
while (i < n){
max = a[2]
if(a[2+1] > max)
{
max = a[2+1];
i = 2 + 1;
}
}
Noterai che il programma va a cercare un indice inesistente.
prova questo codice al posto del tuo ciclo while
codice:
max = a[0];
i = 1;
while (i < n){
if(a[i] > max)
{
max = a[i];
}
i++;
}
Inoltre ricorda di inizializzare e definire max come variabile