słowa binarne
Ostatnio zmodyfikowano 2015-07-06 17:41
mlOOdy Temat założony przez niniejszego użytkownika |
słowa binarne » 2015-07-06 15:05:15 Cześć, mam problem z zadaniem z tegorocznej matury rozszerzonej 2 części "starej" dostępnej tutaj: http://www.cke.edu.pl/index.php/2015-em zadanie 4.3. na razie chce aby program wypisał mi sam najdłuższy blok złożony z zer do pliku wynik4.txt wypisuje mi wartość 11 (a powinna być chyba wartość 10 ponieważ sprawdzałem "manualnie" i w pliku najdłuższe bloki składają się właśnie z 10 zer) proszę o pomoc. #include <iostream> #include <fstream> #include <string> using namespace std;
int czy_wiecej( string n ) { int czy_wiecej = 0; int liczba_0 = 0; int liczba_1 = 0; int x = n.size(); for( int i = 0; i < x; i++ ) { if( n[ i ] == '0' ) liczba_0++; else liczba_1++; } if( liczba_0 > liczba_1 ) czy_wiecej = 1; return czy_wiecej; }
int czy_2b( string n ) { int czy_2b = 0; int x = n.size(); for( int i = 1; i < x; i++ ) { if( n[ i ] != n[ i - 1 ] ) czy_2b++; } if( czy_2b != 1 ) czy_2b = 0; return czy_2b; }
int nbw( string n ) { int poczatkowy_nbw = 0; int koncowy_nbw = 0; int x = n.size(); for( int i = 0; i < x; i++ ) { if( n[ i ] == '0' ) poczatkowy_nbw++; else if( poczatkowy_nbw > koncowy_nbw ) { koncowy_nbw = poczatkowy_nbw; poczatkowy_nbw = 0; } } return koncowy_nbw; }
int main() { int wynik4p1 = 0; int wynik4p2 = 0; int wynik4p3 = 0; string n; ifstream wczytaj( "slowa.txt" ); ofstream wypisz_wyniki( "wynik4.txt" ); do { wczytaj >> n; wynik4p1 += czy_wiecej( n ); wynik4p2 += czy_2b( n ); if( nbw( n ) > wynik4p3 ) wynik4p3 = nbw( n ); } while( !wczytaj.eof() ); wypisz_wyniki << wynik4p1 << endl; wypisz_wyniki << wynik4p2 << endl; wypisz_wyniki << wynik4p3 << endl; wczytaj.close(); wypisz_wyniki.close(); system( "pause" ); } funkcja odpowiedzialna za sprawdzanie bloków w " słowach " to: nbw |
|
michal11 |
» 2015-07-06 16:06:48 Masz źle napisane ify, a dokładnie else if. Co się stanie jeżeli n[ i ] będzie jedynką ale poczatkowy_nbw i koncowy_nbw będą sobie równe ? Sprawdź taki przypadek "1010101" dla lekko zmienionej twojej funkcji: int nbw( string n ) { int poczatkowy_nbw = 0; int koncowy_nbw = 0; int x = n.size(); for( int i = 0; i < x; i++ ) { cout << n[ i ]; if( n[ i ] == '0' ) { poczatkowy_nbw++; } else if( poczatkowy_nbw > koncowy_nbw ) { cout << "\t" << poczatkowy_nbw; koncowy_nbw = poczatkowy_nbw; poczatkowy_nbw = 0; } cout << endl; } return koncowy_nbw; }
Dodatkowo sprawdź co się stanie jeżeli twój wejściowy string będzie złożony tylko z samych zer. |
|
mlOOdy Temat założony przez niniejszego użytkownika |
ty » 2015-07-06 17:41:53 ok dzięki za wyjaśnienie :D teraz działa. |
|
« 1 » |