nazdar. Potreboval by som pomoc s jedným zadaním. Mám zo súboru načítat maticu , v prvom riadku má byt počet riadkov a stlpcov, dalšie hodnoty budú hodnotami matice. Jakým sposobom to mám načítat do tej matice? hlavne ide o to jak odtial dostanem tie rozmery matice z toho prvého riadku. Dakujem za pomoc
Fórum › C / C++
Načítanie súboru do matice
#1 Marcel
int radky, sloupce;
int **matice;
inFile >> radky >> sloupce;
matice = new int*[radky];
for(int i = 0; i < radky; i++) {
matice[i] = new int[sloupce];
for(int j = 0; j < sloupce; j++)
inFile >> matice[i][j];
}
takhle, je to bez ověřování proměnných atd..
a ešte sa chcem spýtat že ked chcem dat príkaz načítanie z matice ako funkcu cez void, tak ako tam zadeklarujem tú maticu (int** mat) ?
void nacitaj()
{int i,j,m,n; int **mat ;
char *inname = "test.txt";
ifstream infile(inname);
if (!infile) {
cout << "Nastal problem s otvorenim suboru "
<< inname
<< " na citanie."
<< endl;
return ;
}
else
{
infile >> m >> n;
mat = new int*[m];
for( i = 0; i < m; i++) {
mat[i] = new int[n];
for(j = 0; j < n; j++)
{infile >> mat[i][j];}
}
}
return;
}
takto to mám spravené, ale ked chcem tu istu maticu použit v nejakej inej funkcii, napr výpis jak keby ju nevdelo rozpoznat, neviem jak ju mám zadeklarovat.
void vypis( )
{ int **mat;
int i,j;
for (i=0;i<m;i++) {
for(j=0;j<n;j++)
{
cout.width(5);
cout<<mat[i][j];
}
cout<<endl;
}
return;
}
toto mi nefunguje neviem kde je chyba, ale myslím že v niečo s tým zápisom s maticou ale neviem si rady. fakt díky.
#7 Marcel
vo funkcii vypis() pouzivas neinicializovanu maticu, ked nacitas/vytvoris maticu, tak ju musis dostat do funkcie ako parameter (alebo this, globalnu premennu, ...) . Cize funkcia bude vyzerat dako takto:
void vypis(int ** mat, size_t riadky, size_t stlpce);
Kedze programujes v c++, tak sa uplne ziada pouzit na maticu triedu ktora bude obsahovat samotne data, pocet riadkov a stlpcov. Potom moze vyzerat funkcia takto:
class matica{
int **mat;
size_t riadky;
size_t stlpce;
public:
//konstruktor
//destructor
//...
};
void vypis(const matica &mat);
alebo rovno:
class matica{
//...
void vypis();
void nacitaj(const string &meno_suboru);
};
Mozno by bolo dobre alokovat maticu ako jednorozmerne pole( new int[riadky*stlpce]), bude zaberat menej miesta, alokacia bude rychlejsie a bude sa lepsie zapisovat do suboru; Na pristup k prvkom matice sa da pekne pretazit operator []
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Načítanie matice zo súboru — založil DušanDinoZzo
C - Načítanie matice zo súboru — založil Calissa
Program nacitanie matice — založil pcmaker
C++: Nacitanie matice funkciou — založil Systém
C++: Nacitanie matice funkciou — založil Systém
Moderátoři diskuze