Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Darioxhcx en 1 Febrero 2011, 08:14 am



Título: [consulta] ahorcado :B
Publicado por: Darioxhcx en 1 Febrero 2011, 08:14 am
wenas, hace como 1 mes se me ocurrio hacer un ahorcado y bue, al principio pense q habia terminado de pensarlo y de pensarlo bien, al parecer me ekivoke ;D
bue el tema es que no se me ocurre como mostrar el caracter ingresado si es valido, x ejemplo

z_ _ _ _ a
ingresa r y muestre
z _ r r a
esto es lo que tengo hasta ahora
Código
  1. #include <stdio.h>
  2. #include <string.h>
  3. main () {
  4.     char palabra[10][10]={{"cabina"},
  5.                           {"olas"},
  6.                           {"zorra"},
  7.                           {"heladera"},
  8.                           {"p0rno"},
  9.                           {"mosca"},
  10.                           {"monitor"},
  11.                           {"pelota"},
  12.                           {"viento"},
  13.                           };
  14.    char letra[1];
  15.     int c,random,x,longitud,intentos=5;
  16.     srand(time(NULL));
  17.     random=(rand()%9);
  18.     longitud=strlen(palabra[random])-1;
  19.     printf("##################################\n");
  20.     printf("       palabra a encontrar\n");
  21.     printf("##################################\n");
  22.     printf("intentos : %d\n",intentos);
  23.     printf("%c",palabra[random][0]);
  24.     for(c=1;c<=longitud-1;c++) {
  25.                    printf(" _ ");
  26. }
  27.     printf("%c\n",palabra[random][longitud]);
  28.     printf("ingrese su letra: ");
  29.     scanf("%s",letra);
  30.     printf("Tu letra es: %s\n",letra);    
  31.     for (x=1;x<=longitud-2;x++){
  32. if (letra[0]==palabra[random][x]) printf("adivinaste la letra %s\n",letra);
  33. }
  34.     getchar();
  35.     }
  36.  
el tema tambien esta que no manejo punteros , por temas de tiempo esto lo hago para distrarme cuando no trabajo o estoy diseniando :3
saludos


Título: Re: [consulta] ahorcado :B
Publicado por: Khronos14 en 1 Febrero 2011, 12:28 pm
Estas intentando hacer un ahorcado y por lo que veo, no tienes mucha idea de programar.

1º.- La función main se define como int y debe devolver un valor.
2º.- Defines letra como un array cuando puedes hacer esto:

Código
  1. char letra;
  2. scanf("%c", &letra);

3º.- Para hacer el ahorcado tienes que hacer búsquedas en las cadenas, y lo más normal es hacerlo con punteros.  En la cabecera string.h tienes funciones como strlen, strcpy, strstr, etc...

4º.- La lista de palabras la puedes definir así:

Código
  1. char  * palabra[]= {"cabina",
  2.                    "olas",
  3.                    "heladera",
  4.                    "p0rno",
  5.                    "mosca",
  6.                    "monitor",
  7.                    "pelota",
  8.                    "viento"};
  9.  

Saludos.


Título: Re: [consulta] ahorcado :B
Publicado por: Darioxhcx en 1 Febrero 2011, 19:52 pm
aver, trankilo señor anderson
1º vos hablas sobre el return para main ? na
2º si el usuario escriba , mas de 1 caracter va a funcionar mal si no me ekivoko , o no ?
 
3 y 4 , si gracias
me iluminase y me dio una gran idea señor anderson, gracias por mostrarme el camino


Título: Re: [consulta] ahorcado :B
Publicado por: Khronos14 en 1 Febrero 2011, 20:41 pm
¿A qué viene lo de señor anderson?  :huh:

1º.- Si, me refiero al return del main. La función main hay que definirla para que devuelva un int, y finalizando el programa con un return 0 le comunicas al sistema operativo que tu aplicación se ejecutó con éxito.

2º.- Si, sólo te recoge un caracter. Lo que tu hacias con %s no te debería funcionar.
Para coger todos los caracteres hasta que se pulse enter, tienes que hacer algo como esto:

Código
  1. char buff[10];
  2. scanf("%[^\n]", buff);

Saludos.


Título: Re: [consulta] ahorcado :B
Publicado por: RyogiShiki en 1 Febrero 2011, 20:56 pm
alguna vez deje a medias un ahorcado en c haaaace muuuchisimo tiempo, cuando apenas comenzaba, antes de dejar de programar y ahora retomarlo... el caso es que lo voy a buscar, te lo voy a pasar para que lo estudies y saques tus propias conclusiones de como deberías hacerlo...

