Anda di halaman 1dari 33

Algoritmos

T
AF
DR

Teotihuacan (”Lugar donde los hombres se convierten en dioses”) es el nombre que se da a la que fue una
de las mayores ciudades prehispánicas de Mesoamérica. El nombre es de origen náhuatl y fue empleado
por los mexicas para identificar a esta ciudad construida por una civilización anterior a ellos y que ya se
encontraba en ruinas cuando los mexicas la vieron por primera vez. A la fecha se desconoce el nombre que le
daban sus habitantes originales. Los restos de la ciudad se encuentran al noreste del valle de México, en los
municipios de Teotihuacan y San Martı́n de las Pirámides, aproximadamente a 45 kilómetros de distancia
del centro de la Ciudad de México. La zona de monumentos arqueológicos fue declarada Patrimonio de la
Humanidad por Unesco en 1987. (http://es.wikipedia.org/wiki/Teotihuacan).

palabra palabra
Autor: Jorge Luis Zapotecatl López
Correo electrónico: jzapotecatl@gmail.com
Url: www.pensamientocomputacional.org
2

D.R. 2014
c por Insituto Nacional de Astrofı́sica, Óptica y Electrónica
Luis Enrique Erro 1, Tonantzintla, Puebla, México
C.P. 72840
Teléfono: (222) 247.29.40
Contacto: emorales@inaoep.mx

T
AF
DR
Índice general

Índice general 3

1. Algoritmos 5
1.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

T
1.2. Algoritmos en la computación . . . . . . . . . . . . . . . . . . 7
1.3. Representación de algoritmos . . . . . . . . . . . . . . . . . . 8
AF
1.3.1. Diagramas de flujo . . . . . . . . . . . . . . . . . . . . 9
1.3.2. Seudocódigo . . . . . . . . . . . . . . . . . . . . . . . . 11
1.4. Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.4.1. Contadores . . . . . . . . . . . . . . . . . . . . . . . . 12
1.4.2. Acumuladores . . . . . . . . . . . . . . . . . . . . . . . 14
DR

1.4.3. Banderas . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.5. Estructuras de control . . . . . . . . . . . . . . . . . . . . . . 15
1.5.1. Estructura de secuencia . . . . . . . . . . . . . . . . . 15
1.5.2. Estructura de selección . . . . . . . . . . . . . . . . . . 17
1.5.3. Estructura de repetición . . . . . . . . . . . . . . . . . 22
1.6. Apilamiento y Anidamiento . . . . . . . . . . . . . . . . . . . 27
1.7. Enfoque descendente . . . . . . . . . . . . . . . . . . . . . . . 28
1.7.1. Nivel 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
1.7.2. Nivel 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
1.8. Aplicando los Algoritmos . . . . . . . . . . . . . . . . . . . . . 32

Bibliografı́a 33

3
palabra

T
AF
DR
Capı́tulo 1

Algoritmos

“Si quieres construir un barco, no empieces por buscar madera, cortar tablas

T
o distribuir el trabajo. Evoca primero en los hombres y mujeres el anhelo del
mar libre y ancho”
-Antoine de Saint-Exupéry
AF
1.1. Introducción
Cuando se escucha la palabra algoritmo, las personas frecuentemente con-
DR

sideran que es demasiado sofisticada y exclusivamente relacionada con las


ciencias. Sin embargo, los algoritmos se encuentran ampliamente relaciona-
dos tanto en la vida cotidiana como en el quehacer profesional de cada perso-
na. Un algoritmo es simplemente una serie de pasos ordenados que se siguen
para resolver un problema.
Algunos ejemplos en la vida cotidiana donde se emplean algoritmos fre-
cuentemente para resolver problemas son: una persona que utiliza un ins-
tructivo para armar un mueble, los trabajadores que ejecutan un conjunto
de órdenes por parte de su jefe, los cocineros que utilizan recetas para pre-
parar platillos, entre otros. Un ejemplo de algoritmo para preparar un tı́pico
platillo mexicano, el mole poblano, se presenta a continuación (ver Figura
1.1).

5
6 CAPÍTULO 1. ALGORITMOS

1. Remojar los chiles en agua caliente.

2. Moler los chiles, los ajos y el chocolate, hasta formar una pasta.

3. Freı́r dicha pasta en manteca caliente, sazonarla con sal y añadir el


caldo suficiente para que tome buen espesor.

4. Agregar la carne cocida para la que se preparó el mole.

T
AF
DR

Figura 1.1: -Kukulkán- El resultado de aplicar el algoritmo anterior es un exquisito mole poblano.
El mole poblano es un tı́pico platillo mexicano que está compuesto principalmente de una salsa creada
a partir de una gran variedad de ingredientes vertida sobre piezas de guajolote (nombre que se le da en
México al pavo doméstico).

Un problema en particular frecuentemente puede resolverse de varias ma-


neras, por lo tanto, tendrá varios algoritmos que puedan solucionarlo. Por
ejemplo, considere los algoritmos de un cocinero, es decir, las recetas. El mole
poblano tiene diferentes recetas para preparase. Si una persona está tratando
de hacer un delicioso mole poblano para su familia, tiene varias recetas que
puede utilizar para lograr su objetivo. Sin embargo, los resultados no serán
los mismos porque algunas recetas pueden llevar mayor tiempo de prepa-
ración, pueden usar ingredientes costosos, ingredientes que son difı́ciles de
conseguir, tener mucha azúcar, o una gran variedad de otras condiciones que
afectaran su utilidad. Al igual que en las recetas, los algoritmos que resuelven
un determinado problema tienen diferentes ventajas y desventajas, algunos
algoritmos tardaran más tiempo en encontrar soluciones, otros algoritmos
consumirı́an más memoria, entre otros aspectos.
1.2. ALGORITMOS EN LA COMPUTACIÓN 7

Para el pensamiento computacional los algoritmos son uno de


los tópicos principales en el proceso de solución de problemas. En-
tre los objetivos operativos del pensamiento computacional que se
relacionan estrechamente con los algoritmos son:

Formular problemas de manera que permitan usar compu-


tadores y otras herramientas para solucionarlos.

Automatizar soluciones mediante pensamiento algorı́tmico.

Identificar, analizar e implementar posibles soluciones con el


objeto de encontrar la combinación de pasos y recursos más
eficiente y efectiva.

T
AF
1.2. Algoritmos en la computación
Los algoritmos son ampliamente utilizados en las ciencias de la compu-
tación y representan las soluciones a nivel conceptual de determinados pro-
DR

blemas. La computadora al igual que el ser humano maneja varios lenguajes,


los denominados lenguajes de programación, que permiten indicar que ins-
trucciones deben ejecutarse. Cuando un algoritmo es implementado en un
lenguaje de programación se le denomina “programa”y por lo tanto se vuel-
ve una solución aplicada en la vida real.
Todo el software que utilizamos diariamente como lo son los sistemas
operativos, las aplicaciones ofimáticas, los video juegos, los navegadores, son
programas basados en algoritmos que se implementan por medio de lenguajes
de programación (ver figura 1.2). Por lo tanto, los algoritmos están presentes
al utilizar equipos de cómputo como los son: teléfonos móviles, computado-
ras, calculadoras, entre otros. Por ejemplo, en un supermercado cuando la
cajera aplica el escáner a un producto, la computadora aplica un algoritmo
de búsqueda para encontrar el precio de dicho producto.
Los conceptos subyacentes de un algoritmo no se ven afectados por las
capacidades de un lenguaje de programación o las capacidades de una compu-
tadora en particular. Como analogı́a, el resultado de una receta que haya sido
escrita correctamente no debe ser afectada por el cocinero o la cocina.
8 CAPÍTULO 1. ALGORITMOS

(a) Video juegos (Mega Man XTM ). (b) Animaciones 3D (AvatarTM ).

Figura 1.2: Los video juegos y las animaciones en 3D son ejemplos de algoritmos implementados en
computadoras por medio de lenguajes de programación

T
AF
DR

Figura 1.3: -Paat- GameCoder Studios es un estudio independiente de video juegos mexicano ubicado
en la ciudad colonial de Guanajuato, México. En el 2010 dicho estudio desarrolló el motor GC, un motor
gráfico de video juegos 3D. Algunas de las técnicas de representación utilizadas en el motor GC fueron in-
novadoras y se presentaron en el SIGGRAPH 2011. En el 2011 el estudio desarrolló el video juego Attractio
basado en el motor GC. Para mayor información puede consultar el enlace: www.gamecoderstudios.com

1.3. Representación de algoritmos


Los algoritmos se representan de varias formas, incluyendo el lenguaje
natural (utilizado para representar el algoritmo del mole poblano en la sec-
ción 1.1), seudocódigo, diagramas de flujo y lenguajes de programación, entre
otros. Las descripciones en lenguaje natural son ambiguas y extensas, mien-
tras que los seudocódigos y el diagramas de flujo evitan las ambigüedades
del lenguaje natural. Dichas expresiones son formas más estructuradas para
1.3. REPRESENTACIÓN DE ALGORITMOS 9

representar algoritmos. Además, se mantienen independientes de un lenguaje


de programación especı́fico.

1.3.1. Diagramas de flujo


Los diagramas de flujo son la representación visual de cada paso del al-
goritmo por medio de sı́mbolos que representan las operaciones ejecutadas
sobre los datos. Dicha simbologı́a ha sido estandarizada por las organizacio-
nes ANSI (American National Standars Institute) y la OSI (International
Standarization Organization).
Los diagramas de flujo son usados principalmente para introducir a los
estudiantes en el desarrollo de algoritmos por su facilidad de lectura. Son
usados principalmente para representar algoritmos pequeños debido a que
abarcan demasiado espacio y su construcción es laboriosa. En la figura 1.4

T
se muestran los sı́mbolos básicos de los diagramas de flujo.
AF
DR

Figura 1.4: Sı́mbolos básicos de los diagramas de flujo


10 CAPÍTULO 1. ALGORITMOS

Por ejemplo, considera el algoritmo representado por medio de un dia-


grama de flujo de la figura 1.5 que determina el número mayor entre A y
B. El primer sı́mbolo terminal indica el inicio del algoritmo y la lı́nea de
flujo indica la dirección de la siguiente instrucción a ejecutarse. El sı́mbolo
imprimir le indica al usuario, por medio de un mensaje, que debe ingresar
dos valores. El usuario introduce dos números de entrada, indicado por el
sı́mbolo de entrada y salida. Posteriormente, aplicando el operador de mayor
o igual dentro del sı́mbolo de decisión se selecciona el mensaje que imprime
el número mayor (o igual). El algoritmo termina con el sı́mbolo terminal.

T
AF
DR

Figura 1.5: Algoritmo que determina el mayor número entre A y B .


1.3. REPRESENTACIÓN DE ALGORITMOS 11

1.3.2. Seudocódigo
El seudocódigo es una descripción informal de alto nivel de un algoritmo
que utiliza las convenciones de un lenguaje de programación real. Sin em-
bargo, está diseñado para que el algoritmo sea leı́do por un humano. Por lo
tanto, el seudocódigo se complementa, donde sea conveniente, con descrip-
ciones detalladas en lenguaje natural, o con notación matemática compacta.
Además, omite detalles que no son esenciales para su comprensión, tales co-
mo especificar el tipo de variables, código especı́fico del sistema y algunas
funciones (subrutinas).
Para el seudocódigo no existe una sintáxis estándar y por lo general,
no obedece a las reglas de sintáxis de ningún lenguaje de programación en
particular. Dependiendo del diseñador, el seudocódigo puede diferir en su
estilo, desde acercarse a una descripción en lenguaje natural (en prosa) por

T
un extremo hasta una imitación casi exacta de un lenguaje de programación
real por el otro. El algoritmo 1, representado por medio de un seudocódigo,
computa el número mayor o igual entre A y B.
AF
Algorithm 1 Número mayor o igual
1: imprimir(0 Introduzca los valores0 );
2: introducir(A, B); . Desde el teclado
DR

3: if A ≥ B then
4: imprimir(A, 0 Es mayor o igual0 );
5: else
6: imprimir(B, 0 Es mayor0 );
7: end if

El seudocódigo presentan las siguientes ventajas con respecto a los dia-


gramas de flujo:

El espacio utilizado en la descripción del problema es mucho menor.

Las operaciones complejas son presentadas de forma más sencilla.

El seudocódigo es más sencillo de trasladar a un lenguaje de progra-


mación.

Las reglas de identación permiten observar claramente los niveles en la


estructura del algoritmo.
12 CAPÍTULO 1. ALGORITMOS

En las secciones siguientes los algoritmos son explicados principalmen-


te utilizando seudocódigo. No obstante, se presentan los diagramas de flujo
pertinentes en cada sección.

1.4. Variables
Una variable es un sı́mbolo que designa una cantidad susceptible de to-
mar distintos valores y que almacena información durante la ejecución de
un algoritmo. En los algoritmos, cada diseñador utiliza sus respectivas con-
venciones. Por ejemplo, la instrucción “asignar el valor de la variable x a la
variable y”puede representarse como:
x←y

T
x=y
x := y
Las operaciones usualmente se representan de manera matemática com-
AF
pacta.
2
volumen ← πr√ h
hipotenusa ← a2 + b2
resultado ← sin(a)
DR

En una operación de asignación, usualmente se asigna el valor que resulta


de los cálculos ejecutados a la derecha de una expresión a la variable que se
encuentra a la izquierda. Por ejemplo, si x = 0 y ejecutando la siguiente
operación: x = x + 1. El valor adquirido al ejecutar la instrucción anterior es
x = 1.
En los algoritmos la forma en que algunas variables se utilizan es recu-
rrente al servir como auxiliares en la ejecución de instrucciones. La forma en
que algunas variables se utilizan se clasifican en: contadores, acumuladores y
banderas.

1.4.1. Contadores
Los contadores son variables que cuentan el número de eventos eje-
cutados dentro de un algoritmo. Un contador incrementa o decrementa su
contenido en un valor constante. El conteo inicia generalmente en 0 o 1. Las
operaciones necesarias que se llevan a cabo con un contador son:
1.4. VARIABLES 13

1. Inicialización. Esta operación permite asignar el valor inicial de la


variable contador.
contador = valor inicializacion.

2. Incremento o decremento. Esta operación se realiza cada vez que


ocurre el evento que se desea contar. Usualmente el valor constante es
de 1. Sin embargo, se puede asignar otra magnitud en determinados
casos.
contador = contador + 1 (incremento)
contador = contador − 1 (decremento)

Suponga que un evento ocurre tres veces, el contador adquirirá los valores
como se indica en la siguiente tabla.

T
contador = contador+ 1
AF
1 0 1
2 1 1
3 2 1

Por ejemplo, en el video juego Mario BrosTM se utiliza un contador para


DR

almacenar el tiempo, las vidas o la cantidad de monedas que ha recolectado


(ver figura 1.6).

Figura 1.6: Contadores en el video juego Mario BrosTM .


14 CAPÍTULO 1. ALGORITMOS

1.4.2. Acumuladores
Los acumuladores incrementan o decrementa su contenido en un valor
variable. La acumulación inicia generalmente en 0 o 1.
La operación básica que se debe realizar con ellos es:

1. Inicialización. La inicialización de un acumulador dependerá del tipo


de operación que se va a realizar. Usualmente se inicilaliza en 0 o en 1.

2. Incremento o decremento. Esta operación se realiza cada vez que


ocurre el evento que se desea acumular.
acumulador = acumulador + variable

T
Suponga el calculo de la nomina de un empleado, el acumulador adqui-
rirá los valores como se indica en la siguiente tabla.
AF
nomina = nomina+ sueldo
1200 0 1200
1700 1200 500
3200 1700 1500
DR

Por ejemplo, en el video juego Street Fighter IITM se utiliza un acumulador


para variar la cantidad de vida en la barra amarilla superior (ver figura 1.7).

Figura 1.7: Acumuladores en el video juego Street Fighter IITM .


1.5. ESTRUCTURAS DE CONTROL 15

1.4.3. Banderas
Las banderas son variables que adquieren determinados valores con la
finalidad de interrumpir o seleccionar la ejecución de determinadas instruc-
ciones en un algoritmo.
Por ejemplo, para inidar que se presionó el botón de start en el control
de tu consola favorita o para indicar que el juego a terminado (game over ),
la bandera adquirirá el valor como se indica en la siguiente tabla.

bandera = f also N o se ha presionado el botón


bandera = verdadero Se ha presionado el botón

1.5. Estructuras de control

T
Investigaciones realizadas en la década de los 70 por C. Böh y G. Jaco-
pini demostraron que algoritmos estructurados pueden codificarse utilizando
sólo tres estructuras de control: la estructura de secuencia, la estructura de
AF
selección y la estructura de repetición. Antes de dichas investigaciones, se
utilizaba de manera excesiva el uso de la instrucción de transferencia incon-
dicional (GOTO), que producia “código espagueti”, que es mucho más difı́cil
de seguir, mantener y era la causa de muchos errores. Por lo tanto, sur-
DR

ge lo que se conoce como programación estructurada, la cual construye


los algoritmos a partir unicamente de las estructuras de control: secuencia,
selección y repetición, las cuales se explican a continuación.

1.5.1. Estructura de secuencia


En un algoritmo, la estructura de secuencia establece que las instruccio-
nes escritas en seudocódigo son ejecutadas en orden secuencial de arriba a
abajo. Considera el siguiente bloque de instrucciones.

1: instruccion1 ;
2: instruccion2 ;
3: instruccion3 ;
4: ...
5: instruccionn ;
La instrucción1 se ejecuta primero (renglón número 1), posteriormente
se ejecuta la instrucción2 , y de manera sucesiva se ejecutan las demás ins-
16 CAPÍTULO 1. ALGORITMOS

trucciones hasta ejecutarse la instrucción n. El algoritmo representado por


un diagrama de flujo se muestra en la figura 1.8.

T
AF
Figura 1.8: Diagrama de flujo que muestra el funcionamiento de la estructura de secuencia.

Por ejemplo, considere el algoritmo “asistir al trabajo”que realiza un em-


DR

pleado para levantarse de la cama y asistir al trabajo:

1: levantarse;
2: quitarse la pijama;
3: tomar un baño;
4: vestirse;
5: desayunar;
6: tomar el transporte hacia el trabajo;
El algoritmo anterior consigue que el empleado se presente al trabajo en
tiempo y forma al realizar acciones de manera sucesiva. Ahora, suponga que
las mismas instrucciones del algoritmo “asistir al trabajo”se ejecutan en un
orden ligeramente diferente:

1: levantarse;
2: quitarse la pijama;
3: vestirse;
1.5. ESTRUCTURAS DE CONTROL 17

4: tomar un baño;
5: desayunar;
6: tomar el transporte hacia el trabajo;
En este caso, el empleado llegará mojado al trabajo (ver figura 1.9). El
ejemplo anterior muestra la importancia de especificar el orden correcto en
que se ejecutan las instrucciones para obtener el resultado deseado.

T
AF
Figura 1.9: El orden en que las instrucciones son ejecutadas determina el resultado correcto de un
DR

algoritmo, si se cambia el orden de una instrucción el ejecutivo llegará mojado al trabajo.

1.5.2. Estructura de selección


En un algoritmo, la estructura de selección permite decidir que instruccio-
nes se deben ejecutar dependiendo de alguna condición. En la vida real, cada
dı́a las personas constantemente tienen que decidir qué actividades realizar.
Por ejemplo, salir a correr o quedarse en la cama, escoger entre estudiar o
jugar, decidir si comer a las 2:00 P.M. o a las 3:00 P.M., entre muchos otros
ejemplos (ver figura 1.14).
En esta sección se presentan tres variantes de la estructura de selección:
seleccionar simple, seleccionar doble y seleccionar múltiple.

Seleccionar simple
La estructura seleccionar simple decide que instrucciones deben ejecutar-
se dependiendo del cumplimiento de una condición, donde la condición es
18 CAPÍTULO 1. ALGORITMOS

Figura 1.10: Las decisiones se toman dependiendo de que actividades se desean realizar. Por ejemplo,
una chica decidirá la forma de vestirse de acuerdo al tipo de fiesta al que asistirá.

T
una expresión booleana, es decir, el valor de la condición es verdadero o falso
(1 o 0). Considera el siguiente bloque de instrucciones.
AF
1: if condicion1 then
2: instrucciones1 ;
3: end if
Si la condicion1 es evaluada como verdadera (especificada en el renglón 1),
DR

entonces se ejecutan las instrucciones1 que se encuentran dentro del cuerpo


de la estructura. Por otro lado, si la condición es falsa las instrucciones1 den-
tro del cuerpo son evitadas. El bloque anterior representado por un diagrama
de flujo se muestra en 1.11.

Figura 1.11: Diagrama de flujo que muestra el funcionamiento de la estructura seleccionar simple.
1.5. ESTRUCTURAS DE CONTROL 19

La estructura seleccionar simple se utiliza cuando:

El problema requiere ejecutar o evitar determinadas acciones con base


en una condición.

Por ejemplo, suponga que una joven, en sus vacaciones, ha decido asistir
a un curso de natación unicamente si el horario de las sesiones es mayor a
las 7:00 hrs. El bloque de instrucciones mediante la estructura de selección
simple se representa a continuación.
1: if horario sesión > 7 then
2: Asistir al curso de natación;
3: end if

Seleccionar doble

T
La estructura seleccionar doble decide que instrucciones deben ejecutarse
entre dos posibles opciones dependiendo del cumplimiento de una condición.
AF
Al igual que en la estructura seleccionar simple, la condición es una expresión
booleana. Considera el siguiente bloque de instrucciones.

1: if condicion1 then
DR

2: instrucciones1 ;
3: else
4: instrucciones2 ;
5: end if
Si la condicion1 es evaluada como verdadera (especificada en el renglón 1),
entonces se ejecutan las instrucciones1 que se encuentran dentro del primer
bloque de la estructura. Por otro lado, si la condición es falsa se ejecutan las
instrucciones2 que se encuentran dentro del segundo bloque de la estructura.
El bloque anterior representado por un diagrama de flujo se muestra en 1.12.
La estructura seleccionar doble se utiliza cuando:

El problema requiere elegir que conjunto de instrucciones ejecutar entre


dos opciones con base en una condición.

Por ejemplo, suponga que un profesor de matemáticas califica un examen


de álgebra. Si la calificación de un estudiante es mayor o igual que 6, entonces
el estudiantes es aprobado. En caso contrario, al profesor no le gusta reprobar
20 CAPÍTULO 1. ALGORITMOS

Figura 1.12: Diagrama de flujo que muestra el funcionamiento de la estructura seleccionar doble.

a sus alumnos, pero no le queda otra opción que hacerlo. El bloque de instruc-

T
ciones mediante la estructura de selección doble se representa a continuación.
AF
1: if calif icación ≥ 6,0 then
2: aprobar a estudiante;
3: else
4: reprobar a estudiante;
DR

5: end if

Seleccionar múltiple

La estructura de selección múltiple decide que instrucciones deben eje-


cutarse entre varias opciones dependiendo del cumplimiento de determinada
condición. La estructura de selección múltiple esta constituida por el apila-
miento de estructuras de selección simple. Cada serie de condiciones tienen
que ser mutuamente excluyentes, si una de ellas se cumple las demás tienen
que ser falsas necesariamente. Si ninguna de las condiciones se cumple opcio-
nalmente puede agregarse un caso por omisión. Considera el siguiente bloque
de instrucciones.

1: if condición1 then
2: instrucciones1 ;
3: else if condición2 then
4: instrucciones2 ;
1.5. ESTRUCTURAS DE CONTROL 21

5: ...
6: else if condiciónn then
7: instruccionesn ;
8: else
9: instruccionesomision ;
10: end if
Si la condición1 es evaluada como verdadera (especificada en el renglón 1),
entonces se ejecutan las instrucciones1 que se encuentran dentro del primer
bloque de la estructura. En caso contrario, se procede a verificar la condición2
(especificada en el renglón 3), si es evaluada como verdadera, entonces se
ejecutan las instrucciones2 dentro del segundo bloque de la estructura. El
proceso continua hasta que no quedan más opciones. Si ninguna condición es
cumplida, se ejecuta por omisión las instruccionesomision . El bloque anterior
representado por un diagrama de flujo se muestra en 1.12.

T
AF
DR

Figura 1.13: Diagrama de flujo que muestra el funcionamiento de la estructura seleccionar múltiple.

La estructura seleccionar múltiple se utiliza cuando:


22 CAPÍTULO 1. ALGORITMOS

El problema requiere elegir que conjunto de instrucciones ejecutar entre


múltiples opciones con base en diversas condiciones.

Imagina que Tukkul desea obsequiarle un regalo a Paat con el que mani-
fieste sus sentimientos, pero sólo cuenta con $200 pesos. Por lo que seleccio-
nará un regalo que tenga un costo igual o menor que 200 pesos. Si ningún
regalo cumple con dicha condición, entonces le escribirá un poema :3.

1: if Orquı́deas ≤ 200 then


2: Comprar Orquı́deas;
3: else if El placer de descubrir de F eymman ≤ 200; then . Paat ama la
ciencia
4: Comprar dicho libro;
5: else if El CD Surf ing with the Alien ≤ 200 then

T
6: Comprar dicho disco;
7: ...
AF
8: else
9: Escribir un P oema;
10: end if

1.5.3. Estructura de repetición


DR

En un algoritmo, la estructura de repetición permite repetir determina-


das instrucciones dependiendo de una condición. En la vida real, cada dı́a las
personas constantemente tienen que repetir actividades. Por ejemplo, acti-
vidades como caminar, escribir, leer, hablar, implican repetir el conjunto de
acciones, entre muchos otros ejemplos (ver figura 1.14).
En esta sección se presentan tres variantes de la estructura de repetición:
repetir mientras, repetir hasta y repetir para.

Repetir mientras
La estructura repetir mientras permite repetir determinadas instrucciones
mientras su condición permanezca verdadera. Considera el siguiente bloque
de instrucciones.

while condicion1 do
instrucciones1 ;
1.5. ESTRUCTURAS DE CONTROL 23

Figura 1.14: Hay actividades que son repetidas continuamente. Por ejemplo, cuando tocas las cuerdas
de una guitarra.

T
end while
Si la condicion1 es evaluada como verdadera (especificada en el renglón
AF
1), entonces se ejecutan las instrucciones1 que se encuentran dentro del cuer-
po de la estructura. Posteriormente el proceso anterior se repite, se evalúa la
condicion1 , si es verdadera se ejecutan las instrucciones1 . Finalmente, cuan-
do la condición es falsa la repetición termina. El bloque anterior representado
por un diagrama de flujo se muestra en 1.15.
DR

Figura 1.15: Diagrama de flujo que muestra el funcionamiento de la estructura repetir mientras.

La estructura repetir mientras se utiliza cuando:

El problema a resolver requiere que la condición sea evaluada primero.


24 CAPÍTULO 1. ALGORITMOS

El número de ciclos que deben ejecutarse para resolver el problema es


desconocido.

Por ejemplo, suponga que un bibliotecario guarda en una caja un conjunto


de libros. El bibliotecario primero verifica que la caja tenga espacio. El bi-
bliotecario no sabe cuántos libros entrarán en la caja, por lo tanto, el proceso
se repetirá mientras la caja todavı́a tenga espacio. El bloque de instrucciones
mediante la estructura de repetir mientras se representa a continuación.

1: while hay espacio = verdadero do


2: guardar libro;
3: end while

T
Repetir hasta
La estructura repetir hasta permite repetir determinadas instrucciones
AF
hasta que su condición sea falsa. Considera el siguiente bloque de instruccio-
nes.

1: repeat
DR

2: instrucciones1 ;
3: until condicion1
Las instrucciones1 dentro del cuerpo de la estructura son ejecutadas pri-
mero, por lo que dichas instrucciones se ejecutan por lo menos una vez.
Posteriormente la condicion1 es evaluada (especificada en el renglón 3). Si
la condicion1 es verdadera, nuevamente se ejecutan las instrucciones1 den-
tro del cuerpo de la estructura y posteriormente se vuelve a verificar la
condicion1 . El proceso anterior se repite hasta que la condición es falsa y
por lo tanto la repetición termina. El bloque anterior representado por un
diagrama de flujo se muestra en 1.15.
La estructura repetir hasta se utiliza cuando:

El problema a resolver requiere ejecutar determinadas instrucciones


primero y posteriormente la condición.

El número de ciclos que deben ejecutarse para resolver el problema es


desconocido.
1.5. ESTRUCTURAS DE CONTROL 25

Figura 1.16: Diagrama de flujo que muestra el funcionamiento de la estructura repetir hasta.

T
Por ejemplo, suponga que un jugador debe lanzar dos dados hasta obte-
ner como suma un valor mayor que 10. Probablemente en el primer intento lo
AF
consiga o hasta después de n intentos. No obstante, tiene que lanzar los dados
por lo menos una vez para constatar la condición. El bloque de instrucciones
mediante la estructura de repetir hasta se representa a continuación.
DR

1: repeat
2: suma = valor de los dados lanzados;
3: until suma ≥ 10

Repetir para
La estructura de repetir para permite repetir instrucciones un determina-
do número de veces. Es utilizada cuando se conoce el número de repeticiones
que se deben realizar y cuando se desea iterar por cada uno de los elemen-
tos de una estructura de datos. Considere el siguiente bloque de instrucciones.

1: for inicializacion; condicion1 ; incremento do


2: instrucciones1 ;
3: end for
La estructura repetir para utiliza un contador para realizar el control del
número de ciclos que se ejecutaran. La instrucción For (renglón 1) se divide
26 CAPÍTULO 1. ALGORITMOS

en tres partes: inicialización, condición e incremento. La inicialización y el


incremento corresponden a las operaciones de un contador explicadas en la
sección 1.4. Si la condicion1 es verdadera se ejecutan las instrucciones1 que
se encuentran dentro del cuerpo de la estructura. Posteriormente el proceso
anterior se repite, se evalúa la condicion1 , si la condicion1 es verdadera se
ejecutan las instrucciones1 dentro del cuerpo de la estructura. Finalmente,
cuando la condicion1 es falsa la repetición termina. El bloque de instruccio-
nes mediante la estructura de repetir para se representa a continuación.

T
AF
Figura 1.17:
DR

Diagrama de flujo que muestra el funcionamiento de la estructura repetir para.

La estructura repetir para se utiliza cuando:


El número de ciclos que deben ejecutarse es conocido.
Se desea iterar por cada uno de los elementos de una estructura de
datos.
Por ejemplo, suponga que una ama de casa compra los productos que
necesita a partir de una lista de compras. El número de veces que se repe-
tirá la acción de comprar un producto es conocido con anticipación porque
está determinado por el número de elementos presentes en la lista. El bloque
de instrucciones mediante la estructura de repetir para se representa a con-
tinuación.

1: for i = 1; i < número elementos; i = i + 1 do


2: comprar productoi ;
3: end for
1.6. APILAMIENTO Y ANIDAMIENTO 27

1.6. Apilamiento y Anidamiento


El apilamiento se refiere a colocar una estructura de control después de
otra. El siguiente ejemplo muestra en seudocódigo una estructura de control
seleccionar simple y una estructura de control repetir mientras apilada.

1: if condicion1 then
2: instrucciones1 ;
3: end if
4: while condicion2 do
5: instrucciones2 ;
6: end while
El anidamiento se refiere a colocar una estructura de control dentro de
otra. Cualquier instrucción puede ser sustituida por una estructura de con-

T
trol. En la misma manera en la que bloques de plástico interconectables son
apilados y anidados para crear diversas estructuras (ver figura 1.18).
AF
DR

Figura 1.18: Un bloque puede ser anidado en lugar de otros bloques, el bloque magenta fue sustituido
por los tres bloques apilados.

El siguiente ejemplo muestra en seudocódigo una estructura de control


repetir mientras anidada dentro de una estructura seleccionar simple.

1: if condicion1 then
2: while condicion2 do
3: instrucciones1 ;
4: end while
5: end if
28 CAPÍTULO 1. ALGORITMOS

Por otro lado, el siguiente ejemplo muestra en seudocódigo una estruc-


tura de control seleccionar simple anidada dentro de una estructura repetir
mientras.

1: while condicion2 do
2: if condicion1 then
3: instrucciones1 ;
4: end if
5: end while
Cuando las estructuras de control son apiladas y anidadas forman algo-
ritmos de mayor complejidad. En la misma manera que al apilar y anidar
bloques de plástico nos permite crear estructuras más complejas (ver figura
1.19).

T
AF
DR

Figura 1.19: Los bloques de plástico interconectables son apilados y anidados para crear diversas
estructuras.

1.7. Enfoque descendente


Una técnica denominada enfoque descendente (top-down) es una técni-
ca esencial para el diseño de algoritmos correctamente estructurados. En el
enfoque descendente se formula una representación del algoritmo en un al-
1.7. ENFOQUE DESCENDENTE 29

to nivel de abstracción (sin especificar detalles) de lo que el algoritmo debe


realizar. Posteriormente, la representación del algoritmo es especificada en
un nivel de abstracción inferior al dividirse en tareas más detalladas. Cada
tarea del algoritmo es redefinida con mayor detalle hasta que la especificación
completa es lo suficientemente concreta para validar el algoritmo.
Considere el siguiente problema:
Desarrolle un programa que calcule el promedio de calificaciones de una
clase considerando un número arbitrario de calificaciones

El algoritmo para el promedio de la clase se desarrollará mediante el en-


foque descendente. Como se mencionó anteriormente, comenzamos con una
representación en seudocódigo en un alto nivel de abstracción:

1: Determinar el promedio de la clase;

T
La descripción anterior es una instrucción individual que contiene la función
general del programa. Sin embargo, contiene muy pocos detalles como para
AF
escribir un programa.

1.7.1. Nivel 1
A partir de una descripción general, usualmente muchos algoritmos se
DR

pueden dividir de manera lógica en tres fases:

1. Fase de inicialización que inicializa las variables del algoritmo.

2. Fase de procesamiento que introduce los valores de los datos y ajusta


las variables del algoritmo de manera adecuada.

3. Fase de terminación que calcula y despliega los resultado finales.

La observación anterior a menudo es todo lo que necesita para realizar el


primer refinamiento. Comencemos con el proceso de refinamiento dividiendo
la instrucción general en las tres fases anteriormente comentadas y las lista-
mos en el orden que se deben ejecutar. El resultado del primer refinamiento
es el siguiente:

1: Inicializar las variables;


2: Introducir las calif icaciones de la clase, sumarlas y contarlas;
30 CAPÍTULO 1. ALGORITMOS

3: Calcular y despliegar el promedio de la clase;


El refinamiento anterior utiliza unicamente la estructura de secuencia, es
decir, que las instrucciones deben ejecutarse en orden una después de la otra.
El proceso de refinamiento continua dividiendo las instrucciones en series de
tareas mas pequeñas. Para continuar con el siguiente nivel de refinamiento
se identifican las variables especificas.

1.7.2. Nivel 2
En este ejemplo, necesitamos una variable para recibir el valor de cada
calificación conforme el usuario la introduce que denominamos calif icacion,
una variable para almacenar la suma de las calificaciones denominada total,
una variable que cuente el número de calificaciones denominada n y una
variable para almacenar el promedio calculado denominada promedio. Las

T
instrucciones en un nivel de abstracción inferior para la primera instrucción
Inicializar las variables; son las siguientes:
AF
1: total = 0;
2: n = 0;
Observe que sólo las variables total y n deben inicializarse antes de que
DR

puedan utilizarse. Las variables calif icacion y promedio no necesitan inicia-


lizarse.
Las instrucciones en un nivel de abstracción inferior para la instrucción
Introducir las calif icaciones de la clase, sumarlas y contarlas; requiere una
estructura de repetición que introduzca cada calificación. No sabemos por
adelantado cuantas calificaciones se van a procesar por lo que utilizamos una
estructura de control del tipo repetir mientras. Las instrucciones en un nivel
de abstracción inferior para dicha instrucción son las siguientes:

introducir(calif icacion); . posiblemente la bandera


while calif icacion 6= −1 do . bandera
total = total + calif icacion; . Acumulador
n = n + 1; . Contador
introducir(calif icacion); . posiblemente la bandera
end while
El usuario ingresa calificaciones una por una y después de introducir la
ultima calificación, entonces el el usuario introduce un valor bandera (−1).
1.7. ENFOQUE DESCENDENTE 31

El algoritmo evalúa el valor de calif icacion después de la introducción de


cada valor y termina el ciclo cuando el usuario digita el valor −1.
Las instrucciones en un nivel de abstracción inferior para la instrucción
Calcular y desplegar el promedio de la clase; son las siguientes:

1: if n 6= 0 then
2: propmedio = total/n;
3: else
4: N o hay calif icaciones;
5: end if
Observe que cuando se realiza una división entre una expresión cuyo valor
pudiera ser cero, se debe evaluar de manera explicita esta posibilidad y ha-
cerse cargo de ella de manera apropiada dentro del algoritmo (por ejemplo,
despliegue un mensaje de error), en lugar de permitir que ocurra un error

T
fatal.
Un algoritmo en seudocódigo utilizando el enfoque descendente es termi-
AF
nado cuando esté especificado con suficientes detalles como para convertirlo
en código de un lenguaje de programación. El algoritmo en seudcódigo 2
resuelve un problema general de promedios. Este algoritmo se desarrolló des-
pués de sólo dos niveles de refinamiento. Para algoritmos más complejos se
requerirá más niveles de refinamiento y subdividirlos en más tareas.
DR

Algorithm 2 Calcula Promedio de Calificaciones


1: total = 0;
2: n = 0;
3: bandera = −1;
4: introducir(calif icacion); . posiblemente la bandera
5: while calif icacion 6= bandera do . bandera
6: total = total + calif icacion; . Acumulador
7: n = n + 1; . Contador
8: introducir(calif icacion); . posiblemente la bandera
9: end while
10: if n 6= 0 then
11: promedio = total/n;
12: else
13: N o hay calif icaciones;
14: end if
32 CAPÍTULO 1. ALGORITMOS

1.8. Aplicando los Algoritmos


Para tomar decisiones racionales, necesitamos usar nuestra com-
prensión de la lógica de la toma de decisiones para rutinariamente
hacer preguntas que mejoren la calidad de nuestras decisiones. Me-
diante nuestras preguntas, traemos el proceso de toma de decisiones
a un nivel de opciones conscientes y deliberadas.
Para el Pensamiento Computacional los algoritmos son conside-
rados un práctica clave para poder formular problemas y aplicar so-
luciones de manera metódica y ordenada. Ahora que ha adquirido los
conceptos básicos sobre algoritmos, piense en la forma que se encuen-
tran presentes en su vida cotidiana y en su quehacer profesional. Sea
creativo, analice el entorno que lo rodea, las personas, sus actividades
o la naturaleza, e identifique donde se aplica el concepto de secuencia,

T
el concepto de decisión o el concepto de repetición.
Promueva su pensamiento lógico y algorı́tmico desde las actividades que
tiene que realizar para preparase y asistir a la escuela o al trabajo, hasta
AF
para resolver un problema matemático complejo, o en la toma de decisiones
que realiza en su lugar de trabajo. Con el tiempo, usted tendrá la habilidad
para resolver complejos problemas a partir de ideas estructuradas.
DR
Bibliografı́a

Bribiesca, E., Galaviz, J. y Rajsbaum, S.(2010), Computación, Enciclopedia


de conocimientos Fundamentales 5 UNAM Siglo XXI, México: UNAM.
Deitel, H. M. y Deitel P. J. (1994), Como Programar en C/C++, Prentice
Hall.

T
Garcia, D., Algoritmos, Beauty and Joy of Computing, Fecha de consulta 25
de noviembre 2014 de: bjc.berkeley.edu, University of California, Berkeley.
AF
Wing, J.M. (2006), Computational thinking, Comm of ACM, 49 (3), (pp.
33-35).
Cormen, T. H., Leiserson C. E., Rivest R. L. y Stein C. (1996), Introduction
to Algorithms (2nd edición), MIT Press and McGraw-Hill.
DR

33