salve a tutti, quello che vi chiedo oggi riguarda un esercizio per la prova pratica di informatica della mia università, da spiegare come esercizio è un pochino lungo ma comunque è semplice, il testo è il seguente, ci sarebbe anche la seconda parte dell'esercitazione ma per il momento il problema si trova nella prima parte.
http://it.tinypic.com/r/1zy7979/8
il codice scritto da me si divide in due parti, un file con estenzione .h in cui dichiaro la classe e tutte le funzioni che andrò ad usare ed un file con estenzione .cpp in cui vado a scrivere le funzioni vere e proprie. ecco il codice di seguito:
compito.h:
codice:
#include <iostream>
#include <cstring>
using namespace std;
class Display {
int n;
bool *display; //false: led spento , true: led acceso;
public:
Display (int );
bool set (const char );
friend ostream & operator<<(ostream & , const Display & );
void specchia ();
//~Display();
};
mentre questo è il compito.cpp:
codice:
#include "compito.h"
Display::Display (int dim) {
n= (dim<=0 || ((dim%2)==0))? 5 : dim;
display=new bool[n*n];
for (int i=0; i<n; i++)
for (int j=0; j<n; j++)
display[i*dim+j]=false;
};
bool Display::set (const char ch) {
int media = n/2;
for (int i=0; i<n; i++){
for (int j=0; j<n; j++){
if (ch=='-' && i==media)
display[i*n+j]=true;
if (ch=='|' && j==media)
display[i*n+j]=true;
if (ch=='/' && i==(n-j-1))
display[i*n+j]=true;
else
return false;
}
}
return true;
}
ostream & operator<<(ostream & os, const Display & d) {
int dim= d.n;
for (int i=0; i<dim; i++){
for (int j=0; j<dim; j++){
if (d.display)
os<<'1';
else
os<<'0';
}
os<<endl;
}
return os;
}
il main.cpp invece ci viene dato dai professori, chiama le funzioni che abbiamo scritto ed è il seguente:
codice:
#include "compito.h"
#include <iostream>
using namespace std;
int main(){
//PRIMA PARTE
cout<<"1/8 Test del costruttore (deve creare un Display 5x5 con tutti i led spenti)"<<endl;
Display d1(4);
cout<<d1<<endl;
cout<<"2/8 Test della set('-') (deve stampare la riga centrale accesa)"<<endl;
d1.set('-');
cout<<d1<<endl;
cout<<"3/8 Test della set('|') (deve stampare la colonna centrale accesa)"<<endl;
Display d2(5);
d2.set('|');
cout<<d2<<endl;
cout<<"4/8 Test della set('/') (deve stampare la diagonale ascendente accesa)"<<endl;
Display d3(7);
d3.set('/');
cout<<d3<<endl;
// SECONDA PARTE
cout<<"5/8 Test dell'or bit a bit (deve stampare il segno '+')"<<endl;
d1|=d2;
cout<<d1<<endl;
cout<<"6/8 Test della 'specchia' (deve stampare la diagonale discendente 7x7 accesa)"<<endl;
d3.specchia();
cout<<d3<<endl;
{
Display d4(3);
cout<<"7/8 Test dell'operatore di assegnamento (deve stampare l'asta '|' 5x5)"<<endl;
d4=d2;
cout<<d4<<endl;
cout<<"8/8 Test (implicito) del distruttore"<<endl;
}
return 0;
}
e contiene pure la chiamata alle funzioni della parte seconda.
come vi avevo accennato prima il problema si trova nella prima parte del codice e (secondo il mio parere) nella classe ostream che stampa a video il contenuto delle matrici, infatti questo programma mi stampa in ogni caso, una matrice formata da tutti 1 invece che stamparmi:
-0 se display==false;
-1 se display==true;
non riesco tuttavia a capirne il motivo, spero che riusciate ad individuare il problema della funzione ed aiutarmi!
Grazie mille delle risposte.
l'uscita del mio terminale è la seguente:
http://it.tinypic.com/r/2w54zsi/8