C++ Zliczanie liczby jedynek w liczbie binarnej w jednym ciągu.

0

Witam potrzebuje prosty kod C++ w którym program. wymaga od nas wpisania liczby binarnej
wpisujemy liczbę binarną np: 101011110
i program zlicza nam największą liczbę jedynek w jednym ciągu (w przypadku tej liczby to będzie cztery 1).
jak na razie zrobiłem coś takiego:

#include <stdio.h>

int main()
{
    int n= 1, j = j+1;//deklaracja zmiennych  n - podana liczba, j liczba jedynek;

    printf("Podaj liczbe: ");
    scanf("%d", &n);//wczytywanie liczby

    while(n != 0)//pętla wykonująca się do momentu gdy n nie ma wartości 0
    {
            if(n % 2 == 1)//Jeżeli reszta z dzielenia przez 2 to jeden:
                j + 1;//do zmiennej suma dodajemy 1;

            n /= 2;//od n odejmujemy n/2
    }

    printf("Liczba jedynek po zamianie na system binarny to: %d", j);

    return 0;
}

tylko że ten program oblicza dziesiętne na binarne a nie wie jak go przekształcić aby robił jak wyżej chciałem.

3

#Wczytaj liczbę jako ciąg znaków.
#Stwórz sobie zmienne counter i max.
#Za każdym napotkaniem 1 zwiększasz counter.
#Za każdym napotkaniem 0 sprawdzasz czy counter > max, jeśli tak to nowym max jest wartość counter. Zerujesz counter.

int count(const std::string& number) {
	int max = 0, counter = 0;
	
	for(size_t i = 0; i < number.size(); ++i) {
		if(number[i] == '1') {
			++counter;
		}
		else {
			max = std::max(max, counter);
			counter = 0;
		}
	}
	
	return std::max(max, counter);
}
1

Pomijam, że chyba inna jest treść, to:
1)

if(n % 2 == 1)//Jeżeli reszta z dzielenia przez 2 to jeden:

przy n jako int nie jest prawdą
2) liczenie przez porównywanie maski bitowej i przesunięcie bitowe lepiej może zostać zoptymalizowane.
3)

j + 1;//do zmiennej suma dodajemy 1;

nie zadziała jak w opisie

2
 int j = j+1;            

Interesująca konstrukcja. Trochę się zdziwiłem, że się kompiluje, niemniej bezsensowna.

 j + 1;//do zmiennej suma dodajemy 1;

Zamiast pisać takie komentarze należy porządnie nazwać zmienną, czyli suma a nie j.

0

Jakbyście mogli mi przedstawić to w postaci całego kodu c++ byłbym bardzo wdzięczny by mi to dużo pomogło (w sensie nauki , nie w sensie zrobienia zadania za mnie)

1

int j = j+1; - to nie będzie UB czasem?

0
#include <iostream>

using namespace std;

int main()
{
    cout << "podaj liczbe";
    int count(const std::string& number) {
    int max = 0, counter = 0;

    for(size_t i = 0; i < number.size() ; ++i) {
        if(number[i] == '1') {
            ++counter;
        }
        else {
            max = std::max(max, counter);
            counter = 0;
        }
    }
    cout << "Liczba jedynek w jednym ciagu to:"

    return std::max(max, counter);
}
}
 

czemu kompilator przy

 int count(const std::string& number) { 

wyznacza mi błąd??

1
Virhuan napisał(a):

czemu kompilator przy

 int count(const std::string& number) { 

wyznacza mi błąd??

Ponieważ int count jest funkcją zaproponowaną przez kolegę, a Ty wstawiłeś definicję funkcji do kodu funkcji main?

1
Virhuan napisał(a):

czemu kompilator przy

 int count(const std::string& number) { 

wyznacza mi błąd??

Zawsze pisz jaki błąd zwraca kompilator.

Ogólnie próbujesz deklarować funkcję wewnątrz main().

0

to w takim razie co tam zmienić aby było dobrze??.

1
Virhuan napisał(a):

to w takim razie co tam zmienić aby było dobrze??.

Zdefiniować funkcję przed funkcją main, a w funkcji main tylko ją użyć?

0
 #include <iostream>
 
using namespace std;
 
int main()
{
    cout << "podaj liczbe";
    int count(const std::string& number) {
    int max = 0, counter = 0;
 
    for(size_t i = 0; i < number.size() ; ++i) {
        if(number[i] == '1') {
            ++counter;
        }
        else {
            max = std::max(max, counter);
            counter = 0;
        }
    }
    cout << "Liczba jedynek w jednym ciagu to:"
 
    return std::max(max, counter);
}
}
 

a mogłbyś zedytować ten kod aby bylo poprawnie??

1
#include <iostream>
using namespace std;
int count(const std::string& number) 
{
    int max = 0, counter = 0;
 
    for(size_t i = 0; i < number.size() ; ++i) {
        if(number[i] == '1') {
            ++counter;
        }
        else {
            max = std::max(max, counter);
            counter = 0;
        }
    }
    return std::max(max, counter);
} 
int main()
{
    //tu wywołujesz count
    return 0;
}

https://ideone.com/2bi1ae

1
#include <iostream>
#include <string>
using namespace std;
 
int count(const std::string& number) {
    int max = 0, counter = 0;
 
    for(size_t i = 0; i < number.size() ; ++i) {
        if(number[i] == '1') {
            ++counter;
        }
        else {
            max = std::max(max, counter);
            counter = 0;
        }
    }
 
    return std::max(max, counter);
}

int main()
{
    string liczba;
    cout << "podaj liczbe";
    cin >> liczba;

    cout << "Liczba jedynek w jednym ciagu to: " << count(liczba) << endl;
    return 0;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1