Hod kostkou C++ (odladění bugu)

Vývojová prostředí, aplikace, skripty, http://www... síťové programy, internet, sdílení...
Odpovědět
Hlavson
Začátečník
Začátečník
Uživatelský avatar
Registrován: 19. lis 2007

Hod kostkou C++ (odladění bugu)

Příspěvek od Hlavson »

Čau all. V C++ dělám jen pár chvil takže se nechytejte za hlavu pokud Vám můj dotaz přijde směšný :roll: :-D
Mám problém. Musím vytvořit program na simulaci hodu kostkou. To se mi povedlo, ale má to háček. Program vygeneruje číslo vždy, pokud zmáčknete nějaké číslo. Např. mačkáte jedničku a program generuje. Jenže pokud mačkáte čísla velice rychle za sebou + ENTER tak se čísla opakujou. Nevím jak přesněji to vysvětlit, hodím sem zdroják + exe tak si to kdyžtak stáhněte a vyzkoušejte.

Jde mi o to, abych i při frekvenci mačkání třeba 5 hodnot/sek program generoval vždy jiné čísla.

Kód: Vybrat vše

#include <cstring>
#include <iostream>
#include <cstdlib>
#include <math.h>
#include <ctime>
#include <windows.h>

using namespace std;
const int ROZSAH = 6;
int main()

{   
zpet:    
         int x,r,s,d;
         cout << "Zmackni jakekoli cislo pro hod kostkou" << endl;
         cin >> x;
         srand(time(0));
         r = (rand() % ROZSAH + 1);   
         s = r;
         cout << endl << "Hodil jsi: " << s << endl;
         cin.get();

if (r<=5)
     goto zpet;

if (r=6)
     goto znovu;

znovu:    
          cout << "Gratuluji hodil jsi 6! Hazej znovu" << endl;
          goto zpet6;
          
zpet6:
          
          cout << "Zmackni jakekoli cislo pro hod kostkou" << endl;
          cin >> x;
          srand(time(0));
          r = (rand() % ROZSAH + 1);   
          d = r;
          cout << endl << "Hodil jsi " << d << endl;
          cout << "Soucet je: " << s+d << endl << endl;
          cin.get();
          
goto zpet;

     system ("PAUSE");
     return 0;
}
a EXE...
http://www.edisk.cz/stahni/89259/Hod_ko ... .89KB.html

PS: Pokud víte o celkově elegantnějším napsání celého programu nebráním se tomu :)
Díky.
OndraSter
Středně pokročilý
Středně pokročilý
Uživatelský avatar
Registrován: 22. úno 2006
Bydliště: Praha / ČVUT FIT
Kontaktovat uživatele:

Re: Hod kostkou C++ (odladění bugu)

Příspěvek od OndraSter »

Já byl vychováván tak, že goto by se neměl používat :oops: .

Jinak našel jsem docela pěkný seznam možných náhodných čísel v C++: http://www.daniweb.com/forums/thread1769.html
PC: i5-2500k 4.5GHz/24GB RAM/GTX560 Ti 1GB/>5TB - W7 Prof x64; Microsoft SideWinder X3 notebook: HP 6715b (4GB RAM) - W7 Prof x64;
mobil: Nokia Lumia 800 Cyan, 16GB; tablet: Toshiba Portege M200 (2GB, 64GB SSD, GeForce FX5200) - W7 Prof x32


Nahraďte Arduino výkonnější variantou!
Vývojová prostředí a nástroje | Webové prohlížeče | Seznam freehostingů
Hlavson
Začátečník
Začátečník
Uživatelský avatar
Registrován: 19. lis 2007

Re: Hod kostkou C++ (odladění bugu)

Příspěvek od Hlavson »

Já taky :oops: jenže sem nevěděl jak na to :sad: Zkusím mrknout na to co si sem postl...
Pavel.P.
Středně pokročilý
Středně pokročilý
Registrován: 28. lis 2005
Bydliště: UHB

Re: Hod kostkou C++ (odladění bugu)

Příspěvek od Pavel.P. »

Mně to ve Visual studiou ani nejde od count po cin :mrgreen: Nevíte jak to rozchodit? Zkoušel sem i nápovědu ale prd k tomu... :?

...
OndraSter
Středně pokročilý
Středně pokročilý
Uživatelský avatar
Registrován: 22. úno 2006
Bydliště: Praha / ČVUT FIT
Kontaktovat uživatele:

Re: Hod kostkou C++ (odladění bugu)

Příspěvek od OndraSter »

Jak nejde? Ten samý kód co má Hlavson?

// Hlavsone, musí to být nutně v C++? Možná bych se o něco pokusil v C#/C++, jestli na to nezapomenu :D .
PC: i5-2500k 4.5GHz/24GB RAM/GTX560 Ti 1GB/>5TB - W7 Prof x64; Microsoft SideWinder X3 notebook: HP 6715b (4GB RAM) - W7 Prof x64;
mobil: Nokia Lumia 800 Cyan, 16GB; tablet: Toshiba Portege M200 (2GB, 64GB SSD, GeForce FX5200) - W7 Prof x32


