Está en la página 1de 37

TEMA 2

Resolución de Problemas y
Descripción de Algoritmos
Elementos de Programación I

Contenido del Tema


2.1. Problemas y Algoritmos ¿Qué se quiere hacer?
TT
2.2. Elementos Metodológicos. ¿Cómo hay que hacerlo?
EE 2.3. Introducción a Lenguajes de Programación
M
M 2.4. Paradigmas de Programación
A 2.5. Reconocimiento de Lenguajes
A
2.6. Introducción al Pseudolenguaje

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.

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 Proceso resultados

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 la
computadora.

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%

Coste relativo de las etapas del desarrollo software


Elementos de Programación I 17

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:

– 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_ dibujar_ borrar_ bajar_
nivel marco linea lineas

generar_ borrar_ pintar_ leer_


NEXT figura figura tecla

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 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

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


Mira 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

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

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

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

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

• 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 • MODULA-2
• COBOL • C++
• LISP • Delphi
• ALGOL-60, -68 • Java
• SIMULA-67 • C#
• PASCAL
• C
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
– 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

• Consideramos los siguientes paradigmas:

Orientado a Objetos
Funcional
Imperativo Declarativo
Lógico

• Los paradigmas no son disjuntos.


Elementos de Programación I 40
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 41

Paradigmas de Programación

• Diagramas de Flujo:

Comienzo y terminacion Operación de


del algoritmo Entrada/Salida

Flujo

Acción primitiva Bifurcación


Elementos de Programación I 42
Paradigmas de Programación

• Ejemplo:

Inicio s=s+1

leer (n) c=c+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

Programación Orientada a Objetos


• Un programa consiste en una colección de
objetos que intercambian mensajes.

Conserje
Alumno

Alumno

Profesor
Elementos de Programación I 47

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 Pintar
matrícula
color Vender

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

No han de ser ambiguos.


Su sintaxis ha de ser estricta.

Elementos de Programación I 50
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 51

Reconocimiento de Lenguajes

• Notación para describir las reglas: BNF,


diagramas de Conway.
• Ejemplo: G = (N, T, A, R)
– N = {E} –R:
– T = {a,*,+,(,)} E ::= E+E
E ::= E*E
–A=Ε
E ::= (E)
E ::= a

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)

Hallar una derivación


y el árbol sintáctico

Elementos de Programación I 54
Reconocimiento de Lenguajes

• La notación BNF utiliza los siguientes


símbolos:
– ε cadena vacía E ::= ε
– | disyunción E ::= a | b
– {} repetición E ::= {B}
– [] opción E ::= [B]
– () agrupación E ::= (a|b) (c|d)

Elementos de Programación I 55

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 56
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 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

• La fase de análisis se divide en tres partes:


– Análisis Lexicográfico
– Análisis Sintáctico Gestión de Tabla de
– Análisis Semántico tablas símbolos

Léxico Sintáctico Semántico

Código fuente errores


Elementos de Programación I 62
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 63

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 64
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 65

Reconocimiento de Lenguajes

• Árbol sintáctico de la frase anterior:


<sentencia>

Identificador asignación <expresión>


(id1)

<expresión> más <expresión>

Identificador <expresión> por <expresión>


(id2)
Identificador número
(id3) (23)

Elementos de Programación I 66
Reconocimiento de Lenguajes

• Funciones del análisis semántico:


– Analizar significado de la frase.
• Comprobaciones realizadas:
–Estáticas: –Dinámicas:
•Tipos •Ficheros
•Unicidad •Errores matemáticos
•Flujo de Control •Rangos

Elementos de Programación I 67

Reconocimiento de Lenguajes

• La fase de síntesis se divide en tres partes:


– Generación de código intermedio
– Optimización de código
Programa
– Generación de código objeto.
objeto

Gen. Cód. Gen. Cód.


Opt. Cód.
Int. Obj.

Bibliotecas
Tabla de Gestión de del sistema
símbolos tablas Elementos de Programación I 68
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 69

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 70
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 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

También podría gustarte