Programma OOP

di il
8 risposte

Programma OOP

Salve a tutti, questo è il mio primo post.
Ho bisogno del vostro aiuto con la programmazione ad oggetti. Tra non molto ho l'esame di laboratorio e ancora oggi ho qualche dubbio e difficoltà con l'utilizzo dello strem I/O.
Adesso vi allego un esempio dell'esame e la mia soluzione. Però vi è qualche errore in quanto non compila correttamente. Qualcuno di voi potrebbe dirmi dove sbaglio?

Testo esame: Soluzione:
#include <iostream>

#include <iomanip>

#include <cmath>

#include <ctime>

#include <cstdlib>

#include <typeinfo>

#define DIM 50
#define N 5


using namespace std;





class A {

public:

	A(float a) {

		x = new float[N];



		x[0] = a;

		for(int i=1; i<N; i++) x[i] = (float) sin(100*x[i-1]);

	}

	virtual float f() = 0;

	float* getX() { return x; }

	virtual ostream& put(ostream &out) {

		out << "[";

		for(int i=0; i<N; i++) {

			out << x[i] << ", ";

		}

		out << "]" << endl;

		return out;

	}



private:

	float *x;

};



ostream& operator<<(ostream &out, A &a) {

	return a.put(out);

}



class B : public A {

public:

	B(float b) : A(b) {}

	virtual float f() {

		float *_x_ = getX();

		float max = 0.0;



		for(int i=0; i<N; i++) {

			if(_x_[i] > max) max = _x_[i];

		}



		return max;

	}

	ostream& put(ostream &out, B &b) {

		return A::put(out) << "\tClasse B." << endl;

	}

};





class C : public A {

public:

	C(float c) : A(c) {}

	virtual float f() {

		float *_x_ = getX();

		float tot = 0.0, media = 0.0;



		for(int i=0; i<N; i++) tot += _x_[i];



		media = tot/N;



		return media;

	}

	int gte(float thr) {

		float *_x_ = getX();

		int counter = 0;



		for(int i=0; i<N; i++) {

			if(_x_[i] > thr) ++counter;

		}



		return counter;

	}

	ostream& put(ostream &out, C &c) {

		return A::put(out) << "\tClasse C." << endl;

	}

};





class D {

public:

	D(float seed) : c(seed/3) {

		if(seed > 0.5) a = new B(seed);

		else a = new C(seed);



		b = new B(seed/2);

	}

	float m() {

		float max[3] = { 0.0, 0.0, 0.0 }, MAX;

		float *x_a = a->getX(), *x_b = b->getX(), *x_c = c.getX();



		for(int i=0; i<N; i++) {

			if(x_a[i] > max[0]) max[0] = x_a[i];

			if(x_b[i] > max[1]) max[1] = x_b[i];

			if(x_c[i] > max[2]) max[2] = x_c[i];

		}

		MAX = max[0] + max[1] + max[2];



		return MAX;

	}

	float h(float thr) {

		float rap = 0.0;

		rap = c.f()/(*b).f();



		if(typeid(*a) == typeid(C)) rap *= ((C*)a)->gte(thr);



		return rap;

	}

	ostream& put(ostream &out) {

		return out << *a << "\n" << *b << "\n" << c << endl;

	}



private:

	A *a;

	B *b;

	C c;

};



ostream& operator<<(ostream &out, D &d) {

	return d.put(out);

}



int main()

{

	srand(111222333);

	D* vett[DIM];



	for(int i=0; i<DIM; i++) {

		cout << "Oggetto " << i+1 << "\n";
        vett[i] = new D((float)rand()/RAND_MAX);
        cout<< *vett[i] << "\t ";
	}

	cout << endl << endl;



	float tot = 0.0, media;

	for(int i=0; i<DIM; i++) {

		tot += vett[i]->h(0.7);

	}

	media = tot/DIM;

	cout << "\n\nMedia di h(0.7) = " << media << endl;



	float val = 0.0;

	val = (*vett[4]).m() + (*vett[5]).m();

	cout << "\nvett[4].m() + vett[5].m() = " << val << endl << endl;



	system("PAUSE");

	return 0;

}

Grazie mille in anticipo

8 Risposte

  • Re: Programma OOP

    Invece di farcelo copiare e compilare, non puoi dirci quali errori hai?
  • Re: Programma OOP

    Si visualizzano gli oggetti dal decimo in poi (Saltando dal primo al nono) ... e il secondo punto è errato.
    Compila il programma ma non è corretto. Volevo capire dove sta l'errore.
  • Re: Programma OOP

    Come vedi si visualizza parte dell'oggetto 9 e poi dal 10 in poi...

    Lab.png
    Lab.png

    E il secondo punto non coincide:
  • Re: Programma OOP

    All'inizio hai scritto che non compilava correttamente ...
  • Re: Programma OOP

    Non ho detto che il codice non indenta. Ho detto che non compila correttamente in quanto parte degli oggetti non vengono stampati e il secondo punto è errato. Per caso sa dirmi dove sbaglio?
  • Re: Programma OOP

    Ma non ho detto non indenta ! Non vuol dire nulla non indenta !
    Leggi bene ... Ho detto non compila ma vedo invece che compila correttamente ma a runtime non funziona come dovrebbe. Sai che vuol dire "non compila"?

    Comunque le schermate non si leggono e non si capisce il problema.
  • Re: Programma OOP

    Nel codice lei vede errori? Era questa la mia domanda sin dall' inizio
  • Re: Programma OOP

    Non ci sono errori in compilazione.
Devi accedere o registrarti per scrivere nel forum
8 risposte