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

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Dudas acerca de cierres de llaves en if, limite de lineas etc
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Dudas acerca de cierres de llaves en if, limite de lineas etc  (Leído 2,150 veces)
Beginner Web


Desconectado Desconectado

Mensajes: 634


youtu.be/0YhflLRE-DA


Ver Perfil
Dudas acerca de cierres de llaves en if, limite de lineas etc
« en: 12 Diciembre 2018, 05:17 am »

Código
  1. //Alguien me dice porque este codigo funciona asi y..
  2. bool alguna_funcion(estructura a, estructura b)
  3. {
  4. if(condiciones){
  5. if(condiciones)
  6. if(condiciones)
  7. if(condiciones)
  8. return true;
  9. }
  10. else
  11. return false;
  12. }
  13. // ... no asi? por favor :(
  14. bool alguna_funcion(estructura a, estructura b)
  15. {
  16. if(condiciones)
  17. if(condiciones)
  18. if(condiciones)
  19. if(condiciones)
  20. return true;
  21. else
  22. return false;
  23. }
  :huh:


En línea

7w7
K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: Dudas acerca de cierres de llaves en if, limite de lineas etc
« Respuesta #1 en: 12 Diciembre 2018, 06:01 am »

Personalmente no me funcionan ninguno de los dos correctamente. Quiero decir, ambos me compilan bien pero no se evalúa correctamente.
Esto es porque hay casos sin especificar:
- En ambos casos, si se cumplen todas las condiciones, devuelve <true>.
- En la primera función, si no se cumple la primera condición, devuelve <false>.
- En la segunda función, si se cumplen todas las condiciones menos la última, devuelve <false>.
Esos son los 3 casos que están especificados. El resto de casos no está explícito lo que va a ocurrir.

Lo he probado con una función que retorna un <int> en vez de un <bool> para ver los casos por defecto.
Código
  1. int funcion(int x){
  2.    if(x == 0)
  3.        if(x == 1)
  4.            if(x == 2)
  5.                return 20;
  6.            else
  7.                return 200;
  8. }

(Ya sé que la función es absurda pero nos sirve :xD) Si provoco alguno de los casos en los que no está especificado el valor de retorno, la función retorna el mismo valor que he introducido (x). Usando tus funciones para cada uno de los casos que no está especificado, la función retorna automáticamente <true>. Esto que comento es de forma experimental, no de forma teórica. :-X


En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
Beginner Web


Desconectado Desconectado

Mensajes: 634


youtu.be/0YhflLRE-DA


Ver Perfil
Re: Dudas acerca de cierres de llaves en if, limite de lineas etc
« Respuesta #2 en: 12 Diciembre 2018, 20:39 pm »

Nop entendi  :xD
En línea

7w7
K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: Dudas acerca de cierres de llaves en if, limite de lineas etc
« Respuesta #3 en: 12 Diciembre 2018, 21:07 pm »

Imagina esta función:
Código
  1. bool funcion(<parametros>){
  2.    if(condicion1)
  3.        if(condicion2)
  4.            return true;
  5.        else
  6.            return false;
  7. }

Situaciones posibles:
- <condicion1 == true> && <condicion2 == true> -> <return true>
- <condicion1 == true> && <condicion2 == false> -> <return false>
- <condicion1 == false>  && <condicion2 == true || condicion2 == false>-> no se ha especificado qué debe devolver la función.

Entonces lo que he podido deducir haciendo pruebas es que cuando ocurre una situación en la que no se ha especificado el valor de retorno, la función devuelve <true> automáticamente.

Este problema al tener 2 condicionales, tiene 2^2=4 posibles situaciones. En 2 de las situaciones tú controlas el valor que se devuelve pero en las otras 2, no. Y en esas 2 que no controlas, se devuelve siempre <true>.

El código que has mandado tú al tener 4 condicionales, tiene 2^4=16 situaciones posibles. En 2 de las situaciones controlas lo que se devuelve, en las otras 14, no. Si ocurre cualquiera de esas 14 situaciones que no has especificado, la función devolverá <true>.

Situaciones que controlas tú:
- En ambas funciones, si se cumplen todas las condiciones, devuelve <true>.
- En la primera función, si no se cumple la primera condición, devuelve <false>.
- En la segunda función, si se cumplen todas las condiciones menos la última, devuelve <false>.

