Ciao a tutti,
ho una matrice fatta in questo modo:
0 1 2
0 3 4
0 5 6
1 7 8
1 9 10
1 11 12
2 13 14
2 15 16
2 17 18
Vorrei che venisse trasformata seguendo la lettura del primo elemento di ogni riga, come se fosse un indice. Se il primo elemento della riga e' 0, allora la riga sta dove e' (colonne 1,2,3), se e' 1 allora le tre entrate della riga vengono spostate nelle colonne 4-5-6 rispettivamente, se invece e' 2 vengono spostate nelle colonne 7-8-9. In pratica il file finale e' questo:
0 1 2 1 7 8 2 13 14
0 3 4 1 9 10 2 15 16
0 5 6 1 11 12 2 17 18
Il mio codice e' questo:
#include <iostream>
#include <fstream>
int main()
{
#define righe 9
#define colonne 3
float mat[righe][colonne];
//legge dati
std::ifstream read ("matrice.dat");
if (!read){
std::cout<<"File doesn't exist";
return 1;
}
for (int r=0; r<righe; r++){
for (int c=0; c<colonne; c++){
read >> mat[r][c];
}}
//scrivi dati
std::ofstream write ("newMat2.dat");
for (int r=0; r<righe; r++){
if (mat[r][0]== mat[r+1][0]){
for (int c=0; c<colonne; c++){
write << mat[r][c] << " ";
}
write <<std::endl;
}}
read.close();
write.close();
return 0;
}
Ma l'output e'
0 1 2
0 3 4
1 7 8
1 9 10
2 13 14
2 15 16
Sapreste suggerirmi come fare? Non lo faccio a mano perche' in realta' il file che ho e' molto piu' grande di 9 righe e 3 colonne...
Grazie mille!