Tema V. Fundamentos de algoritmos - UNAM
Transcript of Tema V. Fundamentos de algoritmos - UNAM
Tema V. Fundamentos de algoritmos
Objetivo: El alumno explicará la importancia de llevar un
método formal para resolver problemas en la computadora;
asimismo aplicará dicho método en la resolución de problemas
matemáticos sencillos.
5.1 La computabilidad y concepto de máquina de Turing
Ing. Tanya Arteaga Ricci
Partes de un programa
Todo programa esta constituido por un conjunto de órdenes o instrucciones capaces de manipular un conjunto de datos. Éstas órdenes o instrucciones pueden ser divididas en tres grandes bloques claramente diferenciados, correspondientes cada uno de ellos a una parte del diseño de un programa.
Terrestre Marino Aéreo
5.1 La computabilidad y concepto de máquina de Turing
Ing. Tanya Arteaga Ricci
5.1 La computabilidad y concepto de máquina de Turing
Ing. Tanya Arteaga Ricci
Teoría de la computabilidad Es la parte de la computación que estudia los problemas de decisión que pueden ser resueltos con un algoritmo o equivalentemente con una máquina de Turing.
Máquina ENIGMA Segunda Guerra Mundial
http://www.bletchleypark.org.uk/
5.1 La computabilidad y concepto de máquina de Turing
Ing. Tanya Arteaga Ricci
Máquina de Turing
La Máquina de Turing se introdujo en 1936 por Alan M. Turing para resolver problemas computables. Es la base de las computadoras modernas.
Alan Mathison Turing (1912– 1954)
5.1 La computabilidad y concepto de máquina de Turing
Ing. Tanya Arteaga Ricci
Máquina de Turing
Una máquina de Turing esta formada por tres componentes: Una Cinta, Un Controlador y Una Cabeza de lectura/escritura.
5.1 La computabilidad y concepto de máquina de Turing
Ing. Tanya Arteaga Ricci
Cinta
Aun cuando las computadoras modernas utilizan un dispositivo de acceso aleatorio con capacidad finita, la memoria de la máquina de Turing es infinita. La cinta, en cualquier momento mantiene una secuencia de caracteres del conjunto de caracteres aceptado por la máquina.
Cinta o Banda de Moebius August Ferdinand Möbius y Johann Benedict
Listing en 1858
5.1 La computabilidad y concepto de máquina de Turing
Ing. Tanya Arteaga Ricci
Cabeza de Lectura / Escritura
La cabeza de lectura/escritura en cualquier momento señala a un símbolo en la cinta. Llamamos a este símbolo el símbolo actual. La cabeza de lectura/escritura lee y escribe un símbolo a la vez desde la cinta. Después de leer y escribir se mueve a la izquierda, a la derecha o permanece en su lugar. La lectura, la escritura y el desplazamiento, todos se realizan bajo instrucciones del controlador.
5.1 La computabilidad y concepto de máquina de Turing
Ing. Tanya Arteaga Ricci
Controlador
El controlador es la contraparte teórica de la unidad central de proceso (CPU) en las computadoras modernas. Es un autómata de estado finito, una máquina que tiene un número finito predeterminado de estados y se mueve de un estado a otro con base en la entrada. En cualquier momento puede estar en uno de estos estados.
5.1 La computabilidad y concepto de máquina de Turing
Ing. Tanya Arteaga Ricci
Máquina de Turing
5.2 Elementos de los algoritmos y tipos de datos
Ing. Tanya Arteaga Ricci
Fundamentos de Algoritmos
Uno de los algoritmos más antiguos conocidos es el algoritmo de Euclides. El término algoritmo proviene del matemático Muhammad ibn Musa al-Khwarizmi, que vivió aproximadamente entre los años 780 y 850 d.C. en la actual nación iraní. Describió la realización de operaciones elementales en el sistema de numeración decimal. De al-Khwarizmi se obtuvo la derivación algoritmo.
Mohammed Ibn Musa Al-Khwarizmi (780 – 850)
Ing. Tanya Arteaga Ricci
Fundamentos de Algoritmos
Un algoritmo se puede definir como un conjunto pasos, procedimientos o acciones que nos permiten alcanzar un resultado o resolver un problema de un cierto tipo. Por tanto debe ser:
•Precisión
•Determinismo
•Finitud
5.2 Elementos de los algoritmos y tipos de datos
Ing. Tanya Arteaga Ricci
Características de los algoritmos
Precisión: Los pasos a seguir en el algoritmo deben ser precisados
claramente. Determinismo: El algoritmo, dado un conjunto de datos idénticos de entrada,
siempre debe arrojar los mismos resultados. Finitud: El algoritmo, independientemente de la complejidad del
mismo, siempre debe ser de longitud finita.
5.2 Elementos de los algoritmos y tipos de datos
Ing. Tanya Arteaga Ricci
Características de los algoritmos
Conciso y Detallado: Debe reflejar con el máximo detalle el orden de ejecución de
cada acción u operación que vaya a realizar la computadora. Claro y Sencillo: Con el objetivo de facilitar su entendimiento y compresión
por parte del programador.
5.2 Elementos de los algoritmos y tipos de datos
Ing. Tanya Arteaga Ricci
Módulos de un algoritmo
Algoritmo
Datos de Entrada
Procesamiento de los datos
Impresión de resultados
5.2 Elementos de los algoritmos y tipos de datos
5.3 Representación de los algoritmos
(diagrama de flujo y pseudocódigo)
Ing. Tanya Arteaga Ricci
Diagrama de Flujo Para el diseño de algoritmos se utilizan técnicas de representación. Una de
estas técnicas son los denominados Diagramas de Flujo, que se definen como
la representación gráfica que, mediante el uso de símbolos estándar
conectados o unidos mediante líneas de flujo, muestran la secuencia lógica de
las operaciones o acciones que deben realizar las computadoras, así como la
corriente o flujo de datos en la resolución de un programa.
Guernica versión Los Simpson
Temporada 21: Homer the Whopper
Ing. Tanya Arteaga Ricci
Su correcta construcción es sumamente importante porque a partir del mismo se puede escribir un programa en algún lenguaje de programación. Es importante mantener un estándar para la realización de dichos diagramas, esto con el fin de facilitar el intercambio de algoritmos mediante su esquematización gráfica. Es por eso que a continuación se muestran los símbolos a ocupar durante el curso.
Construcción de los Diagramas de Flujo
5.3 Representación de los algoritmos
(diagrama de flujo y pseudocódigo)
Ing. Tanya Arteaga Ricci
Símbolos para los Diagramas de Flujo
5.3 Representación de los algoritmos
(diagrama de flujo y pseudocódigo)
Símbolo utilizado para marcar el inicio o fin del diagrama de flujo.
Símbolo utilizado para representar un proceso. En su interior se expresan asignaciones, operaciones aritméticas, cambios de valor de celdas en memoria, etc.
Símbolo utilizado para representar una decisión. En su interior se almacena una condición, y dependiendo del resultado de la evaluación de la misma se sigue por una de las ramas o caminos alternativos.
Símbolo utilizado para introducir los datos de entrada. Expresa lectura.
Símbolo utilizado para representar la impresión de un resultado. Expresa escritura.
Ing. Tanya Arteaga Ricci
Símbolo utilizado para expresar una decisión múltiple. En su interior se almacena un selector, y dependiendo del valor de dicho selector se sigue por una de las ramas o caminos alternativos. Este símbolo se utiliza en la estructura selectiva múltiple.
Flujo de datos
Conector dentro de la misma
página
Conexión entre
páginas diferentes
5.3 Representación de los algoritmos
(diagrama de flujo y pseudocódigo)
Ing. Tanya Arteaga Ricci
Cinta magnética Pantalla
Disco magnético Teclado
5.3 Representación de los algoritmos
(diagrama de flujo y pseudocódigo)
Ing. Tanya Arteaga Ricci
Reglas para la construcción de Diagramas de Flujo
1. Todo diagrama de flujo debe tener un inicio y un fin
INICIO
FIN
2. Las líneas utilizadas para indicar la dirección del flujo del diagrama deben ser rectas, verticales y horizontales.
5.3 Representación de los algoritmos
(diagrama de flujo y pseudocódigo)
Ing. Tanya Arteaga Ricci
Reglas para la construcción de Diagramas de Flujo
3. Todas las líneas utilizadas para indicar la dirección del flujo del diagrama deben estar conectadas. La conexión puede ser a un símbolo que exprese lectura, proceso, decisión, impresión, conexión o fin de diagrama.
5.3 Representación de los algoritmos
(diagrama de flujo y pseudocódigo)
Ing. Tanya Arteaga Ricci
Reglas para la construcción de Diagramas de Flujo
4. El diagrama de flujo debe ser construido de arriba hacia abajo y de izquierda a derecha.
5. La notación utilizada en el diagrama de flujo debe ser independiente del lenguaje de programación.
6. Es conveniente cuando realizamos una tarea compleja poner comentarios que expresen o ayuden a entender lo que hicimos.
7. Si el diagrama de flujo requiriera más de una hoja para su construcción, debemos utilizar los conectores adecuados y enumerar las páginas convenientemente.
8. No puede llegar más de una línea a un símbolo.
5.3 Representación de los algoritmos
(diagrama de flujo y pseudocódigo)
Ing. Tanya Arteaga Ricci
Tipos de Instrucciones
Una instrucción puede ser considerada como un hecho o suceso de duración limitada que genera unos cambios previstos en la ejecución de un programa, por lo que debe ser una acción previamente estudiada y definida.
5.3 Representación de los algoritmos
(diagrama de flujo y pseudocódigo)
Ing. Tanya Arteaga Ricci
Instrucciones de definición de datos
Son aquellas instrucciones utilizadas para informar al procesador del espacio que debe reservar en memoria, con la finalidad de almacenar un dato mediante el uso de variables simples o estructuras de datos más complejas como, por ejemplo, tablas. La definición consiste en indicar un nombre a través del cual haremos referencia al dato y un tipo a través del cual informaremos al procesador de las características y espacio que deberá reservar en memoria.
5.3 Representación de los algoritmos
(diagrama de flujo y pseudocódigo)
Ing. Tanya Arteaga Ricci
Instrucciones primitivas
Se consideran como tal las instrucciones de asignación y las instrucciones de entrada/salida.
Instrucciones de entrada
Son aquellas instrucciones encargadas de recoger el dato de un dispositivo de entrada, y seguidamente almacenarlo en memoria en una variable previamente definida, para la cual se ha reservado suficiente espacio en memoria.
Leer Variable
Leer Var1, Var2, …, VarN
5.3 Representación de los algoritmos
(diagrama de flujo y pseudocódigo)
Ing. Tanya Arteaga Ricci
Instrucciones de asignación
Son aquellas instrucciones cuyo cometido es almacenar un dato o valor simple obtenido como resultado al evaluar una expresión en una variable previamente definida y declarada.
Instrucciones de salida
Son aquellas instrucciones encargadas de recoger los datos procedentes de variables evaluadas y depositarlos en un dispositivo de salida.
Variable = Expresión
Escribir Resultado
5.3 Representación de los algoritmos
(diagrama de flujo y pseudocódigo)
Ing. Tanya Arteaga Ricci
5.3 Representación de los algoritmos
(diagrama de flujo y pseudocódigo)
Tipos de datos: Los datos a procesar por una computadora pueden clasificarse en:
Simples
Estructurados
Ing. Tanya Arteaga Ricci
Datos Simples La principal característica es que solo ocupan sólo una casilla de memoria, por lo tanto, una variable simple hace referencia a un único valor a la vez. Dentro de este grupo se encuentran: enteros, reales, caracteres, booleanos, enumerados y subrangos.
Datos Estructurados Se caracterizan por el hecho de que con un nombre (identificador de variable estructurada) se hace referencia a un grupo de casillas de memoria. Es decir un dato estructurado tiene varios componentes.
5.3 Representación de los algoritmos
(diagrama de flujo y pseudocódigo)
Ing. Tanya Arteaga Ricci
5.3 Representación de los algoritmos
(diagrama de flujo y pseudocódigo)
Datos numéricos Dentro de los tipos de datos numéricos encontramos los enteros y los reales. Los enteros son números que pueden estar precedidos del signo + ó -, y que no tienen parte decimal.
Los reales son números que pueden ser precedidos del signo + ó -, y que tienen una parte decimal.
45 00101101
números enteros sin signo
27
-27
0011011 0
0011011 1
números enteros con signo
Ing. Tanya Arteaga Ricci
5.3 Representación de los algoritmos
(diagrama de flujo y pseudocódigo)
Datos alfanuméricos Dentro de este tipo de datos encontramos los de tipo caracter (simple) y cadena de caracteres (estructurado). Son datos cuyo contenido pueden ser letras del abecedario (a,b,c,…z), dígitos (0,1,2,…9) o símbolos especiales (#, $, ^, *, %, …, etc). Debemos remarcar que aunque este tipo de datos puede contener números, no pueden ser utilizados para realizar operaciones aritméticas. Un dato tipo cadena de caracteres contiene un conjunto de caracteres, y se escribe entre comillas. La longitud de una cadena depende de los lenguajes de programación.
Ing. Tanya Arteaga Ricci
5.3 Representación de los algoritmos
(diagrama de flujo y pseudocódigo)
Datos lógicos Dentro de este tipo de datos encontramos los booleanos. Son datos que sólo pueden tomar dos valores: verdadero (true) y falso (false).
Constantes Las constantes son datos que no cambian durante la ejecución de un programa. Para nombrar las constantes utilizamos identificadores. Existen tipos de constantes como tipos de datos, por lo tanto, puede haber constantes de tipo entero, real, carácter, cadena de caracteres, etc.
Variables Las variables son objetos que pueden cambiar su valor durante la ejecución de un programa. Al igual que las constantes, pueden existir tipos de variables como tipos de datos.
Ing. Tanya Arteaga Ricci
5.3 Representación de los algoritmos
(diagrama de flujo y pseudocódigo)
Operaciones aritméticas Los operadores son símbolos que sirven para conectar los datos facilitando la realización de diversas clases de operaciones.
OPERADOR SÍMBOLO SIGNIFICADO
Paréntesis ( ) Paréntesis
Aritméticos
**, ^ * /
%, mod + -
Potencia Producto División Módulo
Signo positivo o suma Signo negativo o resta
Alfanuméricos + -
Concatenación Concatenación eliminando espacios
Relacionales
= =, = !=, < >
< <= >
>=
Igual a Distinto a
Menor que Menor o igual que
Mayor que Mayor o igual que
Lógicos !, NOT
&&, AND ||, OR
Negación Conjunción Disyunción
Ing. Tanya Arteaga Ricci
Material
Para la próxima clase equipos de 5 personas:
Tijeras
Pegamento en barra
Colores
Una cartulina
5.3 Representación de los algoritmos
(diagrama de flujo y pseudocódigo)
Ing. Tanya Arteaga Ricci
Ejercicios
Realizar los siguientes diagramas de flujo
Algoritmo que lee dos valores numéricos ‘X’ e ‘Y’,
determina si son iguales y, en caso de no serlo,
indica cuál de ellos es mayor.
Algoritmo que calcule la potencia de un número
dada la base y el exponente
Algoritmo que lee N números y determina cuáles son
pares y positivos.
Algoritmo que calcule la suma de los 20 primeros
números pares y el producto de los 20 primeros
números impares simultáneamente.
5.3 Representación de los algoritmos
(diagrama de flujo y pseudocódigo)
Ing. Tanya Arteaga Ricci
5.3 Representación de los algoritmos
(diagrama de flujo y pseudocódigo)
INICIO
LEER N
C = 0
C = C + 1
LEER A
R = A / 2
R = 0 R > 0
‘A’ ES POSITIVO Y PAR
FIN
SI
SI C < N
NO
NO SI
NO
Algoritmo que lee N números y termina cuando encuentra un número par positivo o llega a N.
Ing. Tanya Arteaga Ricci
5.3 Representación de los algoritmos
(diagrama de flujo y pseudocódigo)
INICIO
SP 0 PI 1 C 0
SW 0
C C +1
SW = 0
SP SP + C PI PI * C
SW 0 SW 1
C<= 40
“SUMA = “, SP “PRODUCTO = “, PI
FIN
NO SI
SI
NO
Algoritmo que calcule la suma de los 20 primeros números pares y el producto de los 20 primeros números impares simultáneamente.
Ing. Tanya Arteaga Ricci
5.3 Representación de los algoritmos
(diagrama de flujo y pseudocódigo)
Pseudocódigo Se puede definir como el lenguaje intermedio entre el lenguaje natural y el lenguaje de programación seleccionado. Esta notación se encuentra sujeta a unas determinadas reglas que permiten y facilitan el diseño de algoritmos. El pseudocódigo surge como método para la representación de instrucciones en una metodología estructurada y nació como un lenguaje similar al inglés, que utilizaba palabras reservadas de este idioma (start, end, stop, while, repeat, for, if, if-else, etc.) y que posteriormente se fue adaptando a otros lenguajes de habla hispana.
Ing. Tanya Arteaga Ricci
5.3 Representación de los algoritmos
(diagrama de flujo y pseudocódigo)
CABECERA
Programa: Nombre del programa
Módulo: Nombre del módulo
CUERPO INICIO
FIN
DATOS: Parámetros Constantes Variables
ALGORITMO: Descripción detallada de órdenes
Pseudocódigo
Ing. Tanya Arteaga Ricci
5.3 Representación de los algoritmos
(diagrama de flujo y pseudocódigo)
Prueba de Escritorio La prueba de escritorio es una herramienta útil para entender que hace un determinado algoritmo, o para verificar que un algoritmo cumple con la especificación sin necesidad de ejecutarlo.
Básicamente, una prueba de escritorio es una ejecución ‘a mano’ del algoritmo, por lo tanto se debe llevar registro de los valores que va tomando cada una de las variables involucradas en el mismo.
Esta prueba consiste en que dar diferentes datos de entrada al programa y seguir la secuencia indicada en el diagrama, hasta obtener los resultados.
Ing. Tanya Arteaga Ricci
CICLO ITERATIVO
Se entiende por ciclo iterativo la unión de símbolos gráficos que en su conjunto indica cómo repetir cierto proceso; las estructuras básicas más comunes son:
NO
SI
NO
SI
PROCESO
PROCESO
EXPRESIÓN
LÓGICA Se opta por repetir n
veces el proceso que
se indica en el
rectángulo EXPRESIÓN
LÓGICA
5.4 Estructuras básicas
(secuencia, condicional e iteración)
Ing. Tanya Arteaga Ricci
Es conveniente realizar la solución de problemas con la computadora de manera conversacional, es decir, que el programa de computadora nos vaya indicando mediante mensajes las opciones y si se desea repetir el proceso con otros datos.
El bosquejo general de un diagrama de flujo conversacional puede ser el siguiente:
INICIO
DAME DATOS
VALORES
PROCESO
REPITE PROCESO
RESP
SI/NO
FIN
FIN
5.4 Estructuras básicas
(secuencia, condicional e iteración)
Ing. Tanya Arteaga Ricci
INICIO
“Da temperatura en °C”
C
F = (1.8 * C ) + 32
“Temp en Farenheit”, F
1
1
Otra conversión S / N
Resp
Resp = “SI”
Fin de proceso
FIN
SI
NO
5.4 Estructuras básicas
(secuencia, condicional e iteración)
Ing. Tanya Arteaga Ricci
Aplicaciones del Ciclo Iterativo
Calcular el valor de la expresión y almacenar en la variable indicada a la izquierda del signo igual, se genera el concepto de contador o expresión que permite contar (que consta de un ciclo iterativo que ejecuta varias veces la instrucción de reemplazo: C=C+1):
C = 0
C = C + 1
C >= N NO
SI
5.4 Estructuras básicas
(secuencia, condicional e iteración)
Ing. Tanya Arteaga Ricci
Aplicaciones del Ciclo Iterativo
Otro de los conceptos de programación de gran utilidad es la estructura que nos permite llevar a cabo sumatorias (en ellas el proceso que se repite es la acumulación de expresiones similares, por ejemplo sumar n dígitos o sumar una y otra vez el valor de una variable X elevada a un exponente que crece en cada ocasión)
C = 0
C = C + 1
C >= N NO
SI
S = 0
S = S + C
5.4 Estructuras básicas
(secuencia, condicional e iteración)
Ing. Tanya Arteaga Ricci
Otro elemento útil para el cálculo de fórmulas es el que resulta de aplicar el concepto de reemplazo del valor de la variable a lo que se llamará una multiplicación reiterada, la cual permite obtener factoriales de tipo descendente o ascendente.
Obténganse el factorial de: 5! Se sabe que su factorial ascendente es: 1 x 2 x 3 x 4 x 5 De dicha multiplicación se observa la presencia del elemento llamado contador, que multiplica su valor por el de la variable del factorial obtenido en el paso anterior, en efecto:
F = 1 Valor inicial de la variable del factorial
F = 1 x 2 Valor anterior de F multiplicado por 2, es decir, F = F x 2
F = 1 x 2 x 3 Valor anterior de F multiplicado por 3, es decir, F = F x 3
F = 1 x 2 x 3 x 4 Valor anterior de F multiplicado por 4, es decir, F = F x 4
F = 1 x 2 x 3 x 4 x 5 Valor anterior de F multiplicado por 5, es decir, F = F x 5
5.4 Estructuras básicas
(secuencia, condicional e iteración)
Ing. Tanya Arteaga Ricci
K = 0 + 1 K = 1
F = 1 x 1 F = 1
K = 1 + 1 K = 2
F = 1 x 2 F = 2
K = 2 + 1 K = 3
F = 2 x 3 F = 6
K = 3 + 1 K = 4
F = 6 x 4 F = 24
K = 4 + 1 K = 5
F = 24 x 5 F = 120
K = 0
K = K + 1
K >= N
NO
SI
F = 1
F = F * K
N = 5
Contador
5.4 Estructuras básicas
(secuencia, condicional e iteración)
Ing. Tanya Arteaga Ricci
F = 1
F = F * K
N
“Dame N”
INICIO
“F = “,F
FIN
K = 0 ; K >= N ; K=K+1
K = 0
K = K + 1
K >= N
NO
SI
F = 1
F = F * K
N
“Dame N”
INICIO
“F = “,F
FIN
5.4 Estructuras básicas
(secuencia, condicional e iteración)
Ing. Tanya Arteaga Ricci
5.5 Resolución de problemas básicos de ingeniería
1. Diseñar el algoritmo (diagrama de flujo y pseudocódigo) correspondiente a un programa que calcule el área lateral y el volumen de un cilindro recto, introduciendo por teclado los valores del radio y de la altura.
2. Escribir un programa (diagrama de flujo y pseudocódigo) que escriba la ecuación de una recta Ax + By + C = 0, leyendo las coordenadas de dos puntos (X1 y Y1) y (X2 y Y2)