desarrollo de logica de programacion unidades de 2.3 a 2.5

25
2.4 Estructuras de selección Una decisión es la estructura según la cual se puede escoger uno de entre dos caminos lógicos dependiendo de una condición que al ser evaluada nos brinda la oportunidad de saber cuál de los dos caminos escoger. La evaluación de dicha condición siempre va a originar una respuesta VERDADERA (cuando la condición se cumple) o FALSA (cuando dicha condición no se cumple) y con ello se podrá saber cuál es el conjunto de instrucciones a resolver. La representación de una estructura selectiva se hace con palabras en pseudocódigo (if – then – else o en español si – entonces - sino) y en flujograma con una figura geométrica en forma de rombo. La condición, en algoritmos técnicos, se podrá expresar en términos de dos tipos de operadores: los operadores relacionales y los operadores booleanos. Recordemos que los operadores relacionales son aquellos que nos originan una respuesta Verdadera o Falsa y que corresponden a los símbolos mayor que, menor que, mayor o igual, menor o igual, igual (de comparación) y diferente de. Los operadores booleanos son aquellos que nos permiten establecer conexiones entre expresiones en donde aparezcan los operadores booleanos y corresponden a los operadores: AND: Genera Verdadero si todas las expresiones relacionales conectadas son Verdaderas OR: Genera Verdadero si al menos una de las expresiones conectadas es Verdadera NOT que invierte el sentido lógico de la expresión Con estos elementos podemos recordar que la utilización de las decisiones como estructura básica de programación no tiene ninguna restricción y que pueden considerarse como válidos los siguientes casos: Una decisión dentro de otra Una decisión a continuación de otra Muchas decisiones dentro de otras Muchas decisiones a continuación de otras Los lenguajes de programación normalmente cuentan con una forma de seleccionar uno de entre varios caminos lógicos que correspondería a una pequeña modificación de la estructura de DECISIÓN pero que en últimas parte del mismo supuesto. Las estructuras selectivas o alternativas se clasifican en: a) Simples

Upload: miguel-martinez

Post on 09-Aug-2015

33 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: Desarrollo de logica de programacion unidades de 2.3 a 2.5

2.4 Estructuras de selección

Una decisión es la estructura según la cual se puede escoger uno de entre dos caminos lógicos

dependiendo de una condición que al ser evaluada nos brinda la oportunidad de saber cuál  de los dos

caminos escoger. La evaluación de dicha condición siempre va a originar una respuesta VERDADERA

(cuando la condición se cumple) o FALSA (cuando dicha condición no se cumple) y con ello se podrá

saber cuál es el conjunto de instrucciones a resolver. La representación de una estructura selectiva se

hace con palabras en pseudocódigo (if – then – else o en español si – entonces - sino) y en flujograma

con una figura geométrica en forma de rombo.

La condición, en algoritmos técnicos, se podrá expresar en términos de dos tipos de operadores: los

operadores relacionales y los operadores booleanos. Recordemos que los operadores relacionales

son aquellos que nos originan una respuesta Verdadera o Falsa y que corresponden a los símbolos

mayor que, menor que, mayor o igual, menor o igual, igual (de comparación) y diferente de. Los

operadores booleanos son aquellos que nos permiten establecer conexiones entre expresiones en

donde aparezcan los operadores booleanos y corresponden a los operadores:

AND: Genera Verdadero si todas las expresiones relacionales conectadas son Verdaderas

OR: Genera Verdadero si al menos una de las expresiones conectadas es Verdadera

NOT que invierte el sentido lógico de la expresión

 

Con estos elementos podemos recordar que la utilización de las decisiones como estructura básica de

programación no tiene ninguna restricción y que pueden considerarse como válidos los siguientes

casos:

Una decisión dentro de otra

Una decisión a continuación de otra

Muchas decisiones dentro de otras

Muchas decisiones a continuación de otras

Los lenguajes de programación normalmente cuentan con una forma de seleccionar uno de entre

varios caminos lógicos que correspondería a una pequeña modificación de la estructura de DECISIÓN

pero que en últimas parte del mismo supuesto.

Las estructuras selectivas o alternativas se clasifican en:

a) Simples

b) Dobles

c) Compuestas

d) Múltiples

Page 2: Desarrollo de logica de programacion unidades de 2.3 a 2.5

2.4.1 Estructuras selectivas simples

Se identifican porque están compuestos únicamente de una condición.

La estructura  si – entonces evalúa la condición y en tal caso:

Si la condición es verdadera, entonces ejecuta la acción Si (o acciones si son varias).

Si la condición es falsa, entonces no se hace nada.

 

Representación gráfica:

 

DONDE:

Condición: Expresa la condición o conjunto de condiciones a evaluar

Acción: Expresa la operación o conjunto de operaciones que se van a realizar si la condición resulta

verdadera.

 

 

EJEMPLOS Construir un algoritmo tal, que dado como dato la calificación de un alumno en un examen, escriba

Page 3: Desarrollo de logica de programacion unidades de 2.3 a 2.5

DEFINICIÓN DEL PROBLEMA

El mismo enunciado.

ANÁLISIS DEL PROBLEMA

Salidas: mensaje de aprobado si se cumple la condición.

Entradas: calificación

Datos adicionales:   un alumno aprueba si la calificación es mayor o igual que 7.

Sección de declaraciones:

Var Real: Cal

Donde Cal  =  calificación“Aprobado” en caso que esa calificación fuese mayor o igual que 7.

Page 4: Desarrollo de logica de programacion unidades de 2.3 a 2.5

PRUEBA MANUAL:

2.4.2 Estructuras selectivas dobles

Son estructuras lógicas que permiten controlar la ejecución de varias acciones y se utilizan cuando se

tienen dos opciones de acción, por la naturaleza de estas se debe ejecutar una o la otra, pero no

ambas a la vez, es decir, son mutuamente excluyentes.

 

Page 5: Desarrollo de logica de programacion unidades de 2.3 a 2.5

REPRESENTACIÓN GRÁFICA:

DONDE:

Condición:       Expresa la condición o conjunto de condiciones a evaluar

Acción 1:                     Expresa la operación o conjunto de operaciones que se van a realizar si la

condición resulta verdadera.

Acción 2:                     Expresa la operación o conjunto de operaciones que se van a realizar si la

condición resulta falsa

 REPRESENTACIÓN PSEUDOCODIFICADA.

Español                                                                      Inglés

Si <condición> entonces                                           If <condición> then

            <acción S1>                                                               <acción S1>

sino                                                                            else

            <acción S2>                                                               <acción S2>

Fin_Si                                                                         End_if

 

Page 6: Desarrollo de logica de programacion unidades de 2.3 a 2.5

En este caso se constituye en una selección de dos posibilidades. Si la condición es verdadera se

ejecuta la acción 1, y si es falsa, se ejecuta la acción 2. En el Flujograma es recomendable que el

camino verdadero deba colocarse a la derecha y lo falso a la izquierda. En el diagrama N-S no se

puede cambiar el orden del Si y No. 

 

EJEMPLOS

 Dado como dato la calificación de un alumno en un examen, escriba “aprobado” si su calificación es mayor o igual que 7 y “Reprobado” en caso contrario.

 

EJEMPLOS

Page 7: Desarrollo de logica de programacion unidades de 2.3 a 2.5

Dado el sueldo de un empleado, encontrar el nuevo sueldo si obtiene un aumento del 10%

si su sueldo es inferior a $600, en caso contrario no tendrá aumento.

DEFINICIÓN DEL PROBLEMA.

El mismo enunciado.

ANALISIS DEL PROBLEMA.

Salidas: nuevo sueldo

Entradas: sueldo del empleado

Page 8: Desarrollo de logica de programacion unidades de 2.3 a 2.5

2.4.3 Estructuras selectivas compuestas

En la solución de problemas encontramos numerosos casos en los que luego de tomar una decisión y marcar el camino correspondiente a seguir, es necesario tomar otra decisión. Dicho proceso puede repetirse numerosas veces.

En aquellos problemas en donde un bloque condicional incluye otro bloque condicional se dice que un bloque está anidado dentro del otro.

A este tipo de estructuras se les conoce también como estructuras selectivas anidadas.

 

Page 9: Desarrollo de logica de programacion unidades de 2.3 a 2.5

 

En este caso hay dos condiciones, la primera condición S1 es una selectiva simple, porque solamente tiene una posibilidad. Cuando es verdadera, se ejecuta la condición S2.  Si es falsa, se continúa directamente con el siguiente bloque de diagrama. La condición S2 es selectiva doble, tiene dos posibilidades. Cuando es verdadera, se ejecuta la acción S21 y si es falsa, se ejecuta la acción S22.

EJEMPLOS

 1. Determinar la cantidad de dinero que recibirá un trabajador por concepto de las horas extras trabajadas en una empresa, sabiendo que cuando las horas de trabajo exceden de 40, el resto  se consideran horas extras y que éstas se pagan al doble de una hora normal cuando no exceden de 8;  si las horas extras exceden de 8 se pagan las primeras 8 al  doble de lo que se paga por una hora normal y el resto al triple.DEFINICIÓN DEL PROBLEMA

El mismo enunciado.

ANÁLISIS DEL PROBLEMA.

Datos de salida: Pago.

Datos de entrada: número de horas trabajadas y pago por hora normal.

Datos Adicionales:

Lo primero que hay que determinar es si el trabajador trabajó horas extras o no.

Encontrar las horas extras de la siguiente forma:

Horas extras = horas trabajadas – 40

En caso que sií trabajó horas extras:

Si horas extras > 8 entonces a horas extras excedentes de 8 = horas extras –8 y pago por horas extras = pago por hora normal * 2 * 8 + pago por hora normal * 3 * horas extras excedentes de 8

De otra forma (solo horas al doble)  pago por horas extras = pago por hora normal * 2 * horas extras.

Finalmente, pago total que recibirá el trabajador será:

Pago = pago por hora normal * 40 + pago por horas extras.

Si no trabajó horas extras tendremos:

Page 10: Desarrollo de logica de programacion unidades de 2.3 a 2.5

Pago = pago por hora normal * horas trabajadas.

Definición de variables:

ht = horas trabajadas                                     het = horas extras que exceden de 8

ph = pago por hora normal                            phe = pago por horas extras

he = horas extras                                           pt = pago que recibe el trabajador

DECLARACIÓN DE VARIABLES:

ENTERO: ht, he, het            REAL: ph,  phe, pt

PSEUDOCÓDIGO:

Begin

            Read (ht, ph)

            If ht >40 then

                he ß ht – 40

                If he > 8 then

                   het ß he – 8

                        phe ß ph * 2 * 8 + ph * 3 * het

                else

                        phe ß ph * 2 * he

                 End_if

                 pt ß ph * 40 + phe

            else

                 pt <-- ph * ht

            End_if

Page 11: Desarrollo de logica de programacion unidades de 2.3 a 2.5

            Print (“El pago total de horas trabajadas es:”, pt)

Fin

 

 

EJEMPLO 2.

 Leer tres números enteros diferentes entre sí y determinar el número mayor de los tres.

Page 12: Desarrollo de logica de programacion unidades de 2.3 a 2.5

PRUEBA MANUAL DEL ALGORITMO

ENTRADAPROCESO SALIDA

N1 N2 N3 NM10 8 1

(N1 > N2) and (N1 > N3)?

(10>8) and (10>1)?  YES

NM = 10

102 13 4

(N1 > N2) and (N1 > N3)?

(2 > 13) and (2 > 4)

    F      and    F       NO

(N2 > N3)?

(13 > 4) YES

NM = 13

13

5 2 8

(N1 > N2) and (N1 > N3)?

(5 > 2) and (5 >8)

    T      and    F       NO

(N2 > N3)?

(2 > 8)   NO

Page 13: Desarrollo de logica de programacion unidades de 2.3 a 2.5

NM = 8

Page 14: Desarrollo de logica de programacion unidades de 2.3 a 2.5

2.4.4 Estructuras selectivas múltiples

Con frecuencia es necesario que existan más de dos elecciones posibles. Este problema se podría

resolver por estructuras selectivas simples o dobles, anidadas o en cascada, pero si el número de

alternativas es grande puede plantear serios problemas de escritura y de legibilidad.

