Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Juego de la suerte

Estas en el tema de Juego de la suerte en el foro de C/C++ en Foros del Web. Hola a todos los expertos del lenguaje C: Pues yo soy estudiante en Alemania y claro estoy cursando Informatica 1 en aleman! por supuesto que ...
  #1 (permalink)  
Antiguo 28/11/2015, 05:48
 
Fecha de Ingreso: noviembre-2015
Mensajes: 4
Antigüedad: 8 años, 4 meses
Puntos: 0
Pregunta Juego de la suerte

Hola a todos los expertos del lenguaje C:

Pues yo soy estudiante en Alemania y claro estoy cursando Informatica 1 en aleman! por supuesto que el lenguaje y comandos son en inglés. Pero bueno al grano, tengo que realizar un programa que debe hacer lo siguiente:

Hay 3 jugadores que deben escoger 3 numeros del 1 al 9 sin repetirse ningún número, si apararece un repetido el programa debe decirlo y volver a iniciar. Luego otra persona debe dar el número ganador y el programa debe decir quien de los anteriores 3 jugadores tiene el número ganador.

pasos en aleman ( pongo su traducción a la par):

a) Anlage eines passenden dynamischen Speicherbereichs vom Typ char
"usar el famoso MALLOC para guardar un espacio del tipo char
b) Benutzereingabe und Speicherung der gewählten Zahlen
"entrada y almacenamiento de los números escogidos por c/jugador
c) Benutzereingabe der „Sieger-Zahl“
"entrada del número ganador"
d) Suche nach dem Gewinner
"Buscar al jugador ganador"
e) Bildschirmausgabe des Spielers, der gewonnen hat
"Mostrar el jugador ganador".

he estado matandome y realmente no veo la luz.
Solo se que tengo que usar pointer y cadena de caracteres para los 3 números de cada jugador pero luego lo de revisar si hay repetidos no se como hacerlo.

AYUDA URGENTE.

saludos

Última edición por joguille9; 28/11/2015 a las 05:50 Razón: error
  #2 (permalink)  
Antiguo 28/11/2015, 06:59
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: Juego de la suerte

Machen Sie Ihre Hausaufgaben !
__________________
If to err is human, then programmers are the most human of us
  #3 (permalink)  
Antiguo 28/11/2015, 08:24
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 6 meses
Puntos: 204
Respuesta: Juego de la suerte

No se le hacen los deberes a nadie... se presta ayuda y soporte pero claro, para eso hace falta que demuestres que no te estamos haciendo el trabajo... que tu te has esforzado y que te has quedado atascado por una razón u otra.

Dicho con pocas palabras... pon ejemplos con el código donde te atascas y recibirás ayuda.

Un saludo
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.
  #4 (permalink)  
Antiguo 28/11/2015, 15:48
 
Fecha de Ingreso: noviembre-2015
Mensajes: 4
Antigüedad: 8 años, 4 meses
Puntos: 0
Respuesta: Juego de la suerte

ok ok! pues he avanzado un poco, creo que esta muy largo mi código seguramente se puede hacer mas corto pero bueno no me puedo algo mejor.

#include <stdio.h>
#include <stdlib.h>
#define N 10

int main()
{
printf(" Gluecksspiel\n");
int n =3;
char *spi1, *spi2, *spi3;
char i;
char j;
char g;

spi1 = (char*) malloc(N*sizeof(char));
spi2 = (char*) malloc(N*sizeof(char));
spi3 = (char*) malloc(N*sizeof(char));

if(spi1 != NULL)
{
printf("Spieler 1 gibt seine Zahlen ein :\n" );
for (i = 0; i < n; i++)
scanf("%s", &spi1[i]);
//gets(spi1);
}
else {
printf("\nNicht genuegend Speicherplatz fuer spi1.\n");
}
if(spi2 != NULL)
{
printf("Spieler 2 gibt seine Zahlen ein :\n" );
for (i = 0; i < n; i++)
scanf("%s", &spi2[i]);
//gets(spi2);
}
else {
printf("\nNicht genuegend Speicherplatz fuer spi2.\n");
}

if(spi3 != NULL)
{
printf("Spieler 3 gibt seine Zahlen ein :\n" );
for (i = 0; i < n; i++)
scanf("%s", &spi3[i]);
//gets(spi3);
}
else {
printf("\nNicht genuegend Speicherplatz fuer spi3.\n");
}

printf("Geben Sie bitte die Gewinnerzahl ein: ");
scanf("%s", &g);

do{
for(i = 0; i < n; i++)
if(spi1[i] == spi1[i+1])
printf("Eine Zahl von Spieler 1 ist zwei gewaelht\n");
for(i = 0; i < n; i++)
if(spi2[i] == spi2[i+1])
printf("Eine Zahl von Spieler 2 ist zwei gewaelht\n");
for(i = 0; i < n; i++)
if(spi3[i] == spi3[i+1])
printf("Eine Zahl von Spieler 3 ist zwei gewaelht\n");
for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
if(spi1[i] == spi2[j])
printf("Eine Zahl war von Spieler 1 und Spieler 2 gewaelht\n");
for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
if(spi2[i] == spi3[j])
printf("Eine Zahl war von Spieler 2 und Spieler 3 gewaelht\n");
for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
if(spi1[i] == spi3[j])
printf("Eine Zahl war von Spieler 1 und Spieler 3 gewaelht\n");

}while(0);


do{
for(i = 0; i < n; i++)
if(spi1[i] == g)
printf("Der Gewinner ist der Spieler 1");
for(i = 0; i < n; i++)
if(spi2[i] == g)
printf("Der Gewinner ist der Spieler 2");
for(i = 0; i < n; i++)
if(spi3[i] == g)
printf("Der Gewinner ist der Spieler 3");
}while(0);
//printf("Spi3[0]: %c", spi3[0]);


return 0;
}

