Zadanie Lotto.

0

jak w tytule zadanie z losowaniem liczb. ogólnie wszystko mi działa jednak próbuję zoptymalizować kod oraz dodać jeszcze kilka rzeczy które chciałbym by się wykonywały.

#include <iostream>
#include <windows.h>
#include <time.h>

using namespace std;


int main()
{
    srand(time(NULL));
    int tablica[ 6 ];
    int x;
    cout << "Witaj w losowaniu! za 3 sekundy nastapi zwolnienie blokady" << endl;
    for (int j = 3; j > 0; j--)
    {
        Sleep(1000);
        cout << j << "\r";
    }
    for (int i = 0; i <= 5; i++)
    {

        do
        {

            x = rand()%49+1;
        }
        while(( tablica[ 0 ] == x ) ||( tablica[ 1 ] == x ) ||( tablica[ 2 ] == x ) ||( tablica[ 3 ] == x ) ||( tablica[ 4 ] == x ) ||( tablica[ 5 ] == x ) );
        tablica [ i ] = x;

        Sleep(1000);

        cout << tablica[ i ] << "\a" << endl;

    }

    cout << endl << "Nacisnij ENTER aby zakonczyc" << endl;
    getchar();

    return 0;
}

chciałbym by po ukończeniu odliczania zrobiła się linia przerwy dotychczas moje próby wywoływały efekt inny od pożądanego. No i wyrażenie po "while" boli po oczach niestety nie wiem jak skrócić próbowałem

while((tablica[i]==x || (tablica > i)); 

niestety jest to błędne.
C++ bawię się od tygodnia jakoś więc proszę o wyrozumiałość

4

Jeśli to zabawa i nie masz żądania pisania w stylu z poprzedniego millenium od wykładowcy to polecam:

0

dzięki za odpowiedź niestety dla osoby na moim poziomie to co podlinkowałeś brzmi jak bełkot ;/

1

Skróć while pisząc funkcję contains ,która sprawdzi ci czy element jest już w tablicy

bool Contains(int tab[], int size,int number) 
{
    for (int i = 0; i < size; ++i) 
    {
        if (tab[i] == number) return true;
    }
    return false;
}

Coś takiego. Lub użyj gotowej funkcji http://www.cplusplus.com/reference/algorithm/find/ . Co do losowania to przeczytaj to co @kq ci napisał szczególnie pierwszy link, do tego programu nie musisz w teorii tego użyć ,ale na pewno na przyszłość ci się przyda, więc lepiej już zacząć uczyć się pisania według funkcji ,które nie mają nie równych szans do wylosowanie każdej liczby. A jak się postarasz to na pewno zrozumiesz. Tylko nie patrz na sam kod tylko tekst objaśniający też czytaj.

Co do

  for (int j = 3; j > 0; j--)
    {
        Sleep(1000);
        cout << j << "\r";
    }

To zastanów się czy chcesz usypiać program przed wypisaniem j czy po. Bo w tym momencie jest przed dlatego musisz czekać na jedynkę i nie zobaczysz trójki bo od razu program przejdzie dalej.

2

Używasz "kopalnej" wersji języka C++ z nadszarpniętym zębem czasu sleep, rand.
Zobacz jak można napisać to przy użyciu bardziej współczesnego stylu.

#include <random>
#include <iostream>
#include <set>
#include <chrono>
#include <thread>

using namespace std;

template< int min , int max >
class RandomInteger
{
public:
    static int get(){ return dist(mt); }
private:
    inline static mt19937 mt {random_device{}()};
    inline static uniform_int_distribution<int> dist {min,max};
};

int main()
{
    set<int> table;

    cout << "Witaj w losowaniu! za 3 sekundy nastapi zwolnienie blokady" << endl;
    for( int j {30} ; j>0 ; --j )
    {
        this_thread::sleep_for(chrono::milliseconds(100));
        (j%10==0)? cout << j/10: cout << ".";
    }
    cout << "start";

    while( table.size()<6 )
    {
        table.insert(RandomInteger<1,49>::get());
    }

    cout << endl << endl << "Wylosowane liczby " << endl;
    for( const auto& number : table )
    {
        cout << number << " ";
    }

    cout << endl << endl << "Nacisnij ENTER aby zakonczyc" << endl;
    getchar();

    return 0;
}
0

bełkot mam na myśli - instrukcje których jeszcze nie poznałem tam praktycznie nic nie wygląda znajomo zatem ciężko to jakkolwiek zaimplementować z mojej strony ^^' Niestety wszystkie tutoriale do nauki opierają się o te archaizmy więc jestem jak na razie na nie skazany dopóki wiedzy nie pogłębię. Pewnie z biegiem czasu stwierdzę że to banały jednak obecnie jest jak jest nie miałem zamiaru podważać czyichś kompetencji a raczej wykazać brak mojego zrozumienia :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1