Nahraďte Arduino výkonnější variantou!
Vývojová prostředí a nástroje | Webové prohlížeče | Seznam freehostingů
Pavel.P.
Středně pokročilý
Středně pokročilý
Registrován: 28. lis 2005
Bydliště: UHB

Re: Hod kostkou C++ (odladění bugu)

Příspěvek od Pavel.P. »

Jde o to, že nemůžu v Microsoft Visual C++ 2008 Express Edition rozchodit ani jednoduché příkazy typu:

cout <<
cin >>

Nechápu proč...

//Musím místo toto používat příkazy pro C, které vykonají stejnou úlohu
//Už to funguje :)

...
OndraSter
Středně pokročilý
Středně pokročilý
Uživatelský avatar
Registrován: 22. úno 2006
Bydliště: Praha / ČVUT FIT
Kontaktovat uživatele:

Re: Hod kostkou C++ (odladění bugu)

Příspěvek od OndraSter »

Jestli by Ti, Hlavsone, stačil C# tak tady máš funkční C# kód:

Kód: Vybrat vše

using System;

namespace hodkostkou
{
    class Program
    {

        static int limit = 6;

        static Random nahodne = new Random();


        static void Main(string[] args)
        {
            while (true)
            {

                Console.WriteLine(hod());

                Console.ReadKey();
            }
        }

        static int hod( )
        {

            int hozeno = Program.nahodne.Next(1, Program.limit + 1);

            if (hozeno == 6)
            {
                Console.Write("Hodil jsi šestku ");
                return hozeno + hod();
            }
            else return hozeno;

        }
    }
}
PC: i5-2500k 4.5GHz/24GB RAM/GTX560 Ti 1GB/>5TB - W7 Prof x64; Microsoft SideWinder X3 notebook: HP 6715b (4GB RAM) - W7 Prof x64;
mobil: Nokia Lumia 800 Cyan, 16GB; tablet: Toshiba Portege M200 (2GB, 64GB SSD, GeForce FX5200) - W7 Prof x32


Nahraďte Arduino výkonnější variantou!
Vývojová prostředí a nástroje | Webové prohlížeče | Seznam freehostingů
Hlavson
Začátečník
Začátečník
Uživatelský avatar
Registrován: 19. lis 2007

Re: Hod kostkou C++ (odladění bugu)

Příspěvek od Hlavson »

Tady je to v C++. Sice s goto ale funguje to tak jak má :)

Kód: Vybrat vše

#include <cstring> 
#include <iostream> 
#include <cstdlib> 
#include <math.h> 
#include <ctime> 
#include <windows.h> 

using namespace std; 
const int ROZSAH = 6; 
int main() 

{    
    srand(time(NULL)); 
    int r,s,d,x; 
    
zpet:    
         cout << "Zmackni jakekoli cislo pro hod kostkou" << endl; 
         cin >> x; 
         r = (rand() % ROZSAH + 1);    
         s = r; 
         cout << endl << "Hodil jsi: " << s << endl; 
         cin.get(); 
         
    if (r<=5) goto zpet;
    if (r=6)  goto znovu;
    
znovu:    
          cout << "Gratuluji hodil jsi 6! Hazej znovu" << endl; 
          goto zpet6; 
          
zpet6:    
          cout << "Zmackni jakekoli cislo pro hod kostkou" << endl; 
          cin >> x; 
          r = (rand() % ROZSAH + 1);    
          d = r; 
          cout << endl << "Hodil jsi " << d << endl; 
          cout << "Soucet je: " << s+d << endl << endl; 
          cin.get(); 
          goto zpet; 
          
          system ("PAUSE"); 
          return 0; 
}
Hlavson
Začátečník
Začátečník
Uživatelský avatar
Registrován: 19. lis 2007

Re: Hod kostkou C++ (odladění bugu)

Příspěvek od Hlavson »

OndraSter píše:Jestli by Ti, Hlavsone, stačil C# tak tady máš funkční C# kód:
Díky, ale bohužel jsem dostal zadání na C++. C# jsme ani nedělali :-D To by byl učitel mimo :-D
Hlavson
Začátečník
Začátečník
Uživatelský avatar
Registrován: 19. lis 2007

Re: Hod kostkou C++ (odladění bugu)

Příspěvek od Hlavson »

Povedlo se i bez goto :)

Kód: Vybrat vše

#include <cstring> 
#include <iostream> 
#include <cstdlib> 
#include <math.h> 
#include <ctime> 
#include <windows.h> 

using namespace std; 
const int ROZSAH = 6; 

