Salve a tutti sono alle prese con un esercizio che chiede di stampare le sottomatrici 2x2 presenti in una matrice di dimensione a scelta dell'utente,e queste sottomatrici non devono essere sovrapposte. Ho provato a mettere il cout della matrice direttamente all'interno del sottoprogramma in modo da semplificare un po i processi ma il codice non stampa la somma delle sottomatrici ma dei numeri enormi come per esempio 2130201392193.
Vi allego il codice e sarei curioso di sapere l'errore dell'ultimo sottoprogramma dove è..CIaooo!
#include <iostream>
#include <stdlib.h>
using namespace std;
void Leggi (int *,int ,int);
void Stampa (int *,int , int);
void Sottomatrici2x2 (int *,int,int );
int main()
{
int r,c;
do {
cout<<"Salve utente,inserire le righe della matrice";
cin>>r;
cout<<"Inserire il numero di colonne";
cin>>c;
if (c==0 || c<0 || r<0 || r==0)
{cout<<"Dimensioni errate";}
} while (c==0 || c<0 || r<0 || r==0); //chiusura del ciclo while che si ripete fin quando non sono
int m[r][c]; // inserite le giuste dimensioni per la matrice.
Leggi (&m[0][0],r,c);
Stampa (&m[0][0],r,c);
Sottomatrici2x2 (&m[0][0],r,c);
}
void Leggi(int *m,int r,int c)
{
int i,j;
for (i=0;i<r;i++)
{
for (j=0;j<c;j++)
{
cout<<"Inserire l'elemento di posto["<<i<<"]["<<j<<"]";
cin>>*(m + i*r + j);
}
}
}
void Stampa(int *m,int r,int c)
{
cout<<"La matrice inserita e' ..";
int i,j;
for (i=0;i<r;i++)
{
cout<<"\n ";
for (j=0;j<c;j++)
{
cout<<" "<<*(m + i*r + j);
}
}
}
void Sottomatrici2x2 (int *m,int r,int c )
{
int r1;
r1=r/2;
int c1;
c1=c/2;
int m2[r1][c1];
int I=0;int J=0;
for (int i=0;i<r;i=i+2)
{
for (int j=0;j<c;j=j+2)
{
m2[I][J] = (*(m + i*c + j)) + (*(m + i*(c+1) + j))+(*(m + (i+1)*c + j)) + (*(m + (i+1)*c + j+1));
J++;
}
I++;
}
cout<<"la matrice inserita e'... ";
for (int x=0;x<I;x++)
{
cout<<"\n ";
for (int y=0;y<J;y++)
{
cout<<m2[x][y];
}
}
}