Anda di halaman 1dari 20

Estructuras de Control

Lissette Alvarez

Abril-Julio, 2004

1 Estructura general de un programa


Un programa puede considerarse como una secuencia de acciones (instrucciones) que manipulan un conjunto
de datos para que realice una tarea especı́fica.
En general, un programa está formado por dos bloques:

1. Bloque de declaraciones. En este bloque se especifican todos los objetos que utilizará el programa
(constantes, variables, tablas, registros, archivos, etc.). Las declaraciones se utilizan en aquellos
lenguajes de programación que no tienen declaración explı́cita de los objetos. Su misión consiste
en indicar al procesador que reserve espacio en la memoria para un objeto del programa, indicando
asimismo su nombre, tipo y caracterı́sticas.

2. Bloque de instrucciones. Lo constituye el conjunto de operaciones y la secuencia de instrucciones que


se han de realizar para la obtención de los resultados deseados. Dentro de éste bloque se diferencian
tres partes fundamentales:

(a) Entrada de datos: conformada por todas las instrucciones que toman datos de un dispositivo
externo, almacenándolos en la memoria central para que puedan ser procesados.

(b) Proceso: formado por las instrucciones que modifican/procesan los datos, dejando éstos disponibles
en la memoria central.

(c) Salida de resultados: conjunto de instrucciones que toman los datos finales de la memoria central
y los envı́an a los dispositivos externos.

A fin de facilitar los cómputos y la programación, Octave/Matlab tiene declaración explı́cita de objetos,
siendo posible prescindir del bloque de declaraciones. En consecuencia, los algoritmos estudiados en este
curso sólo desarrollarán el bloque de instrucciones. Las instrucciones pueden ser:

1
1. básicas (primitivas). Las instrucciones básicas son aquellas que ejecuta el procesador de modo inmedi-
ato. Las principales son asignación, entrada y salida:

(a) Instrucción de asignación: consiste en calcular/indicar el valor de una expresión y almacenarlo en


una variable1 .

(b) Instrucción de entrada: toma un dato de un dispositivo de entrada y lo almacena en una variable.

(c) Instrucción de salida: toma el valor de una expresión o variable y lo lleva a un dispositivo externo.

2. de control. Este tipo de instrucciones controlan la ejecución de otras instrucciones. Existen varios
tipos:

(a) Selectivas (alternativas): controlan la ejecución de unas u otras instrucciones según una condición.

(b) Saltos: alteran la secuencia normal de ejecución de un programa únicamente en el caso de cumplim-
iento de una condición asociada a la propia instrucción

(c) Iterativas: repiten, un número finito de veces, una o varias instrucciones.

3. compuestas. Son aquellas que el procesador no puede ejecutar directamente, sino que realiza una
llamada a un subprograma, subrutina o párrafo.

1.1 Pseudocódigo

Es un lenguaje de especificación de algoritmos muy parecido a la mayorı́a de los actuales lenguajes de


programación, lo que facilita su traducción al lenguaje en sı́. El pseudocódigo utilizar unas pocas palabras
clave o palabras especiales que indican la evolución del algoritmo.
El pseudocódigo tiene algunas ventajas sobre otras técnicas de diseño de algoritmos:

• La modificación es muy sencilla si nos equivocamos en la lógica del programa

• Es independiente del lenguaje de programación que se utilice: un algoritmo escrito en pseudocódigo es


fácilmente traducible a muchos lenguajes de programación.

1 Variable: objeto que almacena valores o datos que pueden cambiar durante la ejecución del programa. Ocupa espacio
en memoria, por lo tanto, se localiza en una posición de memoria y tiene asociado un nombre (identificador) que se utiliza en
lugar de la posición de memoria.

2
2 Instrucciones Básicas

2.1 Inicio y Fin

Delimitan el comienzo y el final de un algoritmo, de la siguiente manera:

Inicio
..
.

ALGORITMO
..
.

f in

También, en vez de inicio y fin se puede utilizar ”empezar” y ”fin”, pero siempre quedando clara la
intención.
En Octave/Matlab las palabras ”inicio” y ”fin” deben ser colocadas a modo de comentarios, para una
buena documentación:

%Inicio
..
.

%Fin

2.2 Asignaciones

Cuando se quiere asignar un valor a una variable, la asignación se ajusta al siguiente patrón:

variable ←− valor o expresión

Ejemplo 2.1.

I ←− 3

x ←− 5ˆ(1/2)

z ←− y + 1

Observaciones:

• La parte izquierda de la asignación siempre es una variable.

• Las expresiones representan operaciones que pueden evaluarse.

3
• En Octave/Matlab las asignaciones tienen la misma sintaxis, cambiando el sı́mbolo por =. Las
asignaciones del ejemplo se implementarı́an de la siguiente manera:

I = 3;

x = 5ˆ(1/2);

z = y + 1;

2.3 Lectura

Una acción de lectura se ajusta al siguiente patrón:

LEER(variable)

Ejemplo 2.2.

LEER(x)

LEER (x, matrizA)

Observaciones:

• El argumento de la acción LEER siempre debe ser una variable.

• Se pueden leer varios datos, colocando la lista de variables separadas por comas.

• El valor leı́do se almacena directamente en la variable que se indica.

• La acción LEER es otra forma de dar valor a una variable.

• La implementación de la instrucción LEER en Octave/Matlab depende, básicamente, del dispositivo


desde donde se leerá la variable. Si el valor es ingresado por el usuario a través del teclado el comando
correspondiente es input:
x = input(’ texto ’);

Entre las comillas debe escribirse un texto que indique claramente al usuario la información que debe
introducir. Si el valor debe leerse de un archivo en formato ASCII (por ejemplo) se utiliza el comando
load con la sintaxis load nombre archivo. En sesiones posteriores estudiaremos este comando más a
fondo.

4
2.4 Escritura

Una acción de escritura se ajusta al siguiente patrón:

ESCRIBIR(variable o expresión)

Ejemplo 2.3.

ESCRIBIR(x)

ESCRIBIR(x + y)

Observaciones:

• El argumento de la acción ESCRIBIR puede ser una variable o expresión.

• Se pueden escribir varias expresiones, señalando la lista de expresiones separadas por comas.

• Los comandos deOctave/Matlab que corresponden a la acción ESCRIBIR son, entre otros, disp y
fprintf2 . Los ejemplos serı́an implementados de la forma:

disp(x);

fprintf(’El resultado es %1.5d’,x+y);

Ejemplo 2.4. Elabore el algoritmo de un programa que convierta grados a radianes.

Inicio
LEER(grados)
radianes ←− grados / 180
ESCRIBIR (radianes)
FIN

La implementación en Octave/Matlab corresponderı́a a:


% Inicio
grados = input(’Introduzca el valor de los grados’);
radianes = grados / 180;
disp(radianes);
% FIN
2 En la ventana de comandos e Octave/matlab teclee help disp o help fprintf para obtener mayor información acerca
de estas instrucciones

5
Problemas Propuestos 2.5. Para los siguientes planteamientos elabore el algoritmo e implemente el pro-
grama en Octave/Matlab.

1. Solicite al usuario dos números, A y B, y muestre el resultado de elevar A a B.

2. Calcule la longitud de la circunferencia que tenga por radio un número introducido por el usuario.

3. Intercambie el valor de dos variables numéricas.*

4. Dada una cantidad en grados, determine el número de vueltas y el ángulo correspondiente en el cı́rculo
trigonométrico.

Grados = 390

Vueltas = 1

Ángulo = 30

5. Dada una cantidad (válida) de dı́as, determine su equivalente en años y meses. Asuma que todos los
años tienen 365 dı́as y los meses 30.

6. Dadas las pendientes M1 y M2 y los cortes con el eje Y B1 y B2 de dos rectas L1 y L2 (L1: Y =
M 1 ∗ X + B1; L2: Y = M 2 ∗ X + B2), determine en punto de intersección entre las dos rectas. Asuma
que M 1 6= M 2.

7. Determinar el área de la base y el volumen de un cilindro conocidos su radio y su altura.

8. Calcule el área de un triángulo en función de las longitudes de sus lados. (Si a, b, c son las longitudes
de los lados de un triángulo, su área viene dada por la expresión
p
A= p (p − a) (p − b) (p − c)

a+b+c
donde p = 2 .

9. Realice la conversión de grados Celsius (o C) a grados Fahrenheit (o F ). ¿Cómo serı́a el algoritmo que
realizase la conversión contraria, es decir, de o F a o C?. La fórmula de conversión viene dada por la
expresión F = 95 C + 32

10. Convertir coordenadas cartesianas en esféricas y viceversa.

6
3 Estructuras de Control
Las estructuras de control tienen una finalidad bastante definida: señalar orden en que tienen
que sucederse los pasos de un algoritmo.
Si un programa muestra un mensaje en la pantalla que pregunta al usuario ”¿Desea seguir
adelante?”, obviamente, de la respuesta del usuario dependerá la siguiente acción del programa.
El programador debe escribir el código para las dos posibilidades (sı́ y no), aunque cuando el
programa esté funcionando, sólo se elegirá una.

3.1 Selectivas

Las estructuras selectivas se utilizan para tomar decisiones (por eso también se llaman estruc-
turas de decisión o alternativas). El mecanismo de acción evalúa una condición, y, a continuación,
en función del resultado, se lleva a cabo una opción u otra. Es importante asentar esta idea:
el programa está diseñado para evaluar una condición, y actuar en consecuencia, según que la
condición sea verdadera o falsa.

3.1.1 Selección Simple ”Si ... entonces ...”

Se evalúa una condición y si ésta resulta verdadera entonces se ejecuta una o varias instruc-
ciones. La sintaxis básica es:

SI (condición) entonces

instrucciones

F IN SI

Es importante cerrar el SI (FINSI), ya que, si no se cumple la condición, el programa continua


en la instrucción que sigue a FINSI.

Ejemplo 3.1. Se desea calcular la raı́z cuadrada de un número, de forma que tras leer el número introducido
por el usuario, es necesario validarlo, -esto es, verificar que cumple las hipótesis-. En nuestro caso, hay que
verificar que el número sea no negativo.

INICIO
LEER ( numero )
SI (numero ≥ 0) entonces

7

raı́z = numero
FINSI
ESCRIBIR (raiz)
FIN

En Octave/Matlab la instrucción que corresponde a las alternativas simples es ”IF (condición)


... END”. En el caso de Octave también es válida la instrucción.”IF (condición) ... ENDIF”.

3.1.2 Selección Doble. ”Si... entonces ... sino ...”.

Lo más frecuente es encontrar situaciones donde si una condición se cumple se ejecuta un


grupo de instrucciones, pero si no se cumple, deben ejecutarse otras. La instrucción ”Si ...
entonces ... Sino...” facilita este tipo de programación. La estructura que le corresponde es:

SI (condición) entonces

instrucciones 1

SIN O

instrucciones 2

F IN SI

Con esta estructura puede mejorarse el algoritmo del ejemplo anterior, señalando ”error” si
el usuario ingresa valores negativos.

Ejemplo 3.2. Se desea calcular la raı́z cuadrada de un número...

INICIO
LEER ( numero )
SI (numero ≥ 0) entonces

raı́z = numero
SINO
ESCRIBIR (”Error. ¡Debe ingresar valores positivos!”)
FINSI
ESCRIBIR (raı́z)
FIN

8
El comando de alternativas dobles para Octave/Matlab ”IF (condición) ... ELSE ...
END.”. En el caso de Octave también es válida la instrucción.”IF (condición) ... ELSE ...
ENDIF”.

3.1.3 Selección Múltiple

También hay programas que nos llevan a considerar alternativas con varias opciones posibles.
Hay dos formas de escribir esto en pseudocódigo. La primera de ellas modifica la estructura de
selección doble:

SI (condición1) entonces

intrucciones 1

SI (condicion2) entonces

instrucciones 2
..
.

SI (condicion k) entonces

instrucciones k

F IN SI

La instrucción
”IF(condicion1)
instrucciones 1
ELSEIF(condicion2)
instrucciones 2
...
ELSEIF(condicion K)
instrucciones k
END.’’
corresponde a selecciones multiples en Octave/Matlab. Nuevamente, el ambiente Octave
podemos intercambiar END por ENDIF.

La segunda: OPCION es particularmente útil cuando se elabora un menú. La OPCION


toma distintos valores y según la respuesta del usuario ejecuta las acciones bajo dicha opción.
LEER (opcion)

9
OPCION
(valor 1):
intrucciones 1
(valor 2):
instrucciones 2
:
(valor k):
instrucciones k {las acciones que toque}
en otro caso
instrucciones k + 1
FINOPCION
La opción ”en otro caso” no es más que una alternativa en caso que ell usuario seleccione
alguna opción no contemplada entre las que se ofrece.

Ejemplo 3.3. El usuario ingresa dos valores y se desea elaborar un menu cuyas opciones sean calcular
multiplicación, division de ambos números y salir del programa. Asuma que el segundo número siempre es
distinto de cero.

Inicio
ESCRIBIR (Ingrese dos numeros: )
LEER (x, y)
ESCRIBIR (Menu de opciones.)
ESCRIBIR (1. Multiplicacion.)
ESCRIBIR (2. Division.)
ESCRIBIR (3. Salir del programa.)
LEER(opcion)
OPCION
1:
mult = x ∗ y
ESCRIBIR (mult)
2:
div = x/y
ESCRIBIR (div)

10
3:
SALIR
en otro caso:
ESCRIBIR (Debe escoger una opción entre 1 y 3)
FIN OPCION
En Octave/Matlab la instrucción que corresponde a OPCION es
SWITCH (expresión)
case (valor 1)
instrucciones 1
case(valor2)
instrucciones 2
:
otherwise
instrucciones
end
La implementación del ejemplo anterior serı́a:
% Inicio
x=input(’Por favor ingrese un numero’);
y=input(’Ingrese un numero distinto de cero’);
disp(’Menu de opciones’);
disp(1. Multiplicación.);
disp(2. Division.);
disp(3. Salir del programa.);
opcion=input(Seleccione una opción’);
SWITCH (opción)
case 1:
mult = x ∗ y;
disp (mult)
case 2:
div = x/y
disp (div)
case 3:

11
break;
otherwise
disp(’Seleccione una opción entre 1 y 3’)
end

3.2 Repetitivas

Las estructuras repetitivas, que también reciben el nombre de bucle (loop, en inglés) controlan un conjunto
de instrucciones que deben repetirse cierto número de veces, mientras se cumple una condición que ha de ser
claramente especificada. La condición podrá ser verdadera o falsa, y se comprobará en cada paso o iteración
del bucle.
Todo bucle consta de tres partes básicas, a saber:

• Decisión: donde se evalúa la condición y, en caso de ser cierta, se ejecuta el cuerpo del bucle.

• Cuerpo del bucle: son las instrucciones que se ejecutarán repetidamente, un número determinado de
veces, cuando la decisión es verdadera.

• Salida del bucle: es la condición que indica cuándo terminan las iteraciones.

Básicamente, existen tres tipos de estructuras repetitivas:

1. ”Mientras...” (while),

2. ”Repetir... hasta...” (do... until)

3. ”Desde” (for).

Una forma de controlar un bucle es mediante una variable llamada contador cuyo valor se incrementa o
decrementa en una cantidad constante en cada repetición que se produzca. También, los bucles suelen utilizar
otro tipo de variables llamadas acumulador, cuya misión es almacenar una cantidad variable resultante de
operaciones sucesivas y repetidas. Es como un contador, con la diferencia que el incremento/decremento es
variable.

12
3.2.1 MIENTRAS (while)

En este tipo de estructura, el cuerpo del bucle se repite MIENTRAS se cumple una determinada condición.
La sintaxis básica es:

M IEN T RAS (condición - expresión lógica) hacer

instrucciones

F IN M IEN T RAS

Ejemplo 3.4. Dado un número entero N calcular la suma de todos los números entre 1 y N..

INICIO
LEER(N )
I ←− 1; SU M A ←− 0
MIENTRAS (I ≤ N )
SU M A ←− SU M A + I;
I ←− I + 1;
FINMIENTRAS
FIN

Frecuentemente se utiliza el bucle while para validar los datos de entrada de un programa. Veamos el
siguiente:

Ejemplo 3.5. Solicitar al usuario un valor positivo y validarlo.

INICIO
LEER(x)
Contador ←− 0;
MIENTRAS (x < 0) hacer
LEER(x)
Cont ←− Cont + 1
FINMIENTRAS
FIN

En los ejemplos las la variable I y Cont son contadores y la variable SU M A es un acumulador. ¿Qué
cree Ud. que pasarı́a si se omitiera la lı́nea I ←− I + 1 en del cuerpo del bucle?

Observaciones:

13
• Ya que primero se comprueba la condición y luego se ejecuta el cuerpo del bucle, esta construcción
implica que el cuerpo del bucle puede realizarse 0, 1 ó más veces.

• La estructura correspondiente en Octave/Matlab es:

while (condición)

instrucciones

end

La implementación de ambos ejemplos queda como sigue:

Ejemplo 3.4
%Inicio
x=input(’Por favor, ingrese el valor de x: ’);
Cont=0;
suma=0;
while (x<0)
disp(’Es necesario que el valor de x sea positivo.’);
x=input(’Por favor, ingrese el valor de x: ’);
Cont = Cont+1;
end

Ejemplo 3.5
%Inicio
N=input(’Por favor, ingrese un valor para N: ’);
i=1;
suma=0;
while (i<=N)
suma = suma + i;
i = i+1;
end

14
3.2.2 DESDE (for)

El bucle for permite repetir un conjunto de instrucciones un número determinado de veces, con la pecu-
liaridad que la instrucción incrementa (o decrementa), automáticamente y de uno en uno, la variable que se
utiliza como contador. La sintaxis básica es:

DESDE < valor inicio > : < valor f inal > HACER

instrucciones

F IN DESDE

DESDE < valor inicio > : < decremento > : < valor f inal > HACER

instrucciones

F IN DESDE

El incremento es opcional. Si no se coloca, el bucle aumenta de uno en uno -de forma automática- el
valor del contador. Si se desea decrementar la variable es necesario colocar el valor del decremento (−1).
Retomando el ejemplo 3.4:
INICIO
LEER(N )
SU M A ←− 0
DESDE I = 1 : N
SU M A ←− SU M A + I;
FINDESDE
FIN

Observaciones:

• El contador siempre se inicializa -automáticamente- en el valor inicial indicado en la estructura.

• El comando de Octave/Matlab para esta estructura es:

for contador = inicio : espaciado : fin


instrucciones
end

15
El programa en Octave/Matlab para el ejemplo es:
%Inicio
N=input(’Por favor, ingrese un valor para N: ’);
suma=0;
for i=1:N
suma = suma + i;
end3

IMPORTANTE: Las estructuras no utilizan ”;” al final de la lı́nea!!!

3.3 Saltos

Otro tipo de instrucciones nos permiten salir de un bucle en ejecución o ir al ciclo siguiente sin terminar el
actual.

La instrucción break detiene la ejecución de un bucle while y for. Debe escribirse -únicamente- en el
cuerpo del bucle. Octave/Matlab ejecuta la instrucción que se encuentra inmediatamente después del bucle
y continua el programa.

La instrucción continue salta las instrucciones siguientes del bucle -en un paso k, digamos-y continua
con la siguiente iteración -paso k+1 del bucle-. Debe escribirse en el cuerpo del bucle y se utiliza sólo en
estructuras iterativas.

3 En Octave pueden utilizarse, alternativamente, las palabras endfor, endif y endwhile para cerrar los ciclos for, if y while
respectivamente.

16
4 Bucles Anidados
Es posible construir un programa donde se aniden los bucles; esto es, ejecutar un bucle dentro de otro,
siempre que el bucle interno esté totalmente contenido dentro del bucle externo, si no, el algoritmo no es
válido.
El caso tı́pico de bucle anidado es la asignación de valores a una matriz. Supongamos que se desea leer
los valores de una matriz de orden mxn. (m y n dados por el usuario). El pseudocódigo que resuelve el
planteamiento es:
INICIO
HACER
LEER(m, n)
HASTA QUE ((m > 0) & (n > 0))
DESDE i = 1 : m HACER
DESDE j = 1 : n HACER
LEER A(i, j)
FINDESDE -j-
FINDESDE -i-
FIN

Y la implementación correspondiente:
%Inicio
do
m=input(’Por favor introduzca el número de filas: ’);
n=input(’y el número de columnas: ’);
until ((m > 0) & (n > 0))
disp(’Introduzca los valores por filas.’);
for i = 1 : m
for j = 1 : n
A(i,j)=input( ’’);
end
end
%Fin

17
5 Problemas propuestos
Para los siguientes planteamientos elabore el algoritmo el implemente el programa en Octave/Matlab.

1. Indique si la suma de dos números introducidos por teclado es mayor que un tercer número, también
introducido por teclado.

2. Calcule las raı́ces de un polinomio de segundo grado.

3. Redondee un número al número entero más cercano.

4. Dados n numeros cuente la cantidad de numeros positivos, negativos y cero.

5. Escribir un programa que, tras pedir al usuario un número, le informe de si es par, impar o no entero.

6. Dados tres números reales determine el mayor y el menor de ellos.

7. Dados dos números reales, A y B, determine (sin realizar la operación aritmética) el signo de la suma,
el producto y la resta de A+-*B.

8. Determine si un año es o no bisiesto. Son bisiestos los años que sean múltiplos de 4, salvo los que
finalizan en 00, que sólo lo serán cuando también sean múltiplos de 400.

9. Determine al valor absoluto de un número ingresado por el usuario.

10. Dos números reales LS y LI que representan los lı́mites superior e inferior de un intervalo, respecti-
vamente. Dado un número n determine si dicho número pertenece al intervalo. En caso contrario,
indique si está a la derecha o izquierda del intervalo.

11. Pedir un número al usuario y mostrar su tabla de multiplicar del 1 al 10.

12. Mostrar los mil primeros números pares. (utilizando while y for)

13. Escribir un programa que calcule las N primeras fracciones del tipo 1i , i = 1, 2, ..., N , tras pedir N al
usuario.

14. Escribir un programa que calcule los cuadrados de los números enteros, hasta que el cuadrado sea
mayor o igual que 2100.

15. Evalúe las siguientes expresiones, donde i y n son dados por el usuario:

P
n
1
(a) i
i=1

18
n √
P
(b) x2 − 4
i=1
Pn
3x2 −2x+8
(c) x2 −16
i=1
µ ¶
P
n
1
(d) n+i − log (n)
i=1
µ ³ ´i ¶
P
n
i+1
(e) log i−1
i=1
Pn
2i+1 −2i
(f) i+1
i=1
Pn
i+1 1
(g) (−1) 2i
i=1
Q
n
(h) n (n + 1)
i=1

16. Calcule el factorial de un número.

17. Dados dos números, escriba su multiplicación y luego pregunte si quiere repetir el proceso.

18. Lea un vector de orden n y calcule su norma euclı́dea. La norma euclı́dea de un vector x = (x1 , x2 , ...xn )
viene dada por la fórmula q
2 2 2
(x1 ) + (x2 ) + · · · + (xn )

19. Convertir un número entero dado en base 10 a base binaria.

20. Calcule los n primeros números de la serie Fibonacci. La serie de Fibonacci se genera de la siguiente
manera:

F0 = 1

F1 = 1

Fn = Fn−1 + Fn−2 ; n ≥ 2

21. Para una matriz A, cuadrada, de 10 x 10 elementos, muestre los siguientes resultados:

(a) Número de elementos distintos de cero.

(b) La suma de los elementos situados encima de la diagonal principal, es decir, los elementos A(i, j)
tales que i < j.

(c) El producto de los elementos de la diagonal principal (A(1, 1) ∗ A(2, 2) ∗ · · · A(10, 10)).

22. Dada una secuencia de N números enteros determine:

19
(a) Cantidad de números positivos

(b) Suma de los números positivos

(c) Promedio de los números positivos

(d) Cantidad de números negativos

(e) Suma de los números negativos

(f) Promedio de números negativos

23. Dado un número indique si es o no primo.

24. Dada una matriz de orden mxn determine

(a) Suma de los elementos de cada fila.

(b) Suma de los elementos de cada columna.

25. Se dice que un vector v = (v1 , v2 , ..., vn ) es una mochila perfecta si cada elemento del vector es mayor
que la suma de todos los anteriores. Lea un vector de orden n e indique si es o no una mochila perfecta.

20

Anda mungkin juga menyukai