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

Wczytywanie liczb z pliku do tablicy

Ostatnio zmodyfikowano 2012-05-18 18:49
Autor Wiadomość
Winner
Temat założony przez niniejszego użytkownika
Wczytywanie liczb z pliku do tablicy
» 2012-05-16 18:43:52
Witam, podpowie mi ktos jak wczytać liczby do tablicy dwuwymiarowej?
Np.
C/C++
int map[ 12 ][ 5 ] =
{
    0, 0, 0, 1, 0,
    0, 0, 0, 8, 0,
    0, 0, 0, 8, 0,
    0, 0, 0, 1, 0,
    0, 0, 0, 2, 0,
    0, 0, 8, 3, 0,
    0, 0, 0, 0, 0,
    0, 0, 0, 0, 0,
    0, 0, 0, 0, 0,
    0, 0, 0, 0, 0,
    0, 0, 0, 0, 0,
    0, 0, 0, 0, 0
};
I chce to wczytać z pliku.(tak, żeby te liczby były w pliku a w moim programi tylko kod do wczytywania tych liczb) Myślę, że jasno opisałem mój problem.
P-56793
xevuel
» 2012-05-16 18:46:59
» Kurs C++Obsługa plików lekcja
Tutaj masz jak wczytać liczbę z pliku. A co do przypisania jej do tablicy dwuwymiarowej, to użyj zagnieżdżonych pętli for:
C/C++
for( int i = 0; i < 1500100900; i++ )
for( int j = 0; j < 1500100900; j++ )
     tablica[ i ][ j ] = liczba;

P-56794
Winner
Temat założony przez niniejszego użytkownika
» 2012-05-16 21:11:33
Ale mam wszystki liczby od razu przypisać do zmiennej "liczba" czy po kolei z pliku wczytywać oddzielnie do tablicy? Nie rozumiem tego za bardzo.
P-56813
xevuel
» 2012-05-16 21:25:43
No po kolei odczytujesz daną liczbę z pliku. I potem wstawiasz to do tablicy...

Taki pseudokod:

pętla 1()
   pętla 2 ()
   {
     wczytaj kolejną liczbę
     przypisz ją do tablicy
   }
P-56814
Winner
Temat założony przez niniejszego użytkownika
» 2012-05-16 21:31:28
Postaram się coś zakodzić.
A w między czasi na necie znalazłem taki kod:
C/C++
#include <iostream>
#include <fstream>  //wlacza obsluge plikow
#include <string>

void update( std::string dane, int * tablica ) //funkcja wypelniajca tablice
{
    int tablica_pos = 0;
    for( int i = 0; i < dane.size(); i++ )
    {
        if( dane[ i ] < 48 || dane[ i ] > 57 ) continue; //czy nie jest "cyfra"
       
        tablica[ tablica_pos ] =( int )( dane[ i ] - 48 ); //zapis do tablicy prosta konwersja z ASCII
        //std::cout << tablica[tablica_pos];
        tablica_pos++;
    }
    //  std::cout << std::endl;
   
}


int main()
{
    std::string dane;
   
    std::ifstream Plik( "mapa.txt" ); //otwieramy pliku
   
   
    int Y = 5, X = 10; //wielkosc tablicy na sztywno
    int tablica[ Y ][ X ]; //nasza tablica w ktorej przechowany dane
    int tablica_pos = 0;
   
    for( int y = 0; y < Y; y++ )
    for( int x = 0; x < X; x++ )
         tablica[ y ][ x ] = 0;
   
   
    std::cout << "Dane z pliku:" << std::endl;
   
    while( true )
    {
        Plik >> dane;
       
        if( Plik.fail() ) break; //jesli koniec pliku to konczymy pentle
       
        std::cout << dane << std::endl;
       
        update( dane, tablica[ tablica_pos++ ] ); //wywolanie funkcji aktualizujacej tablice
       
    }
   
    //wyswietlamy zawartosc tablicy
    std::cout << "\nDane z tablicy:" << std::endl;
    for( int y = 0; y < Y; y++ )
    for( int x = 0; x < X; x++ )
    {
        std::cout << tablica[ y ][ x ];
        if( x < X - 1 )
             std::cout << "."; //  tu nasze kropki
        else
             std::cout << std::endl;
       
    }
   
    Plik.close(); //zamykamy plik
   
    std::cout << "\nWcisnij [ENTER]";
    getchar();
    // lub:
    //system("pause");
   
    return 0;
}
 Czy On jest dobry i mogę się na nim wzorować?
P-56817
xevuel
» 2012-05-16 21:41:33
Działa ci tak jak chcesz? To znaczy, że jest dobry.

Jak na tak banalne zadanie to strasznie on skomplikowany... Poza tym, widać że pisany w Devie - ten kod:
C/C++
int Y = 5, X = 10;
int tablica[ Y ][ X ];
nie skompiluje ci się pod innym IDE. Jest niezgodny ze standardami.

@down:
Right. Ale nie zawsze, bo C::B ma kilka tych kompilatorów dołączanych ze sobą, i nie wiadomo, którego użyto :)
P-56820
SeaMonster131
» 2012-05-16 22:22:15
@up: pod Code::Blocks też Ci sie skompiluje.

A co do tematu, no to wiesz jak otworzyć plik ? Jeżeli nie to » Kurs C++Obsługa plików lekcja. Następnie z pliku wczytujesz liczbę w pętlach for, tak jak podał Ci to @xevuel.
C/C++
for(..)
{
    for(..)
    {
        plik >> tablica[ y ][ x ];
    }
}
P-56829
Winner
Temat założony przez niniejszego użytkownika
» 2012-05-17 17:57:57
A jak za pomocą tej funkcji
istream & seekg( streamoff offset, ios_base::seekdir );
 zmienić pozycje kursora w pliku o 1? Bo jak wpisuje jakąs liczbe zamiast pierwszego argumentu tej funkcji to wywalał błędy:
main.cpp||In function 'int main()':|
main.cpp|22|error: expected primary-expression before ')' token|
main.cpp|22|error: initializer expression list treated as compound expression|
main.cpp|22|warning: unused variable 'seekg'|
||=== Build finished: 2 errors, 1 warnings ===|
P-56856
« 1 » 2 3
  Strona 1 z 3 Następna strona