Está en la página 1de 8

2.

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


También podría gustarte