Soy sincero he hecho todo a prueba y error. hasta ahora me compara bien los caracteres de cada jugador y me dice cuando hay repetidos. Pero no se como parar el programa, es decir; que no me de al ganador! Igual cuando ingreso números sin repetir y quiero que gane el 3 jugador no me imprime!

Gracias y creo que me esforzado hahaha.
  #5 (permalink)  
Antiguo 29/11/2015, 05:13
 
Fecha de Ingreso: febrero-2015
Mensajes: 404
Antigüedad: 9 años, 2 meses
Puntos: 3
Respuesta: Juego de la suerte

Si pudieras poner los mensajes en el código en español seria más fácil ayudarte pero desde ya te digo que hay demasiados bucles y para lo que pides no son necesarios tantos. Supongo que con un par de ellos estaría.
  #6 (permalink)  
Antiguo 29/11/2015, 05:24
 
Fecha de Ingreso: noviembre-2015
Mensajes: 4
Antigüedad: 8 años, 4 meses
Puntos: 0
Respuesta: Juego de la suerte

Pues ese el problema que no se como reducir tantos bucles!
  #7 (permalink)  
Antiguo 29/11/2015, 11:05
 
Fecha de Ingreso: febrero-2015
Mensajes: 404
Antigüedad: 9 años, 2 meses
Puntos: 3
Respuesta: Juego de la suerte

Pon los mensajes del código en español y pon el código aquí.
  #8 (permalink)  
Antiguo 29/11/2015, 12:04
 
Fecha de Ingreso: noviembre-2015
Mensajes: 4
Antigüedad: 8 años, 4 meses
Puntos: 0
Respuesta: Juego de la suerte

dejo el código con sus traducciones importantes. Gracias y por favor no se asusten por tantas líneas. La práctica hace al maestro y yo estoy es este camino.


#include <stdio.h>
#include <stdlib.h>
#define N 10