int main() 
{ 
    srand((unsigned)time(NULL)); 
    int r,s,d,x; 

    do 
    { 
        do 
        { 
            cout << "Zmackni jakekoli cislo pro hod kostkou" << endl; 
            cin >> x; 
            r = (rand() % ROZSAH + 1); 
            s = r; 
            cout << endl << "Hodil jsi: " << s << endl; 
            cin.get(); 
        } 
        while(r!= 6); 

        cout << "Gratuluji hodil jsi 6! Hazej znovu" << endl; 
        cout << "Zmackni jakekoli cislo pro hod kostkou" << endl; 
        cin >> x; 
        r = (rand() % ROZSAH + 1); 
        d = r; 
        cout << endl << "Hodil jsi " << d << endl; 
        cout << "Soucet je: " << s+d << endl << endl; 
        cin.get(); 
    } 
    while(true); 

    return 0; 
}
Pavel.P.
Středně pokročilý
Středně pokročilý
Registrován: 28. lis 2005
Bydliště: UHB

Re: Hod kostkou C++ (odladění bugu)

Příspěvek od Pavel.P. »

Včera sem se začal učit C++/C# ale už to chápu natolik, že ti můžu říct, že tento kód je o mnohem lepší než ty, co jsi tu uváděl před tím... ;-)

...
Zivan
Začátečník
Začátečník
Registrován: 30. čer 2005
Bydliště: Brno
Kontaktovat uživatele:

Re: Hod kostkou C++ (odladění bugu)

Příspěvek od Zivan »

Jeste by slo hodit opakujici se cast jako funkci a volat ji 2x. A na goto pro priste radeji rovnou zapomen :)
HP Elitebook 845 G8 (Ryzen 5650U, 32GB RAM, WD SN570 1TB, 14" fullHD IPS) + HP USB-C G5 Essential + 29" LG 29UM65 + 22" Eizo S2202W
petr_
Začátečník
Začátečník
Uživatelský avatar
Registrován: 10. led 2006
Bydliště: Praha
Kontaktovat uživatele:

Re: Hod kostkou C++ (odladění bugu)

Příspěvek od petr_ »

a nebo ji dát do while(1) a vyskakovat break
NTB: 13" MacBook Air mid. 2013, Haswell i7-4650U, 8GB LPDDR3, 256GB SSD
PC: Xeon 5550, 6GB DDR3, geforce 8800GTS 640MB
Hlavson
Začátečník
Začátečník
Uživatelský avatar
Registrován: 19. lis 2007

Re: Hod kostkou C++ (odladění bugu)

Příspěvek od Hlavson »

Asi by to chtělo přidat tam i "Zmáčkni 0 pro ukončení programu" Takhle je to totiž nekonečný cyklus. Jenže jak to udělat ? Pomocí do while ?
OndraSter
Středně pokročilý
Středně pokročilý
Uživatelský avatar
Registrován: 22. úno 2006
Bydliště: Praha / ČVUT FIT
Kontaktovat uživatele:

Re: Hod kostkou C++ (odladění bugu)

Příspěvek od OndraSter »

Namísto

cin.get();

na konci načítej do proměnné klávesu a pak k
do {
} while ( prom != 0 );
PC: i5-2500k 4.5GHz/24GB RAM/GTX560 Ti 1GB/>5TB - W7 Prof x64; Microsoft SideWinder X3 notebook: HP 6715b (4GB RAM) - W7 Prof x64;
mobil: Nokia Lumia 800 Cyan, 16GB; tablet: Toshiba Portege M200 (2GB, 64GB SSD, GeForce FX5200) - W7 Prof x32


Nahraďte Arduino výkonnější variantou!
Vývojová prostředí a nástroje | Webové prohlížeče | Seznam freehostingů
€agle
Středně pokročilý
Středně pokročilý
Uživatelský avatar
Registrován: 13. lis 2003
Bydliště: Vlastní 3D svět :)
Kontaktovat uživatele:

Re: Hod kostkou C++ (odladění bugu)

Příspěvek od €agle »

Co takhle?

Kód: Vybrat vše

#include <iostream>
#define ROZSAH 6

using namespace std;

int main()
{
    srand(time(NULL));
    unsigned char c = 0;
    int s = 0;
    while(true)
    {
        cout << "Zadej cokoli pro hod kostkou, nebo 'q' pro ukonceni" << endl;
        cin >> c;
        if(c == 'q') break;
        c = rand() % ROZSAH + 1;
        if(c == 6)
        {
            cout << "Gratuluji, hodil jsi " << (s ? "opet " : "") << "cislo 6, hazis znovu" << endl;
            s += 6;
        }
        else
        {
            cout << "Hodil jsi cislo " << (int) c;
            if(s) cout << ", celkem tedy " << s + c;
            cout << endl;
            s = 0;
        }
        cout << endl;
    };
    return 0;
}
Eagle3D Engine under developement

Hledáme do firmy schopného ASP/VB.NET/C# programátora, více po SZ
Odpovědět

Zpět na „Programování a web“