Forum strony www.multipasko.pl [Regulamin]


Dodaj wpis w tym temacie
Spis tematów
Login:

Hasło:
Strona: 1 2 3 ... 18 19
Wyślij wiadomość do admina

Przewiń wpisy ↓

C++ od niechcenia

2018-05-02 (23:20)

status sindbad
Data rejestracji: 2008-10-13
Ilość postów: 20462

3794
wpis nr 1 165 825
[ CZCIONKA SPECJALNA ]

Widzę, że nie zamknąłem pliku - plik.close();





plik<< endl;//cout << endl;

}

plik.close();

}

cout<<"Koniec";

getch();



2018-05-03 (14:45)

status kleszek
Data rejestracji: 2006-05-27
Ilość postów: 4850

2047
wpis nr 1 165 933
[ CZCIONKA SPECJALNA ]

Kod poprawiony, choć bez tego "Koniec" plik też był generowany. Chociaż kompletnie się nie znam na C++ to domyślam się, że procedura tworzenia zestawów zaczyna się od instrukcji int main (). Są tam też instrukcje, które znam z VBA ( if, while, for ), więc pewne rzeczy można się domyślać co wykonują. Generator na pewno mi się przyda, choćby po to aby porównać sobie wyniki wygenerowane Mersenne Twister z ISAAC-em. Dziękuję sindbad !
2018-05-03 (18:04)

status sindbad
Data rejestracji: 2008-10-13
Ilość postów: 20462

3794
wpis nr 1 165 954
[ CZCIONKA SPECJALNA ]

Hej!





int main()

{



int li[81]; // tablica liczb

int a,b,c,i,j,n,x;



UprzypadkowijMT();



cout << "Generator Mersenne Twister (MT)" << endl << endl;

cout << "Od liczby: ";

cin >> a;

cout << "Do liczby: ";

cin >> b;

cout << "Liczb: ";

cin >> c;

cout << "Losowania: ";

cin >> n;

cout << endl << endl;



fstream plik( "plik.txt", ios::out );

if( plik.good() )

{ // plik otwarty



for(i = 1; i<= n; i++) // pętla losowań (zakładów)

{ // początek zakładów



for(j=1; j<=80; j++) li[j] = 0; // zerowanie tablicy dla zakładu



for(j=1; j<=c; j++) // pętla zakładu

{ // początek zakładu



do

{ // pętla liczby



x = (a + (MersenneTwister() % (b - a + 1))); // losowanie liczby



}

while (li[x] > 0); // jeśli powtórka to losuj ponownie



li[x]=1;// nowa liczba wstawiona do tablicy jako jej indeks z wartością 1



} // koniec zakładu



for(j=1; j<=80; j++) // pętla tablicy liczb

if(li[j]==1) // jeśli w tablicy pod indeksem j jest 1 to liczba = j

{



plik << j << " "; // drukowany zakład do pliku liczba po liczbie z separatorem " " (spacja)



}



plik<< endl;// przejście do nowej linii w pliku



} // koniec zakładów



plik.close();// zamknięcie pliku

} // plik zamknięty



cout<<"Koniec";

getch(); // czeka na dowolny klawisz (zatrzymanie)



return 0;

}

--- wpis edytowano 2018-05-03 18:08 ---

2018-05-03 (18:11)

status sindbad
Data rejestracji: 2008-10-13
Ilość postów: 20462

3794
wpis nr 1 165 955
[ CZCIONKA SPECJALNA ]

Muszę się porozglądać za czymś lepszym, ale co można znaleźć na starego xp.



Visual Studio?
2018-05-03 (20:07)

status kleszek
Data rejestracji: 2006-05-27
Ilość postów: 4850

2047
wpis nr 1 165 975
[ CZCIONKA SPECJALNA ]

sindbad, Twoje komentarze pozwalają zrozumieć co poszczególne linie kodu robią w programie. Domyślam się, że linia :

x = (a + (MersenneTwister() % (b - a + 1))); // losowanie liczby

odpowiada za, tak jak to jest napisane w komentarzu, generowanie kolejnych liczb w zakładzie. Przypuszczam, że gdybym chciał mieć liczby nie w kolejności uporządkowanej, tak jak robi to program, to musiałbym ( chyba ) zmienic coś w tej linii. Oczywiście wyniki niesortowane nie są mi do niczego potrzebne. Pytam tak od niechcenia w celach poznawczo-edukacyjnych. Pozdrawiam!

2018-05-03 (21:37)

status sindbad
Data rejestracji: 2008-10-13
Ilość postów: 20462

3794
wpis nr 1 166 005
[ CZCIONKA SPECJALNA ]

x = (a + (MersenneTwister() % (b - a + 1)));

