Matrice di Lettere

  • Autore discussione Autore discussione Mattia Campagna
  • Data d'inizio Data d'inizio
Pubblicità
M

Mattia Campagna

Ospite
enum casella {B,N};

Dato questo enumerato ho creato una funzione che prende un N intero positivo e restituisce una matrice quadrata N*N di caselle disposte come una scacchiera.

Tutto funziona ma ho qualche perplessità sul come buttare giu una eventuale funzione "stampamatrice". Suggerimenti?

Codice:
#include <iostream>
#include <cstdlib>
using namespace std;

enum casella {B,N};

casella* creamatrice(int n) {
         if (n<=0)
            return 0;
         casella* mat = new casella[n*n];
         for (int i=0; i<n; i++)
             for (int j=0; j<n; j++)
                 if (i%2)
                    mat[i*n+j] = (j%2)?B:N;
                 else
                     mat[i*n+j] = (j%2)?N:B;
         return mat;
}

int main() {
    int dim;
    cin >> dim;
    cout << endl << endl;
    creamatrice(dim);
    system("pause");
    return 0;
}
 
Non ho ben capito la domanda. Comunque ti basta "scorrere" la tua matrice riga per riga e fare il cout<<cella[riga,colonna] e se arrivi alla fine della riga dai un endl;
 
Vorrei semplicemente stampare la matrice che ho creato in memoria con la funzione "creamatrice".

Dici che qualcosa del genere può andare bene?

void stampatrasposta(int dim, int b[][]){
for (int i=0; i<dim; i++){
for (int j=0; j<dim; j++){
cout << b[j] << endl;
}
}
}
 
Se fai andare quel codice innanzitutto te li stampa incolonnati: ad ogni valore della cella va a capo. Successivamente 'i' è il tuo indice per la riga e 'j' è l'indice della colonna quindi dovresti stampare la cella b[j]. Inoltre il codice che hai messo va bene solo se la matrice è quadrata :)
 
Allora, la matrice è necessariamente quadrata, infatti non mi sono sprecato a fare strane cose :)

Per quanto riguarda gli indici posso invertirli come no, tanto devo stampare due soli elementi disposti a scacchiera.

Solo che non saprei come ottimizzare la funzione stampa se non in quel modo, come hai ben detto così va a capo ad ogni valore..
 
void stampatrasposta(int dim, int b[][]){
for (int i=0; i<dim; i++){
for (int j=0; j<dim; j++){
cout << b[j] \t;
}
cout<<endl;
}
}


Ad ogni valore della cella manda un TAB e alla fine della riga un endl ;)
 
Pubblicità
Pubblicità
Indietro
Top