int main()
{
printf("\t\tGluecksspiel\n"); /*juego de la suerte*/
int n =3;
char *spi1, *spi2, *spi3;
int i;
int j;
char g;

spi1 = (char*) malloc(N*sizeof(char));
spi2 = (char*) malloc(N*sizeof(char));
spi3 = (char*) malloc(N*sizeof(char));

if(spi1 != NULL)
{
printf("\nSpieler 1 gibt 3 Zahlen zwischen 1 und 9 ein :\n" );/*jugador 1 escoge 3 numeros entre l y 9*/
for (i = 0; i < n; i++)
scanf("%s", &spi1[i]);
//gets(spi1);
}
else {
printf("\nNicht genuegend Speicherplatz fuer spi1.\n");/*no hay suficiente espacio*//*este solo es para comprobar el malloc*/
}
if(spi2 != NULL)
{
printf("\nSpieler 2 gibt 3 Zahlen von der 6 Reste Zahlen ein :\n" );/*jugador 2 escoge 3 numeros de los 6 que quedan*/
for (i = 0; i < n; i++)
scanf("%s", &spi2[i]);
//gets(spi2);
}
else {
printf("\nNicht genuegend Speicherplatz fuer spi2.\n");/*no hay suficiente espacio*//*este solo es para comprobar el malloc*/
}

if(spi3 != NULL)
{
printf("\nSpieler 3 gibt die letze 3 Zahlen ein :\n" );/*jugador 3 escoge los ultimos 3 numeros */
for (i = 0; i < n; i++)
scanf("%s", &spi3[i]);
//gets(spi3);
}
else {
printf("\nNicht genuegend Speicherplatz fuer spi3.\n");/*no hay suficiente espacio*//*este solo es para comprobar el malloc*/
}
printf("\nGeben Sie bitte die Gewinnerzahl ein : ");/*por favor ingrese el numero ganador*/
scanf("%s", &g);

do{/*aqui hay que buscar el jugador que tiene el numero ganador, ya lo corrri y lo encuentra! con el detalle que me imprime tres veces el mensaje*/
for(i = 0; i < n; i++)
if(spi1[i] == g)
printf("Der Gewinner ist der Spieler 1");/*el ganador es el jugador 1*/
else if(spi2[i] == g)
printf("Der Gewinner ist der Spieler 2");/*el ganador es el jugador 2*/
else
printf("Der Gewinner ist der Spieler 3");/*el ganador es el jugador 3*/
}while(0);

//do{/*aqui esta el código para encontrar los repetidos, funciona bien ya lo probe aun asi miralo seguro se puede depurar */
/*y claro si no hay repetidos que pida el ingreso del numero ganador y a buscar al jugador que tiene el número. */
/*pero no encuentro la forma para que el programa pare cuando haya repetidos!!*/
/*LO HE INTENTADO TODO y AUN CUANDO HAY REPETIDOS EL PROGRAMA CONTINUA; PIDE AL GANADOR Y LO BUSCA :(:( */
/*por el momento he dejado el bucle do while y en las indicaciones he puesto que numeros se deben ingresar pero no es lo que necesito*/
/*como ultima cosa: no se como reducir estos miles de bucles!!! no me da mi materia gris para hacerlo mas optimo el código :D*/
for(i = 0; i < n; i++){
for(j = i + 1; j < n; j++){
if(spi1[j] == spi1[i])
printf("Eine Zahl wurde von dem Spieler 1 zwei Mal gewaehlt\n");
/*un numero fue escogido dos veces por el jugador 1*/
}
}
for(i = 0; i < n; i++){
for(j = i + 1; j < n; j++){
if(spi2[j] == spi2[i])
printf("Eine Zahl wurde von dem Spieler 2 zwei Mal gewaehlt\n");
/*un numero fue escogido dos veces por el jugador 2*/
}
}
for(i = 0; i < n; i++){
for(j = i + 1; j < n; j++){
if(spi3[j] == spi3[i])
printf("Eine Zahl wurde von Spieler 3 zwei Mal gewaehlt\n");
/*un numero fue escogido dos veces por el jugador 2*/
}
}
for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
if(spi1[i] == spi2[j])
printf("Eine gleiche Zahl wurde von dem Spieler 1 und Spieler 2 gewaelht\n");/*un numero fue escogido por el jugador 1 y el jugador 2*/
for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
if(spi2[i] == spi3[j])
printf("Eine gleiche Zahl wurde von dem Spieler 2 und Spieler 3 gewaelht\n");/*un numero fue escogido por el jugador 2y el jugador 3*/

for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
if(spi1[i] == spi3[j])
printf("Eine gleiche Zahl wurde von dem Spieler 1 und Spieler 3 gewaelht\n");/*un numero fue escogido por el jugador 1 y el jugador 3*/

//}while(0);

//printf("Geben Sie bitte die Gewinnerzahl ein: ");/*introducir el numero ganador*/
//scanf("%s", &g);
free(spi1);
free(spi2);
free(spi3);
return 0;
}
  #9 (permalink)  
Antiguo 29/11/2015, 13:20
 
Fecha de Ingreso: febrero-2015
Mensajes: 404
Antigüedad: 9 años, 2 meses
Puntos: 3
Respuesta: Juego de la suerte

Ahora mismo no tengo pc pero veo varas cosas que no encajan:
1. Trabajas con números pero usas arrays de cadenas en vez de arrays de enteros.
2. Usas un número excesivo de bucles que se pueden reducir.
3. Para comparar arrays de cadenas no se puede usar el operador == sino que tendrías que comparar usando strcmp, strncmp, o comparar carácter a carácter.
4. Comparas G que es un carácter con un array de caracteres y eso no se como no le chirría al compilador.
5. Con este punto no estoy seguro y mejor que alguien con más experiencia te diga: scanf("%s", &spi1[i]);
Se supone que sp1 es un array de punteros a cadenas con lo que al indicarle un índice estas indicando la dirección a una de las cadenas con lo que el & estaría de más. Como digo sin pc no puedo probarlo y no estoy seguro.

Etiquetas: cadena, char, juego, numero, programa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:45.