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

Losowanie bez powtórzeń

Object Storage Arubacloud
0 głosów
235 wizyt
pytanie zadane 17 sierpnia 2015 w C i C++ przez Iras Obywatel (1,800 p.)
#include <iostream>
#include <cstdlib>
#include <time.h>

using namespace std;

int wylosuj()
{
    return (rand()%10)+1;
}

bool czyWylosowanaLiczbaPadla(int &liczba,int tab[],int ile)
{
    if( ile <= 0 )
         return false;

    int i=0;
    do{
    if(liczba==tab[i])
    {
        return true;
    }
    i++;
    }while(i<ile);
    return false;
}
void dodawanieLiczbDoTablicy(int tab[])
{
    int liczba=wylosuj();
    int wylosowana=0;
    do{
        if(czyWylosowanaLiczbaPadla(liczba,tab,wylosowana)==false)
        tab[wylosowana]=liczba;
        wylosowana++;
    }while(wylosowana<5);
}


void OdczytywanieLiczbZTablicy(int tab[])
{
    int wylosowana=0;
    do{
        cout<<tab[wylosowana]<<endl;
        wylosowana++;
    }while(wylosowana<5);
}
int main()
{
    srand(time(NULL));

    int wylosowane[5];
    OdczytywanieLiczbZTablicy(wylosowane);
    dodawanieLiczbDoTablicy(wylosowane);
    OdczytywanieLiczbZTablicy(wylosowane);
    return 0;
}
Cześć, Mam problem mianowicie mniej więcej wiem gdzie jest problem ale nie wiem gdzie bo według mnie program wylosowuje pierwsza liczbe i później nic nie robi bo kolejne miejsca w tablicy to miejsca w pamięci. Proszę o pomoc

4 odpowiedzi

+1 głos
odpowiedź 17 sierpnia 2015 przez Dorion300 Szeryf (90,250 p.)
http://wklej.org/hash/3c8066fc072/

sprawdź "dodawanieLiczbDoTablicy" ponieważ tam miałeś błąd.
+1 głos
odpowiedź 17 sierpnia 2015 przez Szykem2 Nałogowiec (29,510 p.)

Strasznie dziwny ten kod i nie do końca wiem co chcesz powiedzieć w tym komentarzu do kodu, ale napiszę jak ten kod działa najpierw sobie wypisuje tablice(niezaincjalizowaną) z wartościami śmieciowymi. Dalej dodaje liczby do tablicy(przynajmniej taki jest zamysł) ale liczba nie jest losowana za każdym razem wejścia do pętli więc za kazym wywołaniem(poza pierwszym) funkcja czyWylosowanaLiczbaPadla zwraca false i pętla do .. while się kończy a dodana jest tylko wartość dla indeksu 0.

void dodawanieLiczbDoTablicy(int tab[])
{
    int liczba;
    int wylosowana=0;
    do{
        liczba = wylosuj();
        if(czyWylosowanaLiczbaPadla(liczba,tab,wylosowana)==false)
        {
             tab[wylosowana]=liczba;
             wylosowana++;
        }
        else continue;
    }while(wylosowana<5);
}

wydaje mi się, że o to chodzi

komentarz 17 sierpnia 2015 przez Iras Obywatel (1,800 p.)
tak to już sam poprawiłem dlaczego był błąd tylko że teraz kompilator mi się zawiesza za każdym razem i nie wiem co jest nie tak w tym drugim kodzie
komentarz 17 sierpnia 2015 przez Szykem2 Nałogowiec (29,510 p.)

Mi ten kod, który wkleiłem działa bez problemów

0 głosów
odpowiedź 17 sierpnia 2015 przez Iras Obywatel (1,800 p.)
#include <iostream>
#include <cstdlib>
#include <time.h>

using namespace std;

int wylosuj()
{
    return (rand()%10)+1;
}

bool czyWylosowanaLiczbaPadla(int &liczba,int tab[],int ile)
{
    if( ile <= 0 )
         return false;

    int i=0;
    do{
    if(liczba==tab[i])
    {
        return true;
    i++;}
    }while(i<ile);
    return false;
}
void dodawanieLiczbDoTablicy(int tab[])
{

    int wylosowana=0;

    do{
        int liczba=wylosuj();
        if(czyWylosowanaLiczbaPadla(liczba,tab,wylosowana)==false){
        tab[wylosowana]=liczba;
        wylosowana++;}
    }while(wylosowana<5);
}

void OdczytywanieLiczbZTablicy(int tab[])
{
    int wylosowana=0;
    do{
        cout<<tab[wylosowana]<<endl;
        wylosowana++;
    }while(wylosowana<5);
}
int main()
{
    srand(time(NULL));

    int wylosowane[5];
    OdczytywanieLiczbZTablicy(wylosowane);
    dodawanieLiczbDoTablicy(wylosowane);
    OdczytywanieLiczbZTablicy(wylosowane);
    return 0;
}

Trochę poprawiłem i wydaje mi się że powinien działać poprawnie, ale po kompilacji program sie zatrzymuje i nic nie robi

0 głosów
odpowiedź 17 sierpnia 2015 przez Iras Obywatel (1,800 p.)
Dobra już znalazłem błędy, ale dzięki za pomoc

Podobne pytania

0 głosów
2 odpowiedzi 586 wizyt
pytanie zadane 29 października 2016 w C i C++ przez BlueWee Użytkownik (730 p.)
0 głosów
2 odpowiedzi 315 wizyt
0 głosów
2 odpowiedzi 207 wizyt

92,539 zapytań

141,382 odpowiedzi

319,477 komentarzy

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

...