Dodaj wpis w tym temacie
Spis tematów | Strona: 1 2 3 4 ... 18 19 Wyślij wiadomość do admina |
Przewiń wpisy ↓ | C++ od niechcenia |
2018-05-08 (17:42) sindbad Data rejestracji: 2008-10-13 00:00:00 Ilość postów: 20519 | wpis nr 1 166 859 [ CZCIONKA MONOSPACE ] Wylosowanie wszystkich kombinacji 2/3/7 //-------------------------- bool tab[8];// Tablica kombinacji 2/3/7 int main() { int a,v,x; v = 0; x = 0; UprzypadkowijMT(); do { x++; a = (MersenneTwister() % (7)) +1; if(tab[a]==0) {v++; tab[a]=1;} } while (v < 7); cout << "Losowano " << x << " razy" << endl << endl; cout << " Koniec "; getch(); return 0; } |
2018-05-08 (22:36) kleszek Data rejestracji: 2006-05-27 00:00:00 Ilość postów: 4903 | wpis nr 1 166 932 [ CZCIONKA MONOSPACE ] Dziękuję sindbad. Jak widać najlepiej poznawać nowe możliwości programu i się uczyć przerabiania kodów, na samodzielnie wymyślonych przykładach. Napisałeś cyt. "Np. 2/3 = 3 a 2/7 = 21 to 2/3/7 = 7 kombinacji i na tyle ustawiamy generator sprawdzając rozkład trafienia 2/3/7. Czy dobrze rozumiem, ta liczba 7 w przykładzie, wzięła się w wyniku prostej operacji dzielenia 21 przez 3 ? |
2018-05-09 (16:34) sindbad Data rejestracji: 2008-10-13 00:00:00 Ilość postów: 20519 | wpis nr 1 167 031 [ CZCIONKA MONOSPACE ] Tak. W siódemce mamy 21 dwójek. W trójce mamy 3 dwójki. System z siedmiu liczb o gwarancji 2/2 na 3 skreślenia to 7 zakładów (21:3). --- wpis edytowano 2018-05-09 16:35 --- |
2018-05-10 (11:02) kleszek Data rejestracji: 2006-05-27 00:00:00 Ilość postów: 4903 | wpis nr 1 167 132 [ CZCIONKA MONOSPACE ] sindbad, załóżmy, że jestem "niewierny Tomasz" Czy jest możliwość modyfikacji kodu aby zobaczyć w oknie konsoli wszystkie losowania, które potrzebne były programowi aby wylosować wszystkie 2z3 przy 7 liczbach ? Powiedzmy, że program potrzebował 19 losowań aby zaliczyć wszystkie dwójki, więc oczywiste jest, że niektóre pary w trójkach musiały się powtarzać i ja chciałbym je sobie zobaczyć Da się to zrobic ? I druga sprawa, kiedy wynik dzielenia nie jest liczbą całkowitą np. dla systemu 2/4/7 --> 21/6 = 3,5 to liczbę bool tab[] należy zaokrąglić, dobrze rozumuję ? Należy zaokrąglić w górę, w dół, czy może trzeba jeszcze jakis inny "myk" aby wyliczyć wszystkie losowania, w których wypadną wszystkie pary ? |
2018-05-10 (15:37) sindbad Data rejestracji: 2008-10-13 00:00:00 Ilość postów: 20519 | wpis nr 1 167 173 [ CZCIONKA MONOSPACE ] "Powiedzmy, że program potrzebował 19 losowań aby zaliczyć wszystkie dwójki, więc oczywiste jest, że niektóre pary w trójkach musiały się powtarzać i ja chciałbym je sobie zobaczyć Da się to zrobic ? " Da się. Druga sprawa. Zaokrąglamy w górę. Jedna uwaga jest taka, że tym sposobem nie zbudujemy systemu. --- wpis edytowano 2018-05-10 15:46 --- |
2018-05-10 (17:31) kleszek Data rejestracji: 2006-05-27 00:00:00 Ilość postów: 4903 | wpis nr 1 167 184 [ CZCIONKA MONOSPACE ] >>> tym sposobem nie zbudujemy systemu <<< Warto jednak wiedzieć, ile par i jaki jest ich rozkład pod wzgledem ilosci wystąpień, w zadaniu polegającym na wypadnięciu wszystkich możliwych do utworzenia z danej ilości liczb par w losowaniach np. trójek. Do celów analityczno-poznawczych taka wiedza może sie przydać. |
2018-05-10 (17:50) sindbad Data rejestracji: 2008-10-13 00:00:00 Ilość postów: 20519 | wpis nr 1 167 186 [ CZCIONKA MONOSPACE ] Damy radę. Teraz idę popracować fizycznie. |
2018-05-12 (18:52) sindbad Data rejestracji: 2008-10-13 00:00:00 Ilość postów: 20519 | wpis nr 1 167 529 [ CZCIONKA MONOSPACE ] //-------------------------- bool tab[8]; int para[7][8]; const int zak[8][4]= {0,0,0,0, 0,1,2,3, 0,1,4,5, 0,1,6,7, 0,2,4,6, 0,2,5,7, 0,3,4,7, 0,3,5,6}; int main() { int i,j,a,v,x;// v = 0; x = 0; UprzypadkowijMT(); do { x++; a = (MersenneTwister() % (7)) +1; if(tab[a]==0) { v++; tab[a]=1; } cout<< zak[a][1]<<","<<zak[a][2]<<","<<zak[a][3]<<endl; for(i=1;i<=2;i++) for(j=i+1;j<=3;j++) para[zak[a][i]][zak[a][j]]++; } while (v < 7); cout << endl<< "Losowano " << x << " razy" << endl << endl; cout<<"Wylosowane ary:"<<endl<<endl; for(i=1;i<=6;i++) for(j=i+1;j<=7;j++) cout<<i<<","<<j<<" = "<<para[i][j]<<endl; cout <<endl<<"Koniec "; getch(); return 0; } --- wpis edytowano 2018-05-12 18:54 --- |
2018-05-12 (19:01) sindbad Data rejestracji: 2008-10-13 00:00:00 Ilość postów: 20519 | wpis nr 1 167 530 [ CZCIONKA MONOSPACE ] |
2018-05-12 (19:28) sindbad Data rejestracji: 2008-10-13 00:00:00 Ilość postów: 20519 | wpis nr 1 167 533 [ CZCIONKA MONOSPACE ] Ta wersja losuje do momentu gdzie każda para wystąpi 1 raz. Koszyk = wybranie wszystkich par. //-------------------------- bool tab[8]; int para[7][8]; const int zak[8][4]= {0,0,0,0, 0,1,2,3, 0,1,4,5, 0,1,6,7, 0,2,4,6, 0,2,5,7, 0,3,4,7, 0,3,5,6}; int main() { UprzypadkowijMT(); int i,j,a,v,x,r; r=0; do{ r++; for(i=1;i<=6;i++) for(j=i+1;j<=7;j++) para[i][j]=0; for(i=1;i<=7;i++) tab[i]=0; v = 0; x = 0; cout<<endl<<"Koszyk numer "<<r<<endl<<endl; do { x++; a = (MersenneTwister() % (7)) +1; if(tab[a]==0) { v++; tab[a]=1; } cout<< zak[a][1]<<","<<zak[a][2]<<","<<zak[a][3]<<endl; for(i=1;i<=2;i++) for(j=i+1;j<=3;j++) para[zak[a][i]][zak[a][j]]++; } while (v < 7); cout << endl<< "Losowano " << x << " razy" << endl << endl; cout<<"Wylosowane pary:"<<endl<<endl; for(i=1;i<=6;i++) for(j=i+1;j<=7;j++) cout<<i<<","<<j<<" = "<<para[i][j]<<endl; } while(x>7); cout <<endl<<"Koniec "; getch(); return 0; } --- wpis edytowano 2018-05-12 19:34 --- |
2018-05-12 (22:08) kleszek Data rejestracji: 2006-05-27 00:00:00 Ilość postów: 4903 | wpis nr 1 167 559 [ CZCIONKA MONOSPACE ] Dziękuję sindbad. Otrzymałem więcej niż oczekiwałem Spróbuję już samodzielnie na podstawie Twoich kodów przerobić je pod inne parametry systemu. Jeśli będe miał jakieś kłopoty ( a pewnie będę ) to zwrócę się do Ciebie o pomoc. {[ Pozdrawiam ]} |
2018-05-13 (12:42) kleszek Data rejestracji: 2006-05-27 00:00:00 Ilość postów: 4903 | wpis nr 1 167 644 [ CZCIONKA MONOSPACE ] Sindbad, domyślam się, że wszystkie pary są losowane z trójek wpisanych do: const int zak[8][4]. To jest (chyba) pewne ograniczenie losowości, bo gdzie jest powiedziane, że nie może być wylosowana np. trójka 4,5,7 ? Wydaje mi się, że program losując trójki z 7 liczb, powinien mieć "swobodę" wyboru z wszystkich kombiancji 3z7, czyli z 35 zestawów. Próbowałem coś tam pozmieniać w kodzie programu, ale przerosło to moje możliwości A może po prostu tak jak jest teraz jest prawidlowo, więc niepotrzebnie zawracam Ci głowę ? Pozdrawiam! |
2018-05-13 (17:55) sindbad Data rejestracji: 2008-10-13 00:00:00 Ilość postów: 20519 | wpis nr 1 167 686 [ CZCIONKA MONOSPACE ] Witaj, Ta wersja wylosuje system, gdzie każda para wystąpi dokładnie 1 raz. System matematycznie idealny. Bardzo mało jest takich systemów, a to jeden z nich. Szkoda czasu na systemy. Ja już mam to za sobą. //-------------------------- bool tab[8]; // liczby int para[7][8]; // pary int trzy[4];// wylosowana trójka int zak[1000][4];// wylosowane trójki int main() { UprzypadkowijMT(); int i,j,a,v,x,r; r=0; do{// losowany koszyk r++; // numer koszyka for(i=1;i<=6;i++) for(j=i+1;j<=7;j++) para[i][j]=0; // zerowanie par x=0; do{ x++; for(i=1;i<=3;i++) trzy[i]=0; // zerowanie trójki for(i=1;i<=7;i++) tab[i]=0; // zerowanie liczb for(i=1;i<=3;i++){ // pętla dla losowanej trójki do{ a = (MersenneTwister() % (7)) +1;// losowanie liczby } while (tab[a]>0);// jeśli liczba powtórzona to losuj dalej tab[a]=1; // zapamiętanie liczby } j=0; for(i=1;i<=7;i++) if(tab[i]==1){j++;trzy[j]=i;} // pobranie wylosowanych liczb - zakład for(i=1;i<=3;i++) zak[x][i]=trzy[i];// zapisanie zakładu for(i=1;i<=2;i++) for(j=i+1;j<=3;j++) para[trzy[i]][trzy[j]]++; // odnotowanie parez z trójki v=0; for(i=1;i<=6;i++) for(j=i+1;j<=7;j++) if(para[i][j]>0)v++; // zliczanie ile różnych par } while (v < 21); // jeśli mało parek to losuj trójki dalej } while (x>7);// jeśli pary pokryte a zakładów jest za dużo to spróbuj wylosować mniej cout<<"Kombinacji = "<<x<<" losowania = "<<r<<endl<<endl; cout<<"Wylosowane kombinacje:"<<endl<<endl; for(i=1;i<=x;i++){ for(j=1;j<=3;j++) cout<<zak[i][j]<<" "; cout<<endl; } cout<<endl<<"Wylosowane pary:"<<endl<<endl; for(i=1;i<=6;i++) for(j=i+1;j<=7;j++) cout<<i<<","<<j<<" = "<<para[i][j]<<endl; cout <<endl<<"Koniec "; getch(); return 0; } --- wpis edytowano 2018-05-13 17:56 --- |
2018-05-14 (15:46) kleszek Data rejestracji: 2006-05-27 00:00:00 Ilość postów: 4903 | wpis nr 1 167 823 [ CZCIONKA MONOSPACE ] No i rzeczywiście wyszedł system matematycznie idealny, choć nie to było moją intencją. Chciałem po prostu sprawdzić, ile potrzeba losowań aby tak jak w załączonym przykładzie, wylosować wszystkie możliwe pary, gdy są losowane trójki z siedmiu liczb. Dziękuję sindbadowi za cierpliwość, którą wykazał tłumacząc na przykładach zawiłości kodu. Jest tu dużo świetnego materiału do analizy, który może zachęcić do przeróbek kodu i próbie stworzenia własnego .exe opartego o kod źródłowy pokazany w załączonych przykładach. Pozdrawiam! |
2018-05-14 (18:05) sindbad Data rejestracji: 2008-10-13 00:00:00 Ilość postów: 20519 | wpis nr 1 167 849 [ CZCIONKA MONOSPACE ] Hej! Ja wpisałem x>7 czyli wymusiłem 7 zakładów. Zmiana na x<7 da zawsze jeden wariant pokrycia par. while (x<7);// jeśli pary pokryte to koniec pracy. --- wpis edytowano 2018-05-14 18:08 --- |
2018-05-14 (18:54) sindbad Data rejestracji: 2008-10-13 00:00:00 Ilość postów: 20519 | wpis nr 1 167 858 [ CZCIONKA MONOSPACE ] Małe zmiany i program wykonał się 10 milionów razy. Oto wynik rozkładu pokryć w parach Potrzebne losowania do pokrycia wszystkich par = ilość razy 7 = 24 8 = 125 9 = 1481 10 = 9311 11 = 32675 12 = 79202 13 = 150725 14 = 240835 15 = 335709 16 = 426320 17 = 503082 18 = 559679 19 = 594629 20 = 610904 21 = 607836 22 = 589015 23 = 561163 24 = 526027 25 = 484802 26 = 441253 27 = 400155 28 = 357651 29 = 318792 30 = 283279 31 = 248592 32 = 218706 33 = 191017 34 = 166835 35 = 145117 36 = 125819 37 = 109445 38 = 94525 39 = 81610 40 = 70251 41 = 60871 42 = 52494 43 = 44872 44 = 38615 45 = 33649 46 = 28871 47 = 24367 48 = 21053 49 = 18032 50 = 15484 51 = 13556 52 = 11636 53 = 10107 54 = 8343 55 = 7399 56 = 6354 57 = 5404 58 = 4531 59 = 3973 60 = 3388 61 = 2978 62 = 2417 63 = 2151 64 = 1861 65 = 1588 66 = 1303 67 = 1160 68 = 1045 69 = 819 70 = 725 71 = 618 72 = 521 73 = 455 74 = 433 75 = 337 76 = 299 77 = 237 78 = 228 79 = 176 80 = 149 81 = 128 82 = 95 83 = 103 84 = 87 85 = 81 86 = 65 87 = 52 88 = 41 89 = 35 90 = 27 91 = 31 92 = 31 93 = 21 94 = 15 95 = 21 96 = 13 97 = 8 98 = 6 99 = 13 100 = 9 101 = 4 102 = 2 103 = 3 104 = 1 105 = 4 106 = 1 107 = 2 109 = 2 110 = 1 113 = 2 116 = 1 117 = 1 121 = 1 125 = 1 127 = 2 Koniec |
2018-05-14 (19:56) kleszek Data rejestracji: 2006-05-27 00:00:00 Ilość postów: 4903 | wpis nr 1 167 867 [ CZCIONKA MONOSPACE ] >>> Ja wpisałem x>7 czyli wymusiłem 7 zakładów <<< >>> while (x<7);// jeśli pary pokryte to koniec pracy. <<< Jeden znak w kodzie, a tak wiele zmienia Jest super !!! Jeszcze raz dziękuję. |
2018-05-15 (21:34) sindbad Data rejestracji: 2008-10-13 00:00:00 Ilość postów: 20519 | wpis nr 1 168 076 [ CZCIONKA MONOSPACE ] Od dziś używam C++Builder 6 |
2018-05-15 (21:39) sindbad Data rejestracji: 2008-10-13 00:00:00 Ilość postów: 20519 | wpis nr 1 168 080 [ CZCIONKA MONOSPACE ] Polecam: http://miroslawzelent.pl/kurs-obiektowy-c++/borland-c++-builder-okienkowy-hello-world/ |
2018-05-16 (09:47) kleszek Data rejestracji: 2006-05-27 00:00:00 Ilość postów: 4903 | wpis nr 1 168 138 [ CZCIONKA MONOSPACE ] >>> Małe zmiany i program wykonał się 10 milionów razy. <<< Można prosić o kod tych "małych zmian" ? |
| Dodaj wpis w tym temacie | Spis tematów | Wyniki lotto | Strona: 1 2 3 4 ... 18 19 Wyślij wiadomość do admina |