PDA

Visualizza la versione completa : [C] Passaggio matrice a funzione


FatBeats
27-11-2007, 20:44
Ho un problema...ovvero non riesco a capire perche passando una matrice in una funzione, la suddetta matrice si "svuota".

Ovvero, facendo un esempio...:

dichiaro la funzione in questo modo --> int funzione (int n, int matr[][n], int i, int j);

richiamo della funzione nel codice del main --> ris = funzione(n, matr, i, j);

inizializzo la posizione matr[1][1] = 1;

nei 2 for che scorreranno tutte le caselle della matrice verrà richiamata la funzione (ovviamente i 2 for avranno i e j come indici).

infine, il codice della funzione --> printf ("%d ", matr[i][j]);



OUTPUT: avrò a video la matrice piena di 0, anche nella posizione matr[1][1] (alla quale invece avevo assegnato 1).

sapete dirmi il motivo?? è come se passando la matrice perdo i dti contenuti in essa.... :dottò:


NB. se la matrice la stampo nel main il problema non si presenta, ovviamente (quindi avrò tutti 0 ed un 1 nella posizione matr[1][1]).

jakfir
27-11-2007, 23:53
te la matrice in quel modo la passi per riferimento quindi ke tu la stampi nel main o nella funz nn cambia nulla...
o hai sbagliato la stampa o hai sbagliato il riempimennto posta un po di codice sennò nn è umanamente possibile capire il tuo errore...

FatBeats
28-11-2007, 02:10
#include <stdio.h>
#include <stdlib.h>
int controlla1 (int n, int S[][n], int i, int j);
int controlla2 (int n, int S[][n], int i, int j);

int main(){
int pezzo, n, k, i, j, c, ris;
int S[n][n];
scanf ("%d", &pezzo);
scanf ("%d", &n);
scanf ("%d", &k);
for (c=0; c<k; c++){
scanf ("%d", &i);
scanf ("%d", &j);
S[i][j] = 1;
}
for (i=0; i<n; i++){
for (j=0; j<n; j++){
if (pezzo == 1){
if (S[i][j] != 1){
ris = controlla1 (n, S, i, j);

}
else ris = controlla1 (n, S, i, j);
if (j == n-1) printf ("\n");
}

}
}
system ("PAUSE");
return 0;
}

int controlla1 (int n, int S[][n], int i, int j){
int cont=0, x, y;
printf ("%d ", S[i][j]);
return cont;
}



PS. ovviamente ho tolto e modificato del codice proprio perche non mi tornava qualcosa, e ho semplificato facendo stupidamente stampare la matrice dove appunto riscontro l'errore di cui sopra.

ovvero nel main mi stampa i valori corretti (tutti 0 e 1 dove vengono inseriti gli indici in input) mentre nella funzione mi stampa i valori sbagliati (ovvero tutti 0).....come se mentre passo la matrice non mi passa anche i valori di questa.

oregon
28-11-2007, 09:31
Prima di continuare il discorso, vorrei capire come dimensioni un array con una variabile di cui ancora non e' stato impostato il contenuto

int S[n][n];

Anzi, non capisco come mai il compilatore accetti una dichiarazione di quel genere e non ti dica nulla ...

FatBeats
28-11-2007, 15:08
anche io avevo fatto caso....ma mi da piu errori dichiarandola dopo che facendo cosi...

ovvero nella dichiarazione della funzione mi dice che n non era stata dichiarata per quello scopo

FatBeats
28-11-2007, 15:27
aggiorno:


praticamente i valori di 1 me li passa SOLO se messi nella riga 0


ovvero se metto due valori 1 nelle posizioni (0,1 e 0,3) la funzione mi stamperà tutto correttamente.

invece se metto sempre due valori 1 nelle posizioni (0,4 e 3,2) la funzione mi stamperà 1 solo nella posizione con riga 0 quindi 0,4.


non riesco a capire perche...

oregon
28-11-2007, 15:28
Originariamente inviato da FatBeats
anche io avevo fatto caso....ma mi da piu errori dichiarandola dopo che facendo cosi...

Non si scrive codice che abbia "il minor numero di errori" ... si deve controllare ogni errore ed eliminarlo ...



ovvero nella dichiarazione della funzione mi dice che n non era stata dichiarata per quello scopo

Cioe'?

Comunque ... cosi' non puo' andare ... devi usare delle costanti per dichiarare il numero degli elementi della matrice. Altrimenti devi usare l'allocazione dinamica ...

FatBeats
28-11-2007, 15:37
ah...ecco, il problema è che mi si chiede proprio di usare la grandezza della matrice data da input.


l'allocazione dinamica quali modifiche nel codice apporterebbe?


grazie comunque... :D

FatBeats
28-11-2007, 21:59
update...



praticamente passando la matrice con grandezze costanti...l'intero programma (che non è quello di stampare 0 e 1...anche se la base del funzionamente è quella) funziona....


quindi il problema sta nel passare la matrice con la variabile...potete aiutarmi?

Loading