Anda di halaman 1dari 16

1

UNIVERSIDAD LAICA “ELOY ALFARO DE MANABI” 1er SEMESTRE DE


INGENIERIA ELECTRICA “B”

INVESTIGACION DE INFORMATICA

Programación y diseño de algoritmos:

- Generalidades y fundamentos
- Clasificación, técnicas y herramientas
- Estructuras

Por:
Vélez Loor Sergio Fabricio

Docente:
Ing. Washington García

Fecha:
18 de Julio del 2016

Manta-Manabí-Ecuador
2

Contenido
PROGRAMACION Y DISEÑO DE ALGORITMOS ...................................................................................... 3
2.1 Generalidades y fundamentos ......................................................................................................... 3
Algoritmo ............................................................................................................................................ 3
Origen de la palabra Algoritmo ........................................................................................................... 3
Importancia de un algoritmo .............................................................................................................. 3
Características de un algoritmo .......................................................................................................... 3
Partes de un algoritmo........................................................................................................................ 4
Tipos de Algoritmos ............................................................................................................................ 4
Pasos para la resolución de un problema ........................................................................................... 5
Narrada ............................................................................................................................................... 5
Gráfica ................................................................................................................................................. 5
2.2 Clasificación de la programación ..................................................................................................... 6
Clasificaciones de los lenguajes de alto nivel ..................................................................................... 7
Técnicas y herramientas de diseño de algoritmos.............................................................................. 9
2.3 Estructuras de algoritmos .............................................................................................................. 11
Estructura Secuencial ........................................................................................................................ 12
Bibliografía ............................................................................................................................................ 16
Referencias............................................................................................................................................ 16
3

PROGRAMACION Y DISEÑO DE ALGORITMOS

2.1 Generalidades y fundamentos

Algoritmo

Un algoritmo es un conjunto finito de instrucciones o pasos que sirven para ejecutar

una tarea o resolver un problema. (Saavedra, 2013)

Origen de la palabra Algoritmo

La palabra algoritmo proviene del nombre del matemático, astrónomo y geógrafo

(Musulmán) Persa llamado Abu Abdullah Muhammad bin Musa AlKhwarizmi que vivió entre

los siglos VIII y IX. (Saavedra, 2013)

Importancia de un algoritmo

Es importante el estudio y conocimiento de lo que hoy conocemos como algoritmos

computacionales, que desde su aparición hasta nuestros días es, y seguirá siendo; vital para el

desarrollo de aplicaciones para computadoras, y el manejo y dominio de la lógica de

programación para resolver problemas. (Saavedra, 2013)

Características de un algoritmo

• Preciso: Debe indicar el orden de realización en cada paso y no puede tener ambigüedad.

• Definido: Si se sigue dos veces, obtiene el mismo resultado cada vez

• Finito: Tiene fin; un número determinado de pasos.


4

Partes de un algoritmo

• Entrada: Datos que se necesitan para ejecutarse

• Proceso: Acciones, operaciones y cálculos a realizar

• Salida: Resultado esperado

Tipos de Algoritmos

A. Algoritmo eficiente

Un algoritmo es eficiente cuando se tiene la solución al problema en poco tiempo. Es

decir que:

• Tarda menos en ejecutarse (velocidad)

• Tiene el menor número de líneas de código (espacio)

B. Algoritmo Válido

Un algoritmo es válido cuando carece de errores.

C. Algoritmo Óptimo

Un algoritmo es óptimo si es el más eficiente posible y no tiene errores. La

Búsqueda de este algoritmo es el objetivo prioritario del programador.


5

Pasos para la resolución de un problema

• Diseño de algoritmo, que describe la secuencia ordenada de pasos que conducen a la solución

de un problema dado. También llamado Análisis del problema y desarrollo del algoritmo.

• Expresar el algoritmo como un programa de lenguaje de programación adecuado. También

llamado Fase de codificación.

• Ejecución y validación del programa por la computadora.

Narrada

Es la forma como se relatan los hechos o acciones de un algoritmo y se plasma por escrito.

Este método casi no se usa ya que es ambiguo.

Ejemplo: Algoritmo Narrado para ver una película

- Ir al cine

- Comprar la entrada

- Ver la película

- Regresar a casa

Gráfica

A. Fórmulas:

- Es un sistema de representación para resolver un problema. No es muy frecuente su uso ya

que no todos los algoritmos se pueden expresar en formulas. Ejemplo: La fórmula para resolver

una ecuación de segundo grado X1= -b+ b2 – 4 ac) / 2a X2= -b - b2 – 4 ac) / 2a


6

2.2 Clasificación de la programación

Los lenguajes de programación se pueden clasificar de acuerdo con diversos criterios.

El criterio más simple que se puede considerar hace referencia a la proximidad del lenguaje

con la máquina o con el lenguaje natural. De acuerdo con este criterio, existen tres niveles:

• Lenguajes de bajo nivel: Lenguajes máquina.

• Lenguajes de nivel medio: Lenguajes ensambladores y macroensambladores.

• Lenguajes de alto nivel: El resto de los lenguajes, a los que ya hemos hecho referencia.

Dado que los lenguajes de programación, en cierto modo, han tenido un desarrollo

paralelo a la evolución de los ordenadores, se pueden clasificar atendiendo a su desarrollo

histórico. Esta clasificación distingue cinco generaciones de lenguajes:

• Primera generación: Lenguajes máquina.

• Segunda generación: Ayudas a la programación, como los ensambladores.

• Tercera generación: Lenguajes de alto nivel imperativos, que siguen vigentes en la actualidad,

como Pascal, Modula• 2, Fortran, Cobol, C y Ada.

• Cuarta generación: Lenguajes o entornos de programación orientados básicamente a

aplicaciones de gestión y bases de datos, como SQL, Natural, etc.

• Quinta generación: Lenguajes orientados a aplicaciones en Inteligencia Artificial, como Lisp

y Prolog. (Rodriguez, 2012)


7

Clasificaciones de los lenguajes de alto nivel

De forma muy general, los lenguajes de alto nivel se pueden dividir en lenguajes de

propósito general, que pueden ser empleados en cualquier tipo de aplicación y lenguajes de

propósito especial.

Desde el punto de vista del campo de aplicación al que pertenece el lenguaje podemos

considerar la siguiente clasificación:

Aplicaciones científicas: En las que predominan las operaciones numéricas o

matriciales propias de algoritmos matemáticos. Lenguajes adecuados para estas aplicaciones

son Fortran y Pascal.

Aplicaciones de procesamiento de datos: Donde son frecuentes las operaciones de

creación, mantenimiento y consulta sobre ficheros y bases de datos. Dentro de este campo

estarían aplicaciones de gestión empresarial, como programas de nóminas, contabilidad,

facturación, control de inventario, etc. Lenguajes aptos para este tipo de aplicaciones son Cobol

y SQL.

Aplicaciones de tratamiento de textos: Asociadas al manejo de textos en lenguaje

natural. Lenguajes adecuados para ello son el Snobol y el C.

Aplicaciones en inteligencia artificial: Realización de programas que emulan el

comportamiento inteligente: algoritmos de juegos, programas de comprensión del lenguaje

natural, visión artificial, robótica y sistemas expertos. Los lenguajes que se suelen utilizar en

estos casos son el Lisp y el Prolog. (Rodriguez, 2012)


8

Otra forma de clasificar los lenguajes de alto nivel tiene en cuenta el estilo de programación

que fomentan, es decir, la filosofía de construcción de programas:

- Lenguajes imperativos o procedurales. Estos lenguajes se fundamentan en el uso de

variables para almacenar valores y el uso de instrucciones que indican las operaciones

a realizar sobre los datos. La mayoría de los lenguajes de alto nivel son de este tipo.

- Lenguajes declarativos. En este caso, el proceso por el cual se ejecuta el programa no

aparece de forma explícita. Los programas se construyen mediante la definición de

funciones (lenguajes funcionales como Lisp) o expresiones lógicas que indican las

relaciones entre determinadas estructuras de datos (lenguajes de programación lógica

como Prolog).

- Lenguajes orientados a objetos. El diseño de los programas se centra más en los datos

y su estructura. Los programas consisten en descripciones de unidades denominadas

objetos que encapsulan los datos y las operaciones que actúan sobre ellos. Uno de los

lenguajes más usados en esta filosofía es el C++.

- Lenguajes orientados al problema. Este tipo de lenguajes están diseñados para

problemas específicos, principalmente de gestión. Los programas están formados por

sentencias que indican qué se quiere hacer. Generalmente, suelen ser generadores de

aplicaciones que permiten cierta automatización de la tarea de desarrollo de software

de gestión.
9

Técnicas y herramientas de diseño de algoritmos

Algoritmo voraz:

El algoritmo más sencillo que puede ocurrírsenos es, partiendo de un agregado

solución vacío, recorrer el agregado de entrada, y añadir el elemento considerado en cada

paso al agregado solución siempre que se cumplan las condiciones derivadas de la propiedad

que se apuntó. Un ejemplo muy sencillo puede aportar más luz al anterior párrafo.

Así, sea un agregado de números enteros positivos de tamaño n. Supongamos, para mayor

sencillez, que lo tenemos almacenado en un array c de enteros de tamaño n.

Algoritmo divide y vencerás:

Un segundo algoritmo que puede ocurrírsenos es dividir el agregado en el número de

partes que queramos, siempre que el tamaño sea superior a un tamaño umbral que admitamos.

Obtener la solución de cada parte y combinar dichas soluciones para construir la solución al

agregado completo. Para el caso de que el tamaño sea inferior o igual a umbral, la solución se

obtiene mediante el algoritmo anterior (o cualquier otro conocido que no divida el agregado

en partes).

Algoritmo de programación dinámica:

Un tercer algoritmo que puede ocurrírsenos es, a partir de la de la relación que

establece cómo combinar las soluciones para distintas partes de los datos de entrada,

establecer los casos en que puede obtenerse la solución sin utilizar dicha relación (casos

base), y partiendo de dichos casos, guardar la solución para los mismos en una matriz de
10

registros (multidimensional), y reconstruir la solución al problema utilizando los valores

almacenados en la matriz de registros.

Algoritmo back tracking:

Un cuarto algoritmo que puede ocurrírsenos es, interpretando al agregado como un

conjunto, obtener todos los subconjuntos del conjunto (cuyo número es 2n), hasta encontrar

uno que cumpla con las condiciones impuestas por el problema. Es decir, se trata de realizar

una búsqueda exhaustiva. Llamamos árbol de expansión al árbol formado por todas las

posibilidades que se estudian. En cada hoja hay una posible solución.


11

Estructuras de algoritmos

Un problema se puede dividir en acciones elementales o instrucciones, usando un número

limitado de estructuras de control (básicas) y sus combinaciones que pueden servir para

resolver dicho problema.

Las Estructuras Básicas pueden ser:

Secuenciales: cuando una instrucción del programa sigue a otra.

Selección o decisión: acciones en las que la ejecución de alguna dependerá de que se cumplan

una o varias condiciones. Repetición, Iteración: cuando un proceso se repite en tanto cierta

condición sea establecida para finalizar ese proceso.

ESTRUCTURAS BÁSICAS.

Figura 1.tema 1, estructura de algoritmos


12

Estructura Secuencial

Se caracteriza porque una acción se ejecuta detrás de otra. El flujo del programa coincide con

el orden físico en el que se han ido poniendo las instrucciones. Dentro de este tipo podemos

encontrar operaciones de inicio/fin, inicialización de variables, operaciones de asignación,

cálculo, somatización, etc. Este tipo de estructura se basa en las 5 fases de que consta todo

algoritmo o programa:

Definición de variables (Declaración)

Inicialización de variables.

Lectura de datos

Cálculo

Salida

Ejemplo 1.

Se desea encontrar la longitud y el área de un círculo de radio 5.

Solución.

El objetivo del ejercicio es encontrar la longitud y el área de un círculo con un radio conocido

y de valor 5. Las salidas serán entonces la longitud y el área. (Fase 5 del algoritmo) Sabemos

que la longitud de un círculo viene dada por la fórmula 2 * pi * radio y que el área viene dada

por pi * radio al cuadrado. (Fase 4 del algoritmo) Si definimos las variables como: (fase 1 del

algoritmo)

L = Longitud A = área R = radio pi = 3.1416 hagamos el algoritmo:


13

Inicio

Pi ¬ 3.1416 (definición de un valor constante)

R ¬ 5 (radio constante ya que es conocido su valor)

A ¬ pi * R ^ ² (asignación del valor del área)

L ¬ 2 * pi * R (asignación del valor de la longitud)

Escribir (A, L) (salida del algoritmo)

Fin

Representación en Diagrama de Flujo para el ejemplo:

Figura 2.tema 1, Diagrama de flujo


14

Representación en Diagrama Nassi Schneiderman:

Figura 3.tema 1, Diagrama Nassi

Los problemas secuenciales en diagramas N-S se representan solamente por cajas con líneas

horizontales.

Ejemplo 1.

Leer el sueldo de tres empleados y aplicarles un aumento del 10, 12 y 15% respectivamente.

Desplegar el resultado.

Salidas: Sueldos finales

Entradas: Salarios de los empleados

Datos adicionales: aumentos del 10, 12 y 15%

Cálculos:

Sueldo final = sueldo inicial + aumento

Aumento = sueldo inicial * porcentaje/100

Definición de variables:

Sf1, Sf2, Sf3 = los sueldos finales


15

S1, S2, S3 = salarios de los empleados

Aum1, aum2, aum3 = aumentos

ALGORITMO

Inicio

Leer (S1, S2, S3)

Aum1 ¬ S1 * 0.10

Aum2 ¬ S2 * 0.12

Aum3 ¬ S3 * 0.15

Sf1 ¬ S1 + Aum1

Sf2 ¬ S2 + Aum2

Sf3 ¬ S3 + Aum3

Escribir (SF1, SF2, SF3)

Fin Figura 3.tema 1, Diagrama Nassi


16

Bibliografía
Rodriguez, R. A. (30 de Mayo de 2012). blogspot.com. Obtenido de
http://proyectoinformaticaaadrar.blogspot.com/2012/05/4-clasificacion-de-los-lenguajes-
de.html

Saavedra, I. C. (2013).

Weiss, Mark Allen: "Estructuras de datos y algoritmos", Addison-Wesley Iberoamericana, 1995.

Kruse, Robert Leroy; Tondon, Clovis L.; Leung, Bruce P: "Data structures and program design in C'',
Prentice-Hall, 1997.

Brassard, Gilles; Bratley, Paul: "Algorithmics: theory and practice", Prentice-Hall, 1988.

Sedgewick, Robert: "Algorithms in C++", Addison-Wesley, 1992.

Tenenbaum, Aaron M.; Langsam, Yedidyah; Augenstein, Moshe J.: "Estructuras de datos en C",
Prentice-Hall Hispanoamericana, 1993.

Kernighan, Brian W.; Ritchie, Dennis M.: "El lenguaje de programación C'', Prentice-Hall
Hispanoamericana, 1991.

Referencias
Rodriguez, R. A. (30 de Mayo de 2012). blogspot.com. Obtenido de
http://proyectoinformaticaaadrar.blogspot.com/2012/05/4-clasificacion-de-los-lenguajes-
de.html

Saavedra, I. C. (2013).

Weiss, Mark Allen: "Estructuras de datos y algoritmos", Addison-Wesley Iberoamericana, 1995.

Kruse, Robert Leroy; Tondon, Clovis L.; Leung, Bruce P: "Data structures and program design in C'',
Prentice-Hall, 1997.

Brassard, Gilles; Bratley, Paul: "Algorithmics: theory and practice", Prentice-Hall, 1988.

Sedgewick, Robert: "Algorithms in C++", Addison-Wesley, 1992.

Tenenbaum, Aaron M.; Langsam, Yedidyah; Augenstein, Moshe J.: "Estructuras de datos en C",
Prentice-Hall Hispanoamericana, 1993.

Kernighan, Brian W.; Ritchie, Dennis M.: "El lenguaje de programación C'', Prentice-Hall
Hispanoamericana, 1991.