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

Liczby binarne

Ostatnio zmodyfikowano 2017-03-10 13:09
Autor Wiadomość
daro16
Temat założony przez niniejszego użytkownika
Liczby binarne
» 2017-03-09 23:02:50
Witam

Mam oto taki programik:
C/C++
#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
P-158779
maly7
» 2017-03-09 23:12:36
1. Kod umieszczaj w [ cpp ] [ /cpp ]
2.
C/C++
for( int i = 0; i < liczba.length(); i++ )
{
    if( liczba[ i ] == '1' ) // tutaj
         ++jedynki;
   
    else if( liczba[ i ] == '0' ) // i tutaj zabraklo chyba [i]
         ++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.
P-158780
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.
P-158781
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:
C/C++
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.
P-158783
carlosmay
» 2017-03-10 06:01:10
Zmienne globalne, fuj.
fstream plik;
 - potencjalne źródło megaproblemów.
P-158784
michal11
» 2017-03-10 08:43:47
C/C++
#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.
P-158788
daro16
Temat założony przez niniejszego użytkownika
» 2017-03-10 13:09:36
Dzięki za wszystkie odpowiedzi. Temat zamykam.
P-158793
« 1 »
  Strona 1 z 1