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:
mentre questo è il compito.cpp: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(); };
il main.cpp invece ci viene dato dai professori, chiama le funzioni che abbiamo scritto ed è il seguente: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; }
e contiene pure la chiamata alle funzioni della parte seconda.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; }
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

Rispondi quotando