Usando la estructura de decisión múltiple se evaluará una expresión que podrá tomar n valores

distintos, 1, 2 , 3, ...., n  y según que elija uno de estos valores en la condición, se realizará una de las

n acciones o lo que es igual, el flujo del algoritmo seguirá sólo un determinado camino entre los n

posibles.

Esta estructura se representa por un selector el cual si toma el valor 1 ejecutará la acción 1, si toma el

valor 2 ejecutará la acción 2, si toma el valor N realizará la acción N.

 Así, si el selector toma el valor 1 se ejecutará la acción 1, si toma el valor 2 se ejecutará la acción 2, si

toma el valor N, se realizará la acción N. De otra forma, si no es ningún caso de los anteriores,

significa que no se cumplió ninguna de las anteriores, entonces se realizará la acción X.

Deberá reemplazar Selector por variables, propiedad o expresión que vaya a ser el valor clave.

EJEMPLO:

Diseñar un algoritmo tal que dados como datos dos variables de tipo entero,

obtenga el resultado de la siguiente función:

DEFINICION DEL PROBLEMA

El mismo enunciado.

Page 15: Desarrollo de logica de programacion unidades de 2.3 a 2.5

 ANALISIS DEL PROBLEMA

Salidas: Resp

Entradas:  V, num

Datos adicionales: según el valor que tome num, así encontraremos Resp con las

Page 16: Desarrollo de logica de programacion unidades de 2.3 a 2.5

fórmulas dadas.

Sección de Declaraciones:

Var  integer: V, num

Page 17: Desarrollo de logica de programacion unidades de 2.3 a 2.5

       Real: resp

Donde resp será el resultado de la función, V  y num los valores de las dos variables de entrada

PRUEBA MANUAL DEL ALGORITMO

ENTRADAPROCESO SALIDA

NUM V

Switch (1)  resp=100 * 4

Resp = 400

Resp1 4

400

5 2 Switch(5)  default:

Resp = 0

0 Para este ejercicio es recomendable agregar una validación antes de entrar al switch, ya que V nunca puede ser cero pues invalida la opción 3 al volverse indeterminada la división.

2.4.5 Expresiones lógicas

Sirven para plantear condiciones o comparaciones y dan como resultado un valor booleano verdadero

o falso, es decir, se cumple o no se cumple la condición. Se pueden clasificar en simples y complejas.

Las simples son las que usan operadores relacionales y las complejas las que usan operadores

lógicos.

EJEMPLO

Un ejemplo en el cual usamos el operador lógico AND sería:

Una escuela aplica dos exámenes a sus aspirantes, por lo que cada uno de ellos obtiene dos

calificaciones denotadas como C1 y C2. El aspirante que obtenga calificaciones mayores que

80 en ambos exámenes es aceptado; en caso contrario es rechazado.

En este ejemplo se dan las condiciones siguientes:

Page 18: Desarrollo de logica de programacion unidades de 2.3 a 2.5

If (C1 >= 80) and (C2 >= 80) then

            print (“aceptado”)

else

            print (“rechazado”)

end_if

Note que también usa operadores relacionales. Por lo general cuando hay operadores lógicos, éstos

van acompañados de operadores relacionales.

Un ejemplo usando el operador lógico OR sería:

Una escuela aplica dos exámenes a sus aspirantes, por lo que cada uno de ellos obtiene dos

calificaciones denotadas como C1 y C2. El aspirante que obtenga una calificación mayor que 90 en

cualquiera de los exámenes es aceptado; en caso contrario es rechazado.

En este caso se dan las condiciones siguientes:

 If (C1 >=90) or (C2 >=90) then

            print (“aceptado”)

else

            print (“rechazado”)

Fin_si

La instrucción equivale a OR ya que nos dice que puede ser en cualquiera de los exámenes no

necesariamente en los dos. En el ejemplo 1 la palabra ambos equivalía a seleccionar la instrucción

AND.

Si la instrucción nos dijera “que obtenga una nota en cualquiera de los exámenes pero no en ambos”,

nos estaría indicando una instrucción XOR que es un tipo de OR pero exclusivo. Es decir, no puede

