Autor
|
Tema: ejercicio de juego primitiva c++ (Leído 4,016 veces)
|
eterno21
Desconectado
Mensajes: 10
|
Hola, tengo que hacer el siguiente ejercicio:"Escribir una función que genere 6 números aleatorios entre 1 y 49, de la misma forma que en la primitiva. Obviamente, los números no pueden ser repetidos."
La manera que he pensado es rellenando un vector con estos 6 numeros y lo he hecho de la siguiente manera:
#include<stdio.h> #include<stdlib.h> #include<time.h>
void Primitiva(){ int V[6], i, rep, j; V[0]=1+rand()%(50-1); for(i=1;i<=5;i++){ do{ V=1+rand()%(50-1); rep=0; for(j=i-1;j>=0;j--){ if (V==V[j]) rep=1; } }while(rep=1) } }
El caso es que me señala en rojo la linea que esta justo debajo del while y la verdad es que no entiendo que error puede haber.¿Alguien ve este posible error?, muchas gracias y un saludo.
|
|
|
En línea
|
|
|
|
Alien-Z
Desconectado
Mensajes: 177
C++ Programmer
|
Se puede hacer más sencillo y eficiente. 1- Inicializa las posiciones del array a -1. 2- Crea un bucle que vaya generando números aleatorios y tenga como condición de continuación "while(V[5] == -1)", es decir, mientras no hayamos conseguido el último número aleatorio. 3- Dentro debe haber otro bucle anidado que, después de generar un número aleatorio, recorra el array comprobando que no lo tengas ya, si no lo tienes lo guarda en la siguiente posición y comienza una nueva iteración del bucle principal. Tu código tiene 3 errores sintácticos: V=1+rand()%(50-1);
Debes señalar a qué posición del array V quieres acceder. if (V==V[j]) rep=1;
Aqui lo mismo. }while(rep=1)
Los bucles do-while llevan un punto y coma ";" al final. Un saludo.
|
|
« Última modificación: 7 Agosto 2013, 15:27 pm por Alien-Z »
|
En línea
|
|
|
|
eferion
Desconectado
Mensajes: 1.248
|
La manera que he pensado es rellenando un vector con estos 6 numeros y lo he hecho de la siguiente manera:
Entre los controles para escribir los mensajes en el foro hay un combobox que dice "GeSHi"... si lo despliegas y eliges 'c' o 'c++' ( en función de tu código ) y metes después tu código dentro de la etiqueta que te va a generar conseguirás que tu código sea más legible y fácil de leer. El caso es que me señala en rojo la linea que esta justo debajo del while y la verdad es que no entiendo que error puede haber.¿Alguien ve este posible error?, muchas gracias y un saludo.
Te falta un punto y coma. Cuando es un bucle while normal no necesita punto y coma... cuando es un bucle do-while sí. Además, en la línea
Tienes otro error... V tendría que ser V[ i ] * Imagino que es porque no has metido el código entre las etiquetas [ code ]Hola, tengo que hacer el siguiente ejercicio:"Escribir una función que genere 6 números aleatorios entre 1 y 49, de la misma forma que en la primitiva.
El caso es que si lo estás haciendo en c++ puedes aprovechar también las bondades de este lenguaje para que haga por ti parte del trabajo sucio. Me explico. Hay una clase en c++ que es 'set'. Es una lista o vector que tiene la peculiaridad de que no puede tener elementos repetidos... si adaptas un poco tu código te puedes olvidar de chequear si el número generado aleatoriamente se encuentra ya en la lista o no. #include<stdio.h> #include<stdlib.h> #include<time.h> #include <set> void Primitiva() { std::set< int > V; while ( V.size( ) < 6 ) { V.insert( 1 + rand( ) % 49 ); } // Al llegar a este punto tendrás en V seis numeros aleatorios diferentes sin repeticiones. }
Obviamente si estás programando en c esta no es una solución viable... pero en el asunto del mensaje has puesto 'c++' Un saludo.
|
|
« Última modificación: 7 Agosto 2013, 15:29 pm por eferion »
|
En línea
|
|
|
|
|
do-while
Desconectado
Mensajes: 1.276
¿Habra que sacarla de paseo?
|
¡Buenas! (rep=1) siempre es cierto, ya que estás asignando a rep el valor 1, y luego utilizas el valor de rep (1) para evaluar la condición. Para compararlo utiliza el doble igual ==: while(rep == 1)
Y por supuesto, como ya te han dicho, en un do-while, después del paréntesis que cierra la condición del while, hay que poner un punto y coma. ¡Saludos!
|
|
|
En línea
|
- Doctor, confundo los números y los colores. - Vaya marrón. - ¿Marrón? ¡Por el culo te la hinco!
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
tengo que hacer el siguiente ejercicio:"Escribir una función que genere 6 números aleatorios entre 1 y 49, de la misma forma que en la primitiva. Obviamente, los números no pueden ser repetidos." ¿Estas aprendiendo C o C++? Una forma fácil de generar números aleatorios no repetidos cuando el rango de estos es pequeño es simplemente seleccionar de forma aleatoria los elementos del set. En C++ un ejemplo ya lo tienes cortesía de eferion. En C se puede implementar así: #define SET_ELEM 49 void Primitiva(void) { int set[SET_ELEM]; int num_elem = SET_ELEM; int num[6]; int i; int j; /* Valor inicial de los elementos del set */ for (i = 0; i < SET_ELEM; i++) set[i] = i + 1; /* Seleccion aleatoria de seis elementos del set */ for (i = 0; i < 6; i++){ num[i] = set[j]; set[j] = set[--num_elem]; } /* Algun proceso (por ejemplo imprimirlos) */ for (i = 0; i < 6; i++) }
Un saludo
|
|
|
En línea
|
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language
|
|
|
eterno21
Desconectado
Mensajes: 10
|
Hola, muchas gracias a todos, leyendo vuestros mensaje lo he resuelto de la siguiente manera: #include<stdio.h> #include<stdlib.h> #include<time.h> void Primitiva(){ int V[6], i, rep, j, n; for(i=0;i<=5;i++) V[i]=-1; i=0; do{ rep=0; n=1+rand()%(50-1); for(j=0;j<=5;j++){ if (V[j]==n) rep=1; } if (rep==0){ V[i]=n; i=i+1; } }while(V[5]==-1); printf("%d,%d,%d,%d,%d,%d",V[0],V[1],V[2],V[3],V[4],V[5]); } int main(void){ Primitiva(); system ("pause"); }
No se como se me pudo olvidar poner los [] en algunos de los vectores(un despiste increible), pero bueno, he puesto con el printf la comprobacion y da bien todo con numeros distintos, lo que pasa es que son muy parejos, no se si tendria que usar "srand (time(NULL))" para que no salieran tan parejos. La verdad es que lo del set es muy bueno ya que estoy estudiando c++, pero no se si me dejaran usarlo, aunque yo creo que si y es una muy buena solucion, muchas gracias a todos de nuevo y un saludo.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
[EJERCICIO] El juego de "Que ves?"
Ejercicios
|
DarkItachi
|
8
|
10,694
|
16 Mayo 2009, 23:25 pm
por DarkItachi
|
|
|
[Ejercicio] Aca tienen un ejercicio para practicar
« 1 2 3 »
Programación Visual Basic
|
Dreamaker
|
20
|
17,197
|
5 Septiembre 2010, 02:57 am
por TGa.
|
|
|
[Juego] Juego muy adictivo que arme, les juro que es divertido.
Programación Visual Basic
|
79137913
|
5
|
4,593
|
1 Octubre 2010, 15:30 pm
por 7omer
|
|
|
ejercicio conclase pag 70 ejercicio 1
Programación C/C++
|
flony
|
2
|
4,765
|
17 Octubre 2010, 12:16 pm
por Akai
|
|
|
[duda] Sobre un juego online de juego flash
Juegos y Consolas
|
Senior++
|
6
|
6,717
|
28 Junio 2011, 08:49 am
por тαптяα
|
|