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

słowa binarne

Ostatnio zmodyfikowano 2015-07-06 17:41
Autor Wiadomość
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.

C/C++
#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
P-134382
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:
C/C++
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.
P-134388
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.
P-134391
« 1 »
  Strona 1 z 1