Trasparencias

Anuncio
TEMA 2
Resolución de Problemas y
Descripción de Algoritmos
Elementos de Programación I
Contenido del Tema
TT
EE
M
M
A
A
2.1. Problemas y Algoritmos
¿Qué se quiere hacer?
2.2. Elementos Metodológicos. ¿Cómo hay que hacerlo?
2.3. Introducción a Lenguajes de Programación
2.4. Paradigmas de Programación
2.5. Reconocimiento de Lenguajes
2.6. Introducción al Pseudolenguaje
22
Elementos de Programación I
TT
EE
M
M
A
A
2.1. Problemas y
Algoritmos
¿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.
Tarea Realizada por un ordenador
Descripción en términos de esas operaciones ?
Algoritmo
Mohammed al-Khowârizmî
Primitivas, Procesador, Entorno
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:
(1) Hervir agua
(2) Poner café en una taza
(3) Echar el agua en la taza
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.
• Hay que considerar 3 aspectos:
- Primitivas de las que partimos.
- Lenguaje simbólico a utilizar.
- Representación de los datos.
Elementos de Programación I
7
Problemas y Algoritmos
• Ejemplo: Producto de 2 números naturales X e Y.
•
1) Mediante un ábaco.
- Primitiva: saber contar.
- Abaco de 3 filas de bolas de distinto color.
- Representamos un dato con bolas a la izquierda.
- Inicialmente a la izquierda no hay bolas.
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.
- Primitiva: saber sumar y restar.
- Representación de los datos mediante cifras.
- Proceso sobre 3 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
datos de entrada
resultados
Proceso
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)
• Interfaz: Acciones de Entrada + Acciones de Salida +
Datos de Entrada + Datos de Salida
Elementos de Programación I
13
Problemas y Algoritmos
Resolución de problemas:
1. Análisis del problema.
2. Diseño o desarrollo del algoritmo.
3. Resolución del algoritmo en
computadora.
la
Elementos de Programación I
14
TT
EE
M
M
A
A
2.2. Elementos
Metodológicos.
¿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%
Mantenimiento
67%
Requerimientos
3%
Especificación
3%
Coste relativo de las etapas del desarrollo software
Elementos de Programación I
17
Elementos Metodológicos
Problema:
Programar es un “ARTE”.
Crisis del Software
Programador
Solución:
METODOLOGIAS.
Ingeniería del Software
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:
– Resolución por analogía.
– Partición. "Divide y vencerás".
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
Nivel Particular (código en L. P.)
Score TETRIS Level 2
3455 Next
Teclas Pulsadas
Módulos
Nivel 0
TETRIS
Nivel 1
iniciar_partida
generar_figura
bajar_figura
chequear_lineas
terminar_partida
Nivel 2
selccionar_
nivel
dibujar_
marco
borrar_
linea
generar_
NEXT
borrar_
figura
pintar_
figura
leer_
tecla
bajar_
lineas
Introducción a los
Lenguajes de Programación
Recapitulación de Conceptos
Algoritmo ? Proceso de Cómputo
Programa ? Descripción de un Algoritmo
Lenguaje de Programación ? ?Notación para
confeccionar Programas
Elementos de Programación I
30
Fortran I
A lgol 58
F l o w - M atic
Fortran II
C O M T R A N
L I S P
C obol
A lgol 60
Fortran IV
A P L
C P L
S im u l a I
B A S I C
PL/I
A lgol-W
IS W IN
S im u l a - 6 7
A lgol-68
B C L P
B
Pascal
C
Pascal
Concurrente
S c h e m e
M esa
C S P
Prolog
Fortran 77
D P
M L
F lavors
A D A
M odula-2
Smalltalk
Objective-C
C lascal
Fortran 8x
Object-Pascal
H o p e
C + +
C o m m o n - L I S P
New Flavors
M iran d a
O b e r o n
M odula-3
Eiffel
Standard-M L
C lean
Haskell
D elphi
Java
Elementos de Programación I
Fortran I
A lgol 58
Flow-Matic
Fortran II
C O M T R A N
L I S P
C o b o l
A lgol 60
Fortran IV
A P L
C P L
S im u l a I
B A S I C
PL/I
Algol-W
ISW IN
S im u l a - 6 7
Algol-68
B C L P
B
Pascal
C
Pascal
Concurrente
S c h e m e
M esa
C S P
Prolog
Fortran 77
D P
M L
F lavors
A D A
Modula-2
Smalltalk
Objective-C
C lascal
Fortran 8x
Object-Pasca l
H o p e
C + +
C o m m o n - L I S P
New Flavors
M iranda
O b e r o n
Modula-3
Eiffel
Standard-M L
Clean
Haskell
D elphi
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
• Diagramas de Flujo de Von Neumann
• Lambda-Cálculo de Church
Elementos de Programación I
33
Historia de los Lenguajes de
Programación
•
•
•
•
•
•
•
FORTRAN
COBOL
LISP
ALGOL-60, -68
SIMULA-67
PASCAL
C
•
•
•
•
MODULA-2
C++
Delphi
Java
Elementos de Programación I
34
Clasificación de los Lenguajes
de Programación
• Es posible clasificar los lenguajes de
programación siguiendo diferentes criterios.
• Se considerarán dos:
– Finalidad del lenguaje
– Características del lenguaje
Elementos de Programación I
35
Clasificación de los Lenguajes
de Programación
• Según la finalidad, existen lenguajes:
–
–
–
–
–
–
Científicos: ALGOL, FORTRAN, ...
Ingenieriles: ADA, DYNAMO, ...
de Gestión: COBOL, dBASE, ...
de Inteligencia Artificial: LISP, PROLOG, ...
Multipropósito: PASCAL, MODULA-2, C, ...
...
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
• Consideramos los siguientes paradigmas:
Orientado a Objetos
Funcional
Imperativo Declarativo
Lógico
• Los paradigmas no son disjuntos.
Elementos de Programación I
39
Paradigmas de Programación
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
40
Paradigmas de Programación
• Diagramas de Flujo:
Comienzo y terminacion
del algoritmo
Operación de
Entrada/Salida
Flujo
Acción primitiva
Bifurcación
Elementos de Programación I
41
Paradigmas de Programación
• Ejemplo:
Inicio
s := s + 1
leer (n)
c := c + 1
s := 0
c := 1
SI
c = n+1
Fin
NO
Elementos de Programación I
42
Fortran I
Algol 58
F l o w - M atic
Fortran II
C O M T R A N
L I S P
Cobol
Algol 60
Fortran IV
A P L
C P L
S im u l a I
BASIC
P L /I
Algol-W
ISW IN
S im u l a - 6 7
Algol-68
B C L P
B
Pascal
C
Pascal
Concurrente
S c h e m e
M esa
C S P
Prolog
Fortran 77
D P
M L
Flavors
A D A
Modula-2
S m a lltalk
Objective-C
C lascal
Fortran 8x
Object-Pascal
H o p e
C + +
C o m m o n - L I S P
N e w F lavors
M iranda
Oberon
M odula-3
Eiffel
Standard-M L
Clean
Haskell
D elphi
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
44
Fortran I
A lgol 58
Flow-Matic
Fortran II
C O M T R A N
L I S P
C o b o l
A lgol 60
Fortran IV
A P L
C P L
S im u l a I
BASIC
PL/I
Algol-W
ISW IN
S im u l a - 6 7
Algol-68
B C L P
B
Pascal
C
Pascal
Concurrente
S c h e m e
M esa
C S P
Prolog
Fortran 77
D P
M L
F lavors
A D A
Modula-2
Smalltalk
Objective-C
C lascal
Fortran 8x
Object-Pasca l
H o p e
C + +
C o m m o n - L I S P
New Flavors
M iranda
Oberon
Modula-3
Eiffel
Standard-ML
Clean
Haskell
D elphi
Java
Elementos de Programación I
Paradigmas de Programación
Programación Orientada a Objetos
• Un programa consiste en una colección de
objetos que intercambian mensajes.
Alumno
Conserje
Alumno
Profesor
Elementos de Programación I
46
Paradigmas de Programación
Programación Orientada a Objetos
• Cada objeto es una entidad que agrupa una
cierta información (estado) y un conjunto de
mecanismos para manipularla (métodos).
Coche
precio
matrícula
color
Pintar
Vender
Elementos de Programación I
47
Fortran I
A lgol 58
Flow-Matic
Fortran II
C O M T R A N
L I S P
Cobol
A lgol 60
Fortran IV
A P L
C P L
S im u l a I
BASIC
PL/I
Algol-W
ISW IN
S im u l a - 6 7
Algol-68
B C L P
B
Pascal
C
Pascal
Concurrente
S c h e m e
M esa
C S P
Prolog
Fortran 77
D P
M L
F lavors
A D A
Modula-2
Smalltalk
Objective-C
C lascal
Fortran 8x
Obje ct-Pascal
H o p e
C + +
C o m m o n - L I S P
New Flavors
M iranda
Oberon
Modula-3
Eiffel
Standard-ML
Clean
Haskell
D elphi
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
No han de ser ambiguos.
Su sintaxis ha de ser estricta.
Elementos de Programación I
49
Reconocimiento de Lenguajes
• Para definir la sintaxis de un lenguaje se usa
una gramática.
• Una gramática es una tupla G = (N, T, A, R)
–
–
–
–
N: símbolos No terminales
T: símbolos Terminales
A ? N: Axioma
R: Reglas de derivación
Elementos de Programación I
50
Reconocimiento de Lenguajes
• Notación para describir las reglas: BNF,
diagramas de Conway.
• Ejemplo: G = (N, T, A, R)
– N = {E}
– T = {a}
– A ???
–R:
E ::= E+E
E ::= E*E
E ::= (E)
E ::= a
Elementos de Programación I
51
Reconocimiento de Lenguajes
• Ejemplo: a + (a*a)
E
1
Derivación o parse:
E
+
E
4
1-4-3-2-4-4
3
a
(
E
)
2
Árbol Sintáctico
E
También es posible
+
E
4
1-3-2-4-4-4
4
a
a
Elementos de Programación I
52
Reconocimiento de Lenguajes
• Ejercicio propuesto:
a*((a+a)*a)
Hallar una derivación
y el árbol sintáctico
Elementos de Programación I
53
Reconocimiento de Lenguajes
• La notación BNF utiliza los siguientes
símbolos:
–
–
–
–
–
?
|
{}
[]
()
cadena vacía
disyunción
repetición
opción
agrupación
E ::= ?
E ::= a | b
E ::= {B}
E ::= [B]
E ::= (a|b) (c|d)
Elementos de Programación I
54
Reconocimiento de Lenguajes
• Los paréntesis angulares (? ?y ? ) se usan
para diferenciar los símbolos no terminales
de los téminales.
• Ejemplo:
<letra> ::= a | b | c | . . . | z
<dígito> ::= 1 | 2 | 3 | . . . | 9
<ident> ::= <letra>{<letra>|<dígito>}
Elementos de Programación I
55
Reconocimiento de Lenguajes
• Los diagramas de Conway son una
representación gráfica de las reglas
gramaticales.
– Símbolo terminal
a
– Símbolo no terminal
A
– Regla: conjunto de símbolos unidos por flechas.
Cada camino de izqd. a dcha. es una derivación.
Elementos de Programación I
56
Reconocimiento de Lenguajes
• Ejemplo:
<letra>
a
b
c
<dígito>
0
z
<ident>
1
9
letra
letra
dígito
Elementos de Programación I
57
Reconocimiento de Lenguajes
• Otros ejemplos:
B
B
A ::= [B?
A ::= {B}
B
D
C
E
A ::= (B | C) (D | E)
Elementos de Programación I
58
Reconocimiento de Lenguajes
Lenguaje de
Alto Nivel
Traductor
Lenguaje
Máquina
Elementos de Programación I
59
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
60
Reconocimiento de Lenguajes
• La fase de análisis se divide en tres partes:
– Análisis Lexicográfico
– Análisis Sintáctico
– Análisis Semántico
Gestión de
tablas
Tabla de
símbolos
Léxico Sintáctico Semántico
Código fuente
errores
Elementos de Programación I
61
Reconocimiento de Lenguajes
• Léxico: palabras válidas del lenguaje
• token: referencia a la categoría a la que
pertenece una palabra válida.
• Funciones del análisis léxicográfico:
– Eliminar comentarios y formato
– Detectar errores léxicos (palabras no válidas)
– Generar lista de tokens
Elementos de Programación I
62
Reconocimiento de Lenguajes
• Para comprobar la validez de una palabra se
utiliza una gramática.
• Ejemplo:
alfa
:= beta + gamma * 23
id asignación id
más
id
por número
Elementos de Programación I
63
Reconocimiento de Lenguajes
• Funciones del análisis sintáctico:
– Comprobar validez secuencia de tokens.
– Recopilar información en la tabla de símbolos.
• Se emplea una segunda gramática en la que
los símbolos terminales son tokens.
Elementos de Programación I
64
Reconocimiento de Lenguajes
• Árbol sintáctico de la frase anterior:
? sentencia?
Identificador asignación ? expresión?
(id1)
? expresión?
Identificador
(id2)
más
? expresión?
? expresión?
Identificador
(id3)
por
? expresión?
número
(23)
Elementos de Programación I
65
Reconocimiento de Lenguajes
• Funciones del análisis semántico:
– Analizar significado de la frase.
• Comprobaciones realizadas:
–Estáticas:
•Tipos
•Unicidad
•Flujo de Control
–Dinámicas:
•Ficheros
•Errores matemáticos
•Rangos
Elementos de Programación I
66
Reconocimiento de Lenguajes
• La fase de síntesis se divide en tres partes:
– Generación de código intermedio
– Optimización de código
– Generación de código objeto.
Gen. Cód.
Opt. Cód.
Int.
Tabla de
símbolos
Gestión de
tablas
Programa
objeto
Gen. Cód.
Obj.
Bibliotecas
del sistema
Elementos de Programación I
67
Reconocimiento de Lenguajes
• Código intermedio: representación del
programa independiente de la máquina.
• Ejemplo:
temp1 := 23
temp2 := id3 * temp1
temp3 := id2 + temp2
id1
:= temp3
Elementos de Programación I
68
Reconocimiento de Lenguajes
• Optimización: buscar código más compacto
y eficiente.
• Ejemplo:
temp1 := id3 * 23
id1 := id2 + temp1
Elementos de Programación I
69
Reconocimiento de Lenguajes
• Paso final: generación del código objeto.
• Ejemplo:
MOV id3, R1
MUL 23, R1
MOV id2, R2
ADD R1, R2
MOV R1, id1
Elementos de Programación I
70
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
71
Introducción al
Pseudolenguaje
• Estructura general:
Algoritmo Nombre
Declaraciones
Inicio
Acciones
Fin
Elementos de Programación I
72
Introducción al
Pseudolenguaje
• Ejemplo:
Algoritmo HolaMundo
Inicio
Escribir (‘Hola Mundo’)
Fin
Elementos de Programación I
73
Descargar