Liczby binarne
Ostatnio zmodyfikowano 2017-03-10 13:09
daro16 Temat założony przez niniejszego użytkownika |
Liczby binarne » 2017-03-09 23:02:50 Witam Mam oto taki programik: #include <iostream> #include <fstream> #include <string> #include <cstdlib>
using namespace std;
string liczba; fstream plik;
int jedynki, zera;
int main() { fstream plik; plik.open( "binarne.txt" ); while( !plik.eof() ) { getline( plik, liczba ); for( int i = 0; i < liczba.length(); i++ ) { if( liczba[ i ] == '1' ) ++jedynki; else if( liczba[ i ] == '0' ) ++zera; } cout << endl << liczba << endl << "Liczba jedynek: " << jedynki << endl << "Liczba zer: " << zera << endl; jedynki = 0; zera = 0; } plik.close(); return 0; }
Oprócz zliczania jedynek i zer, potrzebuję jeszcze by spisywało czy jest więcej 0 czy 1. Do tego wszystkiego potrzebuję by daną liczbę z systemu binarnego przeliczało na system dziesiętny. Z góry dziękuję za pomoc. PS: W pliku binarne.txt jest kilka linijek z liczbami w tym systemie ofc. :) Zawartość pliku binarne.txt 100001110 11110 0000110 10101010101 0101010 101010101 11111110 00001110 010101010010 11111001010011010 10100101011011 1111110 1001010 |
|
maly7 |
» 2017-03-09 23:12:36 1. Kod umieszczaj w [ cpp ] [ /cpp ] 2. for( int i = 0; i < liczba.length(); i++ ) { if( liczba[ i ] == '1' ) ++jedynki; else if( liczba[ i ] == '0' ) ++zera; }
3. Pokaż jak wygląda przykładowy plik, bo nie do końca rozumiem co chcesz zliczać :D Oprócz zliczania jedynek i zer, potrzebuję jeszcze by spisywało czy jest więcej 0 czy 1. Jeśli zliczasz jedynki i zera to chyba łatwo sprawdzić czego jest więcej. |
|
daro16 Temat założony przez niniejszego użytkownika |
» 2017-03-09 23:25:29 Źle to zadanie sformułowałem, sory :/ Oczywiście mam wypisane ile w danej liczbie jest "0" i "1" i potrzebuję aby program wypisał mi liczby w których jest więcej "1". Dlatego przerabianie tego programu nie ma sensu i potrzebuję to jako drugi oddzielny plik. Natomiast samą konwersję z systemu binarnego na dziesiętny prosiłbym o zrobienie w tym pliku którego kod wstawiłem w pierwszym poście. |
|
maly7 |
» 2017-03-10 00:11:13 Chodzi Ci o konwersja z systemu dwójkowego na dziesiętny? Napisałem prostą funkcję, nie wiem czy jest optymalna, ale działa: int b2d( string licz ) { int dec = 0; for( size_t i = 0; i < licz.size(); i++ ) if( licz[ i ] == '1' ) dec += pow( 2, licz.size() - i - 1 ); return dec; } Jako argument wprowadzasz string np. "100010" i zwraca ci int o wartosci 34. |
|
carlosmay |
» 2017-03-10 06:01:10 Zmienne globalne, fuj. fstream plik; - potencjalne źródło megaproblemów. |
|
michal11 |
» 2017-03-10 08:43:47 #include <iostream> #include <string> #include <numeric> #include <cmath>
int main() { std::string num[] = { "000111", "011111", "000001" }; for( int i = 0; i < 3; ++i ) { int NumSum = std::accumulate( num[ i ].cbegin(), num[ i ].cend(), 0,[]( int acc, char el ) { return acc +( el == '0' ?- 1: 1 ); } ); std::cout << num[ i ]; if( NumSum < 0 ) { std::cout << " has more 0 than 1"; const int NumOnes =( num[ i ].length() - std::abs( NumSum ) ) / 2; std::cout << " || #0: " << num[ i ].length() - NumOnes; std::cout << " | #1: " << NumOnes; std::cout << "\n"; } else if( NumSum > 0 ) { std::cout << " has more 1 than 0"; const int NumZeros =( num[ i ].length() - std::abs( NumSum ) ) / 2; std::cout << " || #0: " << NumZeros; std::cout << " | #1: " << num[ i ].length() - NumZeros; std::cout << "\n"; } else { std::cout << " has equal 0 and 1"; std::cout << " || #0: " << num[ i ].length() / 2; std::cout << " | #1: " << num[ i ].length() / 2; std::cout << "\n"; } } return 0; }
trzymaj trochę sprytniejsze rozwiązanie, można było trochę ładniej zrobić wypisywanie ale już mi się nie chciało. Spokojnie możesz to sobie przerobić na zwykłą funkcję i wykorzystać w swoim kodzie. |
|
daro16 Temat założony przez niniejszego użytkownika |
» 2017-03-10 13:09:36 Dzięki za wszystkie odpowiedzi. Temat zamykam. |
|
« 1 » |