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

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda  (Leído 4,900 veces)
Maxmorningstar

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Ayuda
« en: 18 Junio 2022, 02:21 am »

Hola amigos de la comunidad del hacker, soy nuevo aqui, pero conozco el foro ya desde hace un tiempo, vine a pedirles su ayuda con un proyecto, funciona bien, solo que me traduce las palabras de ingles a español, pero debe traducir una frase, ademas de que no reconoce cuando una frase ya ha sido añadida dos veces.

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3. #define N 50
  4.  
  5. typedef struct {
  6. char eng[N];
  7. char esp[N];
  8. int lleno;
  9. }traductor;
  10.  
  11. traductor trad[N];
  12.  
  13. void vacio();
  14. void anadir();
  15. void traducir();
  16. void tradu(int op);
  17. void cambio (char palabra[N]);
  18.  
  19. int main() {
  20. int op;
  21. char key;
  22.  
  23. vacio();
  24. void anadir();
  25.  
  26. do {
  27.  do {
  28.   printf ("Elige que deseas hacer:\n");
  29.      printf ("(1) Anadir palabras al traductor.\n");
  30.      printf ("(2) Buscar traduccion de la palabra en el traductor.\n");
  31.      scanf ("%i", &op);
  32.  } while (op < 1 || op > 2);
  33.  
  34. switch (op) {
  35.  case 1:
  36.   anadir();
  37.  break;
  38.  case 2:
  39.      traducir();
  40.  break;
  41. }
  42.  
  43. printf ("Introduce si deseas realizar otra operacion. (S/N)");
  44. scanf ("%c", &key);
  45. } while(key == 'S' || key == 's');
  46.  
  47. system ("pause");
  48. return 0;
  49. }
  50.  
  51. void vacio() {
  52. int i;
  53. for (i=0 ; i<N ; i++) {
  54.  trad[i].lleno = 0;
  55. }
  56. }
  57.  
  58. void anadir() {
  59. int i, aux;
  60.  
  61. aux = 0;
  62.  
  63. for (i=0 ; i<N && aux == 0 ; i++) {
  64.  if (trad[i].lleno == 0) {
  65.   printf ("Introduce la palabra en ingles.\n");
  66.   fflush(stdin);
  67.   fgets (trad[i].eng,N,stdin);
  68.   cambio (trad[i].eng);
  69.   printf ("Introduce la palabra en espanol.\n");
  70.   fflush(stdin);
  71.   fgets (trad[i].esp,N,stdin);
  72.   cambio (trad[i].esp);
  73.   trad[i].lleno = 1;
  74.   aux = 1;
  75.  }
  76. }
  77. }
  78.  
  79. void traducir() {
  80. int op;
  81.  
  82. do {
  83.   printf ("Elige que deseas hacer:\n");
  84.      printf ("(1) Traducir de Ingles a Espanol.\n");
  85.      printf ("(2) Traducir de Espanol a Ingles.\n");
  86.      scanf ("%i", &op);
  87.  } while (op < 1 || op > 2);
  88.  
  89. switch (op) {
  90.  case 1:
  91.   tradu(op);
  92.  break;
  93.  case 2:
  94.      tradu(op);
  95.  break;
  96. }
  97. }
  98.  
  99. void tradu(int op) {
  100. int i, j, temp;
  101. char aux[N];
  102.  
  103. temp = 0;
  104.  
  105. printf ("Introduce la palabra que desea buscar: \n");
  106. fflush(stdin);
  107. fgets (aux,N,stdin);
  108. cambio (aux);
  109. if (op == 1) {
  110.  for (i=0 ; i<N && temp==0 ; i++) {
  111.   j = strcmp (aux, trad[i].eng);
  112.   if (j == 0) {
  113.    printf ("La traduccion de %s es %s.\n", trad[i].eng, trad[i].esp);
  114.    temp = 1;
  115.   }
  116.  }
  117. }
  118. else {
  119.   for (i=0 ; i<N && temp==0 ; i++) {
  120.   j = strcmp (aux, trad[i].esp);
  121.   if (j == 0) {
  122.    printf ("La traduccion de %s es %s.\n", trad[i].esp, trad[i].eng);
  123.    temp = 1;
  124.   }
  125.  }
  126. }
  127. }
  128.  
  129. void cambio (char palabra[N]) {
  130. int i;
  131.  
  132. for (i=0 ; i<N ; i++) {
  133.  if (palabra[i] == '\n') {
  134.   palabra[i] = '\0';
  135.  }
  136. }
  137. }

MOD: El código debe ir entre etiquetas de Código GeSHi


« Última modificación: 18 Junio 2022, 12:14 pm por K-YreX » En línea

jca1

Desconectado Desconectado

Mensajes: 58


Ver Perfil
Re: Ayuda
« Respuesta #1 en: 21 Junio 2022, 04:00 am »

Hola:
- Esto puede ser el problema que queres decir que solo traduce una palabra y no mas; despues que hace la opcion de añadir o traducir la variable "op" vale 1 o 2, y aunque decidas traducir otra palabara poniendo "s", op va a valer 1 o 2 y como no cumple la condicion de la linea 32 no entra en ese bucle nunca mas. Tenes que reiniciar "op" en 0 por ejemplo en la linea 42.

- En el procedimiento traducir() no tiene sentido un 'switch' porque elija traducir de una manera u otra hace lo mismo (llama al mismo metodo con el mismo parametro.
En vez de:
Código:
 switch (op) {
  case 1:
   tradu(op);
  break;
  case 2:
      tradu(op);
  break;
 }

pone solo esto

Código:
tradu(op)

- Nunca traduce una 'oracion' porque lo hiciste para solo traducir por palabras. Tendria que hacer alguna manera de que ingrese una oracion y que compares palabra por palabra. Puede que hallas agregado una 'oracion' y busques esa exactamente (todas las letras, espacios o cualquier caracter coincida); ahi si funcionaria pero no es para nada practico y no es coherente. *

- Por el tema de la repeticion de palabras es pedir que palabra queres introducir y en que idioma esta, entonces busca en la correspondiente variable de la estructura. Si esta no la agregas, y si no esta como ya sabes la palabra en un idioma lo agregas y pedis que ingrese en el otro idioma esa palabra.

Y cuando busques una palabra para traducir deberias fijarte si hay mas palabras en el "diccionario", para eso deberia usarse la variable lleno; o no seria necesario que exista esa variable porque preguntas por alguna cadena (eng o esp) si es nulo (creo que todos las cadenas son nulas por defecto sino usarias "lleno" solamente) termina de recorrer el diccionario. En este caso para hacer eso, cuando recorres en la condicion del 'for' agregas la condicion trad[n].eng==NULL. **

Un consejo: no te obsesiones con usar condiciones; pensa si fueras a un ATM y te pregunte cada vez que ingrese a una opcion si desea seguir.
Es solo un consejo  ;)

*Si lo que quieres es traducir oraciones, seria algo bastante mas complejo, porque pensa que quieras traducir diferentes oraciones con las mismas palabras, tienen diferentes significados por ende las combinaciones posibles serias muchisimas y ademas traducidas. Si lo que quieres es hacer una programa realmente funcional, es un trabajo mucho mas dificil

**Aclaracion: viendo que usas la variable lleno en otro procedimiento quedaria mejor usar eso y no lo de NULL, pero tendrias un costo minimo de momoria inceseario.


Saludo!


« Última modificación: 21 Junio 2022, 06:28 am por jca1 » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines