Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Dupa 20 ani de facultate, am uita...

Mobile.de ofera imprumut de bani ...

problema test grila

Digi24 a disparut de pe TV Lg
 Drept de proprietate intelectuala...

Jante noi shitbox

Trinitas TV 4K

Dacia 1316 cu 6 usi ...
 Frecventa modificata radio

Un nou pericol pt batrani

Ar trebuii sa vindem imobiliarele...

Dupa renuntarea la aparat dentar
 pelerinaj in Balcik

Noul format Jpegli iși propu...

Dade, dade

Probleme accesare nr test telefon
 

Lotto 6/49 in C

- - - - -
  • Please log in to reply
9 replies to this topic

#1
VladBtz

VladBtz

    Active Member

  • Grup: Members
  • Posts: 1,702
  • Înscris: 24.09.2014
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define false 0
#define true 1
int main(int argc, char** argv)
{ srand(time(NULL));
int nrLotto[6],stop;
printf("Numere Lotto 6/49: ");
for(int i=0;i<6;i++)
	 { nrLotto[i]=rand()%49+1;
		 do{
		 stop=true;
		 for(int j=0;j<i;j++)
		 {
			 if(nrLotto[j]==nrLotto[i])	 //ne asiguram ca nu se repeta
			 {
				 stop=false;
				 nrLotto[i]=rand()%49+1;
			 }

			 else if(nrLotto[j]>nrLotto[i])	 //sortare
			 {
				 nrLotto[j] +=nrLotto[i];
				 nrLotto[i] = nrLotto[j]-nrLotto[i];
				 nrLotto[j] -= nrLotto[i];
				 stop=false;
			 }
		 }
		 }while(stop==false);
printf("%d ",nrLotto[i]);
	 }
return 0;
}


Poate intr-o zi voi concepe si partea de GUI.

Edited by VladBtz, 20 November 2016 - 14:02.


#2
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,238
  • Înscris: 24.02.2007
Dragut, dar prea previzibil. Schimb ora la pc si aflu ce vei extrage.

Incearca sa folosesti un generator random mai sigur.

Poti incerca si o varianta care sa nu aibe niciodata nevoie de mai mult de 6 extrageri.

#3
VladBtz

VladBtz

    Active Member

  • Grup: Members
  • Posts: 1,702
  • Înscris: 24.09.2014
Adica o varianta de random care genereaza in mod prestabil numere aleatorii diferite ?

Ce zici de varianta in care am deja 49 de numere in array(cum au aia de la Loterie urna cu 49 bile) si le amestec cu random shuffle, apoi le aleg pe primele 6 ? O sa am nevoie de functia pe care o gasesc in algorithm, dar C nu imi recunoaste biblioteca asta.

Edited by VladBtz, 20 November 2016 - 14:19.


#4
Kain_12

Kain_12

    Senior Member

  • Grup: Senior Members
  • Posts: 2,009
  • Înscris: 25.11.2009

View Postdani.user, on 20 noiembrie 2016 - 13:57, said:

Dragut, dar prea previzibil. Schimb ora la pc si aflu ce vei extrage.

Incearca sa folosesti un generator random mai sigur.

Poti incerca si o varianta care sa nu aibe niciodata nevoie de mai mult de 6 extrageri.
Mi-ai captivat atentia. Poti sa imi dai cateva linkuri unde pot sa citesc mai multe despre chestia cu "schimb ora si aflu ce vei extrage" ?

#5
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,238
  • Înscris: 24.02.2007

View PostVladBtz, on 20 noiembrie 2016 - 14:16, said:

Ce zici de varianta in care am deja 49 de numere in array(cum au aia de la Loterie urna cu 49 bile) si le amestec cu random shuffle

Random shuffle pe 49 elemente implica mult mai mult de 6 numere random.

Extragi un element random, il scoti din array => data viitoare cand extragi unul random nu mai ai cum sa dai peste unul deja extras.

View PostKain_12, on 20 noiembrie 2016 - 14:24, said:

Mi-ai captivat atentia. Poti sa imi dai cateva linkuri unde pot sa citesc mai multe despre chestia cu "schimb ora si aflu ce vei extrage" ?

Motorul de numere pseudo-aleatoare l-a initilizat cu time(NULL), numarul de secunde din 1970. rand() iti returneaza mereu aceleasi valori daca initializezi srand() cu aceeasi valoare.

Exista alte generatoare de numere pseudo-aleatoare mai sigure, mai greu de prezis. Biblioteca standard a C++ ofera unele. Altele le gasesti in biblioteci. Chiar si sistemele de operare ofera adesea generatoare mai sigure pentru criptografie.

#6
VladBtz

VladBtz

    Active Member

  • Grup: Members
  • Posts: 1,702
  • Înscris: 24.09.2014
Dupa ce il scot din array va trebui sa micsorez arrayul.

#7
modoran

modoran

    Senior Member

  • Grup: Senior Members
  • Posts: 8,403
  • Înscris: 08.02.2011
Eu as folosi /dev/urandom pe Linux/Mac si CryptGenRandom() sau rand_s (tot aia e) in windows, perfect compatibile cu limbajul C.

#8
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,238
  • Înscris: 24.02.2007
Sa vad ca ai inteles C, hai cu o varianta ce foloseste un singur apel la CryptGenRandom cu buffer de dimensiune minima.

#9
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,238
  • Înscris: 24.02.2007
Nimic?

#10
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,238
  • Înscris: 24.02.2007
#include <stdio.h>
#include <Windows.h>

void GetRandomData(void* buffer, size_t bufferSize)
{
   HCRYPTPROV provider;
   if (!CryptAcquireContext(&provider, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT))
   {
	  exit(1);
   }

   if (!CryptGenRandom(provider, (DWORD)bufferSize, (BYTE*)buffer))
   {
	  exit(1);
   }

   CryptReleaseContext(provider, 0);
}

int ExtractNumber(int* numbers, int nrOfNumbers, int index)
{
   index = index % nrOfNumbers;
   int result = numbers[index];
   if (index < (nrOfNumbers - 1))
   {
	  numbers[index] = numbers[nrOfNumbers - 1];
   }
   return result;
}

#define MAX_NUMBERS 49
#define TO_EXTRACT 6


int main(void)
{
   int numbers[MAX_NUMBERS];

   for (int i = 0; i < MAX_NUMBERS; ++i)
   {
	  numbers[i] = i;
   }

   unsigned char extractedValues[TO_EXTRACT];
   GetRandomData(&extractedValues, TO_EXTRACT);

   int nrNumbers = MAX_NUMBERS;

   for (int i = 0; i < TO_EXTRACT; ++i)
   {
	  printf("%d ", ExtractNumber(numbers, nrNumbers--, extractedValues[i]) + 1);
   }

   return 0;
}


  • Doar un apel pentru a genera 6 bytes de date aleatoare
  • Motor mai performant de generare a date aleatoare, din lumea criptografica
  • O singura iteratie pentru a extrage cele 6 numere. Fara duplicate, cu rearanjarea a maxim 1 element/extragere

Edited by dani.user, 26 November 2016 - 14:15.


Anunturi

Second Opinion Second Opinion

Folosind serviciul second opinion ne puteți trimite RMN-uri, CT -uri, angiografii, fișiere .pdf, documente medicale.

Astfel vă vom putea da o opinie neurochirurgicală, fără ca aceasta să poată înlocui un consult de specialitate. Răspunsurile vor fi date prin e-mail în cel mai scurt timp posibil (de obicei în mai putin de 24 de ore, dar nu mai mult de 48 de ore). Second opinion – Neurohope este un serviciu gratuit.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate