Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Y AUTOMATICA
UNIDAD 6
Programación Estructurada
Cátedra:
INFORMATICA I (BIO)
COMPUTACION I (ELO)
Índice
6 Programación Estructurada
1
COMPUTACIÓN I (ELO) - INFORMÁTICA I (BIO) UNIDAD VI: PROGRAMACIÓN ESTRUCTURADA
Efectivización de la solución
Esta etapa también llamada "codificación" consiste en expresar el método o
procedimiento elegido de manera tal que pueda ser interpretado por el procesador que
llevara a cabo la solución.
Ejecución y evaluación de la solución
Es la última etapa y comprende la ejecución del procedimiento elegido y la evaluación
de los resultados obtenidos.
El análisis del enunciado debe hacerse teniendo en cuenta el conocimiento que posee el
encargado de lograr la solución del problema. El grado de desmenuzamiento no es igual para
un experto en determinado tema que aquel que recién se inicia.
Ejemplo:
T: Preparar una tortilla de papas
El enunciado de este problema basta para que un cocinero experto pueda resolverlo sin
información adicional, pero si este no es el caso, debemos describir los pasos necesarios para
realizar la preparación. Esta nueva descripción puede ser:
t1: mezclar papas, huevos y un poco de sal en un recipiente.
t2: freír.
Esto podría resolver el problema si el encargado de encontrar la solución no fuera una
persona que da sus primeros pasos en tareas relativas a la cocina, ya que esta forma de
expresión presupone muchas cosas. Si por el contrario este problema debiera resolverlo una
persona que no sabe cocinar, debemos detallar cada uno de los pasos mencionados, pues
estos, no son lo bastante simple para un principiante. Con este objetivo procederemos a
especificar los detalles de cada uno de los pasos, entonces:
Descomposición de t1:
t1.1: Cortar las papas en láminas.
t1.2: Dorar las papas.
t1.3: Batir los huevos en un recipiente.
t1.4: Colocar las papas en el recipiente con los huevos y poner un poco de sal.
Descomposición de t2:
t2.1: Calentar el aceite en la sartén.
t2.2: Colocar el contenido del recipiente en la sartén.
t2.3: Dorar la tortilla de ambos lados.
Este grado de descomposición quizás no sea suficiente, por que por ejemplo el ejecutor podría
ser un niño. En este caso se deberá explicitar aun más. Tomamos como ejemplo la subtarea
t1.3 que podría conducir a:
Descomposición de t1.3:
t1.3.1: Poner los tres huevos sobre la mesada.
Repita
t1.3.2: Tomar un huevo de la mesada.
t1.3.3: Romper el huevo y colocar su contenido en el recipiente.
t1.3.4: Tirar la cáscara a la basura.
hasta que no haya mas huevos sobre la mesada.
En este último paso se hizo uso de un esquema de repetición que fundamentaremos mas
adelante.
Ejercicios Propuestos:
2
COMPUTACIÓN I (ELO) - INFORMÁTICA I (BIO) UNIDAD VI: PROGRAMACIÓN ESTRUCTURADA
6.3.1 Procesador
Es toda entidad (cosa o persona) capaz de "entender o mejor dicho INTERPRETAR" un
! enunciado y ejecutar el trabajo indicado por él. En otras palabras es quien materializa las
acciones necesarias para solucionar el problema.
6.3.2 Ambiente
6.3.3 Acción
! Es cada uno de los pasos o etapas que el procesador ejecuta para llegar a la solución o
Acción es todo evento que modifica el ambiente. Las Acciones son Verbos.
Acción Primitiva
! Para un procesador dado una acción es primitiva, si su enunciado es suficiente para que
pueda realizarla sin información adicional.
Acción No Primitiva o Acción Compuesta
Son aquellas en que su enunciado no puede ser interpretado directamente por el procesador,
por lo tanto debe ser descompuesta en acciones cada vez mas simples hasta que cada una de
ellas sea una acción primitiva.
3
COMPUTACIÓN I (ELO) - INFORMÁTICA I (BIO) UNIDAD VI: PROGRAMACIÓN ESTRUCTURADA
Dado un trabajo T, por medio de un enunciado no primitivo, tal que transforme el ambiente,
! desde un estado inicial Ei en un estado final Ef, es posible encontrar una descomposición t1,
t2,..... tn, que constituyan una secuencia de enunciados que ejecuten el trabajo T.
t1.1
Ei = Ei1
t1.2
t1
Ei2 = Ef1
Ei t2 t1.m
Ei3 = Ef2
Ef
T t3
Ei4 = Ef3
Ef
Ein = Efn-1
tn
Efn = Ef
Como se observa en la figura 6.1, cada trabajo tk, transforma el ambiente de un estado Eik
(estado inicial para la tarea k) en un estado final Efk (estado final de la tarea k) y que a su vez
es el estado inicial para la tarea k+1.
Para cada enunciado tk existen dos posibilidades, a saber:
tk es una acción primitiva para el procesador, dando así por terminada la descomposición de
tk.
tk no es una acción primitiva para el procesador debiéndose descomponer esta en una
secuencia tk1,tk2,.....tkn.
Para aclarar las diferencias entre acciones primitivas y compuestas consideremos el siguiente
trabajo.
“Preparar sopa para cuatro personas”
• Si el procesador es un cocinero experimentado el interpretará este enunciado, por lo tanto
para este procesador esta es una acción primitiva.
• Si el procesador es una persona con escasos conocimientos de cocina, no sabrá
interpretar el enunciado y habrá que descomponerlo en una serie de acciones menores,
las cuales podrán interpretar y por lo tanto estas serán acciones primitivas, por ejemplo:
tomar una olla de 1,5 lts.
verter 1 lt de agua
poner a calentar la olla
pelar las verduras
.................
4
COMPUTACIÓN I (ELO) - INFORMÁTICA I (BIO) UNIDAD VI: PROGRAMACIÓN ESTRUCTURADA
etc.
6.3.5 Condición
! Una Condición es una afirmación lógica sobre el estado del problema, que en el momento de
la observación puede ser verdadera o falsa.
El procesador determina, en el momento de la ejecución del trabajo, las acciones a seguir,
dependiendo si la condición es satisfecha o no. No debe confundirse una condición con una
acción, las acciones son verbos (Leer, Sumar, Repartir, Escribir, etc) y modifican el ambiente
mientras que las condiciones se utilizan para determinar cuando se da por finalizado un
determinado proceso (es una pregunta sobre el estado del ambiente).
A los fines de reafirmar los conceptos vistos e introducir algunos nuevos, se analizará el
siguiente ejemplo.
T: Se desea repartir entre cuatro niños, caramelos de frutilla, menta y naranja, contenidos en
una bolsa no transparente. La persona que debe repartir los caramelos (procesador), para
evitar conflictos, dará a cada niño la misma cantidad de caramelos de cada gusto, suponiendo
al iniciar que la bolsa contiene por lo menos cuatro del mismo gusto.
Para ejecutar el trabajo el procesador dispone del siguiente ambiente:
• cuatro niños.
• bolsa conteniendo caramelos de frutilla, menta y naranja.
• tres cajas, una para cada gusto.
Las acciones primitivas del individuo (procesador) son:
• tomar un caramelo de la bolsa.
• poner un caramelo en la caja correspondiente.
• tomar cuatro caramelos de una caja y distribuirlos.
Las condiciones que interpreta el procesador son:
• bolsa vacía.
• una caja contiene menos de cuatro caramelos.
El trabajo a realizar puede ser descripto por el siguiente enunciado:
T. repartir los caramelos de frutilla, menta y naranja entre cuatro niños de manera tal que a
cada uno le corresponda la misma cantidad de caramelos de cada gusto.
Este enunciado no representa las acciones primitivas posibles de realizar por nuestro
procesador. Por lo tanto T debería descomponerse. Una primera descomposición es la
siguiente:
t1. repartir los caramelos que están en la bolsa, en tres cajas, de acuerdo al gusto.
t2. tomar los caramelos de las cajas y distribuirlos entre los cuatro niños.
Las acciones t1 y t2, que son independientes entre sí, no constituyen aún acciones primitivas
para nuestro procesador, por lo tanto debemos continuar con la descomposición.
Descomposición de t1:
Repita
t1.1 tomar un caramelo de la bolsa
t1.2 poner el caramelo en la caja correspondiente al gusto
hasta que (t1.3) la bolsa esté vacía.
5
COMPUTACIÓN I (ELO) - INFORMÁTICA I (BIO) UNIDAD VI: PROGRAMACIÓN ESTRUCTURADA
Las acciones t1.1 y t1.2 son primitivas y la condición t1.3 puede ser interpretada por el
procesador, por lo tanto la descomposición de t1 ha terminado.
Descomposición de t2:
t2.1. distribuir entre los cuatro niños, los caramelos de frutilla hasta que en la caja que
los contiene haya menos de cuatro.
t2.2. distribuir entre los cuatro niños, los caramelos de menta. Hasta que ..........
t2.3. distribuir entre los cuatro niños, los caramelos de naranja. Hasta que ......
Esta descomposición de t2 aún no contempla tareas primitivas. La acción t2.1 puede
descomponerse en forma de operaciones primitivas de la siguiente forma:
Repita
t2.1.1 tomar cuatro caramelos de la caja de frutilla y distribuirlos entre los cuatro
niños.
hasta que (t2.1.2) la caja de caramelos de frutilla contenga menos de cuatro unidades.
De forma similar se deben descomponer las acciones t2.2 y t2.3. De esta manera el problema
T por medio del método de refinamientos sucesivos (top-down) se ha descompuesto en una
serie de operaciones primitivas.
La secuencia final de acciones primitivas obtenida se llama "Algoritmo" y para este ejemplo
es:
Inicio
Repita
tomar un caramelo de la bolsa
poner un caramelo en la caja del gusto correspondiente
hasta que la bolsa esté vacía
Repita
tomar 4 caramelos de la caja de frutillas y distribuirlos
hasta que la caja de frutilla contenga menos de 4 caramelos
Repita
tomar 4 caramelos de la caja de menta y distribuirlos
hasta que la caja de menta contenga menos de 4 caramelos
Repita
tomar 4 caramelos de la caja de naranja y distribuirlos
hasta que la caja de naranja contenga menos de 4 caramelos
6.3.6 Algoritmo
Es una secuencia ordenada de acciones primitivas que pueden ser ejecutadas por un
! procesador y, que lleva a la solución de un problema dado.
Los conceptos de algoritmo y de método son parecidos: los métodos para realizar
determinadas tareas forman parte de las costumbres o rutinas que el hombre aprende un día y
luego las repite de manera inconsciente, sin tener en cuenta las acciones más sencillas que
integran el proceso (por ejemplo caminar, leer o conducir). Por eso el concepto de algoritmo
suele considerarse como un método o rutina de acciones.
Una definición de algoritmo indicaría que es la descripción precisa de los pasos que nos llevan
a la solución de un problema planteado. Estos pasos son, en general, acciones u operaciones
que se efectúan sobre ciertos objetos. La descripción de un algoritmo afecta a tres partes: la
entrada (los datos), el proceso (las instrucciones) y la salida (los resultados). En este sentido,
un algoritmo se puede comparar a una función matemática.
6
COMPUTACIÓN I (ELO) - INFORMÁTICA I (BIO) UNIDAD VI: PROGRAMACIÓN ESTRUCTURADA
A continuación se resolverá el mismo problema anterior pero sin tener en cuenta la suposición
de que inicialmente la bolsa contiene por lo menos cuatro caramelos de cada gusto.
En estas condiciones el esquema de solución adoptado antes:
Repita
tomar 4 caramelos de la caja de naranja y distribuirlos
hasta que la caja de naranja contenga menos de 4 caramelos.
Fallaría si inicialmente la bolsa contuviera 3 o menos caramelos de naranja!!!
Esto indica que se debe buscar otra estructura de repetición la cual puede ser la siguiente:
mientras haya por lo menos 4 caramelos
hacer
tomar 4 caramelos de la caja y distribuirlos
fin mientras
Esta otra estructura de repetición, aunque similar a la "Repita", se diferencia de ella en que la
condición se evalúa antes de ejecutar ninguna acción.
En programación estructurada existen una serie de estructuras tipo mediante las cuales es
posible resolver cualquier problema. Los computadores no pueden ejecutar directamente los
algoritmos en forma literal como en el ejemplo, y para que puedan hacerlo es necesario
codificarlos en un lenguaje apropiado que llamaremos "Lenguaje de Programación" y al
Algoritmo así codificado le llamaremos "Programa".
7
COMPUTACIÓN I (ELO) - INFORMÁTICA I (BIO) UNIDAD VI: PROGRAMACIÓN ESTRUCTURADA
8
COMPUTACIÓN I (ELO) - INFORMÁTICA I (BIO) UNIDAD VI: PROGRAMACIÓN ESTRUCTURADA
solos o invocando a su vez otros módulos que solucionan subproblemas más específicos. A
esta aproximación se la denomina diseño descendente o top-down, y queda esquematizado
en la siguiente figura:
9
COMPUTACIÓN I (ELO) - INFORMÁTICA I (BIO) UNIDAD VI: PROGRAMACIÓN ESTRUCTURADA
10
COMPUTACIÓN I (ELO) - INFORMÁTICA I (BIO) UNIDAD VI: PROGRAMACIÓN ESTRUCTURADA
La diferencia reside en que con X se pueden realizar todas las operaciones aritméticas
mientras que con Y sólo las operaciones permitidas con caracteres.
Si se llegara a definir:
Y=8
Se estaría cometiendo un error ya que a una variable carácter Y se le estaría asignando un
valor numérico, también sería incorrecto si se le asignara una sucesión de caracteres, por
ejemplo,
Y = 'abc'
6.5 Expresiones
Un procesador debe ser capaz de manejar los datos descritos en el ambiente de un algoritmo,
por Ej. 5+8, 2*5, etc.
Una expresión describe un cálculo a efectuar por el procesador y cuyo resultado es único.
Una expresión contiene operandos y operadores. Según el tipo de datos que maneja se
clasifican en:
• Expresiones aritméticas
• Expresiones relacionales
• Expresiones lógicas
• Expresiones carácter
El resultado de una expresión aritmética es del tipo numérico, el correspondiente a una
expresión relacional o a una expresión lógica es del tipo lógica y el resultado de una expresión
carácter es del tipo carácter o cadena.
Operador
Función
Aritmético
+ Suma
11
COMPUTACIÓN I (ELO) - INFORMÁTICA I (BIO) UNIDAD VI: PROGRAMACIÓN ESTRUCTURADA
Operador
Función
Aritmético
- Resta
* Producto
/ División
^ Potenciación
5 2
1 2 Cociente
Resto
Una aplicación trivial de este operación esta dada en su utilización para determinar si un
número entero es par o no
Si x mod 2 = 0 entonces x es par
=1 entonces x es impar
En cuanto al signo, si uno de los operandos es negativo, el signo del resto resultara de aplicar
las reglas de los signos del álgebra, teniendo en cuenta que siempre debe cumplirse lo
siguiente:
Si A es el dividendo y B el divisor, entonces:
A = (A div B) * B + (A mod B)
Por ejemplo si A = -5 y B = 2
La operación resto dará por resultado -1 para que se cumpla la expresión anterior.
Reglas con las que se evalúa una expresión de dos o más operandos:
12
COMPUTACIÓN I (ELO) - INFORMÁTICA I (BIO) UNIDAD VI: PROGRAMACIÓN ESTRUCTURADA
a) todas las cantidades que están encerradas entra paréntesis se evalúan primero, siendo las
primeras en evaluarse las más internas en el caso de un anidado.
b) las operaciones aritméticas dentro de una expresión, se ejecutan de acuerdo con el
siguiente orden de precedencia
Se aplica de Derecha a
1 ^ Izquierda
Se aplica de Izquierda a
2 *, / , div, mod Derecha
Se aplica de Izquierda a
3 +, - Derecha
Ejemplo:
Indicar en que orden se realizan las operaciones y ¿cual es el resultado de la siguiente
expresión?
10 − 7 + 3 * ((52
12 −3
12) / 5)
40
10 − 7 + 3 * (40 / 5)
123
8
10 − 7 + 3{
*8
24
10
12 −37 + 24
3
31+
2324
27
27
Además de las operaciones básicas como suma, resta, producto, división y potencia puede
existir otro conjunto de operadores especiales que se denominan funciones internas y algunos
ejemplos se listan en la siguiente tabla.
13
COMPUTACIÓN I (ELO) - INFORMÁTICA I (BIO) UNIDAD VI: PROGRAMACIÓN ESTRUCTURADA
Operador
Significado
Relacional
= Igual
< Menor
> Mayor
<> Distinto
Ejemplo:
Si A y B son dos variables numéricas cuyos valores son respectivamente, 3 y 15, la siguiente
tabla muestra el cálculo de algunos predicados:
Predicado Valor
A>B f
A=B f
A<B v
A<>B v
14
COMPUTACIÓN I (ELO) - INFORMÁTICA I (BIO) UNIDAD VI: PROGRAMACIÓN ESTRUCTURADA
Los resultados de las operaciones con estos operadores es un valor lógico que depende de
las leyes del álgebra de Boole.
Para evaluar las expresiones lógicas se debe recurrir a las tablas de verdad. Las tablas de
verdad de los operadores lógicos mencionados anteriormente son las siguientes:
Siendo A y B proposiciones, v y f verdadero y falso
respectivamente:
Producto Lógico Suma Exclusiva
A B AYB A B A NE B
v v v v v f
v f f v f v
f v f f v v
f f f f f f
Orden Operador
1 NO
2 Y
3 O y NE
15
COMPUTACIÓN I (ELO) - INFORMÁTICA I (BIO) UNIDAD VI: PROGRAMACIÓN ESTRUCTURADA
Donde:
• V es el nombre de la variable a la que el procesador le va a asignar el valor de E .
• es el signo de la asignación y es el símbolo “<” seguido del símbolo “-”
• E representa el valor que se le va a asignar a la variable.
Según sea el tipo de variable V y E , la acción de asignar se puede clasificar en:
• asignación aritmética
• asignación lógica
• asignación de carácter
• asignación Cadena de Caracteres
16
COMPUTACIÓN I (ELO) - INFORMÁTICA I (BIO) UNIDAD VI: PROGRAMACIÓN ESTRUCTURADA
17
COMPUTACIÓN I (ELO) - INFORMÁTICA I (BIO) UNIDAD VI: PROGRAMACIÓN ESTRUCTURADA
otra u otras posibles, según se evalúen determinadas condiciones. De esta manera se tienen
en la Programación Estructurada, dos tipos o clases de estructuras de control bien
diferenciadas que son:
• Estructuras de Decisión
• Estructuras de Repetición o de Lazo
Verdadero
Escriba x
x>y
Falso
Escriba y
La expresión x > y es un predicado que describe una condición que se desea probar. Si x > y
es verdadera se ejecuta la acción escribir x, si x > y es falsa, se ejecuta la acción de la
derecha, o sea escribir y. En este ejemplo se ha visto una de las estructuras más importantes
en el diseño de algoritmos, la selección de una acción entre dos alternativas dependiendo de
una condición.
Esta estructura algorítmica se denomina: construcción
"si-entonces-sino-fin si"
y su formato es el siguiente:
si (condición) entonces
alternativa verdadera
sino
alternativa falsa
fin si
La construcción comienza con la palabra si, seguida de la condición que se debe evaluar. Si la
condición es verdadera la alternativa que debe ejecutarse es la verdadera, la cual se
encuentra precedida por la palabra entonces. La otra alternativa que debe ejecutarse si la
condición resulta falsa (alternativa falsa), está precedida por la palabra sino, la estructura
debe finalizarse con fin si. A las palabras si, entonces, sino, fin si, se le llama delimitadores.
El ejemplo anterior tomará la siguiente forma:
18
COMPUTACIÓN I (ELO) - INFORMÁTICA I (BIO) UNIDAD VI: PROGRAMACIÓN ESTRUCTURADA
si x > y entonces
escriba x
sino
escriba y
fin si
Es de hacer notar que tanto la condición como cada una de las alternativas, pueden ser más
complejas. La condición puede estar comprendida por predicados compuestos y las
alternativas pueden comprender varias acciones primitivas.
ENTRADA
V EVALUA F
CONDICION
ENTONCES SINO
SALIDA
Esta estructura de decisión se la considera como un ente completo, al que se entra por arriba
y se sale por abajo. Es importante resaltar un concepto básico de la Programación
Estructurada, que es la existencia de un sólo punto de entrada y un solo punto de salida. Es
de hacer notar que parte correspondiente a la alternativa falsa puede no estar presente.
Analizaremos un ejemplo:
Enunciado:
Calcular la raíz cuadrada de un número si éste no es negativo, en caso contrario escribir un
mensaje.
Método:
Leer un número, si su valor es positivo o cero, entonces, calcular su raíz, sino, escribir un
cartel aclaratorio.
real d, A
Inicio
escriba " Ingrese el dato a procesar "
lea d
si d >= 0 entonces
A d*d
escriba A
sino
escriba "número negativo"
fin si
fin
19
COMPUTACIÓN I (ELO) - INFORMÁTICA I (BIO) UNIDAD VI: PROGRAMACIÓN ESTRUCTURADA
20
COMPUTACIÓN I (ELO) - INFORMÁTICA I (BIO) UNIDAD VI: PROGRAMACIÓN ESTRUCTURADA
caso E
E1:
acción 1
E2:
acción 2
............
............
Ek:
acción k
sino:
acción B
fin caso
En esta estructura, E es una expresión numérica, cuyo resultado puede ser uno de los valores
E1, E2, ...Ek en función de estos valores, se ejecutará una y sólo una de las acciones
indicadas. Si por ejemplo E tiene el valor Ei, la acción i es ejecutada. En caso de que el valor
de E sea distinto de E1, E2, ...Ek, se ejecuta la acción B.
Ejemplo:
Día es una variable numérica entera y sus valores posibles son: 1, 2, ...,7. Se pide diseñar un
algoritmo que escriba los nombres de los días de la semana correspondiente, al valor de la
variable día. Si día toma un valor fuera del rango, escribir un mensaje de error.
Entero dia
inicio
Escriba “ Ingrese el numero del dia “
Lea dia
caso día
1:
Escriba "domingo"
2:
Escriba "Lunes"
.....................
7:
Escriba "sábado"
sino:
Escriba "error"
fin caso
fin
Para visualizar la ventaja de esta estructura dejamos propuesto como ejercicio la
implementación de este mismo ejemplo con estructuras si-entonces-sino-finsi anidadas.
Podemos graficar esta estructura de la siguiente forma donde Ai representa la acción
correspondiente al valor de la selección E:
21
COMPUTACIÓN I (ELO) - INFORMÁTICA I (BIO) UNIDAD VI: PROGRAMACIÓN ESTRUCTURADA
ENTRADA
E1 E2 E3 De otro modo
A1 A2 A3 Acción B
22
COMPUTACIÓN I (ELO) - INFORMÁTICA I (BIO) UNIDAD VI: PROGRAMACIÓN ESTRUCTURADA
ENTRADA
EJECUTA
ACCION
EVALUA Falso
CONDICION
Verdadero
SALIDA
Las acciones deberán repetirse en tanto, el predicado se mantenga falso. Este se evalúa
después de ejecutarse las acciones. Cuando el predicado resulta verdadero, se da por
finalizada la ejecución del lazo. Como las estructuras anteriores se considera la unidad con un
solo punto de entrada y una única salida.
Entre las características particulares de este esquema de repetición podemos citar las
siguientes:
• Entre el conjunto de acciones que forman el cuerpo de la estructura y que se repiten, debe
haber, al menos, una que esta relacionada con el predicado de tal manera que se pueda
modificar su valor, de lo contrario, las acciones se repetirán indefinidamente.
• El predicado es un predicado de salida, en él está expresada la condición que hace "salir",
al procesador de la iteración.
• En esta estructura de repetición, no es necesario conocer con anterioridad el número de
repeticiones que se van a llevar a cabo.
Analicemos un ejemplo donde se utilice esta estructura:
Enunciado:
Se deben escribir los dígitos de 0 a 9.
Método:
A partir de una variable entera, que inicialmente debe estar en cero, se ira realizando en cada
iteración la escritura del valor actual de la variable y su incremento, la salida del lazo se
produce cuando el valor alcanzado por la variable supere nueve.
entero digito
inicio
digito 0 /* Inicializa la variable*/
repita
Escriba digito
digito digito +1
hasta digito > 9 /* condición de salida del lazo*/
fin
23
COMPUTACIÓN I (ELO) - INFORMÁTICA I (BIO) UNIDAD VI: PROGRAMACIÓN ESTRUCTURADA
ENTRADA
EJECUTA EVALUA F
ACCION CONDICION
SALIDA
En este esquema, el delimitador fin mientras indica el fin de la secuencia de acciones a repetir,
la cantidad de veces que se ejecutarán las acciones no es conocida con anterioridad. El
predicado de control es evaluado, antes de la ejecución de la secuencia de acciones que
forman el cuerpo del mientras. Si resulta verdadero la secuencia es ejecutada, si el predicado
resulta falso, se finaliza la repetición.
Analicemos el mismo ejemplo utilizado con la estructura Repita con esta nueva estructura de
repetición.
Enunciado:
Se deben escribir los dígitos de 0 a 9.
Método:
A partir de una variable entera, que inicialmente debe estar en cero, se ira realizando en cada
iteración la escritura del valor actual de la variable y su incremento, el ingreso para ejecutar las
acciones del lazo requiere que el valor de la variable sea menor o igual a nueve.
24
COMPUTACIÓN I (ELO) - INFORMÁTICA I (BIO) UNIDAD VI: PROGRAMACIÓN ESTRUCTURADA
Entero digito
inicio
digito 0 /* Inicializa la variable*/
mientras digito < 10 haga /* condición de entrada al lazo*/
Escriba digito
digito digito +1
fin mientras
fin
Si comparamos este algoritmo con el utilizado en la estructura Repita, se observa que se
emplean las mismas acciones, la diferencia está dada en las condiciones, esto es así porque
en un caso la condición es para permanecer en el lazo ( Estructura Mientras ) y en el otro es
para salir Estructura Repita.
Ejemplo:
Dados dos números naturales que representan el dividendo y el divisor, el algoritmo debe
calcular el cociente y el resto con un procesador para el cual las únicas operaciones
aritméticas primitivas son la suma y la resta. Por lo tanto se deberá realizar la división
mediante restas sucesivas
Método:
Para efectuar la división entera, restamos el valor del divisor del dividendo, tantas veces como
sea posible. El cociente será la cantidad de restas efectuadas y el resto el resultado de la
última resta.
Variables Descripción
DVDO Variable de entrada, tipo numérico entero, cuyo valor representa el
dividendo.
DIV Variable de entrada, tipo numérico entero, cuyo valor representa el
divisor.
Q Variable de salida, tipo numérico entero, en la cual se calcula el
cociente.
R Variable de salida, tipo numérico entero, en la cual se almacena el
resto.
Algoritmo del cociente entero:
Entero DVDO, DIV, R,Q
inicio
Escriba “ Ingrese dividendo y divisor “
lea DVDO, DIV
R DVDO
Q 0
mientras R >= DIV haga
R R - DIV
Q Q+1
fin mientras
escriba "cociente", Q
escriba "resto", R
fin
25
COMPUTACIÓN I (ELO) - INFORMÁTICA I (BIO) UNIDAD VI: PROGRAMACIÓN ESTRUCTURADA
26
COMPUTACIÓN I (ELO) - INFORMÁTICA I (BIO) UNIDAD VI: PROGRAMACIÓN ESTRUCTURADA
ENTRADA
V Vi
F
V <= Vf
EJECUTA
ACCION SALIDA
V V+P
V Vi
mientras ( V <= Vf ) haga
acción 1
acción 2
………
V V+1
fin mientras
El ejemplo de escribir los diez primeros dígitos utilizando la estructura para-hacer-fin-para
sería:
Entero digito
inicio
para digito 0 hasta 9 haga
Escriba digito
fin para
fin
Como se puede apreciar la implementación de la solución utilizando la estructura para, es mas
sencilla que las soluciones vistas anteriormente, esto se debe a que cuando se conoce el
número de repeticiones es conveniente el uso de la estructura para.
27
COMPUTACIÓN I (ELO) - INFORMÁTICA I (BIO) UNIDAD VI: PROGRAMACIÓN ESTRUCTURADA
Por cada valor que toma la variable de control del ciclo externo, deberá ejecutarse, totalmente
un ciclo interno.
La mayoría de los lenguajes de programación incluyen una sentencia de control que es la "ir
a" la cual obliga a una transferencia inmediata del control, a un punto predeterminado del
algoritmo, saltando por encima de las estructuras estudiadas. Esta sentencia ha sido y sigue
siendo objeto de discusiones, mientras algunos autores proponen su eliminación, otros,
permiten su uso como excepción, para casos extremos.
6.8.1 Introducción
El manejo de datos no puede ser realizado siempre en forma cómoda y confiable mediante el
uso de variables simples (como las vistas hasta el momento), en muchos casos resulta casi
imposible utilizar este tipo de variables para almacenar y operar sobre ciertos conjuntos de
datos.
Al comienzo de esta unidad hemos introducido el concepto de dato que como se recordará
puede ser un número entero, un número real, un carácter o una constante lógica. El problema se
plantea cuando tenemos gran cantidad de datos que guardan entre si alguna relación. Para cada
uno de estos datos se debería utilizar una variable distinta, lo que ocasiona en la mayoría de los
casos complicaciones en el algoritmo a desarrollar, como también en la cantidad de variables a
utilizar.
Para resolver muchas de estas dificultades se agrupan los datos en un mismo conjunto, bajo un
nombre común, que se pueden tratar como una sola unidad. Estos conjuntos reciben el nombre
de Estructuras de Datos
Cuando nos encontramos resolviendo un problema en particular, se debe tratar que la
organización de sus datos se realice en forma estructurada; por lo tanto, seleccionar los datos,
adecuadamente, es un paso necesario y fundamental al definir y, posteriormente, resolver el
problema. Todas las formas posibles en que los datos primitivos se relacionan lógicamente,
definen distintas estructuras de datos.
! Un arreglo (array) es un conjunto de variables del mismo tipo, identificados por el mismo nombre
y que se distinguen entre sí por medio de un número que las ordena.
A cada elemento del arreglo se accede teniendo en cuenta la posición que ocupa dentro del
conjunto de datos.
Según el tipo de datos almacenados en el arreglo se los puede clasificar en:
• Numéricos ( enteros o reales )
• Alfanuméricos ( caracteres o string )
Según la cantidad de parámetros necesarios para dimensionar el arreglo, se pueden clasificar en
los siguientes tipos:
• Unidimensionales llamados vectores o listas
• Bidimensionales tipo matriz
• Multidimencionales
Para comprender la verdadera utilidad que se obtiene utilizando arreglos consideremos el
siguiente problema:
Enunciado:
28
COMPUTACIÓN I (ELO) - INFORMÁTICA I (BIO) UNIDAD VI: PROGRAMACIÓN ESTRUCTURADA
“Una empresa recibe mensualmente información sobre las ventas de cada una de sus tres
sucursales y, desea obtener un listado de aquellas cuyas ventas superan el promedio de las
mismas.”
Método:
Para resolver este problema deberá leerse dos veces la información de cada sucursal, con la
primer lectura de datos se determinara el promedio de las ventas, y con la segunda se
determinará cual o cuales de las sucursales tienen ventas superiores al promedio.
Aplicando la técnica de refinamientos sucesivos, el algoritmo completo resulta:
entero I
real venta, promedio
Inicio
promedio 0
para I 1 hasta 3 haga
lea venta
promedio promedio + venta
finpara
promedio promedio / 3
para I 1 hasta 3 haga
lea venta
si venta >= promedio entonces
escriba I, venta
fin si
fin para
fin
Este algoritmo es ineficiente por el hecho de leer dos veces el mismo conjunto de datos. Una
forma alternativa de obtener los mismos resultados es definir tres variables numéricas, cuyos
valores, correspondan a las ventas de cada una de las sucursales. Para este caso el algoritmo
completo seria:
real venta1, venta2, venta3, promedio
inicio
lea venta1
lea venta2
lea venta3
promedio (venta1 + venta2 + venta3) / 3
si venta1 >= promedio entonces
escriba "1 ", venta1
fin si
si venta2 >= promedio entonces
escriba "2 ", venta2
fin si
si venta3 >= promedio entonces
escriba "3 ", venta3
fin si
fin
29
COMPUTACIÓN I (ELO) - INFORMÁTICA I (BIO) UNIDAD VI: PROGRAMACIÓN ESTRUCTURADA
Se debe notar que este algoritmo es valido, solo, para tres sucursales. ¿Como se plantearía el
algoritmo para 100 sucursales? Utilizando el mismo enfoque que para el algoritmo anterior, se
deben definir 100 variables venta1, venta2, K , venta100.
real venta1, venta2, , venta100, promedio
inicio
lea venta1, venta2, , venta100
promedio (venta1+ venta2+…+… +venta100) / 100
si venta1 >= promedio entonces
escriba " 1 ", venta1
fin si
si venta2 >= promedio entonces
escriba " 2 " , venta2
fin si
….
….
si venta100 >= promedio entonces
escriba " 100 ", venta100
fin si
fin
Como se observa, se han utilizado los símbolos K , M . Al primero de ellos lo hemos utilizado para
denotar la lectura de las 100 variables y para calcular el promedio de las ventas y, el segundo,
para indicar que la comprobación de las muestras continúa desde la sucursal 3 hasta la 99.
Estos dos símbolos no son comprendidos por ningún procesador y la solución seria escribir
explícitamente las 100 variables y las 100 estructuras de decisión, lo cual es para nada eficiente.
Una forma más optimizada y adecuada para resolver este problema consiste en reunir las ventas
de las 100 sucursales bajo un único nombre, por ejemplo venta; venta que es un conjunto de
valores reales podría estar representada, esquemáticamente, en forma de tabla, como muestra
la siguiente figura:
1 2 3 4 ... 100
578 115 654 ... 121
120
Para individualizar a uno de los 100 valores se utiliza su ubicación en la tabla colocándola entre
corchetes [i], siendo i la posición a la cual se le denomina índice, de esta manera venta[3]
representa el tercer valor (115 que indica la venta de la tercera sucursal). Se define entonces un
arreglo lineal, tabla o vector, de nombre venta cuyos 100 elementos son venta[1], venta[2],...,
venta[100].
Ejemplo:
Supongamos el siguiente experimento relacionado con nuestra especialidad: Se deben
almacenar los valores de tensión sobre una determinada resistencia, los valores deben
medirse cada.1 segundo durante un determinado tiempo fijado por el operador; los datos
almacenados (entrada) deben procesarse, aplicando la siguiente expresión, para generar un
nuevo conjunto de datos (salida):
salida[ti] = entrada[ti] * 2.5 + entrada[ti - 1] * .25 para ti > .2 seg.
salida[1] = salida[2] = 0.0
30
COMPUTACIÓN I (ELO) - INFORMÁTICA I (BIO) UNIDAD VI: PROGRAMACIÓN ESTRUCTURADA
Donde entrada[ti] y salida[ti], son los valores de tensión de entrada y salida correspondientes
al instante de tiempo ti. Se pide imprimir los valores de las tensiones de entrada y salida
correspondientes a todos los instantes de tiempo ti, en que se realizaron las mediciones.
Si quisiéramos resolver el problema anterior utilizando variables simples, nos sería difícil
determinar la cantidad de variables a declarar, el momento de corte de la adquisición de datos,
el armado de fórmulas, etc., lo que hace que los programas sean poco claros y para nada
estructurados.
En cambio, si utilizáramos un tipo de datos como el sugerido: salida[k], entrada[k], donde
salida y entrada son nombres de arreglos de datos y k un subíndice que nos dice a qué
elemento del arreglo nos referimos, podríamos armar la toma de datos dentro de un lazo, el
cual terminaría cuando se supere el tiempo determinado por el operador ( mientras k<
(tiempo/0.1) ), y del mismo modo podríamos luego implementar la función de filtrado en otro
lazo, utilizando un criterio similar.
Para hacer notar la diferencia de enfoques, se sugiere tratar de resolver el problema anterior
haciendo uso de variables simples, para un tiempo de 5 seg., y luego resolverlo utilizando
arreglos para cualquier tiempo menor a 100 seg.
31
COMPUTACIÓN I (ELO) - INFORMÁTICA I (BIO) UNIDAD VI: PROGRAMACIÓN ESTRUCTURADA
inicio
promedio 0
para I 1 hasta 100 haga
lea venta[ I ]
promedio promedio + venta[ I ]
fin para
promedio promedio / 100
para I 1 hasta 100 haga
si venta[ I ] >= promedio entonces
escriba “ La sucursal “, I, " ", venta [ I ]
fin si
fin para
fin
32
COMPUTACIÓN I (ELO) - INFORMÁTICA I (BIO) UNIDAD VI: PROGRAMACIÓN ESTRUCTURADA
Ejemplo 2:
arreglo [500] de real entrada
arreglo [500] de real salida
real tiempo, reloj
entero ind, f
inicio
escriba "ingrese tiempo de toma de muestras en seg."
lea tiempo
f (tiempo / 0.1)
para ind 1 hasta f haga
lea entrada[ind]
fin para
salida[1] = 0
salida[2] = 0
33
COMPUTACIÓN I (ELO) - INFORMÁTICA I (BIO) UNIDAD VI: PROGRAMACIÓN ESTRUCTURADA
34
COMPUTACIÓN I (ELO) - INFORMÁTICA I (BIO) UNIDAD VI: PROGRAMACIÓN ESTRUCTURADA
Acciones primitivas
poner manguera
girar una vuelta la manguera a derecha o izquierda
accionar 5 veces el émbolo del inflador
Condiciones
manguera ajustada
manguera suelta
rueda inflada
2- Cambio de lamparita
Diseñar un algoritmo para cambiar una lamparita quemada de un artefacto suspendido del
techo. Utilizar la técnica de refinamiento sucesivo.
Ambiente:
-lamparita quemada.
-lamparita nueva.
-escalera.
Acciones primitivas.
-situar la escalera debajo del artefacto que tiene la lamparita quemada.
-subir un peldaño de la escalera.
-bajar un peldaño de la escalera.
-dar un giro a la lamparita.
-poner lamparita.
-sacar lamparita.
Condiciones:
-la mano alcanza la lamparita.
-llegar al piso.
-lamparita suelta.
-lamparita ajustada.
35
COMPUTACIÓN I (ELO) - INFORMÁTICA I (BIO) UNIDAD VI: PROGRAMACIÓN ESTRUCTURADA
3- Los operarios de una empresa trabajan en dos turnos, uno diurno, cuyo código es menor
que 10 y otro nocturno, de código mayor o igual a 10.Se desea calcular el jornal para un
operario sabiendo que, para el turno nocturno, el pago es de 1.50 pesos la hora y, para el
turno diurno, es de 1.20 pesos la hora pero, en este último caso, si el día es domingo, se paga
un adicional de 0.80 pesos la hora.
Método
Se deben ingresar el código del turno, la cantidad de horas trabajadas y si el día es o no,
domingo.
Si el turno es nocturno, calcular el jornal con la fórmula correspondiente a dicho turno,
calcularlo con la fórmula correspondiente a turno diurno y, si el día es domingo, agregarle el
adicional.
Informar el resultado.
Las fórmulas con las cuales se debe calcular el jornal son:
1-Turno nocturno.
Jornal 1.50* horas trabajadas
2-Turno diurno.
a) si el día no es domingo.
Jornal 1.20 * horas trabajadas
b) si el día es domingo.
Jornal ( 1.20+0.80) * horas trabajadas
El algoritmo puede plantearse como sigue.
-Leer datos
-Calcular el jornal
-Informar resultados
Como las acciones de este algoritmo no son primitivas, aplicaremos la técnica de
refinamientos sucesivos.
Leer los valores correspondientes a las horas trabajadas, el código del turno y el día.
Si el turno es nocturno
entonces
calcular el jornal de acuerdo con la fórmula 1
sino
calcular el jornal de acuerdo con la fórmula 2
fin si
Escribir el valor del jornal
Como la acción "calcular el jornal de acuerdo con la FORMULA 2" no es primitiva, debemos
realizar un nuevo refinamiento.
Leer los valores correspondientes a las horas trabajadas, el código del turno y el día.
Si el turno es nocturno
36
COMPUTACIÓN I (ELO) - INFORMÁTICA I (BIO) UNIDAD VI: PROGRAMACIÓN ESTRUCTURADA
entonces
calcular el jornal de acuerdo con la Formula 1.
sino
si el día no es domingo
entonces
calcular el jornal de acuerdo con la Formula 2a
sino
calcular el jornal de acuerdo con la Formula 2b
fin si
fin si
Escriba el valor del jornal.
fin
Como ahora, todas las acciones son primitivas, procedemos a escribir el ambiente del
algoritmo.
Ambiente del Algoritmo
Variables Descripción
HORAS Variable de entrada, de tipo numérico, cuyo valor es la cantidad de
horas trabajadas en un día, por un operario.
TURNO Variable de entrada, de tipo numérico entero, cuyo valor es el código
del turno.
DIA Variable de entrada, de tipo cadena, cuyo valor es el nombre del dia.
JORNAL Variable de salida, de tipo numérico real, que contiene el pago que
debe efectuarse
37
COMPUTACIÓN I (ELO) - INFORMÁTICA I (BIO) UNIDAD VI: PROGRAMACIÓN ESTRUCTURADA
fin si
fin si
Escriba JORNAL
fin
4- Dadas las siguientes variables numéricas reales, expresarlos en notación de punto flotante
normalizado con la precisión indicada en cada caso.
a) X = 347.5 con precisión de dos dígitos significativos
La notación en punto flotante es una notación especial en la cual sólo se usa un cierto número
de dígitos de precisión seguidos por una potencia de diez adecuada. La notación en punto
flotante normalizado, consiste en colocar la primera cifra significativa después del punto
decimal. Dado un número, primero hay que determinar la precisión a utilizar y analizar si el
número deberá ser truncado o no. En el caso de que se deba truncar el número se debe
efectuar un redondeo sobre el último dígito de precisión sumándole uno en caso de que el
primer dígito descartado sea mayor que cinco. Luego hay que ajustar adecuadamente la
magnitud del número: por cada lugar decimal que se mueva hacia la izquierda, se suma uno a
la potencia de diez que se utiliza como multiplicador y por cada lugar que se mueve hacia la
derecha, se resta uno a dicha potencia. En este caso:
X = 347.5 con dos dígitos de precisión, será:
Y = 0.313 * 10-3 (En este caso, al descartar el 2 no se modifica el último dígito de precisión. El
exponente -3 obedece a que el punto decimal fue trasladado tres lugares hacia la derecha.)
38
COMPUTACIÓN I (ELO) - INFORMÁTICA I (BIO) UNIDAD VI: PROGRAMACIÓN ESTRUCTURADA
b) F = 517.0 e) H = F h) L = -615
c) K = '517.0' f) B = -420.0 i) E = 0.03
5-Dadas las siguientes variables reales, expresarlas en notación de punto flotante normalizado
con una precisión de tres dígitos significativos.
51210 / 2 + 1
*3
50
50
14/2
24+31
25
12+31
25
26
b) 4 + 7 * 2 - (3 - 4)^2
c) 2 + ((5 - (9/3)) * 2 + 4)
d) 2/(1/4 + 2/(1/4 + 2))
e) 4 + 2 * 3.0^2
f) (4 * 3/6 + 1/3) - 15/(3^2 - 6)
39
COMPUTACIÓN I (ELO) - INFORMÁTICA I (BIO) UNIDAD VI: PROGRAMACIÓN ESTRUCTURADA
8- Dadas dos constantes numéricas enteras P=5 y Q=10 evaluar los siguientes predicados:
a) 3 * P < Q
1424
3
F
1<3
P210 Y Q
12=3
15
F F
b)
F
12Y3
F
F
c) P < 8 O Q >= 15
d) NO (P + 1 < 8 Y Q < 30)
e) 2 * Q <> 15 O 3 * P >= Q
f) P > 18 Y (Q < 50 Y Q >= 10)
g) 2 * P >= Q Y Q <= 3 * P
h) (Q > 2 * P O P * Q = 50) Y P + Q = 20
i) NO (10 * Q < 80 Y (20 * P <> 10 * Q O Q >= 10))
j) NO (NO (20 * P <= 150 O P < Q) O 30 * P > 200) Y Q = 15
9- Sean A, B y C variables numéricas; M y N variables cadena y R y S variables lógicas, cuyos
valores son:
A = 8 C = 10 N = “computadora” S=V
B = -2 M = “cómputo” R=F
Se pide evaluar los siguientes predicados:
a) (A < 4 Y R) Y (M < N O A = C)
b) NO (M < 'computación') O (B < A Y (NO(A <> 2) Y S))
c) NO ((B > 0 Y R) O (R O (S O (R Y N > “compra”))))
d) ((NO (NO S O R) Y (R O R)) O NO (NO S Y S)) O (S Y S)
10- Sean A, B, C y D variables numéricas, escribir los predicados correspondientes a los
siguientes enunciados:
a) Las variables A, C y D tienen el mismo valor.
Respuesta: En este caso se pueden escribir distintos predicados que cumplan con el
enunciado.
Por ejemplo:
A=C Y A=D
A=C Y C=D
A=D Y C=D
b) Los valores de B y C son superiores al valor de A.
c) Los valores de A y B son iguales pero difieren del valor de C.
d) El valor de A es superior al de B y está estrictamente comprendido entre los valores de C y
D.
e) El producto de A y B difiere en 5 de la suma de C y D.
f) Los valores de todas las variables son distintos entre sí y ninguno de ellos es mayor que 10.
40