Ta linia odpowiada wyłącznie za wylosowanie jednej liczy, której wartość jest w zmiennej x.





Za formatowanie odpowiada ten człon:



for(j=1; j<=80; j++) // pętla tablicy liczb

if(li[j]==1) // jeśli w tablicy pod indeksem j jest 1 to liczba = j

{



plik << j << " "; // drukowany zakład do pliku liczba po liczbie z separatorem " " (spacja)



}



Dla liczb niesortowanych:



plik << x << " ";

--- wpis edytowano 2018-05-03 21:40 ---

2018-05-03 (22:08)

status kleszek
Data rejestracji: 2006-05-27
Ilość postów: 4850

2047
wpis nr 1 166 018
[ CZCIONKA SPECJALNA ]

>>> plik << x << " "; <<<

Rozumiem, że aby uzyskać zestawy z liczbami niesortowanymi, muszę zamienic linię kodu

plik << j << " ";

na

plik << x << " ";

Pewnie ja coś źle robię, bo po takiej zamianie, otrzymuję np.

11 11 11 11 11 11 11 11

17 17 17 17 17 17 17 17



Zostawmy to. Pytanie było z gatunku czysto teoretycznych a podobno ciekawość to pierwszy stopień do piekła

Pozdrawiam!

2018-05-04 (12:33)

status sindbad
Data rejestracji: 2008-10-13
Ilość postów: 20462

3794
wpis nr 1 166 095
[ CZCIONKA SPECJALNA ]

Hej!



Zainstalowałem sobie Borland C++ Builder 6 Personal.

Borland najlepiej mi pasuje.



Som jakieś pomysły



Lecę do pracy fizycznej.
2018-05-04 (22:28)

status kleszek
Data rejestracji: 2006-05-27
Ilość postów: 4850

2047
wpis nr 1 166 217
[ CZCIONKA SPECJALNA ]

Widzę, że tematyka programowania nie wzbudziła większego zainteresowania na forum. Szkoda, bo samodzielne skompilowanie kodu daje dużą satysfakcję z utworzenia "własnego programu". Więc żeby więcej nie męczyć sindbada, mam ostatnie pytanie odnośnie generatora. Wiem już (wyczytałem w internecie), że instrukcja cin >> a; jest poleceniem służącym do pobierania z klawiatury liczb. Jak zrobić aby zmienne a, b, c, n były wpisane na stałe w programie ? Pozwoliło by to tworzyć akurat potrzebne generatory bez konieczności wpisywania z klawiatury parametrów tworzenia zestawów. I czy dało by się zrobić, aby po uruchomieniu takiego pliku .exe, "z automatu" był tworzony plik .txt ?
2018-05-04 (23:34)

status sindbad
Data rejestracji: 2008-10-13
Ilość postów: 20462

3794
wpis nr 1 166 223
[ CZCIONKA SPECJALNA ]

kleszek, można śmiało pytać i drążyć temat aż się zrozumie, co jest grane.

Ja również uczę się programowania, bo jak to powiedział mój dobry znajomy "zatrzymałem się na pętli for" he!



Usuwamy zmienne a,b,c,n



Zamiast zmiennych definiujemy stałe:

const int a = 1; // Od liczby

const int b = 80; // Do liczby

const int c = 20; // Liczb

const int n = 100000; // Losowania



Usuwamy linie z cin>>

--- wpis edytowano 2018-05-04 23:51 ---

2018-05-04 (23:53)

status sindbad
Data rejestracji: 2008-10-13
Ilość postów: 20462

3794
wpis nr 1 166 225
[ CZCIONKA SPECJALNA ]

Teraz uruchamiasz exe i masz plik





Wersja sortowane:



int main()

{

int li[81];

UprzypadkowijMT();

int i,j,x;

const int a = 1; // Od liczby

const int b = 80; // Do liczby

const int c = 20; // Liczb

const int n = 1000; // Losowania

fstream plik( "plik.txt", ios::out );

if( plik.good() ) {

for(i = 1; i<= n; i++){

for(j=1; j<=80; j++) li[j] = 0;

for(j=1; j<=c; j++){

do {

x = (a + (MersenneTwister() % (b - a + 1)));

}

while (li[x] > 0);

li[x]=1;

}

for(j=1; j<=80; j++) if(li[j]==1) plik << j << " ";

plik<< endl;

}

plik.close();

}

return 0;

}









Wersja niesortowane:



int main()

