• 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 ?

VPS Starter Arubacloud
0 głosów
425 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ź 894 wizyt
–1 głos
0 odpowiedzi 211 wizyt
pytanie zadane 5 września 2018 w C i C++ przez adamus Użytkownik (860 p.)
0 głosów
2 odpowiedzi 510 wizyt
pytanie zadane 12 lipca 2016 w C i C++ przez Albort Nowicjusz (140 p.)

92,417 zapytań

141,222 odpowiedzi

318,984 komentarzy

61,831 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...