Lissette Alvarez
Abril-Julio, 2004
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.
(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:
(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
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
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
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:
Ejemplo 2.1.
I ←− 3
x ←− 5ˆ(1/2)
z ←− y + 1
Observaciones:
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
LEER(variable)
Ejemplo 2.2.
LEER(x)
Observaciones:
• Se pueden leer varios datos, colocando la lista de variables separadas por comas.
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
ESCRIBIR(variable o expresión)
Ejemplo 2.3.
ESCRIBIR(x)
ESCRIBIR(x + y)
Observaciones:
• 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);
Inicio
LEER(grados)
radianes ←− grados / 180
ESCRIBIR (radianes)
FIN
5
Problemas Propuestos 2.5. Para los siguientes planteamientos elabore el algoritmo e implemente el pro-
grama en Octave/Matlab.
2. Calcule la longitud de la circunferencia que tenga por radio un número introducido por el usuario.
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.
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
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.
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
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
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.
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”.
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.
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.
1. ”Mientras...” (while),
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:
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:
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.
while (condición)
instrucciones
end
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:
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
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.
5. Escribir un programa que, tras pedir al usuario un número, le informe de si es par, impar o no entero.
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.
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.
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
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 )
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:
(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)).
19
(a) Cantidad de números positivos
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