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

Problem z rozwiązaniem zadania.

Ostatnio zmodyfikowano 2010-11-25 23:19
Autor Wiadomość
Elaine
» 2010-11-25 20:01:30
a gdzieś tak napisałem?
Napisałem, że napisałeś? ;>

da się tak zrobić bez dynamicznej alokacji pamięci?
Oczywiście, że się da.

ani o tym, że należy obsługiwać dowolnie długie słowa.
Jest dziurawe - spróbuj podać jakiś odpowiednio długi wyraz
o kurcze :D sam sobie zaprzeczyłeś
Nie zaprzeczyłem samemu sobie - jasne, w zadaniu nie ma niczego o tym, że należy obsługiwać pełną nazwę tytyny, ale jest taka niepisana zasada, która mówi, że program nie powinien się wywalać (a przede wszystkim nie powinien pozwalać na wykonanie zewnętrznego kodu).

do tego zadania nie da się zatem napisać niedziurawego kodu
Da się, wystarczy chwilę pomyśleć...
P-24505
ison
» 2010-11-25 20:04:38
Napisałem, że napisałeś? ;>
tak, zacytowałem tekst w którym to powiedziałeś

Oczywiście, że się da.
to podziel się rozwiązaniem

Da się, wystarczy chwilę pomyśleć...
żadnego zadania w którym użyjesz jakichkolwiek zmiennych nie da się napisać niedziurawego, zawsze przykładowo możesz podać liczbę większą niż możesz pomieścić w danym typie zmiennej, każdy kod w którym wczytujesz inta jest dziurawy wobec twoich (lub tych z których korzystasz) kryteriów
P-24506
Elaine
» 2010-11-25 20:27:50
tak, zacytowałem tekst w którym to powiedziałeś
Nie, zacytowałeś tekst, w którym powiedziałem, że twój kod tego nie obsługuje, nie napisałem, że napisałeś, że obsługuje...

żadnego zadania w którym użyjesz jakichkolwiek zmiennych nie da się napisać niedziurawego
Da się...
zawsze przykładowo możesz podać liczbę większą niż możesz pomieścić w danym typie zmiennej
...co zwykle nie tworzy dziury, numeric overflow sam z siebie jest najczęściej niegroźny, my tu rozmawiamy o buffer overflow...
każdy kod w którym wczytujesz inta jest dziurawy wobec twoich (lub tych z których korzystasz) kryteriów
Nie jest.

to podziel się rozwiązaniem
Proszę bardzo (bardzo syfiaste, jakby coś na kształt skipToWhitespace było w bibliotece standardowej to by ten kod wyglądał ładniej):
C/C++
#include <cstring>
#include <locale>
#include <iostream>
using namespace std;

void skipToWhitespace( istream & istr )
{
    istream::sentry ok( istr, true );
   
    if( !ok )
         return;
   
    ios_base::iostate state = ios_base::goodbit;
   
    const ctype < char >& ctypeFacet = use_facet < ctype < char > >( istr.getloc() );
    streambuf * streamBuffer = istr.rdbuf();
   
    for( int meta = streamBuffer->sgetc();; meta = streamBuffer->snextc() )
    {
        if( meta == std::char_traits < char >::eof() )
        {
            state |= ios_base::eofbit;
            break;
        }
        else if( ctypeFacet.is( ctype < char >::space, std::char_traits < char >::to_char_type( meta ) ) )
             break;
       
    }
   
    istr.setstate( state );
}

int main()
{
    char buffer[ 12 ];
    unsigned words = 0;
   
    while( cin )
    {
        cin.width( 10 );
        cin >> buffer;
        skipToWhitespace( cin );
        if( strcmp( buffer, "gotowe" ) == 0 )
             break;
       
        ++words;
    }
   
    cout << words << endl;
}
P-24507
ison
» 2010-11-25 21:06:40
uważasz że to jest poziom gimnazjum? (czy tam liceum czy czegokolwiek gdzie chodzi autor tematu)
P-24508
Elaine
» 2010-11-25 21:17:38
Sama idea, czyli wczytanie tylko tylu znaków, by stwierdzić, czy to terminator, czy też tylko kolejny wyraz i zignorowanie dalszych - jak najbardziej.
P-24509
ison
» 2010-11-25 21:18:37
idea tak ale żeby to zakodzić trzeba być haxorem, lepiej trzymać się tego co oczekuje autor zadania, a nie to co my uważamy za poprawne :)
nie mówiłem że kod źródłowy w moim pierwszym poście był rozwiązaniem, to była podpowiedź
domyśliłem się że w treści zadania ma podaną maksymalną wielkość stringa i sobie zmieni na taką jaką będzie chciał, nie sądziłem że ktoś się do tego przyczepi
P-24510
Elaine
» 2010-11-25 21:23:29
Ten kod mógłby być prostszy - po prostu akurat taką, a nie inną implementację skipToWhitespace akurat miałem pod ręką, a nowej mi się pisać nie chciało (bo i po co, skoro ta działa? ;>).

nie mówiłem że kod źródłowy w moim pierwszym poście był rozwiązaniem, to była podpowiedź
To trzeba było zaznaczyć, że to była podpowiedź ;>
P-24511
rossd2e
Temat założony przez niniejszego użytkownika
» 2010-11-25 22:42:20
Mam jeszcze jedno pytanie.  Jak trzeba w nim coś zmienić aby uzyskać program po przerobieniu z następującymi pytaniami.

Napisać program jeszcze raz ale zamiast char użyć obiektu string.
Włączyć plik nagłówkowy string do porównań użyć operatorów relacyjnych
P-24512
1 2 « 3 » 4
Poprzednia strona Strona 3 z 4 Następna strona