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

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

arisma
Habitual
Habitual
Mensajes: 497
Registrado: 18 Sep 2009, 08:41

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

Mensaje por arisma »

Tus deseos son ordenes...

Spoiler:

Código: Seleccionar todo

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

int main(int argc, char* argv[])
{
   int nSec, nLeido, i;


   srand(time(NULL));
   nSec = rand() % 10;

   i = 1; //Ahora lo voy a usar como contador de intentos

   /* Ponemos el primer scanf fuera ya que existe la posibilidad de que inicialicemos nSec(por defecto = 0)
      con el valor del número a adivinar, en dicho caso no preguntaria al usuario ninguna vez el número a adivinar */

   /*printf("Introduce el número que crees que es: ");
   scanf("%i", &nLeido);

   while ( nSec != nLeido && i < 5) {
      i++; // i = i + 1;
      printf("Número de intento %i, introduce otro número: ", i);
      scanf("%i", &nLeido);
   }*/
   
   i = 0; //También se puede eliminar esta linea y dejar lo demás como está si dejamos que pregunte una vez fuera del bucle

   do
   {
     i++;
     printf("Número de intento %i, introduce número: ", i);
      scanf("%i", &nLeido);
   }while(nSec != nLeido && i <5);
   
   if (nSec == nLeido) printf("MUY BIEN!, Lo has adivinado...\n");
   else
      printf("La proxima vez será, ejecuta el programa de nuevo...\n");

   return 0;
}


Me encanta saber que te ha gustado la solución para el tercero. :D

Respecto al otro error, esto sigo sin verlo.

Empiezo a pensar que no es un problema de compilación ya que es correcto.

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 »

arisma escribió:Tus deseos son ordenes...

:oki:

arisma escribió:Empiezo a pensar que no es un problema de compilación ya que es correcto.

No, no es de compilación...
Imagen

arisma
Habitual
Habitual
Mensajes: 497
Registrado: 18 Sep 2009, 08:41

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

Mensaje por arisma »

Pues entonces no lo pillo. Te explicaré con la lógica que yo lo he hecho.

Hay que dar un décimo ganador, que consta de 5 dígitos.

Genero un número de 0..9, pero al estar en un for que se ejecuta 5 veces genero 5. Y por eso me da un décimo de 5 dígitos.

Claro que creo que ahora que lo leo de nuevo, lo que debes pedir es una primitiva, que creo recordar era de 0..49.

Ok, me pongo a ello.

Spoiler:

Código: Seleccionar todo

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

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

   srand(time(NULL));

   printf("Números premiados: ");
   for (i = 0; i < 5; i++)
      printf("%d ", (rand() % 49) + 1);

   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 »

He entendido perfectamente la lógica de tu programa, y está perfecta. Además, estaba bien, son 5 números en el rango [0,9] (es decir, ambos incluídos). Pero

arisma escribió:Genero un número de 0..9

arisma escribió:printf("%d", (rand() % 9);


¿Lo ves ya?
Imagen

arisma
Habitual
Habitual
Mensajes: 497
Registrado: 18 Sep 2009, 08:41

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

Mensaje por arisma »

No, jefe.

Una vez que corrijo el error del paréntesis, no veo el error.

Código: Seleccionar todo

http://www.cplusplus.com/reference/clibrary/cstdlib/rand/


Genero un número de 0..9 por medio del modulo %9, es decir ->(rand() % 9) y queda->

Código: Seleccionar todo

printf("%d", (rand() % 9));


Da la impresión cómo si me dijeras que no se generan en ese rango.
Ilustrame, xD

Avatar de Usuario
finfantasy
Habitual
Habitual
Mensajes: 153
Registrado: 15 Oct 2009, 19:00

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

Mensaje por finfantasy »

No quiero dar muchas pistas, pero cuenta cuántos posibles restos obtienes con rand ()%9 y luego cuenta cuántos quieres tú.

arisma
Habitual
Habitual
Mensajes: 497
Registrado: 18 Sep 2009, 08:41

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

Mensaje por arisma »

finfantasy escribió:No quiero dar muchas pistas, pero cuenta cuántos posibles restos obtienes con rand ()%9 y luego cuenta cuántos quieres tú.


Gracias.

Me imagino que te refieres a que quiero de 0-9(10 números) pero el resto que pongo es de 9.

Sin embargo, se supone que con dicha instrucción ya genera por sí del 0..9. No hay que poner %10, porque no queremos que sea 10, ni añadir +1 porque queremos que el 0 sea valido.

Un saludo.

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 »

Concentración, arisma, concentración :lol:

arisma escribió:Me imagino que te refieres a que quiero de 0-9(10 números) pero el resto que pongo es de 9.

Es que poniendo módulo 9, no obtienes de 0 a 9, sino de 0 a 8. Es decir, si yo divido entre 9, el resto de la divisón jamás puede ser 9 (porque si lo es, habria que volver a dividirlo entre 9, lo que daría un resto de 0). Como máximo será 8. O también lo puedes ver de la siguiente manera: con módulo 9 vas a obtener 9 restos diferentes [0-8], mientras que con 10 obtienes 10 restos diferentes [0-9]. Esa instrucción la puedes probar todas las veces que quieras, jamás imprimirá un 9.

Un despiste lo tiene cualquiera :mrgreen:

Para un pequeño repaso sobre aritmética modular: http://es.wikipedia.org/wiki/Aritm%C3%A9tica_modular
Imagen

arisma
Habitual
Habitual
Mensajes: 497
Registrado: 18 Sep 2009, 08:41

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

Mensaje por arisma »

En este caso bastante gordo. Voy a corregir los ejercicios.

Un saludo y gracias a ambos.

En mi descargo diré que tengo motivos para estar distraido.

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 »

Bah, yo estuve como una semana entera buscando por qué no se ejecutaba una función, y resultó que estaba así:

Código: Seleccionar todo

int relocate_entry(tRelEntry reloc_entry);
{
...
}


:juasjuas: :juasjuas:
Imagen

Responder