• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Jak uzyskać liczby losowe? Co mam tutaj źle ?

Object Storage Arubacloud
0 głosów
431 wizyt
pytanie zadane 6 lipca 2015 w C i C++ przez Dru Nowicjusz (180 p.)
#include <iostream>
#include<windows.h>
#include<time.h>
using namespace std;

int liczba[6];

int main()
{
    cout << "Witaj w losowaniu! Za 3 sekundy nastapi zwolnienie blokady!";
    Sleep(3000);
    cout<<endl;

    srand(time(NULL));
    for(int i=1; i<=6; i++)
    {
        do
        {
            liczba[1]=rand()%49+1;
            liczba[2]=rand()%49+1;
            liczba[3]=rand()%49+1;
            liczba[4]=rand()%49+1;
            liczba[5]=rand()%49+1;
            liczba[6]=rand()%49+1;
        }while((liczba[1]==liczba[2])&&(liczba[2]==liczba[3])&&(liczba[3]==liczba[4])&&(liczba[4]==liczba[5])&&(liczba[5]==liczba[6])&&(liczba[1]==liczba[3])&&(liczba[1]==liczba[4])&&(liczba[1]==liczba[5])&&(liczba[1]=liczba[6])&&(liczba[2])&&(liczba[4])&&(liczba[2]==liczba[5])&&(liczba[2])==(liczba[6])&&(liczba[3]==liczba[5])&&(liczba[3]==liczba[6])&&(liczba[4]==liczba[6]));

        Sleep(1000);
        cout<<liczba[i]<<"\a"<<endl;
    }

    return 0;

2 odpowiedzi

0 głosów
odpowiedź 6 lipca 2015 przez Tnifey Pasjonat (24,190 p.)

Nie wiem czy o to chodzi, pytanie jest dość ogólne, ale żeby program zadziałał wystarczy dodać na końcu zamknięcie klamry }.

komentarz 6 lipca 2015 przez pewolt Mądrala (5,790 p.)
caly program jest zle

1 jest zapisywana wartosc do 6 elementu tablicy a tablica nie ma 6 jest tylko 0-5

2 te rozpisywanie sie z tymi warunkami i zapisywaniem do tablic jest bez sesu mozna to zrobic w petli for

3 nie wiem czy sam kod jest dobrze zbudowany
komentarz 6 lipca 2015 przez Dru Nowicjusz (180 p.)
Klamra jest tylko nie skopiowałem jej
komentarz 6 lipca 2015 przez Waffel Obywatel (1,030 p.)

Nie jest. Przede wszystim brakuje biblioteki

<cstdlib>

Bez niej żaden rand nie zadziała.

komentarz 6 lipca 2015 przez Dru Nowicjusz (180 p.)
To co mam zrobić żeby się liczby nie powtarzały ?
komentarz 6 lipca 2015 przez Waffel Obywatel (1,030 p.)
0 głosów
odpowiedź 6 lipca 2015 przez MrWeb Stary wyjadacz (10,200 p.)

Proszę, wytłumacz mi co chciałeś tu zrobić? Bo ja sam nie wiem co to ma być, nie dość że trochę bez sensu to jeszcze z błędami ;)

To jest kopiuj-wklej twojego kodu, jedyne co zrobiłem to powstawiałem entery na końcu każdego porównania.

    for(int i=1; i<=6; i++)
    {
        do
        {
            liczba[1]=rand()%49+1;
            liczba[2]=rand()%49+1;
            liczba[3]=rand()%49+1;
            liczba[4]=rand()%49+1;
            liczba[5]=rand()%49+1;
            liczba[6]=rand()%49+1;
        } while(
			(liczba[1]==liczba[2]) &&
			(liczba[2]==liczba[3]) && 
		    (liczba[3]==liczba[4]) &&
			(liczba[4]==liczba[5]) &&
			(liczba[5]==liczba[6]) &&
			(liczba[1]==liczba[3]) &&
			(liczba[1]==liczba[4]) &&
			(liczba[1]==liczba[5]) &&
			(liczba[1]=liczba[6]) && //tu jest błąd
			(liczba[2])&&(liczba[4]) && //i tu też
			(liczba[2]==liczba[5]) &&
			(liczba[2])==(liczba[6]) &&
			(liczba[3]==liczba[5]) &&
			(liczba[3]==liczba[6]) &&
			(liczba[4]==liczba[6])
		); // i ogólnie cała ta pętla to jeden wielki błąd
        Sleep(1000);
        cout<<liczba[i]<<"\a"<<endl;
    }
komentarz 6 lipca 2015 przez Dru Nowicjusz (180 p.)
to co mam zrobić żeby się liczby nie powtarzały ?
komentarz 6 lipca 2015 przez MrWeb Stary wyjadacz (10,200 p.)

Pomyśleć ;)

Zamiast przepisywać w kółko te same linijki można zrobić to jedną, sprytną linijką.

Masz tablice, czyli pierwsze co przychodzi mi do głowy to pętla for.

Chcesz, żeby każda z komórek miała losową wartość w przedziale 1...50, to też da się zrobić.

Chcesz też żeby te liczby się nie powtarzały.

 

Czyli... Gdyby tak się zastanowić to wystarczy przelecieć przez każdy element tablicy i nadać mu losową nie powtórzoną jeszcze wartość. Łatwizna! :D

 

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

using namespace std;

int liczba[6];

bool juzBylaWylosowana(int wartosc)
{
  for(int i = 0; i < 6; i++)
	{
     if(liczba[i] == wartosc)
     	return true;
     else
	    return false;
  }
}

int main()
{
  cout << "Witaj w losowaniu! Za 3 sekundy nastapi zwolnienie blokady!" << endl;
	
  Sleep(3000);
	
  srand(time(NULL));

  //tablice są indeksowane od 0!
  for(int i = 0; i < 6; i++)
  {
    int wylosowana = 0;
    
    do
    {
      // wylosuj liczbę
      wylosowana = rand() % 49 + 1;

      // jeśli już była wylosowana to powtórz całą pętlę
    } while(juzBylaWylosowana(wylosowana) == true); 

    // przypisz nowo znalezioną unikalną wartość do tablicy
    liczba[i] = wylosowana;

    Sleep(1000);
    cout << liczba[i] << "\a" << endl;
  }
  return 0;
}

 

Ogólnie to można jeszcze bardziej skrócić ten program wywalając tablicę, bo i tak nic więcej z nią nie robisz, tylko wypisujesz na ekran.

Podobne pytania

0 głosów
1 odpowiedź 896 wizyt
–1 głos
0 odpowiedzi 213 wizyt
pytanie zadane 5 września 2018 w C i C++ przez adamus Użytkownik (860 p.)
0 głosów
2 odpowiedzi 538 wizyt
pytanie zadane 12 lipca 2016 w C i C++ przez Albort Nowicjusz (140 p.)

92,536 zapytań

141,377 odpowiedzi

319,454 komentarzy

61,922 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...