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

[lekcja 16] gra losująca liczbę z przedziału od 1 do 1000

Ostatnio zmodyfikowano 2013-04-11 16:12
Autor Wiadomość
wojtek.997
Temat założony przez niniejszego użytkownika
[lekcja 16] gra losująca liczbę z przedziału od 1 do 1000
» 2013-03-07 23:19:53
Witam! Mam problem z poprawnym napisaniem programu z zadania domowego z lekcji 16.
oto kod stworzony przeze mnie:
C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>
int main()
{
    srand( time( NULL ) );
    int liczba;
    int liczbaa =( rand() % 1000 ) + 0;
    int liczbaaa =( rand() % 1000 ) + 0;
    do
    {
        std::cout << "Wprowadz liczbe od 1 do 1000" << std::endl;
        std::cin >> liczba;
        std::cout << "Wylosowana liczba to " << liczbaa << std::endl;
        if( liczba == liczbaa )
             std::cout << "Zgadles" << std::endl;
       
        / w tym miejscu chcia ł bym wstawi ć jaki ś koniec, kt ó ry: je ś li na ekranie wypisze "Zgadles" to zako ń czy program.
        else std::cout << "Nie zgadles" << std::endl; / a je ś li "nie zgadles" to bedzie kontynuowa ł prac ę programu do momentu zgadni ę cia
        std::cout << "Wprowadz ponownie liczbe od 1 do 1000" << std::endl;
        std::cin >> liczba;
        std::cout << " Ponownie wylosowana liczba to " << liczbaaa << std::endl;
        do
        {
            if( liczba == liczbaaa )
                 std::cout << "Zgadles" << std::endl;
            else std::cout << "Nie zgadles" << std::endl;
           
        } while( liczba == liczbaaa );
       
    } while( liczba == liczbaa );
   
    do
    {
        if( liczba == liczbaaa )
             std::cout << "Zgadles" << std::endl;
        else std::cout << "Nie zgadles" << std::endl;
       
    } while( liczba == liczbaaa );
   
    return 0;
}
Co muszę zmienić w tym kodzie?
P-77900
hit
» 2013-03-08 09:30:42
Przede wszystkim komentarze zapisuje się po "//" a nie jednym "/".

Po drugie po co losujesz 2 razy takie same zmienne jak liczbaa i liczbaaa ( nazywanie zmiennych też dziwne ). Poza tym, skoro chcesz losować z przedziału 1-1000, to powinieneś mieć zmienna = rand() % 1000 + 1. Po co w ogóle dodawać zero? I w całym programie wystarczy 1 pętla do, reszta jest niepotrzebna.

A i jeszcze jedno, warunek w Twojej pętli do while jest taki, że jeśli podasz poprawną liczbę to będzie się dalej wykonywała.
P-77914
wojtek.997
Temat założony przez niniejszego użytkownika
» 2013-03-08 13:08:42
To jaki powinien być warunek?
P-77922
krzyk
» 2013-03-08 14:10:38
Zadużo kodu.
C/C++
do {
    wprowadz liczbe
    if liczba taka sama jak wylosowana liczba
    zgadles
    else
    nie zgadles
} while( liczba inna niz wylosowana liczba )
P-77923
wojtek.997
Temat założony przez niniejszego użytkownika
» 2013-03-08 15:52:48
C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>
int main()
{
    srand( time( NULL ) );
    int liczba;
    int liczbaa =( rand() % 1000 ) + 1;
    do
    {
        std::cout << "Wprowadz liczbe od 1 do 1000" << std::endl;
        std::cin >> liczba;
        std::cout << "Wylosowana liczba to " << liczbaa << std::endl;
        if( liczba == liczbaa )
             std::cout << "Zgadles" << std::endl;
        else std::cout << "Nie zgadles" << std::endl;
       
    } while( liczba != liczbaa );
   
    return 0;
}

Po wprowadzeniu takiego kodu, uruchomieniu go wpisaniu zlej liczby - wyskakuje, ze nie zgadlem (dobrze), wiec wpisuje znowu liczbe. Liczbe ktora wylosowal jest taka sama jak w poprzednim losowaniu. Dlaczego?
P-77928
hit
» 2013-03-08 19:19:33
Ponieważ losujesz ją przed pętlą "do while". Jest ona przypisana do zmiennej liczbaa w momencie uruchomienia programu i tak pozostaje. Jeśli chcesz żeby z każdym obrotem pętli była inna to musisz ją umieścić wewnątrz.
O ile dobrze zrozumiałem, chcesz coś takiego:

C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>
int main()
{
    srand( time( NULL ) );
    int liczba, liczba2;
    do
    {
        liczba2 =( rand() % 1000 ) + 1;
        std::cout << "Wprowadz liczbe od 1 do 1000" << std::endl;
        std::cin >> liczba;
        std::cout << "Wylosowana liczba to " << liczba2 << std::endl;
        if( liczba == liczba2 )
             std::cout << "Zgadles" << std::endl;
        else std::cout << "Nie zgadles" << std::endl;
       
    } while( liczba != liczba2 );
   
    return 0;
}
P-77939
wojtek.997
Temat założony przez niniejszego użytkownika
» 2013-03-10 01:00:12
A co zmienic w tym kodzie. Gdy ma sprawdzic czy liczba  miesci sie w przedziale 1 - 1000 i gdy za pierwszym razem wpisze np 1001 to dziala (a gdy wpisze 0 to uznaje ze liczba miesci sie w przedziale 1 - 1000), ale gdy to sama liczbe wpisze za drugim razem to juz nie. Kolejny problem to, to ze zaraz po tym znowu nie losuje roznych liczb tylko te same. A to czemu? Przeciez jest to umieszczone w petli do.. While.
C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>
int main()
{
    srand( time( NULL ) );
    int liczba, liczbaa;
    int liczbaaa = 1;
    do
    {
        liczbaa =( rand() % 1000 ) + 1;
        std::cout << "Wprowadz liczbe od 1 do 1000" << std::endl;
        std::cin >> liczba;
        if( 1000 >= liczba >= 1 )
        {
            std::cout << "Wylosowana liczba to " << liczbaa << std::endl;
            std::cout << "Liczba strzalow wynosi " << liczbaaa++ << std::endl;
            if( liczba == liczbaa )
                 std::cout << "Zgadles" << std::endl;
            else std::cout << "Nie zgadles" << std::endl;
           
        }
        else std::cout << "Wprowadz liczbe z zakresu 1 - 1000" << std::endl;
       
        std::cin >> liczba;
        std::cout << "Wylosowana liczba to " << liczbaa << std::endl;
        std::cout << "Liczba strzalow wynosi " << liczbaaa++ << std::endl;
        if( liczba == liczbaa )
             std::cout << "Zgadles" << std::endl;
        else std::cout << "Nie zgadles" << std::endl;
       
    } while( liczba != liczbaa );
   
    return 0;
}
P-78036
sasa32010
» 2013-03-16 21:26:58
P-78576
« 1 » 2
  Strona 1 z 2 Następna strona