Problema menu matrice

di il
1 risposte

Problema menu matrice

Salve a tutti, ho scritto questo codice ma se inserisco 1 non immette correttamente la matrice e in più continua a darmi errore se non differenzio i nomi come immissione 1 da immissione 2. Ringrazio in anticipo chi vorrà aiutarmi.
/* menu di matrici*/
#include <stdio.h>
#include <windows.h>

#define maxele 10
#define N maxele
#define P maxele
#define M maxele

void gestioneSequenza (void);
void immissioneMatrici ( int, int, int[maxele][maxele]);
void prodottoMatrici (int, int, int, int[maxele][maxele], int[maxele][maxele], int[maxele][maxele]);
void visualizzazione (int, int,int[maxele][maxele]);

main()
{
     
      
int mat1[N][P]; /* prima matrice */
int mat2[P][M]; /* seconda matrice */
int pmat[N][M]; /* matrice prodotto */                    

int n, m, p;
char invio;
do {
printf("\nNumero di righe prima matrice: ");
scanf("%d", &n);
}
while (n < 1 || n > maxele);
do {

printf("\nNumero di colonne prima matrice / righe della seconda: ");
scanf("%d", &p);
}
while (p < 1 || p > maxele);
do {
printf("\nNumero di colonne della seconda matrice: ");
scanf("%d", &m);
}
while (m < 1 || m > maxele);

gestioneSequenza(); 


immissioneMatrici(n, p, mat1);
immissioneMatrici(p, m, mat2);
prodottoMatrici(n, m, p, mat1, mat2, pmat);
visualizzazione(n, p, mat1);
visualizzazione(p, m, mat2);
visualizzazione(n, m, pmat);

printf("\n\n Premere Invio per continuare...");
scanf("%c", &invio);
scanf("%c", &invio);
system("pause");
}

void gestioneSequenza()
{
     int array[maxele][maxele];
     
     int n;
     int scelta = -1;
     char invio;
     
     while (scelta!=0){
           printf("\n");
           printf("\t GESTIONE SEQUENZA");
           printf("\n\t 1.ImmissioneMatrici");
           printf("\n\t 2.ProdottoMatrici");
           printf("\n\t 3.Visualizzazione");
           printf("\n\t 0.Fine");
           printf("\n\t Scegliere un'opzione: ");
           scanf("%d", &scelta);
           scanf("%c", &invio);
           
     switch (scelta) {
            case 1: immissioneMatrici(n, n, array);
            break;
            case 2: prodottoMatrici(n, n, n, array, array, array);
            break;
            case 3: visualizzazione(n,n, array);
            break;
}
}
}

void immissioneMatrici (int n, int p, int mat1[maxele][maxele])
{
int i, j;
printf("\n Caricamento prima matrice\n");
for (i=0; i<n; i++)
    for(j=0; j<p; j++) {
             printf("Inserisci riga %d colonna %d valori: ", i,j);
             scanf("%d", &mat1[i][j]);
             };  
             
             }        
 
 
 
  void immissioneMatrici2 (int p, int m, int mat2[maxele][maxele])
{
int i, j;              
printf("\n Caricamento seconda matrice\n");
for (i=0; i<p; i++)
    for(j=0; j<m; j++) {
             printf("Inserisci riga %d colonna %d: ", i, j);
             scanf("%d", &mat2[i][j]);
             };
             }
             
void prodottoMatrici( int n, int m, int p, int mat1[maxele][maxele],  int mat2[maxele][maxele], int pmat[maxele][maxele])
{
int j=0, i=0, k=0;
for(i=0; i<n; i++)
for(j=0; j<n; j++){
                pmat[i][j] = 0;
for(k=0; k<p; k++)
pmat[i][j] = pmat[i][j] + mat1[i][k] * mat2[k][j];
};
}      

void visualizzazione2(int righe, int colonne, int mat1[maxele][maxele])
{
int i, j;
printf("\n \n VISUALIZZA PRIMA MATRICE \n ");
for(i=0; i<righe; i++) {
printf("\n");
for(j=0; j<colonne; j++)
printf("%5d", mat1[i][j]);
};
}
 
 void visualizzazione1(int righe, int colonne, int mat2[maxele][maxele])
{
int i, j;
printf("\n \n VISUALIZZA SECONDA MATRICE \n ");
for(i=0; i<righe; i++) {
printf("\n");
for(j=0; j<colonne; j++)
printf("%5d", mat2[i][j]);

};
}

void visualizzazione(int righe, int colonne, int pmat[maxele][maxele])
{
int i, j;

printf("\n \n VISUALIZZA MATRICE PRODOTTO \n ");
for(i=0; i<righe; i++) {
printf("\n");
for(j=0; j<colonne; j++)
printf("%5d", pmat[i][j]);

};
}

1 Risposte

  • Re: Problema menu matrice

    Non immette correttamente la matrice perchè tu chiami la funzione "gestionesequenza" e non gli passi nessun parametro.. Da questa funzione poi, richiami 2 funzioni (immissionematrici e prodotto matrici) passandogli come parametro la variabile 'n' che hai dichiarato nella funzione e cerchi di usarla come indice di riga e di colonna della tua matrice nella funzione successiva, ma ovviamente la variabile 'n' non contiene più il valore che avevi assegnato nel main con la scanf (infatti per esempio a me vale 49152) perchè è una variabile locale e quindi usandola come variabile nei for ti ripete il ciclo 49152..

    Il menù del tuo programma lo puoi scrivere nel main oppure se vuoi usare la funzione "gestionesequenza" almeno passagli le tre variabili di riga e colonna che hai definito nel main (n,p,m).

    Per quanto riguarda le funzioni, è normale che ti da errore perchè non puoi dare lo stesso nome a due funzioni diverse.. E' comunque inutile scrivere due funzioni completamente uguali per inserire prima i valori della prima matrice con la prima funzione e poi i valori della seconda matrice con l'altra funzione.. Vai contro la logica di definizione di funzione, infatti puoi usare la stessa funzione passandogli diversi parametri..

    Ad esempio qui (nel main):
    immissioneMatrici(n, p, mat1);
    immissioneMatrici(p, m, mat2);
    prodottoMatrici(n, m, p, mat1, mat2, pmat);
    i parametri sono passati correttamente mentre invece qui (nella funzione gestionesequenza)
    switch (scelta) {
                case 1: immissioneMatrici(n, n, array);
                break;
                case 2: prodottoMatrici(n, n, n, array, array, array);
                break;
                case 3: visualizzazione(n,n, array);
                break;
    sbagli totalmente...

    Prova a riscrivere il codice seguendo una logica migliore..
Devi accedere o registrarti per scrivere nel forum
1 risposte