Algoritmos DFD
Algoritmos DFD
Algoritmos DFD
____________________________________________________
Introducción
Formular y resolver problemas constituye una actividad esencial de la vida del ser humano.
No se trata de almacenar en memoria problemas y sus correspondientes soluciones, sino de
desarrollar una capacidad para hacer frente con éxito a situaciones nuevas o desconocidas
en la vida del hombre. Ante situaciones nuevas, el que no sabe buscar soluciones se sentirá
confuso y angustiado y entonces no buscará una estrategia, dará una primera solución para
poner punto final a su agonía. El que sabe buscar soluciones, selecciona la estrategia que le
parece más cercana a la requerida y hace una hábil adaptación que se ajusta a la nueva
demanda.
Los grandes problemas se pueden subdividir en problemas más simples para solucionarlos,
utilizando la filosofía de "dividir para conquistar". Se parte del principio de que es más
fácil solucionar varios problemas simples (subproblemas) como parte de un todo que seguir
una idea de "todo o nada".
_______________________________________________________________
Desarrollar la capacidad de formular y resolver problemas nos prepara para enfrentar
situaciones desconocidas.
_______________________________________________________________
Se puede afirmar que todo problema consta de las siguientes partes: Datos, Operaciones y
Objetivo (solución)
3. Verificación de la solución
Especificación de un Problema
Esto se aplica también a cualquier disciplina, a otras áreas que comparten problemáticas
similares. Por ejemplo, considere el caso de un ingeniero civil que se enfrenta al problema
de construir una carretera. Lo primero que él debe hacer es tratar de entender y especificar
el problema que le plantean. Para eso debe tratar de identificar al menos tres aspectos del
problema: <1> los requerimientos del usuario (punto de origen y punto destino de la
carretera, número de carriles que debe tener, tipo de tráfico), <2> El mundo en el que debe
resolverse el problema (tipo de terreno, temperatura), y <3> las restricciones y condiciones
que plantea el cliente (presupuesto máximo, que los pendientes no sobrepasen el 5%). Sería
una pérdida de tiempo y de recursos para el ingeniero civil, intentar construir la carretera si
no
ha entendido y definido claramente los tres puntos antes mencionados. Y más que tiempo y
recursos, habrá perdido algo muy importante en una profesión de servicio como es la
ingeniería, que es la confianza del cliente.
En general, todos los problemas se pueden dividir en estos tres aspectos. En el caso de la
programación de computadores, un requerimiento funcional hace referencia a un servicio
que el programa debe proveer al usuario. Si usted va a escribir un programa para una
empresa, no le es suficiente entender la funcionalidad que éste debe tener, sino que debe
entender también algunas cosas de la estructura y funcionamiento de la empresa. Si hay un
requerimiento funcional de calcular el salario de un empleado, la descripción del problema
debe incluir las normas de la empresa para calcular un salario.
_______________________________________________________________
En el campo de las Ciencias de la Computación, la solución de problemas se describe
mediante el diseño de procedimientos llamados Algoritmos, los cuales posteriormente se
implementan como programas en el computador (utilizando lenguajes de programación
como C++, Java, PHP, Perl, Ruby, Delphi, Visual FoxPro...)
_______________________________________________________________
La solución del problema a través de éste conjunto de pasos o acciones ordenadas, se logra
con un algoritmo, el cual se divide en tres secciones (bloques):
2. PROCESO (operaciones)
3. SALIDA (resultados)
Los algoritmos se pueden clasificar en computacionales y no computacionales.
Es importante aclarar que el computador es un medio y no es el fin en la solución de
problemas. En otras palabras, no es el computador el que soluciona los problemas, somos
nosotros quienes lo hacemos y de alguna manera le contamos cómo es el asunto para que
él, con su velocidad y exactitud, trabaje con muchísimos datos.
a) Identificadores
b) Declaración de Variables\Constantes
c) Tipos de Datos
- Numéricos
: Entero
: Real
- Alfanuméricos
: Caracter
: Cadena
- Lógicos o Booleanos
d) Operadores
- Aritméticos
- Relacionales
- Lógicos
e) Instrucción de Asignación
f) Instrucciones de Entrada\Salida
g) Estructuras de Control de Flujo (Secuencial, Selectiva, Iterativa).
Ejercicios
Datos de entrada
cospro: Costo del producto
pago : Pago realizado por el cliente
Datos de salida
camb : Valor devuelto al cliente
_________________________________________________________________________
_______
Nombre de la
Clase
Datos o
Atributos
Operaciones o
Métodos
Compra_Tienda
cospro
pago
camb
leer( )
calcular_camb( )
mostrar( )
_________________________________________________________________________
_______
SOLUCIÓN ALGORÍTMICA
Algoritmo Compra_Tienda
INICIO
1. Crear el objeto Cambio
2. Leer cospro y pago
3. Hacer la operación (camb = pago - cospro)
4. Mostrar camb
FIN
____________________________________________________
Seudocódigo
clase Compra_Tienda {
privado:
cospro, pago, camb : real
publico:
Cambio( ) { cospro= pago=camb=0 }
leer( ) { leer (cospro, pago) }
calcular_camb( ) { camb = pago - cospro }
mostrar( ) { mostrar (camb) }
INICIO
1. Compra_Tienda Cambio
2. Cambio.leer( )
3. Cambio.calcular_camb( )
4. Cambio.mostrar( )
FIN
Area de un rectángulo
Area de un círculo
Velocidad de un carro
Después de presentar la solución de problemas a través del algoritmo y su correspondiente
Diagrama de Flujo, ahora se modelará la solución de un problema hasta escribir el
programa en el lenguaje denominado seudocódigo.
Algoritmo Vehiculo
INICIO
Conocer el valor del vehículo
Conocer el porcentaje del IVA y del descuento
Calcular el iva (valor del vehículo x porcentaje del IVA)
Calcular el descuento (valor del vehículo x 0.03)
Calcular el valor neto a pagar (valor vehículo + iva - descuento)
Mostrar el valor neto a pagar
FIN
_________
INICIO
_________
↓
______________
Leer
vlr_veh, por_iva
______________
↓
___________________________________________
vlr_net = vlr_veh + (vlr_veh * por_iva - vlr_veh * 0.03)
___________________________________________
↓
______________
imprimir
vlr_net
______________
↓
_________
FIN
_________
Programa Venta_vehiculo
// Un primer programa escrito en seudocódigo
// Autor : Usted
// Fecha : 09/09/2006
INICIO
escribir("ColombiAutos Ltda.")
//ENTRADA
escribir("Valor del vehículo : $")
leer(vlr_veh)
escribir("Porcentaje del IVA ?")
leer(por_iva)
//PROCESO
vlr_net = vlr_veh + (vlr_veh * (por_iva/100) - vlr_veh * por_des)
//SALIDA
escribir("Valor pagado por el cliente -> $", vlr_net)
FIN // fin del programa
____________________________________________________
Estructura Secuencial
Costo de un vidrio
Costo total de balones
Ladrillos para una pared
Algoritmo Terreno
// Otro ejemplo en lenguaje de seudocódigo
// Autor : Otra vez Usted
// Fecha : 14/10/2003
Var // declaración de variables
ext_acres, ext_hecta : Real
Const // declaración de constantes
Acre1 = 4047
Hect1 = 10000
Inicio
escribir ("Digite la extensión del terreno en Acres : ")
leer(ext_acres) // entrada de datos
ext_hecta = (ext_acres * Acre1) / Hect1 // Proceso
escribir ("Extensión del terreno en hectáreas = ", ext_hecta)
// salida de datos
Fin
clase Terreno {
privado:
ext_acres, ext_hecta : real
publico:
Terreno( ) { ext_acres= ext_hecta=0 }
leer( ) { mostrar ("Digite la extensión del terreno en Acres : ")
leer (ext_acres) }
calcular_ext_hecta( ) { ext_hecta = (ext_acres * 4047) / 10000 }
mostrar( ) { mostrar ("Extensión del terreno en hectáreas = ", ext_hecta) }
}
INICIO
1. Terreno Lote
2. Lote.leer( )
3. Lote.calcular_ext_hecta( )
4. Lote.mostrar( )
FIN
_________________________________________________
____________________________________________________
Estructura Selectiva
Las estructuras lógicas selectivas se encuentran en la solución algorítmica de casi todo tipo
de problemas. Las utilizamos cuando en el desarrollo de la solución de un problema
debemos tomar una decisión, para establecer un proceso o señalar un camino alternativo a
seguir.
Hay situaciones en las que la toma de decisiones se realiza en forma de cascada. Es decir,
se toma una decisión, se marca la rama correspondiente a seguir, se vuelve a tomar otra
decisión y así sucesivamente. Para solucionar el problema debemos aplicar prácticamente
un árbol de decisión.
Las estructuras algorítmicas selectivas que se utilizan para la toma de decisiones lógicas se
pueden clasificar así:
Número mayor
Lanzamiento de moneda
Conversión de días
Escriba un programa (seudocódigo) que lea la edad de una persona y determine si puede
votar o no en las próximas elecciones.
Algoritmo Votacion
Inicio
leer(edad)
sino
escribir("Hasta pronto!")
Fin
clase Edad_voto {
privado:
edad : entero
publico:
Edad_voto( ) { edad=0 }
leer( ) { mostrar ("Por favor, digite su edad : ")
leer (edad) }
mostrar( ) {
sino
fsi
INICIO
1. Edad_voto Edavot
2. Edavot.leer( )
3. Edavot.mostrar( )
FIN
_________________________________________________
2. Calcular el valor del peaje a pagar por un vehículo en la vía Ibagué - Alvarado. Los
automóviles pagan un valor de $3500; los camiones pagan $5000; los buses pagan
$4000 más un porcentaje del 1% por cada pasajero. El tiquete de cobro del peaje a
generar debe contener: Nombre del tipo de vehículo, Nro. de pasajeros y valor del
peaje.
3. Dados dos números enteros, determinar si un número es divisor del otro.
4. Un taxista trabaja en la empresa "PengüiTAXI" en la cual le asignan 3 rutas: Ruta A
con un valor de $3000, Ruta B con valor $5000 y Ruta C con valor $7000.
Además, debe cobrar un recargo de $500 si está trabajando entre las 20:00 y las
05:00. Si es festivo, hay un recargo de $100. ¿Cuánto debe pagar un usuario que
tome el servicio?
5. Determinar e imprimir si un número entero X es positivo, negativo o cero.
6. Calcular las raíces reales, de ser posible, de una ecuación de segundo grado: (ax² +
bx + c = 0)
7. Determinar si un año es bisiesto. Un año es bisiesto si es múltiplo de 4 (por ejemplo,
1984). Los años múltiplos de 100 no son bisiestos, salvo si ellos son también
múltiplos de 400 (2000 es bisiesto, 1800 no lo es).
8. Determinar e imprimir si un número entero X es par, impar o nulo.
9. Examinar el valor de una variable real llamada HORA y visualizar distintos
mensajes a diferentes horas del día: a) "Buenos dias", b) "Buenas tardes", c)
"Buenas noches".
10. Examinar el valor de una variable real llamada TEMP y visualizar uno de los
siguientes mensajes: a) "Hielo", si el valor de TEMP es menor que 0, b) "Agua", si
el valor de TEMP se encuentra entre 0 y 100, c) "Vapor", si el valor de TEMP es
mayor que 100.
11. Hallar la solución de una ecuación de la forma: ax + b = 0.
12. Calcular e imprimir el área de un círculo, rectángulo o triángulo. Utilice una
escalera si-sino-si.
13. Leer los tres lados de una figura y determinar si es un triángulo. En caso afirmativo,
calcular e imprimir el área según sus lados.
14. Leer por teclado tres números diferentes y determinar cuál es el número mayor.
15. El costo de las llamadas internacionales depende de la zona geográfica en la que se
encuentre el país destino, y del número de minutos hablados. En la siguiente tabla se
presenta el costo por minuto en cada zona, a la cual se le ha asociado un código o
clave.
____________________________________________________
Estructura Iterativa
En los algoritmos es muy común encontrar operaciones que se deben ejecutar un número
repetido de veces. Aunque las instrucciones son las mismas, los datos sobre los que se
opera varían. El conjunto de instrucciones que se ejecuta reiteradamente se llama ciclo o
bucle.
Todo ciclo debe terminar de ejecutarse luego de un número finito de veces, por lo que en
cada iteración se requiere evaluar las condiciones necesarias para decidir si debe seguir
ejecutándose o debe detenerse. En todo ciclo, siempre debe existir una condición de parada
o fin de ciclo.
Escriba un programa (seudocódigo) para leer la estatura de los N jugadores del Deportes
Tolima y determinar e imprimir cuál es la estatura promedio del equipo.
Algoritmo Promedio
Var
n, conte : Entero
Inicio
sume = 0
leer(n)
conte = 1
leer(estat)
conte = conte + 1
prome = sume / n
Fin
_________________________________________________