elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Reto Universidad [C++].
0 Usuarios y 3 Visitantes están viendo este tema.
Páginas: 1 [2] 3 4 5 6 Ir Abajo Respuesta Imprimir
Autor Tema: Reto Universidad [C++].  (Leído 47,405 veces)
bigfu

Desconectado Desconectado

Mensajes: 49



Ver Perfil WWW
Re: Reto Universidad [C++].
« Respuesta #10 en: 22 Julio 2011, 14:19 pm »

Hola

El srand se utiliza para la generación de números aleatorios, y después rand calcula el número aleatorio. Yo lo utilizo para que el turno al principio sea aleatorio y después lo utilizo para que la máquina reste los objetos aleatoriamente, claro que como dijo antes KaL3o no tiene en cuenta el número de objetos restantes para poder ganar.

Saludos

Ok, muchas gracias por la explicación. Una pregunta referente a esto, que diferencia hay entre usar el srand() y no usarlo?? Es que yo en el ejercicio 6 (en el primer post está el código) utilizo directamente el rand, sin el srand, y genera los números aleatorios...

Claro... mas importante aun que el codigo es la logica :)

Alli es cuando uno se acuerda de los profes cuando le  decian a uno Antes de ponerse a hacer el codigo, dibujen, imaginen y entiendan la logica

Bien como te decia para que la maquina siempre gane, se necesita tener en cuenta el turno del jugador.

A lo que yo me puse a dibujar :p (subiria la imagen de mis matachos, pero el escaner esta ocupado)

mmm... vaya es mas complicado explicarlo que dibujarlo jajajaja

Necesitas qeu el usuario juegue en determinados numeros, como cuando solo hay un objeto.

estos numeros son 1, 5, 9, 13... te das cuenta el incremento es de 4. Cuando tomas todos estos numeros y los divides entre 4 siempre te va a quedar de residuo 1 (tambien conocido como el modulo)

Lo que tienes que hacer es que el usuario solo pueda jugar cuando esten esas cantidades de numeros.

digamos que se elige el numero 12 para jugar, como el 12%4=0, entonces debo hacer que la maquina juegue primero y me convierta esos 12 objetos en 9 (puesto que 9%4=1, y el 9 es menor que 12)

Ahora el jugador puede restar 1,2 o 3. Si el resta 1 quedara en 8, y a nosotros nos conviene que el siguiente numero sea 5, asi que el computaador restara 3. Si el user resta 2 nosotros restaremos 2 para que la cantidad de objetos sea 5, y si el user resta 3 la maquina debera restar 1 para que quede el numero que nos conviene, el 5.
(cuando restamos estamos completando 4)

Biena ahora en el 5 juega el usuario por lo que puede restar 1, 2 o 3, nostros (la maquina) debera completar la resta para restar 4, asi el usuario quedara con la ultima ficha.

En si lo que hay es que forzar al usuario a jugar cuando la cantidad de objetos divida entre 4 tenga por residuo 1. Y despues de ello completar la resta de 4.

Trate de explicar lo mejor que pude. Si luego me acuerdo subo mis matachos que son mas entendibles :p

Salu2 ;)

En el codigo de satu el srand() es para generar numeros aleatorios, ya la linea completa esta asignando a resta un numero entre 1 y 3

Muchas gracias por la explicación, es más o menos lo que había entendido. Ahora lo que me falta es que se me ocurra a mi ese tipo de soluciones xD

Gracias a ambos por vuestra paciencia.


En línea

A reader lives a thousand lives before he dies. The man who never reads lives only one
KaL3o

Desconectado Desconectado

Mensajes: 60



Ver Perfil
Re: Reto Universidad [C++].
« Respuesta #11 en: 22 Julio 2011, 14:32 pm »

el srand es para inicializar la semilla randomica... palabras mas palabras menos es para que cuando utilices el rand repetidas ocasiones te arroje  resultados diferentes.

En el caso de tu 6to ejercicio te funciona porque estas cambiando los limites, el superior y el inferior. Solo por esa razon te da resultados distintos.

Pero si no cambiases los limites entonces el numero aleatorio seria siempre el mismo. Por eso la necesidad de inicializar la semilla randomica.


En línea

