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

Co jest źle?

Object Storage Arubacloud
+1 głos
170 wizyt
pytanie zadane 12 kwietnia 2016 w C i C++ przez SweetPete Nowicjusz (130 p.)
edycja 12 kwietnia 2016 przez HaKIM

Chciałem stworzyc program który będzie losował sześć liczb(od 1 do 6, niepowtarzające sie) dopóki nie będą one po kolei. Więc progrram ma wyglądać tak, że na ekranie będzie sie wyświetlać każde losowanie, jedno pod drugim, po czym na koniec kiedy  już będą po kolei wyświetli liczbę tych losowań. Zrobiłem podobny w Pascalu i działa :(

 

#include <iostream>
#include <windows.h>
#include <cstdlib>
#include <time.h>
using namespace std;

int main()
{
    srand(time(NULL));
    int a[6],b=0,c=1,d=0,k=0;
    for(int i=0;i<6;i++)
    {
        a[i]=0;
    }

while(d==0)
{
d=1;
for(int i=0;i<6;i++)
    {
      c=1;
      while(c==1)
       {
        b=rand()%6+1;
        c=0;
        for(int j=0;j<6;j++)
            {
            if (a[j]==b)
                {
                c=1;
                }
            }
        }
        a[i]=b;
        cout<<a[i]<<" ";

  }
for(int i=0;i<6;i++)
    {
        if(a[i]!=i+1)
            {
                d=0;
            }

        }
    cout<<endl;
    k=k+1;
}
cout<< k <<endl;
   return 0;

}

- - - - -

Kod umieszczaj w klamrach, które są do tego przeznaczone. :)

2 odpowiedzi

+3 głosów
odpowiedź 12 kwietnia 2016 przez bumpMind Gaduła (4,260 p.)
Pierwsza sprawa powinieneś poprawić poprawić sposób w jaki umieściłeś kod w pytaniu a po drugie sprecyzuj co konkretnie się dzieje ponad to że nie działa ;)
komentarz 12 kwietnia 2016 przez shadou102 Pasjonat (21,630 p.)
Również nie rozumiem co autor miał na myśli.
komentarz 12 kwietnia 2016 przez SweetPete Nowicjusz (130 p.)

więc główna pętla wykonuje sie tylko raz, a jak wynika z pętli sprawdzającej kolejność powinna sie wkonywac dopóki nie będą po kolei

while(d==0)
{
d=1;
.......
for(int i=0;i<6;i++)
    {
        if(a[i]!=i+1)
            {
                d=0;
            }

        }
  
}

 

0 głosów
odpowiedź 12 kwietnia 2016 przez bamboleo320 Początkujący (450 p.)

Dwie sprawy.

Po pierwsze - podczas gdy używasz tablic (przy takiej ilości liczb) komplikujesz sobie sprawę, ponieważ musisz (powinieneś) napisać funkcję, która będzie losowała dotąd liczbę, do póki nie wylosuje INNEJ niż wszystkie poprzednie już umieszczone w tabeli. Jest to możliwe (i nawet nie trudne) ale biorąc pod uwagę Twój obecny kod, sprawiłoby Ci to trochę problemu.

Po drugie - przygotowałem dla Ciebie gotowy (działający) program. Przeanalizuj go sobie.

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

using namespace std;

int main()
{
    srand(time(NULL));
    int a, b, c, d, e, f, x=0;

        do
        {
            a=rand()%6+1;
            do
            {
                b=rand()%6+1;
            } while (b==a);
            do
            {
                c=rand()%6+1;
            } while (c==a || c==b);
            do
            {
                d=rand()%6+1;
            } while (d==a || d==b || d==c);
            do
            {
                e=rand()%6+1;
            } while (e==a || e==b || e==c || e==d);
            do
            {
                f=rand()%6+1;
            } while (f==a || f==b || f==c || f==d || f==e);
            x++;
        } while (a!=1 || b!=2 || c!=3 || d!=4 || e!=5 || f!=6);
    cout << x << endl;
    cout << a << b << c << d << e << f;
   return 0;
}

 

komentarz 12 kwietnia 2016 przez bamboleo320 Początkujący (450 p.)
Kolejne 2 sprawy.

Po pierwsze popraw sposób, jakim umieszczasz kod.

Po drugie - brakuje Ci funkcji sprawdzającej prawidłową kolejność. Nie mam totalnie pojęcia na jakiej zasadzie działa Twój program, ale udaje mu się losować różne liczby i zapisywać je do tabeli. Pętla sprawdzająca czy pierwszy wyraz jest równy 1, drugi 2 etc. powinna pomóc.
komentarz 12 kwietnia 2016 przez SweetPete Nowicjusz (130 p.)

jest pętla spawdzająca kolejność:

while(d==0)
{
d=1;
......
for(int i=0;i<6;i++)
    {
        if(a[i]!=i+1)
            {
                d=0;
            }

        }
   
}

PS: Dzięki za gotowy program ale nie o to chodzi. Musi być w tablicy bo takie wypisywanie warunków gdy miałoby byćnp. 20 liczb po kolei jest nieopłacalne

1
komentarz 12 kwietnia 2016 przez niezalogowany
Jeżeli chcesz losować liczby bez powtórzeń, to musisz gdzieś je sobie trzymać i możesz albo przy każdym losowaniu w pętli sprawdzać czy wylosowana liczba jest w tablicy, albo możesz trzymać liczby do wylosowania w jakiejś strukturze, losować ich indeksy i usuwać liczby ze struktury do wylosowania.

Podobne pytania

0 głosów
1 odpowiedź 86 wizyt
0 głosów
1 odpowiedź 169 wizyt
pytanie zadane 17 listopada 2015 w HTML i CSS przez barteku12 Obywatel (1,340 p.)
0 głosów
3 odpowiedzi 967 wizyt
pytanie zadane 22 października 2015 w C i C++ przez mglowinski93 Nowicjusz (160 p.)

92,579 zapytań

141,432 odpowiedzi

319,662 komentarzy

61,964 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!

...