Più che non funzionare, non dovrebbe neanche compilare dato che il tuo valore di ritorno è un float, ma tu non hai scritto alcun return. L'errore del tuo codice, a parte il resto, è che dovi scrivere
- Codice:
a[y][i]
invece di
- Codice:
a[x][i]
nella terza riga.
Rimane comunque un codice pessimo su moltissimi aspetti. In particolare dovresti usare meno le variabili globali. Le variabili locali rendono il codice più leggibile e permettono al compilatore di fare alcune ottimizzazioni che altrimenti potrebbe non fare. Prendi per esempio quel ciclo. Tu stai scrivendo sulla prima riga della matrice dei valori che non ti servono al di fuori di quella funzione, ma il compilatore non può saperlo. Se tu scrivi:
- Codice:
float const temp = a[x][i];
a[x][i] = a[y][i];
a[x][i] = temp;
stai comunicando al compilatore esattamente quello che vuoi. Nello stesso modo, usare una
i globale per i cicli è una pessima idea (oltre ad essere obbligatorio se un giorno vorrai parallelizzare il codice). È
molto meglio definire la i all'interno del for stesso, ovvero così:
- Codice:
for(int i = 0; i < LimitValue; ++i)
{ /* */ }
seppur per farlo tu abbia bisogno di usare il C++ o il C99 (ma trovo insensato usare il C90 anche se molti lo fanno). Con un po' più codice puoi fare la stessa cosa anche in c90.
La matrice e la dimensione, eventualmente in una struct possono invece essere tranquillamente globali. Ma userei dei nomi più espressivi per le variabili, specialmente quelle globali.
Ti faccio inoltre notare che far partire gli array da 0 è fortemente consigliato anche se stai cercando di implementare un algoritmo scritto per matlab o fortran.
Nota infine che il tuo codice con i puntatori è un codice
MOLTO pericoloso. Stai praticamente scrivendo su posizioni semi-casuali della memoria. Ti suggerisco di non provare più ad usare i puntatori a caso senza prima aver capito come funzionano. Non te lo correggo neanche perché passare x e y come puntatori è inutile e usa potenzialmente il doppio della memoria (su un computer a 64-bit i puntatori sono da 64-bit mentre gli int sono da 32).
Cosa dovrebbe fare il codice completo?