allora ho indicizzato l'array modificando questa parte di codice:
ma ora mi da il problema oppposto, ovvero stampa tutti 0, cosa sbaglio (scusami ancora!!!)?codice: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[i*dim+j]==true) os<<'1'; else if (d.display[i*dim+j]==false) os<<'0'; } os<<endl; } return os; }
codice:if ( d.display[i*dim+j] ) // Se il valore è true, l'espressione è true e andrà in then, altrimenti in else os<<'1'; else // Se non è true, non serve un secondo if per sapere che è false... :) os<<'0';
Questo è più che sufficiente...
Perchè stampa tutti 0... Guarda, ad esempio, la "set()":
Se il carattere passato è '-', comincierà il controllo. Siamo sulla prima cella (0,0), il primo if non viene soddisfatto.codice: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; } }
Va a vedere il secondo if, non viene soddisfatto.
Va a vedere il terzo if, non viene soddisfatto quindi ritorna false... ma come? E tutte le altre celle non le controlliamo? Ci fermiamo alla prima?
Ricorda che gli "else" non sono obbligatori... se il flusso logico non ha bisogno di una "alternativa", semplicemente non metterla.
Ciao.![]()
"Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza
quindi basta togliere l'else alla set?
scusa se ti disturbo ancora, ora ho visto che funziona tutto tranne una seconda funzione, la specchia che dovrebbe stampare la matrice come se fosse riflessa a specchio.
questo è il mio codice:
il problema è che mi ristampa la stessa matrice senza invece scambiare le righe, anche qui, cosa sbaglio?codice:void Display::specchia () { bool temp; for (int i=0; i<n; i++){ for (int j=0; j<n; j++){ temp=display[i*n+j]; display[i*n+j]=display[i*n+(n-j-1)]; display[i*n+(n-j-1)]=temp; } } return; }