Está en la página 1de 10

UNIVERSIDAD CENTRAL DE VENEZUELA FACULTAD DE CIENCIAS ESCUELA DE COMPUTACIN ALGORITMOS Y PROGRAMACIN

Laboratorio 3 Estructuras condicionales: Simples y Mltiples Seleccin simple La estructura de control ms comn es el condicional simple. Dicha estructura evala una expresin lgica, comnmente llamada condicin, para determinar si un bloque de instrucciones ha de ser ejecutado. En su forma ms simple, nicamente se indican las instrucciones a ejecutar en caso de ser verdadera la condicin, mientras que, la otra forma permite indicar dos bloques de instrucciones, uno para ser ejecutado cuando la condicin es verdadera y otra para cuando la condicin es falsa. Pseudocdigo Si <condicin> entonces [Secuencia de instrucciones] Fsi Si <condicin> entonces [Secuencia de instrucciones] Sino [Secuencia de instrucciones] Fsi if (<condicin>) { [Secuencia de instrucciones] } if (<condicin>) { [Secuencia de instrucciones] } else { [Secuencia de instrucciones] } C++

GDAyP

pg. 1

UNIVERSIDAD CENTRAL DE VENEZUELA FACULTAD DE CIENCIAS ESCUELA DE COMPUTACIN ALGORITMOS Y PROGRAMACIN