Situaciones que no controlas:
- En la primera función, si se cumple la primera condición pero la segunda no se cumple (por ejemplo). En este caso va a devolver <true>.

No sé si ahora me he explicado mejor o no. Si sigues sin entenderme pregunta lo que no entiendes exactamente a ver si puedo explicar mejor esa parte. :-X
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
Beginner Web


Desconectado Desconectado

Mensajes: 634


youtu.be/0YhflLRE-DA


Ver Perfil
Re: Dudas acerca de cierres de llaves en if, limite de lineas etc
« Respuesta #4 en: 12 Diciembre 2018, 21:11 pm »

ahh masomenos voy entendiendo lo de los 2^n casos, y suponiendo que quiera validar una hora que va desde 0:00:00 a 23:59:59 esta funcion que devuelve true o false estaria bien o me faltan llaves en el segundo if?  :huh:

Código
  1. bool validar_hora(thora hora)
  2. {
  3. if(hora.hora>=0 && hora.hora<=23){
  4. if(hora.minuto>=0 && hora.minuto<=59)
  5. if(hora.segundo>=0 && hora.segundo<=59)
  6. return true;
  7. }
  8. else
  9. return false;
  10. }
« Última modificación: 12 Diciembre 2018, 21:21 pm por Beginner Web » En línea

7w7
K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: Dudas acerca de cierres de llaves en if, limite de lineas etc
« Respuesta #5 en: 12 Diciembre 2018, 23:00 pm »

Faltan. Piensa que si se cumple el primer <if> entras dentro de ese bloque pero si la segunda condición no se cumple... O si se cumple la segunda también pero la tercera no...
Creo que es una buena práctica crear una variable auxiliar e inicializarla en un valor y así sólo tienes que hacer la mitad de comprobaciones, por ejemplo:
Código
  1. bool validar_hora(thora hora){
  2.    bool valido = true; // asumimos que la hora es valida
  3.    if(hora.hora < 0 || hora.hora > 23 || hora.min < 0 || hora.min > 59 || hora.segundo < 0 || hora.segundo > 59)
  4.        valido = false; // si algun dato se sale de los limites la hora ya no es valida
  5.    return valido; // usando solo un return podemos controlar mas facil lo que se devuelve
  6. }
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
Beginner Web


Desconectado Desconectado

Mensajes: 634


youtu.be/0YhflLRE-DA


Ver Perfil
Re: Dudas acerca de cierres de llaves en if, limite de lineas etc
« Respuesta #6 en: 13 Diciembre 2018, 00:35 am »

eres lo mas! esta superentendible, ya habia visto esta tecnica en otros posts pero no me gusta evaluar todo en un solo if por tema de que por ahi tengo muchas cosas que evaluar por ejemplo comparar 8 o mas condiciones en lugar de 6 , ni modo tendre que ceder  :laugh:
« Última modificación: 13 Diciembre 2018, 00:37 am por Beginner Web » En línea

7w7
CalgaryCorpus


Desconectado Desconectado

Mensajes: 323


Ver Perfil WWW
Re: Dudas acerca de cierres de llaves en if, limite de lineas etc
« Respuesta #7 en: 13 Diciembre 2018, 01:13 am »

Si el codigo es una sucesion de condiciones que tienen que cumplirse para que sea true y si no se cumple cualquiera de ellas, el valor de verdad deberia ser falso, puede reemplazarlo por 1 return, ningun if, ninguna variable, ninguna asignacion.

Código
  1. bool f() {
  2.   return condicion1 && condicion2 && .... ;
  3. }
En línea

Aqui mi perfil en LinkedIn, invitame un cafe aqui
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
2 Dudas acerca de XSS
Nivel Web
Asaroth 1 2,947 Último mensaje 21 Abril 2011, 20:13 pm
por Shell Root
Se acerca fecha límite de registro para la Feria de Ciencia de Google
Noticias
wolfbcn 0 2,055 Último mensaje 20 Marzo 2012, 13:28 pm
por wolfbcn
Un par de dudas acerca de Tails
GNU/Linux
NEXUS978 1 2,867 Último mensaje 25 Abril 2013, 00:20 am
por NEXUS978
[BATCH]limite en el tamaño de lineas
Scripting
z_ane_666 3 3,347 Último mensaje 4 Julio 2013, 22:23 pm
por zikotik
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines