Creazione matrici con dati a Zig-Zag

di il
2 risposte

Creazione matrici con dati a Zig-Zag

Ciao a tutti,
Sto facendo un esercizio che mi chiede di creare una matrice ed inserire numeri interi a zig-zag, come vi mostro qui sotto partendo dal basso con lo zero:

9 10 17 18 22 23
3 8 11 16 19 21
2 4 7 12 15 20
0 1 5 6 13 14

Ho creato la matrice con un vettore in quanto prende dati dall'utente e ho realizzato una normale matrice che se fosse 4X4 sarebbe:

12 13 14 15
8 9 10 11
4 5 6 7
0 1 2 3

ma non riesco proprio a capire il ragionamento dello zig zag.
Vi posto il poco codice che ho scritto:

int main () {
int rows, cols, n=-1;
cout << "Insert a number of rows: \n";
cin >> rows;
cout << "Insert a number of cols: \n";
cin >> cols;
vector<int>matrix(rows*cols,0);

for(int i=0;i<rows;++i) {
for (int j=0;j<cols;++j) {
matrix[j*cols+i]=n+=1;
}
}
for(int i=rows-1;i>=0;--i) {
cout << endl;
for (int j=0;j<cols;++j) {
cout << setw(3) << matrix[j*cols+i];
}
}
return 0;
}
Avete qualche idea???
Grazie a tutti!!

2 Risposte

  • Re: Creazione matrici con dati a Zig-Zag

    Ciao ^^ ,

    Il codice di un programma va messo tra i tag code e /code . Leggi il regolamento prima di creare un topic ^^
  • Re: Creazione matrici con dati a Zig-Zag

    Ciao, come ha detto AlessandroS, per rendere più 'scorrevole' la lettura di codice, si devono usare i tag appropriati. Apparte questo, analizziamo il problema da te proposto. Devi inserire numeri interi da 0 ad N, con N uguale a ((RxC)-1) , giusto? il primo numero (0) deve partire dall'angolo in basso a sinistra , e l'ultimo numero (N-1) nell'angolo in alto a destra, correggimi se sbaglio. A questo punto possiamo dire che per il zig-zag abbiamo due direzioni: una che va dall'alto verso il basso e l'altra dal basso verso l'alto . Il verso cambia direzionequando incontra diciamo 'la cornice' della matrice, quindi il verso non cambia fintanto che l'indice di riga è compreso tra 0 e (R-1) e l'indice di colonna tra 0 e (C-1). Il ciclo totale finisce quando l'indice di riga è 0 e l'indice di colonna è (C-1), ovvero la posizione dell'ultimo elemento da inserire (in alto a destra).
    A questo punto l'utilizzo dei for non mi sembra una buona idea, in quanto gli indici variano in base a determinate condizioni. Io suggerirei di riempire la matrice utilizzando due cicli while per le direzioni, e un ciclo generale che verifica la condizione di posizionamento sull'ultimo valore. Fai una prova .
Devi accedere o registrarti per scrivere nel forum
2 risposte