Problema differenza matrici

di il
3 risposte

Problema differenza matrici

Ciao a tutti, da poco sto studiando c++ e sto riscontrando alcuni problemi in un esercizio che richiede di fare la differenza di due matrici,cioè, questo è quello che richiede l'esercizio:
Si realizzi un programma che, mediante opportuni sottoprogrammi, legga da tastiera due matrici
quadrate di interi con segno di dimensione scelta dall'utente e un intero positivo, restituendo una
terza matrice che contenga le differenze tra gli elementi di stesso posto della prima e della trasposta
della seconda, la stampi e, qualora la differenza tra il valore massimo e il valore minimo contenuti
nella matrice differenza sia maggiore dell'intero fornito, restituisca il numero dei valori della
matrice differenza che sono maggiori della metà dell'intero fornito e li stampi.
Ho iniziato a compilare questo codice, ma arrivo ad un certo punto è mi blocco.
#include <iostream>
using namespace std;
void matrice(int* m1,int r,int c);
void matrice2(int* m2,int r2,int c2);
void stampaM (int* m1,int r,int c,int* m2,int r2,int c2);
void differenza(int* m1,int* m2,int r,int c,int r2,int c2);


int main()
{
    int dim;
    int dim2;
    do
    {cout<<"Inserisci dimensioni della prima matrice"<<endl;
    cin>>dim;
    if(dim<=2)
    {cout<<"dimensione errata riprovare"<<endl;}
    }while(dim<=2);
    int m1[dim][dim];
    matrice(*m1,dim,dim);
    do
    {cout<<"Inserisci dimensioni della seconda matrice"<<endl;
    cin>>dim2;
    if(dim2<=2)
    {cout<<"dimensione errata riprovare"<<endl;}
    }while(dim<=2);
    int m2[dim2][dim2];
    matrice2(*m2,dim2,dim2);
    stampaM(*m1,dim,dim,*m2,dim2,dim2);


    return 0;
}



void matrice(int* m1,int r,int c)
{for(int i=0;i<r;i++)
    for(int j=0;j<c;j++)
        {cout<<"Inserisci elementi della prima matrice "<<r<<" "<<c<<" "<<endl;
         cin>>*(m1+j*r+i);
        }

}

void matrice2(int* m2,int r2,int c2)
{for(int x=0;x<c2;x++)
    for(int y=0;y<r2;y++)
        {cout<<"Inserisci elementi della seconda matrice "<<r2<<" "<<c2<<" "<<endl;
         cin>>*(m2+x*c2+y);
        }

}


void stampaM (int* m1,int r,int c,int* m2,int r2,int c2)
{for(int i=0;i<r;i++)
    {for(int j=0;j<c;j++)
        cout<<*(m1+j*r+i)<<" ";
        cout<<endl;
    }cout<<endl;
    for(int x=0;x<c2;x++)
        {for(int y=0;y<r2;y++)
            cout<<*(m2+y*c2+x)<<" ";
            cout<<endl;
        }
}
mi trovo bloccato che non so come scrivere il sottoprogramma che dovrebbe fare la differenza delle due matrici. Qualche anima pia potrebbe aiutarmi a capire come procedere???grazie a tutti in anticipo

3 Risposte

  • Re: Problema differenza matrici

    Comincia ad impostare la funzione e gli argomenti da passare (puntatore a prima matrice, a seconda matrice, a matrice differenza, righe, colonne)
  • Re: Problema differenza matrici

    Prova a ragionare in questo modo:

    1) input dei dati
    2) trasposta della seconda matrice
    3) differenza
    4) stampa risultato

    Dunque, l'input dei dati è uguale, quindi basta una funzione, l'hai realizzata, ma stranamente anzichè utilizzare la stessa funzione per l'input della seconda matrice ne scrivi un'altra praticamente uguale.
    Scrivi la funzione che fa la trasposta della seconda matrice. (Puoi fare i controlli delle dimensioni per verificare la fattibiltà dell'operazione di differenza, eventualmente uscire con errore)
    A questo punto fai la funzione che calcola la differenza, prende in ingresso le due matrice, numero di riga e colonna e con un doppio for produce una terza matrice differenza.
    Adesso sei pronto per la stampa con altra funzione.

    Mi sembra che dovresti scrivere una funzione trasposta al posto di matrice2.
  • Re: Problema differenza matrici

    Ciao, grazie per aver risposto! anche se sembrano uguali i due sottoprogrammi per input delle matrici,quello matrice 2 una volta inseriti i valori nella matrice gia li dispone per fare la trasposta, avendo cambianto nel ciclo for righe con colonne. Cosi non va bene???Oppure mi conviene fare come hai detto, cioè un unica funzione per l'input delle due matrici e poi un'altra funzione per la trasposta???
    Dopo provo a scrivere la funzione differenza e vedo un pò cosa viene fuori
    Grazie ancora per le risposte
Devi accedere o registrarti per scrivere nel forum
3 risposte