Documente Academic
Documente Profesional
Documente Cultură
Indice general
1. Algoritmos
1.1. Introduccion . . . . . . . . . . . . . . . .
1.2. Algoritmos . . . . . . . . . . . . . . . . .
1.2.1. Algoritmos en lenguaje natural .
1.2.2. Algoritmos en Pseudo-lenguaje .
1.2.3. Algoritmos en diagramas de flujo
1.2.4. Preguntas y ejercicios resumen . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
. 1
. 2
. 3
. 7
. 12
. 25
Indice de figuras
1.1.
1.2.
1.3.
1.4.
1.5.
1.6.
1.7.
ii
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
14
14
15
16
17
18
19
Algoritmos
1.1.
Introducci
on
En nuestras vidas cotidianas nos enfrentamos da a da con la necesidad de resolver problemas, de hecho, el solo reto de sobrevivir es un inconveniente que todos los
seres vivos debemos enfrentar a diario. Algunos de estos problemas los resolvemos
sin pensar en ello o de manera inconsciente como por ejemplo mantenernos de pie
sin caernos (nuestro cerebro continuamente coordina movimientos para compensar
por los desplazamientos de nuestro centro de gravedad), o nuestro sistema nervioso
simpatico tomando acciones para mantener funciones vitales activas, etc.
Un problema es en resumidas cuentas, un obstaculo, impedimento o dificultad para
alcanzar alg
un fin y desde esta perspectiva pudiera decirse que la actividad mas
com
un de los seres humanos y seres vivos en general es la de resolver problemas.
De acuerdo al n
umero de variables que inciden o afectan un problema, la informacion disponible sobre estas variables, la cantidad de posibles soluciones, las
restricciones en el espacio de b
usqueda o solucion, podemos agrupar los problemas
en grandes familias como por ejemplo problemas simples, complejos, indeterminados,
determinados, computables, no computables, etc.
CAPITULO 1. ALGORITMOS
Jose G. Sanchez
En esta parte del curso trataremos estrategias formales para abordar el proceso de resolver problemas, en particular aquellos determinados y computables. Los
analizaremos para llegar a una serie de pasos que le puedan dar solucion y describiremos esos pasos usando una semantica llamada pseudo-lenguaje y una representacion
grafica llamada diagramas de flujo.
1.2.
Algoritmos
Probelma que puede ser correctamente planteado y se asume que tiene un objetivo y soluci
on
verificable pero que a
un no ha sido resuelto. Fuente: http://en.wikipedia.org/wiki/Open problem
Pagina 2
CAPITULO 1. ALGORITMOS
Jose G. Sanchez
1.2.1.
1. Acu
nar una rueda del carro para evitar movimiento
2. Colocar triangulo de seguridad si esta en la va p
ublica
3. Sacar el caucho de repuesto y herramientas necesarias
4. Colocar el gato en posicion y subir hasta hacer algo de presion con el carro
5. Aflojar las tuercas de la rueda
6. Levantar el carro
7. Sacar las tuercas y la rueda. Colocar el repuesto
8. Ajustar tuercas hasta que la rueda suspendida gire
9. Bajar el carro
10. Ajustar bien las tuercas
11. Guardar las herramientas de trabajo y de seguridad usadas
Pagina 3
CAPITULO 1. ALGORITMOS
Jose G. Sanchez
Como ves, estos pasos seguidos en orden logran el objetivo de cambiar el neumatico. Si ejecutas el paso 6 antes del 5 no podras liberar la rueda de sus tuercas y si
haces el 10 antes del 9 tampoco lograras el objetivo con la calidad que se requiere
(la rueda firme y segura). En algunos pasos se puede cambiar el orden o incluso
hacerse en forma simultanea sin alterar el objetivo, por ejemplo, los pasos 1, 2 y 3
puedes hacerlos simultaneamente e incluso hay pasos que si no los haces el objetivo
principal a
un se cumple, el u
ltimo paso es un ejemplo puesto que si no guardas las
herramientas, el caucho a
un quedo firme y seguro. La computacion es en principio
secuencial, sin embargo, en ocasiones es posible tomar pasos de un proceso y realizarlos de forma simultanea o asignarles otro nivel de prioridad, pero esto es materia
de otras ramas de la ingeniera en computacion como el paralelismo, el computo
distribuido, el multiprocesamiento, etc. Para efectos de nuestro estudio todos los
pasos del algoritmo son esenciales y secuenciales. Veamos otros ejemplos, Que pasos seguiras para cosechar tus propios tomates?
1. Adquirir la semilla
2. Preparar la tierra
3. Sembrar la semilla
4. Regar
5. Colocar sostenes para la planta
6. Regar y controlar periodicamente
7. Al crecer los tomates, cosechar
Estas tareas, como se describen aqu, no son muy complicadas en cuanto a los
diferentes estados que puedan tener las variables que las afectan, por ejemplo, si en la
tarea de cambiar el neumatico hay una falla del gato y ocurre un evento inesperado,
tenemos que tomar acciones correctivas no contempladas en el algoritmo. A mayor
consideracion de los posibles eventos que puedan suceder, mas acciones a seguir
se deben considerar, esto es, mientras mayor sea el n
umero de variables que se
consideran al resolver un problema, y mayor la amplitud de los posibles estados de
estas variables, mas complejo sera el algoritmo que lo resuelva.
Una forma de tratar con diferentes estados de variables es con las llamadas reglas
Pagina 4
CAPITULO 1. ALGORITMOS
Jose G. Sanchez
Pagina 5
CAPITULO 1. ALGORITMOS
Jose G. Sanchez
Pagina 6
CAPITULO 1. ALGORITMOS
1.2.2.
Jose G. Sanchez
Algoritmos en Pseudo-lenguaje
La palabra pseudo viene del griego y significa falso, por ejemplo, un pseudo-Doo
es un objeto que parece ser un Doo pero no es exactamente un Doo (sea lo que sea
eso). Como vimos en la seccion anterior, un algoritmo en lenguaje natural nos da
mucha versatilidad para describir los pasos que se deben hacer pero con el costo que
el nivel de detalle usado puede causar ambig
uedades o no ser completo o en fin, perder algunas de las 5 propiedades de los algoritmos mencionadas en la introduccion.
Por un lado nos permite abordar generalidades en problemas muy complejos, no
bien definidos o imprecisos pero para problemas muy bien definidos, computables,
determinados y especificados es mejor usar un sistema de representacion un poco
mas formal para hacer el algoritmo mas universal y eficiente.
Algoritmos en pseudo-lenguaje
Algoritmo cuyas instrucciones y reglas especficas de construccion estan en lenguaje natural pero representan operaciones, organizacion y una estructura facilmente traducibles a un codigo de computadora, por eso tambien es llamado
pseudo-codigo.
Generalmente, un algoritmo en pseudo-lenguaje comienza con especificar cuales
son las entradas con las que trabajara y cuales las salidas esperadas. Las operaciones
deben especificarse lo mas clara y precisamente posible y el flujo de ejecucion debe
identificarse claramente. Usualmente se enumeran las lneas de manera de facilitar
el seguimiento de las bifurcaciones y ciclos. Veamos algunos ejemplos.
Algoritmo 1 Calculo del area de un crculo
Entrada: radio del crculo
Salida: area del crculo
1: r radio
2: A = r 2
3: imprimir "Area =" A
El algoritmo 1 especifica al principio la entrada que necesita y la salida que espera producir. En este caso la salida esperada es el area de un crculo pero este calculo
no se puede realizar si no se le suministra al algoritmo el radio de ese crculo. La
primera lnea del codigo es la asignacion de la entrada a una variable del algoritmo
Pagina 7
CAPITULO 1. ALGORITMOS
Jose G. Sanchez
llamada r, se puede deducir por la direccion de la flecha que el valor que el usuario
de para el radio se almacenara en esta variable. En otras palabras, la instruccion
1 lo que hace es decirle al usuario bien, dame el valor del radio del crculo cuya
area quieres saber y una vez que eso ocurre, se pasa a la lnea 2 donde se realiza el
calculo en s y se almacena en una variable llamada A para poder imprimirla luego
ya que es la salida deseada.
Veamos otros ejemplos:
Algoritmo 2 Calculo del mayor de 2 n
umeros
Entrada: n
umero1, n
umero2
Salida: n
umero mayor
1: num1 n
umero1
2: num2 n
umero2
3: si num1 > num2 entonces
4:
mayor = num1
5: si no
6:
mayor = num2
7: fin si
8: imprimir n
umero mayor = mayor
Las variables num1 y num2 son las que hacen posible que el usuario ingrese al
algoritmo los valores de n
umero1 y n
umero2. Es importante que entiendas bien
esta diferencia. N
umero1 y n
umero2 son valores que solo conoce el usuario pues
el algoritmo no puede saber que valores se daran, mientras que num1 y num2 son
variables que no poseen valor hasta que se hace la operacion num1 n
umero1
en cuyo momento ya el algoritmo puede acceder a esos valores y trabajar con ellos.
La bifurcacion de la lnea 3 hace que solo se pueda realizar o bien la instruccion de
la lnea 4 o la de la lnea 6, solo una de esas dos se ejecutara, y la lnea 7 muestra
donde termina la instruccion de bifurcacion. Es conveniente saber donde finaliza
una instruccion de bifurcacion para saber cual es la instruccion siguiente a esta, por
ejemplo, el flujo del si en la bifurcacion de la lnea 3 se va a la lnea 4, el del no va
a la lnea 6 y la instruccion siguiente a la bifurcacion es la lnea 8. Si sigues bien
el algoritmo veras que la instruccion 3 solo ejecuta una operacion de asignacion y
luego pasa a la siguiente que es la lnea 8 para imprimir la salida.
Pagina 8
CAPITULO 1. ALGORITMOS
Jose G. Sanchez
Veamos el siguiente ejemplo con instrucciones de bifurcacion un poco mas complejas. Dentro del flujo de una bifurcacion puede haber otra bifurcacion, y dentro
de alguno de los flujos de esta puede haber otra y luego otra, etc. A esto se le llama
anidamiento y para evitar que se vuelva muy confuso, generalmente nos ayudamos
de la identacion del codigo para saber los niveles, es decir, cual bifurcacion es padre
de cual.
Algoritmo 3 Calculo del mayor de 3 n
umeros
Entrada: n
umero1, n
umero2, n
umero3
Salida: n
umero mayor
1: A n
umero1
2: B n
umero2
3: C n
umero3
4: si (A B) y (A C) entonces
5:
mayor = A
6: si no
7:
si (B A) y (B C) entonces
8:
mayor = B
9:
si no
10:
mayor = C
11:
fin si{del si de la lnea 7 }
12: fin si{del si de la lnea 4}
13: imprimir n
umero mayor = mayor
El algoritmo 3 muestra un ejemplo de bifurcaciones si-entonces-si no anidadas.
En la lnea 4 se pregunta si A es mayor o igual a B y a C. Si ambas de estas cosas
ocurren entonces el flujo va a la lnea 5, asigna a la variable mayor el valor de la
variable A y se va a la lnea 15; imprimir la salida, pero Por que se va a la lnea 15
y no a la 6 u otra? veamos, si ocurre que A no es mayor o igual a B la condicion de
la bifurcacion es falsa, o sea, debe irse al si no, pero ah encontramos otra bifurcacion que pregunta si es B mayor o igual a A o C. Si esto no ocurre se debe ir al
si no donde hay otra bifurcacion mas, es decir, hubo un total 3 tres bifurcaciones
anidadas. Tres niveles de anidamiento y para saber donde termina cada uno puedes
ver los comentarios en las lneas 12, 13 y 14.
Pagina 9
CAPITULO 1. ALGORITMOS
Jose G. Sanchez
2
calcular las races de una ecuacion cuadratica mediante la formula: x = b 2ab 4ac
Algoritmo 4 Calculo de races cuadraticas
Entrada: coeficiente cuadratico, coeficiente lineal, termino independiente
Salida: raices de la ecuacion
1: a coeficiente cuadr
atico
2: b coeficiente lineal
3: c t
ermino independiente
4: si a = 0 entonces
5:
imprimir La ecuacion no es cuadratica, es lineal!
6:
Salir
7: si no
8:
x1 = (b + b2 4ac)/2a
9:
x2 = (b b2 4ac)/2a
10: fin si{de la lnea 4}
11: imprimir Las raices son x1 , x2
Escribe un algoritmo que calcule el Indice de Masa Corporal (IMC) de al menos
una persona. Observa que este algoritmo debe repetir el proceso de calculo por un
n
umero desconocido de veces.
Algoritmo 5 Calculo del Indice de Masa Corporal
Entrada: altura en metros, peso en kilos
Salida: IMC
1: repetir
2:
imprimir Ingrese la altura en metros
3:
a altura en metros
4:
imprimir Ingrese el peso en kilos
5:
p peso en kilos
6:
I = p/a2
7:
imprimir Su Indice de Masa Corporal es: I
8:
imprimir Desea calcular IMC para otra persona (si/no)?
9:
resp respuesta
10: hasta que resp =no
Pagina 10
CAPITULO 1. ALGORITMOS
Jose G. Sanchez
CAPITULO 1. ALGORITMOS
Jose G. Sanchez
1.2.3.
Los humanos somos buenos en procesar informacion grafica y por esta razon
siempre usamos diferentes instrumentos y herramientas para visualizar conceptos,
ideas, procesos y practicamente todo lo que tiene que ver con el conocimiento. Los
algoritmos no escapan a esta situacion y tienen tambien su representacion grafica
en la forma de los diagramas de flujo.
Algoritmos en diagramas de flujo
Son algoritmos representados de forma grafica a traves de una serie de figuras
geometricas basicas y lneas dirigidas (flechas) que las conectan e indican el flujo
de operacion. Observan las mismas reglas de todos los algoritmos y pueden ser
mas faciles de seguir por su naturaleza grafica.
El cuadro 1.1 muestra los smbolos basicos de un diagrama de flujo. Existen
algunos otros como por ejemplo para representar subprogramas (otros programas
enlazados al que se ejecuta), conexiones a otras secciones del algoritmo (cuando este
es muy largo y necesita varias paginas), etc, sin embargo, para mayor simplicidad y
debido a que estos son suficiente para nuestras necesidades, los omitiremos.
Un diagrama de flujo comenzara y finalizara con un rectangulo de puntas redondeadas. Lneas dirigidas deben mostrar el flujo o lnea de ejecucion que puede tener
ciclos y bifurcaciones. Toda figura debe estar conectada con una flecha a alguna
otra, es decir, no pueden haber figuras separadas ya que no estaran dentro del flujo
de ejecucion del algoritmo.
Pagina 12
CAPITULO 1. ALGORITMOS
Jose G. Sanchez
Inicio/Fin
Rect
angulo redondeado: Indica
un nodo terminal, es decir, comienzo
y final de un algoritmo.
Proceso
Rect
angulo: Representa un proceso,
cualquier operacion en el procesador
o memoria del dispositivo ejecutor.
Decision
Entrada/Salida
CAPITULO 1. ALGORITMOS
Jose G. Sanchez
INICIO
Leer radio
A = r2
Imprimir A
FIN
Figura 1.1: Diagrama de flujo para calculo del area de un crculo
INICIO
Entrada/Salida
Terminales
Leer radio
Proceso
A = r2
Imprimir A
FIN
Figura 1.2: Leyenda de smbolos de un flujograma
Pagina 14
CAPITULO 1. ALGORITMOS
Jose G. Sanchez
Inicio
Leer n
suma = 0, i = 1
i n?
si
no
suma = suma+i
ciclo
i=i+1
Fin
Pagina 15
CAPITULO 1. ALGORITMOS
Jose G. Sanchez
Inicio
Leer n
suma = 0, i = 1
suma = suma+i
i=i+1
no
i n?
si
Fin
Pagina 16
CAPITULO 1. ALGORITMOS
Jose G. Sanchez
INICIO
Leer
num1 , num2
num1 >
num2 ?
si
mayor = num1
no
mayor = num2
Imprimir
mayor
FIN
Figura 1.5: Flujograma del calculo del mayor de 2 n
umeros
Pagina 17
CAPITULO 1. ALGORITMOS
Jose G. Sanchez
INICIO
Leer n
for
contador
< n?
no
si
F ibonacci= i + j
Imprimir F ibonacci,
contador=contador+1
FIN
Figura 1.6: Flujograma del calculo serie parcial de Fibonacci
Pagina 18
CAPITULO 1. ALGORITMOS
Jose G. Sanchez
si
inicio
Leer A,B,C
mayor=A
A(B,C)?
no
si
B(A,C)?
mayor=B
Imprimir mayor
Fin
no
mayor=C
Pagina 19
CAPITULO 1. ALGORITMOS
Jose G. Sanchez
// Generador s e r i e de F i b o n a c c i
int n , contador , f i b o n a c c i ;
int i =1;
int j =0;
s t d : : cout << Cua ntos e l e m e n t o s q u i e r e g e n e r a r ? ;
s t d : : c i n >>n ;
for ( c o n t a d o r =0; contador <n ; c o n t a d o r++){
fibonacci = i + j ;
i = j;
j = fibonacci ;
s t d : : cout<< f i b o n a c c i << , ;
}
return 0 ;
}
Para que veas la similitud de un algoritmo en pseudo-lenguaje a uno en codigo
de programacion, varios de los ejemplos usados para algoritmos en Lenguaje natural, pseudo-lenguaje y diagramas de flujo, fueron llevados a diferentes lenguajes
de programacion como C++, Pascal y Fortran. Los programas 1.1 y 1.4 estan en
C++, posiblemente el lenguaje mas universal, mientras que los programas 1.2 y 1.5
estan en Pascal. El 1.3 esta en Fortran, muy usado por la comunidad cientfica, en
especial por fsicos e ingenieros debido a sus fortalezas en calculos aritmeticos. Todos
estos programas estan listos para ser compilados y ejecutados por un computador,
observa que aunque cambian en la forma como escriben los comandos, se mantiene
la estructura general del algoritmo en pseudo-lenguaje.
Es muy facil ver la equivalencia entre el algoritmo en pseudo-lenguaje y el programa final para ejecutarlo en el computador. Esta es la idea del pseudo-lenguaje, una
vez que tienes el algoritmo pensado, desarrollado y escrito, pasarlo a cualquier lenguaje de programacion es muy sencillo porque las estructuras basicas como los ciclos,
bifurcaciones, etc, son universales (dentro de un mismo paradigma de computacion)
Pagina 20
CAPITULO 1. ALGORITMOS
Jose G. Sanchez
C a l c u l o de una s e r i e p a r c i a l de F i b o n a c c i
D e s c r i p c i o n : Se generan l o s np r i m e r o s
n
u meros de l a s e r i e
Lenguaje : P a s c a l
Serie Fibonacci : 1 ,1 ,2 ,3 ,5 ,8 ,13 ,21 ,34 ,55 ,89 ,...
)
)
)
)
)
VAR
n , contador ,
fibonacci ,
i , j : integer ;
BEGIN
writeln ( Cua ntos e l e m e n t o s q u i e r e g e n e r a r ? ) ;
readln ( n ) ;
i := 1 ;
j := 0 ;
for c o n t a d o r := 1 to n do
begin
f i b o n a c c i := i + j ;
i := j ;
j := f i b o n a c c i ;
write ( f i b o n a c c i ) ;
write ( , ) ;
end
END.
Pagina 21
CAPITULO 1. ALGORITMOS
Jose G. Sanchez
Pagina 22
CAPITULO 1. ALGORITMOS
Jose G. Sanchez
y tan solo debes preocuparte de la sintaxis y semantica del lenguaje que quieres usar.
Si deseas ejercitar tu logica computacional puedes tomar papel y lapiz y hacer
una corrida en fro de un programa. Toma por ejemplo el programa 1.1, pagina 20
y coloca en una tabla todas las variables que veas: (n, fibonacci, contador, i, j ) y
escribe debajo de cada una el valor asignado, por ejemplo, a las variables contador
y j se les asigna un valor de 0 as que colocas 0 debajo de ellas. Seguidamente vemos que i se le asigna el valor 1 mientras que n y fibonacci a
un no tienen valor,
as que escribes 1 para la primera y no escribes nada para las otras. Luego sigues
el flujo del algoritmo instruccion a instruccion y vas ejecutando lo que se pide. Por
ejemplo la primera instruccion del ciclo es fibonacci = i + j, as que ahora colocas
bajo fibonacci el valor de 1, luego ves que la siguiente es i = j entonces tachas el
valor de i y le colocas el nuevo valor que es 0. Vas actualizando todos los valores de
las variables seg
un lo digan las instrucciones y escribiendo el valor de cada una. El
comando std::cout imprime por la pantalla del computador el valor actual de la
variable fibonacci, o sea, lo que este escrito debajo de ella en tu hoja. Como u
ltima
instruccion incrementas en 1 el valor de contador y si es menor a n repites el ciclo.
Haces esto paso a paso hasta que n = 10 y a la final deberas tener el resultado
mostrado en la pagina 12.
El cuadro 1.2 es un resumen de los tipos de representaciones de algoritmos que
estudiamos en esta seccion y una idea general de para que se usan. Lo importante
para nuestro curso no es recordar estos detalles, es el desarrollar la logica de progra-
Pagina 23
CAPITULO 1. ALGORITMOS
Jose G. Sanchez
macion que debes tener para poder instruir a los robots con las tareas que quieres
que hagan. Recuerda que para implementar una tarea en el brazo robot debes entender bien la simbologa de los diagramas de flujo, y para esto debes tener ya cierta
destreza en plantear soluciones en forma de algoritmos. Lo mismo ocurre para los
robots moviles; para implementar sus capacidades de navegacion, debes hacerlo a
traves de la programacion de estas tareas en el computador.
Tipo de representacion
Algoritmos en pseudo-codigo
Descripcion
Son los menos formales debido a la generalidad en las expresiones del lenguaje. Aunque deben poseer la rigurosidad
logica y estructural de cualquier algoritmo, son un poco mas flexibles en
cuanto al uso y redaccion de las instrucciones. Se usan para plantear la idea
general de una tarea sin mucho detalle tecnico, un punto de partida para
resolverla.
Poseen una mayor formalidad que en
lenguaje natural puesto que usan una
sintaxis especfica parecida a las estructuras universales encontradas en cualquier lenguaje de programacion, es por
esto que generalmente se usan como paso previo a la implementacion del algoritmo en un codigo computacional.
Son la expresion grafica de los algoritmos de pseudo-codigo. Se usan para ver
con mayor facilidad el objetivo general
del algoritmo y tener una idea rapida
de la funcionalidad del mismo.
Pagina 24
CAPITULO 1. ALGORITMOS
1.2.4.
Jose G. Sanchez
Para madurar el pensamiento logico no basta con entender la teora y los problemas planteados, debes practicar! La repeticion de transformar el planteamiento
de un problema a un algoritmo ejecutable por un computador, desarrollara tu destreza para resolver problemas cada vez mas complejos.
A continuacion quedan una serie de preguntas y ejercicios propuestos que puedes hacerlos y traerlos a las consultas si deseas, en los horarios asignados para tal fin.
1. Escribe un algoritmo para hacer una ensalada Cesar
2. Que diferencia hay entre las tres representaciones de algoritmos estudiadas?
3. Que son ciclos de pre y post verificacion? Que diferencia tienen y cual es la
razon para usar uno u otro en un programa?
4. Escribe un algoritmo y su respectivo diagrama de flujo para calcular:
Tu ndice academico
Los n primeros n
umeros impares
Los n n
umeros pares a partir de un n
umero num dado
Los n primeros n
umeros primos
El mayor de una serie de n
umeros dados
Los n
umeros pares e impares de una serie de n
umeros dados
La media aritmetica y varianza de las notas en una asignatura
Una n-serie de Fibonacci invertida a partir del k-esimo elemento
El n
umero de a
nos transcurridos entre dos fechas dadas
El n
umero de das entre dos fechas del mismo a
no
5. Por que en los diagramas de flujo mostrados no se ve diferencia en los smbolos
usados para representar los diferentes ciclos?
6. Puede haber mas de un flujo de operacion en un diagrama?
7. Corre en fro el codigo en C++ del programa 1.1 (pagina 20).
Pagina 25