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

Wyszukiwanie według binarnego wzorca.

Ostatnio zmodyfikowano 2015-01-11 19:04
Autor Wiadomość
Daffy
Temat założony przez niniejszego użytkownika
Wyszukiwanie według binarnego wzorca.
» 2015-01-11 13:07:26
Witam. Mam problem odnośnie swojego zadanie. Oto jego treść:
Wyszukiwanie binarnego wzorca ciągu liczb
 - jeden plik tekstowy z danymi o podanej przez użytkownika nazwie (np. dane.txt)
 - plik składa się co najwyżej ze stu dodatnich liczb całkowitych oraz ciągu binarnego
 - ciąg binarny składa się maksymalnie ze stu bitów zapisanych zerojedynkowo w ostatniej linii pliku
 - program ma wypisać ile razy podany ciąg binarny (wzorzec) występuje w ciągu liczb
 - przeszukiwany ciąg liczb jest traktowany, jako ciąg bitów do przeszukania

Udało mnie się zrobić odczyt z pliku .txt, przeliczanie ich na system binarny wiadomo oprócz ostatniej liczby, która jest liczbą binarną, czyli wzorcem. Mam parę problemów z programem. Nie wiem za bardzo jak to wszystko zagnieździć w pętli, abym nie musiał np 100 razy pisać kodu odpowiedzialnego za przeliczanie tych liczb, wypisywanie oraz deklarowania 100 tablic. Kolejnym moim problemem jest jak te wartości porównywać. Np mój wzorzec to 0110 a liczby do sprawdzenia to 1000 0110 0110 1000 i 0011 0100 0110 więc wzór występuje 3 razy. Liczby po przeliczeniach są zapisane w tablicy. Bardzo proszę o pomoc. Używam języka C++

Oto mój kod:

C/C++
#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;

int tab1[ 32 ];
int tab2[ 32 ];
int tab3[ 32 ];
int tab4[ 32 ];
int tab5[ 32 ];
int tab6[ 32 ];
int i;
int liczba1, liczba2, liczba3, liczba4, liczba5, wzor;
int main( int argc, char ** argv ) {
   
    fstream plik;
    plik.open( "pliczek.txt", ios::in );
   
    if( plik.good() == false )
    {
        cout << "Plik nie istnieje";
        exit( 0 );
    }
    string linia;
    int nr_linii = 1;
    while( getline( plik, linia ) )
    {
        switch( nr_linii )
        {
        case 1: liczba1 = atoi( linia.c_str() ); break;
        case 2: liczba2 = atoi( linia.c_str() ); break;
        case 3: liczba3 = atoi( linia.c_str() ); break;
        case 4: liczba4 = atoi( linia.c_str() ); break;
        case 5: liczba5 = atoi( linia.c_str() ); break;
        case 6: wzor = atoi( linia.c_str() ); break;
        }
       
        nr_linii++;
    }
   
   
    plik.close();
    cout << "liczba " << liczba1 << " w systemie binarnym wynosi: ";
    i = 0;
    while( liczba1 > 0 )
    {
        tab1[ i ] = liczba1 % 2;
        liczba1 = liczba1 / 2;
        i++;
    }
    for( i = i - 1; i >= 0; i-- )
    {
        cout << tab1[ i ];
    }
   
   
    cout << endl << "liczba " << liczba2 << " w systemie binarnym wynosi: ";
    i = 0;
    while( liczba2 > 0 )
    {
        tab2[ i ] = liczba2 % 2;
        liczba2 = liczba2 / 2;
        i++;
    }
    for( i = i - 1; i >= 0; i-- )
    {
        cout << tab2[ i ];
    }
   
    cout << endl << "liczba " << liczba3 << " w systemie binarnym wynosi: ";
    i = 0;
    while( liczba3 > 0 )
    {
        tab3[ i ] = liczba3 % 2;
        liczba3 = liczba3 / 2;
        i++;
    }
    for( i = i - 1; i >= 0; i-- )
    {
        cout << tab3[ i ];
    }
   
    cout << endl << "liczba " << liczba4 << " w systemie binarnym wynosi: ";
    i = 0;
    while( liczba4 > 0 )
    {
        tab4[ i ] = liczba4 % 2;
        liczba4 = liczba4 / 2;
        i++;
    }
    for( i = i - 1; i >= 0; i-- )
    {
        cout << tab4[ i ];
    }
   
    cout << endl << "liczba " << liczba5 << " w systemie binarnym wynosi: ";
    i = 0;
    while( liczba5 > 0 )
    {
        tab5[ i ] = liczba5 % 2;
        liczba5 = liczba5 / 2;
        i++;
    }
    for( i = i - 1; i >= 0; i-- )
    {
        cout << tab5[ i ];
    }
   
   
    cout << endl << wzor << endl;
    return 0;
}
[/i][/i]
P-124645
DejaVu
» 2015-01-11 13:51:03
P-124646
Daffy
Temat założony przez niniejszego użytkownika
» 2015-01-11 14:11:21
Nie będzie występować problem? Liczby z pliku .txt musiałem przekonwertować na int aby móc je przeliczyć na binarne. I teraz nie wiem czy muszę je ponownie przekonwertować na string? Jeżeli tak to jak tego dokonać, co do linku to nie za bardzo rozumiem tego zapisu. Czy mógłby mi ktoś wytłumaczyć trochę bardziej łopatologicznie :) Pozdrawiam
P-124649
SocrateZ
» 2015-01-11 14:49:46
Jedynym rozsądnym rozwiązaniem są operatory bitowe.
Tutaj masz wytłumaczone raczej łopatologicznie.
http://guidecpp.cal.pl​/cplus,operators-bits
P-124650
DejaVu
» 2015-01-11 15:03:32
Jeżeli masz wyszukać podciąg bitowy to zamiana na inty z definicji nie ma sensu.
P-124653
stryku
» 2015-01-11 15:48:33
@SocrateZ
Kolejnym sensownym rozwiązaniem jest użycie http://www.cplusplus.com​/reference/bitset/bitset/ :)
P-124657
DejaVu
» 2015-01-11 17:39:10
@up: to nie jest sensowne rozwiązanie.
P-124666
stryku
» 2015-01-11 19:04:38
@up możesz rozwinąć? Czemu nie?

EDIT

Dobra nie ważne. Myślałem, że chodzi o coś innego w zadaniu.
P-124675
« 1 »
  Strona 1 z 1