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

lekcja 16 zadanie

Ostatnio zmodyfikowano 2025-06-04 00:28
Autor Wiadomość
melon
Temat założony przez niniejszego użytkownika
lekcja 16 zadanie
» 2013-02-21 20:35:35
Witam

Głowiłem się troche nad zadaniem 16.
Przeszukując forum napotykałem poprawne odpowiedzi, jednak niektore z nich wydawaly mi sie zbyt zawile.
Mysle ze moje rozwiazanie bedzie zrozumiale dla poczatkujacych programistow, albo po prostu bedzie alternatywą.Chyba ze cos tu brakuje ?

C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{
    srand( time( NULL ) );
    int liczba, a, ile;
    ile = 0;
    liczba =( rand() % 9 ) + 1;
    cout << "losowanie liczby od 1 do 9 " << endl;
   
    do {
        cin.clear();
        cin.sync();
        cout << "podaj swoja liczbe" << endl;
        cin >> a;
        ile++;
        if( a < 0 || a > 9 )
             cout << "zly przedzial liczbowy" << endl;
       
       
        if( a > liczba )
             cout << "za duza" << endl;
       
        if( a < liczba )
             cout << "za mala" << endl;
       
       
    }
    while( !( a == liczba ) );
   
    cout << "git poprawna liczba jest:" << a << endl;
    cout << "wykonales tyle strzalow:" << ile << endl;
   
    return 0;
}
P-76661
termistor
» 2025-06-04 00:28:21

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

int main()
{
    srand(time(NULL));
    int liczba, a, ile;
    ile = 0;
    liczba = (rand() % 9) + 1;
    cout << "losowanie liczby od 1 do 9 " << endl;
   
    do
    {
        cin.clear();
        cin.sync();
        cout << "podaj swoja liczbe" << endl;
        cin >> a;
        ile++;
       
        if(a < 0 || a > 9)
            cout << "zly przedzial liczbowy" << endl;
       
        if(a > liczba)
            cout << "za duza" << endl;
       
        if(a < liczba)
            cout << "za mala" << endl;
       
    } while (!(a == liczba));
   
    cout << "git poprawna liczba jest:" << a << endl;
    cout << "wykonales tyle strzalow:" << ile << endl;
    return 0;
}

Ocena rozwiązania: Kod realizuje podstawowe zadanie poprawnie, jednak można wskazać kilka punktów do poprawy.

1. Walidacja danych wejściowych: Obecnie program nie obsługuje przypadków, gdy użytkownik wpisuje niepoprawne dane (np. litery zamiast cyfr). Proponowana poprawka:

if(cin >> a)
{
    // poprawna operacja wczytywania
}
else
{
    cin.clear();
    cin.ignore(1000, '\n');
    cout << "Bledne dane - podaj liczbe!" << endl;
}

2. Zmienna zakres: Zakres losowania liczby jest "wcięty" w kod. Lepszym rozwiązaniem byłoby zdefiniowanie go jako stałej:

const int MIN = 1;
const int MAX = 9;
liczba = (rand() % (MAX - MIN + 1)) + MIN;

3. Zmienne w języku polskim: Choć nie jest to błąd, to w kodzie w języku C++ lepiej stosować nazwy zmiennych w języku angielskim (np. "number" zamiast "liczba").

4. Usprawnienie warunku: Warunek w pętli while można uprościć:

} while (a != liczba);

5. Przydatne dodatki:
- Dodanie opcji podpowiedzi po określonej liczbie prób
- Zliczanie średniej liczby prób po wielu rundach
- Obsługa wielu rund bez restartu programu

Podsumowanie: Twoje rozwiązanie jest zrozumiałe i funkcjonalne. Działa poprawnie dla przypadków, gdy użytkownik wpisuje liczby z zakresu 1-9. Proponowane poprawki zwiększą odporność programu i jego elastyczność.
P-182470
« 1 »
  Strona 1 z 1