Lab_3_-_II-2013

10
UNIVERSIDAD CENTRAL DE VENEZUELA FACULTAD DE CIENCIAS ESCUELA DE COMPUTACIÓN ALGORITMOS Y PROGRAMACIÓN GDAyP pág. 1 Laboratorio 3 Estructuras condicionales: Simples y Múltiples Selección simple La estructura de control más común es el condicional simple. Dicha estructura evalúa una expresión lógica, comúnmente llamada condición, para determinar si un bloque de instrucciones ha de ser ejecutado. En su forma más simple, únicamente se indican las instrucciones a ejecutar en caso de ser verdadera la condición, mientras que, la otra forma permite indicar dos bloques de instrucciones, uno para ser ejecutado cuando la condición es verdadera y otra para cuando la condición es falsa. Pseudocódigo C++ Si <condición> entonces [Secuencia de instrucciones] Fsi if (<condición>) { [Secuencia de instrucciones] } Si <condición> entonces [Secuencia de instrucciones] Sino [Secuencia de instrucciones] Fsi if (<condición>) { [Secuencia de instrucciones] } else { [Secuencia de instrucciones] }

Transcript of Lab_3_-_II-2013

Page 1: Lab_3_-_II-2013

UNIVERSIDAD CENTRAL DE VENEZUELA FACULTAD DE CIENCIAS ESCUELA DE COMPUTACIÓN ALGORITMOS Y PROGRAMACIÓN

GDAyP pág. 1

Laboratorio 3

Estructuras condicionales: Simples y Múltiples

Selección simple

La estructura de control más común es el condicional simple. Dicha estructura evalúa una expresión lógica, comúnmente llamada condición, para determinar si un bloque de instrucciones ha de ser ejecutado. En su forma más simple, únicamente se indican las instrucciones a ejecutar en caso de ser verdadera la condición, mientras que, la otra forma permite indicar dos bloques de instrucciones, uno para ser ejecutado cuando la condición es verdadera y otra para cuando la condición es falsa.

Pseudocódigo C++

Si <condición> entonces

[Secuencia de instrucciones]

Fsi

if (<condición>)

{

[Secuencia de instrucciones]

}

Si <condición> entonces

[Secuencia de instrucciones]

Sino

[Secuencia de instrucciones]

Fsi

if (<condición>)

{

[Secuencia de instrucciones]

}

else

{

[Secuencia de instrucciones]

}

Page 2: Lab_3_-_II-2013

UNIVERSIDAD CENTRAL DE VENEZUELA FACULTAD DE CIENCIAS ESCUELA DE COMPUTACIÓN ALGORITMOS Y PROGRAMACIÓN

GDAyP pág. 2

El anidamiento de estructuras de control es posible de la misma forma que se realiza al utilizar pseudocódigo.

Pseudocódigo C++

Si <condición1> entonces

Si <condición2> entonces

[Secuencia de instrucciones]

Sino

[Secuencia de instrucciones]

Fsi

Fsi

if (<condición1>)

{

if (<condición2>)

{

[Secuencia de instrucciones]

}

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 instrucción.

Page 3: Lab_3_-_II-2013

UNIVERSIDAD CENTRAL DE VENEZUELA FACULTAD DE CIENCIAS ESCUELA DE COMPUTACIÓN ALGORITMOS Y PROGRAMACIÓN

GDAyP pág. 3

Selección múltiple

Como se vio en la sección anterior, la selección simple tiene traducción directa a C++. Sin embargo, la selección múltiple no solo no se puede traducir de forma directa sino que en muchos casos es simplemente imposible. A continuación se muestran lado a lado las definiciones léxicas de la selección múltiple en ambos lenguajes, de esta forma se intenta ilustrar las diferencias.

Pseudocódigo C++

Selección

<condición1>:

[Secuencia de instrucciones 1]

<condición2>:

[Secuencia de instrucciones 2]

.

.

.

<condiciónN>:

[Secuencia de instrucciones N]

Fselección

switch (<expresión>)

{

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]

}

