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

Odczyt danych z pliku do tablicy[x][y]

Ostatnio zmodyfikowano 2010-03-14 15:27
Autor Wiadomość
elradziu
Temat założony przez niniejszego użytkownika
Odczyt danych z pliku do tablicy[x][y]
» 2010-03-12 11:03:18
Witam mam taki problem w pliku mam zapisaną macierz o wymiarach [X]x[Y]
I robie tak wczytuje każdy wiersz do stringu A potem kazdy znak stringu do komurki tablicy no i cos nie działa bo jak zapisuje tablice do innego pliku to mam same cyfry 48.

Kod:
C/C++
fstream mapa;
if( mapa.good() ) {
    mapa.open( "mapa.mapx", ios::in );
    string linia;
    for( int x1 = 0; x1 < 12; x1++ )
    {
        getline( mapa, linia );
        for( int y1 = 0; y1 < 16; y1++ )
        {
            tablica[ y1 ][ x1 ] = linia[ y1 ];
           
        }
    }
}
Wcześniej jest zdeklarowana tablica[16][12] tablica jest typu int
P-14928
malan
» 2010-03-12 19:53:26
tablica[y1][x1]=linia[y1];
To nie powinno być tak:
tablica[x1][y1]=linia[y1];
?
P-14938
elradziu
Temat założony przez niniejszego użytkownika
» 2010-03-12 22:09:22
Kod:
C/C++
int tablica[ 16 ][ 12 ];
....
void load_mapa()
{
    fstream mapa;
    if( mapa.good() ) {
        mapa.open( "mapa.mapx", ios::in );
        string linia;
        for( int x1 = 0; x1 < 12; x1++ )
        {
            getline( mapa, linia );
            for( int y1 = 0; y1 < 16; y1++ )
            {
                tablica[ y1 ][ x1 ] = linia[ y1 ];
               
            }
        }
    }
pierwszy wymiar tablicy ma 16 a drugi 12 jeżeli za mienie tak ja mówisz to tam gdzie mam wymiar 16 będę zapisywał 12 a tam gdzie wymiar 12 zapisać będę próbował 16 zmiennych innymi słowy będę chciał do macierzy 16x12 wpisać macierz 12x16. I chyba nie zauważyłeś że y1 przyjmuje maksymalnie wartość 16 a x1 12. Więc tu błędu nie ma. No może że się mylę:(
P-14947
malan
» 2010-03-12 23:53:26
Hmmm...
tablica[ y1 ][ x1 ] =( linia[ y1 ] - '0' );
?
P-14948
elradziu
Temat założony przez niniejszego użytkownika
» 2010-03-13 09:40:34
Zadziałało:) Jak możesz powiedz o co chodzi z tym:
C/C++
tablica[ y1 ][ x1 ] =( linia[ y1 ] - '0' );
P-14953
malan
» 2010-03-13 20:22:42
P-14989
elradziu
Temat założony przez niniejszego użytkownika
» 2010-03-14 10:33:50
Ok to pytanie z innej beczki. Czemu nie zapisywało wartości prawidłowej? tylko powiększało je o 0?
P-15001
malan
» 2010-03-14 13:30:57
Nie o 0, tylko o znak '0' (czyli 48) :).
Może od początku. Każdy znak zapisany w pliku - "a b c 1 ! % g" ma swoją reprezentację liczbową, np.
0 - 48
1 - 49
a - 97
! - 33
Tak jak w tabeli :).
Ty zapisywałeś do pliku tylko cyfry, czyli przykładowo wyglądało to tak:
11111
10101
00400
Wczytując te cyfry z pliku (w Twoim przypadku do zmiennej typu int) "pobierałeś" ich reprezentację liczbową, czyli wg. powyższego przykładu Twoja tablica prezentowałby się tak:
49 49 49 49 49
49 48 49 48 49
48 48 52 48 48
Reprezentacją liczbową znaku '0' jest 48, znaku '1' jest 49, a znaku '4' - 52 :).
Pytanie: Co zrobić żeby z '0' uzyskać liczbę 0 ?
Odpowiedź: Skoro znak '0' ma wartość 48 to hmm... może wystarczy odjąć 48 ? Tak! To jest to!
C/C++
tablica[ y1 ][ x1 ] =( linia[ y1 ] - '0' );
// Inaczej:
tablica[ y1 ][ x1 ] =( linia[ y1 ] - 48 )
Czemu to działa? Bo reprezentacją liczbową znaku '0' jest 48 :). Cała magia :).
Zauważ, że tak jest w przypadku dalszych cyfr:
C/C++
'0' - 48 = 0
'1' - 48 = 1
'2' - 48 = 2
// itd...

Mam nadzieje, że Ci za bardzo nie pogmatwałem w głowie :).
P-15007
« 1 » 2
  Strona 1 z 2 Następna strona