Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Documento Maestro Algoritmos PDF
Documento Maestro Algoritmos PDF
PROGRAMA
DE
INGENIERÍA
ALGORITMOS
Tomada de http://www.conalepqueretaro.edu.mx/images/stories/informatica.jpg
Introducción
Objetivos específicos
Clasificación de problemas
2
Wilson Mauricio Pimiento Cárdenas. Fundamentos de la lógica para programación de computadores. Universidad Piloto.
2009. 1ª edición.
PROGRAMA
DE
INGENIERÍA
- Salida:
El
punto
medio.
Este
tipo
de
problema
es
algorítmico
soluble,
en
razón
a
que
existe
un
procedimiento
que
permite
encontrar
la
solución.
Ejemplo
soluble
no
algorítmico:
de
un
conjunto
de
cuatro
manzanas,
determinar
cuál
es
la
más
bella.
- Entrada:
cada
una
de
las
cuatro
manzanas.
- Proceso:
no
tiene.
- Salida:
una
de
las
manzanas.
Este
tipo
de
problema
planteado
es
categorizado
como
soluble
no
algorítmico,
debido
a
que
no
sigue
un
procedimiento
perfectamente
definido
para
encontrar
la
respuesta.
La
solución
de
un
problema
a
través
de
un
algoritmo
debe
describir
las
tres
partes
que
lo
componen:
- Elementos
conocidos
(entrada).
- Procedimientos
y
condiciones
(proceso).
- Repuesta
(salida).
Entrada
PROCESO
Salida
Ejemplo
1.
Hacer
un
plato
típico
colombiano,
de
acuerdo
a
las
anteriores
etapas,
tiene
la
siguiente
clasificación.
- Entrada:
ingredientes
y
utensilios
de
cocina.
- Proceso:
combinar
los
ingredientes
y
hacer
uso
de
los
utensilios
de
cocina
de
acuerdo
a
la
receta.
- Salida:
el
plato
colombiano.
Ejemplo
2.
Sea
el
número
A
=
5
y
el
número
B
=
10,
encontrar
el
promedio
de
los
dos
números.
- Entrada:
número
A
y
número
B.
- Proceso:
sumar
el
número
A
con
el
número
B
y
dividir
el
resultado
entre
2.
- Salida:
promedio
de
los
dos
números.
PROGRAMA
DE
INGENIERÍA
Metodología para el desarrollo de algoritmos
Documentación
Prueba y
Conversión
del
depuración del
algoritmo
aun
programa
programa
de
Etapa
5
computador
Diseño y (codificación)
desarrollo del
Etapa
4
algoritmo
Análisis del
problema
Etapa
3
Etapa
2
Etapa
1
Proceso para la elaboración de un programa de computador.
Las
etapas
1
y
2
son
las
más
complejas
y
las
de
mayor
detenimiento
para
solucionar
un
problema
en
computador,
porque
responden
cada
uno
de
los
interrogantes
sugeridos
en
la
solución
de
problemas
para
articular
el
desarrollo.
Las
etapas
3
y
4
transforman
el
problema
a
un
algoritmo,
el
cual
se
traduce
a
un
lenguaje
de
programación
computacional
(C++,
Vistual
Basic,
Java
etc)
que
validará
los
datos
para
determinar
si
satisface
la
solución
al
problema.
PROGRAMA
DE
INGENIERÍA
Análisis del problema
Proceso:
Suma
=
Número_A
+
Número_B.
Promedio
=
suma/2
Salida El resultado que está almacenado en la variable Promedio.
PROGRAMA
DE
INGENIERÍA
Diseño y desarrollo del algoritmo
int main()
{
double numeroA, numeroB, suma;
cout<<"Ingrese el numero A : ";
cin>>numeroA;
cout<<"Ingrese el numero B : ";
cin>>numeroB;
cout <<"\n\n";
suma = (numeroA + numeroB);
cout<<"el valor de la suma es: " <<suma <<"\n";
cout<<"\n\n";
system("pause");
}
PROGRAMA
DE
INGENIERÍA
Prueba y depuración del programa
Documentación
Consiste
en
la
descripción
de
cada
uno
de
los
pasos
que
conllevan
a
la
solución
del
problema;
su
importancia
radica
en
la
facilidad
que
otorga
para
leer
un
programa,
depurarlo,
hacer
ajustes
y
mantenimiento.
Existen
dos
tipos
de
documentación:
• Interna:
consiste
en
ir
dejando
líneas
de
comentario
dentro
del
programa.
• Externa:
incluye
cada
una
de
las
etapas
del
procedimiento
metodológico
(análisis,
diseño,
codificación
y
los
manuales
del
usuario
para
el
manejo
del
programa
y
la
interpretación
de
los
datos
e
información
final).
4
Joyanes A. Luis. Programación en algoritmos, estructuras de datos y objetos. McGraw Hill 2000.
PROGRAMA
DE
INGENIERÍA
Composición de algoritmos: diagramas de flujo y pseudocódigo
Estudio de caso
Datos
de
entrada
Nota1,
Nota2,
Nota3
Primer_parcial
=
Nota1
*
30%
Segundo_parcial
=
Nota2
*
30%
Procesos
Tercer_parcial
=
Nota3
*
40%
Nota_final
=
Primer_parcial
+
segundo_parcial
+
tercer_parcial
Datos
de
salida
La
nota
definitiva
de
la
asignatura
es
Nota_final
Proceso
Procesar notas
Escribir definitiva
Salida
Fin
Figura 4. Etapa de división del algoritmo en diagrama de flujo.
Leer Nota1
Entrada
Leer Nota2
Leer Nota3
Escribir definitiva
Salida
Fin
Figura 5. Subdivisión de la primera parte del algoritmo (entrada)
A
continuación
se
divide
la
parte
del
algoritmo
que
corresponde
al
proceso,
como
lo
muestra
en
la
figura
6.
Ahí
se
aprecian
las
fórmulas
matemáticas
para
procesar
la
información.
PROGRAMA
DE
INGENIERÍA
Inicio
Leer Nota1
Leer Nota2
Entrada
Leer Nota3
Escribir definitiva
Salida
Fin
Por
último,
se
dividirá
el
proceso
de
la
salida.
Para
este
caso
de
estudio
no
hay
que
hacer
nada,
en
razón
a
que
la
nota
definitiva
es
un
único
valor
como
resultado
y
una
única
actividad
del
subproceso
de
salida.
En
la
figura
7
evidencia
el
proceso.
PROGRAMA
DE
INGENIERÍA
Inicio
Leer Nota1
Leer Nota2
Entrada
Leer Nota3
Escribir Nota_final
Salida
Fin
Dentro
del
paso
de
diseño
la
siguiente
actividad
consiste
en
tomar
el
diseño
propuesto
y
evaluar
las
operaciones
para
optimizarlo.
A
éste
etapa
final
se
le
denomina
etapa
de
abstracción
o
refinamiento.
En
la
figura
7
se
muestra
el
algoritmo
desarrollado
anteriormente
en
su
etapa
de
abstracción
o
refinamiento.
PROGRAMA
DE
INGENIERÍA
Inicio
Leer Nota1
Leer Nota2
Leer Nota 3
Escribir Nota_final
Fin
Pseudocódigo
4 Leer Nota1
5 Leer Nota2
6 Leer Nota3
8 Escribir Nota_final
9 Fin
Estructuras secuenciales
Estructura secuencial
En
un
programa
estructurado
de
manera
secuencial,
una
acción
(instrucción)
es
seguida
inmediatamente
de
otra
para
su
ejecución,
de
manera
que
la
salida
de
una
se
convierte
en
la
entrada
de
otra
y
así
sucesivamente
hasta
finalizar
el
proceso.
Las
figuras
8
y
9
representan
una
estructura
secuencial
en
bloques
y
pseudocódigo.
Acción 1
Acción 2
Acción 3
Acción n
6 <Acción
n>
Fin
7
Para
ilustrar
la
estructura
secuencial,
es
pertinente
el
caso
estudio
que
propone
crear
un
algoritmo
para
el
promedio
de
las
notas
de
la
asignatura
programación
I
(caso
que
será
utilizado
para
cada
una
de
las
estructuras
propuestas
en
el
curso).
Se
puede
evidenciar
que,
para
la
ejecución
de
cada
instrucción
debe
haber
terminado
previamente
la
anterior,
como
lo
describe
la
figura
10.
Inicio
Leer Nota1
Leer Nota2
Leer Nota 3
Escribir Nota_final
Fin
Las
estructuras
selectivas
-‐o
de
decisión-‐
son
utilizadas
para
tomar
decisiones
lógicas
cuando
hay
un
número
de
alternativas
resultantes
de
una
condición.
Estas
estructuras
evalúan
la
condición
y
se
ejecuta
una
opción
u
otra
en
función
del
resultado.
Las
estructuras
de
decisión
pueden
ser:
• Simples
(Si
–
entonces
/
if
-‐
then)
• Dobles
(Si
–
entonces
–
si_no
/
if
–
then
-‐
else)
• Múltiples
(Según
sea,
caso
de
/
case)
Estructura simple
Este
tipo
de
estructura
evalúa
una
condición
dada
y,
de
acuerdo
con
el
resultado
(verdadero
o
falso),
determina
la
acción
a
seguir.
La
representación
gráfica
de
la
estructura
de
decisión
simple
se
observa
en
la
figura
11.
a.
Falso
(no)
Condición
Verdadero
(SI)
Acciones
…. ….
Leer Nota1
Leer Nota2
Leer Nota 3
Nota_final
No
>=
3.0
Si
Fin
PROGRAMA
DE
INGENIERÍA
Estructura doble
Este
tipo
de
estructura
permite
ejecutar
acciones
en
las
dos
alternativas
posibles
(verdadero
o
falso),
una
vez
evaluada
la
condición.
La
figura
12
ejemplifica
este
tipo
de
estructura.
a.
si_no else
Ejemplo
Leer Nota1
Leer Nota2
Leer Nota 3
No
Nota_final
Si
>=
3.0
Fin
Estructura múltiple
Este
tipo
de
estructura
permite
seleccionar
una
opción
entre
múltiples
alternativas,
lo
que
evita
problemas
de
escritura
del
algoritmo
y,
naturalmente,
de
legibilidad.
La
figura
13
evidencia
este
tipo
de
estructura.
PROGRAMA
DE
INGENIERÍA
a.
1
n
Condición
2
3
4
Acción
A1
Acción
A2
Acción
A3
Acción
A4
…
Acción
An
b. Pseudocódigo
Si-no Acción Ax
Fin-según.
El
resultado
de
la
expresión
(E)
es
evaluado,
el
resultado
se
compara
con
cada
una
de
las
etiquetas
E1,
E2,…,
En
y
de
su
incidencia
ejecutará
las
acciones
respectivas.
En
caso
de
no
corresponder
con
ninguna
de
las
etiquetas,
ejecutará
la
acción
Ax.
Debe
tener
en
cuenta
que:
• Cada
etiqueta
(E1,
E2,…,
En)
es
un
único
valor
diferente
a
las
demás.
• La
expresión
(E)
debe
ser
un
tipo
ordinal,
como
por
ejemplo:
entero,
carácter,
boleano
pero
no
real
o
cadena.
PROGRAMA
DE
INGENIERÍA
Estructuras repetitivas
Las
estructuras
repetitivas
son
algoritmos
creados
para
repetir
una
o
varias
acciones
en
un
número
finito
de
veces.
Las
estructuras
que
repiten
una
sentencia
de
instrucciones
un
número
determinado
de
veces
se
denominan
bucles;
repetir
la
ejecución
de
una
sentencia
de
acciones5
se
llama
iteracción.
Existen
tres
tipos
de
estructuras
repetitivas:
1. Mientras
(while)
2. Repetir
(repeat)
3. Desde
–
para
(for)
Mientras (while)
Falsa
(no)
Condición
Verdadera
(Si)
Acciones
Figura 14. Estructura repetitiva “mientras” (while).
5
Joyanes A. Luis. Programación en algoritmos, estructuras de datos y objetos. McGraw Hill 2000
PROGRAMA
DE
INGENIERÍA
Al
ejecutar
la
estructura
“mientras”
(while),
primero
debe
evaluar
la
condición.
Si
el
resultado
de
la
condición
es
verdadero,
ejecuta
el
cuerpo
del
bucle
(las
acciones)
y
regresa
nuevamente
para
evaluar
la
condición.
Este
proceso
se
repite
una
y
otra
vez,
mientras
el
resultado
de
la
condición
sea
verdadero;
si
es
falso,
no
se
ejecuta
ninguna
acción.
Ejemplo
No
Continua
(S/N)
Si
Leer Nota1
Leer Nota2
Leer Nota 3
No
Si
Nota_final
>=
3.0
Fin
Repetir (repeat)
Acciones
Falsa
Condición
(no)
Verdadera
(Si)
b. Pseudocódigo en español. c. Pseudocódigo en inglés.
repetir repeat
En
la
estructura
“repetir”
las
acciones
siempre
se
ejecutan
al
menos
una
vez;
la
estructura
“mientras”
evalúa
la
condición,
si
ésta
es
verdadera,
ejecuta
las
acciones;
de
lo
contrario,
no.
Ejemplo
Leer Nota1
Leer Nota2
Leer Nota 3
No
Si
Nota_final
>=
3.0
No
Si
Continua
(S/N)
Fin
Observe
que
en
la
estructura
repeat,
a
diferencia
de
while,
la
decisión
se
encuentra
al
final
de
la
ejecución
del
algoritmo.
Verdadero
(si)
Acciones
Incrementar_variable_control
Desde variable_control ß hasta valor_límite incrementar_varible_control <valor> hacer
<Acción 1>
<Acción 2>
….
<Acción
n>
Fin_desde
El
bucle
Desde
–
para
(for)
está
compuesto
por
cuatro
partes:
• Parte
de
inicialización:
está
representada
por
la
variable
de
control
del
bucle.
• Parte
de
iteración:
contiene
una
expresión
lógica
que,
de
ser
verdadera,
hace
que
se
realicen
las
acciones
en
cada
iteración.
PROGRAMA
DE
INGENIERÍA
• Parte
de
incremento:
en
esta
parte
se
incrementa
o
decrementa
la
variable
de
control
del
bucle.
• Parte
de
acciones
(o
sentencias):
contiene
las
acciones
que
se
ejecutan
en
cada
iteración
del
bucle.
Ejemplo
Contador = 0
No Contador <3
Si
Leer Nota1
Leer Nota2
Leer Nota 3
No
Nota_final
Si
>=
3.0
Contador = Contador + 1
Fin
PROGRAMA
DE
INGENIERÍA
Anidación de estructuras
Las
estructuras
anidadas
son
aquellas
que
pueden
contener
otras
estructuras
(de
decisión
y
repetitivas)
cualquier
número
de
veces,
ejecutando
diferentes
acciones.
Las
estructuras
de
selección
si-‐entonces
y
si-‐entonces-‐si_no
implican
la
selección
de
dos
alternativas.
Es
posible
utilizar
la
instrucción
si
para
diseñar
estructuras
de
selección
que
contengan
más
de
dos
alternativas.
Ejemplo,
una
estructura
si-‐entonces
puede
contener
otra
estructura
si-‐entonces
y
esta
estructura
si-‐entonces
puede
contener
otra
y
así
sucesivamente6.
Si
condición1
entonces
Si
condición2
entonces
Si
condición3
entonces
<acción
1>
….
<acción
n>
Representación
en
pseudocódigo
de
una
estructura
de
decisión
simple
anidada
(si-‐
entonces)
Si Condición1 entonces
Si Condición2 entonces
Si Condición3 entonces
<Acción1>
…
<Acción n>
Fin_si
Fin_si
Fin_si
6
Joyanes A. Luis. Programación en algoritmos, estructuras de datos y objetos. McGraw Hill 2000.
PROGRAMA
DE
INGENIERÍA
El
siguiente
pseudocódigo
muestra
una
estructura
de
decisión
doble:
Si Condición1 entonces
<acciones>
Si_no
Si Condición2 entonces
<acciones>
Si_no
Si Condición3 entonces
<Acciones>
Si_no
<Acciones>
Fin_si
Fin_si
Fin_si
El
pseudocódigo
se
puede
volver
complejo
en
la
medida
que
sean
agregadas
más
estructuras
de
decisión
anidadas,
por
lo
que
es
necesario
aplicar
indentación
(o
sangría),
de
tal
manera
que
corresponda
la
palabra
si
y
fin_si
de
cada
estructura,
tal
como
lo
ilustran
las
líneas.
Las
estructuras
repetitivas
son
anidadas
igual
que
las
estructuras
de
decisión
y
conservan
las
reglas
de
indentación.
Adicional
a
esto,
la
estructura
interna
debe
estar
contenida
completamente
en
la
externa,
evitando
el
solapamiento.
La
figura
17
(a
y
b)
representa
gráficamente
esta
anidación:
PROGRAMA
DE
INGENIERÍA
a.
mientras Condición1 hacer
<acciones>
mientras Condición2 hacer
<acciones>
mientras Condición3 hacer
<Acción1>
…
<Acción n>
Fin_mientras
Fin_mientras
Fin_mientras
b)
mientras Condición1 hacer
<acciones>
mientras Condición3 hacer
<Acción1>
…
<Acción n>
Fin_mientras
mientras Condición3 hacer
<Acción1>
…
<Acción n>
Fin_mientras
Fin_mientras
PROGRAMA
DE
INGENIERÍA
Prueba de escritorio
Prueba
que
el
programador
hace
al
algoritmo
para
verificar
que
cumple
con
las
especificaciones
y
los
resultados
esperados,
sin
necesidad
de
ejecutarlo
en
un
lenguaje
de
programación.
Proceso
que
se
ejecuta
a
“mano”
y
paso
por
paso.
Para
dar
una
explicación
más
clara
y
precisa
del
proceso
de
la
prueba
de
escritorio,
se
continuará
con
el
estudio
de
caso:
8 Escribir
Nota_final
Fin
9
La
prueba
de
escritorio
comienza
ejecutando
la
línea
numerada
como
1;
es
decir,
inicia
con
la
ejecución
del
algoritmo.
En
la
línea
2
se
deja
un
comentario
sobre
el
objetivo
del
programa
y
en
la
línea
3
se
definen
las
variables
y
el
tipo
de
dato
que
cada
variable
almacenará
(reales).
En
la
línea
4
se
ejecuta
una
instrucción
de
entrada;
es
decir,
una
instrucción
que
recibe
un
dato
para
que
el
algoritmo
lo
procese.
En
términos
de
la
prueba
de
escritorio,
se
debe
registrar
un
dato
que
entra
al
algoritmo
y
queda
almacenado
en
una
variable
en
la
memoria
del
computador;
este
hecho
se
PROGRAMA
DE
INGENIERÍA
registra
en
la
siguiente
tabla
que,
para
efectos
de
la
prueba
de
escritorio,
se
irá
registrando
cada
suceso
que
ocurra
en
las
líneas
del
algoritmo.
Nota1
Nota2
Nota3
Nota_final
3.6
Como
se
observa
en
la
tabla
anterior,
debajo
de
la
variable
Nota1
aparece
el
dato
real
3.6,
lo
que
significa
que
se
suministró
un
dato
al
algoritmo
y
quedó
almacenado
en
Nota1.
En
el
algoritmo,
las
instrucciones
5
y
6
hacen
exactamente
lo
mismo
que
la
instrucción
4,
con
la
diferencia
que
puede
suministrar
datos
diferentes
a
voluntad
del
usuario,
haciendo
uso
del
computador.
La
prueba
de
escritorio
supone
que
al
suministrar
las
notas
4.4
y
3.2,
quedan
almacenadas
en
las
variables
Nota2
y
Nota3
respectivamente.
La
tabla
con
los
anteriores
valores
se
verá
así:
Nota1
Nota2
Nota3
Nota_final
3.6
4.4
3.2
La
instrucción
7
toma
cada
uno
de
los
datos
almacenados
en
las
variables
Nota1,
Nota2
y
Nota3,
multiplicando
por
30%,
30%
y
40%
respectivamente
cada
una.
El
resultado
de
la
anteriores
operaciones
se
suman
y
almacenan
en
la
variable
Nota_final.
La
instrucción
número
8
tiene
como
fin
reportar
el
contenido
de
la
variable
Nota_final;
es
decir,
el
valor
3.6.
Esta
variable
se
resalta
con
un
círculo
para
identificar
que
hace
parte
de
los
datos
de
salida
esperados
del
algoritmo.
Nota1
Nota2
Nota3
Nota_final
Traducir
un
algoritmo
a
un
lenguaje
de
programación
de
alto
nivel,
significa
pasar
de
la
codificación
del
pseudocódigo
a
la
sintaxis
propia
del
lenguaje
de
programación
escogido,
que
para
el
caso
de
este
curso
es
C++
(Dev-‐C++).
Para
ello,
primero
es
necesario
conocer
la
estructura
y
sintaxis
propia
del
lenguaje
C++,
donde
intervienen
librerías,
funciones
y
otras
más
que
no
usa
el
algoritmo.
El archivo de cabecera indica al
programa las funciones a utilizar. Por
ejemplo: si se reemplaza por
iostream dentro del programa, se
podrán utilizar funciones como
#include < nombre
system(“pause”) para dar una pausa
Archivo de de fichero >
al programa que se está realizando.
cabecera
También se pueden usar recursos
como cin (palabra reservada para que
el usuario ingrese los datos) y cout
(para mostrar los datos al usuario).
A
continuación
será
codificado
el
algoritmo
que
recibe
dos
números
enteros
por
el
teclado
y
entrega
la
suma
de
éstos
números,
aplicando
la
estructura
del
lenguaje
de
programación
de
alto
nivel
C++.
#include "iostream"
using namespace std;
int main()
{
double numeroA, numeroB, suma;
cout<<"Ingrese el numero A : ";
cin>>numeroA;
cout<<"Ingrese el numero B : ";
cin>>numeroB;
cout <<"\n\n";
suma = (numeroA + numeroB);
cout<<"el valor de la suma es: " <<suma <<"\n";
cout<<"\n\n";
system("pause");
}
Nota:
Para
evitar
que
los
nombres
de
las
funciones
programadas
por
el
usuario
sean
confundidas
con
las
definidas
por
las
librerías
estándar
de
C++
(las
que
se
#incluyen
<
entre
símbolos
menor-‐que<
y
mayor-‐que
>),
lo
que
conllevaría
a
la
provocación
de
errores
difíciles
de
detectar
y
corregir,
la
solución
establecida
por
C++
son
las
namespace
(espacio
de
nombres),
que
para
el
caso
anterior
es
std,
que
incluye
las
definiciones
para
cout,
cin
etc.
El
formato
es
el
siguiente:
Using
namespace
std
PROGRAMA
DE
INGENIERÍA
Resumen