considerarse el caso en que tenga la misma nota en los dos exámenes, solo en uno de los dos.

2.5 Estructuras cíclicas

2.5.1 Conceptios básicos

Estos conceptos básicos de un programa son fundamentales en las estructuras repetitivas.

 2.5.2 BUCLES (LAZO)

Page 19: Desarrollo de logica de programacion unidades de 2.3 a 2.5

El bucle, ciclo o lazo, es un segmento de un algoritmo o programa cuyas instrucciones se repiten un

número determinado de veces, mientras se cumple una determinada condición específica (existe o es

verdadera la condición).[1]

 Un ciclo tiene las siguientes características:

a. El conjunto de instrucciones debe ser finito

b. La cantidad de veces que se repita dicho conjunto de instrucciones también debe ser finita. En

algunos casos esta cantidad de veces va a depender de una condición explícita y en otros casos va a

depender de una condición implícita. Una condición es explícita cuando depende solamente de la

misma ejecución del programa sin que sea importante la participación del usuario. Asimismo una

condición es implícita cuando depende solamente de la voluntad del usuario y por lo tanto la cantidad

de iteraciones o repeticiones del ciclo podría llegar a ser diferente cada vez pues sería posible que

cambiara con cada usuario.

c. Deben estar claramente demarcados el inicio y el fin del ciclo. En los casos en los cuales solo exista

una instrucción a iterar, no serán necesarias dichas marcas.

d. Dentro de un ciclo podrá ir cualquiera de las otras estructuras que se han estudiado incluyendo

otros ciclos.

Un bucle consta de tres partes:

Decisión

Cuerpo del bucle

Salida del bucle

 2.5.3 Iteración

Es cada una de las diferentes pasadas o ejecuciones de todas las instrucciones contenidas en el

bucle.

 2.5.4 Contadores

Un contador es una variable cuyo valor se incrementa o decrementa en una cantidad fija en cada

iteración.  Se utilizan en los siguientes casos:

Para contabilizar el número de veces que es necesario repetir una acción (variable de control

de un bucle)

Para contar un suceso particular solicitado por el enunciado del problema (asociado a un

bucle independiente)

Representa la variable de control del ciclo.

Toma un valor inicial (generalmente 0 ó 1) y se incrementa en la mayoría de los casos.

Toma un valor inicial y se compara con el valor final.

 

Page 20: Desarrollo de logica de programacion unidades de 2.3 a 2.5

 

Los contadores se utilizan con la finalidad de contar sucesos o acciones internas de un bucle; deben

realizar una operación de inicialización y posteriormente las sucesivas de incremento o decremento

del mismo.

La inicialización consiste en asignarle al contador un valor. Se situará antes y fuera del bucle.

Representación:

<nombre del contador>  ß <nombre del contador> + <valor constante>

Si en vez de incremento es decremento se coloca un menos en lugar del más.

Ejemplo:       i = i + 1  (incremento)

                     i = i – 1 (decremento)  

  2.5.5 Acumulador o totalizador

Un acumulador es un campo de memoria que suma sobre sí misma un conjunto de valores para de

esta manera tener la suma de todos ellos en una sola variable. Se utiliza en aquellos casos en que se

desea obtener el total acumulado de un conjunto de cantidades, siendo preciso inicializarlo con el

valor cero.

Además en las situaciones en que hay que obtener un total como producto de distintas cantidades se

utiliza un acumulador, debiéndose inicializar con el valor.

 

Page 21: Desarrollo de logica de programacion unidades de 2.3 a 2.5

 

La diferencia entre un contador y un acumulador es que mientras el primero va aumentando de uno en

uno en un valor constante, el acumulador va aumentando en una cantidad variable.

Representación:   <Nombre del acumulador> ß <nombre del acumulador> + <valor variable>

[1] Tomado de enriquebarrueto0.tripod.com/algoritmos/cap03.doc

EJEMPLO DE ACUMULADOR Y TOTALIZADOR.

Debe notar que el cambio de las variables contadoras se realiza de uno en uno y el de las variables

acumuladoras de la suma de los números.

Page 22: Desarrollo de logica de programacion unidades de 2.3 a 2.5