Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2011
    Messaggi
    20

    [C] Riempire matrice tramite funzione

    Salve, come da titolo vorrei riempire una matrice tramite una funzione esterna.
    La funzione deve inoltre allocare dinamicamente la memoria da un numero precedentemente inserito in input nel main, e infine la matrice deve risultare allocata correttamente nel main, e riempita come descritto nella funzione.
    La funzione deve agire su 4 matrici diverse allocandole nello stesso modo e riempiendole con gli stessi caratteri, per cui avevo pensato di fare una cosa del genere


    codice:
    char riempi_standard(char **vet, int n)
    {
        int i, j;
        char a=97;
        char b=48;
        vet=(char **)malloc(n*sizeof(char **));
        for (i=0; i<n; i++)
            vet[i]=(char *)malloc(n*sizeof(char *));
        for (i=0; i<n; i++)
            for (j=0; j<n; j++)
                vet[i][j]='~';
        for (i=1; i<n-1; i++, a++)
            vet[0][i]=a;
        for (i=1; i<n-1; i++, b++)
            vet[i][0]=b;
        vet[0][0]=' ';
    }    
    
    int main()
    {
        int i, j, n;
        char **matrix1, **matrix2, **matrix3, **matrix4;
        printf("Inserire n: ");
        scanf("%d", &n);
        riempi_standard(matrix1, n);
        printf("\n\n\n");
        for (i=0; i<n; i++)
        {
            for (j=0; j<n; j++)
                printf("%c", matrix1[i][j]);
            printf("\n");
        }
        system("pause");
        return 0;   
    }
    ho provato a cambiare i puntatori, a utilizzare misure fisse delle matrici, a usare il return, ma da sempre risultato che, durante l'esecuzione della funzione, il programma si blocca.. potete aiutarmi? grazie

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    La funzione deve essere

    codice:
    void riempi_standard(char ***arr, int n)
    {
        int i, j;
        char a=97;
        char b=48;
    
        *arr=(char **)malloc(n*sizeof(char *));
        for (i=0; i<n; i++)
            (*arr)[i]=(char *)malloc(n*sizeof(char));
        
    	for (i=0; i<n; i++)
            for (j=0; j<n; j++)
                (*arr)[i][j]='~';
    
        for (i=1; i<n-1; i++, a++)
            (*arr)[0][i]=a;
        
    	for (i=1; i<n-1; i++, b++)
            (*arr)[i][0]=b;
    
        (*arr)[0][0]=' ';
    }
    e la chiamata

    codice:
        char **matrix1;
    
        ...
    
        riempi_standard( &matrix1, n );
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2011
    Messaggi
    20
    grazie mille funziona perfettamente
    Vorrei capire una sola cosa, il triplo puntatore nei parametri serve perchè l'array è bidimensionale e si deve operare sull'indirizzo di memoria?
    se è così operazioni su un'array con una sola dimensione vanno effettuate con un doppio puntatore, e dati normali con un solo puntatore?
    Grazie

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Sì a tutte le domande, se operi con una funzione come nel tuo caso.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2011
    Messaggi
    20
    grazie mille!

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 © 2025 vBulletin Solutions, Inc. All rights reserved.