SlideShare ist ein Scribd-Unternehmen logo
1 von 16
Downloaden Sie, um offline zu lesen
Tema 5
Algoritmos y estructuras de
programaci´on
Versi´on: 2 de marzo de 2009
5.1 Fases de creaci´on de un programa
El proceso de resoluci´on de problemas en un ordenador conduce a la escritura de un programa y
su ejecuci´on. Las fases en el desarrollo de un programa pueden resumirse de la siguiente forma:
1. Analizar el problema consiste en conocer perfectamente en qu´e consiste y qu´e resultados se
desean obtener.
2. Planificaci´on de la resoluci´on del problema, dividi´endolo, si es complicado, en una secuencia de
etapas m´as simples. Esta fase se lleva a cabo EN UN PAPEL, estableciendo lo m´as claramente
posible la finalidad de cada etapa, los datos que se necesitan de entrada, los datos que producir´ıan
en salida, los algoritmos (ver la Secci´on 5.2) que se utilizar´an, etc.
3. Edici´on del c´odigo fuente, es decir, escritura del mismo utilizando un editor de textos simple (sin
formato) y un lenguaje de programaci´on. Los programas fuente ser´an almacenados en ficheros
de texto, normalmente en el disco duro del ordenador.
4. Compilaci´on y ejecuci´on del programa al lenguaje m´aquina.
5. Correcci´on de errores del programa. Los errores se corregir´an en el c´odigo fuente, repitiendo
los pasos 3 y 4 tantas veces como sea necesario. Si se producen errores en la l´ogica del programa,
es decir, si el programa “funciona” pero produce resultados incorrectos, hay que modificar el
algoritmo volviendo al paso 2. Estos errores son los m´as dif´ıciles de detectar.
6. Documentaci´on. Una vez que el programa funcione correctamente, es conveniente revisar el
c´odigo fuente para ordenarlos, eliminar c´alculos innecesarios e incluir las l´ıneas de comentario
necesarias, que normalmente deben incluir unas breves explicaciones al principio del c´odigo
sobre la finalidad del programa y sus argumentos de entrada y de salida.
5.2 Algoritmos
Un ordenador es capaz de realizar “s´olo” determinadas acciones sencillas, tales como sumar, com-
parar o transferir datos, pero los problemas que normalmente interesa resolver son m´as complejos.
Para resolver un problema real es necesario, en primer lugar, encontrar un m´etodo de resoluci´on y,
31
Algoritmos y estructuras de programaci´on 32
posteriormente, determinar la sucesi´on de acciones sencillas (susceptibles de ser ejecutadas por un
ordenador) en que se descompone dicho m´etodo.
No todos los m´etodos de soluci´on de un problema pueden ser puestos es pr´actica en un ordenador.
Para que un procedimiento pueda ser implantado en un ordenador debe ser:
Preciso: estar compuesto de pasos bien definidos (no ambiguos) y ordenados.
Definido: si se sigue dos veces, se obtiene el mismo resultado cada vez.
Finito: tener un n´umero finito de pasos.
Un procedimiento o m´etodo para resolver un problema que cumpla los requisitos anteriores se dice
que es un algoritmo. Se puede dar por tanto la siguiente definici´on:
Un algoritmo es un m´etodo para resolver un problema mediante una secuencia de pasos
bien definidos, ordenados y finitos.
Para que se pueda ejecutar el algoritmo es preciso, adem´as, que se disponga de las “herramien-
tas” adecuadas para llevar a cabo cada uno de los pasos. Si no es as´ı, estos deber´an, a su vez, ser
descompuestos en una secuencia (algoritmo) de pasos m´as simples que s´ı se puedan llevar a cabo.
Un programa de ordenador es una sucesi´on de ´ordenes que describen un algoritmo,
escritas de forma que puedan ser entendidas por el ordenador.
En un algoritmo (y por tanto en un programa) se distinguen las siguientes acciones:
Entrada: es la informaci´on de partida que necesita el algoritmo para arrancar.
Proceso: es el conjunto de todas las operaciones a realizar.
Salida: son los resultados obtenidos.
Un ejemplo elemental es el Algoritmo 5.1.
Algoritmo 5.1 Preparar una taza de t´e.
Entrada: tetera, taza, bolsa de t´e
Salida: taza de t´e
Inicio
Tomar la tetera
Llenarla de agua
Encender el fuego
Poner la tetera en el fuego
Esperar a que hierva el agua
Tomar la bolsa de t´e
Introducirla en la tetera
Esperar 1 minuto
Echar el t´e en la taza
Fin
Algoritmos y estructuras de programaci´on 33
5.3 Representaci´on de algoritmos
Las dos herramientas m´as utilizadas com´unmente para describir algoritmos son:
Diagramas de flujo: son representaciones gr´aficas de secuencias de pasos a realizar. Cada operaci´on
se representa mediante un s´ımbolo normalizado el Instituto Norteamericano de Normalizaci´on
(ANSI - American National Standars Institute). Las l´ıneas de flujo indican el orden de ejecuci´on.
Algunos de los s´ımbolos principales se muestran en la Figura 5.1, como son: Inicio/Fin del
algoritmo, Lectura/Escritura de datos que el programa necesita o genera (por ejemplo,lectura
de datos que se teclean o escritura de datos en un fichero); Proceso conjunto de instrucciones
secuenciales; Decisi´on es una bifurcaci´on en el flujo del algoritmo en base a que se verifique o
no cierta condici´on (ver la Secci´on 5.5).
Los diagramas de flujo suelen ser usados s´olo para representar algoritmos peque˜nos, ya que
abarcan mucho espacio.
Inicio/Fin Lectura/Escritura
Proceso Decisión
No
Sí
Figura 5.1: S´ımbolos en diagramas de flujo.
Pseudoc´odigos: describen un algoritmo de forma similar a un lenguaje de programaci´on pero sin su
rigidez, de forma m´as parecida al lenguaje natural. Presentan la ventaja de ser m´as compactos
que los diagramas de flujo, m´as f´aciles de escribir para las instrucciones complejas y m´as f´aciles
de transferir a un lenguaje de programaci´on. El pseudoc´odigo no est´a regido por ning´un est´andar.
En estos apuntes usaremos las palabras LEER/IMPRIMIR para representar las acciones de
lectura de datos (el programa recibe datos desde alg´un sitio) y salida de datos (el programa
escribe informaci´on en alg´un medio)
El Algoritmo 5.2 y la Figura 5.2 muestran respectivamente el pseudoc´odigo y el diagrama de
flujo del algoritmo para calcular la altura de una persona en pulgadas y pies a partir de la altura en
cent´ımetros introducida por el teclado.
Algoritmos y estructuras de programaci´on 34
Algoritmo 5.2 Calcular una altura en pulgadas (1 pulgada=2.54 cm) y pies (1 pie=12
pulgadas), a partir de la altura en cent´ımetros, que se introduce por el teclado.
Inicio
1- IMPRIMIR ’Introduce la altura en centimetros: ’
2- LEER: altura
3- CALCULAR pulgadas=altura/2.54
4- CALCULAR pies=pulgadas/12
5- IMPRIMIR ’La altura en pulgadas es: ’, pulgadas
6- IMPRIMIR ’La altura en pies es : ’, pies
Fin
pies=pulgadas/12
pulgadas=altura/2.54
LEER
altura
ESCRIBIR
pulgadas, pies
Fin
Figura 5.2: Diagrama de flujo para determinar la altura de una persona en pulgadas y pies a partir
de la altura en cent´ımetros introducida por el teclado.
5.4 Estructura secuencial
Es aquella en la que una acci´on (instrucci´on) sigue a la otra en el orden en el que est´an escritas.
Su representaci´on y el diagrama de flujo se muestra en la Figura 5.3. Los Algoritmos 5.1 y 5.2 son
ejemplos de algoritmos secuenciales.
...
Instrucci´on 1
Instrucci´on 2
Instrucci´on 3
...
Instrucción 2
Instrucción 1
Instrucción 3
Figura 5.3: Estructura secuencial de instrucciones.
Algoritmos y estructuras de programaci´on 35
5.5 Estructuras de control: condicionales y bucles
Son parte fundamental de cualquier lenguaje. Sin ellas, las instrucciones de un programa s´olo
podr´ıan ejecutarse en el orden en que est´an escritas (orden secuencial). Las estructuras de control
permiten modificar este orden. Hay dos categor´ıas de estructuras de control:
Condicionales o bifurcaciones: permiten que se ejecuten conjuntos distintos de instrucciones, en
funci´on de que se verifique o no determinada condici´on.
Bucles o repeticiones: permiten que se ejecute repetidamente un conjunto de instrucciones, bien
un n´umero pre-determinado de veces, o bien hasta que se verifique una determinada condici´on.
En t´erminos de un lenguaje de programaci´on, que se verifique o no una condici´on se traduce en
que una (adecuada) expresi´on l´ogica tome el valor VERDADERO (TRUE) o tome el valor FALSO (FALSE).
En los casos m´as sencillos y habituales la condici´on suele ser una comparaci´on entre dos datos, como
por ejemplo: si a < b hacer una cosa y en caso contrario hacer otra distinta.
A continuaci´on se describen las distintas estructuras de control. Para cada una de ellas se describe
el diagrama de flujo y la sintaxis de la sentencia correspondiente en lenguaje MATLAB. Obs´ervese
que todas ellas tienen una ´unica entrada y una ´unica salida.
5.5.1 Estructura condicional simple: IF
Este es el tipo m´as sencillo de estructura condicional. Sirve para implementar acciones condicionales
del tipo siguiente:
Si se verifica una determinada condici´on, ejecutar una serie de instrucciones y luego seguir
adelante.
Si la condici´on NO se cumple, NO se ejecutan dichas instrucciones y se sigue adelante.
...
if condici´on
instrucciones
end
...
No
Sí
Condición Instrucciones
Figura 5.4: Estructura condicional simple: IF.
Obs´ervese que, en ambos casos (que se verifique o no la condici´on), los “caminos” bifurcados se
unen posteriormente en un punto, es decir, el flujo del programa recupera su car´acter secuencial, y se
contin´ua ejecutando por la instrucci´on siguiente a la estructura IF.
Como ejemplo de utilizaci´on de este tipo de condicional, se considera el c´alculo del valor en un
punto x de una funci´on definida por partes, como por ejemplo:
f(x) =
0 si x ≤ 0
x2 si x > 0
Algoritmos y estructuras de programaci´on 36
El Algoritmo 5.3 muestra el pseudoc´odigo correspondiente.
Algoritmo 5.3 C´alculo del valor de la funci´on f(x) = 0 si x ≤ 0, f(x) = x2 si x > 0.
Inicio
1- LEER x
2- HACER f=0
3- Si x>0
HACER f=x2
Fin Si
4- IMPRIMIR ’El valor de la funcion es: ’, f
Fin
5.5.2 Estructura condicional doble: IF - ELSE
Este tipo de estructura permite implementar condicionales en los que hay dos acciones alternativas:
Si se verifica una determinada condici´on, ejecutar un serie de instrucciones (bloque 1).
Si no, esto es, si la condici´on NO se verifica, ejecutar otra serie de instrucciones (bloque 2).
En otras palabras, en este tipo de estructuras hay una alternativa: se hace una cosa o se hace la
otra. En ambos casos, se sigue por la instrucci´on siguiente a la estrucutra IF - ELSE.
...
if condici´on
bloque-1
else
bloque-2
end
...
No
Sí
Condición
Bloque 2Bloque 1
Figura 5.5: Estructura condicional doble: IF - ELSE.
Como ejemplo de utilizaci´on de este tipo de estructuras se plantea el problema de calcular las
ra´ıces de una ecuaci´on de segundo grado
ax2
+ bx + c = 0
distinguiendo dos casos: que las ra´ıces sean reales o que sean complejas (no se contempla, de momento,
dintinguir entre una o dos ra´ıces reales). Ver a continuaci´on el diagrama de flujo (Figura 5.6) y el
pseudoc´odigo correspondiente (Algoritmo 5.4).
Algoritmos y estructuras de programaci´on 37
LEER
A,B,C
D=B -4AC
2
A2=2A
NoSí ¿D>0?
ESCRIBIR
x1,x2
Fin
p
DD= D
x1=(-B+DD)/A2
x2=(-B-DD)/A2
CALCULAR
CALCULAR
Re=-B/A2
Im=DD/A2
p
-DDD=
CALCULAR
ESCRIBIR
Re, Im
Figura 5.6: Diagrama de flujo para determinar las ra´ıces reales o complejas de la ecuaci´on de segundo
grado Ax2 + Bx + C = 0.
Algoritmo 5.4 C´alculo de las ra´ıces de la ecuaci´on de segundo grado Ax2 + Bx + C = 0,
distinguiendo los casos de ra´ıces reales y complejas.
Inicio
1- LEER A,B y C
2- CALCULAR D=B2-4*A*C
3- CALCULAR AA=2*A
4- Si D≥0
CALCULAR DD=
√
D
x1=(-B+DD)/AA
x2=(-B-DD)/AA
IMPRIMIR ’La ecuaci´on tiene ra´ıces reales:’, x1, x2
Si no
CALCULAR DD=
√
-D
Re=-B/AA
Im=DD/A2
IMPRIMIR ’La ecuaci´on tiene ra´ıces complejas conjugadas:’
IMPRIMIR ’Parte real:’, Re
IMPRIMIR ’Parte imaginaria:’, Im
Fin Si
Fin
5.5.3 Estructura condicional m´ultiple: IF - ELSEIF - ELSE
En su forma m´as general, la estructura IF - ELSEIF - ELSE permite implementar condicionales
m´as complicados, en los que se “encadenan” condiciones en la forma siguiente:
Algoritmos y estructuras de programaci´on 38
Si se verifica la condici´on 1, ejecutar las instrucciones del bloque 1.
Si no se verifica la condici´on 1, pero S´I se verifica la condici´on 2 , ejecutar las instrucciones
del bloque 2.
Si no, esto es, si no se ha verificado ninguna de las condiciones anteriores, ejecutar las instruc-
ciones del bloque 3.
En cualquiera de los casos, el flujo del programa contin´ua por la instrucci´on siguiente a la estructura
IF - ELSEIF - ELSE.
La sintaxis en lenguaje MATLAB y el diagrama de flujo, se muestran en la Figura 5.7.
...
if condici´on-1
bloque-1
elseif condici´on-2
bloque-2
else
bloque-3
end
...
No
No
Condición 1
Condición 2
Bloque 1
SÍ
Bloque 2
SÍ
Bloque 3
Figura 5.7: Estructura condicional m´ultiple: IF- ELSEIF - ELSE.
El Algoritmo 5.5 contiene un ejemplo de utilizaci´on de este tipo de estructura.
Algoritmo 5.5 Determinaci´on del signo de un n´umero: positivo, negativo o nulo.
Inicio
1- LEER X
2- Si X>0
IMPRIMIR ’El n´umero tiene signo positivo’
Si no, si X<0
IMPRIMIR ’El numero tiene signo negativo’
Si no
IMPRIMIR ’El numero es nulo’
Fin
Algoritmos y estructuras de programaci´on 39
En la estructura IF - ELSEIF - ELSE se puede
multiplicar la cl´ausula ELSEIF, obteni´endose
as´ı una “cascada” de condiciones, como se muestra
en el organigrama, cuyo funcionamiento es claro.
En este tipo de estructura condicional, la cl´ausula
ELSE junto con su bloque de instrucciones pueden
no estar presente.
Las distintas estructuras condicionales descritas
pueden ser anidadas, es decir, puede incluirse una
estructura IF (de cualquier tipo), como parte de las
instrucciones que forman el bloque de uno de los ca-
sos de otro IF. Como es l´ogico, no puede haber sola-
pamiento. Cada estructura IF debe tener su propio
fin (end).
if condici´on-1
instrucciones-1
elseif condici´on-2
instrucciones-2
elseif condici´on-3
instrucciones-3
...
else
instrucciones-k
end
Como ejemplo de utilizaci´on de este tipo de estructura condicional y de estructuras anidadas, v´ease
el Algoritmo 5.6.
Algoritmo 5.6 Dados dos n´umeros reales, a y b, y el s´ımbolo, S (car´acter), de un operador
aritm´etico (+, -, *, /), imprimir el resultado de la operaci´on a S b
Inicio
LEER a
LEER b
LEER S
Si S=’+’
IMPRIMIR ’El resultado es =’, a+b
Si no, si S=’-’
IMPRIMIR ’El resultado es =’, a-b
Si no, si S=’*’
IMPRIMIR ’El resultado es =’, a*b
Si no, si b=0
Si a=0
IMPRIMIR ’El resultado es =’, NaN (indeterminaci´on)
Si no
IMPRIMIR ’El resultado es =’, Inf (infinito)
Fin Si
Si no
IMPRIMIR ’El resultado es =’, a/b
Fin Si
Fin
Algoritmos y estructuras de programaci´on 40
5.5.4 Estructura de repetici´on indexada: FOR
Este tipo de estructura permite implementar la repetici´on de un cierto conjunto de instrucciones
un n´umero pre-determinado de veces.
Para ello se utiliza una variable de control del bucle, llamada tambi´en ´ındice, que va recorriendo
un conjunto pre-fijado de valores en un orden determinado. Para cada valor del ´ındice en dicho
conjunto, se ejecuta una vez el mismo conjunto de instrucciones.
En la Figura 5.8 se han representado la forma de escribir esta estructura en MATLAB y el organi-
grama correspondiente: el bloque de instrucciones se ejecuta una vez para cada valor del indice, que
va tomando sucesivamente el valor de cada componente del vector V, de longitud N.
...
for indice=V
instrucciones
end
...
TRUE
FALSE
indice=V(k)
k = 1
k = k+1
k > N
Instrucciones
Figura 5.8: Repetici´on indexada: sintaxis MATLAB y diagrama de flujo. El indice del bucle recorre
los valores de un vector V de longitud N.
Como ejemplo de utilizaci´on de la estructura FOR, v´eanse los Algoritmos 5.8 y 5.9 para calcular la
suma de los n primeros n´umeros impares.
Nota 5.7
a) El valor de la variable de control indice puede ser utilizado o no dentro del conjunto de instrucciones
que forman parte del cuerpo del FOR, pero no debe ser modificado.
b) El conjunto de valores que debe recorrer el indice puede ser vac´ıo (N=0). En ese caso, el bloque
de instrucciones no se ejecuta ninguna vez.
c) Las estructuras FOR e IF pueden “anidarse”, es decir, incluir una dentro de la otra, con la restricci´on
(de sentido com´un) de que la interior tiene que estar completamente contenida en uno de los bloques
de instrucciones de la otra. V´ease, como ejemplo, el Algoritmo 5.10.
Algoritmos y estructuras de programaci´on 41
Algoritmo 5.8 Dado un entero, n, calcular la suma de los n primeros n´umeros impares.
Inicio
LEER n
HACER suma=0
Para i= 1, 3, 5, ..., 2*n-1
HACER suma=suma+i
Fin Para
IMPRIMIR ’La suma vale : ’, suma
Fin
Algoritmo 5.9 Dado un entero, n, calcular
n
k=0
1
2
k
= 1 +
1
2
+
1
22
+ · · · +
1
2n
Inicio
LEER n
HACER suma=1
HACER ter=1
Para k= 1, 2, ..., n
HACER ter=ter/2
HACER suma=suma+ter
Fin Para
IMPRIMIR ’La suma vale : ’, suma
Fin
Algoritmo 5.10 Dado un n´umero natural, n, imprimir la lista de sus divisores, en orden
decreciente.
Inicio
LEER n
IMPRIMIR ’ Lista de divisores del numero: ’, n
Para i=ParteEntera(n/2) hasta 2 (incremento -1)
Si resto(n/i)=0
IMPRIMIR i
Fin Si
Fin Para
IMPRIMIR 1
Fin
Algoritmos y estructuras de programaci´on 42
5.5.5 Estructura repetitiva condicional: WHILE
Permite implementar la repetici´on de un mismo conjunto de instrucciones mientras que se verifique
una determinada condici´on: el n´umero de veces que se repetir´a el ciclo no est´a definido a priori.
El diagrama de flujo descriptivo de esta estructura se muestra en la Figura 5.9.
...
while expresi´on-l´ogica
instrucciones
end
...
FALSE
TRUE
Condición
Instrucciones
Figura 5.9: Estructura repetitiva WHILE: sintaxis MATLAB y diagrama de flujo.
Su funcionamiento es evidente, a la vista del diagrama:
1. Al comienzo de cada iteraci´on se eval´ua la expresi´on-l´ogica.
2. Si el resultado es VERDADERO, se ejecuta el conjunto de instrucciones y se vuelve a iterar, es decir,
se repite el paso 1.
3. Si el resultado es FALSO, se detiene la ejecuci´on del ciclo WHILE y el programa se sigue ejecutando
por la instrucci´on siguiente al END.
El Algoritmo 5.11 es un ejemplo de utilizaci´on de esta estructura.
Algoritmo 5.11 Imprimir de forma ascendente los 100 primeros n´umeros naturales.
Inicio
i=1
Mientras que i ≤ 100
IMPRIMIR i
HACER i=i+1
Fin Mientras
Fin
5.5.6 Ruptura de ciclos de repetici´on: BREAK y CONTINUE
En ocasiones es necesario interrumpir la ejecuci´on de un ciclo de repetici´on en alg´un punto
interno del bloque de instrucciones que se repiten. L´ogicamente, ello depender´a de que se
verifique o no alguna condici´on.
La interrupci´on puede hacerse de dos formas:
1. Abandonando el ciclo de repetici´on definitivamente.
Algoritmos y estructuras de programaci´on 43
2. Abandonando la iteraci´on en curso, pero comenzando la siguiente.
Las instrucciones para poner esto en pr´actica tienen nombres diversos en los distintos lenguajes de
programaci´on. En MATLAB, la primera opci´on se implementa con la instrucci´on BREAK y la segunda
con la instrucci´on CONTINUE. Ambas pueden utilizarse tanto para romper un ciclo FOR como un ciclo
WHILE. Cuando se utiliza la orden BREAK dentro de un ciclo FOR, el ´ındice del bucle conserva, fuera
del mismo, el ´ultimo valor que tom´o.
V´eanse los correspondientes diagramas de flujo en las Figuras 5.10 y 5.11.
FALSE
TRUE
Condición
WHILE
Instrucciones-1
Condición
ruptura
BREAK
Instrucciones-2
TRUE
FALSE
Figura 5.10: Diagrama de flujo de la ruptura
de ciclo BREAK.
FALSE
TRUE
Condición
WHILE
Instrucciones-1
Condición
ruptura
CONTINUE
Instrucciones-2
TRUE
FALSE
Figura 5.11: Diagrama de flujo de la ruptura
de ciclo CONTINUE.
5.5.7 Estructura de elecci´on entre varios casos: SWITCH
Este tipo de estructura permite decidir entre varios caminos posibles, en funci´on del valor que
tome una determinada instrucci´on.
El diagrama de flujo correspondiente a una de estas estructuras (con cuatro casos) se presenta en
la Figura 5.12.
switch expresi´on
case valor-1
instrucciones caso 1
case valor-2
instrucciones caso 2
...
case {valores...}
instrucciones caso k
otherwise
instrucciones
end
Valor
Expresión
Caso 1
Instrucs.
caso 1
Caso 2
Instrucs.
caso 2
Caso k
Instrucs.
caso k
otherwise
Instrucs.
"otro caso"
....
Figura 5.12: Estructura de elecci´on de caso SWITCH: sintaxis MATLAB y diagrama de flujo.
Algoritmos y estructuras de programaci´on 44
En cada uno de los casos, el valor correspondiente puede ser o bien un s´olo valor, o bien un
conjunto de valores, en cuyo caso se indican entre llaves. La cl´ausula OTHERWISE y su correspondiente
conjunto de instrucciones puede no estar presente.
El funcionamiento es el siguiente:
1. Al comienzo se eval´ua la expresi´on.
2. Si expresi´on toma el valor (´o valores) especificados junto a la primera cl´ausula CASE, se ejecuta el
conjunto de instrucciones de este caso y despu´es se abandona la estructura SWITCH, continuando
por la instrucci´on siguiente al END.
3. Se repite el procedimiento anterior, de forma ordenada, para cada una de las cl´ausulas CASE que
siguen.
4. Si la cl´ausula OTHERWISE est´a presente y la expresi´on no ha tomado ninguno de los valores
anteriormente especificados, se ejecuta el conjunto de instrucciones correspondiente.
Obs´ervese que se ejecuta, como m´aximo el conjunto de instrucciones de uno de los casos, es decir,
una vez que se ha verificado un caso y se ha ejecutado su conjunto de instrucciones, no se testea el resto
de casos, ya que se abandona la estructura. Obviamente, si la cl´ausula OTHERWISE no est´a presente,
puede ocurrir que no se d´e ninguno de los casos.
Como ejemplo de utilizaci´on, se presenta el mismo proceso del Algoritmo 5.6, pero utilizando la
sentencia SWITCH.
Algoritmo 5.12 Dados dos n´umeros reales, a y b, y el s´ımbolo, S (car´acter), de un oper-
ador aritm´etico (+, -, *, /), imprimir el resultado de la operaci´on a S b
LEER a , b , S
Elegir caso S
Caso ’+’
IMPRIMIR ’El resultado es =’, a+b
Caso ’-’
IMPRIMIR ’El resultado es =’, a-b
Caso ’*’
IMPRIMIR ’El resultado es =’, a*b
Caso ’*’
IMPRIMIR ’El resultado es =’, a*b
Caso ’/’
Si a=0
IMPRIMIR ’El resultado es =’, a/b
Si no, si b=0
IMPRIMIR ’El resultado es =’, Inf (infinito)
Si no
IMPRIMIR ’El resultado es =’, NaN (indeterminaci´on)
Fin Si
En otro caso
IMPRIMIR ’El operador no se reconoce’
Fin Elegir caso
Algoritmos y estructuras de programaci´on 45
5.6 Funciones externas
Con lo expuesto hasta aqu´ı se pueden escribir programas sencillos y no demasiado largos. Pero
varias razones justifican la necesidad de disponer de otro tipo de recursos de programaci´on. Por una
parte, puede haber en la resoluci´on de un problema, partes que se repitan. Por otra parte, es conveniente
partir la resoluci´on de un problema “largo” en una serie de etapas m´as cortas que se concatenan para
resolver el problema global. Los programas demasiado largos son dif´ıciles de revisar y de corregir.
En cualquier lenguaje de programaci´on, existen las funciones. Son trozos de c´odigo que se escriben
separadamente y que realizan c´alculos o tareas espec´ıficas. Todos los lenguajes de programaci´on tienen
funciones incorporadas o intr´ınsecas, es decir, funciones que realizan c´alculos o tareas de uso habitual
que han sido ya programados y est´an disponibles para el usuario. Pero, adem´as, todos los lenguajes
tienen la posibilidad de que el usuario defina sus propias funciones, que reciben el nombre de funciones
externas.
La forma de definir las funciones depende del lenguaje de programaci´on. En Matlab, las funciones
deben tener la estructura siguiente:
function [argumentos de salida] =nombre(argumentos de entrada)
...
instrucciones
...
Aqu´ı, function es una palabra reservada: no se cambia y debe estar presente. nombre es el nombre
que se quiere dar a la funci´on, para identificarla. Los argumentos de entrada y los argumentos de
salida son nombre de variable que hacen el papel de las variables mudas en la definici´on de una
funci´on matem´atica: s´ımbolos para describir la funci´on. En programaci´on reciben, tambi´en, el nombre
de variables mudas (de entrada o de salida).
Los argumentos de entrada y de salida, cuando hay varios, se separan por comas. Puede no haber
argumentos de entrada, en cuyo caso, no es necesario poner los par´entesis. Puede, asimismo, no haber
argumentos de salida, en cuyo caso no es necesario poner los corchetes ni el signo igual.
A continuaci´on de la instruci´on de declaraci´on (function), se escribe el c´odigo para llevar a cabo
los c´alculos o tareas correspondientes.
Para que una funci´on MATLAB (llamada tambi´en M-funci´on) est´e disponible para su uso desde
la ventana de comandos, desde un script o desde otra funci´on, debe ser guardada en un fichero de
nombre igual al de la funci´on y extensi´on .m, y debe estar en el directorio actual de trabajo.
La ejecuci´on de una M-funci´on se termina cuando se terminan sus instrucciones. Cuando ello sucede
el control de ejecuci´on vuelve al punto desde el que se invoc´o a la funci´on: la linea de comandos de
MATLAB, un script o bien otra funci´on.
A veces es necesario terminar la ejecuci´on de una function antes de que se terminen sus instruc-
ciones: ello se hace mediante la sentencia RETURN. Esta instrucci´on, en cualquier parte de una funci´on
o de un script provoca el inmediato abandono del mismo.
A modo de ejemplo de uso de una funci´on, v´ease el siguiente, que muestra el c´odigo de una M-
funci´on que calcula el valor de una funci´on matem´atica.
Algoritmos y estructuras de programaci´on 46
EJEMPLO:
M-funci´on para calcular el valor en un punto x de la funci´on
f(x) = ex sen(x/3)
cos
x + π
2
function [y]=mifun(x)
v=exp(x.*sin(x/3));
w=cos((x+pi)/2);
y=v.*w;
Una vez escrita y salvada, como se ha dicho antes, en un fichero de nombre mifun.m en el directorio
de trabajo, esta funci´on estar´a disponible para su uso en forma similar a cualquier otra funci´on
intr´ınseca.
Las variables definidas dentro de una funci´on son variables locales, en el sentido de que son
inaccesibles desde “fuera” de esta funci´on. Se puede decir que pertenecen al espacio de trabajo propio
de la funci´on y no son vistas desde otros espacios de trabajo. Por ejemplo, si se utiliza esta funci´on
desde la l´ınea de comandos de Matlab, y se tiene, en el espacio de trabajo de Matlab, una variable de
nombre, por ejemplo, w, esta variable y la w de la funci´on son distintas: se refieren a una posiciones
diferentes en memoria.

Weitere ähnliche Inhalte

Was ist angesagt?

ALGORITMO Y METODOLOGÍA PARA LA RESOLUCIÓN PROBLEMAS BASADOS EN EL COMPUTADOR
ALGORITMO Y METODOLOGÍA PARA LA RESOLUCIÓN PROBLEMAS BASADOS EN EL COMPUTADOR ALGORITMO Y METODOLOGÍA PARA LA RESOLUCIÓN PROBLEMAS BASADOS EN EL COMPUTADOR
ALGORITMO Y METODOLOGÍA PARA LA RESOLUCIÓN PROBLEMAS BASADOS EN EL COMPUTADOR DarkStarPlay
 
1 introduccion a la programacion 1
1 introduccion  a la programacion 11 introduccion  a la programacion 1
1 introduccion a la programacion 1Evelin Claudia
 
Programacion modular
Programacion modularProgramacion modular
Programacion modularCarmen Silva
 
Introduccion A La Programacion
Introduccion A La ProgramacionIntroduccion A La Programacion
Introduccion A La ProgramacionMary Sanchez
 
Programacion Logica
Programacion LogicaProgramacion Logica
Programacion LogicaNatalia
 
Introducción a la programación
Introducción a la programaciónIntroducción a la programación
Introducción a la programaciónjemarinoi
 
Programacion logica 1
Programacion logica 1Programacion logica 1
Programacion logica 1profedelvalle
 
Algorítmos - Conceptos básicos
Algorítmos - Conceptos básicosAlgorítmos - Conceptos básicos
Algorítmos - Conceptos básicoscbertolotti
 
Presentacion de informatica
Presentacion de informaticaPresentacion de informatica
Presentacion de informaticaEduardo_jose
 
Programación estructurada presentación
Programación estructurada presentaciónProgramación estructurada presentación
Programación estructurada presentaciónIvarra
 
Conceptos basicos de la programacion
Conceptos basicos de la programacionConceptos basicos de la programacion
Conceptos basicos de la programacionyamy matin
 
Paradigmasdeprogramacion
ParadigmasdeprogramacionParadigmasdeprogramacion
ParadigmasdeprogramacionVictor Zapata
 

Was ist angesagt? (16)

ALGORITMO Y METODOLOGÍA PARA LA RESOLUCIÓN PROBLEMAS BASADOS EN EL COMPUTADOR
ALGORITMO Y METODOLOGÍA PARA LA RESOLUCIÓN PROBLEMAS BASADOS EN EL COMPUTADOR ALGORITMO Y METODOLOGÍA PARA LA RESOLUCIÓN PROBLEMAS BASADOS EN EL COMPUTADOR
ALGORITMO Y METODOLOGÍA PARA LA RESOLUCIÓN PROBLEMAS BASADOS EN EL COMPUTADOR
 
1 introduccion a la programacion 1
1 introduccion  a la programacion 11 introduccion  a la programacion 1
1 introduccion a la programacion 1
 
Programacion modular
Programacion modularProgramacion modular
Programacion modular
 
Introduccion A La Programacion
Introduccion A La ProgramacionIntroduccion A La Programacion
Introduccion A La Programacion
 
Programacion Modular
Programacion ModularProgramacion Modular
Programacion Modular
 
ALGORITMOS EN EL SOFTWARE
ALGORITMOS EN EL SOFTWAREALGORITMOS EN EL SOFTWARE
ALGORITMOS EN EL SOFTWARE
 
Programacion Logica
Programacion LogicaProgramacion Logica
Programacion Logica
 
Introducción a la programación
Introducción a la programaciónIntroducción a la programación
Introducción a la programación
 
Programacion logica 1
Programacion logica 1Programacion logica 1
Programacion logica 1
 
Algorítmos - Conceptos básicos
Algorítmos - Conceptos básicosAlgorítmos - Conceptos básicos
Algorítmos - Conceptos básicos
 
algoritmica
algoritmicaalgoritmica
algoritmica
 
Presentacion de informatica
Presentacion de informaticaPresentacion de informatica
Presentacion de informatica
 
Programación estructurada presentación
Programación estructurada presentaciónProgramación estructurada presentación
Programación estructurada presentación
 
Pseudocodigo - Algoritmos - Diagramas de flujo
Pseudocodigo - Algoritmos - Diagramas de flujoPseudocodigo - Algoritmos - Diagramas de flujo
Pseudocodigo - Algoritmos - Diagramas de flujo
 
Conceptos basicos de la programacion
Conceptos basicos de la programacionConceptos basicos de la programacion
Conceptos basicos de la programacion
 
Paradigmasdeprogramacion
ParadigmasdeprogramacionParadigmasdeprogramacion
Paradigmasdeprogramacion
 

Andere mochten auch

Employee involvement
Employee involvementEmployee involvement
Employee involvementsuny9858
 
Apostila eletronica pgrss
Apostila eletronica pgrssApostila eletronica pgrss
Apostila eletronica pgrssDenis Candeias
 
Equidad ig
Equidad igEquidad ig
Equidad igindesol
 
Tm03 modelo de casos de uso
Tm03 modelo de casos de usoTm03 modelo de casos de uso
Tm03 modelo de casos de usoJulio Pari
 
Study of distribution channel strategy of pepsico for the positioning of the ...
Study of distribution channel strategy of pepsico for the positioning of the ...Study of distribution channel strategy of pepsico for the positioning of the ...
Study of distribution channel strategy of pepsico for the positioning of the ...Nity Niharika
 
Esquema comparativo de los tipos de modelos y metodologías
Esquema comparativo de los tipos de modelos y metodologíasEsquema comparativo de los tipos de modelos y metodologías
Esquema comparativo de los tipos de modelos y metodologíasLeo Jm
 
Healthcare Marketing Executives: Are You Ready for the Future?
Healthcare Marketing Executives: Are You Ready for the Future?Healthcare Marketing Executives: Are You Ready for the Future?
Healthcare Marketing Executives: Are You Ready for the Future?Karen Corrigan
 
