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

    programma riempim matrici non funziona

    Devo creare un programmino in cche date le dimensioni d 2matrici generi la matrice prodotto,le 2 matrici sono riempite in modo casuale con numeri binari.
    ho scritto questa parte di programma per riempire le matrici dopo farò il prodotto, ma anke se la compilaz va a buon fine senza errori nn m da il risultato sperato perchè a volte non escono numeri oppure escono sequenze di numeri non binarie o spazi vuoti a seconda del numero che inserisco(per es 5 6 7). (da premettere che uso dev c e ho vista) che devo fare?

    #include <stdio.h>
    #include <stdlib.h>
    #define N_MAX 20

    void riempimatrice(int matrice[][N_MAX] ,int m,int n);
    void stampamatrice(int matrice[][N_MAX], int m, int n);
    void prodotto(int matrice1[][N_MAX], int matrice2[][N_MAX], int matrix[][N_MAX], int m,int n, int p);

    int main()

    {
    int m,n,p; //dimensioni

    /*inserimento dimensioni*/
    printf("Inserisci dimensioni matrici\n");
    printf(" m = ");
    scanf("%d",&m);
    printf("\n n = ");
    scanf("%d",&n);
    printf("\n p = ");
    scanf("%d",&p);
    printf("\n\n\n");

    /*dichiarazioni matrici*/
    int A[m][n],B[n][p],C[m][p];

    /*riempimento*/
    riempimatrice(A,m,n);
    riempimatrice(B,n,p);

    /*stampa*/
    printf("\n Matrice A");
    stampamatrice(A,m,n);
    printf("\n Matrice B");
    stampamatrice(B,m,p);


    system("PAUSE");
    return 0;
    }


    void riempimatrice(int matrice[][N_MAX],int m,int n)
    {
    int i,j; //contatori

    //riempimento
    srand(time(NULL));
    for(i=0;i<m;i++)
    for(j=0;j<n;j++)
    matrice[i][j]=rand()%2;
    }


    void stampamatrice(int matrice[][N_MAX], int m, int n)
    {
    int i,j;
    /*stampa*/
    printf("\n\n");
    for(i=0;i<m;i++)
    {for(j=0;j<n;j++)
    printf("\t %d",matrice[i][j]);
    printf("\n\n");};
    printf("\n\n");
    }

  2. #2
    Utente di HTML.it L'avatar di bstefano79
    Registrato dal
    Feb 2004
    Messaggi
    2,520
    prova così
    codice:
    ......
    void riempimatrice(int *matrice[][N_MAX] ,int m,int n);
    .........
    
    int main()
    {
    .....
        riempimatrice(&A,m,n);
        riempimatrice(&B,n,p);
    .....
    }
    
    
    .................
    void riempimatrice(int *matrice[][N_MAX],int m,int n)
    {
    .......
    }

  3. #3
    ho provato a fare le modifiche che m hai segnalato ma mi da warning dicendo che i tipi sono incompatibili

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296

    Moderazione

    Il Regolamento impone di specificare il linguaggio di programmazione nel titolo: qui l'ho aggiunto io, in futuro pensaci tu.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Non allocare matrici in quel modo, usa l'allocazione statica o dinamica... lascia perdere gli array a lunghezza variabile.
    every day above ground is a good one

  6. #6
    come posso fare allora?

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Ti basta semplicemente ridichiarare le matrici così:

    codice:
    int A[N_MAX][N_MAX], B[N_MAX][N_MAX], C[N_MAX][N_MAX];
    dove N_MAX è la costante simbolica (20) che hai definito. Il resto puoi lasciarlo invariato così. In sostanza ogni matrice sarà 20x20, poi a seconda dei valori di m, n e p che immetti utilizzerai solo una parte di esse. Ovviamente assicurati che questi valori siano minori di 20 altrimenti rischi un overflow. Di sicuro si fa uno spreco di memoria così, ma trattandosi di matrici 20x20 non è eccessivo. L'ideale (da un punto di vista "stilistico") sarebbe ricorrere all'allocazione dinamica della memoria (vedi malloc() ecc...) ma avrebbe un suo costo in termini di tempo di esecuzione quindi lo "spreco" di memoria non è poi tanto peggio.

    In ogni caso, qualsiasi soluzione adotti, quello che devi evitare è l'allocazione delle matrici (ma anche degli array monodimensionali) con size variabili, cioè specificando delle variabili come size, perché vai incontro a problemi, oltre al fatto che è una caratteristica non prevista dallo standard C originario (C90) e che quindi su alcuni compilatori nemmeno funziona.
    every day above ground is a good one

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.