Reto Universidad [C++].

Iniciado por bigfu, 20 Julio 2011, 13:04 PM

0 Miembros y 1 Visitante están viendo este tema.

bigfu

Cita de: satu en 22 Julio 2011, 14:06 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...

Cita de: KaL3o en 22 Julio 2011, 14:06 PM
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.
A reader lives a thousand lives before he dies. The man who never reads lives only one

KaL3o

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.
Todos los caminos se vuelven a juntar. Pero nunca de la misma forma.

]_HQH_[

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


#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();
}
Hispabyte : Programación, seguridad, informatica e internet

Puedes seguir a Hispabyte en :

Facebook
Twitter

satu

num=1+rand()%(11-1);     ==>      num=1+rand()%10;   :silbar: :silbar:
Breakbeat como forma de vida

dakomt

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

dakomt

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



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





bigfu

Cita de: dakomt en 22 Julio 2011, 16:35 PM
Pero bueno como el daño ya esta hecho.... aqui teneis otra version más eficiente xD



#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.

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

dakomt

CitarMuchas gracias por tu aporte

De nada hombre.

CitarPor 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.

]_HQH_[

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
Hispabyte : Programación, seguridad, informatica e internet

Puedes seguir a Hispabyte en :

Facebook
Twitter

Danyel_Casvill

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

Esto hice xD

Código (cpp) [Seleccionar]
#include <stdlib.h>
#include <iostream>
using namespace std;
int main()
{
  int obj=0,c,o,m=0,objm;
  cout<<"Introduzca el numero de objetos:";cin>>obj;
  c=1+rand()%(11-5);
   if(c<=5)
   {
    objm=obj;
    cout<<"Empieza el usuario."<<endl;
    do
    {
     cout<<"Hay "<<obj<< " objetos."<<endl;
     cin.get();
     cout<<"Cuantos objetos desea retirar?:";cin>>o;
     obj=obj-o;
     m=o-1;
     objm=objm-m;
     cout<<endl<<"La maquina retira "<<m<<" objetos"<<endl;
    }
     while(obj>0);

    if(obj<=0)
    {
     cout<<"te Quedan "<<obj<<" objetos."<<endl;
     cout<<"La maquina tiene "<<objm<<" objetos.";
     cin.get();
     cout<<endl<<"Has perdido";
    }
   }
   else if(c>5)
   {
    objm=obj+1;
    cout<<"Empieza la maquina."<<endl;
    do
    {
     cout<<"La maquina resta 1 objeto"<<endl;
     cout<<"Cuantos objetos restar?:";cin>>o;
     objm=objm-1;
     obj=obj-o;
     cout<<"La maquina tiene "<<objm<<" Objetos."<<endl;
     cout<<"Tu tienes "<<obj<<" Objetos."<<endl;
    }
    while(obj>0);

    if(obj<=0)
    {
     cout<<"te Quedan "<<obj<<" objetos."<<endl;
     cout<<"La maquina tiene "<<objm<<" objetos.";
     cin.get();
     cout<<endl<<"Has perdido";
    }
   }
  cin.get();cin.get();
  return 0;
}

Bueno no se, ya se que no era lo que se necesitaba pero exactamente que debe hacer el programa?

Gracias, saludos ^^
adada