Prodotto righe per colonne e default dello switch D:

di il
7 risposte

Prodotto righe per colonne e default dello switch D:

Ciao a tutti questo sarebbe il mio compito per domani... il programma mi funziona solo non sono sicura del risultato della funzione
void prod_rxc_matr(int MAT1[N][N],int MAT2[N][N],int MAT3[N][N]);
e poi alla fine di ogni operazione mi viene scritto "numero errato" che sarebbe il default dello switch iniziale (quello che a seconda del numero inserito esegue le varie operazioni)

Consegna:
Il programma dovrà:
1. Visualizzare le Matrici A, B e C (variabili globali inizialmente nulle o precaricate con valori di default) rispettivamente primo operando, secondo operando delle le possibili operazioni e risultato delle operazioni binarie
2. Visualizzare il menu' delle possibili operazioni e richiedere la scelta di un'operazione da compiere.
3. Il menu' dovrà prevedere le seguenti opzioni:
- Inserisci Matrice: permette di sovrascrivere a scelta la matrice A o la matrice B
- Copia Matrice: richiede prima quale matrice copiare tra A, B, C e poi in quale "incollare" tra le restanti due
- Modifica Elemento Matrice: richiede prima quale matrice modificare tra A e B, poi richiedere quale elemento modificare (richiedendo indice di riga e di colonna) e infine il nuovo valore.
- Trasponimatrice: chiede quale matrice trasporre tra A o B e poi la traspone
- Somma Matrice: esegue la somma di A e B e la salva in C
- Prodotto per uno scalare: chiede quale matrice moltiplicare tra A e B e poi richiede un numero. - - Moltiplica tutti gli elementi della matrice prescelta per il numero inserito e salva la nuova matrice in C.
- Prodotto Righe per Colonne: esegue il prodotto righe per colonne tra A e B e lo salva in C.
- Determinante: calcola il determinante di una delle tre matrici a scelta e ne visualizza il risultato.
- Traccia: calcola la traccia di una delle tre matrici a scelta e ne visualizza il risultato (la traccia è semplicemente la somma degli elementi della diagonale).
- Inversa: (per i più ardimentosi) Chiede di selezionare una matrice tra A e B e, se il suo determinante è diverso da zero, la sostituisce con la sua inversa.
- Esci: termina l'esecuzione del programma
4. Ritornare al punto 1.

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <cmath>
#define N 3

//programma di operazioni su matrici
int A[N][N], B[N][N], C[N][N];

void leggi_matr(int MAT[N][N]);
void copia_matr(int MAT[N][N], int MAT1[N][N]);
void modifica_matr(int MAT[N][N]);
void trasponi_matr(int MAT[N][N]);
void somma_matr(int MAT1[N][N],int MAT2[N][N],int MAT3[N][N]);
void prod_scal_matr(int MAT[N][N]);
void prod_rxc_matr(int MAT1[N][N],int MAT2[N][N],int MAT3[N][N]);
int det_matr(int MAT[N][N]);
int traccia_matr(int MAT[N][N]);
void inverti_matr(int MAT[N][N]);

void scelta_per_leggi_matr();
void scelta_per_copia_matr();  
void scelta_per_modifica_matr(); 
void scelta_per_trasponi_matr();
void scelta_per_prod_scal_matr();
void scelta_per_det_matr();
void scelta_per_traccia_matr();
void scelta_per_inversa_matr();
void stampa_matrice(int MATA[N][N]); 


int main(void)
{
 int scelta;
 int indice_riga, indice_colonna, val, scalare;
 do
 { 
  printf("Le possibili operazioni sono: \n");
  printf("\n");
  printf("1 = Inserisci Matrice\n");
  printf("2 = Copia Matrice\n");
  printf("3 = Modifica Elemento Matrice\n"); 
  printf("4 = Trasponimatrice\n");
  printf("5 = Somma Matrice\n");
  printf("6 = Prodotto per uno scalare\n");
  printf("7 = Prodotto Righe per Colonne\n");
  printf("8 = Determinante\n");
  printf("9 = Traccia\n");
  printf("10 = Inversa\n");
  printf("11 = Fine: esce dal programma\n");
  printf("\n");
  printf("Inserisci l'operazione: "); 
  scanf("%d", &scelta);           
  switch (scelta)
  { 
    case 1:
        scelta_per_leggi_matr();
    break;
    case 2:
        scelta_per_copia_matr();                  
    break;
    case 3:
        scelta_per_modifica_matr();
    break;
    case 4:
        scelta_per_trasponi_matr();
    break;
    case 5:
        somma_matr(A,B,C);
        stampa_matrice(C);
    break;
    case 6:
        scelta_per_prod_scal_matr();
    break;
    case 7:
        prod_rxc_matr(A,B,C);
        stampa_matrice(C);
    break;
    case 8:
        scelta_per_det_matr(); 
    break;
    case 9: 
        scelta_per_traccia_matr();
    break;
    case 10:
        scelta_per_inversa_matr();
    break;
    case 11:
        printf("Fine Programma\n");
    break;
    default:
        printf("NUMERO ERRATO\n");
    break;
   };
 }while (scelta!=11);
 
 printf("\n\n");
 system ("PAUSE");
}

 
void leggi_matr(int MAT[N][N])
{ 
    int i, e;
	for(i=0; i<N; i++ ) 
    { 
		for(e=0; e<N; e++) 
        { 
			    printf("Inserisci il valore della matrice[%d][%d]: ", i, e); 
			    scanf("%d", &(MAT[i][e])); 
		}  
	}  
}

