Ciao ragazzi, sto riscontrando dei problemi con una funzione
scrivere una funzione c++ di nome extractValues2 che riceva in input una matrice bid. M di numeri double e una variabile threshold, anch'essa double, e ritorni un array di elementi double contenente i valori di M che sono maggiori o uguali di threshold. L'array deve essere dimensionato all'interno della funzione. Qualora non vi fossero elementi che soddisfano la condizione, la funzione ritorni nullptr.
Io ho sviluppato il programma così:
#include <iostream>
using namespace std;
void initMat(double** M, int righe, int colonne)
{
for (int i=0; i<righe;i++)
for (int j=0; j<colonne;j++)
{
cout << "M[" << i << "][" << j << "] = ";
cin >> M[i][j];
}
}
void stampaM(double** M, const int righe, const int colonne)
{
for (int i=0; i<righe;i++)
{
for (int j=0; j<colonne;j++)
cout << M[i][j] << " ";
cout << endl;
}
}
double * extractValues2(double **M, int righe, int colonne, double threshold)
{
double * w = new(nothrow) double[righe*colonne];
for(int a=0; a<righe*colonne;a++)
{
for(int i=0; i<righe;i++)
for(int j=0; j<colonne;j++)
{
if (M[i][j]>=threshold)
w[a]=M[i][j];
else
w[a]=0;
}
}
return w;
}
int main()
{
const int righe = 2;
const int colonne = 3;
double **M = 0;
M = new(nothrow) double*[righe];
for (int i=0; i<righe;i++)
M[i] = new(nothrow) double[colonne];
initMat(M, righe, colonne);
cout << "la matrice è: " << endl;
stampaM(M,righe,colonne);
double threshold = 2.2;
double *w;
w = extractValues2(M, righe, colonne, threshold);
for(int k=0;k<righe*colonne;k++)
cout <<"w[" << k << "]= " << w[k] << endl;
for(int j=0;j<righe;j++)
delete[] M[j];
delete[] M;
return 0;
}
ma quando vado a stampare, inserisco i valori della matrice e mi ritorna un array con tutti gli elementi pari a zero.
M[0][0] = 2.2
M[0][1] = 4.5
M[0][2] = 6.2
M[1][0] = 7.8
M[1][1] = 5.4
M[1][2] = 2.2
la matrice è:
2.2 4.5 6.2
7.8 5.4 2.2
w[0]= 0
w[1]= 0
w[2]= 0
w[3]= 0
w[4]= 0
w[5]= 0
cosa sto sbagliando? siate clementi, sono alle prime armi con la programmazione c++