Salve, potreste indicarmi cosa ho sbagliato in questo esercizio? Grazie mille in anticipo...
la matrice data è la seguente:
5 2 5 5 3 2 9
1 3 5 2 1 6 7
3 5 5 3 2 3 1
2 7 5 1 1 9 0
7 6 5 9 7 4 4
#include <iostream>
using namespace std;
/*1.'estraiVettore' che riceve in ingresso una matrice di interi A e un intero
z che pu`o assumere i valori 0 o 1.
Se z = 0, la funzione restituisce un array contenente gli elementi di A che si
trovano nelle posizioni (i, j) con i+j pari.
Se z = 1, la funzione restituisce un array contenente gli elementi che si
trovano nelle posizioni (i, j) con i+j dispari.
Ad esempio, se la funzione riceve la matrice sotto riportata e z = 1, viene
restituito l’array [2, 5, 2, 1, 5, 1, 7, 5, 3, 3, 2, 5, 1, 0, 6, 9, 4].*/
int* estraiVettore (int** A, bool z, int r, int c)
{
int dim;
if (z == 0)
dim = (r*c)/2 + 1;
else
dim = (r*c)/2;
int* v = new int[dim];
for (int n=0; n<dim; n++)
for (int i=0; i<r; i++)
for (int j=0; j<c; j++)
{
if( (z==0) && ((i+j) % 2 != 0))
v[n] = A[i][j];
else
if ((z == 1) && ((i+j) % 2 != 0))
v[n] = A[i][j];
}
return v;
}
/*2.'mediaRighe' che riceve in ingresso una matrice di interi A e due numeri
interi r1 ed r2 e restituisce il valore medio degli elementi di A che si trovano
nelle righe con indice compreso tra r1 e r2.
Ad esempio, se la funzione riceve come parametri la matrice sottostante, r1 = 1
ed r2 = 3, restituisce il valore 3,43
pari alla media dei numeri [1, 3, 5, 2, 1, 6, 7, 3, 5, 5, 3, 2, 3, 1, 2, 7, 5,
1, 1, 9, 0] che si trovano nelle righe 1, 2 e 3 della matrice.*/
float mediaRighe (int** A, int r1, int r2, int r, int c)
{
int somma;
int num = (r2-r1+1)*c;
for (int i=r1; i<r2; i++)
for (int j=0; j<c; j++)
somma += A[i][j];
float media = somma/num;
return media;
}
/*3. 'trasponiMatrice' che riceve in ingresso una matrice di interi e ne
restituisce la trasposta.*/
int** trasponiMatrice (int** A, int c, int r)
{
int** T = new int* [c];
for (int i=0; i<c; i++)
T[c] = new int[r];
for (int i=0; i<c; i++)
for (int j=0; j<r; j++)
T[i][j] = A[j][i];
return T;
}
/*4. un main in cui si leggono le funzioni dei punti 1, 2 e 3.*/
int main()
{
int** A = new int*[5];
A[0] = new int[7]{5, 2, 5, 5, 3, 2, 9};
A[1] = new int[7]{1, 3, 5, 2, 1, 6, 7};
A[2] = new int[7]{3, 5, 5, 3, 2, 3, 1};
A[3] = new int[7]{2, 7, 5, 1, 1, 9, 0};
A[4] = new int[7]{7, 6, 5, 9, 7, 4, 4};
int* v = estraiVettore(A, 1, 5, 7);
cout << " v = [ " ;
for(int i=0; i<17; i++)
cout << v[i] << " ";
cout << "]" << endl;
cout << mediaRighe(A, 1, 3, 5, 7);
int** T = trasponiMatrice(A, 7, 5);
for (int i=0; i<7; i++)
{
for (int j=0; j<5; j++)
cout << T[i][j] << " ";
cout << "/t " << endl;
}
return 0;
}