Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [c] problema passaggio matrice a funzione

    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....


    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]).

  2. #2
    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...
    wlf4ever

  3. #3
    #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.

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    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 ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    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

  6. #6
    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...

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    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 ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    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...

  9. #9
    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?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.