Esercizio array e allocazione dinamica

di il
3 risposte

Esercizio array e allocazione dinamica

Salve a tutti,

Ho un file .h precompilato e per esercizio devo implementare nel file .cpp ciò che è stato scritto nell'header dopodiché dovrò inserirlo in un posto che con il file di test correggerà, senza la necessità di scrivere il main.
ovviamente ho provato a scriverlo il main per testare a mia volta e non dà errori di compilazione.

Su tre test ne passa solo 1, e mi avverte che l'array non è inizializzata a zero, però non ho capito come mai.
Oltretutto credo di non aver compreso cosa richiede il testo riguardo l'uso del metodo get e metodo set, infatti sono momentaneamente uguali, proprio perché non ho inteso cosa abbiano di diverso, ma credo siano entrambi sbagliati dal momento che il test non lo passano


il testo dell'esercizio è il seguente :

-creare una matrice impostando tutti i valori a zero
-se si cerca di impostare un valore a coordinate fuori dal range della dimensione della matrice il metodo setValue rende false; se si imposta un valore a coordinate accettabili rende true.
-se si cerca di ottenere come terzo argomento del metodo getValue un valore a coordinate fuori dal range il metodo rende fals, altrimenti rende true, mentre il valore della matrice è reso usando l'argomento.

il file .h


#ifndef SIMPLEMATRIX_H_
#define SIMPLEMATRIX_H_

class SimpleMatrix {
public:
	SimpleMatrix(int r, int c);
	~SimpleMatrix();
    void print();
	bool setValue(int x, int y, int v);
	bool getValue(int x, int y, int& v);

private:
	int rows;
	int cols;
	int* data;
};

mentre il .cpp

#include "SimpleMatrix.h"
#include <iostream>
using namespace std;

SimpleMatrix::SimpleMatrix(int r, int c) {
    rows = r;
    cols = c;
    int dim = rows*cols;
    data = new int[rows*cols];
    for(int i = 0; i < dim; i++)
        data[i]=0;
}
SimpleMatrix::~SimpleMatrix() {
    delete []data;
}

void SimpleMatrix::print(){
    for(int i = 0; i < rows*cols ; i++)
        cout<< data[i] <<endl;
}

bool SimpleMatrix::setValue(int x, int y, int v) {
    if((v >= 0) && (v <= x && v <= y)){
        cout<< "vero set" <<endl;
        return true;
    }
    else {
        cout << "falso set" << endl;
        return false;
    }
}

bool SimpleMatrix::getValue(int x, int y, int &v) {

    if((v >= 0) && (v <= x && v <= y)){
        cout<< "vero get" <<endl;
        return true;
    }
    else {
        cout << "falso get" << endl;
        return true;
    }
}
grazie in anticipo a chi risponderà

3 Risposte

  • Re: Esercizio array e allocazione dinamica

    Non controlli x e y con rows e cols nei metodi ma con v che è il valore e non c'entra nulla con le coordinate.

    Restituisci sempre true nella get.

    Non restituisci il valore della matrice con v nella get.
  • Re: Esercizio array e allocazione dinamica

    Ti ringrazio per la risposta,

    Ho riscritto il .cpp così, il test va un po' meglio e ho cambiato v con le colonne e le righe, e mi dà questo suggerimento

    hint: your code/tests do not correctly cover initial matrix values should be 0
    hint: your code/tests do not correctly cover check setValue and getValue, and how to compute coordinates in a row-wise array.

    come le devo calcolare le coordinate?
    non capisco se ho inizializzato bene la matrice a 0
    
    #include "SimpleMatrix.h"
    #include <iostream>
    using namespace std;
    
    SimpleMatrix::SimpleMatrix(int r, int c) {
     rows = r;
     cols = c;
     int dim = rows*cols;
     data = new int[rows*cols];
     for(int i = 0; i < dim; i++)
         data[i]=0;
    }
    SimpleMatrix::~SimpleMatrix() {
        delete []data;
    }
    
    void SimpleMatrix::print(){
       for(int i = 0; i < rows*cols ; i++)
           cout<< data[i] <<endl;
    }
    
    bool SimpleMatrix::setValue(int x, int y, int v) {
        if((x >= 0 && y >= 0) && (x <= rows && y <= cols))
        {
            cout<< "vero set" <<endl;
            return true;
        }
        else {
            cout << "falso set" << endl;
            return false;
        }
    }
    
    bool SimpleMatrix::getValue(int x, int y, int &v) {
    
        if((x >= 0 && y >= 0) && (x <= rows && y <= cols)){
            v = data[x*y];
            cout<< "vero get" <<endl;
            return true;
        }
        else {
            cout << "falso get" << endl;
            return false;
        }
    }
    
    
    
  • Re: Esercizio array e allocazione dinamica

    Sono riuscito a farlo passare senza errori dai file di test, posto il codice corretto, se qualcuno ha qualche consiglio per miglioramenti etc.
    sono ben accetti
    
    #include "SimpleMatrix.h"
    
    SimpleMatrix::SimpleMatrix(int r, int c) : rows(r),cols(c){
     data = new int[rows*cols];
    }
    
    SimpleMatrix::~SimpleMatrix() {
        delete []data;
    }
    
    bool SimpleMatrix::setValue(int x, int y, int v) {
        if((x >= 0) && (y >= 0) && (x < rows) && (y < cols))
        {
            data [x + y * rows] = v;
            return true;
        }
        else
            return false;
    }
    
    bool SimpleMatrix::getValue(int x, int y, int &v) {
    
        if((x >= 0) && (y >= 0) && (x < rows) && (y < cols)){
            v = data [x + y * rows];
            return true;
        }
        else
            return false;
    }
    
    
Devi accedere o registrarti per scrivere nel forum
3 risposte