--EDIT--
Aquí está, está escrito usando las librerias ncurses (espero no sea problema) y las palabras son leidas desde un archivo de texto que se debe llamar palabras.txt aunque eres libre de cambiarlo es por eso que la cantidad de palabras es irrelevante, ya que el ciclo acaba cuando no hay nada más que leer, lo único que falto implementar (aparte de acabarlo XD) fue la selección aleatoria de palabras..... El código es muy viejo y está super incompleto, pero creo que debería servir como una idea general (es bueno que lo leas entiandas y hagas el tuyo porque no creo que el mio te sirva de mucho) de como deberias hacerlo: http://www.mediafire.com/?datuf1pr4x92ill

Espero sirva de algo saludos


Título: Re: [consulta] ahorcado :B
Publicado por: Nork en 1 Febrero 2011, 21:08 pm
Así rápido se me ocurre una manera que quizá te sirva. Crear un array de boleanos del mismo tamaño que la palabra y cada vez que acierte una letra pones la posición del array de boleanos a 1 y así muestras las letras que lleva (la posición que este a 1 correspondrá a la letra de la palabra a mostrar. Si no muestras '_').

Ex:

array auxiliar de boleanos:   0 0 0 0 0
palabra a adivinar:              h  e l  l  o

Si el usuario introduce la h ->

array auxiliar de boleanos:   1 0 0 0 0
palabra a adivinar:              h  e l  l  o

Si el usuario introduce la l ->

array auxiliar de boleanos:   1 0 1 1 0
palabra a adivinar:              h  e l  l  o

S4ludos!


Título: Re: [consulta] ahorcado :B
Publicado por: Khronos14 en 1 Febrero 2011, 23:47 pm
Así rápido se me ocurre una manera que quizá te sirva. Crear un array de boleanos del mismo tamaño que la palabra y cada vez que acierte una letra pones la posición del array de boleanos a 1 y así muestras las letras que lleva (la posición que este a 1 correspondrá a la letra de la palabra a mostrar. Si no muestras '_').

Ese método es muy chorizo... la forma "normal" de hacerlo es usando las funciones de cadenas para buscar coincidencias, no tiene más ciencia.

Saludos.


Título: Re: [consulta] ahorcado :B
Publicado por: Nork en 2 Febrero 2011, 00:03 am
Ese método es muy chorizo... la forma "normal" de hacerlo es usando las funciones de cadenas para buscar coincidencias, no tiene más ciencia.

Saludos.

No sé que será para ti chorizo pero la idea que le he dado no tiene nada que ver con lo que dices... usando funciones de cadenas, como dices, puedes ver si esta la letra para luego marcar el 1 en el array de boleanos. Si no, ¿cómo sabes las que lleva acertadas? de algún modo tienes que anotarlo.


Título: Re: [consulta] ahorcado :B
Publicado por: do-while en 2 Febrero 2011, 05:07 am
¡Buenas!

Ya se que no se hacen trabajos, pero ya que se ha dejado un enlace, en este otro enlace (http://www.4shared.com/file/_iPn1Shg/ahorcado1.html) tienes el codigo que acabo de colgar. Maneja structs, funciones, punteros y memoria dinamica. Evidentemente, se puede mejorar mucho cargando los datos desde un fichero, eso si quieres lo haces tu, ya que el hecho de utilizar vectores te limita la cantidad de datos. Si no tienes claro como funciona todo eso y las funciones de la biblioteca estandar que se manejan, no se si lo podras seguir, pero espero que te sirva de orientacion y que lo completes con el codigo que dejo gankutsuo.

Si no entiendes el codigo, te tocara estudiar. Hay algun comentario, pero no todo esta explicado, por lo tanto tendras que revisarlo linea a linea.

¡Saludos!

Por cierto, si no cambias de actitud poca ayuda mas vas a conseguir en esta vida.


Título: Re: [consulta] ahorcado :B
Publicado por: Darioxhcx en 2 Febrero 2011, 06:33 am
te entiendo do-while , capas q si mi actitud no fue de las mejores, pero creo yo, que cuando tengo que dar opinion sobre el trabajo o lo realizado x alguien q necesita ayuda, eso mismo , necesita ayuda y/o orientacion , lo que pedi fue una idea de como seguir o como realizar el objetivo, no me van a servir comentarios como "ta todo mal , empesa de nuevo"  , si no me decis en que estoy mal o como minimo, como plantear la solucion, y se q no se hacen las tareas, o es una tarea ni trabajo de universidad ni nada x el estilo, eso lo hago x hoobie en mis ratos libres
voy a mirar los 2 codigos y si tengo tiempo libre a ver si entiendo sobre los fucking punteros q me terminaron haciendo kilombo cuando los vi :3
gracias


Título: Re: [consulta] ahorcado :B
Publicado por: Manu.KNT en 2 Febrero 2011, 10:39 am

1º.- Si, me refiero al return del main. La función main hay que definirla para que devuelva un int, y finalizando el programa con un return 0 le comunicas al sistema operativo que tu aplicación se ejecutó con éxito.


Poner int main y poner main es exactamente lo mismo, si no se pone el tipo, C lo considera un int. Sí tiene que devolver un valor, que en este caso es el numero de fallo de sistema. Si indica void main, no necesita devolver nada.


Título: Re: [consulta] ahorcado :B
Publicado por: Edu en 2 Febrero 2011, 14:14 pm
Yo se programar la mitad q vs seguramente, soy un principiante, pero me parecio que yo lo hice de una forma mas facil una vez.
Es todo depende como lo quieras hacer claro, yo en si lo hice en Windows Forms empezando por ahi pero en modo consola seria mas o menos la misma cosa, una variable string q tendra la palabra a adivinar y cuando pone una letra se hace un bucle probando en cada caracter de esa string de la palabra a adivinar si existe en la palabra o no. Pero nada de variables char ni nada de eso xD


Título: Re: [consulta] ahorcado :B
Publicado por: RyogiShiki en 2 Febrero 2011, 14:39 pm
Yo se programar la mitad q vs seguramente, soy un principiante, pero me parecio que yo lo hice de una forma mas facil una vez.
Es todo depende como lo quieras hacer claro, yo en si lo hice en Windows Forms empezando por ahi pero en modo consola seria mas o menos la misma cosa, una variable string q tendra la palabra a adivinar y cuando pone una letra se hace un bucle probando en cada caracter de esa string de la palabra a adivinar si existe en la palabra o no. Pero nada de variables char ni nada de eso xD

Primero hay que definir en que se está intentando hacer, en C o en C++, la clase string está definida únicamente en el archivo de cabecera <string> propio de C++ por lo tanto el tipo definido string no está disponible en C.


Título: Re: [consulta] ahorcado :B
Publicado por: autlos en 2 Febrero 2011, 15:08 pm
Algunas respuestas se están complicando mucho. Yo hace poco terminé mi ahorcado y esto es lo que hice (funciona perfectamente):

Declarar una array auxiliar de longitud = strlen(palabraelegida). en el que todos sus valores fueran '_' (los llenas con un for).
Pides el caracter con getchar(), y recorres la palabra con un bucle for en el que comparas el caracter con cada posición de la palabra, si está, sustituyes en la posición del auxiliar el '_' por el caracter.

Repite la petición de caracteres con un do while, con las condiciones de que lo haga hasta que strcmp(auxiliar,palabra) esa == 0 y que los intentos restantes sean >0.


Título: Re: [consulta] ahorcado :B
Publicado por: anonimo12121 en 2 Febrero 2011, 15:39 pm
no e leido las respuestas pero viendo tu codigo te recomiendo que hagas lo siguiente.
lo pongo sin tabulaciones
Código
  1. #include <iostream>
  2. using namespace std;
  3. int main(int *argc, char *argv[]){
  4. int v =1;
  5. cout << v;
  6. cin.get();
  7. return 0;
  8. }

no se si habré puesto bien la line main , pero bueno a lo que iba , que uses c++.





Título: Re: [consulta] ahorcado :B
Publicado por: Littlehorse en 2 Febrero 2011, 16:05 pm
Poner int main y poner main es exactamente lo mismo, si no se pone el tipo, C lo considera un int. Sí tiene que devolver un valor, que en este caso es el numero de fallo de sistema. Si indica void main, no necesita devolver nada.

No, no es exactamente lo mismo. Con anterioridad lo era, pero en la actualidad debe estar declarado el tipo de retorno de main en forma explicita ya sea en C o en C++.



En cuanto a la duda principal, hay muchos errores en ese código, así que antes de implementar las ideas que te han dado, deberías tratar de resolver los errores en tu propio código, para luego implementar el algoritmo que hayas elegido correctamente.


He borrado los mensajes que no vienen al caso. Las discusiones en mal tono pueden tenerlas por PM, y para los mensajes tipo chat pueden usar el IRC.

Saludos!


Título: Re: [consulta] ahorcado :B
Publicado por: anonimo12121 en 2 Febrero 2011, 17:09 pm
Un consejo que te doy no escribas cosas sin saber lo que hacen  todo lo que te digan estudialo e investigalo... si no , no aprenderas nada.


Título: Re: [consulta] ahorcado :B
Publicado por: do-while en 3 Febrero 2011, 00:41 am
¡Buenas!

Debe de haber algun error en el codigo que he dejado. Al probarlo, despues de repetir el while que hay en main, el programa crashea. He echado un vistazo al codigo, pero no lo encuentro. Si lo veis avisad, de momento voy a automatizarlo y correrlo en Olly a ver que pasa.

¡Saludos!

¡¡¡¡ñadslfkj ñadklfj!!!!

No hay nada como dejar de obsesionarte con un codigo un rato.

Acabo de encontrar el error. Un parentesis que en lugar de tomar la longitud de la cadena y sumarle uno, tomaba la longitud a partir de cadena + 1... Ya esta acutalizado.

¡Saludos de nuevo!