Witamy na forum PC Format Zapraszamy do REJESTRACJI


Użytkownicy przeglądający ten wątek: 1 gości

Losowe przypisywanie wartosci bez powtarzania? Visual C++ 2005.

#1
Losowe przypisywanie wartosci bez powtarzania? Visual C++ 2005.
Czy jest w Visualu C++ 2005 jakas funkcja która losowo przypisuje wartosci ale bez ich powtarzania.
Mam bowiem problem bo urzywam funkcji rand()% i napisalem sobie jeszcze troche kodu do tej funkcji aby wlasnie uniknac powtarzania sie wartosci.

Oto moj program z ...Doc.cpp:
Kod:
CKartyDoc::CKartyDoc()
{
    char *T="AKDWERTGBX";
    int x1=20,y1=50,x2=100,y2=200;
    char typ;
    bool Ok;
    for(int i=0;i<10;i++)
    {
        do{
        Ok=false;
        typ=T[rand()%10];
        for(int j=0;Karta[j]==NULL && j<10;j++)
            if(Karta[j]->typ==typ)
                Ok=true;
        }
        while(Ok);

    Karta[i]=new CMemo(x1,y1,x2,y2,typ);
    x1+=90;
    x2+=90;
    }
    x1=20;x2=100;
    for(int i=0;i<10;i++)
    {
        do{
        Ok=false;
        typ=T[rand()%10];
        for(int j=0;Karta[j]==NULL && j<10;j++)
            if(Karta[j]->typ==typ)
                Ok=true;
        }
        while(Ok);

    Karta1[i]=new CMemo(x1,y1+200,x2,y2+200,typ);
    x1+=90;
    x2+=90;
    }
Nie mam pojęcia czy jest jakis sposob na prostsze tego zapisanie :?:
Za wszelka pomoc z gory dziekuje Wesoły
 System operacyjny: windows_xp_2003 Przeglądarka: firefox
#2
RE: Losowe przypisywanie wartosci bez powtarzania? Visual C++ 2005.
~Anonim napisał(a):Czy jest w Visualu C++ 2005 jakas funkcja która losowo przypisuje wartosci ale bez ich powtarzania.

Z tego co wiem to nie ma czegoś takiego, jest tylko random, żeby wyniki sie nie powtarzały musisz zrobić zbiornik losowanych elementów i odejmować od niego wylosowany element, w ten sposób losujesz jeszcze nie wylosowane elementy
 System operacyjny: windows_xp_2003 Przeglądarka: firefox
#3
RE: Losowe przypisywanie wartosci bez powtarzania? Visual C++ 2005.
crayze a moglbys mi pokazac jak to mniej wiecej ma wygladac? Wesoły
 System operacyjny: windows_xp_2003 Przeglądarka: firefox
#4
RE: Losowe przypisywanie wartosci bez powtarzania? Visual C++ 2005.
Do takiej operacji użyłem "vectora", ale można użyć innych zbiorników, zakładam, że znasz klasę vector:

Kod:
#include <iostream>
#include <vector>
#include <windows.h>

using namespace std;

int main(int argc, char *argv[])
{
  vector<int> zbiornik;//zbiornik z losowanymi wartościami, narazie pusty
  cout<<"Z ilu wartosci ma sie skladac zbiornik?\n";
  int ile;
  cin>>ile;
  cout<<"LOSOWANIE:?\n\n\n";
  //wypełnianie zbiornika kolejnymi liczbami, których będzie "ile"
  for(int i=0;i<ile;i++) zbiornik.push_back(i+1);
  //mając zbiornik możemy już losować z nieg liczby i je wyświetlać
  //ale najpierw incjacja jądra liczb losowych
  SYSTEMTIME st;
  GetSystemTime(&st);
  srand(st.wSecond*st.wMinute*st.wHour);//inicjacja jądra czasem z systemowym
  //poprostu nie pmaietam jak uzyskać czas funckajmi C++, to użyłem WinAPI
  //teraz już możemy lsoować kolejne liczby ze zbiornika
  for(int i=0;i<ile;i++)
  {
    int index=rand()%zbiornik.size();//losujemy liczbę, końcem przedziału jest długość zbiornika
    cout<<zbiornik[index]<<endl;//wyświetlamy wylosowaną wartość
    //no i usuwamy ją ze zbiornika, żeby jej ponownie nie wylosować, wielkość zbiornika zmaleje o 1
    vector<int>::iterator iter=zbiornik.begin()+=index;
    zbiornik.erase(iter);
  }
  system("PAUSE");
  return EXIT_SUCCESS;
}

EDIT: program losuje liczby, mu na początku podajmy wielkość z jakiej ma losować, każda liczba zostanie wylosowana tylko raz
EDIT2: zauważ, że w ostatnim obiegu pętli losującej, zostanie już tylko 1 element w vectorze, więc metoda size zwróci 1, a więc rand będzie mógł wylosować tylko 0
 System operacyjny: windows_xp_2003 Przeglądarka: firefox
Programy: Polecane / Nowe / Inne



Użytkownicy forum szukali:
powtarzanie losowych liczb c++

Podobne wątki (Losowe przypisywanie wartosci bez powtarzania? Visual C++ 2005.)
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  Visual Studio Code- zmiana folderu rozszerzeń Physicist 4 4845 05.04.2020, 15:46
Ostatni post: Physicist
  Transfer plików via FTP Visual Basic FireBytes 3 7145 15.08.2019, 07:41
Ostatni post: Szachista
  Visual Basic Excel l.całkowitą przedstawić w postaci szesnastkowej fugaz 4 10337 18.06.2019, 21:36
Ostatni post: fugaz

Skocz do:


Wybrane wątki (Losowe przypisywanie wartosci bez powtarzania? Visual C++ 2005.)
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
Big Grin Czy dostane sie technikum informatycznego klaudiusz20046 6 13498 21.03.2019 01:28
Ostatni post: UnableToSee
  [C#] Program do moderacji czatów gier wiktrom12 0 10201 07.03.2019 15:33
Ostatni post: wiktrom12
  Mój pierwszy projekt - Pomoc rafal12999 1 10627 07.02.2019 22:01
Ostatni post: Szachista
  pomoc projekt scilab piesel18 2 12110 04.02.2019 09:03
Ostatni post: piesel18
  Szkoła Informatyczna Zikinan 1 10916 02.02.2019 17:59
Ostatni post: wojownikhaha
  [Java] Strona z zadaniami do rozwiązania i odpowiedziami rafal12999 2 11736 27.01.2019 13:44
Ostatni post: rafal12999
  kompilacja biblioteki Agui - cmake jurek2 0 10935 10.01.2019 13:12
Ostatni post: jurek2
  Zamiana całego zestawu znaków wg przyporządkowania BarHorab 5 11652 19.12.2018 16:45
Ostatni post: Szachista
  Sumowanie licz excel - problem OxyGenE 2 14488 19.12.2018 16:29
Ostatni post: Szachista
  Jaki kod pod pewne zdarzenia visualbasic 2010 aktywny27 4 12149 07.11.2018 13:41
Ostatni post: Ajgor
Scared Ipad Pro programowanie? NissmoOne 4 12968 06.10.2018 12:22
Ostatni post: NissmoOne
  C# pierwsza pusta komórka Excel DonCorleone 0 11406 21.09.2018 16:58
Ostatni post: DonCorleone
  .bat nie kompresuje plików GIENTY 3 11922 06.09.2018 07:20
Ostatni post: broda99
  problem z programem .bat wiktrom12 4 12747 30.08.2018 08:25
Ostatni post: wiktrom12
  Silnik do gier ZigglerGames 1 11331 23.08.2018 09:03
Ostatni post: Szachista