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

[C++] Losowanie liczb

Ostatnio zmodyfikowano 2015-12-30 14:09
Autor Wiadomość
BluePotato
Temat założony przez niniejszego użytkownika
[C++] Losowanie liczb
» 2015-12-30 13:09:06
Cześć. Otóż mam pewien problem z tym kodem, potrzebuję jakiejś poprawki żeby działał tak jak trzeba. (losuje liczbe, wprowadzasz ja. jesli trafisz - wiadomosc i ile razy losowales, jesli nie wiadomosc o nie trafieniu i powrot do pkt 1. czyli losowanie, wprowadzenie) długo próbowałem to naprawić przez zmianianie do while, if else, ale jakoś nie pomaga. To kod:
C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{
    srand( time( NULL ) );
    int liczba =( rand() % 3 ) + 1;
    int elo;
    int ilerazy = 0;
    do
    {
        cout << "Podaj liczbe: ";
        cin >> elo;
        ilerazy++;
        if( elo > 3, elo < 1 )
        {
            cout << "Podales liczbe ze zlego zakresu lub litere.";
        }
        else
        if( elo = liczba )
        {
            cout << "Trafiles! Wylosowana liczba to: " << liczba << endl;
            cout << "Probowales " << ilerazy << "razy.";
        }
        else
             cout << "Nie udalo ci sie trafic.";
       
        if( elo = liczba )
        {
            cout << "Trafiles! Wylosowana liczba to: " << liczba << endl;
            cout << "Probowales " << ilerazy << "razy.";
        }
        else
             cout << "Nie udalo ci sie trafic.";
       
    } while( liczba = elo );
   
    return 0;
}
P-142580
carlosmay
» 2015-12-30 13:22:17
C/C++
if( elo > 3, elo < 1 )
 
 Zamiast przecinka powinien być operator logiczny.
W tym przypadku z warunku brane jest pod uwagę tylko wyrażenie najbardziej z prawej
elo < 1 .


C/C++
if( elo = liczba )
 
 Natomiast tutaj zamiast porównania wartości następuje przypisanie
i jeśli liczba jest inna niż zero to wartość wyrażenia w warunku zawsze będzie true
(a losowane są od 1 do 3 więc zawsze się wykona).

Zapoznaj się z operatorami logicznymi oraz operatorami relacji w języku C++ .
Operatory relacji
Operatory logiczne
P-142581
BluePotato
Temat założony przez niniejszego użytkownika
» 2015-12-30 13:36:16
C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{
    srand( time( NULL ) );
    int liczba =( rand() % 10 ) + 1;
    int elo;
    int ilerazy = 0;
    while( liczba == elo );
   
    {
        cout << "Podaj liczbe od 1 do 10: ";
        cin >> elo;
        if( elo >= 1 && elo <= 10 )
        {
            ilerazy++;
            if( elo == liczba )
            {
                cout << "Trafiles! Wylosowana liczba to: " << liczba << endl;
                cout << "Probowales " << ilerazy << "razy.";
            }
            else
                 cout << "Nie udalo ci sie trafic.";
           
        }
        else
             cout << "Podales liczbe z poza zakresu.";
       
        return 0;
    }
}
Lekko to skróciłem, ale dalej mnie zastanawia co zrobić, żeby po nie trafieniu liczby wracał na początek, a nie kończył działanie.
P-142583
Lucas535
» 2015-12-30 13:44:25
C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{
    srand( time( NULL ) );
    int liczba =( rand() % 3 ) + 1;
    int elo;
    int ilerazy = 0;
    cout << "Podaj liczbe: ";
    while( cin >> elo )
    {
        ilerazy++;
        if( elo == liczba )
        {
            cout << "Trafiles! Wylosowana liczba to: " << liczba << endl;
            cout << "Probowales " << ilerazy << " razy.";
            break;
        }
        else
        {
            cout << "Nie udalo ci sie trafic.\nPodaj liczbe: ";
            continue;
        }
    }
    return 0;
}
P-142584
carlosmay
» 2015-12-30 13:45:22
C/C++
int elo; // ma przypadkową wartość
int ilerazy = 0;
while( liczba == elo ); // a tutaj porównujesz elo do wylosowanej liczby?

 
 Lepiej użyć pętli do...while(); albo pierwsze wprowadzenie elo dać przed wejściem do pętli.

ale co zrobić, żeby po błędnym wprowadzeniu liczby wracał na początek
 Zmienić operator logiczny w warunku pętli.

Można też wczytywanie i sprawdzenie elo dać w warunku pętli. Będzie krótszy kod.
np. tak:
C/C++
int ilerazy = 1;
cout << "Podaj liczbe: ";
while(( cin >> elo ) &&( elo != liczba ) ) {
    ilerazy++;
    cout << "Nie udalo ci sie trafic.\nPodaj liczbe: ";
}
cout << "Trafiles! Wylosowana liczba to: " << liczba << endl;
cout << "Probowales " << ilerazy << " razy.";
P-142585
BluePotato
Temat założony przez niniejszego użytkownika
» 2015-12-30 14:09:38
Lucas nie zauważyłem twojego postu, więc bardziej sugerowałem się odp. carlosa, ale obu wam dziękuje za pomoc. Zrozumiałem już, co robiłem źle.
C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{
    srand( time( NULL ) );
    int liczba =( rand() % 10 ) + 1;
    int elo;
    int ilerazy = 0;
    cout << "Podaj liczbe: ";
    while(( cin >> elo ) &&( elo != liczba ) ) {
        ilerazy++;
        cout << "Nie udalo ci sie trafic.\nPodaj liczbe: ";
    } if( liczba == elo )
    {
        cout << "Trafiles! Wylosowana liczba to: " << liczba << endl;
        cout << "Probowales " << ilerazy << " razy.";
    }
    return 0;
}
Na koniec coś takiego mi wyszło - i działa. :)
P-142586
« 1 »
  Strona 1 z 1