Salve a tutti,
avrei bisogno di un aiuto con un programma in C++ che mi ha un po spiazzato, essendo diverso da quelli precedentemente affrontati.
La traccia è questa:
"Si progetti ed implementi in C++ un algoritmo che, presi in input 2 numeri interi, n>=2 ed m>=2:
-Acquisisca da standard input gli elementi di vettore bidimensionale A di dimensione n*m e di un vettore bidimensionale B
di dimensione m*n.
-Invochi una procedura che verifichi se A è la matrice trasposta di B.
In caso affermativo la procedura deve fornire su standard output il messaggio "true"; altrimenti su standard output, la procedura
deve fornire la lista degli elementi differenti e dei rispettivi indici di posizione delle matrici A e B."
Il mio svolgimento è questo:
Tralasciando il fatto che ora l'ho scritto velocemente e con qualche imprecisione, mi sono reso conto già durante l'esame che nella procedura "trasposta" la seconda dimensione di entrambi gli array non è corretta perchè non rispetta le regole di scope, essendo dichiarata solo nel main. Come si risolve questo problema, non volendo usare i puntatori?codice:#include <iostream> using namespace std; int acquisisci (){ int num; cout<<"inserisci un intero maggiore di 2"<<endl; do{ cin>> num; if(num<2) cout<<"Errore. Riprova."<<endl; }while (num<2); } void trasposta (int A[][m], int B[][n], int n, int m){ for( int i=0; i<n; i++) for( int j=0; j<m; j++){ if(A[i][j] == B[j][i]) cout<<"true"<<endl; else if(A[i][j]!= B[j][i]){ cout<<"l'elemento"<<A[i][j]<<"posizionato in"<<i+1<<j+1<<endl; cout<<"e' diverso da "<<B[j][i]<<"posizionato in"<< j+1<<i+1<<endl; } } int main() { int n=acquisisci; int m=acquisisci; int A[n][m]; int B[m][n]; for( int i=0; i<n;i++) for( int j=0; j<m; j++){ cout<<"inserisci elemento riga"<<i+1<<"colonna"<< j+1<<"della prima matrice"<<endl; cin>> A[i][j]; } for( int i=0; i<m;i++) for( int j=0; j<n; j++){ cout<<"inserisci elemento riga"<<i+1<<"colonna"<< j+1<<"della prima matrice"<<endl; cin>>B[i][j]; } trasposta (A, B, n, m); system("PAUSE"); return 0; }

Rispondi quotando