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

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


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


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: If o Switch?
« Respuesta #10 en: 15 Junio 2013, 12:55 pm »

¿Por casualidad no estarás haciendo un diccionario no?

Si es así, te puede servir esto:
http://minidosis.org/C++/Maps/


En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
OmarHack


Desconectado Desconectado

Mensajes: 1.268


Ver Perfil
Re: If o Switch?
« Respuesta #11 en: 15 Junio 2013, 12:58 pm »

Siempre pongo ejemplos malos, uso mas de un carácter, si no usaría char :P
Tengo 500 lineas de código, por eso no pongo el original. xDDD No creo que se pueda mejorar más, porque el código no tiene más. xD
Muchas gracias de nuevo, sí le añado algo y necesito ayuda os aviso. :)
Lo dejo con el while entonces!
Tengo que leerme algún libro para ver como están implementadas las sentencias y saber cual es mejor para cada caso, en lo cursos no suelen venir.
Un saludo!

PD: No estoy haciendo un diccionario, pero seguro que el funcionamiento del diccionario me puede ayudar a implementar alguna función más. :silbar:


En línea

I like to test things.
0xDani


Desconectado Desconectado

Mensajes: 1.077



Ver Perfil
Re: If o Switch?
« Respuesta #12 en: 15 Junio 2013, 14:02 pm »

A ver si esto te ayuda:

Código
  1. const char *arrays[] = {"a", "b", "c"};
  2. const char *respuestas[] = {"a", "cualquier cosa", "mi gato se llama guantes"};
  3.  
  4.    do {
  5.  
  6.    cout << "Puede poner su letra:" << endl;
  7.  
  8.    cin >> string1;
  9.  
  10.    size_t i;
  11.    bool found = false;
  12.    for(i=0; i<(sizeof(arrays)/sizeof(arrays[0])); i++)
  13.    {
  14.      if(string1 == arrays[i])
  15.      {
  16.       found = true;
  17.       break;
  18.      }
  19.    }
  20.  
  21.    if(found)
  22.     cout << respuestas[i] << endl;
  23.    else
  24.     /* Aqui haces lo que quieras si no se encuentra nada */
  25.  
  26.    } while (string1 != "salir");
  27.    return 0;
  28.  
En línea

I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM
OmarHack


Desconectado Desconectado

Mensajes: 1.268


Ver Perfil
Re: If o Switch?
« Respuesta #13 en: 15 Junio 2013, 14:16 pm »

Tampoco me sirve!  Así en mi caso creo que haría el código más largo, complejo, y lento.
En línea

I like to test things.
amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: If o Switch?
« Respuesta #14 en: 15 Junio 2013, 15:11 pm »

A ver si esto te ayuda:

Código
  1. const char *arrays[] = {"a", "b", "c"};
  2. const char *respuestas[] = {"a", "cualquier cosa", "mi gato se llama guantes"};
  3.  
  4.    do {
  5.  
  6.    cout << "Puede poner su letra:" << endl;
  7.  
  8.    cin >> string1;
  9.  
  10.    size_t i;
  11.    bool found = false;
  12.    for(i=0; i<(sizeof(arrays)/sizeof(arrays[0])); i++)
  13.    {
  14.      if(string1 == arrays[i])
  15.      {
  16.       found = true;
  17.       break;
  18.      }
  19.    }
  20.  
  21.    if(found)
  22.     cout << respuestas[i] << endl;
  23.    else
  24.     /* Aqui haces lo que quieras si no se encuentra nada */
  25.  
  26.    } while (string1 != "salir");
  27.    return 0;
  28.  
Para eso está la clase maps  :silbar:

Insisto en que te veas los videos OmarHack. Puedes hacer un map con todas las respuestas, el valor que te devuelva el map será otra cadena, un número o un puntero a una función.

¿Lo que quieres es implementar comandos no?
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
OmarHack


Desconectado Desconectado

Mensajes: 1.268


Ver Perfil
Re: If o Switch?
« Respuesta #15 en: 15 Junio 2013, 15:16 pm »

Para eso está la clase maps  :silbar:

Insisto en que te veas los videos OmarHack. Puedes hacer un map con todas las respuestas, el valor que te devuelva el map será otra cadena, un número o un puntero a una función.