Cercapaz compendio de_oientaciones para la paz
Cercapaz compendio de_oientaciones para la pazCercapaz compendio de_oientaciones para la paz
Cercapaz compendio de_oientaciones para la pazErick Bravo
 
Transparencia focalizada registro
Transparencia focalizada registroTransparencia focalizada registro
Transparencia focalizada registroindesol
 
B5 Kennis Kringen Branding
B5 Kennis Kringen BrandingB5 Kennis Kringen Branding
B5 Kennis Kringen BrandingMarina Hoogeveen
 
Affluent Consumer Market in the U.S., The
Affluent Consumer Market in the U.S., TheAffluent Consumer Market in the U.S., The
Affluent Consumer Market in the U.S., TheMarketResearch.com
 
Unidad ii formulación de alternativas de políticas públicas
Unidad ii formulación de alternativas de políticas públicasUnidad ii formulación de alternativas de políticas públicas
Unidad ii formulación de alternativas de políticas públicasAlisson Macías
 
Desviacion estandar
Desviacion estandarDesviacion estandar
Desviacion estandaroaca54
 
Social media marketing - India trends study
Social media marketing - India trends studySocial media marketing - India trends study
Social media marketing - India trends studyEY
 

Andere mochten auch (20)

Employee involvement
Employee involvementEmployee involvement
Employee involvement
 
Apostila eletronica pgrss
Apostila eletronica pgrssApostila eletronica pgrss
Apostila eletronica pgrss
 
Auditoría interna unidad 5,6 y 7
Auditoría interna  unidad 5,6 y 7Auditoría interna  unidad 5,6 y 7
Auditoría interna unidad 5,6 y 7
 
Equidad ig
Equidad igEquidad ig
Equidad ig
 
Tm03 modelo de casos de uso
Tm03 modelo de casos de usoTm03 modelo de casos de uso
Tm03 modelo de casos de uso
 
Study of distribution channel strategy of pepsico for the positioning of the ...
Study of distribution channel strategy of pepsico for the positioning of the ...Study of distribution channel strategy of pepsico for the positioning of the ...
Study of distribution channel strategy of pepsico for the positioning of the ...
 
Esquema comparativo de los tipos de modelos y metodologías
Esquema comparativo de los tipos de modelos y metodologíasEsquema comparativo de los tipos de modelos y metodologías
Esquema comparativo de los tipos de modelos y metodologías
 
Healthcare Marketing Executives: Are You Ready for the Future?
Healthcare Marketing Executives: Are You Ready for the Future?Healthcare Marketing Executives: Are You Ready for the Future?
Healthcare Marketing Executives: Are You Ready for the Future?
 
Cercapaz compendio de_oientaciones para la paz
Cercapaz compendio de_oientaciones para la pazCercapaz compendio de_oientaciones para la paz
Cercapaz compendio de_oientaciones para la paz
 
Transparencia focalizada registro
Transparencia focalizada registroTransparencia focalizada registro
Transparencia focalizada registro
 
Hannah Rudman221008
Hannah Rudman221008Hannah Rudman221008
Hannah Rudman221008
 
B5 Kennis Kringen Branding
B5 Kennis Kringen BrandingB5 Kennis Kringen Branding
B5 Kennis Kringen Branding
 
Affluent Consumer Market in the U.S., The
Affluent Consumer Market in the U.S., TheAffluent Consumer Market in the U.S., The
Affluent Consumer Market in the U.S., The
 
Victimologia
VictimologiaVictimologia
Victimologia
 
Unidad ii formulación de alternativas de políticas públicas
Unidad ii formulación de alternativas de políticas públicasUnidad ii formulación de alternativas de políticas públicas
Unidad ii formulación de alternativas de políticas públicas
 
Análisis y diseño orientado a objetos
Análisis y diseño orientado a objetosAnálisis y diseño orientado a objetos
Análisis y diseño orientado a objetos
 
Desviacion estandar
Desviacion estandarDesviacion estandar
Desviacion estandar
 
Social media marketing - India trends study
Social media marketing - India trends studySocial media marketing - India trends study
Social media marketing - India trends study
 
Manual slp
Manual slpManual slp
Manual slp
 
Manual energia biomasica
Manual energia biomasicaManual energia biomasica
Manual energia biomasica
 

Ähnlich wie Tema5 fispc0809

Ähnlich wie Tema5 fispc0809 (20)

Fpr Tema 1 www.fresymetal.com
Fpr Tema 1 www.fresymetal.comFpr Tema 1 www.fresymetal.com
Fpr Tema 1 www.fresymetal.com
 
Presentación1.pptx
Presentación1.pptxPresentación1.pptx
Presentación1.pptx
 
Algoritmos (DFD, Pseudocodigos).pptx
Algoritmos (DFD, Pseudocodigos).pptxAlgoritmos (DFD, Pseudocodigos).pptx
Algoritmos (DFD, Pseudocodigos).pptx
 
Unidad 1
Unidad 1Unidad 1
Unidad 1
 
Algoritmo diagrama de_flujo
Algoritmo diagrama de_flujoAlgoritmo diagrama de_flujo
Algoritmo diagrama de_flujo
 
Secuencial
SecuencialSecuencial
Secuencial
 
Principios de programacion
Principios de programacionPrincipios de programacion
Principios de programacion
 
1.2.3.- Pseudocódigo
1.2.3.- Pseudocódigo1.2.3.- Pseudocódigo
1.2.3.- Pseudocódigo
 
Visual basic terminado[1]
Visual basic terminado[1]Visual basic terminado[1]
Visual basic terminado[1]
 
Visual basic terminado[1]
Visual basic terminado[1]Visual basic terminado[1]
Visual basic terminado[1]
 
Unidad 1
Unidad 1Unidad 1
Unidad 1
 
Jhovany
JhovanyJhovany
Jhovany
 
Jhovany
JhovanyJhovany
Jhovany
 
Unidad 1
Unidad 1Unidad 1
Unidad 1
 
Clase 1 lógica de programación
Clase 1 lógica de programaciónClase 1 lógica de programación
Clase 1 lógica de programación
 
Apuntes programacion basica
Apuntes programacion basicaApuntes programacion basica
Apuntes programacion basica
 
Algoritmos y diagramas_de_flujo
Algoritmos y diagramas_de_flujoAlgoritmos y diagramas_de_flujo
Algoritmos y diagramas_de_flujo
 
Pseudocodigos, algoritmos y diagramas de flujo
Pseudocodigos, algoritmos y diagramas de flujoPseudocodigos, algoritmos y diagramas de flujo
Pseudocodigos, algoritmos y diagramas de flujo
 
Clase1 algoritmos
Clase1 algoritmosClase1 algoritmos
Clase1 algoritmos
 
Unidad 2
Unidad 2Unidad 2
Unidad 2
 

Tema5 fispc0809

  • 1. Tema 5 Algoritmos y estructuras de programaci´on Versi´on: 2 de marzo de 2009 5.1 Fases de creaci´on de un programa El proceso de resoluci´on de problemas en un ordenador conduce a la escritura de un programa y su ejecuci´on. Las fases en el desarrollo de un programa pueden resumirse de la siguiente forma: 1. Analizar el problema consiste en conocer perfectamente en qu´e consiste y qu´e resultados se desean obtener. 2. Planificaci´on de la resoluci´on del problema, dividi´endolo, si es complicado, en una secuencia de etapas m´as simples. Esta fase se lleva a cabo EN UN PAPEL, estableciendo lo m´as claramente posible la finalidad de cada etapa, los datos que se necesitan de entrada, los datos que producir´ıan en salida, los algoritmos (ver la Secci´on 5.2) que se utilizar´an, etc. 3. Edici´on del c´odigo fuente, es decir, escritura del mismo utilizando un editor de textos simple (sin formato) y un lenguaje de programaci´on. Los programas fuente ser´an almacenados en ficheros de texto, normalmente en el disco duro del ordenador. 4. Compilaci´on y ejecuci´on del programa al lenguaje m´aquina. 5. Correcci´on de errores del programa. Los errores se corregir´an en el c´odigo fuente, repitiendo los pasos 3 y 4 tantas veces como sea necesario. Si se producen errores en la l´ogica del programa, es decir, si el programa “funciona” pero produce resultados incorrectos, hay que modificar el algoritmo volviendo al paso 2. Estos errores son los m´as dif´ıciles de detectar. 6. Documentaci´on. Una vez que el programa funcione correctamente, es conveniente revisar el c´odigo fuente para ordenarlos, eliminar c´alculos innecesarios e incluir las l´ıneas de comentario necesarias, que normalmente deben incluir unas breves explicaciones al principio del c´odigo sobre la finalidad del programa y sus argumentos de entrada y de salida. 5.2 Algoritmos Un ordenador es capaz de realizar “s´olo” determinadas acciones sencillas, tales como sumar, com- parar o transferir datos, pero los problemas que normalmente interesa resolver son m´as complejos. Para resolver un problema real es necesario, en primer lugar, encontrar un m´etodo de resoluci´on y, 31
  • 2. Algoritmos y estructuras de programaci´on 32 posteriormente, determinar la sucesi´on de acciones sencillas (susceptibles de ser ejecutadas por un ordenador) en que se descompone dicho m´etodo. No todos los m´etodos de soluci´on de un problema pueden ser puestos es pr´actica en un ordenador. Para que un procedimiento pueda ser implantado en un ordenador debe ser: Preciso: estar compuesto de pasos bien definidos (no ambiguos) y ordenados. Definido: si se sigue dos veces, se obtiene el mismo resultado cada vez. Finito: tener un n´umero finito de pasos. Un procedimiento o m´etodo para resolver un problema que cumpla los requisitos anteriores se dice que es un algoritmo. Se puede dar por tanto la siguiente definici´on: Un algoritmo es un m´etodo para resolver un problema mediante una secuencia de pasos bien definidos, ordenados y finitos. Para que se pueda ejecutar el algoritmo es preciso, adem´as, que se disponga de las “herramien- tas” adecuadas para llevar a cabo cada uno de los pasos. Si no es as´ı, estos deber´an, a su vez, ser descompuestos en una secuencia (algoritmo) de pasos m´as simples que s´ı se puedan llevar a cabo. Un programa de ordenador es una sucesi´on de ´ordenes que describen un algoritmo, escritas de forma que puedan ser entendidas por el ordenador. En un algoritmo (y por tanto en un programa) se distinguen las siguientes acciones: Entrada: es la informaci´on de partida que necesita el algoritmo para arrancar. Proceso: es el conjunto de todas las operaciones a realizar. Salida: son los resultados obtenidos. Un ejemplo elemental es el Algoritmo 5.1. Algoritmo 5.1 Preparar una taza de t´e. Entrada: tetera, taza, bolsa de t´e Salida: taza de t´e Inicio Tomar la tetera Llenarla de agua Encender el fuego Poner la tetera en el fuego Esperar a que hierva el agua Tomar la bolsa de t´e Introducirla en la tetera Esperar 1 minuto Echar el t´e en la taza Fin
  • 3. Algoritmos y estructuras de programaci´on 33 5.3 Representaci´on de algoritmos Las dos herramientas m´as utilizadas com´unmente para describir algoritmos son: Diagramas de flujo: son representaciones gr´aficas de secuencias de pasos a realizar. Cada operaci´on se representa mediante un s´ımbolo normalizado el Instituto Norteamericano de Normalizaci´on (ANSI - American National Standars Institute). Las l´ıneas de flujo indican el orden de ejecuci´on. Algunos de los s´ımbolos principales se muestran en la Figura 5.1, como son: Inicio/Fin del algoritmo, Lectura/Escritura de datos que el programa necesita o genera (por ejemplo,lectura de datos que se teclean o escritura de datos en un fichero); Proceso conjunto de instrucciones secuenciales; Decisi´on es una bifurcaci´on en el flujo del algoritmo en base a que se verifique o no cierta condici´on (ver la Secci´on 5.5). Los diagramas de flujo suelen ser usados s´olo para representar algoritmos peque˜nos, ya que abarcan mucho espacio. Inicio/Fin Lectura/Escritura Proceso Decisión No Sí Figura 5.1: S´ımbolos en diagramas de flujo. Pseudoc´odigos: describen un algoritmo de forma similar a un lenguaje de programaci´on pero sin su rigidez, de forma m´as parecida al lenguaje natural. Presentan la ventaja de ser m´as compactos que los diagramas de flujo, m´as f´aciles de escribir para las instrucciones complejas y m´as f´aciles de transferir a un lenguaje de programaci´on. El pseudoc´odigo no est´a regido por ning´un est´andar. En estos apuntes usaremos las palabras LEER/IMPRIMIR para representar las acciones de lectura de datos (el programa recibe datos desde alg´un sitio) y salida de datos (el programa escribe informaci´on en alg´un medio) El Algoritmo 5.2 y la Figura 5.2 muestran respectivamente el pseudoc´odigo y el diagrama de flujo del algoritmo para calcular la altura de una persona en pulgadas y pies a partir de la altura en cent´ımetros introducida por el teclado.
  • 4. Algoritmos y estructuras de programaci´on 34 Algoritmo 5.2 Calcular una altura en pulgadas (1 pulgada=2.54 cm) y pies (1 pie=12 pulgadas), a partir de la altura en cent´ımetros, que se introduce por el teclado. Inicio 1- IMPRIMIR ’Introduce la altura en centimetros: ’ 2- LEER: altura 3- CALCULAR pulgadas=altura/2.54 4- CALCULAR pies=pulgadas/12 5- IMPRIMIR ’La altura en pulgadas es: ’, pulgadas 6- IMPRIMIR ’La altura en pies es : ’, pies Fin pies=pulgadas/12 pulgadas=altura/2.54 LEER altura ESCRIBIR pulgadas, pies Fin Figura 5.2: Diagrama de flujo para determinar la altura de una persona en pulgadas y pies a partir de la altura en cent´ımetros introducida por el teclado. 5.4 Estructura secuencial Es aquella en la que una acci´on (instrucci´on) sigue a la otra en el orden en el que est´an escritas. Su representaci´on y el diagrama de flujo se muestra en la Figura 5.3. Los Algoritmos 5.1 y 5.2 son ejemplos de algoritmos secuenciales. ... Instrucci´on 1 Instrucci´on 2 Instrucci´on 3 ... Instrucción 2 Instrucción 1 Instrucción 3 Figura 5.3: Estructura secuencial de instrucciones.
  • 5. Algoritmos y estructuras de programaci´on 35 5.5 Estructuras de control: condicionales y bucles Son parte fundamental de cualquier lenguaje. Sin ellas, las instrucciones de un programa s´olo podr´ıan ejecutarse en el orden en que est´an escritas (orden secuencial). Las estructuras de control permiten modificar este orden. Hay dos categor´ıas de estructuras de control: Condicionales o bifurcaciones: permiten que se ejecuten conjuntos distintos de instrucciones, en funci´on de que se verifique o no determinada condici´on. Bucles o repeticiones: permiten que se ejecute repetidamente un conjunto de instrucciones, bien un n´umero pre-determinado de veces, o bien hasta que se verifique una determinada condici´on. En t´erminos de un lenguaje de programaci´on, que se verifique o no una condici´on se traduce en que una (adecuada) expresi´on l´ogica tome el valor VERDADERO (TRUE) o tome el valor FALSO (FALSE). En los casos m´as sencillos y habituales la condici´on suele ser una comparaci´on entre dos datos, como por ejemplo: si a < b hacer una cosa y en caso contrario hacer otra distinta. A continuaci´on se describen las distintas estructuras de control. Para cada una de ellas se describe el diagrama de flujo y la sintaxis de la sentencia correspondiente en lenguaje MATLAB. Obs´ervese que todas ellas tienen una ´unica entrada y una ´unica salida. 5.5.1 Estructura condicional simple: IF Este es el tipo m´as sencillo de estructura condicional. Sirve para implementar acciones condicionales del tipo siguiente: Si se verifica una determinada condici´on, ejecutar una serie de instrucciones y luego seguir adelante. Si la condici´on NO se cumple, NO se ejecutan dichas instrucciones y se sigue adelante. ... if condici´on instrucciones end ... No Sí Condición Instrucciones Figura 5.4: Estructura condicional simple: IF. Obs´ervese que, en ambos casos (que se verifique o no la condici´on), los “caminos” bifurcados se unen posteriormente en un punto, es decir, el flujo del programa recupera su car´acter secuencial, y se contin´ua ejecutando por la instrucci´on siguiente a la estructura IF. Como ejemplo de utilizaci´on de este tipo de condicional, se considera el c´alculo del valor en un punto x de una funci´on definida por partes, como por ejemplo: f(x) = 0 si x ≤ 0 x2 si x > 0
  • 6. Algoritmos y estructuras de programaci´on 36 El Algoritmo 5.3 muestra el pseudoc´odigo correspondiente. Algoritmo 5.3 C´alculo del valor de la funci´on f(x) = 0 si x ≤ 0, f(x) = x2 si x > 0. Inicio 1- LEER x 2- HACER f=0 3- Si x>0 HACER f=x2 Fin Si 4- IMPRIMIR ’El valor de la funcion es: ’, f Fin 5.5.2 Estructura condicional doble: IF - ELSE Este tipo de estructura permite implementar condicionales en los que hay dos acciones alternativas: Si se verifica una determinada condici´on, ejecutar un serie de instrucciones (bloque 1). Si no, esto es, si la condici´on NO se verifica, ejecutar otra serie de instrucciones (bloque 2). En otras palabras, en este tipo de estructuras hay una alternativa: se hace una cosa o se hace la otra. En ambos casos, se sigue por la instrucci´on siguiente a la estrucutra IF - ELSE. ... if condici´on bloque-1 else bloque-2 end ... No Sí Condición Bloque 2Bloque 1 Figura 5.5: Estructura condicional doble: IF - ELSE. Como ejemplo de utilizaci´on de este tipo de estructuras se plantea el problema de calcular las ra´ıces de una ecuaci´on de segundo grado ax2 + bx + c = 0 distinguiendo dos casos: que las ra´ıces sean reales o que sean complejas (no se contempla, de momento, dintinguir entre una o dos ra´ıces reales). Ver a continuaci´on el diagrama de flujo (Figura 5.6) y el pseudoc´odigo correspondiente (Algoritmo 5.4).
  • 7. Algoritmos y estructuras de programaci´on 37 LEER A,B,C D=B -4AC 2 A2=2A NoSí ¿D>0? ESCRIBIR x1,x2 Fin p DD= D x1=(-B+DD)/A2 x2=(-B-DD)/A2 CALCULAR CALCULAR Re=-B/A2 Im=DD/A2 p -DDD= CALCULAR ESCRIBIR Re, Im Figura 5.6: Diagrama de flujo para determinar las ra´ıces reales o complejas de la ecuaci´on de segundo grado Ax2 + Bx + C = 0. Algoritmo 5.4 C´alculo de las ra´ıces de la ecuaci´on de segundo grado Ax2 + Bx + C = 0, distinguiendo los casos de ra´ıces reales y complejas. Inicio 1- LEER A,B y C 2- CALCULAR D=B2-4*A*C 3- CALCULAR AA=2*A 4- Si D≥0 CALCULAR DD= √ D x1=(-B+DD)/AA x2=(-B-DD)/AA IMPRIMIR ’La ecuaci´on tiene ra´ıces reales:’, x1, x2 Si no CALCULAR DD= √ -D Re=-B/AA Im=DD/A2 IMPRIMIR ’La ecuaci´on tiene ra´ıces complejas conjugadas:’ IMPRIMIR ’Parte real:’, Re IMPRIMIR ’Parte imaginaria:’, Im Fin Si Fin 5.5.3 Estructura condicional m´ultiple: IF - ELSEIF - ELSE En su forma m´as general, la estructura IF - ELSEIF - ELSE permite implementar condicionales m´as complicados, en los que se “encadenan” condiciones en la forma siguiente:
  • 8. Algoritmos y estructuras de programaci´on 38 Si se verifica la condici´on 1, ejecutar las instrucciones del bloque 1. Si no se verifica la condici´on 1, pero S´I se verifica la condici´on 2 , ejecutar las instrucciones del bloque 2. Si no, esto es, si no se ha verificado ninguna de las condiciones anteriores, ejecutar las instruc- ciones del bloque 3. En cualquiera de los casos, el flujo del programa contin´ua por la instrucci´on siguiente a la estructura IF - ELSEIF - ELSE. La sintaxis en lenguaje MATLAB y el diagrama de flujo, se muestran en la Figura 5.7. ... if condici´on-1 bloque-1 elseif condici´on-2 bloque-2 else bloque-3 end ... No No Condición 1 Condición 2 Bloque 1 SÍ Bloque 2 SÍ Bloque 3 Figura 5.7: Estructura condicional m´ultiple: IF- ELSEIF - ELSE. El Algoritmo 5.5 contiene un ejemplo de utilizaci´on de este tipo de estructura. Algoritmo 5.5 Determinaci´on del signo de un n´umero: positivo, negativo o nulo. Inicio 1- LEER X 2- Si X>0 IMPRIMIR ’El n´umero tiene signo positivo’ Si no, si X<0 IMPRIMIR ’El numero tiene signo negativo’ Si no IMPRIMIR ’El numero es nulo’ Fin
  • 9. Algoritmos y estructuras de programaci´on 39 En la estructura IF - ELSEIF - ELSE se puede multiplicar la cl´ausula ELSEIF, obteni´endose as´ı una “cascada” de condiciones, como se muestra en el organigrama, cuyo funcionamiento es claro. En este tipo de estructura condicional, la cl´ausula ELSE junto con su bloque de instrucciones pueden no estar presente. Las distintas estructuras condicionales descritas pueden ser anidadas, es decir, puede incluirse una estructura IF (de cualquier tipo), como parte de las instrucciones que forman el bloque de uno de los ca- sos de otro IF. Como es l´ogico, no puede haber sola- pamiento. Cada estructura IF debe tener su propio fin (end). if condici´on-1 instrucciones-1 elseif condici´on-2 instrucciones-2 elseif condici´on-3 instrucciones-3 ... else instrucciones-k end Como ejemplo de utilizaci´on de este tipo de estructura condicional y de estructuras anidadas, v´ease el Algoritmo 5.6. Algoritmo 5.6 Dados dos n´umeros reales, a y b, y el s´ımbolo, S (car´acter), de un operador aritm´etico (+, -, *, /), imprimir el resultado de la operaci´on a S b Inicio LEER a LEER b LEER S Si S=’+’ IMPRIMIR ’El resultado es =’, a+b Si no, si S=’-’ IMPRIMIR ’El resultado es =’, a-b Si no, si S=’*’ IMPRIMIR ’El resultado es =’, a*b Si no, si b=0 Si a=0 IMPRIMIR ’El resultado es =’, NaN (indeterminaci´on) Si no IMPRIMIR ’El resultado es =’, Inf (infinito) Fin Si Si no IMPRIMIR ’El resultado es =’, a/b Fin Si Fin
  • 10. Algoritmos y estructuras de programaci´on 40 5.5.4 Estructura de repetici´on indexada: FOR Este tipo de estructura permite implementar la repetici´on de un cierto conjunto de instrucciones un n´umero pre-determinado de veces. Para ello se utiliza una variable de control del bucle, llamada tambi´en ´ındice, que va recorriendo un conjunto pre-fijado de valores en un orden determinado. Para cada valor del ´ındice en dicho conjunto, se ejecuta una vez el mismo conjunto de instrucciones. En la Figura 5.8 se han representado la forma de escribir esta estructura en MATLAB y el organi- grama correspondiente: el bloque de instrucciones se ejecuta una vez para cada valor del indice, que va tomando sucesivamente el valor de cada componente del vector V, de longitud N. ... for indice=V instrucciones end ... TRUE FALSE indice=V(k) k = 1 k = k+1 k > N Instrucciones Figura 5.8: Repetici´on indexada: sintaxis MATLAB y diagrama de flujo. El indice del bucle recorre los valores de un vector V de longitud N. Como ejemplo de utilizaci´on de la estructura FOR, v´eanse los Algoritmos 5.8 y 5.9 para calcular la suma de los n primeros n´umeros impares. Nota 5.7 a) El valor de la variable de control indice puede ser utilizado o no dentro del conjunto de instrucciones que forman parte del cuerpo del FOR, pero no debe ser modificado. b) El conjunto de valores que debe recorrer el indice puede ser vac´ıo (N=0). En ese caso, el bloque de instrucciones no se ejecuta ninguna vez. c) Las estructuras FOR e IF pueden “anidarse”, es decir, incluir una dentro de la otra, con la restricci´on (de sentido com´un) de que la interior tiene que estar completamente contenida en uno de los bloques de instrucciones de la otra. V´ease, como ejemplo, el Algoritmo 5.10.
  • 11. Algoritmos y estructuras de programaci´on 41 Algoritmo 5.8 Dado un entero, n, calcular la suma de los n primeros n´umeros impares. Inicio LEER n HACER suma=0 Para i= 1, 3, 5, ..., 2*n-1 HACER suma=suma+i Fin Para IMPRIMIR ’La suma vale : ’, suma Fin Algoritmo 5.9 Dado un entero, n, calcular n k=0 1 2 k = 1 + 1 2 + 1 22 + · · · + 1 2n Inicio LEER n HACER suma=1 HACER ter=1 Para k= 1, 2, ..., n HACER ter=ter/2 HACER suma=suma+ter Fin Para IMPRIMIR ’La suma vale : ’, suma Fin Algoritmo 5.10 Dado un n´umero natural, n, imprimir la lista de sus divisores, en orden decreciente. Inicio LEER n IMPRIMIR ’ Lista de divisores del numero: ’, n Para i=ParteEntera(n/2) hasta 2 (incremento -1) Si resto(n/i)=0 IMPRIMIR i Fin Si Fin Para IMPRIMIR 1 Fin
  • 12. Algoritmos y estructuras de programaci´on 42 5.5.5 Estructura repetitiva condicional: WHILE Permite implementar la repetici´on de un mismo conjunto de instrucciones mientras que se verifique una determinada condici´on: el n´umero de veces que se repetir´a el ciclo no est´a definido a priori. El diagrama de flujo descriptivo de esta estructura se muestra en la Figura 5.9. ... while expresi´on-l´ogica instrucciones end ... FALSE TRUE Condición Instrucciones Figura 5.9: Estructura repetitiva WHILE: sintaxis MATLAB y diagrama de flujo. Su funcionamiento es evidente, a la vista del diagrama: 1. Al comienzo de cada iteraci´on se eval´ua la expresi´on-l´ogica. 2. Si el resultado es VERDADERO, se ejecuta el conjunto de instrucciones y se vuelve a iterar, es decir, se repite el paso 1. 3. Si el resultado es FALSO, se detiene la ejecuci´on del ciclo WHILE y el programa se sigue ejecutando por la instrucci´on siguiente al END. El Algoritmo 5.11 es un ejemplo de utilizaci´on de esta estructura. Algoritmo 5.11 Imprimir de forma ascendente los 100 primeros n´umeros naturales. Inicio i=1 Mientras que i ≤ 100 IMPRIMIR i HACER i=i+1 Fin Mientras Fin 5.5.6 Ruptura de ciclos de repetici´on: BREAK y CONTINUE En ocasiones es necesario interrumpir la ejecuci´on de un ciclo de repetici´on en alg´un punto interno del bloque de instrucciones que se repiten. L´ogicamente, ello depender´a de que se verifique o no alguna condici´on. La interrupci´on puede hacerse de dos formas: 1. Abandonando el ciclo de repetici´on definitivamente.
  • 13. Algoritmos y estructuras de programaci´on 43 2. Abandonando la iteraci´on en curso, pero comenzando la siguiente. Las instrucciones para poner esto en pr´actica tienen nombres diversos en los distintos lenguajes de programaci´on. En MATLAB, la primera opci´on se implementa con la instrucci´on BREAK y la segunda con la instrucci´on CONTINUE. Ambas pueden utilizarse tanto para romper un ciclo FOR como un ciclo WHILE. Cuando se utiliza la orden BREAK dentro de un ciclo FOR, el ´ındice del bucle conserva, fuera del mismo, el ´ultimo valor que tom´o. V´eanse los correspondientes diagramas de flujo en las Figuras 5.10 y 5.11. FALSE TRUE Condición WHILE Instrucciones-1 Condición ruptura BREAK Instrucciones-2 TRUE FALSE Figura 5.10: Diagrama de flujo de la ruptura de ciclo BREAK. FALSE TRUE Condición WHILE Instrucciones-1 Condición ruptura CONTINUE Instrucciones-2 TRUE FALSE Figura 5.11: Diagrama de flujo de la ruptura de ciclo CONTINUE. 5.5.7 Estructura de elecci´on entre varios casos: SWITCH Este tipo de estructura permite decidir entre varios caminos posibles, en funci´on del valor que tome una determinada instrucci´on. El diagrama de flujo correspondiente a una de estas estructuras (con cuatro casos) se presenta en la Figura 5.12. switch expresi´on case valor-1 instrucciones caso 1 case valor-2 instrucciones caso 2 ... case {valores...} instrucciones caso k otherwise instrucciones end Valor Expresión Caso 1 Instrucs. caso 1 Caso 2 Instrucs. caso 2 Caso k Instrucs. caso k otherwise Instrucs. "otro caso" .... Figura 5.12: Estructura de elecci´on de caso SWITCH: sintaxis MATLAB y diagrama de flujo.
  • 14. Algoritmos y estructuras de programaci´on 44 En cada uno de los casos, el valor correspondiente puede ser o bien un s´olo valor, o bien un conjunto de valores, en cuyo caso se indican entre llaves. La cl´ausula OTHERWISE y su correspondiente conjunto de instrucciones puede no estar presente. El funcionamiento es el siguiente: 1. Al comienzo se eval´ua la expresi´on. 2. Si expresi´on toma el valor (´o valores) especificados junto a la primera cl´ausula CASE, se ejecuta el conjunto de instrucciones de este caso y despu´es se abandona la estructura SWITCH, continuando por la instrucci´on siguiente al END. 3. Se repite el procedimiento anterior, de forma ordenada, para cada una de las cl´ausulas CASE que siguen. 4. Si la cl´ausula OTHERWISE est´a presente y la expresi´on no ha tomado ninguno de los valores anteriormente especificados, se ejecuta el conjunto de instrucciones correspondiente. Obs´ervese que se ejecuta, como m´aximo el conjunto de instrucciones de uno de los casos, es decir, una vez que se ha verificado un caso y se ha ejecutado su conjunto de instrucciones, no se testea el resto de casos, ya que se abandona la estructura. Obviamente, si la cl´ausula OTHERWISE no est´a presente, puede ocurrir que no se d´e ninguno de los casos. Como ejemplo de utilizaci´on, se presenta el mismo proceso del Algoritmo 5.6, pero utilizando la sentencia SWITCH. Algoritmo 5.12 Dados dos n´umeros reales, a y b, y el s´ımbolo, S (car´acter), de un oper- ador aritm´etico (+, -, *, /), imprimir el resultado de la operaci´on a S b LEER a , b , S Elegir caso S Caso ’+’ IMPRIMIR ’El resultado es =’, a+b Caso ’-’ IMPRIMIR ’El resultado es =’, a-b Caso ’*’ IMPRIMIR ’El resultado es =’, a*b Caso ’*’ IMPRIMIR ’El resultado es =’, a*b Caso ’/’ Si a=0 IMPRIMIR ’El resultado es =’, a/b Si no, si b=0 IMPRIMIR ’El resultado es =’, Inf (infinito) Si no IMPRIMIR ’El resultado es =’, NaN (indeterminaci´on) Fin Si En otro caso IMPRIMIR ’El operador no se reconoce’ Fin Elegir caso
  • 15. Algoritmos y estructuras de programaci´on 45 5.6 Funciones externas Con lo expuesto hasta aqu´ı se pueden escribir programas sencillos y no demasiado largos. Pero varias razones justifican la necesidad de disponer de otro tipo de recursos de programaci´on. Por una parte, puede haber en la resoluci´on de un problema, partes que se repitan. Por otra parte, es conveniente partir la resoluci´on de un problema “largo” en una serie de etapas m´as cortas que se concatenan para resolver el problema global. Los programas demasiado largos son dif´ıciles de revisar y de corregir. En cualquier lenguaje de programaci´on, existen las funciones. Son trozos de c´odigo que se escriben separadamente y que realizan c´alculos o tareas espec´ıficas. Todos los lenguajes de programaci´on tienen funciones incorporadas o intr´ınsecas, es decir, funciones que realizan c´alculos o tareas de uso habitual que han sido ya programados y est´an disponibles para el usuario. Pero, adem´as, todos los lenguajes tienen la posibilidad de que el usuario defina sus propias funciones, que reciben el nombre de funciones externas. La forma de definir las funciones depende del lenguaje de programaci´on. En Matlab, las funciones deben tener la estructura siguiente: function [argumentos de salida] =nombre(argumentos de entrada) ... instrucciones ... Aqu´ı, function es una palabra reservada: no se cambia y debe estar presente. nombre es el nombre que se quiere dar a la funci´on, para identificarla. Los argumentos de entrada y los argumentos de salida son nombre de variable que hacen el papel de las variables mudas en la definici´on de una funci´on matem´atica: s´ımbolos para describir la funci´on. En programaci´on reciben, tambi´en, el nombre de variables mudas (de entrada o de salida). Los argumentos de entrada y de salida, cuando hay varios, se separan por comas. Puede no haber argumentos de entrada, en cuyo caso, no es necesario poner los par´entesis. Puede, asimismo, no haber argumentos de salida, en cuyo caso no es necesario poner los corchetes ni el signo igual. A continuaci´on de la instruci´on de declaraci´on (function), se escribe el c´odigo para llevar a cabo los c´alculos o tareas correspondientes. Para que una funci´on MATLAB (llamada tambi´en M-funci´on) est´e disponible para su uso desde la ventana de comandos, desde un script o desde otra funci´on, debe ser guardada en un fichero de nombre igual al de la funci´on y extensi´on .m, y debe estar en el directorio actual de trabajo. La ejecuci´on de una M-funci´on se termina cuando se terminan sus instrucciones. Cuando ello sucede el control de ejecuci´on vuelve al punto desde el que se invoc´o a la funci´on: la linea de comandos de MATLAB, un script o bien otra funci´on. A veces es necesario terminar la ejecuci´on de una function antes de que se terminen sus instruc- ciones: ello se hace mediante la sentencia RETURN. Esta instrucci´on, en cualquier parte de una funci´on o de un script provoca el inmediato abandono del mismo. A modo de ejemplo de uso de una funci´on, v´ease el siguiente, que muestra el c´odigo de una M- funci´on que calcula el valor de una funci´on matem´atica.
  • 16. Algoritmos y estructuras de programaci´on 46 EJEMPLO: M-funci´on para calcular el valor en un punto x de la funci´on f(x) = ex sen(x/3) cos x + π 2 function [y]=mifun(x) v=exp(x.*sin(x/3)); w=cos((x+pi)/2); y=v.*w; Una vez escrita y salvada, como se ha dicho antes, en un fichero de nombre mifun.m en el directorio de trabajo, esta funci´on estar´a disponible para su uso en forma similar a cualquier otra funci´on intr´ınseca. Las variables definidas dentro de una funci´on son variables locales, en el sentido de que son inaccesibles desde “fuera” de esta funci´on. Se puede decir que pertenecen al espacio de trabajo propio de la funci´on y no son vistas desde otros espacios de trabajo. Por ejemplo, si se utiliza esta funci´on desde la l´ınea de comandos de Matlab, y se tiene, en el espacio de trabajo de Matlab, una variable de nombre, por ejemplo, w, esta variable y la w de la funci´on son distintas: se refieren a una posiciones diferentes en memoria.