Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
int ricerca(int rows , int columns , int matrix[rows][columns], int x){
int i=0,j=0;
for(;i<rows;i++){
for(;j<columns;j++){
if(matrix[i][j]== x)
return1;
}
}
return0;
}
In pratica, data una matrice di "rows" righe e "columns" colonne, la funzione ritorna 1 appena incontra il valore "x". Se non trova nulla, ritorna 0.
Nel "main", per il test, ho scritto:
Codice sorgente - presumibilmente C/C++
int matrice[5][5]={{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15},
{16,17,18,19,20},{21,22,23,24,25}};
int x = ricerca(5,5,matrice,6);
Mi ritorna 0!
Mettendo qualche printf (e usando il debugger) nella funzione, mi son accorto che scorre solamente la prima riga!
E mi son anche accorto che posso eliminare il problema utilizzando una matrice allocata dinamicamente (cambiando ovviamente il prototipo di funzione!).
Come posso sistemare questo problema con la matrice statica?
Grazie in anticipo della risposta
Ultima modifica effettuata da matteo88roma il 07/03/2011 alle 11:35
int ricerca(int rows , int columns , int matrix[rows][columns], int x){
int i=0,j=0;
for(;i<rows;i++){
for(;j<columns;j++){
if(matrix[i][j]== x)
return1;
}
}
return0;
}
ma perchč devi cambiare le cose standard?
Codice sorgente - presumibilmente C++
int ricerca(int rows , int columns , int matrix[rows][columns], int x){
int i, j;
for(i =0;i<rows;i++){
for(j =0;j<columns;j++){
if(matrix[i][j]== x)
return1;
}
}
return0;
}
la parte di inizializzazione del for va assolutamente specificata, altrimenti alla seconda iterazione j NON viene resettato per ricominciare a contare e cosė facendo esce subito
In C le matrici non si passano comehai fatto tu alle funzioni, la stessa cosa vale per i vettori!.
Devi passarli per indirizzo (usando il puntatore al primo elemetno)
Codice sorgente - presumibilmente C/C++
1.
int ricerca(int rows , int columns , int* matrix, int x) {
}
Per passarlo quindi fai ad esempio:
Codice sorgente - presumibilmente C/C++
int a=ricerca(5,5,&matrice[0][0],1);
Il problema č che adesso la matrice la vedrai linearmente, come se fosse un vettore quindi devi farti tu un algoritmo per trattare il vettore creatosi come la tua matrice iniziale, non č difficile
Buon Lavoro
Ultima modifica effettuata da andrea993 il 07/03/2011 alle 14:06
In C le matrici non si passano comehai fatto tu alle funzioni, la stessa cosa vale per i vettori!.
Devi passarli per indirizzo (usando il puntatore al primo elemetno)
Codice sorgente - presumibilmente C/C++
1.
int ricerca(int rows , int columns , int* matrix, int x) {
}
Per passarlo quindi fai ad esempio:
Codice sorgente - presumibilmente C/C++
int a=ricerca(5,5,&matrice[0][0],1);
Il problema č che adesso la matrice la vedrai linearmente, come se fosse un vettore quindi devi farti tu un algoritmo per trattare il vettore creatosi come la tua matrice iniziale, non č difficile
Buon Lavoro
Non č vero. In C puoi passare le matrici come cacchio ti pare.
In C le matrici non si passano comehai fatto tu alle funzioni, la stessa cosa vale per i vettori!.
Devi passarli per indirizzo (usando il puntatore al primo elemetno)
Codice sorgente - presumibilmente C/C++
1.
int ricerca(int rows , int columns , int* matrix, int x) {
}
Per passarlo quindi fai ad esempio:
Codice sorgente - presumibilmente C/C++
int a=ricerca(5,5,&matrice[0][0],1);
Il problema č che adesso la matrice la vedrai linearmente, come se fosse un vettore quindi devi farti tu un algoritmo per trattare il vettore creatosi come la tua matrice iniziale, non č difficile
Buon Lavoro
Guarda conviene come gia' ti ha suggerito qualcuno di mettere le variabili i,j dentro ogni ciclo per evitare errori ciclici, per quanto riguarda il passagio della matrice nella funzione ti suggerisco di usare i puntatori, oppure come hai fatto tu dichiarare un altra matrice(passaggio per copia!) ma questa soluzione č troppo dispersiva in fase stack! Ciao
Guarda conviene come gia' ti ha suggerito qualcuno di mettere le variabili i,j dentro ogni ciclo per evitare errori ciclici, per quanto riguarda il passagio della matrice nella funzione ti suggerisco di usare i puntatori, oppure come hai fatto tu dichiarare un altra matrice(passaggio per copia!) ma questa soluzione č troppo dispersiva in fase stack! Ciao
guarda che in C in qualunque maniera passi un array (con la scrittura int *a o int a[]) passi sempre IL PUNTATORE al primo elemento!
()
Newbie
Messaggi: Iscritto:
Postato alle 16:22
Venerdė, 18/03/2011
forse mi hai frainteso, io intendevo dire NON IL PASSAGGIO di parametri dalla funzione chiamante alla funzione chiamata, ma inizializzare un puntatore nella funzione chiamante "che punta" all'indirizzo del primo elemento dell'array (passato per indirizzo logicamente)! Invece lui nella funzione chiamata inizializzava un altro array, per questo ho detto ke č una soluzione troppo dispersiva memoricamente.