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

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

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 »

@Dante

El primero está regulín. Si por ejemplo el número premiado es 00001, el programa imprimirá


Lo cual está mal

En el segundo, fatal. No se debe usar goto JAMÁS. No hay nunca necesidad de hacerlo, así que arregla eso antes de que te banee :lol:
Imagen

Avatar de Usuario
Dante
Enteradillo
Enteradillo
Mensajes: 42
Registrado: 28 May 2010, 01:51

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

Mensaje por Dante »

Ahora que hice el ejercicio.... me pregunto si los concurso que hacen aquí en daxhordes son de la misma manera ¿¿¿???... sera por eso que ninguna vez e ganado??? mmm... me hace sospechar.
Ejercicio 1
Spoiler:

Código: Seleccionar todo

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

int main()
{
   int num, win;

   srand(time(NULL));
   num = (rand() % 99999) + 1;

   printf("Estos son los digitos de tu numero de loteria: %d\n", num);
   printf("En unos momentos daremos los numeros de la loteria ganadora de Maxhordes de hoy.\n");
   printf("Buena suerte...\n");
   getchar();

   srand(time(NULL));
   win = (rand() % 99999) + 1;

   printf("Y los numeros de hoy son: %d.\n", win);

   if(num != win)
   {
    printf("Mala suerte, no ganas nada.\n");
   }

   else
   {
    printf("Aunque parecia imposible, tu eres el ganador.\n");
   }

return 0;
}
 


:lol: ok, arreglado, todo sin goto no lo volvere a hacer :adora: jajaja.
Ejercicio 2
Spoiler:

Código: Seleccionar todo

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

int main()
{
    int num, sec, con;

   srand(time(NULL));
   sec = (rand() % 10) + 1;

   printf("Adivina el numero secreto: ");
   scanf("%d", &num);

   for(con = 0; con <= 3; con++)
   {
      if(num == sec)
       {
          printf("Tu ganas\n");
          break;
       }

      else
       {
          printf("Fallaste, introduce otro numero: ");
          scanf("%d", &num);
       }

   }
 
    return 0;
}


Creo que cumple con el cometido
Ejercicio 3
Spoiler:

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("Yo tiro primero. Presiona una tecla para dejarme tirar el dado.\n");
   getchar();
   
   srand(time(NULL));

   dado_maquina = (rand() % 6) + 2;
   printf("Mi tirada ha sido: %d\n", dado_maquina);

   printf("Ahora tiras tu...\n");
   getchar();
   
   srand(time(NULL));
   dado_humano = (rand() % dado_maquina) + 1;

   if(dado_humano == dado_maquina)
   {
    dado_humano = dado_humano -1;
   }   
     
   printf("Tu tirada ha sido: %d\n", dado_humano);

    printf("Eres un mortal sin mucha suerte\n");
 
    return 0;
}


PD: Te quería preguntar si es posible tomar capturas de la pantalla en la psp con el HBL, porque hace rato revisando mis imágenes, note que hay algunas de cuando estoy en el menu.

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 »

Dante escribió:me pregunto si los concurso que hacen aquí en daxhordes son de la misma manera ¿¿¿???... sera por eso que ninguna vez e ganado??? mmm... me hace sospechar.

MUJAJAJAJAJA morirás por haber desvelado el secreto :evil: :? :( :cry:

Dante escribió:Ejercicio 1

Sigue estando igual... Si el número premiado es 00025, imprimrá 25 en vez de 00025.

Dante escribió:Ejercicio 2

No uses for y break cuando puedes usar while.

Dante escribió:Ejercicio 3

Dante escribió:dado_maquina = (rand() % 6) + 2;

Que yo sepa un dado no tiene un 7 :tongue:

Saludos y buen trabajo ;)
Imagen

Avatar de Usuario
Dante
Enteradillo
Enteradillo
Mensajes: 42
Registrado: 28 May 2010, 01:51

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

Mensaje por Dante »

Ejercicio 1
Spoiler:

Código: Seleccionar todo

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

int main()
{
   int dig[4], win[4];

   srand(time(NULL));
   dig[0] = (rand() % 10);
   dig[1] = (rand() % 10);
   dig[2] = (rand() % 10);
   dig[3] = (rand() % 10);
   dig[4] = (rand() % 10);


   printf("Estos son los digitos de tu numero de loteria: %d%d%d%d%d.\n", dig[0],dig[1],dig[2],dig[3],dig[4]);
   printf("En unos momentos daremos los numeros de la loteria ganadora de Maxhordes de hoy.\n");
   printf("Buena suerte...\n");
   getchar();

   srand(time(NULL));
   win[0] = (rand() % 10);
   win[1] = (rand() % 10);
   win[2] = (rand() % 10);
   win[3] = (rand() % 10);
   win[4] = (rand() % 10);

   printf("Y los numeros de hoy son: %d%d%d%d%d.\n", win[0],win[1],win[2],win[3],win[4]);

   if(dig == win)
   {
    printf("Aunque parecia imposible, tu eres el ganador.\n");
   }

   else
   {
    printf("Mala suerte, no ganas nada.\n");
   }

return 0;
}


Ahora lo hize con while
Ejercicio 2
Spoiler:

Código: Seleccionar todo

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

int main()
{
    int num, sec, con = 0, limite = 4;

   srand(time(NULL));
   sec = (rand() % 10) + 1;

   printf("Adivina el numero secreto: ");
   scanf("%d", &num);
   
   do
   
    {

      if(num == sec)
      {
    printf("A la primera, tu ganas!!!\n");
    break;
      }

      else if(num != sec)
      {
    printf("Fallaste, intentalo de nuevo\n");
    con++;
    printf("Ingresa otro numero: ");
    scanf("%d", &num);
      }
     
    }

   while(con < limite);
   
    return 0;
}


Dados cargados y funcionales :oki:
Ejercicio 3
Spoiler:

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("Yo tiro primero. Presiona una tecla para dejarme tirar el dado.\n");
   getchar();
   
   
   srand(time(NULL));

   dado_maquina = (rand() % 5) + 2;
   printf("Mi tirada ha sido: %d\n", dado_maquina);

   printf("Ahora tiras tu...\n");
   getchar();
   
   srand(time(NULL));
   dado_humano = (rand() % dado_maquina) + 1;

   if(dado_humano == dado_maquina)
   {
    dado_humano = dado_humano -1;
   }   
     
   printf("Tu tirada ha sido: %d\n", dado_humano);

 
   printf("Eres un mortal sin mucha suerte\n");
 
    return 0;
}


Todo corregido espero tu revisión, voy por la que sigue :canuto:

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 »

Dante escribió:Ejercicio 1

Bien, la idea es ésa, pero te falla la ejecución.

Código: Seleccionar todo

   int dig[4], win[4];

   srand(time(NULL));
   dig[0] = (rand() % 10);
   dig[1] = (rand() % 10);
   dig[2] = (rand() % 10);
   dig[3] = (rand() % 10);
   dig[4] = (rand() % 10);

Mal. Declaras un array de 4 elementos y lo rellenas con 5 :tiro: Ten en cuenta que al declarar un vector, le indicas cuántos elementos tiene, y no cuál es el máximo índice. C no te avisa de estas cosas debido a su flexibilidad. Este tipo de fallos es el que permite los exploits en los juegos, por ejemplo, ya que dig[4] está fuera de la memoria reservada por el SO y es posible que sobrescriba algo importante. En un programa tan pequeño como éste no influye, pero si el programa manejara gran cantidad de datos, podría fallarte algún día en un sitio que no tiene nada que ver y sudarías sangre y sudor para encontrar dónde está el error. Ándate con ojo ;)

Código: Seleccionar todo

if(dig == win)

Dos vectores no se puede comparar así. Tienes que comprar cada elemento por separado. Así siempre va a ser falso puesto que estás preguntando si el vector es el mismo (no si tiene los mismos elementos, sino si es el mismo).

Dante escribió:Ejercicio 2

A lo que me refería con usar while es que no necesitas usar break. Siempre es mejor evitar el uso de break en los bucles (y siempre se puede). Intenta encontrar una forma en la que no tengas que usarlo.

Ánimo, que estás ya casi :oki:
Imagen

Avatar de Usuario
Dante
Enteradillo
Enteradillo
Mensajes: 42
Registrado: 28 May 2010, 01:51

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

Mensaje por Dante »

Espero que ahora este en orden. No estoy muy seguro si corregí por completo lo que me dijiste.
Ejercicio 1
Spoiler:

Código: Seleccionar todo

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

int main()
{
   int dig[5], win[5];

   srand(time(NULL));
   dig[1] = (rand() % 10);
   dig[2] = (rand() % 10);
   dig[3] = (rand() % 10);
   dig[4] = (rand() % 10);
   dig[5] = (rand() % 10);


   printf("Estos son los digitos de tu numero de loteria: %d%d%d%d%d.\n", dig[1],dig[2],dig[3],dig[4],dig[5]);
   printf("En unos momentos daremos los numeros de la loteria ganadora de Maxhordes de hoy.\n");
   printf("Buena suerte...\n");
   getchar();

   srand(time(NULL));
   win[1] = (rand() % 10);
   win[2] = (rand() % 10);
   win[3] = (rand() % 10);
   win[4] = (rand() % 10);
   win[5] = (rand() % 10);

   printf("Y los numeros de hoy son: %d%d%d%d%d.\n", win[1],win[2],win[3],win[4],win[5]);

   if((dig[1] == win[1]) && (dig[2] == win[2]) && (dig[3] == win[3]) && (dig[4] == win[4]) && (dig[5] == win[5]))
   {
   printf("Aunque parecia imposible, tu eres el ganador.\n");
   }

   else
   {
   printf("Mala suerte, no ganas nada.\n");
   }

return 0;
}
 


Con while y sin break
Ejercicio 2
Spoiler:

Código: Seleccionar todo

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

int main()
{
    int num, sec, con = 0, limite = 4;

   srand(time(NULL));
   sec = (rand() % 10) + 1;

   printf("Adivina el numero secreto: ");
   scanf("%d", &num);
   
     
   while(num != sec && con < limite)
   {
         printf("Fallaste, intentalo de nuevo\n");
         con++;
         printf("Ingresa otro numero: ");
         scanf("%d", &num);
        }

   if(num == sec)
   {
         printf("Tu ganas!!!\n");
        }
       
    return 0;
}

Esperando revisión, crees que ya pueda pasar al siguiente o mejor espero un poco mas?

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 »

Dante escribió:Esperando revisión, crees que ya pueda pasar al siguiente o mejor espero un poco mas?

Como quieras y depende de cómo te veas de seguro ;)

Dante escribió:Ejercicio 1

Bueno, has corregido cosas, pero has dejado cosas mal. El tema del tamaño de los vectores sigue estando mal (de hecho sigue estando el mismo problema). A ver si consigo aclararte el tema rápidamente.

Si yo declaro int samba[10] por ejemplo, estoy diciendo que la variable samba es un vector de 10 elementos int. Los vectores se recorren desde el elemento 0 hasta el número de elementos - 1, es decir, en este caso desde samba[0] hasta samba[9], que si los cuentas, son 10 elementos. Recuerda siempre que en C (y en la mayoría de los otros lenguajes) los vectores comienzan en 0, y no en 1. Si ahondas más en C entenderás el porqué ;)

Código: Seleccionar todo

if((dig[1] == win[1]) && (dig[2] == win[2]) && (dig[3] == win[3]) && (dig[4] == win[4]) && (dig[5] == win[5]))
   {
   printf("Aunque parecia imposible, tu eres el ganador.\n");
   }

Personalmente, ¿no te parece un poco feo el if ese? Intenta encontrar una forma más elegante que no dependa tanto del tanaño del vector. Por ejemplo, ¿si el vector tuviera 100 números en vez de 5, cómo lo harías?

Dante escribió:Ejercicio 2

Muchísimo mejor. Así es como se hace :oki:
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 »

Mis ejercicios antes de leer los vuestros ;)

La loteria:
Spoiler:

Código: Seleccionar todo

//En el sorteo de la loteria se extraen 5 bolas, del 0 al 9, de 5 bombos distintos
//Incluir/modificar:

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

int main(int argc, char* argv[])
{
  //Establecemos las variables.
  int cont, bola;
 
  //Iniciamos el generador de números aleatorios,
  srand(time(NULL));
 
  printf("\n Sorteos tongo!\n El numero premiado en el dia de hoy es el: ");
 
  //Sacamos las bolas del sorteo al tiempo que imprimimos el resulado.
  for (cont = 0; cont < 5; cont++)
  {
    printf("%d", rand() % 10);
  }
 
  printf("\n\n");
 
  return 0;
}
Estoy haciendo uno para sacar las bolas de la primitiva, pero ha resultado mas complicado de lo que pensaba :tongue:

Adivinar el número que ha "elegido" el ordenador:
Spoiler:

Código: Seleccionar todo

//Incluimos las librerias requeridas
#include <stdio.h>
#include <unistd.h>

int main(int argc, char *argv[])
{
   //Establecemos las variables.
   int ronda , numero_secreto, respuesta;
   //Inicializamos el generador de números aleatorios.
   srand(time(NULL));
   
   //Nos sacamos un número de la patilla.
   numero_secreto = (rand() % 10) + 1;
   
   //Retamos al usuario.
   printf("\n Ususario, adivina que número he pensado del 1 al 10. (Tienes 3 intentos.)\n");
   
   for (ronda = 0 ; ronda < 3 ; ronda++)
   {
     printf("\n Ronda %d. ", ronda + 1);
     printf(" Usuario, cual crees que es mi número? \n");
     scanf("%d", &respuesta);
     if(respuesta == numero_secreto)
        ronda = ronda + 3;
     else if(respuesta > numero_secreto)
        printf(" Tas pasao!\n");
     else
        printf(" Te has quedado corto.\n");
   }

   if(respuesta == numero_secreto)
   printf("\n Felicidades! Has acertado el numero secreto.\n Eres un listillo!\n\n");
   else
   printf("\n Lo siento no has conseguido descifrar el numero secreto. \n\n.");

   return 0;
}


Y los dados trucados :D
Spoiler:

Código: Seleccionar todo

  //Abrimos un bucle que se repetirá si hay empate.
  while (fin == 1)
  {
    printf("\n Tu tiras primero: ");
    getchar();
 
    //Sacamos el número del usuario.
    dado_usuario = (rand() % 6) +1;
    printf("\n Has sacado un %d.", dado_usuario);
    printf("\n Pulsa cualquier tecla y tirare yo.");
    getchar();
 
    //Sacamos un número aleatorio, pero si es menor que el de usuario volvemos a tirar sin decirle nada ^^.
    while (dado_pc < dado_usuario)
    {
      dado_pc = (rand() % 6) + 1;
    }
  printf("\n He sacado un %d.", dado_pc);
   
    //Declaramos al vencedor.
    if (dado_pc == dado_usuario)
    {
      printf("\n Vaya coincidencia! DESMPATE!!!\n\n");
    }
    else if (dado_pc > dado_usuario)
    {
      printf("\n Has perdido! Pobre mortal.\n\n");
      fin = 0;
    }
    else
    {
      printf("\n Has ganado por puro azar.\n\n");
      fin = 0;
    }
  }
  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 »

Buena Pallacus, veo que se te da bien la programación dominguera. Es sin duda la mejor, y con musiquita guapa de fondo, un placer.

Código: Seleccionar todo

   for (ronda = 0 ; ronda < 3 ; ronda++)
   {
     printf("\n Ronda %d. ", ronda + 1);
     printf(" Usuario, cual crees que es mi número? \n");
     scanf("%d", &respuesta);
     if(respuesta == numero_secreto)
        ronda = ronda + 3;
     else if(respuesta > numero_secreto)
        printf(" Tas pasao!\n");
     else
        printf(" Te has quedado corto.\n");
   }

Hm creo que esto lo comentamos antes, ¿no? Usa un bucle while y pon una variable específica para cuando respuesta == numero_secreto.
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 »

De acuerdo, es que aproveché para practicar un poco con el for. ;)

Por cierto, hay alguna orden para ordenar diferentes variables de mayor a menor?

EDITO:
Ahora cada variable tiene un única función ;)
Spoiler:

Código: Seleccionar todo

//Incluimos las librerias requeridas
#include <stdio.h>
#include <unistd.h>

int main(int argc, char *argv[])
{
   //Establecemos las variables.
   int ronda , numero_secreto, respuesta, encontrado;
   //Inicializamos el generador de números aleatorios.
   srand(time(NULL));
   
   //Nos sacamos un número de la patilla.
   numero_secreto = (rand() % 10) + 1;
   
   //Retamos al usuario.
   printf("\n Ususario, adivina que número he pensado del 1 al 10. (Tienes 3 intentos.)\n");
   
   while ((ronda <= 3) && (encontrado = 1))
   {
     printf("\n Ronda %d. ", ronda + 1);
     printf(" Usuario, cual crees que es mi número? \n ");
     scanf("%d", &respuesta);
     if(respuesta == numero_secreto)
        encontrado = 0;
     else if(respuesta > numero_secreto)
        printf(" Tas pasao!\n");
     else
        printf(" Te has quedado corto.\n");
   }

   if(respuesta == numero_secreto)
   printf("\n Felicidades! Has acertado el numero secreto.\n Eres un listillo!\n\n");
   else
   printf("\n Lo siento no has conseguido descifrar el numero secreto. \n\n.");

   return 0;
}
PS3 - PSP 2000

Responder