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