{

int li[81];

UprzypadkowijMT();

int i,j,x;

const int a = 1; // Od liczby

const int b = 80; // Do liczby

const int c = 20; // Liczb

const int n = 1000; // Losowania

fstream plik( "plik.txt", ios::out );

if( plik.good() ) {

for(i = 1; i<= n; i++){

for(j=1; j<=80; j++) li[j] = 0;

for(j=1; j<=c; j++){

do {

x = (a + (MersenneTwister() % (b - a + 1)));

}

while (li[x] > 0);

li[x]=1;

plik << x << " ";

}

plik<< endl;

}

plik.close();

}

return 0;

}

--- wpis edytowano 2018-05-05 00:00 ---

2018-05-05 (00:24)

status Pęsko
Data rejestracji: 2003-08-15
Ilość postów: 1683

5
wpis nr 1 166 226
[ CZCIONKA SPECJALNA ]

kleszek C++ polecam kilka chwil poświęcić na ten kurs w tym wydaniu: http://miroslawzelent.pl/kurs-c++/
2018-05-05 (10:42)

status kleszek
Data rejestracji: 2006-05-27
Ilość postów: 4850

2047
wpis nr 1 166 279
[ CZCIONKA SPECJALNA ]

Sindbad, pięknie dziękuje za kody. Samodzielna kompilacja kodu do pliku .exe daje naprawdę dużo frajdy Pęsko, przystępnie wytłumaczony dla "zielonych" kurs od podstaw. Wiem, że programistą nie zostanę, ale przynajmniej patrząc na kod będę "mniej-więcej" rozumiał co dana linia kodu robi w programie. Jeszcze raz dziękuję ! Pozdrawiam!
2018-05-06 (20:19)

status sindbad
Data rejestracji: 2008-10-13
Ilość postów: 20462

3794
wpis nr 1 166 537
[ CZCIONKA SPECJALNA ]

Witam.



Odczytanie pliku losowań MM ze strony multipasko.pl



//---------------------------------------------------------

#include<iostream>

#include<wininet.h> // Wymaga instalacji no!

using namespace std;



int WEB_GET_DATA(char* WEB_URL)

{

HINTERNET WEB_CONNECT = InternetOpen("Default_User_Agent", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);

if (!WEB_CONNECT)

{

cout << "Connection Failed or Syntax error" << endl;

return 0;

}



HINTERNET WEB_ADDRESS = InternetOpenUrl(WEB_CONNECT, WEB_URL, NULL, 0, INTERNET_FLAG_KEEP_CONNECTION, 0);

if (!WEB_ADDRESS)

{

cout << "ERROR..." << endl;

InternetCloseHandle(WEB_CONNECT);

return 0;

}





DWORD DATA_SIZE = 4096;

char *_DATA_RECIEVED = new char[DATA_SIZE];

DWORD NO_BYTES_READ = 0;



do

{

if (InternetReadFile(WEB_ADDRESS, _DATA_RECIEVED, DATA_SIZE, &NO_BYTES_READ))

{

if (NO_BYTES_READ == 0)

break;



cout << string(_DATA_RECIEVED, NO_BYTES_READ);

}

else

{

if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)

{

cout << "Read error" << endl;

break;

}



delete[] _DATA_RECIEVED;

DATA_SIZE += 4096;

_DATA_RECIEVED = new char[DATA_SIZE];

}

}

while (true);



InternetCloseHandle(WEB_ADDRESS);

InternetCloseHandle(WEB_CONNECT);

return 0;

}

int main(){



WEB_GET_DATA("http://www.multipasko.pl/wyniki-csv.php?f=multimulti-sortowane");



return 0;

}

//------------------------------------------------------



Powodzenia





2018-05-07 (09:33)

status kleszek
Data rejestracji: 2006-05-27
Ilość postów: 4850

2047
wpis nr 1 166 632
[ CZCIONKA SPECJALNA ]

sindbad, napisałeś cyt. "#include<wininet.h> // Wymaga instalacji no!

Gdzie to coś należy zainstalować ? W CodeBlocks ? w windowsie ? i skąd to pobrać ?.Sorry, za takie "dziecinne" pytania. Nigdy dotąd nie miałem do czynienia z programowaniem, a takie programy skompilowane "własnoręcznie" z Twoich kodów na pewno przydadzą się wszystkm zainteresowanym tematem gier lotto.
2018-05-07 (20:40)

status sindbad
Data rejestracji: 2008-10-13
Ilość postów: 20462

3794
wpis nr 1 166 725
[ CZCIONKA SPECJALNA ]

Hej!



W CodeBlocks podajemy ścieżkę do pliku i po zawodach.

Plik jest w katalogu lib: CodeBlocks\MinGW\lib.



Wczytaj projekt i tak jak na obrazkach.

















Otwórz i kilka potwierdzeń OK.
2018-05-07 (22:27)

status kleszek
Data rejestracji: 2006-05-27
Ilość postów: 4850

