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

16. Zadanie z grą

Ostatnio zmodyfikowano 2014-08-21 12:20
Autor Wiadomość
mlOOdy
Temat założony przez niniejszego użytkownika
16. Zadanie z grą
» 2014-08-20 15:21:19
Cześć, proszę o pomoc w tym zadaniu gdy trafię prawidłową liczbę (a wiem jaka jest poprzez dodanie cout<< przed ((rand() % 1000)+1) program nie zakańcza pracy. Domyślam się, że chodzi o warunek
while ( zgadniecie < 1 || zgadniecie > 1000); ale nie mam pojęcia co mam wstawić :/.

btw od niedawna wyczaiłem taki sposób napisania warunku jak poniżej. Czy jest on prawidłowy ? ( głównie chodzi mi o to że znak == znaczy jest równe bez względu na wartość wyżej podaną np.jakbym podał że 1 == 2 to program uznałby to za prawdę , mimo wszystko ten sposób działa).


C/C++
do {
    cin.clear();
    cin.sync();
    cin >> zgadniecie;
    cin.good();
    a = cin.good();
} while( a == false );









C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{
    bool a;
    int zgadniecie;
    int strzaly = 0;
   
    cout << "Zgadnij wylosowana liczbe w przedziale 1 do 1000" << endl;
    srand( time( NULL ) );
    (( rand() % 1000 ) + 1 );
    int liczba =(( rand() % 1000 ) + 1 );
   
   
    do {
        do {
            do {
                cin.clear();
                cin.sync();
                cin >> zgadniecie;
                strzaly++;
                cin.good();
                a = cin.good();
            } while( a == false );
           
            if( zgadniecie >= 1 && zgadniecie <= 1000 )
            {
            } else
                 cout << "Wpisana przez Ciebie liczba jest za duza/mala !" << endl;
           
        } while( zgadniecie < 1 || zgadniecie > 1000 );
       
       
    } while( zgadniecie = liczba );
   
    cout << "Trafiles !!! to byla liczba: " << zgadniecie << endl;
    cout << "Liczba prob: " << strzaly << endl;
    return 0;
}
P-115809
pekfos
» 2014-08-20 15:36:54
Mylisz operatory, wiele elementów programu jest bez sensu.

( głównie chodzi mi o to że znak == znaczy jest równe bez względu na wartość wyżej podaną np.jakbym podał że 1 == 2 to program uznałby to za prawdę , mimo wszystko ten sposób działa).
1 nie jest równe 2.
P-115810
mlOOdy
Temat założony przez niniejszego użytkownika
zadanie z grą
» 2014-08-20 15:40:41
To co jest źle w tej instrukcji ?
P-115811
pekfos
» 2014-08-20 16:08:32
C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{
    bool a; //zmienna a niepotrzebna
    int zgadniecie;
    int strzaly = 0;
   
    cout << "Zgadnij wylosowana liczbe w przedziale 1 do 1000" << endl;
    srand( time( NULL ) );
    (( rand() % 1000 ) + 1 ); //niepotrzebne
    int liczba =(( rand() % 1000 ) + 1 ); //nawiasy niepotrzebne
   
   
    do {
        do {
            do {
                cin.clear();
                cin.sync();
                cin >> zgadniecie;
                strzaly++;
                cin.good(); //niepotrzebne
                a = cin.good(); //zmienna a niepotrzebna
            } while( a == false ); //jw, możesz użyć good bezpośrednio tu
           
            if( zgadniecie >= 1 && zgadniecie <= 1000 ) // niepotrzebne - if tylko po to, by użyć else..?
            {
            } else
                 cout << "Wpisana przez Ciebie liczba jest za duza/mala !" << endl; // nie o to chodziło w 3. punkcie zadania
           
        } while( zgadniecie < 1 || zgadniecie > 1000 ); // jw.
       
       
    } while( zgadniecie = liczba ); // zły operator - pętla nieskończona
   
    cout << "Trafiles !!! to byla liczba: " << zgadniecie << endl;
    cout << "Liczba prob: " << strzaly << endl;
    return 0;
}
P-115813
Mateus.
» 2014-08-20 17:11:42
Ten program powinien/mógłby wy wyglądać tak:
1. Wylosowanie liczby (poza pętlą) i zapisanie jej do zmiennej.
2. Pętla (jedna wystarczy!):
- na jej początku czyszczenie strumienia wejściowego,
- podanie liczby przez użytkownika,
- sprawdzenie czy nie było błędu wczytania, a jeśli nie było to czy jest mniejsza lub większa od wylosowanej i wypisanie stosownego do sytuacji komunikatu,
- inkrementacja licznika,
- sprawdzenie warunku pętli (gdy liczby są równe to koniec pętli),

Gdybym chciał napisać więcej musiałbym rozwiązać zadanie za ciebie :D
P-115818
Moorfox
» 2014-08-20 20:57:36
C/C++
cout << rand() % 1000 ) + 1;
int a =( rand() % 1000 ) + 1;
Robiąc tak nie wyświetli ci się prawidłowa liczba albo inaczej będą szanse na to jak
1 do 1000
C/C++
int a =( rand() % 1000 ) + 1;
cout << a;