void copia_matr(int MAT[N][N], int MAT1[N][N])
{
    int i, e;
	for(i=0; i<N; i++ ) 
    { 
		for(e=0; e<N; e++) 
        { 
			   MAT[i][e]=MAT1[i][e]; 
		}  
	}   
}

void modifica_matr(int MAT[N][N])
{
     int e, i;
     int valore;
     bool sbagliato=true;
    
     while (sbagliato==true)
     {
     printf("Inserisci indice riga: ");
     scanf("%d", &e);
     if ((e<N)||(e>0))
     {
      sbagliato=false;             
     }
     else 
     {
     sbagliato=true;
     printf("ERRORE\nRiprova\n");    
     }
     }
     
     sbagliato=true;
     
     while (sbagliato==true)
     {
     printf("Inserisci indice colonna: ");
     scanf("%d", &i);
      if ((i>=N)||(i<0))
     {
      sbagliato=true;
      printf("ERRORE\nRiprova\n");                 
     }
     else 
     {
     sbagliato=false;
     }
     }
     printf("Inserisci nuovo valore: ");
     scanf("%d", &valore);
     MAT[i][e]=valore;     
}
     
void trasponi_matr(int MAT[N][N])
{
 int Mattemp[N][N];
 int i,j;
 copia_matr(MAT,Mattemp);
 for(i=0;i<N;i++)
 {
    for(j=0;j<N;j++)
    {
      MAT[i][j]=Mattemp[j][i];
    }
 }
}

void somma_matr(int MATA[N][N],int MATB[N][N],int MATC[N][N])
{ 
	int i, e;
    for(i=0; i<N; i++ ) 
    { 
		for(e=0; e<N; e++) 
        { 
		        MATC[i][e]=MATA[i][e]+MATB[i][e];  
		}  
	}  
}

void prod_scal_matr(int MAT[N][N])
{
  int scal, i, e;
  printf("Inserisci numero: ");
  scanf("%d", &scal);
  for(i=0; i<N; i++ ) 
    { 
		for(e=0; e<N; e++) 
        { 
		        MAT[i][e]=MAT[i][e]*scal;
                C[i][e]=MAT[i][e]; 
		}  
	}      
}

void prod_rxc_matr(int MAT1[N][N],int MAT2[N][N],int MAT3[N][N])
{
  int i, e, temp;
  temp=0;
  for(i=0; i<N; i++ ) 
    { 
		for(e=0; e<N; e++) 
        { 
		        temp=temp+(MAT1[i][e]*MAT2[e][i]); 
                 
		}  
	  MAT3[i][e]=temp;	
	}     
}

int det_matr(int MAT[N][N])
{
 int det;
 det=MAT[0][0]*MAT[1][1]*MAT[2][2]+MAT[1][0]*MAT[2][1]*MAT[0][2]+MAT[0][1]*MAT[1][2]*MAT[2][0]-MAT[2][0]*MAT[1][1]*MAT[0][2]-MAT[2][1]*MAT[1][2]*MAT[0][0]-MAT[1][0]*MAT[0][1]*MAT[2][2]; 
 printf("Il determinante della matrice e\' %d\n", det);            
}

int traccia_matr(int MAT[N][N])
{
  int i, risultato;
  for(i=0; i<N; i++)
    {
     risultato=risultato+MAT[i][i];
     } 
  printf("La traccia della matrice e\' %d\n", risultato);   
}

void inverti_matr(int MAT[N][N])
{
     printf("Funzione da realizzare\n");   
}

void scelta_per_leggi_matr()
{
        int scelta2 = 0;
        do 
        {
        printf("Scegli Matrice: 1=A 2=B 3=C 4=Esci  ");
        scanf("%d", &scelta2);
         if (scelta2==1)
          {
            leggi_matr(A);    
            stampa_matrice(A);      
          }
         if (scelta2==2)
          {
            leggi_matr(B);
            stampa_matrice(B);          
          }
         if (scelta2==3)
          {
            leggi_matr(C);
            stampa_matrice(C);          
          }
         if(scelta2!=1 && scelta2!=2 && scelta2!=3 && scelta2!=4)  
          {
            printf("NUMERO ERRATO\n");  
          }
         }while(scelta2!=1 && scelta2!=2 && scelta2!=3 && scelta2!=4);
}

