Funzione che ritorna un array

di il
3 risposte

Funzione che ritorna un array

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++

3 Risposte

  • Re: Funzione che ritorna un array

    La funzione sarà
    
    double * extractValues2(double **M, int righe, int colonne, double threshold)
    {
    	double *w = (double *)malloc(righe*colonne*sizeof(double));
    
    	if (w)
    	{
    		int a = 0;
    		for (int i = 0; i < righe; i++)
    			for (int j = 0; j < colonne; j++)
    			{
    				if (M[i][j] >= threshold)
    					w[a++] = M[i][j];
    			}
    
    		w = (double *)realloc(w, a * sizeof(double));
    	}
    
    	return w;
    }
    
    Questo con la malloc/realloc
  • Re: Funzione che ritorna un array

    @oregon
    quindi era sbagliato fare un ciclo for per gli elementi dell'array? grazie per l'aiuto !
  • Re: Funzione che ritorna un array

    Sì, era sbagliato.
Devi accedere o registrarti per scrivere nel forum
3 risposte