Página 9 de 10

Re: [Curso] Introducción a la programación en C (IX)

Publicado: 20 Ene 2011, 11:45
por Dark Pallacus
m0skit0 escribió:Eso consideración ya la tuve en cuenta, querido Pallacus. Fíjate en mi bucle while:

Código: Seleccionar todo

    if (bola_actual == bola[i])
    {
        i = 0;
        bola_actual = (rand() % 49) + 1;
    }
Si la bola es igual, generamos nueva bola y volvemos a comparar desde el principio (i=0).

OPS, ahora lo veo. Me gusta y me lo copio ;)
Spoiler:

Código: Seleccionar todo

//La primitiva consiste en un sorteo del que se extraen 7 bolas de 49. 6 numeros ganadores mas uno complementario.
//Finalmente se extrae otro número para el reintegro, del 0 al 9, de otro bombo.

//Incluimos las  librerias.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(int argc, char* argv[])
{
  //Establecemos las variables. Inicializamos todas las bolas con valor 0.
  int extraccion, bola_actual, reintegro, impresion, comparacion;
  int bolas[7]={0};
 
  //Iniciamos el generador de números aleatorios,
  srand(time(NULL));
 
  //Imprimimos la cabecera.
  printf("\n Loterias DaxHordes.org!\n La combinación ganadora de hoy es:\n ");
 
  //Sacamos las 7 bolass.
  for (extraccion = 0; extraccion < 7; extraccion++)
  {
    bola_actual = (rand() % 49) + 1;
    //Si la bola extraída coincide con alguna anterior se vuelve a extraer.
    for(comparacion = 0; comparacion <= 6; comparacion++)
    {
      if (bola_actual == bolas[comparacion])
      {
   comparacion = 0;
   bola_actual = (rand() % 49) + 1;
      }
    }
    bolas[extraccion] = bola_actual;
  }
  //Sacamos también el reintegro.
  reintegro = rand() % 10;
 
  //Imprimimos los resultados de las 6 bolass...
  for (impresion = 0 ; impresion < 6 ; impresion++)
  {
    printf("%d, ", bolas[impresion]);
  }
 
  // el complementario...
  printf("\n Complementario: %d", bolas[6]);
 
  // y el reintegro.
  printf("\n Reintegro : %d\n\n", reintegro);
 
  return 0;
}

Re: [Curso] Introducción a la programación en C (IX)

Publicado: 20 Ene 2011, 12:07
por m0skit0
Un par de cosillas:

  • No tienes problema en usar i o c como variable contadora (que sólo sirve para recorrer un vector o contar elementos).
  • Código: Seleccionar todo

    for(comparacion = 0; comparacion <= 6; comparacion++)

    For no, leñe, while :? Que al for no se le puede tocar la variable contadora. Métetelo en la mollera :lol:

Re: [Curso] Introducción a la programación en C (IX)

Publicado: 20 Ene 2011, 18:15
por Dark Pallacus
Es que todavía estoy puliendo mi estilo :P

Entonces las variables que solo usamos para contador en un while o for, no necesitan un nombre descriptivo.

Se pueden declarar justo antes del for o hay que declararlas al principio?

:$ Entonces dentro de un for no se toca la variable contador.
Spoiler:

Código: Seleccionar todo

//La primitiva consiste en un sorteo del que se extraen 7 bolas de 49. 6 numeros ganadores mas uno complementario.
//Finalmente se extrae otro número para el reintegro, del 0 al 9, de otro bombo.

//Incluimos las  librerias.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(int argc, char* argv[])
{
  //Establecemos las variables. Inicializamos todas las bolas con valor 0.
  int e, bola_actual, reintegro, i;
  int bolas[7]={0};
 
  //Iniciamos el generador de números aleatorios,
  srand(time(NULL));
 
  //Imprimimos la cabecera.
  printf("\n Loterias DaxHordes.org!\n La combinación ganadora de hoy es:\n ");
 
  //Sacamos las 7 bolass.
  for (e = 0; e < 7; e++)
  {
    bola_actual = (rand() % 49) + 1;
    //Si la bola extraída coincide con alguna anterior se vuelve a extraer.
    int c = 0;
    while ( c <= 6 ) 
    {
      if (bola_actual == bolas[c])
      {
   c = 0;
   bola_actual = (rand() % 49) + 1;
      }
      else
      {
   c++;
      }
    }
    bolas[e] = bola_actual;
  }
  //Sacamos también el reintegro.
  reintegro = rand() % 10;
 
  //Imprimimos los resultados de las 6 bolass...
  for (i = 0 ; i < 6 ; i++)
  {
    printf("%d, ", bolas[i]);
  }
 
  // el complementario...
  printf("\n Complementario: %d", bolas[6]);
 
  // y el reintegro.
  printf("\n Reintegro : %d\n\n", reintegro);
 
  return 0;
}

Re: [Curso] Introducción a la programación en C (IX)

Publicado: 20 Ene 2011, 19:06
por m0skit0
Dark Pallacus escribió:Entonces las variables que solo usamos para contador en un while o for, no necesitan un nombre descriptivo.

Por cuestiones históricas (derivadas de Fortran) siempre se ha usado i, j, k, l... o c (de counter, contador).

Dark Pallacus escribió:Se pueden declarar justo antes del for o hay que declararlas al principio?

En realidad no importa mucho, puedes hacer como más te guste. Aunque por legibilidad, lo correcto sería declararlas lo más cerca posible de donde las vayas a usar (cuestiones de implementación interna de C). Lo que no se ve con buenos ojos es hacerlo dentro del for (que se puede).