void scelta_per_copia_matr()                  
{
     int scelta3;
     printf("Scegli la combinazione:\n1=A copiata in B \n2=A copiata in C \n3=B copiata in A \n4=B copiata in C \n5=C copiata in A \n6=C copiata in B\n");
     scanf("%d", &scelta3);
     switch(scelta3)
     {
     case 1: copia_matr(A, B);
             stampa_matrice(B); 
     break; 
     case 2: copia_matr(A, C);
             stampa_matrice(C); 
     break;
     case 3: copia_matr(B, A);
             stampa_matrice(A); 
     break;
     case 4: copia_matr(B, C);
             stampa_matrice(C); 
     break;
     case 5: copia_matr(C, A);
             stampa_matrice(A); 
     break;
     case 6: copia_matr(C, B);
             stampa_matrice(B); 
     break;              
     default : printf("Numero Sbagliato");
     break;               
     }
}

void scelta_per_modifica_matr()
{
        int scelta4;
        do 
        {
        printf("Scegli Matrice: 1=A 2=B 3=C   ");
        scanf("%d", &scelta4);
         if (scelta4==1)
          {
            modifica_matr(A); 
            stampa_matrice(A);         
          }
         if (scelta4==2)
          {
            modifica_matr(B);
            stampa_matrice(B);          
          }
         if (scelta4==3)
          {
            modifica_matr(C); 
            stampa_matrice(C);         
          }
         else 
          {
            printf("NUMERO ERRATO\n");  
          }
         }
         while ((scelta4!=1)&&(scelta4!=2)&&(scelta4!=3));
}

void scelta_per_trasponi_matr()
{
        int scelta5;
        do 
        {
        printf("Scegli Matrice: 1=A 2=B 3=C   ");
        scanf("%d", &scelta5);
         if (scelta5==1)
          {
            trasponi_matr(A);
            stampa_matrice(A);          
          }
         if (scelta5==2)
          {
            trasponi_matr(B); 
            stampa_matrice(B);         
          }
         if (scelta5==3)
          {
            trasponi_matr(C); 
            stampa_matrice(C);         
          }
         else 
          {
            printf("NUMERO ERRATO\n");  
          }
         }
         while ((scelta5!=1)&&(scelta5!=2)&&(scelta5!=3));
}

void scelta_per_prod_scal_matr()
{
        int scelta6;
        do 
        {
        printf("Scegli Matrice: 1=A 2=B  ");
        scanf("%d", &scelta6);
         if (scelta6==1)
          {
            prod_scal_matr(A);
            stampa_matrice(A);          
          }
         if (scelta6==2)
          {
            prod_scal_matr(B); 
            stampa_matrice(B);           
          }
         else 
          {
            printf("NUMERO ERRATO\n");  
          }
         }
         while ((scelta6!=1)&&(scelta6!=2));
}

void scelta_per_det_matr()
{
        int scelta7;
        do 
        {
        printf("Scegli Matrice: 1=A 2=B 3=C   ");
        scanf("%d", &scelta7);
         if (scelta7==1)
          {
            det_matr(A);  
            stampa_matrice(A);        
          }
         if (scelta7==2)
          {
            det_matr(B); 
            stampa_matrice(B);          
          }
         if (scelta7==3)
          {
            det_matr(C);   
            stampa_matrice(C);        
          }
         else 
          {
            printf("NUMERO ERRATO\n");  
          }
         }
         while ((scelta7!=1)&&(scelta7!=2)&&(scelta7!=3));
}

void scelta_per_traccia_matr()
{
        int scelta8;
        do 
        {
        printf("Scegli Matrice: 1=A 2=B 3=C   ");
        scanf("%d", &scelta8);
         if (scelta8==1)
          {
            traccia_matr(A);
            stampa_matrice(A);          
          }
         if (scelta8==2)
          {
            traccia_matr(B);
            stampa_matrice(B);          
          }
         if (scelta8==3)
          {
            traccia_matr(C); 
            stampa_matrice(C);         
          }
         else 
          {
            printf("NUMERO ERRATO\n");  
          }
         }
         while ((scelta8!=1)&&(scelta8!=2)&&(scelta8!=3));
}

void scelta_per_inversa_matr()
{
        int scelta9;
        do 
        {
        printf("Scegli Matrice: 1=A 2=B  ");
        scanf("%d", &scelta9);
         if (scelta9==1)
          {
            inverti_matr(A); 
            stampa_matrice(A);         
          }
         if (scelta9==2)
          {
            inverti_matr(B); 
            stampa_matrice(B);           
          }
         else 
          {
            printf("NUMERO ERRATO\n");  
          }
         }
         while ((scelta9!=1)&&(scelta9!=2));
}

void stampa_matrice(int MATA[N][N]) 
{ 
    int i, e;
    printf("\n");
    for(i=0; i<N; i++ ) 
    { 
		for(e=0; e<N; e++) 
        { 
			    printf("| %d |",MATA[i][e]); 
		}
       printf("\n");  
    }  
    printf("\n");
}
Grazie a chiunque possa aiutarmi

Edit skynet: modificato code tags

7 Risposte

Devi accedere o registrarti per scrivere nel forum
7 risposte