El anidamiento de estructuras de control es posible de la misma forma que se realiza al utilizar pseudocdigo. Pseudocdigo Si <condicin1> entonces Si <condicin2> entonces [Secuencia de instrucciones] Sino [Secuencia de instrucciones] Fsi Fsi } else { [Secuencia de instrucciones] } } NOTA: El uso de las llaves para delimitar un bloque de instrucciones es opcional en las estructuras de control en C++ siempre y cuando el bloque contenga una sola instruccin. if (<condicin1>) { if (<condicin2>) { [Secuencia de instrucciones] C++

GDAyP

pg. 2

UNIVERSIDAD CENTRAL DE VENEZUELA FACULTAD DE CIENCIAS ESCUELA DE COMPUTACIN ALGORITMOS Y PROGRAMACIN

Seleccin mltiple Como se vio en la seccin anterior, la seleccin simple tiene traduccin directa a C++. Sin embargo, la seleccin mltiple no solo no se puede traducir de forma directa sino que en muchos casos es simplemente imposible. A continuacin se muestran lado a lado las definiciones lxicas de la seleccin mltiple en ambos lenguajes, de esta forma se intenta ilustrar las diferencias. Pseudocdigo Seleccin <condicin1>: [Secuencia de instrucciones 1] <condicin2>: [Secuencia de instrucciones 2] . . . <condicinN>: [Secuencia de instrucciones N] Fseleccin switch (<expresin>) { case <constante1>: [Secuencia de instrucciones 1] break; case <constante2>: [Secuencia de instrucciones 2] break; . . . case <constanteN>: [Secuencia de instrucciones N] break; default: [Secuencia de instrucciones] } C++

GDAyP

pg. 3

UNIVERSIDAD CENTRAL DE VENEZUELA FACULTAD DE CIENCIAS ESCUELA DE COMPUTACIN ALGORITMOS Y PROGRAMACIN

En primer lugar se puede observar que la versin en pseudocdigo selecciona una seccin de cdigo asociada a una condicin, mientras que la versin de C++ asocia la seleccin completa a una expresin y luego utiliza valores constantes para determinar el bloque de cdigo a ejecutar. Esto significa que solo un subconjunto de las situaciones que pueden ser expresadas en la seleccin mltiple de pseudocdigo se pude traducir como seleccin mltiple a C++. En particular cuando todas las condiciones <condicin1>, <condicin2>, , <condicinN> son de la forma <expresin>==<constante>. Es decir, si existe una expresin <expresin> para la cual si podemos reescribir la seleccin mltiple de la siguiente forma: Pseudocdigo Seleccin <expresin>==<condicin1>: [Secuencia de instrucciones 1] <expresin>==<condicin2>: [Secuencia de instrucciones 2] . . . <expresin>==<condicinN>: [Secuencia de instrucciones N] Fseleccin switch (<expresin>) { case <constante1>: [Secuencia de instrucciones 1] break; case <constante2>: [Secuencia de instrucciones 2] break; . . . case <constanteN>: [Secuencia de instrucciones N] break; } C++

GDAyP

pg. 4

UNIVERSIDAD CENTRAL DE VENEZUELA FACULTAD DE CIENCIAS ESCUELA DE COMPUTACIN ALGORITMOS Y PROGRAMACIN

Adems, resalta la palabra clave default en la primera versin de C++, sta clusula especial es opcional y permite asociar una secuencia de instrucciones al caso en el que la expresin no se evale a ninguna de las constantes provistas. Es decir, si se tiene una expresin ms en la versin de pseudocdigo de la forma <expresin> <condicin 1> y <expresin> <condicin 2> y <expresin> <condicin N>, entonces se puede reemplazar sta ltima por la clusula default. Pseudocdigo Seleccin <expresion> = <condicion1>: [Secuencia de instrucciones] <expresion> = <condicion 2>: [Secuencia de instrucciones] . . . <expresion> = <condicion N>: [Secuencia de instrucciones] <expresion> <condicion 1> y <expresion> <condicion 2> y <expresion> <condicion N>: [Secuencia de instrucciones] Fseleccin switch (<expresin>) { case <constante1>: [Secuencia de instrucciones] break; case <constante2>: [Secuencia de instrucciones] break; . . . case <constanteN>: [Secuencia de instrucciones] break; default: [Secuencia de instrucciones] } C++

GDAyP

pg. 5

UNIVERSIDAD CENTRAL DE VENEZUELA FACULTAD DE CIENCIAS ESCUELA DE COMPUTACIN ALGORITMOS Y PROGRAMACIN

Finalmente, es importante mencionar que la expresin de la seleccin ha de ser de un tipo elemental de C++, es decir, de un tipo elemental en nuestro pseudocdigo que no sea String. A continuacin se muestra un ejemplo sencillo para la seleccin de una opcin en un men. Pseudocdigo Entero entrada; Leer(entrada); Seleccin entrada == 1: Escribir(Seleccion la opcion 1); entrada == 2: Escribir(Ha seleccionado la opcion 2); entrada == 0: Escribir(Opcin ZERO); entrada < 0 o entrada > 2: Escribir(Opcin invlida); Fseleccin int entrada; cin >> entrada; switch (entrada) { case 1: cout << "Seleccion la opcion 1" << endl; break; case 2: cout << "Ha seleccionado la opcion 2" << endl; break; case 0: cout << "Opcin ZERO" << endl; break; default: cout << "Opcin invlida" << endl; break; } C++

GDAyP

pg. 6

UNIVERSIDAD CENTRAL DE VENEZUELA FACULTAD DE CIENCIAS ESCUELA DE COMPUTACIN ALGORITMOS Y PROGRAMACIN

Si la seleccin mltiple que deseamos escribir cumple con las condiciones descritas anteriormente, es posible realizar la traduccin a la seleccin mltiple de C++. Sin embargo, cuando esto no sea posible se puede utilizar una secuencia de selecciones simples anidadas. Por ejemplo: Pseudocdigo Seleccin <condicin1>: [Secuencia de instrucciones 1] <condicin2>: [Secuencia de instrucciones 2] . . . <condicinN>: [Secuencia de instrucciones N] Fseleccin } else { if (<condicion3>) { [Secuencia de instrucciones 3] } Else { . . . if (<condicionN>) { [Secuencia de instrucciones N] } } } } } else { if (<condicion2>) { [Secuencia de instrucciones 2] if (<condicion1>) { [Secuencia de instrucciones 1] C++

GDAyP

pg. 7

UNIVERSIDAD CENTRAL DE VENEZUELA FACULTAD DE CIENCIAS ESCUELA DE COMPUTACIN ALGORITMOS Y PROGRAMACIN

Como se puede ver, a medida que la cantidad de condiciones crece la legibilidad de la versin de C++ disminuye considerablemente. Afortunadamente, combinando los hechos de que las llaves son opcionales en C++ cuando el bloque contiene una sola instruccin y que C++ considera un bloque si/sino completo como una sola instruccin, es posible reescribir la secuencia de condicionales simples anidados anteriores de la siguiente forma. Pseudocdigo Seleccin <condicin1>: [Secuencia de instrucciones 1] <condicin2>: [Secuencia de instrucciones 2] . . . <condicinN>: [Secuencia de instrucciones N] Fseleccin } } Else if (<condicionN>) { [Secuencia de instrucciones N] if (<condicion1>) { [Secuencia de instrucciones 1] } Else if (<condicion2>) { [Secuencia de instrucciones 2] } Else if (<condicion3>) { [Secuencia de instrucciones 3] C++

Ejercicio a programar
Debe desarrollar un algoritmo que dados 10 nmeros (Xi), correspondientes a tiempos (segundos) de los participantes de una carrera, calcule e imprima el tiempo del participante que llego de primero. Detalles de entrada 10 nmeros Xi. Decimales y secuenciales. Detalles de la salida Nmero (R), decimal que representa el mejor tiempo de la competencia.

GDAyP

pg. 8

UNIVERSIDAD CENTRAL DE VENEZUELA FACULTAD DE CIENCIAS ESCUELA DE COMPUTACIN ALGORITMOS Y PROGRAMACIN

Ejemplos de Entrada y Salida Entrada: 1 4 3 7 5 2 5 6 10 9 10.2 10.1 5.6 2.3 4.7 9.0 2.1 5.7 8.9 7.1 Salida: 1 2.1

Entrega del Ejercicio:


Para los laboratorios de Algoritmos y Programacin se utilizar la plataforma Omicron Judge desarrollada por el Grupo de Extensin VPL. Es de carcter OBLIGATORIO el uso de sta plataforma para la entrega de los ejercicios de laboratorio, de lo contrario NO sern corregidos los mismos. Tambin es OBLIGATORIO responder el cuestionario habilitado, as como tambin enviar el cdigo fuente de la solucin del problema de laboratorio utilizando la plataforma Moodle.

Restricciones:
El proyecto debe ser desarrollado en C++, bajo el sistema operativo Ubuntu. Las nicas bibliotecas de C++ permitidas para desarrollar la herramienta es iostream y string. Se debe usar lectura y escritura estndar. El ejercicio es individual y la entrega del mismo ser obligatoriamente a travs de la plataforma de competencia Omicron Judge. Cualquier copia ser penalizada para todos los involucrados con 0. Seguir estrictamente el formato de entrada y salida pautado en este enunciado. ES OBLIGATORIO COMPLETAR EL CUESTIONARIO disponible para cada laboratorio en el tutorial habilitado en Moodle. Si usted no podido ingresar a la plataforma escriba un correo electrnico a su preparador indicando el inconveniente. La entrega ser hasta el viernes 7 de febrero.

GDAyP

pg. 9

UNIVERSIDAD CENTRAL DE VENEZUELA FACULTAD DE CIENCIAS ESCUELA DE COMPUTACIN ALGORITMOS Y PROGRAMACIN

Lmites:
0 Xi 1000000 Consultas: En caso de dudas, consultar a los preparadores de la materia: o o o o o o o o Eduardo Moreno, guayoucv@gmail.com David Rojas, davidrojas0791@gmail.com Javier Flores, javiverflo@gmail.com Jhonatan Gonzalez, jhonatangrs@gmail.com Rafael Machado, rafael.machado@ciens.ucv.ve Elohina Guevara, elohinaguevara@gmail.com Claudia Valarino, claudiavalarino@gmail.com Marjorie Figueroa, estefi1515@gmail.com

GDAyP

pg. 10