Salve a tutti, sono un completo neofita del linguaggio C, mi è stata data questa consegna
"Realizzare una funzione: int separa(int vett[], int numE1); che nel vettore vett riceve numE1 numeri compresi tra 1 e 100. La funzione, senza utilizzare alcun altro vettore come supporto, deve cambiare di posizione gli elementi all'interno del vettore vett in modo tale che alla fine tutti gli elementi compresi tra 1 e 50 precedano tutti gli elementi compresi tra 51 e 100; inoltre le posizioni relative all’interno delle due parti, quella di numeri fino a 50 e quel
la di numeri maggiori di 50, devono essere mantenute come nell’originale vettore; la funzione deve restituire il numero di valori minori o uguali a 50. "
ora la funzione che ho realizzato è la seguente
int separa(int vett[], int numE1)
{
int i, f, p, q;
for(i=0; i<numE1; i++)
{
if (vett[i]<50)
{ f++;
}
}
for(i=0; i<f; i++)
{
if (vett[i]>50)
{
for(p = i+1; i<numE1; p++)
{
if(vett[p]<50)
{
q = vett[i];
vett[i] = vett[p];
vett[p] = q;
break;
}
}
}
}
}
(so che è proprio brutta), comunque collaudandola, viene compilata correttamente ma al momento dell'esecuzione del programma quando viene chiamata si genera un errore di segmentazione(core dump). Siccome sono davvero alle primissime armi e in parte autodidatta se qualcuno riuscisse a darmi una mano nel capire gli errori gliene sarei grato!