Todos los caminos se vuelven a juntar. Pero nunca de la misma forma.
]_HQH_[

Desconectado Desconectado

Mensajes: 39



Ver Perfil WWW
Re: Reto Universidad [C++].
« Respuesta #12 en: 22 Julio 2011, 14:50 pm »

Una forma comun de inicializar la semilla es con el tiempo
Aqui tienes un ejemplo que sacaria numeros aleatorios entre 1 y 10

Código:
#include<stdlib.h>
#include<iostream>
using namespace std;
 
int main()
{
    int num,c;
    srand(time(NULL));
    for(c=1;c<=10;c++)
    {
        num=1+rand()%(11-1);
        cout<<num<<" ";
    }
    cin.get();
}
En línea

Hispabyte : Programación, seguridad, informatica e internet

Puedes seguir a Hispabyte en :

Facebook
Twitter
satu


Desconectado Desconectado

Mensajes: 301

Siempre aprendiendo


Ver Perfil WWW
Re: Reto Universidad [C++].
« Respuesta #13 en: 22 Julio 2011, 14:55 pm »

num=1+rand()%(11-1);     ==>      num=1+rand()%10;   :silbar: :silbar:
En línea

Breakbeat como forma de vida
dakomt

Desconectado Desconectado

Mensajes: 76


Viking Metal


Ver Perfil
Re: Reto Universidad [C++].
« Respuesta #14 en: 22 Julio 2011, 15:45 pm »

Desde luego............. para que poneis códigos? dejarle pensar...... asi no aprende uno
En línea

dakomt

Desconectado Desconectado

Mensajes: 76


Viking Metal


Ver Perfil
Re: Reto Universidad [C++].
« Respuesta #15 en: 22 Julio 2011, 16:35 pm »

Pero bueno como el daño ya esta hecho.... aqui teneis otra version más eficiente xD

Código:

#include<iostream>
using namespace std;

int main()
{
int N,resto,modu;

    do
    {
        cout<<"Numero de objetos: ";
        cin>>N;
    }
    while(N<=0);
    
   modu = N%4;
   if(modu!=1){
        resto = modu==0? 3:modu%2 +1;
        cout<<"Hay "<<N<<" objetos Yo Quito "<<resto<<" objeto/s"<<endl;
N-=resto;

   }
  do{
       do
         {
           cout<<"Hay "<<N<<" objetos, Cuantos quitas? [1] [2] [3]: ";
           cin>>resto;
         }while(resto<1 || resto>3 || resto>N);
 
         N-=resto;
if(!N) break;
modu = N%4;
         resto = modu==0? 3:modu%2 +1;
         cout<<"Hay "<<N<<" objetos Yo Quito "<<resto<<" objeto/s"<<endl;
N-=resto;

    }while(1);
    cout<<"Has perdido... como siempre...."<<endl;
}




« Última modificación: 22 Julio 2011, 16:37 pm por dakomt » En línea

bigfu

Desconectado Desconectado

Mensajes: 49



Ver Perfil WWW
Re: Reto Universidad [C++].
« Respuesta #16 en: 22 Julio 2011, 19:19 pm »

Pero bueno como el daño ya esta hecho.... aqui teneis otra version más eficiente xD

Código:

#include<iostream>
using namespace std;

int main()
{
int N,resto,modu;

    do
    {
        cout<<"Numero de objetos: ";
        cin>>N;
    }
    while(N<=0);
    
   modu = N%4;
   if(modu!=1){
        resto = modu==0? 3:modu%2 +1;
        cout<<"Hay "<<N<<" objetos Yo Quito "<<resto<<" objeto/s"<<endl;
N-=resto;

   }
  do{
       do
         {
           cout<<"Hay "<<N<<" objetos, Cuantos quitas? [1] [2] [3]: ";
           cin>>resto;
         }while(resto<1 || resto>3 || resto>N);
 
         N-=resto;
if(!N) break;
modu = N%4;
         resto = modu==0? 3:modu%2 +1;
         cout<<"Hay "<<N<<" objetos Yo Quito "<<resto<<" objeto/s"<<endl;
N-=resto;

    }while(1);
    cout<<"Has perdido... como siempre...."<<endl;
}





Muchas gracias por tu aporte. Parece que no, pero estoy aprendiendo muchas cosas que no sabía gracias a los códigos de los compañeros.
Por cierto, podrías indicarme qué es lo que hace esta sentencia??
resto = modu==0? 3:modu%2 +1;

Puede ser que sea una especie de if o alguna estructura de selección similar donde se evalúe el valor de la expresión lógica modu==0 y en caso de ser true le asigno 3 a resto y en caso contrario modu%2+1?? Gracias


Voy a intentar hacer mi propio código del ejercicio, a ver si soy capaz de implementarlo con lo aprendido. Más tarde actualizaré el post con el contenido del tema 2, por si hay alguien que esté mirando los ejercicios... xD

Muchas gracias a todos por la ayuda.

En línea

A reader lives a thousand lives before he dies. The man who never reads lives only one
dakomt

Desconectado Desconectado

Mensajes: 76


Viking Metal


Ver Perfil
Re: Reto Universidad [C++].
« Respuesta #17 en: 22 Julio 2011, 19:28 pm »

Citar
Muchas gracias por tu aporte

De nada hombre.

Citar
Por cierto, podrías indicarme qué es lo que hace esta sentencia??
resto = modu==0? 3:modu%2 +1;

Puede ser que sea una especie de if o alguna estructura de selección similar donde se evalúe el valor de la expresión lógica modu==0 y en caso de ser true le asigno 3 a resto y en caso contrario modu%2+1?? Gracias

Correcto, es una forma abreviada del if. Tal vez haga el código más ilegible pero manías que tiene uno  :-\

Ánimo y suerte con los demás ejercicios.
En línea

]_HQH_[

Desconectado Desconectado

Mensajes: 39



Ver Perfil WWW
Re: Reto Universidad [C++].
« Respuesta #18 en: 22 Julio 2011, 23:31 pm »

satu, en el ejemplo anterior el 11 -1  lo he puesto para que se entendiera de donde salia.

Por supuesto, el pre-procesador ese calculo lo optimiza :P
En línea

Hispabyte : Programación, seguridad, informatica e internet

Puedes seguir a Hispabyte en :

Facebook
Twitter
Danyel_Casvill

Desconectado Desconectado

Mensajes: 113


adada


Ver Perfil
Re: Reto Universidad [C++].
« Respuesta #19 en: 23 Julio 2011, 05:06 am »

Hola, emm, no entiendo muy bien, que debe hacer el programa 7?

Esto hice xD

Código
  1. #include <stdlib.h>
  2. #include <iostream>
  3. using namespace std;
  4. int main()
  5. {
  6.  int obj=0,c,o,m=0,objm;
  7.  cout<<"Introduzca el numero de objetos:";cin>>obj;
  8.  c=1+rand()%(11-5);
  9.   if(c<=5)
  10.   {
  11.    objm=obj;
  12.    cout<<"Empieza el usuario."<<endl;
  13.    do
  14.    {
  15.     cout<<"Hay "<<obj<< " objetos."<<endl;
  16.     cin.get();
  17.     cout<<"Cuantos objetos desea retirar?:";cin>>o;
  18.     obj=obj-o;
  19.     m=o-1;
  20.     objm=objm-m;
  21.     cout<<endl<<"La maquina retira "<<m<<" objetos"<<endl;
  22.    }
  23.     while(obj>0);
  24.  
  25.    if(obj<=0)
  26.    {
  27.     cout<<"te Quedan "<<obj<<" objetos."<<endl;
  28.     cout<<"La maquina tiene "<<objm<<" objetos.";
  29.     cin.get();
  30.     cout<<endl<<"Has perdido";
  31.    }
  32.   }
  33.   else if(c>5)
  34.   {
  35.    objm=obj+1;
  36.    cout<<"Empieza la maquina."<<endl;
  37.    do
  38.    {
  39.     cout<<"La maquina resta 1 objeto"<<endl;
  40.     cout<<"Cuantos objetos restar?:";cin>>o;
  41.     objm=objm-1;
  42.     obj=obj-o;
  43.     cout<<"La maquina tiene "<<objm<<" Objetos."<<endl;
  44.     cout<<"Tu tienes "<<obj<<" Objetos."<<endl;
  45.    }
  46.    while(obj>0);
  47.  
  48.    if(obj<=0)
  49.    {
  50.     cout<<"te Quedan "<<obj<<" objetos."<<endl;
  51.     cout<<"La maquina tiene "<<objm<<" objetos.";
  52.     cin.get();
  53.     cout<<endl<<"Has perdido";
  54.    }
  55.   }
  56.  cin.get();cin.get();
  57.  return 0;
  58. }
  59.  
Bueno no se, ya se que no era lo que se necesitaba pero exactamente que debe hacer el programa?

Gracias, saludos ^^
En línea

adada
Páginas: 1 [2] 3 4 5 6 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Desafios de la universidad
Desafíos - Wargames
carlos.soriano 2 8,559 Último mensaje 9 Diciembre 2014, 00:34 am
por Samg
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines