Algoritmos - generalidades

25
Company LOGO Algoritmos L.I. Tomodachi F. Flores Ortiz

description

Breve introducción; diseñada para presentar a estudiantes algunos aspectos relevantes a la construcción y programación de algoritmos computacionales

Transcript of Algoritmos - generalidades

Page 1: Algoritmos - generalidades

Company

LOGO

Algoritmos

L.I. Tomodachi F. Flores Ortiz

Page 2: Algoritmos - generalidades

Definición

Hughes, David

The algorithm—a clearly defined sequence of steps to achieve some goal—is a key programming concept

Cormen, Thomas H, [Et.Al.]

Informally, an algorithm is any well-defined computational procedure that takes some value, or set of values, as input and produces some value, or set of values, as output. An algorithm is thus a sequence of computational steps that transform the input into the output.

Page 3: Algoritmos - generalidades

Fundamentos

Herramienta para

especificar la solución

de un problema

computacional

Implementación

Especificación del

problema, indicando

entradas y salidas

deseadas

Procedimiento

Page 4: Algoritmos - generalidades

Ejemplo 1: algoritmo de ordenamiento

Entrada: Una secuencia de números {a1, a2, . . . , an}

Salida: Una permutación (reordenamiento )

{a1’ , a2

’, . . . , an’} de la entrada, tal que a1

’ ≤ a2’ ≤ · ·

· ≤ an’ .

Dada la secuencia {31, 41, 59, 26, 41, 58}, el

algoritmo deberá calcular como salida la secuencia

{26, 31, 41, 41, 58, 59}

Esta entrada es llamada instancia del problema.

Independientemente de que cumplan las limitantes o no

de la declaración del problema

Page 5: Algoritmos - generalidades

Caracteristicas de un

algoritmo

Se dice que un algoritmo es correcto si

para cada instancia de entrada, termina

con una salida correcta

Eficiencia

Eficacia

Consistencia

Si la tasa de error es controlable, un

algoritmo incorrecto podría ser útil

Page 6: Algoritmos - generalidades

Representación

Notación formal Definidos por una

sintaxis y una semántica formal para especificar el funcionamiento y comportamiento del sistema.

Los métodos formales son técnicas de base matemática usadas para describir las propiedades de un sistema

Definen un marco de referencia para especificar, desarrollar y verificar los sistemas de manera sistemática

Page 7: Algoritmos - generalidades

Representación

Lenguaje natural Lenguaje hablado y/o

escrito y/o signado por humanos para propósitos generales de comunicación

Pseudocódigo. Es una serie de normas léxicas y gramaticales parecidas a la mayoría de los lenguajes de programación, pero sin llegar a la rigidez de sintaxis de estos ni a la fluidez del lenguaje coloquial.

Page 8: Algoritmos - generalidades

Representación

Gráficos

Permite especificar y

describir un sistema

desde diferentes

perspectivas, con una

notación fácil de usar,

interpretar y

comunicar

Page 9: Algoritmos - generalidades

Componentes de un

algoritmo

Variables

Estructuras de datos

Estructuras de control

Page 10: Algoritmos - generalidades

Variables

Una variable es un elemento auxiliar que almacena valores temporales En un programa de

computadora es una región de la memoria, que sobrevive mientras el equipo de cómputo está encendido

Las variables están asociadas con un tipo de dato y operaciones Números (enteros, reales,

imaginarios)

Caracteres

Cadenas (de caracteres)

Lógicos (booleanos)

Fecha

Page 11: Algoritmos - generalidades

Estructuras de datos

Las estructuras de datos permiten la construcción de nuevos tipos de datos, más complejos, que amplían las herramientas para la solución de problemas Unidimensionales

Registros

Clases

Multidimensionales Arreglos

Pilas

Colas

Listas

Page 12: Algoritmos - generalidades

Estructuras de control

Las estructuras son herramientas para el control de flujo de una solución Selección

Si – Entonces

Caso

Iteración Mientras…

Para…

Repite…

Saltos Ir A

Paro

Regresa

Ejecuta

Page 13: Algoritmos - generalidades

Código

fuente

Código

objeto

Código

ejecutable

Imagen

binaria (en

memoria)

EDITO

R

Programa

en

ejecución

Compilador

Ligador

Cargador

Intérprete

De la idea al binario

Algoritmo

Librerías del

L.D.P.

Librerías del

S.O.

Bibliotecas

dinámicas

(OVL)

Page 14: Algoritmos - generalidades

Ejecución de un programa

Shell

• Interfaz con el usuario

• Gráfico, menú, línea de comando

Cargador

• Programa o componente del sistema operativo que acarrera un código ejecutable a la RAM

CPU

• Unidad Central de Proceso

• Registros

• Buses

Page 15: Algoritmos - generalidades

Estructura básica de una

computadora

Page 16: Algoritmos - generalidades

Lenguaje de máquina

Lenguaje de bajo

nivel

Son las instrucciones

(básicas) que puede

utilizar un

computadora

Es un código

propietario

Arquitectura

RISC

CISC

Page 17: Algoritmos - generalidades

Lenguaje de programación

Alto nivel Orientado al

programador

Diferentes paradigmas

Estructurado

Orientado a objetos

Programación eventual

Programación funcional

Programación lógica

Bajo nivel Orientados al hardware

Ensambladores

Nemotécnicos

Page 18: Algoritmos - generalidades

Lenguaje de programación

Herramientas

Editores

CASE

IDE

Robots

Page 19: Algoritmos - generalidades

Modularización

Un subprograma es un

fragmento de código que

se comporta de manera

independiente dentro de

un programa.

Los subprogramas

pueden ser invocados

varias veces desde otras

partes del programa.

Se comunican mediante

parámetros.

Page 20: Algoritmos - generalidades

Modularización

Cada subprograma tiene

su propio espacio de

variables (identificadores

locales)

Algunos identificadores

pueden ser compartidos

entre subprogramas y el

programa principal

(identificadores globales).

Los subprogramas son

una herramienta de

modularización.

Page 21: Algoritmos - generalidades

Funciones y procedimientos

Una función es un

subprograma que retorna

un valor.

Las funciones se invocan

dentro de una expresión.

Funciones estándar:

integradas en el LDP.

Funciones definidas por

el programador:

desarrolladas para

resolver una operación

en particular.

Los procedimientos no

retornan un valor como

resultado de su ejecución.

Se invocan como una

instrucción independiente.

Solo pueden retornar valores

en sus parámetros (por

referencia).

Page 22: Algoritmos - generalidades

Parámetros

Paso de parámetros

por valor

Implica escribir un

valor (tipo de dato)

manejado por el

programa

Pueden ser el

resultado de una

expresión o la llamada

a una función

No pueden ser

modificados (el valor

se almacena en la

variable local)

Paso de parámetros

por referencia

Utiliza una dirección

en la memoria de la

computadora

(apuntador a una

variable)

Puede ser una

variable local o global

Si se hacen

modificaciones se

reflejarán en las dos

instancias (local y

global)

Page 23: Algoritmos - generalidades

Ejemplos

Inicio Calculadora

Resultado = 0

Opción = 0

Salir = "N"

Repite

Escribe "1. Sumar"

Escribe "2. Restar"

Escribe "3. Multiplicar"

Escribe "4. Dividir"

Escribe "5. Terminar"

Lee Opción

Caso (Opción)

Caso 1: Resultado = sumar(10, 20)

Caso 2: Resultado = restar(50, 20)

Caso 3: Resultado = multiplicar(6, 5)

Caso 4: Resultado = Dividir(120, 4)

Fin(caso)

Hasta que

Fin (Calculadora)

Función sumar(número1,número2):numérico

regresa número1+número2

Fin(sumar)

Función restar(número1,número2):numérico

regresa número1-número2

Fin(sumar)

Función multiplicar(número1,número2):numérico

regresa número1*número2

Fin(sumar)

Función dividir(número1,número2):numérico

si número2 <> 0

regresa número1/número2

fin(si)

Fin(sumar)

Page 24: Algoritmos - generalidades

Recursión

Una función es recursiva

cuando se llama a si misma.

A recursive process is one in

which objects are defined in

terms of other objects of the

same type

Esto no ahorra memoria

(hay múltiples copias de

variables), por lo que hay

que tener cuidado de no

realizar una recursión

demasiado grande, o sin

salida De hacerlo, esta multiplicación

de las variables automáticas

de la función haría que el

programa corra fuera del stack

Page 25: Algoritmos - generalidades

Ejemplo

/* calculo del factorial usando recursión */

#include <stdio.h>

double Factorial(int N);

main()

{

int i;

for(i = 1; i < 10; i++)

printf("%d!=%f\n", Factorial(i);

}

double Factorial(int N)

{

if(N == 0) /* Solución Trivial */

return 1;

return N * Factorial(N-1); /* Solución Recursiva */

}