Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Resolución de Problemas y
Descripción de Algoritmos
Elementos de Programación I
22
Elementos de Programación I
TT 2.1. Problemas y
EE
M
Algoritmos
M
AA ¿Qué se quiere hacer?
22
Elementos de Programación I
Problemas y Algoritmos
Ordenador:
- Operaciones simples (suma y comparación).
- Gran velocidad de ejecución de estas.
Elementos de Programación I 4
Problemas y Algoritmos
Supongamos que tenemos un robot que funciona como criado del hogar y queremos enseñarle a preparar
un café instantáneo. El algoritmo podría ser el siguiente:
Sin embargo, nuestro robot puede no ser capaz de interpretar una instrucción como Hervir agua y es
posible que tengamos que explicarle como hacerlo:
(1) Hervir agua
(1.1) Llenar un cazo con agua
(1.2) Ponerlo en la hornilla
(1.3) Encender el fuego
(1.4) Esperar hasta que hierva
(1.5) Apagar el fuego
Elementos de Programación I 5
Problemas y Algoritmos
• Procesador. Entidad capaz de entender un
enunciado y ejecutar el trabajo descrito.
• Entorno . Conjunto de condiciones necesarias para la
ejecución del trabajo.
• Acción o Primitiva . Cada etapa del enunciado.
• Secuencialidad. Cada acción se ejecuta cuando la
anterior ha terminado completamente.
• Paralelismo. Existen algoritmos en los cuales
algunas (o todas) las primitivas se pueden ejecutar a
la vez. Se dice entonces que se trata de un algoritmo
paralelo.
Elementos de Programación I 6
Problemas y Algoritmos
• Dado un procesador bien definido y un trabajo a
ejecutar por este procesador, un algoritmo es el
enunciado de una secuencia de acciones primitivas
que realizan ese trabajo.
Elementos de Programación I 7
Problemas y Algoritmos
• Ejemplo: Producto de 2 números naturales X e Y.
• 1) Mediante un ábaco.
Elementos de Programación I 8
Problemas y Algoritmos
a) Desplazar X bolas rojas a la izquierda.
b) Desplazar Y bolas azules a la izquierda.
mientras haya bolas azules a la izquierda
c) Desplazar X bolas blancas a la izquierda.
d) Desplazar 1 bola azul a la derecha.
fin_mientras
e) Contar las bolas blancas a la izquierda.
f) Parar
Elementos de Programación I 9
Problemas y Algoritmos
• 2) Mediante hojas de papel.
Elementos de Programación I 10
Problemas y Algoritmos
a) Escribir X sobre la hoja 1.
b) Escribir Y sobre la hoja 2.
c) Escribir 0 sobre la hoja 3.
repetir
d) Sumar los valores de las hojas 1 y 3 y escribir el
resultado en la hoja 3, perdiéndose el valor anterior.
e) Restar 1 al valor escrito en la hoja 2 y escribir el
resultado en la misma hoja, perdiéndose el anterior.
hasta que el valor de la hoja 2 sea 0.
f) Leer el valor escrito en la hoja 3.
g) Parar.
Elementos de Programación I 11
Problemas y Algoritmos
• Estructura general de un algoritmo
ALGORITMO
Elementos de Programación I 12
Problemas y Algoritmos
• Acciones de Entrada: Recogen los datos para el trabajo.
• Acciones de Proceso: Ejecutan los cálculos.
• Acciones de Salida: Ofrecen los resultados.
• Datos: - De entrada.
- De salida.
- Internos (resultados intermedios)
Elementos de Programación I 13
Problemas y Algoritmos
Resolución de problemas:
Elementos de Programación I 14
TT
EE 2.2. Elementos
M
M Metodológicos.
AA ¿Cómo hay que hacerlo?
22
Elementos de Programación I
Elementos Metodológicos
2.2.1. La Crisis del Software.
• Problemas al prescindir de metodología:
– Rigidez e inflexibilidad de los programas (TRUCOS).
– Pérdida excesiva de tiempo en corrección de errores
(PARCHES).
– Documentación deficiente e insuficiente, incluso nula.
– Imposibilidad de reutilizar el programa o fragmentos
suyos en proyectos futuros.
Elementos de Programación I 16
Elementos Metodológicos
Pruebas
15%
Codificación
7%
Diseño
5%
Requerimientos
3%
Mantenimiento
67% Especificación
3%
Elementos Metodológicos
Problema: Solución:
Programar es un “ARTE”. METODOLOGIAS.
Crisis del Software Ingeniería del Software
Programador Ingeniero Software
Elementos de Programación I 18
Elementos Metodológicos
2.2.2. Objetivos Básicos.
• Exactitud:
• Corrección o Fiabilidad: Ausencia de errores. Verificación
• Solidez o robustez:
• Legibilidad: Fácil de entender.
- Documentación
- Comentarios.
- Sangrado.
- Nombres significativos de las variables
Elementos de Programación I 19
Elementos Metodológicos
• Flexibilidad: Fácil modificación.
• Transportabilidad: Independencia de la máquina.
• Reusabilidad: Posibilidad de reutilización.
• Eficiencia: Rápidez y utilización de pocos recursos.
• Sencillez: Fácil de usar (“friendly”).
Elementos de Programación I 20
Elementos Metodológicos
2.2.3. Ciclo de vida clásico del Software.
DEFINICION
DESARROLLO
Fallos de
definición MANTENIMIENTO
Errores
Modificaciones y adaptaciones
Elementos de Programación I 21
Elementos Metodológicos
2.2.4. Metodología de Diseño.
• Proceso de diseño de algoritmos:
– Resolución
• ANALISIS: Descubrir la estructura del problema.
• SINTESIS: Creación y construcción de una solución.
– Implementación
• REPRESENTACION de la solución.
• REVISION de los resultados.
Elementos de Programación I 22
Elementos Metodológicos
• Dos estrategias de diseño muy comunes en
programación:
Elementos de Programación I 23
Elementos Metodológicos
• Diseño por analogía:
Utilizar una solución similar a la de un problema parecido.
– Fases:
1. Estudio del problema.
2. Búsqueda de problema similar ya resuelto.
3. Identificación de diferencias.
4. Cambios en la solución.
– Ventajas: Técnica rápida y sencilla.
– Inconvenientes: Riesgo de que los problemas no sean tan
parecidos.
Elementos de Programación I 24
Elementos Metodológicos
• Diseño descendente.
"Refinamientos sucesivos" o "programación modular".
“Divide y vencerás”.
– Fases:
1. Estudio del problema.
2. Descomposición en subproblemas más sencillos y lo más
independientes posible.
3. Repetir el paso 2 para cada subproblema hasta que la solución
de los mismos sea trivial.
4. Implementar las soluciones.
5. Reconstruir la solución global desandando el camino.
Elementos de Programación I 25
Elementos Metodológicos
– Características:
• Diseño de lo general (abstracto) a lo particular.
• Las decisiones complejas se posponen.
• Estructura jerárquica de niveles. En cada nivel se encuentra el
problema (o solución) completo.
• En el nivel superior se encuentra la definición del problema y
el nivel inferior la solución completa.
– Ventajas:
• Legibilidad
• Reusabilidad.
• Modificabilidad.
Elementos de Programación I 26
Nivel Abstracto (descripción funcional del problema)
Nivel 0
Nivel 1
Nivel 2
Nivel 3
Teclas Pulsadas
Módulos
Nivel 0
TETRIS
Nivel 1
Nivel 2
selccionar_ dibujar_ borrar_ bajar_
nivel marco linea lineas
Introducción a los
Lenguajes de Programación
Recapitulación de Conceptos
Algoritmo ≡ Proceso de Cómputo
Elementos de Programación I 30
Fortran I Flow-Matic
Algol 58 Fortran II C O M T R A N L I S P
C o b o l
Algol 60
Fortran IV A P L
C P L
Simula I B A S I C
P L / I
Algol-W IS WIN
Simula-67
Algol-68
B C L P
B
P a s c a l C
Pascal S c h e m e Prolog
Concurrente
M e s a Fortran 77
C S P D P M L
Flavors H o p e
O b e r o n Modula-3 Eiffel S t a n d a r d - M L
Clean
Haskell
D e l p h i Java
Elementos de Programación I
Fortran I Flow-Matic
Algol 60
Fortran IV A P L
C P L
Simula I B A S I C
PL/I
Algol-W ISWIN
Simula-67
Algol-68
B C L P
B
Pascal C
Pascal S c h e m e Prolog
Concurrente
M e s a Fortran 77
CSP D P M L
Flavors H o p e
O b j e c t - P a s c al C + + New Flavors
M i r a n d a
O b e r o n Modula-3 Eiffel S t a n d a r d - M L
Clean
Haskell
D e l p h i Java
Elementos de Programación I
Historia de los Lenguajes de
Programación
Antecedentes Históricos (30s-40s)
• Cálculo de Programas de Zuse (Plankalkül)
• Máquina de Turing
• Lambda-Cálculo de Church
Elementos de Programación I 33
• Se considerarán dos:
– Finalidad del lenguaje
– Características del lenguaje
Elementos de Programación I 35
Elementos de Programación I 36
Clasificación de los Lenguajes
de Programación
Clasificación de los lenguajes de
programación según sus características
Paradigmas de Programación
Elementos de Programación I 37
Paradigmas de Programación
• Un paradigma de programación es un
modelo que engloba a ciertos lenguajes que
comparten:
– Elementos estructurales:
¿con qué se confeccionan los programas?
– Elementos metodológicos:
¿cómo se confecciona un programa?
Elementos de Programación I 38
Paradigmas de Programación
– Elementos estructurales:
• componentes a partir de los cuales se construyen los programas
funciones à programación funcional
hechos y reglas à programación lógica
subprogramas à programación imperativa
objetos à programación orientada a objetos
– b) Elementos metodológicos:
• normas para la construcción de un programa
Diseño O.O. à P.O.O.
Refinamiento sucesivo à P. imperativa
Análisis de relaciones à P. lógica
Elementos de Programación I 39
Paradigmas de Programación
Orientado a Objetos
Funcional
Imperativo Declarativo
Lógico
Programación Imperativa
• Es la más antigua máquina de Von
Neumann
• Un programa es una secuencia de acciones
que se realizan en orden.
• Existen herramientas para modificar el
orden de ejecución de las acciones.
Elementos de Programación I 41
Paradigmas de Programación
• Diagramas de Flujo:
Flujo
• Ejemplo:
Inicio s=s+1
s=0 SI
c=1 c == n+1 Fin
NO
Elementos de Programación I 43
Fortran I Flow-Matic
Algol 58 Fortran II C O M T R A N LISP
C o b o l
Algol 60
Fortran IV A P L
CPL
Simula I BASIC
PL/I
Algol-W ISWIN
Simula-67
Algol-68
B C L P
B
Pascal C
Pascal S c h e m e Prolog
Concurrente
Mesa Fortran 77
CSP D P M L
Flavors H o p e
A D A Modula-2 Smalltalk Objective-C
Clascal Fortran 8x C o m m o n - L I S P
O b j e c t - P as c a l C + + New Flavors
Miranda
Oberon Modula-3 Eiffel Standard-ML
Clean
Haskell
Delphi Java Elementos de Programación I
Paradigmas de Programación
Programación Declarativa
• Programación Funcional: definición de una
serie de funciones.
• Programación Lógica: definición de hechos
y relaciones lógicas entre éstos.
• No se indica el orden en el que se computa
una función o se deriva un nuevo hecho.
Elementos de Programación I 45
Fortran I Flow-Matic
Algol 58 Fortran II C O M T R A N LISP
C o b o l
Algol 60
Fortran IV A P L
CPL
Simula I BASIC
PL/I
Algol-W ISWIN
Simula-67
Algol-68
B C L P
B
Pascal C
Pascal S c h e m e Prolog
Concurrente
Mesa Fortran 77
CSP D P M L
Flavors H o p e
A D A Modula-2 Smalltalk Objective-C
Clascal Fortran 8x C o m m o n - L I S P
O b j e c t - P a s c al C + + New Flavors
Miranda
Oberon Modula-3 Eiffel Standard-ML
Clean
Haskell
Delphi Java Elementos de Programación I
Paradigmas de Programación
Conserje
Alumno
Alumno
Profesor
Elementos de Programación I 47
Paradigmas de Programación
Elementos de Programación I 48
Fortran I Flow-Matic
Algol 58 Fortran II C O M T R A N LISP
C o b o l
Algol 60
Fortran IV A P L
CPL
Simula I BASIC
PL/I
Algol-W ISWIN
Simula-67
Algol-68
B C L P
B
Pascal C
Pascal S c h e m e Prolog
Concurrente
Mesa Fortran 77
CSP D P M L
Flavors H o p e
A D A Modula-2 Smalltalk Objective-C
Clascal Fortran 8x C o m m o n - L I S P
Object-Pascal C + + New Flavors
Miranda
Oberon Modula-3 Eiffel Standard-ML
Clean
Haskell
Delphi Java Elementos de Programación I
Reconocimiento de Lenguajes
Algoritmo ≡ secuencia de acciones finita,
no ambigua y que termina.
Lenguaje de Programación ≡ notación para
describir algoritmos
Elementos de Programación I 50
Reconocimiento de Lenguajes
Elementos de Programación I 51
Reconocimiento de Lenguajes
Elementos de Programación I 52
Reconocimiento de Lenguajes
• Ejemplo: a + (a*a)
E
1
Derivación o parse:
E + E
4 3 1-4-3-2-4-4
a ( E )
2 También es posible
Árbol Sintáctico
E + E
1-3-2-4-4-4
4 4
a a
Elementos de Programación I 53
Reconocimiento de Lenguajes
• Ejercicio propuesto:
a*((a+a)*a)
Elementos de Programación I 54
Reconocimiento de Lenguajes
Elementos de Programación I 55
Reconocimiento de Lenguajes
Elementos de Programación I 56
Reconocimiento de Lenguajes
Elementos de Programación I 57
Reconocimiento de Lenguajes
• Ejemplo:
<letra> a b c z
<dígito>
<ident> letra
0 1 9 letra
dígito
Elementos de Programación I 58
Reconocimiento de Lenguajes
• Otros ejemplos:
B B
A ::= {B} A ::= [B]
B D
A ::= (B | C) (D | E)
C E
Elementos de Programación I 59
Reconocimiento de Lenguajes
Lenguaje de
Alto Nivel
Traductor
Lenguaje
Máquina
Elementos de Programación I 60
Reconocimiento de Lenguajes
• El funcionamiento de un compilador se
divide en dos fases:
– Análisis
– Síntesis Programa
objeto
Análisis Síntesis
Código fuente
Elementos de Programación I 61
Reconocimiento de Lenguajes
Elementos de Programación I 63
Reconocimiento de Lenguajes
Elementos de Programación I 64
Reconocimiento de Lenguajes
Elementos de Programación I 65
Reconocimiento de Lenguajes
Elementos de Programación I 66
Reconocimiento de Lenguajes
Elementos de Programación I 67
Reconocimiento de Lenguajes
Bibliotecas
Tabla de Gestión de del sistema
símbolos tablas Elementos de Programación I 68
Reconocimiento de Lenguajes
Elementos de Programación I 69
Reconocimiento de Lenguajes
Elementos de Programación I 70
Reconocimiento de Lenguajes
Elementos de Programación I 71
Introducción al
Pseudolenguaje
• Se empleará un enfoque imperativo.
• Notación algorítmica:
– Palabras clave sintaxis fija
– Lenguaje natural sintaxis libre
– Sangrado o indentación
– Empleo de comentarios
• Ventajas principales: Flexibilidad y
Legibilidad
Elementos de Programación I 72
Introducción al
Pseudolenguaje
• Estructura general:
Algoritmo Nombre
Declaraciones
Inicio
Acciones
Fin
Elementos de Programación I 73
Introducción al
Pseudolenguaje
• Ejemplo:
Algoritmo HolaMundo
Inicio
Escribir (‘Hola Mundo’)
Fin
Elementos de Programación I 74