Tema 3. Algoritmos y programas -...
Transcript of Tema 3. Algoritmos y programas -...
Diego Gutiérrez
Tema 3. Algoritmos y programas
2Diego Gutiérrez
Qué son los computadores? Son las máquinas programables que se utilizan como herramientas para resolver de forma automática problemas de tratamiento de información.
De forma muy simplificada podemos decir que un computador consta de:• Memoria que permite almacenar programas (datos y acciones).• Unidad central de proceso (CPU) cuya función es ejecutar las
acciones descritas en un programa. • Un conjunto de dispositivos períféricos que permiten comunicar el
computador con el exterior (teclados, pantallas, impresoras, altavoces, plotters, digitalizadores o scanners, etc.) y potenciar las capacidades de almacenamiento de información
3Diego Gutiérrez
Sistema OperativoConjunto de programas que tienen por misión facilitar la utilización del computador
Acceso a los usuarios autorizadosEdición de ficheros de textoPuesta a punto y ejecución de programasSeguridad y protecciónFacturación y contabilidad de uso de recursosEtc.
Gestión óptima de la máquinaGestión de memoriaControl de dispositivos periféricosAcceso a ficherosAsignación de recursos y ordenación de tareasEtc.
4Diego Gutiérrez
Un entorno de programación es un programa cuya misión es facilitar el desarrollo de programas utilizando un determinado lenguaje como, por ejemplo, Ada, C, C++, Java, Módula-2 o Pascal.
Integra un conjunto de herramientas para facilitar:• La edición de programas fuente• La compilación de programas fuente• La depuración de programas• La ejecución y prueba de programas• La construcción de programas ejecutables y de bibliotecas
5Diego Gutiérrez
Cuestiones generales sobre el software:
El avance espectacular del hardware no ha ido acompañado por el software en cuanto a calidad y costeAumento de la demanda del software: cantidad, prestaciones, calidadLa capacidad de mantenimiento está amenazada por el mal diseño y el uso inadecuado de recursosLa parte principal del coste de una solución informática es el software
6Diego Gutiérrez
Al buscar una solución:
Construcción sistemática frente a artísticaConstrucción usando componentes: reusabilidad, libreríasUso de herramientas de alto nivel: que construyen programas.
7Diego Gutiérrez
EspecificaciónAnálisis
Diseño
Codificación
Pruebas
Mantenimiento
Mantenimiento:En general el software sufrirá cambios:
Errores detectadosAparición de nuevos requisitos:
Externos: periféricos, sistema operativoNuevas prestaciones…
8Diego Gutiérrez
1) Fase de resolución:
ANÁLISIS : comprender y definir el problema.
DISEÑO (algoritmo) : desarrollar una secuencia lógica de pasos para resolver el problema.
PRUEBA : seguir los pasos exactos de la solución general para ver si realmente solucionamos el problema.
Un programa de ordenador hace lo que le ordenas que haga,no lo que quieres que haga
.
9Diego Gutiérrez
2) Fase de implementación:
SOLUCIÓN ESPECÍFICA (programa) : traducir el algoritmo a un lenguaje de programación (código). Documentación!
PRUEBA: hacer que el computador siga las instrucciones. Comprobar los resultados y hacer las correcciones precisas hasta que las respuestas sean correctas.
MANTENIMIENTO: correcciones o actualizaciones al utilizar el programa.
10Diego Gutiérrez
Un problema puede tener ninguna, una, varias o infinitas soluciones
Validación: ¿estamos resolviendo el problema correcto?
Verificación: ¿estamos resolviendo el problema de la manera correcta?
11Diego Gutiérrez
Ejemplo: algoritmo de puesta en marchar de un coche (I)
1. Poner la llave.2. Asegurarse de que se está en punto muerto.3. Presionar el acelerador.4. Girar la llave hasta la posición de arranque.5. Si el motor arranca antes de seis segundos, dejar la llave en
posición de ignición.6. Si el motor no arranca antes de seis segundos, esperar seis
segundos y repetir los pasos del 3 al 6.7. Si el coche no arranca, llamar a la grúa.
12Diego Gutiérrez
Ejemplo: algoritmo de puesta en marcha de un coche (II)
1. Poner la llave.2. Asegurarse de que se está en punto muerto.3. Presionar el acelerador.4. Girar la llave hasta la posición de arranque.5. Si el motor arranca antes de seis segundos, dejar la llave en
posición de ignición.6. Si el motor no arranca antes de seis segundos, esperar diez
segundos y repetir los pasos del 3 al 6 (un máximo de cinco veces).7. Si el coche no arranca, llamar a la grúa.
¡NO HAY QUE DAR NADA POR SUPUESTO!Un programa de ordenador hace lo que le ordenas que haga,
no lo que quieres que haga
13Diego Gutiérrez
Lavar, aclarar, repetir
14Diego Gutiérrez
El comportamiento de un computador viene regido por un programa cuya ejecución permite la resolución del problema considerado.
A partir de un problema de tratamiento de información ¿cómo escribir el programa que, al ser ejecutado en un computador, lo resuelva?
15Diego Gutiérrez
El primer paso es la identificación de uno o más métodos que permitan resolver el problema en cuestión.
A continuación habrá que seleccionar uno de ellos atendiendo a consideraciones como su eficiencia o su sencillez.
16Diego Gutiérrez
El siguiente paso será la formalización por escrito, del método seleccionado, incluyendo una descripción de la información relevante asociada al problema y una descripción del modo en que debe ser tratada esa información para resolverlo: la descripción de una secuencia ordenada y finita de pasos, exenta de ambigüedades, cuya ejecución proporcione una solución al problema considerado.
El resultado de esta formalización recibe el nombre de algoritmo.
17Diego Gutiérrez
¿Cómo se va a la Puerta del Sol?
Idioma
Grado de detalle Recursos disponibles
… … … …
18Diego Gutiérrez
¿Cómo se va a la Puerta del Sol?
Madrid, España Tiahuanaco, Perú
19Diego Gutiérrez
Utilizando notación algorítmica, la definición de un algoritmo responde al siguiente esquema general:
algoritmo nombre [(lista_de_parámetros)] [devuelve nombreTipo]{ Especificación }Definición de elementos internos del algoritmo tales como constantes, tipos de
datos, variables, bibliotecas, procedimientos y funcionesprincipioDescripción de acciones
fin
20Diego Gutiérrez
Un algoritmo consta de:
1. Una descripción de la información asociada al problema.2. Una descripción del modo de tratamiento de esa información.
Se caracteriza por el nombre y la descripción de parámetros.
21Diego Gutiérrez
Especificación de un algoritmo:
Al definir un algoritmo debe incluirse una especificación que describa de forma clara y concisa el comportamiento del algoritmo, es decir, qué es lo que hace el algoritmo cuando es ejecutado y en qué condiciones:
1. Precondición: una descripción de las condiciones que deben satisfacer los datos de entrada al algoritmo.
2. Postcondición: una descripción de las condiciones que deben satisfacer los datos de salida o resultados del algoritmo.
22Diego Gutiérrez
23Diego Gutiérrez
El diseño interno del algoritmo, es decir, el cómo lo hace, tiene dos partes bien diferenciadas.
En la primera se definen los elementos auxiliares que el algoritmo va a utilizar. Estos elementos pueden ser datos constantes, tipos de datos, datos variables, bibliotecas, procedimientos o funciones (parte declarativa)
En la segunda se describen las acciones que deberán realizarse sobre los datos del algoritmo cuando éste sea invocado (parte ejecutiva)
24Diego Gutiérrez
Propiedades de los algoritmos:
Condiciones Necesarias:
Su corrección: debe proporcionar una solución correcta del problema planteado en su especificación (finitud, no ambigüedad…).
Su legibilidad: el documento que describe el algoritmo ha de ser fácil de entender no sólo por su autor, sino por otras personas que posean unos conocimientos suficientes de programación (por ejemplo, por otros programadores).
25Diego Gutiérrez
Propiedades de los algoritmos:
Propiedades deseables:
Su generalidad: no debe limitarse a resolver problemas muy específicos si con un esfuerzo suplementario asumible es capaz de resolver una más amplia gama de problemas.
Su reusabilidad: debe procurarse que cada algoritmo que se diseña en el contexto de un trabajo de programación pueda ser utilizado sin cambios o con mínimas modificaciones en otros trabajos.
26Diego Gutiérrez
Propiedades de los algoritmos:
Propiedades deseables:
Su eficiencia, es decir, los recursos que consume el algoritmo, especialmente su tiempo de ejecución y la cantidad de memoria que requiere, deben ser razonables para el tipo de problema que resuelve.
Su independencia del lenguaje de programación, del computador y del sistema operativo de éste. El algoritmo debe poder ser traducido con sencillez a diferentes lenguajes de programación para poder ser ejecutado en diferentes computadores que, eventualmente, pueden estar gestionados por sistemas operativos distintos.
27Diego Gutiérrez
ejemplo de algoritmo
Algoritmo saludar (pantalla);{ Este algoritmo muestra un mensaje de bienvenida }{ Pre: ---- }{ Post: en pantalla HOLA }{ Definición de los elementos internos usados }Principio
mostrarMensaje("HOLA colega")Fin
28Diego Gutiérrez
HOLA colegaAlgoritmo saludar (pantalla);{ Este algoritmo muestra un mensaje de bienvenida }{ Pre: ---- }{ Post: en pantalla HOLA }{ Definición de los elementos internos usados }Principio
mostrarMensaje("HOLA colega")Fin
ejemplo de algoritmo
29Diego Gutiérrez
HOLA colegaAlgoritmo saludar (pantalla);{ Este algoritmo muestra un mensaje de bienvenida }{ Pre: ---- }{ Post: en pantalla HOLA }{ Definición de los elementos internos usados }Principio
mostrarMensaje("HOLA colega")Fin
ejemplo de algoritmo
30Diego Gutiérrez
En un curso introductorio de programación es recomendable tomar una cierta distancia de cualquier lenguaje de programación concreto.
Para comprender y saber aplicar los conceptos básicos de la programación es preferible utilizar una notación de algoritmos o notación algorítmica que no se ciña estrictamente a ningún lenguaje de programación comercial y que además utilice unos términos y una sintaxis que sea próxima a nuestra lengua materna.
31Diego Gutiérrez
A partir de un algoritmo escrito en una determinada notación algorítmica se debe abordar su codificación, tarea consistente en reescribir el algoritmo utilizando un lenguaje de programación (Ada, C, C++, Java, Módula-2, Pascal, etc.)
El resultado de la codificación es un programa (escrito en un determinado lenguaje) que, al igual que un algoritmo, consta de una descripción de objetos informáticos (tipos de datos, datos constantes, datos variables, bibliotecas, procedimientos, funciones, etc.) y de una descripción de las acciones que debe ejecutar
Este será procesado (interpretado o compilado) en el sistema informático del que se dispone.
32Diego Gutiérrez
Transformación de un problema en un programa ejecutable por un ordenador
Problema Algoritmo Programa
Análisis /Diseño
Codificación
Lenguaje Natural Lenguaje Algorítmico / pseudocódigo
PASCAL, C, Ada, Basic, Fortran, COBOL, Java,
C++, Lisp, ...
33Diego Gutiérrez
Noción de algoritmo:
Acción: Es un acontecimiento producido por un actor (o ejecutante de una acción) que tiene lugar durante un periodo de tiempo finito y que tiene como consecuencia o resultado una nueva situación bien definida y previsible.
Estado: Es el conjunto de objetos (con sus circunstancias) disponibles en un instante determinado.
Algoritmo: Es la descripción de una sucesión finita de acciones que permite transformar el entorno del estado inicial dado en el final deseado.
34Diego Gutiérrez
Algoritmo para calcular el factorial de un número:
Iremos calculandofactorial de n =
1* 2 * ...*i * ... npara valores crecientes de i hasta n
i:=1;
factorial:=1;
Mientras Que i < n hacer
i:= i+1;
factorial:= factorial * i
FinMientrasQue;
Solución informalen lenguaje natural
Algoritmo enlenguaje algorítmico
35Diego Gutiérrez
Programa: Es un algoritmo escrito en términos que pueda interpretar (ejecutar) un computador. A él se llega tras codificar el algoritmo en algún lenguaje de programación.
i:=1;
factorial:=1;
Mientras Que i < n hacer
i:= i+1;
factorial:= factorial * i
FinMientrasQue;
i:=1; factorial:=1;
While i < n do
begin
i:= i+1;
factorial:= factorial * i
end;
i=1; factorial=1;
While (i < n) factorial*=++i;
36Diego Gutiérrez
Elementos de un lenguaje:SIMBOLOS
Palabras clave o reservadas = {IF, THEN, WHILE, …}Caracteres = {‘a’,..’z’,’A’..’Z’,’#’,’?’,……. }Dígitos = {0,..,9}Otros símbolos = {‘.’ , ’,’ , ‘;’ ,…}
SINTAXISConjunto de reglas sintácticas Notaciones para expresar las reglas:
• Backus-Naur• Grafo Sintáctico
SEMANTICASignificado de los programas, cómo se comportan al ser ejecutados
37Diego Gutiérrez
Símbolos. Un algoritmo o programa consta de una secuencia de símbolos que pueden pertenecer a las siguientes categorías:
• Palabras claves o palabras reservadas por la propia notación algorítmica (o por el lenguaje de progamación): algoritmo, principio, fin, si, entonces, si_no, finSi, tabla, registro, fichero, mod, div, cierto, falso, etc.• Identificadores: nombres que se asocian a objetos informáticos que el programador define en los algoritmos o programas que escribe: i, cuenta, nombre, n, saludar, etc.• Operadores: denotados por símbolos constituidos por uno o dos caracteres: + - * / > ≥ = ≠ < ≤ ¬ AND OR etc.• Separadores: denotados por símbolos constituidos por un único carácter, como los siguientes: , ; . : ( ) [ ] etc.
38Diego Gutiérrez
Sintaxis: Conjunto de reglas que indican cómo encadenar símbolos para formar “frases” correctas.
Ejemplos identificadores válidos: P3Q numero_PIEjemplo identificadores no válidos: 3PQ _numero
<identificador>::= <letra> {<letra> | <digito> | ’_’}
alternativa0 o más veces
letra
letra
digito
_
identificador
39Diego Gutiérrez
Sintaxis:
digitoentero sin signo
digitoenterosin signo
enterosin signo. E
+
-
numerosinsigno
40Diego Gutiérrez
Sintaxis:
expresiónbooleana sentencia
sentencia
THEN
ELSE
IFsentenciaIF
<Sentencia IF> ::= IF <expresion booleana> THEN <bloque>
[ELSE <bloque>]
0 o 1 vez
41Diego Gutiérrez
Semántica: determina el significado que tiene cada “frase” para el computador y, por lo tanto, para el programador.
La semántica de la instrucción condicional cuya sintaxis se acaba de presentar, determina que debe evaluarse, en primer lugar, <expresión>. Si el resultado es igual al valor lógico cierto entonces se ejecutará la <intrucción> descrita tras el símbolo entonces, mientras que en el caso contrario, es decir, cuando el resultado de evaluar <expresión> es falso, se ejecutará la <intrucción> descrita tras el símbolo si_no.Cuando en una instrucción condicional ha sido omitida la cláusula si_no y <expresión> es evaluada a falso, entonces no se ejecuta ninguna <instrucción>.
42Diego Gutiérrez
Estilo de Programación
Programación imperativaLenguajes orientados a instruccionesProgramas = Receta
Se encadenan de forma explicita las instrucciones.
Describe la programación en términos del estado del programa y sentencias que cambian dicho estado. Los programas imperativos son un conjunto de instrucciones que le indican al computador cómo realizar una tarea. Influenciado por la arquitectura de la máquina
Prácticamente todo el hardware de los computadores está diseñado para ejecutar código de máquina, que es nativo al computador, escrito en una forma imperativa
43Diego Gutiérrez
Metodología de Programación
Programación EstructuradaUtilización de mecanismos de abstracción (funcional y de datos) como herramienta para dominar la complejidad.Utilización de una metodología de diseño descendente (abstracción funcional)Reducido número de estructuras de control:
Composición secuencialComposición condicionalComposición iterativa
Énfasis en los mecanismos de estructuración de datos. Se introduce la idea de tipo abstracto de dato: Separación de los aspectos ligados a la especificación de un tipo de los de la implementación.
Definición de métodos que garanticen la corrección de programas (verificación formal)Notación independiente del lenguaje de programación.
44Diego Gutiérrez
Metodología de Programación
Programas = Algoritmos + Estructuras de datos
Estructuras de datos = Abstracciones de la realidad que nos permiten representar el conjunto de situaciones esperables al resolver el problema.
Algoritmos = Esquemas de composición finita de instrucciones que permiten representar de forma no ambigua el flujo de control (Elorden en el que se ejecutarán las instrucciones)
45Diego Gutiérrez
Pensamiento humano.
Lenguaje natural (inglés, francés, alemán, etc.)
Lenguaje de alto nivel (Pascal, FORTRAN, COBOL, etc.)
Lenguaje de bajo nivel
Lenguaje ensamblador
Código Máquina (computadora)
46Diego Gutiérrez
Niveles de lenguajes de programacion:
Maquina
47Diego Gutiérrez
Niveles de lenguajes de programacion:Alto Nivel
Mas fáciles de programarIndependencia de la maquinaNecesidad de traductores compiladoresMenor coste de desarrolloMas fácilmente manteniblesDetección de erroresTransportablesSon un compromiso entre eficiencia y manejabilidad
Maquina
48Diego Gutiérrez
Niveles de lenguajes de programacion:Bajo Nivel
Programas específicos para un tipo de máquinaPueden permitir hacer cosas de forma más eficiente
Maquina
49Diego Gutiérrez
Lenguajes de programación:
FORTRAN (1956): FORmula TRANslator. Calculo científico.COBOL (1959). Ideal para gestión: Pocas estructuras de control, muchas capacidades de manejo de dato.ALGOL (1960): Primer intento de formalizar la resolución de problemas. Programas estructurados con tipos de datos.Lisp (1960): Sigue en uso. Estructura de datos simple (La lista). Tratamiento simbólico de la información. Su éxito se debe a que soporta más estrategias de descomposición modular que cualquier otro lenguaje.BASIC (1965): Beginners All Purpose Symbolic Language. Lenguaje interpretado, sin énfasis en tipos de datos.PASCAL (1971): Desciende de ALGOL. Paradigma de la programación estructurada.C (1972): Desarrollado por Dennis Ritchie de AT&T Bell Laboratories para ofrecer un lenguaje de alto nivel en el cual se pudiera programar UNIX.Lenguajes orientados a objetos (C++, Eiffel, C#,…): A la hora de organizar el software se focaliza en las abstracciones de datos en lugar de en la funcionalidad.JAVA: Lenguaje orientado a objeto, que se puede ejecutar en cualquier máquina Idea de máquina virtual.
50Diego Gutiérrez
El procesador “tractor”
MI A R MD A R
1 1 0 1 1 0 Avanza 1 m
1 0 1 1 0 1 Retrocede 1 m
1 1 0 0 0 0 Gira Derecha 90º
0 0 0 1 1 0 Gira Izquierda 90º
51Diego Gutiérrez
El procesador “tractor”
ProblemaEl tractor se encuentra en A, mirando al norte, y tengo que llevarlo
a B
52Diego Gutiérrez
El procesador “tractor”
AlgoritmoSigue recto hasta el fondoGira a la derechaSigue recto hasta el fondo
ProgramaMI A R MD A R1 1 0 1 1 01 1 0 1 1 01 1 0 0 0 01 1 0 1 1 01 1 0 1 1 01 1 0 1 1 01 1 0 1 1 01 1 0 1 1 01 1 0 1 1 0
Lo lleva a I
Lo direcciona hacia B
Lo lleva a B
53Diego Gutiérrez
El procesador “tractor”
ProgramaMI A R MD A R1 1 0 1 1 01 1 0 1 1 01 1 0 0 0 01 1 0 1 1 01 1 0 1 1 01 1 0 1 1 01 1 0 1 1 01 1 0 1 1 01 1 0 1 1 0
Lo lleva a I
Lo direcciona hacia B
Lo lleva a B
Es farragoso programar a nivel MAQUINAEs farragoso programar a nivel MAQUINA
54Diego Gutiérrez
El procesador “tractor”Para facilitar la programación nos inventamos:
NemotécnicosAV Avanza 1 1 0 1 1 0GD Giro Derecha 1 1 0 0 0 0RE Retrocede 1 0 1 1 0 1GI Giro Izquierda 0 0 0 1 1 0
55Diego Gutiérrez
El procesador “tractor”Para facilitar la programación nos inventamos:
Esquemas de composición
Hemos mejorado en ABSTRACCION, pero nos hemos alejado de lo que “interpreta la máquina”.
NECESIDAD DE TRADUCCION
56Diego Gutiérrez
El procesador “tractor”Supongamos otro procesador: un tractor con un solo motor que puede:
Avanzar 1 m 0 1Retroceder 1 m 1 0Girar Izquierda 90 1 1
Problema: El mismoAlgoritmo: El mismoPrograma: 01 01 11 11 11 01 01 01 01 01 01
DISTINTO
Pero el programa, en alto nivel, puede ser el mismo, basta con el traductor adecuado
57Diego Gutiérrez
El procesador “tractor”
ProgramaAvanza 2 Derecha 1Avanza 6
1 1 0 1 1 01 1 0 1 1 01 1 0 0 0 01 1 0 1 1 01 1 0 1 1 01 1 0 1 1 01 1 0 1 1 01 1 0 1 1 01 1 0 1 1 0
0 1 0 1 1 11 1 1 1 0 10 1 0 1 0 1 0 1 0 1
Código parael primertractor
Código parael tractor conun solo giro
58Diego Gutiérrez
Estructura general de un programa.Cabecera
Tipos
Constantes y Variables
Procedimientos
y Funciones
Declaraciones
Algoritmo nombre_alg (lista de parámetros);{Descripción del algoritmo}{Pre: Descripción de los parámetros de entrada}{Post: Descripción de los parámetros de salida}
TiposConstantes y VariablesProcedimientos y Funciones
AsignacionesInstrucciones de entrada-salida,Instrucciones de control,Llamadas a procedimientos y funciones,…
Asignaciones,Instrucciones de entrada-salida,Instrucciones de control,Llamadas a procedimientos y funciones,…
Principio
Instrucciones
Fin.
Algoritmo nombre_alg (Lista de parámetros);{Descripción del algoritmo}{Pre: Descripción de los parámetros de entrada}{Post: Descripción de los parámetros de salida}
59Diego Gutiérrez
60Diego Gutiérrez
Identificador:
LETRA
LETRA
DÍGITO
DÍGITO
Entero sin signos:
61Diego Gutiérrez
. Dígito E
-
+Entero
sin signo
Real sin signo:
Identificadorde constante
Número sin signo
nil
‘ Carácter ´
Constante sin signo:
Enterosin signo
62Diego Gutiérrez
+
-
Identificadorde constante
Carácter
Número sinsigno
´
Constante:
`
63Diego Gutiérrez
Identificadorde variable
Identificadorde campo [ Expresión ]
,
. Identificadorde campo
Variable:
64Diego Gutiérrez
]
Constante sin signo
Variable
Identificadorde función ( Expresión )
,
( Expresión )
not Factor
[
Expresión .. Expresión
,
Factor:
65Diego Gutiérrez
factor
*
factor
/ div mod and
Término:
*
*término
-+ or
término
Expresión simple:
66Diego Gutiérrez
= V= V VI V
I in
Expresiónsimple
Expresiónsimple
Expresión:
67Diego Gutiérrez
( Identificador :Identificador
de tipo
,
fuction
var
procedure Identificador
,
)
;
Lista de parámetros:
68Diego Gutiérrez
Identificadorde tipo
( Identificador )
,
Constante .. Constante
Tipo simple:
69Diego Gutiérrez
Tipo simple
Identificador de tipo
Packed
array [ Tipo simple
,
of] tipo
file of tipo
set of Tipo simple
Lista de camposrecord end
Tipo:
70Diego Gutiérrez
Identificador : Tipo
,
;
case Identificador : Identificador de tipo of
,
(: Lista de campos )
;
Constante
Lista de campos:
71Diego Gutiérrez
Entero sin signo
;
const identificador = constante
;type identificador = tipo
;
var identificador : tipo
;,
; bloque ;
procedure identificador Lista de parámetros
function Ident. tipoidentificador Lista parámetros :
begin instruccion end
label