Вы находитесь на странице: 1из 23

Algoritmo

IEK, IEL, ICM, IAE


Año: 2014
Profesor: Cristian Cappo
ccappo@pol.una.py

CLASE #4 – 7-Marzo-2014
Algoritmos con sentencias condicionales
En esta clase

 Motivación del flujo condicionado de ejecución


 Sentencias condicionales
 Expresiones relacionales y lógicas
 Propósito, sintaxis y funcionamiento de la sentencia condicional
simple “si”.
 Propósito, sintaxis y funcionamiento de la sentencia condicional
escalonada “eval”.
 Algoritmos utilizando sentencias condicionales

Algoritmo – IEK/IEL/ICM/IAE 2
Expresiones relacionales
Son expresiones que permiten determinar la relación que existe entre dos
operandos a través de un operador relacional. El mismo permite comparar
los valores de dos operandos de igual naturaleza. Un expresión relacional
posee dos operandos y un operador relacional. El resultado de evaluar
una expresión relacional siempre es verdadera o falsa (valor lógico).

Forma general: <oper1> <op-rel> <oper2>

Operación Símbolo en SL
Igual ==
No Igual <>
Mayor que >
Menor que <
Mayor o igual >=
Menor o igual <=

Ejemplos (aplicables a numeros, cadenas y logicos):


10 > 20 ==> FALSE
20 == 10 ==> FALSE
5 == 5 ==> TRUE
“a” == “a” ==> TRUE
“ab” > “abc” ==> FALSE
SI == SI ==> TRUE

Algoritmo – IEK/IEL/ICM/IAE 3
Expresiones lógicas

Las expresiones lógicas consisten en variables booleanas, constantes


booleanas (SI,NO,TRUE,FALSE), expresiones relacionales y
operadores booleanos (and,or,not).

Las expresiones aritméticas pueden ser operandos de expresiones


relacionales y las relacionales de expresiones booleanas, por ello las
tres categorías de operadores deben ser puestas en niveles de
precedencia relativos a cada categoría.

Operación Símbolo en SL
Y and (conjunción)
O or (disyunción)
NO not (negación)

Aplicación de operadores booleanos

SI and SI = SI SI or SI = SI not SI = NO
NO and SI = NO SI or NO = SI not NO = SI
SI and NO = NO NO or SI = SI
NO and NO = NO NO or NO = NO

Algoritmo – IEK/IEL/ICM/IAE 4
Precedencia de operadores

Nivel Operador
1(mayor) ^
2 -,+ (cambio de signo, identidad)
3 *,/,%
4 +,-
5 ==,<>,<,<=,>,>=
6 not
7 and
8(menor) or

¿Qué resultado darían las siguientes expresiones?

10 > 20 or 10+90 == 5^2

5 >= 2 and 6^2^2 <= -30 or 20%7 and not 5 == 6

Recordar que % es el operador de módulo

Algoritmo – IEK/IEL/ICM/IAE 5
Propósito de las sentencias condicionales

- Condicionar el flujo de ejecución de un algoritmo.


- Permite tener procesos no lineales.

Ejecución Lineal Ejecución Condicionada


Inicio Inicio

Falsa Verdadera
Paso..1 Condic.

Paso..N Proceso-A Proceso-B

Fin Fin

Algoritmo – IEK/IEL/ICM/IAE 6
Sentencia “si”

SINTAXIS Inicio

si ( <expr-LOGICA> ) { SI
<lista-sentencias> Condic. Proceso
}
NO

Fin
Se ejecuta <lista-sentencias> cuando la condición resultante de
<expr-LOGICA> es verdadera

Nótese que en negrita están las palabras y símbolos obligatorios del


lenguaje.

<expr-LOGICA>
Retorna Verdadero(TRUE o SI) o Falso (FALSE o NO)

Algoritmo – IEK/IEL/ICM/IAE 7
Sentencia “si” – Ejemplo

Ejemplo con una expresión relacional simple

Imprimir el mensaje “Es un nro. negativo” cuando un número leído por


teclado es negativo.

programa cond_si
var
a : numerico
inicio
imprimir(“Ingrese un numero:”)
leer(a)
si ( a < 0 ) {
imprimir ("\nEs un nro. negativo")
}
imprimir(“Fin del programa”)
fin

Algoritmo – IEK/IEL/ICM/IAE 8
Sentencia “si” – Ejemplo

Ejemplo con una expresión lógica

Imprimir el mensaje “Es un nro. mayor a 100 y es par” cuando un número leído
por teclado es mayor a 100 y par.
var
a : numerico; espar : logico
inicio
imprimir(“Ingrese un nro.”); leer(a)
espar = FALSE

si ( a % 2 == 0 ) {
espar = TRUE
}

si ( a > 100 and espar ) {


imprimir ("\nEs un mayor a 100 y par")
}
fin

Algoritmo – IEK/IEL/ICM/IAE 9
Sentencia “si” con “sino”
Inicio
SINTAXIS

si ( <expr-condic> ) { NO SI
<lista-sentencias-verdadera> Condic.
sino
<lista-sentencias-falsa>]
} Proceso-A Proceso-B

Se ejecuta <lista-sentencias-verdadera> Fin


cuando la condición resultante de <expr-LOGICA>
es verdadera o <lista-sentencias-falsa> cuando la condición
resultante es falsa.

La palabra “sino” es opcional y puede


aparecer “n” veces

Algoritmo – IEK/IEL/ICM/IAE 10
Sentencia “si” con “sino” - ejemplo 1

Imprimir el mensaje “Es un nro. negativo” cuando un número leído por


teclado es negativo y “Es un nro. mayor o igual a cero” cuando no.

programa cond_si_sino
var
a : numerico
inicio
// Imprimir "es un nro. negativo" si
// el nro. leido lo es.
leer(a)

si ( a < 0 ) {
imprimir ("\nEs un nro. negativo")
sino
imprimir ("\nEs un nro.mayor o igual a cero")
}
fin

Algoritmo – IEK/IEL/ICM/IAE 11
Sentencia “si” con “sino” - ejemplo 2

Ejemplo con una expresión lógica:

Imprimir el mensaje “Es un nro. mayor a 100 y es par” cuando un número


leído por teclado es mayor a 100 y par.
var
a : numerico
espar : logico
inicio
leer(a)
si ( a % 2 == 0 ) {
espar = TRUE
sino
espar = FALSE
}
si ( a > 100 and espar ) {
imprimir ("\nEs un mayor a 100 y par")
}
fin

Algoritmo – IEK/IEL/ICM/IAE 12
Ejercicios con sentencias “si” y “si-sino”
Ejercicio 1
Hacer un algoritmo que determine si un alumno tiene o no derecho a examen
final en una materia. Un alumno tiene firma si la semisuma de los puntajes de
los parciales es mayor o igual a 60. Si tiene derecho entonces imprimir el
nombre y su promedio. Si no tiene derecho indicar que debe rendir el tercer
parcial.
Se leen los puntajes de los dos parciales y el nombre del alumno.
Ejemplos:
- Si p1=60 y p2=40 nombre=”Juan Perez”
Se debe imprimir
Juan Perez debe rendir el tercer parcial.

- Si p1=60 y p2=60 nombre=”Juan Perez”


Se debe imprimir
Juan Perez tiene firma y su promedio es 60.5

Algoritmo – IEK/IEL/ICM/IAE 13
Ejercicios con sentencias “si” y “si-sino”
Ejercicio 2
Hacer un algoritmo que determine si tres valores ingresados pueden ser lados
de una triángulo. Ninguno de sus lados puede ser superior a la suma de los
otros dos. Si los valores pueden ser lados de un triángulo, entonces calcular la
superficie según la fórmula del semiperímetro (ver ejercitario anterior)

Ejemplos:
- Si a=10, b=40 y c=100
Se imprime : “No pueden ser lados de un triangulo”.

- Si a=10, b=40 y c=30


Se imprime : “Pueden ser lados de un triangulo”.
Su superficie es:...

Algoritmo – IEK/IEL/ICM/IAE 14
Ejercicios con sentencias “si” y “si-sino”

Ejercicio 3
Determinar la cantidad de días de un año en particular, teniendo en cuenta los
siguientes criterios:
 Los meses de enero, marzo, mayo, julio, agosto, octubre, diciembre tienen 31
días.
 Los meses de abril, junio, setiembre, noviembre tienen 30 días.
 El mes de febrero tiene 28 días a no ser que sea un año bisiesto, en ese caso
tiene 29 días.
 Un año es bisiesto si es múltiplo de 4 pero no de 100 a no ser que lo sea
también de 400.

Algoritmo – IEK/IEL/ICM/IAE 15
Sentencia escalonada “eval”
SINTAXIS

eval {
caso ( <expr-LOGICA> )
<lista-sentencias>
caso ( <expr-LOGICA> )
<lista-sentencias>
caso ( <expr-LOGICA> )
<lista-sentencias>
[ sino
<lista-sentencias-sino> ]
}

[ ] : Indica opcionalidad
Se ejecuta <lista-sentencias> cuando la condición resultante de
<expr-LOGICA> es verdadera en cada “caso”

Se ejecuta <lista-sentencias-sino> cuando existe una claúsula


“sino” y todos los “casos” fueron falsos.

Algoritmo – IEK/IEL/ICM/IAE 16
Sentencia escalonada “eval”

Funcionamiento

Inicio
eval SI
Condic-a Proceso-a
NO
SI
Condic-b Proceso-b

NO

Proceso-sino

Fin

Algoritmo – IEK/IEL/ICM/IAE 17
Sentencia escalonada “eval” - ejemplo

Introducir el valor para una variable “a” e imprimir si es negativo, positivo o


cero.

programa pos_neg_cero
var
a : numerico
inicio
imprimir(“Introduzca un nro.:”); leer(a)
eval {
caso ( a == 0 ) {
imprimir (“Es cero”)
caso ( a > 0 )
imprimir (“Es positivo”)
caso ( a < 0 ) sino
imprimir (“Es negativo”) imprimir (“Es negativo”)
}
fin

Algoritmo – IEK/IEL/ICM/IAE 18
Ejemplo anterior con “si”- “sino”

programa pos_neg_cero
var
a : numerico
inicio
leer(a)
si ( a == 0 ) {
imprimir (“Es cero”)
sino si ( a > 0 )
imprimir (“Es positivo”)
sino si ( a < 0 )
imprimir (“Es negativo”)
}
fin

Algoritmo – IEK/IEL/ICM/IAE 19
Ejercicios con sentencias “si”,“si-sino” y “eval”

Ejercicio 4
Dada cuatro variables enteras a, b, c y d imprimir la variable cuyo valor es el
mayor. Solo imprimir el mensaje cuando efectivamente exista una variable mayor,
en caso contrario imprimir el mensaje “no existe una sola variable con valor
mayor” (ver ejemplos)
Ejemplos:
Mensaje a imprimir
a=10 b=20 c=15 d=19 Variable mayor b con valor 20.
a=10 b=20 c=15 d=20 No existe una sola variable con valor mayor.
a=10 b=10 c=10 d=5 No existe una sola variable con valor mayor.
Desarrollar el ejercicio con si-sino y con eval.

Algoritmo – IEK/IEL/ICM/IAE 20
Ejercicios con sentencias “si”,“si-sino” y “eval”

Ejercicio 5
Escribir un programa en SL que dada una fecha en formato DDMMAAAA, imprima
el nombre del dia de la semana que corresponda.
Para calcular utilice la siguiente fórmula para el Calendario Gregoriano,
considerando a=año, d=dia y m=mes
y0 = a - ( 14 – m ) / 12
x = y0 + y0/4 – y0/100 + y0/400
m0 = m + 12 . ( (14 - m)/12 ) - 2
d0 = (d + x + (31. m0)/12) % 7
Considerar en las divisiones solo el valor entero sin parte decimal.
El valor final de d0 corresponde al número del día de la semana tal que
0=Domingo, 1=lunes, 2=martes, .. , 6=sabado.
Ejemplo:
Dado el nro= 11032013 (11 de marzo de 2013) entonces se debe imprimir Lunes.

Algoritmo – IEK/IEL/ICM/IAE 21
Ejercicios con sentencias “si”,“si-sino” y “eval”
Ejercicio 6
Escribir un programa en SL que dada tres fechas en formato DDMMAAAA, imprima
las tres fechas pero en orden cronológico inverso (la fecha más reciente antes de
la fecha mas antigua). Además imprima en formato DD-Mes-AAAA, donde Mes son
los primeros tres caracteres del nombre del mes (ENE, FEB, MAR, .. , DIC)
Por ejemplo: 5012014, 10032009, 30122010 debe imprimirse
05-ENE-2014
30-DIC-2010
10-MAR-2009
Ejercicio 7
Dada la temperatura t (en Fahrenheit) y la velocidad del viento v ( en millas por
hora), se define la temperatura efectiva como:
0.16
w=35.74+0.6215t +(0.4275 t−35.75)v
Escriba un programa en SL que lea los valores de t y v e imprima la temperatura
efectiva en grados centígrados. La fórmula no es válida si t es mayor que 50 (en
valor absoluto) o si v es mayor que 120 o menos de 3. Si no se dan estas
condiciones imprima el mensaje adecuado ( t fuera de rango, v > 120 o v < 3 ).

Algoritmo – IEK/IEL/ICM/IAE 22
Tarea #2: Resolver los ejercicios 1, 2, 3, 4, 5, 6 y 7 de
estas diapositivas en SL.

A presentar en forma individual vía Educa en archivos


separados nombrados ej1.sl, ej2.sl .. etc.
Fecha de entrega: viernes 14/marzo hasta las 23:55 hs.

Al principio de cada archivo colocar sus datos a modo


de comentario:
/*
Nombre y Apellido, CI
Carrera: IEK/IEL/ICM/IAE/TSE
Algoritmo – 2014
Tarea #1 - Ej#
*/
Algoritmo – IEK/IEL/ICM/IAE 23