¿Lo que quieres es implementar comandos no?

fue el primer vídeo que vi, el del uso de find en map. Pero estoy buscando añadir funcionalidades a mi programa, y haciendo el código de esa manera aprendo bastante, pero no me sirve para añadir funcionalidades.
Justo, es lo que más me interesa ahora mismo!
En línea

I like to test things.
amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: If o Switch?
« Respuesta #16 en: 15 Junio 2013, 15:56 pm »

fue el primer vídeo que vi, el del uso de find en map. Pero estoy buscando añadir funcionalidades a mi programa, y haciendo el código de esa manera aprendo bastante, pero no me sirve para añadir funcionalidades.
Justo, es lo que más me interesa ahora mismo!
Pues eso es lo que estás buscando! Un map en toda regla.

Te pongo un ejemplo sencillo:

Código
  1. #include <iostream>
  2. #include <map>
  3.  
  4. using namespace std;
  5.  
  6. typedef void (*Puntero_A_Funcion)(void);
  7.  
  8. void Copiar();
  9. void Escribir();
  10. void Cortar();
  11.  
  12. int main()
  13. {
  14.    void (*Funcion)(void); // Puntero a funcion sin argumentos
  15.    string Mensaje;
  16.    map<string,Puntero_A_Funcion> Comandos;
  17.  
  18.    Comandos["write"] = Escribir;
  19.    Comandos["copy"] = Copiar;
  20.    Comandos["cut"] = Cortar;
  21.  
  22.    cout<<"Introduzca comando: ";
  23.    cin>>Mensaje;
  24.  
  25.    Funcion = Comandos[Mensaje]; // Obtengo el puntero a la funcion correspondiente
  26.  
  27.    if (Funcion) // Si existe la funcion
  28.        Funcion(); // llamar a la funcion
  29.    else
  30.        cout<<"Error, no existe el comando introducido";
  31.  
  32.    return 0;
  33. }
  34.  
  35. void Escribir()
  36. {
  37.    cout<<"Has escrito write";
  38. }
  39.  
  40. void Cortar()
  41. {
  42.    cout<<"Has escrito cortar";
  43. }
  44.  
  45. void Copiar()
  46. {
  47.    cout<<"Has escrito copiar";
  48. }
  49.  

En tú código deberías definir las funciones en un archivo aparte para no liarte  ;)

¡Saludos!
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
0xDani


Desconectado Desconectado

Mensajes: 1.077



Ver Perfil
Re: If o Switch?
« Respuesta #17 en: 15 Junio 2013, 19:28 pm »

Muy buen aporte amchacon, no le había visto esa funcionalidad a la clase map.
En línea

I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM
OmarHack


Desconectado Desconectado

Mensajes: 1.268


Ver Perfil
Re: If o Switch?
« Respuesta #18 en: 15 Junio 2013, 19:30 pm »

Muy bueno, pero no es mas sencillo:
Código
  1. if (string1 == "Escribir")
  2. {
  3. cout << "Has escrito write" <<endl;
  4. //Llamada a la función si fuera necesario.
  5. }

¿O esa forma tiene alguna ventaja sobre la anterior?
En línea

I like to test things.
lapras

Desconectado Desconectado

Mensajes: 140



Ver Perfil WWW
Re: If o Switch?
« Respuesta #19 en: 15 Junio 2013, 20:48 pm »

La ventaja que tine el map es que tiene un coste constante.
Por otra parte, en una sucesión de ifs el coste depende linealmente de el número de ifs.
Si tienes poquitos ifs vale la pena. Pero si tienes un muchos imagínate si será costoso comprobar todas las condiciones una a una.
Los maps tinen una función hash que permite calcular el puntero sin depender del número de entradas que tenga.
En línea

Páginas: 1 [2] 3 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Switch?
Redes
Sarayins 4 2,487 Último mensaje 7 Julio 2014, 09:53 am
por ccrunch
PoC, más rapido if-else o switch? « 1 2 »
Programación C/C++
engel lex 15 7,390 Último mensaje 10 Diciembre 2014, 16:30 pm
por zShackra
switch
Programación C/C++
C4ss4ndr4__4__4 2 2,752 Último mensaje 5 Mayo 2021, 19:33 pm
por K-YreX
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines