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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


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

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Ayudaaa
« en: 3 Junio 2020, 22:49 pm »

Me pidieron esto para una tarea y hace horas que trato de resolverlo sin encontrar resultado:

"Un grupo de pequeños amigos suele reunirse para jugar a los espías. Como pretenden imitar a los buenos espías, tienen sus medios para codificar mensajes. En particular, para informar a sus colegas si sus actividades de espionaje han dado resultado o no, han ideado el siguiente método. Los chicos tienen una hilera ‘base’ de letras del alfabeto internacional. Cuando quieren transmitirle a otro un mensaje indicando el resultado exitoso de su misión, envían por celular una palabra que sólo puede leerse en la hilera base de izquierda a derecha. Si la misión resultó fallida, mandan una palabra que en la hilera base sólo puede leerse al revés, es decir de derecha a izquierda. A veces necesitan avisar que la misión encomendada está demorada, por lo que no pueden usar el método anterior. En este caso mandan una palabra que no puede leerse en ningún sentido.

Para ayudar a los chicos, se te pide que escribas un programa mensajes.cpp que, recibiendo una palabra y teniendo la secuencia de letras ‘base’, decida si la palabra está o no, y en el primer caso en qué dirección se pudo leer."

Por ejemplo:
Entrada:
ABDLFJKDSHKHLIDFNMENSAJESJDSKFJSDFNISDFJDFSLKJDFSLDFS
MENSAJE

Salida:
SI
I

Entrada:
ABDLFJKDSHKHLIDFEJASNEMJDSKFJSDFNISDFJDFSLKJDFSLDFS
MENSAJE

Salida:
SI
D
Ejemplo

Entrada:
ABDLFJKDSHKHLIDFMENSAJEJDSKFJSDFNISDFJDFSLKJDFSLDFS
SECRETO

Salida:
NO

esto se lo que tengo hasta ahora, pero la función es un int, y debería ser un bool.

Código
  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4.  
  5. int Sepuedeleer (string base, string palabra){
  6. string base2;
  7. int ban;
  8.  
  9. for (int i= base.size(); i >=0 ; i--){
  10. base2+= base[i];
  11. }
  12.  
  13. if(base.find(palabra) !=base.npos){
  14. ban=1;
  15. }
  16.  
  17. if(base2.find(palabra) !=base.npos){
  18. ban=2;
  19. }
  20.  
  21. return ban;
  22. }
  23.  
  24. int main(){
  25. string base, palabra;
  26. int ban;
  27.  
  28. cout <<"Ingrese el mensaje: ";
  29. getline(cin, base);
  30.  
  31. cout <<"Ingrese la palabra clave: ";
  32. cin >>palabra;
  33.  
  34. ban= Sepuedeleer(base, palabra);
  35.  
  36. switch(ban){
  37.  
  38. case 0: cout <<"No" <<endl;
  39. break;
  40.  
  41. case 1: cout <<"Si" <<"\nI" <<endl;
  42. break;
  43.  
  44. case 2: cout <<"Si" <<"\nD" <<endl;
  45. break;
  46. }
  47.  
  48. return 0;
  49. }

Gracias de antemano


En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: Ayudaaa
« Respuesta #1 en: 4 Junio 2020, 10:19 am »

Tienes que representar 3 estados por lo que si lo calculas todo dentro de la función no podrás usar como valor de retorno <bool>. Para poder usar un <bool> tienes que separar la lógica del problema, por ejemplo, haciendo una función que te devuelva true/false según si el mensaje está en la cadena o no y llamar a esta función dos veces, la segunda vez con la cadena invertida.

El resultado podría ser algo así:
Código
  1. #include <iostream>
  2. #include <string>
  3. #include <algorithm>
  4.  
  5. using namespace std;
  6.  
  7. bool contieneMensaje(string cadena, string mensaje){
  8. size_t posicion = cadena.find(mensaje);
  9. return posicion != string::npos;
  10. }
  11.  
  12. int main(){
  13. string cadena = "ABDLFJKDSHKHLIDFNMENSAJESJDSKFJSDFNISDFJDFSLKJDFSLDFS";
  14. string mensaje = "MENSAJE";
  15. string direccion = "Derecha - Izquierda"; // Por defecto asumimos que la direccion es esa para solo cambiarla una vez
  16.  
  17. bool encontrado = contieneMensaje(cadena, mensaje);
  18.        // Si la cadena la encontramos a la primera, esta en la otra direccion
  19. if(encontrado) direccion = "Izquierda - Derecha";
  20. // Invertimos la cadena y volvemos a usar la funcion
  21. string cadenaInvertida = string(cadena.rbegin(), cadena.rend());
  22.        // Para que se guarde true tanto si lo era antes como si lo es ahora usamos un OR |.
  23. encontrado |= contieneMensaje(cadenaInvertida, mensaje); // Equivale a: encontrado = encontrado || contieneMensaje(...)
  24.  
  25. if(encontrado) cout << "Si" << endl << direccion << endl;
  26. else cout << "No" << endl;
  27. }


En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
MOTO GP3 AYUDAAA
Juegos y Consolas
porche23 0 1,264 Último mensaje 18 Mayo 2007, 00:58 am
por porche23
ayudaaa
Java
anii 3 2,488 Último mensaje 28 Junio 2011, 03:41 am
por Novlucker
AYUDAAA
Java
IsmaelBFH 1 1,616 Último mensaje 25 Noviembre 2015, 12:32 pm
por IsmaelBFH
Ayudaaa!!
Scripting
Maria230 4 2,800 Último mensaje 19 Octubre 2019, 21:20 pm
por Mr. K3rn3l
Ayudaaa
Android
Camaradadefull 0 2,402 Último mensaje 17 Mayo 2020, 04:27 am
por Camaradadefull
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines