Está en la página 1de 27

Algoritmo

IEK, IEL, ICM, IAE,IEN


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

CLASE #4 – 3-Marzo-2017
Algoritmos con sentencias condicionales
En esta clase

 Revisión de conceptos anteriores


 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/IEN 2
Algoritmo lineal – ejemplo de la clase pasada
Escriba un programa que calcule el valor denominado círculo máximo entre dos
puntos de la tierra. Este valor corresponde a la menor distancia entre los puntos
en una superficie de una esfera. Para ello recibe dos coordenadas, una de cada
punto de la tierra (xg1, xm1, xs1: yg1, ym1, ys1); (xg2, xm2, xs2, yg2, ym2,
ys2)) que corresponde a la latitud y longitud en grados, minutos y segundos
sexagesimales de ambos puntos. Se asumen que los datos proporcionados son
correctos.
La siguiente fórmula corresponde al cálculo del círculo máximo en metros.

En este caso x1, x2, y1, y2 corresponden a los valores en radianes. Usted debe
encargarse de realizar la conversión correspondiente.
Al final debe imprimir la distancia entre dichos puntos expresada en kilómetros.
En SL no existe la función arccos() por lo que debe utilizar un cálculo auxiliado por
arctan() que sí existe en SL.

Algoritmo – IEK/IEL/ICM/IAE/IEN 3
Ejemplo de los datos de entrada:
La distancia entre Asunción y París ( Sur(S) y Oeste(W) son
negativos , Norte(N) y Este(E) positivos )
Asunción ( -25º16'00'' -57º40'00”) (tomado de
https://es.wikipedia.org/wiki/Asunción)
París (48º51'24” -2º21'07'') (tomado de
https://es.wikipedia.org/wiki/París)
El resultado final es aproximadamente 9900 (9899) km. Puede
verificar en el sitio
http://www.movable-type.co.uk/scripts/latlong.html

Algoritmo – IEK/IEL/ICM/IAE/IEN 4
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/IEN 5
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/IEN 6
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/IEN 7
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/IEN 8
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/IEN 9
Sentencia “si”

Ejemplo #1

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/IEN 10
Sentencia “si” – Ejemplo
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
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/IEN 11
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/IEN 12
Sentencia “si” con “sino”

Ejemplo #3

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/IEN 13
Sentencia “si” con “sino”
Ejemplo #4

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/IEN 14
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 parc1=60 y parc2=40 nombre=”Juan Perez”
Se debe imprimir
Juan Perez debe rendir el tercer parcial.

- Si parc1=60 y parc2=60 nombre=”Juan Perez”


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

Algoritmo – IEK/IEL/ICM/IAE/IEN 15
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 o igual 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=35


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

Algoritmo – IEK/IEL/ICM/IAE/IEN 16
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/IEN 17
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/IEN 18
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/IEN 19
Sentencia escalonada “eval” - ejemplo

Ejemplo #5

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/IEN 20
Ejemplo #6

Igual que el anterior pero 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/IEN 21
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/IEN 22
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/IEN 23
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:

w= 35.74+ 0.6215t + (0.4275 t− 35.75)v


0.16

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/IEN 24
Ejercicios con sentencias “si”,“si-sino” y “eval”
Ejercicio 8
Existen varios formatos para representar color. Dos ejemplos son RGB (red, green,
blue) que son enteros de 0 a 255 y el formato CMYK (cyan,magenta, yellow,
black) que son reales de 0 a 1.0. Escribir un programa que lea tres variables
enteras de 0 a 255 que corresponda a RGB y lo convierta a CMYK. Si todos los
valores RGB son cero entonces todos los valores CMYK también lo son y el valor de
K es 1. De otra forma utilice la siguiente fórmula:
w = maximo(R/255, G/255, B/255)
C = (w - ( R / 255 ) ) / w
M = (w - ( G / 255 ) ) / w
Y = (w - ( B / 255 ) ) / w
K = 1 - w

Verifique que los valores leidos se encuentren entre 0 y 255.


Ejemplo:
Si R=45 G=50 B=80
Se debe imprimir C=0.437 M=0.375 Y=0 K= 0.686
Puede usar este sitio web para verificar (puede variar según los decimales tomados)
http://www.rapidtables.com/convert/color/rgb-to-cmyk.htm

Algoritmo – IEK/IEL/ICM/IAE/IEN 25
Ejercicios con sentencias “si”,“si-sino” y “eval”
Ejercicio 9
Leer cuatro valores numéricos a, b, c y d. Imprimir el mensaje “Estan en orden
ascendente” si los valores leidos estan en orden ascendente a<b<c<d. Si no lo
estan imprimir “NO estan en orden ascendente”.
Verifique que los valores leidos sean todos diferentes. En caso de que exista uno o
más valores iguales imprimir el mensaje “Variables con valores iguales”.
Ejemplos
Si a=1 b=2 c=3 d=10 se imprime “Estan en orden ascendente”
Si a=1 b=2 c=11 d=10 se imprime “NO Estan en orden ascendente”
Si a=1 b=1 c=3 d=10 se imprime “Variables con valores iguales”
Ejercicio 10
Leer los valores de los tres lados de un triángulo. Si pueden ser lados de un
triángulo entonces imprimir el tipo de triángulo (equilatero, isósceles o escaleno).
Ejercicio 11
Introducir la fecha de nacimiento en formato DDMMAAAA. Si corresponde a una
fecha válida entonces indicar el signo zodiacal a que corresponde esta fecha.

Algoritmo – IEK/IEL/ICM/IAE/IEN 26
Tarea #2:
Resolver los ejercicios 1 al 11 de estas diapositivas en
SL.

A presentar en forma grupal vía EDUCA en archivos


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

Al principio de cada archivo colocar sus datos a modo


de comentario:
/*
Nombre y Apellido 1, CI
Nombre y Apellido 2, CI
Carrera: IEK/IEL/ICM/IAE/TSE
Algoritmo – 2017
Tarea #2 - Ej#
*/
Algoritmo – IEK/IEL/ICM/IAE/IEN 27

También podría gustarte