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

Moderadores: Kravenbcn, largeroliker, fidelcastro, cerealkiller, pspCaracas, m0skit0, LnD, ka69, zacky06

Avatar de Usuario
Dark Pallacus
ViP Hordes
ViP Hordes
Mensajes: 1509
Registrado: 03 Sep 2009, 00:35
PSN ID: Pallacus
Ubicación: Barcelona
Contactar:

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

Mensaje 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;
}
PS3 - PSP 2000

Avatar de Usuario
m0skit0
Administrador
Administrador
Mensajes: 5585
Registrado: 03 Sep 2009, 09:35
Ubicación: 0xdeadbeef

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

Mensaje 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:
Imagen

Avatar de Usuario
Dark Pallacus
ViP Hordes
ViP Hordes
Mensajes: 1509
Registrado: 03 Sep 2009, 00:35
PSN ID: Pallacus
Ubicación: Barcelona
Contactar:

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

Mensaje 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;
}
PS3 - PSP 2000

Avatar de Usuario
m0skit0
Administrador
Administrador
Mensajes: 5585
Registrado: 03 Sep 2009, 09:35
Ubicación: 0xdeadbeef

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

Mensaje 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:
Imagen

Avatar de Usuario
Dark Pallacus
ViP Hordes
ViP Hordes
Mensajes: 1509
Registrado: 03 Sep 2009, 00:35
PSN ID: Pallacus
Ubicación: Barcelona
Contactar:

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

Mensaje por Dark Pallacus »

OK.

Una cosa mas: Te gusta el adjunto?

Cualquier cosa solo dilo. ;)


Adjunto eliminado: Lo encontraréis dos posts mas abajo.
Última edición por Dark Pallacus el 21 Ene 2011, 11:12, editado 1 vez en total.
PS3 - PSP 2000

Avatar de Usuario
m0skit0
Administrador
Administrador
Mensajes: 5585
Registrado: 03 Sep 2009, 09:35
Ubicación: 0xdeadbeef

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

Mensaje por m0skit0 »

Está muy chulo, pero estaría de lujo si se coloreara la sintaxis del código :mrgreen:
Imagen

Avatar de Usuario
Dark Pallacus
ViP Hordes
ViP Hordes
Mensajes: 1509
Registrado: 03 Sep 2009, 00:35
PSN ID: Pallacus
Ubicación: Barcelona
Contactar:

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

Mensaje por Dark Pallacus »

Yo también te quiero m0ski! :twisted:

-- Doble Post --

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

Estoy mas guapo callado.
No tiene los permisos requeridos para ver los archivos adjuntos a este mensaje.
PS3 - PSP 2000

Avatar de Usuario
flood
Enteradillo
Enteradillo
Mensajes: 53
Registrado: 10 Ene 2011, 01:41

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

Mensaje 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;
}

Avatar de Usuario
m0skit0
Administrador
Administrador
Mensajes: 5585
Registrado: 03 Sep 2009, 09:35
Ubicación: 0xdeadbeef

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

Mensaje por m0skit0 »

flood escribió: int num[5];
int num2[5];

Esos nombres no son adecuados ;)
Imagen

Avatar de Usuario
flood
Enteradillo
Enteradillo
Mensajes: 53
Registrado: 10 Ene 2011, 01:41

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

Mensaje 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;
}

Responder