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

Wczytywanie liczb z pliku tekstowego

Ostatnio zmodyfikowano 2016-03-15 20:01
Autor Wiadomość
timik007
Temat założony przez niniejszego użytkownika
Wczytywanie liczb z pliku tekstowego
» 2016-03-14 22:42:27
Witam mam wyciagnac z pliku tekstowego liczby zapisane w postaci binarnej następnie wykonać na nich obliczenia, najpierw jednak chciałem je wypisac na ekran konsoli. Jednak liczby które ujrzałem nie pokrywały się z tym co było w pliku tekstowym. Czy ktoś wie w czym tkwi problem?


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

using namespace std;

int main()
{
    ifstream PLIK;
    string a;
    int b, ilejedynek, liczby = 0;
   
    PLIK.open( "liczby.txt" );
   
   
   
    while( !PLIK.eof() )
    {
        ilejedynek = 0;
        PLIK >> a; // Ta instrukcja powinna wypisywac z kazdym obiegiem pętli liczbę.
        // b = a.size();
        cout << a << endl;
        /* for (int i = 0; i < b; i++)
        {
       
        if (a[i] == '1')
        {
       
        //ilejedynek++;
        //cout << ilejedynek<<endl;
       
        }
       
        }
        if ((b - ilejedynek) > ilejedynek)
        {
        liczby++;
       
        }*/
    }
   
    cout << liczby;
    system( "pause" );
   
   
   
}




w pliku tekstowym liczby zacznaja się od liczby 11010100111 natomiast po kompilacji tego wychodzi jakieś inne liczby.
plik tekstowy dostępny tutaj: http://1drv.ms/1RKQDvW.
P-146021
carlosmay
» 2016-03-14 23:21:53
C/C++
PLIK >> a; //Ta instrukcja powinna wypisywac z kazdym obiegiem pętli liczbę
Pod warunkiem, że cyfry oddzielone są spacjami.

Link jest do prywatnego dysku w chmurze. Czy dasz nam dane do logowania?

Wczytaj wiersz std::getline() następnie sprawdzasz każdy znak po kolei,
i liczysz wystąpienie cyfr.
P-146022
timik007
Temat założony przez niniejszego użytkownika
aktualizacja linka
» 2016-03-15 10:34:34
Juz plik powinien byc dostepny dla kazdego :)
P-146025
Harion
» 2016-03-15 12:19:04
Szczerze to moim zdaniem liczby, które widzisz w konsoli po wykonaniu programu nie są tymi od początku pliku z którego je pobierasz,
ponieważ w pewnym momencie początek tego co jest wyświetlane w konsoli będzie kasowane na rzecz kolejnych linii wyświetlanych w niej.

Zamień pętle while np na for i wykonaj ją 10 razy. wtedy twoim oczom na konsoli ukaże się: http://scr.hu/58om/hkh7i
co jest tym samym jak w tekstowym pliku. Teraz pytanie czy każda linia w twoim pliku txt jest liczbą, czy np jest to ciąg 0 o 1, a każda liczba składa się np z 16 lub 32 bitów i trzeba to potem pogrupować?
P-146028
mateczek
» 2016-03-15 12:42:34
1. czy każda liczba to jedna linijka ??
2. jaka jest długość w bitach największej liczby ?? bo jeśli masz na tych liczbach pracować to trzeba zadbać o to jaki to ma być typ !!!
   int to bodajże 32 bity !!! więc nic ponadto tam nie wejdzie !!!
3 policzenie jedynek można zrobić na strigach łatwiej szybciej bez problemu
C/C++
#include <iostream>
#include<fstream>
#include<string>
using namespace std;
int main()

{
    string linijka;
    fstream plik;
    int licznik = 0;
    plik.open( "mojewyniki.txt", std::ios::in );
    while( getline( plik, linijka ) ) {
        cout << linijka << endl;
        for( char znak: linijka ) {
            if( znak == '1' ) licznik++;
           
        }
    }
    cout << licznik << endl;
   
    plik.close();
}
P-146029
timik007
Temat założony przez niniejszego użytkownika
» 2016-03-15 17:30:27

Informacje do zadania.

W pliku liczby.txt znajduje się 1000 liczb naturalnych zapisanych binarnie. Każda liczba zapisana jest w osobnym wierszu. Pierwsze pięć wierszy zawiera następujące liczby: 11010100111 11110111111011101 1010100111010100 1101111111111111111111010100101010101001 1010110011001101010011110101010101010111 
Każda liczba binarna zawiera co najwyżej 250 cyfr binarnych, co oznacza, że w wielu językach programowania wartości niektórych z tych liczb nie da się zapamiętać w pojedynczej zmiennej typu całkowitoliczbowego, np. w języku C++ w zmiennej typu int.

1. Tak powinno być.  2.Zdaje się ze właściwym typem będzie tu string który umożliwia prace na poszczególnych cyfrach .
P-146047
mateczek
» 2016-03-15 18:43:02
oczywiście do tematu można podejść na kilka sposobów. Mówię o arytmetyce (dodawanie odejmowanie mnożenie dzielenie)!!!


1. skorzystanie z biblioteki boost do arytmetyki na liczbach wielkich

C/C++
#include <iostream>
#include <boost/multiprecision/cpp_int.hpp>
#include<fstream>
#include<string>
using namespace std;
using namespace boost::multiprecision;

int256_t fromString( string s ) { //funkcja konwertująca napis na liczbę nie mogłem znaleźć zaćmienie
    int256_t temp;
    int index = 0;
    while( true ) {
        temp += s[ index ] - '0';
        index++;
        if( index == s.size() ) break;
       
        temp <<= 1;
    }
   
    return temp;
}



int main() {
    fstream plik;
    plik.open( "liczby.txt", std::ios::in );
    if( !plik ) {
        cout << "brak pliku " << endl;
        return 0;
    }
   
    string linijka;
    while( getline( plik, linijka ) ) {
        cout << fromString( linijka ) << endl;
    }
    plik.close();
}
2. pisząc algorytmy na wzór dodawania pisemnego
3. trzymanie liczb w tablicy  long long liczba[4] (trzeba by się bawić w przeniesienia ale i tak krócej niż pisemnie)
P-146056
michal11
» 2016-03-15 18:56:30
Jeżeli policzenie jedynek w pliku to jedyna część tego zadania i możesz skorzystać z algorytmów biblioteki standardowej to wystarczy:
C/C++
#include <iostream>
#include <algorithm>
#include <iterator>
#include <fstream>


int main()
{
    std::ifstream file( "test.txt" );
    std::cout << count( std::istream_iterator < char >( file ), std::istream_iterator < char >(), '1' ) << std::endl;
   
    return 0;
}

jeżeli jednak nie możesz z tego korzystać to wygodniej będzie wczytywać tylko po jednym znaku z pliku

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

int main()
{
    std::ifstream file( "test.txt" );
    int counter = 0;
    char tmp;
   
   
    while( file >> tmp )
    {
        counter += tmp - '0';
    }
   
    std::cout << counter << std::endl;
   
   
    return 0;
}

gdyby ten program był za wolny, wtedy najlepiej wczytywać dane paczkami (np. getline) i iterować po stringu modyfikując program podany wyżej.

Najlepiej to w ogóle napisz co masz zrobić wtedy będzie najłatwiej pomóc.
P-146060
« 1 » 2
  Strona 1 z 2 Następna strona