Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Lecturas Complementarias
Lecturas Complementarias
Construcción
de
algoritmos
Una
vez
explicados
los
procesos
de
modelado
y
especificación
de
algoritmos,
reconocida
su
importancia
y
la
manera
de
formalizar
entradas,
salidas,
pre
y
poscondiciones,
comenzaremos
a
trabajar
en
su
construcción.
Pensemos
en
la
siguiente
situación:
invitamos
a
un
amigo
a
conocer
nuestro
nuevo
apartamento
pero
cuando
nos
pide
la
dirección,
solo
conocemos
el
número
de
la
torre
y
del
apartamento,
no
recordamos
la
dirección
exacta
¿Qué
hacemos
entonces?
¡Le
damos
instrucciones!
Debemos
tener
en
cuenta
que
estas
instrucciones
tienen
que
ser
claras
y
precisas
para
que
nuestro
amigo
no
se
pierda
ni
se
equivoque.
Por
ejemplo:
“Tome
la
ruta
D21
de
Transmilenio
que
es
la
más
rápida,
o
cualquier
ruta
que
lo
lleve
al
portal
de
la
80;
luego
sale
del
portal,
cruza
el
puente
peatonal
de
la
calle
80,
sigue
dos
cuadras
hacia
el
occidente,
voltea
a
la
izquierda,
sigue
tres
cuadras
y
llega
a
un
conjunto
cerrado
de
torres
grises
y
blancas
de
15
pisos.
Mi
apartamento
es
el
904
de
la
torre
8”.
No
es
difícil…
Si
tenemos
clara
la
información,
¡Es
posible
resolver
el
problema!
Formalmente,
a
un
conjunto
ordenado
y
finito
de
instrucciones
que
permiten
obtener,
con
base
en
un
conjunto
de
entradas,
un
conjunto
de
salidas
que
representan
la
solución
al
problema,
lo
llamaremos
algoritmo.
Ahora
sabemos
lo
que
requerimos
para
solucionar
un
problema
de
forma
organizada:
sus
entradas
y
salidas,
las
precondiciones
y
pos
condiciones
definidas
para
esos
datos
y
un
algoritmo
que
describa,
a
partir
de
instrucciones
claras
y
precisas,
paso
a
paso
lo
que
se
debe
hacer
para
llegar
a
una
solución.
Si
queremos
definir
un
algoritmo
en
un
lenguaje
que
cualquier
persona
pueda
entender
debemos
tener
en
cuenta
ciertas
reglas.
Estas
reglas
y
los
elementos
que
constituyen
un
algoritmo
los
iremos
conociendo
con
el
tiempo,
a
lo
largo
de
este
curso.
¡Comencemos!
2.1 Asignación
Un
algoritmo
se
compone
de
un
conjunto
de
instrucciones
que
deben
ser
realizadas
ordenadamente,
con
el
objetivo
de
dar
solución
a
un
problema.
La
primera
forma
que
POLITÉCNICO GRANCOLOMBIANO EN ALIANZA CON WHITNEY INTERNATIONAL UNIVERSITY SYSTEM
Adrian
Nicolás
Malaver
Barrera
1
definiremos
para
una
instrucción
es
la
asignación,
que
se
basa
en
asignar,
como
su
nombre
lo
dice,
un
valor
específico
a
una
variable.
Este
valor
puede
ser
una
variable,
una
constante,
o
en
general,
una
expresión.
Con
la
asignación
lo
que
se
pretende
es
almacenar
un
resultado
en
una
variable.
Cuando
definamos
asignaciones,
lo
haremos
de
la
siguiente
manera
(Para
una
definición
más
formal
consulta
la
lectura
3
de
esta
semana):
<Variable>
←
<Expresión>
Veamos
algunos
ejemplos
de
asignaciones:
Tabla
1.
Ejemplos
de
asignaciones
Asignación
¿Qué
puede
representar?
V
←
15
/
2
El
cálculo
de
una
velocidad,
basada
en
valores
dados
de
distancia
y
tiempo
A
←
π*R*R
El
área
de
un
círculo
P
←
2*π*R
La
longitud
de
una
circunferencia
V
←
π*R*R
*
h
El
volumen
de
un
cilindro
Al
construir
instrucciones
en
forma
de
asignaciones
debemos
tener
en
cuenta
que
las
expresiones
involucradas
estén
estructuradas
correctamente.
En
general,
una
expresión
puede
estar
mal
formada
si:
• Contiene
errores
relacionados
con
la
sintaxis
o
el
orden
de
los
símbolos
usados.
Por
ejemplo,
la
expresión
5
+
<
4
está
mal
formada,
dado
que
para
realizar
cualquiera
de
las
dos
operaciones,
se
requieren
dos
operandos.
• Contiene
operaciones
que
no
tienen
sentido
o
no
respetan
las
reglas
matemáticas
implicadas.
Por
ejemplo
5
/
(8
–
4*2)
implica
que
se
haga
una
división
por
cero,
lo
cual
no
tiene
validez.
• Contiene
operaciones
que
no
se
pueden
aplicar
al
tipo
de
dato
de
los
operandos
implicados.
Por
ejemplo,
no
es
posible
evaluar
57
Y
85
ni
la
expresión
V
+
F
*
3.
Podemos
entonces,
definir
las
instrucciones
de
un
algoritmo
con
base
en
un
conjunto
de
asignaciones.
Veamos
un
ejemplo:
Se
quiere
calcular
el
volumen
de
agua
que
puede
ser
almacenado
en
18
vasos
cilíndricos,
dados
el
radio
de
su
base
y
su
altura.
Adrian
Nicolás
Malaver
Barrera
2
Entonces,
lo
primero
que
debemos
hacer
es
el
proceso
de
modelado
que
se
basa
en
la
identificación
de
entradas
y
salidas.
Podemos
decir
que
requerimos
de
dos
variables
de
entrada,
que
son
la
base
y
la
altura
del
vaso
y
obtendremos
una
salida
que
es
el
valor
del
volumen.
Luego,
identificamos
las
pre
y
pos
condiciones
que
hablarían
de
los
valores
con
los
cuales
tendría
sentido
solucionar
el
problema.
Finalmente,
pasamos
a
definir
el
algoritmo
que
nos
permite
obtener
una
solución,
que
se
fundamentaría
en
el
cálculo
del
volumen
de
uno
de
los
vasos
y
su
posterior
multiplicación
por
18.
Una
vez
tengamos
esta
información
requerida
debemos
documentarla
mejor.
Entre
más
claridad
tengamos
en
la
definición
del
problema
y
del
algoritmo,
mejores
y
más
precisos
serán
los
resultados
obtenidos.
Un
algoritmo
bien
definido
permite
que,
dado
un
conjunto
de
datos
de
entrada
que
cumple
las
precondiciones,
se
siguen
instrucciones
que
permiten
hallar
un
conjunto
de
salidas
que
deben
cumplir
las
poscondiciones
definidas.
2.2 Estructura formal de un algoritmo
Si
juntamos
los
procesos
de
modelado,
especificación
y
construcción
de
algoritmos
(con
base
en
asignaciones
como
lo
hemos
visto)
podemos
definir
una
forma
general
para
escribir
un
algoritmo.
Veamos:
Tabla 2. Estructura de un algoritmo
Un
nombre
que
indique
lo
que
pretendemos
hacer
Algoritmo
<Nombre del algoritmo>
con
este
algoritmo
Entradas
Variables
de
entrada
Pre:
{…}
Condiciones
para
las
variables
de
entrada
Inicio
Inicio
del
algoritmo
Paso 1
Paso 2
. Cada
paso
o
instrucción
involucrada
en
la
solución
. del
problema
.
Paso n
Fin
Fin
del
algoritmo
Salidas
Variables
de
salidas
Pos:
{…}
Condiciones
que
deberán
cumplir
las
salida
Adrian
Nicolás
Malaver
Barrera
3
Y
para
el
ejemplo
visto
antes,
la
definición
podría
ser
la
siguiente:
Tabla 3. Ejemplos de algoritmo de acuerdo con la estructura
Algoritmo
VolumenDelCilindro
Entradas
radio, altura: Real
Pre:
{radio>0 Y altura>0 }
Inicio
Variables
v: Real
v ← π*radio*radio*altura
volumen ← 18 * v
Fin
Salidas
volumen: Real
Pos:
{volumen > 0}
Cuando
definimos
algoritmos
de
esta
forma,
obtenemos
lo
que
llamaremos
pseudocódigo,
lenguaje
que
no
es
demasiado
formal
y
está
definido
para
describir
de
forma
sencilla,
clara
e
independiente
de
un
lenguaje
de
programación,
instrucciones
que
se
deben
realizar
para
obtener
el
resultado
de
un
problema.
Más
adelante
veremos
que
es
sencillo
pasar
de
este
pseudocódigo
al
lenguaje
de
programación
en
el
que
trabajaremos.
2.2.1 Un ejemplo
Muchas
veces
los
procesos
de
modelado
y
especificación
requieren
un
trabajo
adicional
para
identificar
y
posteriormente
construir
un
algoritmo.
Veamos
un
ejemplo
aún
más
interesante:
Se
requiere
calcular
el
área
de
cada
triángulo
construido
al
trazar
líneas
de
un
punto
de
coordenadas
(x,y)
a
los
tres
vértices
{(0,0), (w,0) y (w,h)}
de
un
triángulo
ubicado
en
el
primer
cuadrante
del
plano
cartesiano,
como
lo
muestra
la
gráfica.
El
punto
(x,y)
debe
estar
dentro
o
en
el
borde
del
triángulo.
Adrian
Nicolás
Malaver
Barrera
4
Gráfica
1.
Información
del
problema
Modelado
Entradas:
x, y, w, h: Real
Dado
que
requerimos
la
información
de
las
coordenadas
del
punto
y
de
los
valores
de
w
y
h
para
conocer
las
coordenadas
de
los
vértices.
Salidas:
a1,a2,a3: Real
Dado
que
el
algoritmo
debe
calcular
el
área
de
cada
triángulo.
Especificación
Precondiciones:
1. Que el triángulo esté en el primer cuadrante
Para
tal
fin,
debemos
definir
que
el
punto
de
coordenadas
(w,h)
esté
en
el
primer
cuadrante;
formalmente:
{w>0 Y h>0}.
El
punto
(0,0)
se
descarta,
dado
que
obtendríamos
un
triángulo
de
área
cero.
2. Que el punto de coordenadas (x,y) esté dentro del triángulo
Debemos
definir
precondiciones
similares
a
las
del
punto
anterior,
pero
es
necesario
tener
en
cuenta
más
factores
dado
que
debemos
limitar
el
punto
dentro
de
un
área
más
pequeña.
Comencemos
con
x:
{x >= 0 Y x <= w};
para
y,
además
de
verificar
que
se
encuentre
en
el
intervalo
[0,h]
debemos
verificar
que
se
encuentre
debajo
o
sobre
la
hipotenusa
del
triángulo.
Podemos
definir
estas
precondiciones
hallando
la
ecuación
de
la
recta
que
representa
la
hipotenusa
para
conocer
la
altura
que
debería
tener
la
coordenada,
como
lo
muestra
la
siguiente
figura:
Adrian
Nicolás
Malaver
Barrera
5
Gráfica
2.
Representación
de
la
condición
a
verificar
La
ecuación
general
de
la
recta
es
y=mx+b,
donde
m
es
la
pendiente
de
la
recta
y
equivale
a
h/w.
Como
b,
el
intercepto
con
el
eje
vertical
es
cero,
podemos
ignorarla,
y
podemos
escribir
lo
que
nos
interesa:
la
coordenada
y
debe
ser
mayor
o
igual
que
cero
y
menor
o
igual
que
la
altura
de
la
recta
en
el
punto
x.
Esto
es:
{y>=0 Y y<=(h/w)*x}.
Simplemente
reescribimos
m
como
(h/w).
Poscondiciones:
1. El
valor
de
cada
área
debe
ser
mayor
que
cero,
dado
que
no
tiene
sentido
un
área
negativa
y
como
w
y
h
son
mayores
que
cero,
no
deberá
ser
posible
obtener
áreas
nulas.
Esto
es:
{a1>0 Y a2>0 Y a3>0}.
2. La
suma
de
las
áreas
debe
ser
igual
al
área
total
del
triángulo.
Esto
es:
{a1 + a2 +
a3 = w*h/2},
calculando
el
área
del
triángulo
completo
con
la
fórmula.
Con la información definida, podemos escribir el algoritmo de la siguiente forma:
Tabla 4. Algoritmo de solución del problema
Algoritmo
Áreas
Entradas
x,y,w,h: Real
Pre:
{w>0 Y h>0 Y x>=0 Y x<=w Y y>=0 Y y<=(h/w)*x}
Inicio
a1←w*y/2 a1
y
a2
se
calculan
con
la
fórmula
general,
a3
se
a2←h*(w-x)/2 calcula
como
la
diferencia
entre
el
área
total
y
la
a3←w*h/2-a1-a2 suma
de
las
áreas
previamente
calculadas.
Fin
Salidas
a1,a2,a3: Real
Pos:
{a1>0 Y a2>0 Y a3>0 Y a1+a2+a3 = w*h/2}
Para finalizar, verifiquemos el algoritmo con algunos valores.
Adrian
Nicolás
Malaver
Barrera
6
Dados
los
valores
de
las
variables
de
entrada
x=-15, y=18, w=30, h=24
los
reemplazamos
en
la
expresión
que
describe
las
precondiciones
y
si
las
entradas
son
válidas,
la
expresión
debe
ser
verdadera,
en
otro
caso,
será
falsa.
Veamos:
Dado
{w>0 Y h>0 Y x>=0 Y x<=w Y y>=0 Y y<=(h/w)*x},
reemplazamos:
30>0 Y 24>0 Y -15>0 Y -15<=30 Y 18>=0 Y 18<=(24/30)*-15
V Y V Y F Y V Y V Y 18<=-12
V Y V Y F Y V Y V Y V
F
La
respuesta
es
falsa
dado
que
el
valor
de
x
es
negativo.
En
este
caso
es
importante
notar
que
los
valores
de
entrada
definidos,
corresponden
a
un
problema
distinto
al
que
se
pretende
solucionar,
por
lo
tanto
no
tiene
sentido
calcular
su
solución
bajo
el
esquema
definido.
Para
x=10, y=5, w=-3, h=4
Dado
{w>0 Y h>0 Y x>=0 Y x<=w Y y>=0 Y y<=(h/w)*x},
reemplazamos:
-3>0 Y 4>0 Y 10>=0 Y 10<=-3 Y 5>=0 Y 5<=(4/-3)*10
F Y V Y V Y V Y V Y 5<=-13.3
F Y V Y V Y V Y V Y V
F
La
respuesta
es
falsa
dado
que
el
valor
de
w
es
negativo.
Para
x=1, y=4, w=8, h=5
Dado
{w>0 Y h>0 Y x>=0 Y x<=w Y y>=0 Y y<=(h/w)*x},
reemplazamos:
8>0 Y 5>0 Y 1>=0 Y 1<=8 Y 4>=0 Y 4<=(5/8)*1
V Y V Y V Y V Y V Y 4<=0.625
V Y V Y V Y V Y V Y F
F
La
respuesta
es
falsa
dado
que
el
valor
de
el
punto
(x,y),
a
pesar
de
cumplir
la
mayoría
de
las
precondiciones,
está
por
encima
de
la
hipotenusa.
Para
x=5, y=3, w=10, h=8
Dado
{w>0 Y h>0 Y x>=0 Y x<=w Y y>=0 Y y<=(h/w)*x},
reemplazamos:
10>0 Y 8>0 Y 5>=0 Y 5<=10 Y 3>=0 Y 3<=(8/10)*5
V Y V Y V Y V Y V Y 3<=4
V
En este caso la respuesta es verdadera y podemos ejecutar el algoritmo.
Adrian
Nicolás
Malaver
Barrera
7
a1←w*y/2
a1←10*3/2
a1←15
a2←h*(w-x)/2
a2←8*(10-5)/2
a2←20
a3←w*h/2-a1-a2
a3←10*8/2–15-20
a3←5
Ahora,
con
estos
valores
se
verifican
las
poscondiciones:
Dado{a1>0 Y a2>0 Y a3>0 Y a1+a2+a3 = w*h/2},
reemplazamos:
a1>0 Y a2>0 Y a3>0 Y a1+a2+a3 = w*h/2
15>0 Y 20>0 Y 5>0 Y 15+20+5 = 10*8/2
V Y V Y V Y 40 = 40
V Y V Y V Y V
V
La
respuesta
hallada
es
válida.
En
resumen
Para
lograr
la
construcción
de
un
buen
algoritmo
es
necesario
tener
en
cuenta
la
definición
correcta
y
clara
de
entradas
y
salidas,
y
de
las
condiciones
que
definen
que
dichos
valores
son
válidos
(precondiciones
aplicadas
a
las
entradas
y
poscondiciones
aplicadas
a
las
salidas).
Dichas
condiciones
se
representan
mediante
expresiones
booleanas
que
deberán
ser
verdaderas
al
reemplazar
los
datos.
El
primer
elemento
que
nos
permite
construir
algoritmos
es
la
asignación.
Mediante
su
uso
buscamos
asignar
valores
(que
pueden
ser
constantes,
variables
o
en
general,
expresiones)
a
variables
específicas.
Para
tener
en
cuenta:
• Verificar
en
papel
la
solución
del
algoritmo
“Áreas”
para
varios
conjuntos
de
variables
de
entrada.
Verificar
gráficamente
que
los
valores
hallados
tengan
sentido.
• Verificar
la
construcción,
basándose
en
las
gráficas,
de
las
asignaciones
que
calculan
el
área
de
cada
triángulo
independiente.
• Sin
necesidad
de
tener
en
cuenta
los
valores
de
a1
y
a2,
¿Cómo
podría
calcularse
a3?
Adrian
Nicolás
Malaver
Barrera
8