Allora: devo seguire alla lettera questa traccia d'esame, ma ho trovato difficoltà nel penultimo punto.
Il codice non da errori, ma ci deve essere qualche passaggio sbagliato!
TRACCIA
Esercizio svolto da me:codice:ESERCIZIO 1 Si realizzi un programma che, mediante opportuni sottoprogrammi, legga da tastiera una matrice di interi con segno di dimensioni scelte dall'utente, la stampi, crei un'altra matrice che contenga le somme dei valori contenuti in tutte le sue sottomatrici 2x2 non sovrapposte, la stampi e restituisca la riga che contiene il valore massimo nella nuova matrice. Il candidato realizzerà: – la lettura della matrice mediante un sottoprogramma che funzioni per qualsiasi matrice, note in precedenza le sue dimensioni; – la stampa di entrambe le matrici riutilizzando un unico sottoprogramma che stampa una matrice di dimensioni qualsiasi; – la generazione della seconda matrice mediante un sottoprogramma apposito che funzioni con matrici di dimensioni qualsiasi (vedere esempio in figura) e indichi al programma principale se tutti i valori sono stati usati o meno; – la ricerca della riga che contiene il valore massimo mediante un sottoprogramma apposito che funzioni per qualsiasi matrice. Il candidato curerà che l'utente sia impossibilitato ad inserire valori negativi per le dimensioni della matrice.
L'errore dovrebbe essere nel sottoprogramma mat2x2...codice:#include <iostream> using namespace std; void leggiMat(int*mat, int rig, int col); void stampaMat (int*mat, int rig, int col); bool mat2x2 (int*mat, int rig, int col); int main () { int r,c; cout<<"inserire n.righe\n"; cin>>r; cout<<"inserire n.colonne\n"; cin>>c; int m[r][c]; leggiMat (&m[r][c],r,c); stampaMat (&m[r][c],r,c); cout<<endl<<endl; if (mat2x2 (&m[r][c],r,c)==false) cout<<"Non ci sono valori inutilizzati\n"; else cout<<"Ci sono valori inutilizzati\n"; } void leggiMat (int*mat, int rig, int col) { for (int i=0;i<rig;i++) { for (int j=0;j<col;j++) { cout<<"inserisci mat["<<i<<"]["<<j<<"]: "; cin>>*(mat+i*col+j); } } } void stampaMat (int*mat, int rig, int col) { for (int i=0;i<rig;i++) { for (int j=0;j<col;j++) { cout<<*(mat+i*col+j); } cout<<endl; } } bool mat2x2 (int*mat, int rig, int col) { bool valori_inutilizzati=false; int RIG,COL; if (rig%2==0) RIG=rig/2; else { RIG=(rig-1)/2; valori_inutilizzati=true; } if (col%2==0) COL=col/2; else { COL=(col-1)/2; valori_inutilizzati=true; } int MAT[RIG][COL]; int I=0,J=0; for (int i=0;i<rig;i=i+2) { for (int j=0;j<col;j=j+2) { MAT[I][J]=*(mat+i*col+j)+*(mat+i*col+(j+1))+*(mat+(i+1)*col+j)+*(mat+(i+1)*col+(j+1)); J++; } cout<<endl; I++; } stampaMat (&MAT[RIG][COL],RIG,COL); return valori_inutilizzati; }

Rispondi quotando