Ir al contenido
Conéctate para seguir esto  
JPablos

Primitiva (una aproximación)

Recommended Posts

Buenos días.
He adaptado un ejemplo del libro de Deitel para que genere seis números

 

// Fig. E.1: figE_01.c
// The selection sort algorithm.
#define SIZE 6
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

// function prototypes
void selectionSort(int array[], size_t length);
void swap(int array[], size_t first, size_t second);
void printPass(int array[], size_t length, unsigned int pass, size_t index);

int main(void)
{
   int array[SIZE]; // declare the array of ints to be sorted

   srand(time(NULL)); // seed the rand function

   for (size_t i = 0; i < SIZE; i++) {
      array[i] = rand() % 49 + 1; // give each element a value
   }

   puts("Unsorted array:");

   for (size_t i = 0; i < SIZE; i++) { // print the array
      printf("%d  ", array[i]);
   }

   puts("\n");
   selectionSort(array, SIZE);
   puts("Sorted array:");

   for (size_t i = 0; i < SIZE; i++) { // print the array
      printf("%d  ", array[i]);
   }
}

// function that selection sorts the array
void selectionSort(int array[], size_t length)
{
   // loop over length - 1 elements
   for (size_t i = 0; i < length - 1; i++) {
      size_t smallest = i; // first index of remaining array

      // loop to find index of smallest element
      for (size_t j = i + 1; j < length; j++) {
         if (array[j] < array[smallest]) {
            smallest = j;
         }
      }

      swap(array, i, smallest); // swap smallest element
      printPass(array, length, i + 1, smallest); // output pass
   }
}

// function that swaps two elements in the array
void swap(int array[], size_t first, size_t second)
{
   int temp = array[first];
   array[first] = array[second];
   array[second] = temp;
}

// function that prints a pass of the algorithm
void printPass(int array[], size_t length, unsigned int pass, size_t index)
{
   printf("After pass %2d: ", pass);

   // output elements till selected item
   for (size_t i = 0; i < index; i++) {
      printf("%d  ", array[i]);
   }

   printf("%d* ", array[index]); // indicate swap

   // finish outputting array
   for (size_t i = index + 1; i < length; i++) {
      printf("%d  ", array[i]);
   }

   printf("%s", "\n               "); // for alignment

   // indicate amount of array that is sorted
   for (unsigned int i = 0; i < pass; i++) {
      printf("%s", "--  ");
   }

   puts(""); // add newline
}


/**************************************************************************
 * (C) Copyright 1992-2015 by Deitel & Associates, Inc. and               *
 * Pearson Education, Inc. All Rights Reserved.                           *
 *                                                                        *
 * DISCLAIMER: The authors and publisher of this book have used their     *
 * best efforts in preparing the book. These efforts include the          *
 * development, research, and testing of the theories and programs        *
 * to determine their effectiveness. The authors and publisher make       *
 * no warranty of any kind, expressed or implied, with regard to these    *
 * programs or to the documentation contained in these books. The authors *
 * and publisher shall not be liable in any event for incidental or       *
 * consequential damages in connection with, or arising out of, the       *
 * furnishing, performance, or use of these programs.                     *
 *************************************************************************/

 



El código ha sido compilado con gcc en Ubuntu.

Genera los seis números esperados, pero en las primeras ejecuciones del programa compilado, me esta generando números repetidos.
 
Acudo de nuevo a los Gurús del Foro para solucionar este resultado, a la espera de conseguir dos objetivos alcanzables:

  • Obtener los seis números esperados sin que se repita ninguno,
  • ... y más importante: obtener la combinación ganadora (¡jajajaja!)

Bueno señores, a ver sí nos ganamos la primitiva, el bonoloto, ...

 

Nota: agradezco de antemano la reubicación del tema, edición de etiquetas o demás acciones pertinentes si aplican a este tema.

 

Un saludo

JPablos

Compartir este post


Enlace al post
Compartir en otros sitios

Bueno, vamos al toro.

 

A ver sí esto se anima, esta es mi apuesta de la Primitiva para hoy

 

[966][jpablos:Primitiva]$ ./Primitiva.out 
Unsorted array:
13  38  45  2  15  25  

After pass  1: 2  38  45  13* 15  25  
               --  
After pass  2: 2  13  45  38* 15  25  
               --  --  
After pass  3: 2  13  15  38  45* 25  
               --  --  --  
After pass  4: 2  13  15  25  45  38* 
               --  --  --  --  
After pass  5: 2  13  15  25  38  45* 
               --  --  --  --  --  
Sorted array:
2  13  15  25  38  45  [967][jpablos:Primitiva]$ 
Valor apostado 1 ‎€

 

 

Un saludo

 

JPablos

Editado por JPablos

Compartir este post


Enlace al post
Compartir en otros sitios

Yo hace unos años me hice un programita para hacerme rico con la primitiva.

 

Estuve metiendo cientos de resultados de sorteos en una base de datos. Me daba tres posibles combinaciones:

  1. Los 6 números que mas salían (por si había un pequeño defecto en las bolas y por eso salían con mas asiduidad).
  2. Los 6 números que menos salían (por temas de estadística).
  3. Una mezcla de ambos.

 

Como veréis.... sigo siendo pobre  :muro:

Compartir este post


Enlace al post
Compartir en otros sitios

Gracias @@chujalt, básicamente se trata de aprender un poco de programación, esto de aprender desde un libro es un poco estéril, lo de ganar en la Primi o en otro sorteo es solo anecdótico por ponerle un poco de sal al tema.

 

Por tanto, lo interesante sería cómo evitar la repetición de números en la salida del programa, eso ya en sí es una ganancia.

 

Un saludo

 

JPablos

Compartir este post


Enlace al post
Compartir en otros sitios

Gracias @@Oscar77, siguiendo el lado anecdótico de este tema, las probabilidades de ganar en un sorteo como la Primitiva por ejemplo, son de 1 a 139,8 millones, dicho esto casi imposible JaJaJaaa

 

Un saludo

 

JPablos

 

La probabilidad de que te toque una primitiva jugando una apuesta es de una entre 13.983.816.

 

 

 C649=49!/(43!*6!)=13.983.816

Compartir este post


Enlace al post
Compartir en otros sitios

Gracias @@radon2, siempre es bueno ver el concepto detrás de la idea.

 

Por cierto, reitero la pregunta ¿cómo puedo evitar que se repitan números, en el arreglo de ordenación, o hay que crear alguna condición especial para ello?

 

Un saludo

 

JPablos

Editado por JPablos

Compartir este post


Enlace al post
Compartir en otros sitios

Registra una cuenta o conéctate para comentar

Debes ser un miembro de la comunidad para dejar un comentario

Crear una cuenta

Regístrate en nuestra comunidad. ¡Es fácil!

Registrar una cuenta nueva

Iniciar Sesión

¿Ya tienes cuenta? Conéctate aquí.

Iniciar Sesión
Conéctate para seguir esto  

×