Código: Seleccionar todo

for (int i = 0; i<7; i++)
:cry:

Re: [Curso] Introducción a la programación en C (IX)

Publicado: 20 Ene 2011, 21:58
por Dark Pallacus
OK.

Una cosa mas: Te gusta el adjunto?

Cualquier cosa solo dilo. ;)


Adjunto eliminado: Lo encontraréis dos posts mas abajo.

Re: [Curso] Introducción a la programación en C (IX)

Publicado: 21 Ene 2011, 09:38
por m0skit0
Está muy chulo, pero estaría de lujo si se coloreara la sintaxis del código :mrgreen:

Re: [Curso] Introducción a la programación en C (IX)

Publicado: 21 Ene 2011, 10:31
por Dark Pallacus
Yo también te quiero m0ski! :twisted:

-- Doble Post --

Dark Pallacus escribió:Cualquier cosa solo dilo. ;)

Estoy mas guapo callado.

Re: [Curso] Introducción a la programación en C (IX)

Publicado: 21 Ene 2011, 11:22
por flood
Por ahora solo entrego el primer ejercicio.

Spoiler:
Ejercicio 1

Código: Seleccionar todo

#include <stdio.h>
#include <time.h>

int main(int argc, char* argv[])
{
   int num[5];
   int num2[5];
   int i, j = 0;

   printf("Tu numeros de la loteria son:\n");

   srand(time(NULL));
   for(i = 0; i <= 4; i++)
   {   
      num[i] = (rand() % 10);
      printf("%d", num[i]);
   }

   printf("\nY los numeros ganadores son:\n");

   for(i = 0; i <= 4; i++)
   {   
      num2[i] = (rand() % 10);
      printf("%d", num2[i]);
      
      if(num[i] == num2[i])
      {
         j++;
      }

   }

   if(j == 5)
   {
      printf("\nEres el afortunado ganador\n");
   }
   else
   {
      printf("\nSigue intentado...\n");
   }

   return 0;
}

Re: [Curso] Introducción a la programación en C (IX)

Publicado: 21 Ene 2011, 11:50
por m0skit0
flood escribió: int num[5];
int num2[5];

Esos nombres no son adecuados ;)

Re: [Curso] Introducción a la programación en C (IX)

Publicado: 22 Ene 2011, 10:35
por flood
Ejercicios de la lección terminados. Como creo que no puedo ser muy útil con lo del proyecto del emulador mejor sigo con los ejercicios del curso, porque la verdad no entiendo casi nada :cry: , aun así voy a seguir tratando de entenderle aunque sea poco.

Spoiler:
Ejercicio 1. Nombre corregidos ;)

Código: Seleccionar todo

#include <stdio.h>
#include <time.h>

int main(int argc, char* argv[])
{
   int cifra_voleto[5];
   int cifra_gana[5];
   int i, j = 0;

   printf("Tu numeros de la loteria son:\n");

   srand(time(NULL));
   for(i = 0; i <= 4; i++)
   {   
      cifra_voleto[i] = (rand() % 10);
      printf("%d", cifra_voleto[i]);
   }

   printf("\nY los numeros ganadores son:\n");

   for(i = 0; i <= 4; i++)
   {   
      cifra_gana[i] = (rand() % 10);
      printf("%d", cifra_gana[i]);
      
      if(cifra_voleto[i] == cifra_gana[i])
      {
         j++;
      }

   }

   if(j == 5)
   {
      printf("\nEres el afortunado ganador\n");
   }
   else
   {
      printf("\nSigue intentado...\n");
   }

   return 0;
}


Ejercicio 2.

Código: Seleccionar todo

#include <stdio.h>
#include <time.h>

int main(int argc, char* argv[])
{
   int num1, num2, i=5;
   
   srand(time(NULL));   
   num1 = (rand() % 10) + 1;
   
   do
   {
      printf("\nIntroduce el numero que creas que es el correcto( Se encuentra en entre 1 y 10: ");
      scanf("%d", &num2);
      
      if(num1 == num2)
      {
         printf("\nAcertaste, ese es el numero secreto.\n");
         i = 0;   
      }
      else
      {
         i--;   
         printf("Fallaste, tienes %d intento(s) restantes.\n", i);

         if(i == 0)
         {
            printf("El numero secreto era %d.\n", num1);
         }
      }
   }

   while(i > 0);

   return 0;
}
}


Ejercicio 3.

Código: Seleccionar todo

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(int argc, char* argv[])
{
    int dado_maquina, dado_humano;

   printf("Vamos a jugar a los dados... ¿Te atreves a jugar contra mí?\n");
   printf("Tú tiras primero. Presiona una tecla para tirar el dado.\n");
   getchar();
   
   srand(time(NULL));
   dado_humano = (rand() % 4) + 1;

   printf("Tu tirada ha sido: %d\n", dado_humano);

   printf("Ahora tiro yo... Espero tu permiso para tirar.\n");
   getchar();
   
   srand(time(NULL));
   dado_maquina = (rand() % 2) + dado_humano + 1 ;     

   printf("Mi tirada ha sido: %d\n", dado_maquina);

   if (dado_maquina > dado_humano)
      printf("Eres un mortal sin mucha suerte\n");
   else if (dado_maquina == dado_humano)
      printf("Vaya coincidencia...\n");
   else
      printf("Eres un mortal con bastante suerte... En la próxima versión no será tan fácil.\n");

    return 0;
}