Teraz już by działało a w kodzie pewnie pełno błędów skoro pekfos tak uważa, więc nie sprawdzam.
Chociaż pekfos, wielu rzeczy się czepia...
P-115832
mlOOdy
Temat założony przez niniejszego użytkownika
random number
» 2014-08-20 21:51:26
Trochę poprawiłem kod i działa dobrze chociaż chciałbym zmienić to:
C/C++
if( zgadniecie >= 1 && zgadniecie <= 1000 )
{
} else
     cout << "Wpisana przez Ciebie liczba jest za duza/mala !" << endl;

if( zgadniecie != liczba )
     cout << "niestety to nie ta liczba :/" << endl;

na:
C/C++
if( zgadniecie < 1 && zgadniecie > 1000 )
     cout << "Wpisana przez Ciebie liczba jest za duza/mala !" << endl;

if( zgadniecie != liczba && zgadniecie >= 1 && zgadniecie <= 1000 )
     cout << "niestety to nie ta liczba :/" << endl;

ale jak tak napiszę to program działa niepoprawnie, macie jakieś sugestie ? :D a co do tego co napisał Mateus. to w 1 pętli by się chyba tego nie dało zrobić bo wtedy nie zabezpieczyłbym strumienia wejściowego przed niepowołanymi wprowadzeniami.




C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{
    int zgadniecie;
    int strzaly = 0;
   
    cout << "Zgadnij wylosowana liczbe w przedziale 1 do 1000" << endl;
    srand( time( NULL ) );
    int liczba =( rand() % 1000 ) + 1;
    cout << liczba;
   
    do {
       
        do {
            cin.clear();
            cin.sync();
            cin >> zgadniecie;
            strzaly++;
            cin.good();
        } while( cin.good() == false );
       
        if( zgadniecie >= 1 && zgadniecie <= 1000 )
        {
        } else
             cout << "Wpisana przez Ciebie liczba jest za duza/mala !" << endl;
       
        if( zgadniecie != liczba )
             cout << "niestety to nie ta liczba :/" << endl;
       
       
       
    } while( zgadniecie != liczba );
   
    cout << "Trafiles !!! to byla liczba: " << zgadniecie << endl;
    cout << "Liczba prob: " << strzaly << endl;
    return 0;
}
P-115834
pekfos
» 2014-08-20 22:06:12
ale jak tak napiszę to program działa niepoprawnie, macie jakieś sugestie ? :D
Ta, czytać dokładnie zadanie i dotychczasowe odpowiedzi. Nie chodzi o sprawdzenie, czy liczba jest w zakresie 1-1000.
P-115835
« 1 » 2
  Strona 1 z 2 Następna strona