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? #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; cout << a << endl; } 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. |
|
carlosmay |
» 2016-03-14 23:21:53 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. |
|
timik007 Temat założony przez niniejszego użytkownika |
aktualizacja linka » 2016-03-15 10:34:34 Juz plik powinien byc dostepny dla kazdego :) |
|
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ć? |
|
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 #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(); }
|
|
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 .
|
|
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 #include <iostream> #include <boost/multiprecision/cpp_int.hpp> #include<fstream> #include<string> using namespace std; using namespace boost::multiprecision;
int256_t fromString( string s ) { 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) |
|
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: #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 #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. |
|
« 1 » 2 |