Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Wczytanie macierzy z pliku .txt

Ostatnio zmodyfikowano 2014-01-28 12:48
Autor Wiadomość
saszkaa
Temat założony przez niniejszego użytkownika
Wczytanie macierzy z pliku .txt
» 2014-01-27 23:45:48
Witam mam ogromny problem z zapisem do tablicy macierzy z pliku txt jak by ktoś miał jakiś pomysł jak to zrobić to bardzo bym prosił żeby to jakoś wytłumaczył :)

oto mój kod :
C/C++
#include <iostream>
#include <string>
#include <fstream>
using namespace std;

void funkcja( fstream & plik, int macierz[ 10 ][ 10 ] )
{
    wczytac macierz i zapisac do tablicy...
}



int main()
{ int macierz[ 10 ][ 10 ];
    int tab[ 10 ][ 10 ];
    for( int i = 0; i < 10; i++ )
    {
        tab[ 0 ][ i ] = 0;
    }
   
    for( int i = 0; i < 10; i++ )
    {
        tab[ 1 ][ i ] = rand() % 9 + 1;
    }
    for( int i = 2; i < 10; i++ )
    {
        for( int j = 0; j < 10; j++ )
        {
            tab[ i ][ j ] = 0;
        }
    }
   
    for( int i = 0; i < 10; i++ )
    {
        for( int j = 0; j < 10; j++ )
        {
            cout << tab[ i ][ j ] << " ";
        }
        cout << endl;
    }
   
    fstream plik( "data.txt", ios::out | ios::in );
    if( plik.good() == true )
    {
        cout << "uzyskano dostep do pliku!" << endl;
    }
    for( int i = 0; i < 10; i++ )
    {
        for( int j = 0; j < 10; j++ )
        {
            plik << tab[ i ][ j ] << " ";
        }
        plik << endl;
    }
    funkcja( plik, macierz );
   
   
    system( "PAUSE" );
    return 0;
}
P-103381
Atexor
» 2014-01-28 00:10:27
Witaj, jak możesz to kod wstawiaj w znacznikach
[cpp]...[/cpp], będzie lepiej widoczny.

Ja miałem podobny problem z wczytywaniem macierzy z pliku tekstowego (język C, nie C++) i rozwiązałem to w taki sposób:
C/C++
int i = 0, j = 0;

while( fscanf( plik, "%f", & liczba ) == 1 )
{
    tab2[ i ][ j ] = liczba;
    j++;
    if( j == N )
    {
        j = 0;
        i++;
        continue;
    }
}

Czyli po prostu wczytywałem z pliku liczby, dopóki nie doszło do końca (==1). Z każdym kolejnym wczytaniem zapisywałem liczbę do tablicy o współrzędnych i,j, następnie korzystałem z inkrementacji "j" (aby przechodziło do kolejnej kolumny). Kiedy doszło do końca tej kolumny (if j==N, gdzie N to rozmiar macierzy) to przechodziło do następnej iteracji (kroku) przy użyciu continue, wcześniej zwiększając wiersz o 1 i zerując kolumny... i tak do końca.

Patrząc na Twój kod to w C++ powinno być analogicznie.

Pozdrawiam
P-103383
alixir
» 2014-01-28 12:48:44
Może to ci rozjaśni umysł :)

C/C++
#include <iostream>
#include <fstream>

using namespace std;

typedef struct {
    int tab[ 10 ][ 10 ];
} tsMatrix;

int readFromFile( fstream & hf, tsMatrix & m )
{
    hf.open( "data.txt" );
    if( !hf.good() )
    {
        cout << "Odmowa dostepu!" << endl;
        return 0;
    }
    int i = 0, j = 0, n = 0;
    while( hf >> m.tab[ i ][ j ] ) {
        if( ++j >= 10 ) {
            j = 0;
            i++;
        }
        n++;
        if( n >= 100 ) break; // zabezpieczenie przed wczytaniem nadmiaru informacji
       
    }
    hf.close();
    return n; // zwracamy ilosc wczytanych liczb
}

void showMatrix( tsMatrix & m ) {
    for( int i = 0; i < 10; i++ ) {
        for( int j = 0; j < 10; j++ )
             cout << m.tab[ i ][ j ] << " ";
       
        cout << endl;
    }
}

int main()
{
    tsMatrix matrix;
    fstream hfile;
   
    if( readFromFile( hfile, matrix ) == 100 ) // jesli wczytalismy 100 liczb
         showMatrix( matrix );
   
    system( "PAUSE" );
    return 0;
}
P-103398
« 1 »
  Strona 1 z 1