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
  Transfer plików via FTP Visual Basic FireBytes 1 2218 17.11.2018, 21:07
Ostatni post: Szachista
  Jaki kod w visual basicu 2010 express? aktywny27 5 7823 07.11.2017, 11:01
Ostatni post: Ajgor
Ściana batch file ustawianie jednej wartosci zmiennej do kilku plikow kulis88 6 1839 03.08.2017, 19:12
Ostatni post: kulis88

Skocz do:


Wybrane wątki (Losowe przypisywanie wartosci bez powtarzania? Visual C++ 2005.)
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  Sumowanie licz excel - problem OxyGenE 2 5629 19.12.2018 16:29
Ostatni post: Szachista
  Transfer plików via FTP Visual Basic FireBytes 1 2218 17.11.2018 21:07
Ostatni post: Szachista
  Jaki kod pod pewne zdarzenia visualbasic 2010 aktywny27 4 3335 07.11.2018 13:41
Ostatni post: Ajgor
Scared Ipad Pro programowanie? NissmoOne 4 4106 06.10.2018 12:22
Ostatni post: NissmoOne
  C# pierwsza pusta komórka Excel DonCorleone 0 3937 21.09.2018 16:58
Ostatni post: DonCorleone
  .bat nie kompresuje plików GIENTY 3 4394 06.09.2018 07:20
Ostatni post: broda99
  problem z programem .bat wiktrom12 4 5279 30.08.2018 08:25
Ostatni post: wiktrom12
  Silnik do gier ZigglerGames 1 4530 23.08.2018 09:03
Ostatni post: Szachista
  Chciałbym zrobić prosty plik exe z jedną funkcją densour 4 5209 09.08.2018 16:24
Ostatni post: Ajgor
  Który język wybrać do stworzenia aplikacji synchronizujące pliki z urządzeniem mobiln Elemental 2 1918 18.07.2018 12:05
Ostatni post: Ajgor
  Pomysł napisania programu ROM FireBytes 3 5916 28.06.2018 16:56
Ostatni post: FireBytes
  [VBA] Tworzenie nowego arkusza z danymi z TextBox'a Pioro 4 6223 19.06.2018 23:24
Ostatni post: broda99
  Potwierdzenie na maila po wysłaniu pliku coci 0 5582 13.06.2018 20:37
Ostatni post: coci
  Pieczętowanie Archiwum Jar - Po co? wanhelsing 3 6216 19.05.2018 20:55
Ostatni post: koneton
  Wyszukiwarka w spawnerze nie reaguje na polskie znaki kazik666 0 5970 16.05.2018 12:04
Ostatni post: kazik666