Page 4: Lab_3_-_II-2013

UNIVERSIDAD CENTRAL DE VENEZUELA FACULTAD DE CIENCIAS ESCUELA DE COMPUTACIÓN ALGORITMOS Y PROGRAMACIÓN

GDAyP pág. 4

En primer lugar se puede observar que la versión en pseudocódigo selecciona una sección de código asociada a una condición, mientras que la versión de C++ asocia la selección completa a una expresión y luego utiliza valores constantes para determinar el bloque de código a ejecutar. Esto significa que solo un subconjunto de las situaciones que pueden ser expresadas en la selección múltiple de pseudocódigo se pude traducir como selección múltiple a C++. En particular cuando todas las condiciones <condición1>, <condición2>, …, <condiciónN> son de la forma <expresión>==<constante>. Es decir, si existe una expresión <expresión> para la cual si podemos reescribir la selección múltiple de la siguiente forma:

Pseudocódigo C++

Selección

<expresión>==<condición1>:

[Secuencia de instrucciones 1]

<expresión>==<condición2>:

[Secuencia de instrucciones 2]

.

.

.

<expresión>==<condiciónN>:

[Secuencia de instrucciones N]

Fselección

switch (<expresión>)

{

case <constante1>:

[Secuencia de instrucciones 1]

break;

case <constante2>:

[Secuencia de instrucciones 2]

break;

.

.

.

case <constanteN>:

[Secuencia de instrucciones N]

break;

}

Page 5: Lab_3_-_II-2013

UNIVERSIDAD CENTRAL DE VENEZUELA FACULTAD DE CIENCIAS ESCUELA DE COMPUTACIÓN ALGORITMOS Y PROGRAMACIÓN

GDAyP pág. 5

Además, resalta la palabra clave “default” en la primera versión de C++, ésta cláusula especial es opcional y permite asociar una secuencia de instrucciones al caso en el que la expresión no se evalúe a ninguna de las constantes provistas. Es decir, si se tiene una expresión más en la versión de pseudocódigo de la forma “<expresión> ≠ <condición 1> y <expresión> ≠ <condición 2> y … <expresión> ≠ <condición N>”, entonces se puede reemplazar ésta última por la cláusula default.

Pseudocódigo C++

Selección

<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]

Fselección

switch (<expresión>)

{

case <constante1>:

[Secuencia de instrucciones]

break;

case <constante2>:

[Secuencia de instrucciones]

break;

.

.

.

case <constanteN>:

[Secuencia de instrucciones]

break;

default:

[Secuencia de instrucciones]

}

Page 6: Lab_3_-_II-2013

UNIVERSIDAD CENTRAL DE VENEZUELA FACULTAD DE CIENCIAS ESCUELA DE COMPUTACIÓN ALGORITMOS Y PROGRAMACIÓN

GDAyP pág. 6

Finalmente, es importante mencionar que la expresión de la selección ha de ser de un tipo elemental de C++, es decir, de un tipo elemental en nuestro pseudocódigo que no sea String.

A continuación se muestra un ejemplo sencillo para la selección de una opción en un menú.

Pseudocódigo C++

Entero entrada;

Leer(entrada);

Selección

entrada == 1:

Escribir(“Seleccionó la opcion 1”);

entrada == 2:

Escribir(“Ha seleccionado la opcion 2”);

entrada == 0:

Escribir(“Opción ZERO”);

entrada < 0 o entrada > 2:

Escribir(“Opción inválida”);

Fselección

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 << "Opción ZERO" << endl;

break;

default:

cout << "Opción inválida" << endl;

break;

}

Page 7: Lab_3_-_II-2013

UNIVERSIDAD CENTRAL DE VENEZUELA FACULTAD DE CIENCIAS ESCUELA DE COMPUTACIÓN ALGORITMOS Y PROGRAMACIÓN

GDAyP pág. 7

Si la selección múltiple que deseamos escribir cumple con las condiciones descritas anteriormente, es posible realizar la traducción a la selección múltiple de C++. Sin embargo, cuando esto no sea posible se puede utilizar una secuencia de selecciones simples anidadas. Por ejemplo:

Pseudocódigo C++

Selección

<condición1>:

[Secuencia de instrucciones 1]

<condición2>:

[Secuencia de instrucciones 2]

.

.

.

<condiciónN>:

[Secuencia de instrucciones N]

Fselección

if (<condicion1>)

{

[Secuencia de instrucciones 1]

}

else

{

if (<condicion2>)

{

[Secuencia de instrucciones 2]

}

else

{

if (<condicion3>)

{

[Secuencia de instrucciones 3]

}

Else

{

.

.

.

if (<condicionN>)

{

[Secuencia de instrucciones N]

}

}

}

}

Page 8: Lab_3_-_II-2013

UNIVERSIDAD CENTRAL DE VENEZUELA FACULTAD DE CIENCIAS ESCUELA DE COMPUTACIÓN ALGORITMOS Y PROGRAMACIÓN

GDAyP pág. 8

Como se puede ver, a medida que la cantidad de condiciones crece la legibilidad de la versión de C++ disminuye considerablemente. Afortunadamente, combinando los hechos de que las llaves son opcionales en C++ cuando el bloque contiene una sola instrucción y que C++ considera un bloque si/sino completo como una sola instrucción, es posible reescribir la secuencia de condicionales simples anidados anteriores de la siguiente forma.

Pseudocódigo C++

Selección

<condición1>:

[Secuencia de instrucciones 1]

<condición2>:

[Secuencia de instrucciones 2]

.

.

.

<condiciónN>:

[Secuencia de instrucciones N]

Fselección

if (<condicion1>)

{

[Secuencia de instrucciones 1]

} Else if (<condicion2>) {

[Secuencia de instrucciones 2]

} Else if (<condicion3>) {

[Secuencia de instrucciones 3]

} Else if (<condicionN>) {

[Secuencia de instrucciones N]

}

Ejercicio a programar

Debe desarrollar un algoritmo que dados 10 números (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 números Xi. Decimales y secuenciales.

Detalles de la salida

Número (R), decimal que representa el mejor tiempo de la competencia.

Page 9: Lab_3_-_II-2013

UNIVERSIDAD CENTRAL DE VENEZUELA FACULTAD DE CIENCIAS ESCUELA DE COMPUTACIÓN ALGORITMOS Y PROGRAMACIÓN

GDAyP pág. 9

Ejemplos de Entrada y Salida

Entrada: Salida:

1 4 3 7 5 2 5 6 10 9 1

10.2

10.1

5.6

2.3

4.7

9.0

2.1

5.7

8.9

7.1

2.1

Entrega del Ejercicio:

Para los laboratorios de Algoritmos y Programación se utilizará la plataforma Omicron Judge desarrollada por el Grupo de Extensión VPL. Es de carácter OBLIGATORIO el uso de ésta plataforma para la entrega de los ejercicios de laboratorio, de lo contrario NO serán corregidos los mismos. También es OBLIGATORIO responder el cuestionario habilitado, así como también enviar el código fuente de la solución 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 estándar.

El ejercicio es individual y la entrega del mismo será obligatoriamente a través 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 electrónico a su preparador indicando el inconveniente.

La entrega será hasta el viernes 7 de febrero.

Page 10: Lab_3_-_II-2013

UNIVERSIDAD CENTRAL DE VENEZUELA FACULTAD DE CIENCIAS ESCUELA DE COMPUTACIÓN ALGORITMOS Y PROGRAMACIÓN

GDAyP pág. 10

Límites:

0 ≤ Xi ≤ 1000000

Consultas:

En caso de dudas, consultar a los preparadores de la materia:

o Eduardo Moreno, [email protected]

o David Rojas, [email protected]

o Javier Flores, [email protected]

o Jhonatan Gonzalez, [email protected]

o Rafael Machado, [email protected]

o Elohina Guevara, [email protected]

o Claudia Valarino, [email protected]

o Marjorie Figueroa, [email protected]