2047
wpis nr 1 166 750
[ CZCIONKA SPECJALNA ]

No i z Twoją pomocą sindbad sie udało Wyniki MM zostały pobrane do okienka . To chyba właśnie ten kod miał robić.
2018-05-08 (11:21)

status kleszek
Data rejestracji: 2006-05-27
Ilość postów: 4850

2047
wpis nr 1 166 801
[ CZCIONKA SPECJALNA ]

sindbad, to znowu ja Domyślam się, że kod pobierający wyniki losowań, pobiera je do pamięci RAM. Plik .exe po uruchomieniu i pobraniu wyników znika, co uniemożliwia np. metodą kopiuj-wklej pobrania wyników z okienka konsoli. Domyślam się, że trzeba gdzieś wstawić do kodu polecene getch();. Próbowałem je wstawiac przed linią kodu return 0; ale wyskakują błędy, więc coś robię źle.

I druga kwestia. Chciałbym wrócić do Twojego kodu wyszukującego wszystkie szóstki lotto. Skąd program wie, że ma losować akurat szóstki. Rozumiem, że

bool tab[13983817];// Tablica szóstek liczba 13983817 to zbiór wszystkich kombinacji 6z49 +1. Czyli wynika to wprost, niejako "z automatu" z liczby wpisanej do bool tab[] ? Czy jakbym chciał sobie wyliczyć wszystkie piątki z 49, to bool tab powinna wyglądać tak:

bool tab[1906884]; ?

A gdybym chiał sobie wyliczyć ile trzeba losowań, żeby trafić wszystkie czwórki, gdy jest losowane 6 liczb z 49 ?

2018-05-08 (16:34)

status sindbad
Data rejestracji: 2008-10-13
Ilość postów: 20462

3794
wpis nr 1 166 854
[ CZCIONKA SPECJALNA ]

Dla funkcji getch() dokańczamy bibliotekę conio

Wystarczy wpisać: #include <conio.h>



Losowania będziemy zapisywać w pliku tekstowym.



Generator losował kody kombinacji 6/49 i może to robić dla dowolnej kombinacji.





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

--- wpis edytowano 2018-05-08 16:51 ---

2018-05-08 (17:36)

status sindbad
Data rejestracji: 2008-10-13
Ilość postów: 20462

3794
wpis nr 1 166 857
[ CZCIONKA SPECJALNA ]

Plik z losowaniami do pliku tekstowego.





#include<iostream>

#include<wininet.h>

#include <conio.h> // dodano dla zatrzymania

#include <fstream> // dodano dla pliku



using namespace std;



int WEB_GET_DATA(char* WEB_URL)

{

HINTERNET WEB_CONNECT = InternetOpen("Default_User_Agent", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);

if (!WEB_CONNECT)

{

cout << "Connection Failed or Syntax error" << endl;

return 0;

}



HINTERNET WEB_ADDRESS = InternetOpenUrl(WEB_CONNECT, WEB_URL, NULL, 0, INTERNET_FLAG_KEEP_CONNECTION, 0);

if (!WEB_ADDRESS)

{

cout << "ERROR..." << endl;

InternetCloseHandle(WEB_CONNECT);

return 0;

}





DWORD DATA_SIZE = 4096;

char *_DATA_RECIEVED = new char[DATA_SIZE];

DWORD NO_BYTES_READ = 0;



fstream plik( "Losowania.txt", ios::out ); // dodano dla pliku

if( plik.good() ) { // dodano dla pliku



do

{

if (InternetReadFile(WEB_ADDRESS, _DATA_RECIEVED, DATA_SIZE, &NO_BYTES_READ))

{

if (NO_BYTES_READ == 0)

break;



//cout << string(_DATA_RECIEVED, NO_BYTES_READ); // usunięto z konsoli

plik << string(_DATA_RECIEVED, NO_BYTES_READ) << endl; // dodano pla pliku

}

else

{

if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)

{

cout << "Read error" << endl;

break;

}



delete[] _DATA_RECIEVED;

DATA_SIZE += 4096;

_DATA_RECIEVED = new char[DATA_SIZE];

}

}

while (true);



} // dodano dla pliku



InternetCloseHandle(WEB_ADDRESS);

InternetCloseHandle(WEB_CONNECT);



plik.close();// dodano dla pliku



return 0;

}

int main(){



WEB_GET_DATA("http://www.multipasko.pl/wyniki-csv.php?f=multimulti-sortowane");



// getch(); dodano i wyłączono dla automatyki exe



return 0;

}

| Dodaj wpis w tym temacie | Spis tematów | Wyniki lottoStrona: 1 2 3 ... 18 19
Wyślij wiadomość do admina