algoritmica y principios de programación

13
Marco A. Pérez Castillo 1422492 Algorítmica y Principios de Programación Unidad I Generalidades de Algorítmica 1.1 Conceptos 1.2 Aplicaciones 1.3 Estudios afines 1.4 Formalidades Ing. César Govea Elaborado 19-Febrero-2009 Presentado 20-Febrero-2009 1 Generalidades de Algorítmica La historia de la informática señala a Abu Abdullah Muhammad bin Musa al-Khwarizmi, una de las grandes figuras de la matemática árabe medieval como descubridor del concepto de algoritmo. En su obra "aljabar wa-al-muqabala" sienta las bases del algebra, cuyo nombre procede del comienzo del título, así como "algoritmo" procede del nombre del autor, al-Khwarizmi. Al igual que los idiomas sirven de vehículo de comunicación entre los seres humanos, existen lenguajes que realizan la comunicación entre los seres humanos y las computadoras. Estos lenguajes permiten expresar los programas o el conjunto de instrucciones que el operador humano desea que la computadora ejecute. Los lenguajes de computadoras toman diferentes formas; los de las primeras computadoras, como la ENIAC y la EDSAC, se componían en el lenguaje real de las máquinas mismas. La dificultad de programar las máquinas de esta manera limitaba drásticamente su utilidad y proporcionaba un fuerte incentivo para que se desarrollaran lenguajes de programación más orientados hacia la expresión de soluciones con la notación de los problemas mismos. Los primeros lenguajes de programación se conocieron como Lenguajes Ensambladores, un ejemplo es: TRANSCODE, desarrollado para la computadora FERUT. En los lenguajes ensambladores se define un código especial llamado mnemónico para cada una de las operaciones de la máquina y se introduce una notación especial para especificar el dato con el cual debe realizarse la operación. A mediados de los años 60's aparecieron los primeros lenguajes de propósito general como FORTRAN, FORTRAN IV, ALGOL, COBOL, BASIC, PL/I, ADA, C,C++, PASCAL, etc. pero el desarrollo de nuevas tecnologías, tanto en arquitectura de computadoras como en lenguajes de programación, continúa a paso acelerado, cada vez con mayor velocidad, el panorama está cambiando de una etapa de sistemas y lenguajes especialmente desarrollados para aplicaciones individuales. Los lenguajes de programación actuales son los conocidos como Lenguajes visuales, como por ejemplo Visual Fox, Visual Basic, Visual C .

Upload: marco-a-perez-castillo

Post on 12-Jun-2015

2.081 views

Category:

Documents


15 download

DESCRIPTION

Caracterisiticas de la algoritmica y los principios de la programacion, conceptos y funciones de programación, ejemplos

TRANSCRIPT

Page 1: Algoritmica y Principios de Programación

Marco A. Pérez

Castillo

1422492

Algorítmica y Principios de

Programación

Unidad I

Generalidades de

Algorítmica 1.1 Conceptos

1.2 Aplicaciones

1.3 Estudios afines

1.4 Formalidades

Ing. César Govea

Elaborado 19-Febrero-2009

Presentado 20-Febrero-2009

1 Generalidades de Algorítmica La historia de la informática señala a Abu Abdullah Muhammad bin Musa al-Khwarizmi, una de las grandes figuras de la matemática árabe medieval como descubridor del concepto de algoritmo. En su obra "aljabar wa-al-muqabala" sienta las bases del algebra, cuyo nombre procede del comienzo del título, así como "algoritmo" procede del nombre del autor, al-Khwarizmi. Al igual que los idiomas sirven de vehículo de comunicación entre los seres humanos, existen lenguajes que realizan la comunicación entre los seres humanos y las computadoras. Estos lenguajes permiten expresar los programas o el conjunto de instrucciones que el operador humano desea que la computadora ejecute. Los lenguajes de computadoras toman diferentes formas; los de las primeras computadoras, como la ENIAC y la EDSAC, se componían en el lenguaje real de las máquinas mismas. La dificultad de programar las máquinas de esta manera limitaba drásticamente su utilidad y proporcionaba un fuerte incentivo para que se desarrollaran lenguajes de programación más orientados hacia la expresión de soluciones con la notación de los problemas mismos. Los primeros lenguajes de programación se conocieron como Lenguajes Ensambladores, un ejemplo es: TRANSCODE, desarrollado para la computadora FERUT. En los lenguajes ensambladores se define un código especial llamado mnemónico para cada una de las operaciones de la máquina y se introduce una notación especial para especificar el dato con el cual debe realizarse la operación. A mediados de los años 60's aparecieron los primeros lenguajes de propósito general como FORTRAN, FORTRAN IV, ALGOL, COBOL, BASIC, PL/I, ADA, C,C++, PASCAL, etc. pero el desarrollo de nuevas tecnologías, tanto en arquitectura de computadoras como en lenguajes de programación, continúa a paso acelerado, cada vez con mayor velocidad, el panorama está cambiando de una etapa de sistemas y lenguajes especialmente desarrollados para aplicaciones individuales. Los lenguajes de programación actuales son los conocidos como Lenguajes visuales, como por ejemplo Visual Fox, Visual Basic, Visual C .

Page 2: Algoritmica y Principios de Programación

1.1 Conceptos

Algoritmo Un algoritmo es la expresión de una secuencia precisa de operaciones que conduce a la resolución de un problema. Sistema de reglas que permiten obtener una salida específica a partir de una entrada específica. Cada paso debe estar definido exactamente, de forma que pueda traducirse a lenguaje de computadora. Conjunto de operaciones que se utilizan para resolver un problema específico. En este conjunto de instrucciones se indica la secuencia de operaciones que se deben realizar para, a partir de los datos de entrada, obtener el resultado buscado. El concepto de algoritmo es anterior a los ordenadores, y ampliamente utilizado en el mundo de la ciencia para la resolución metódica de problemas. Sin embargo, con la aparición de los ordenadores se comprobó que era una herramienta ideal, ya que cualquier algoritmo puede transformarse en un programa informático. Características del algoritmo: Tiene que ser finito (con un final), preciso (detallar el orden de las operaciones a realizar) y unívoco (al aplicar el algoritmo a los mismos datos de entrada, siempre se obtendrá el mismo resultado a la salida).

Toda regla debe definir perfectamente la acción a desarrollar Todos sus pasos deben ser simples y tener un orden definido. Un Algoritmo no debe resolver un solo problema particular sino una clase de problemas. Un Algoritmo debe ser eficiente y rápido. Métodos para escribir algoritmos: Diagramas de Flujo y pseudocódigo

Programa Un programa para ordenador es la expresión de un algoritmo en un lenguaje artificial formalizado. Conjunto de Instrucciones que controlan el funcionamiento del ordenador con un conjunto de características

Page 3: Algoritmica y Principios de Programación

Análisis del problema: equivale a decidir qué es lo que tenemos que hacer Diseño o desarrollo de la solución: en esta etapa se define cómo vamos a hacerlo, los

métodos más eficaces se apoyan en el conocido Divide y vencerás, (diseño descendente o top down o modular)

Codificación o construcción de la solución en forma de programa Pruebas Mantenimiento

1.2 Aplicaciones

Aplicación de un algoritmo de Split-Window para la

estimación de la temperatura de la superficie terrestre desde

datos AVHRR-NOAA Estimaciones de temperatura de la superficie terrestre, en días parciales a completamente despejados, fueron realizadas a partir de los datos proporcionados por el sensor Advanced Very High Resolution Radiometer (AVHRR), a bordo de la serie de satélites de la National Oceanic and Atmospheric Administration (NOAA) por aplicación de un algoritmo basado en el método de Split-Window

Aplicación de Algoritmos Neurogenéticos en la Planeación de

las Trayectorias de un Robot Polar

Se presenta la estrategia desarrollada para desplazar el efecto final de un brazo robótico dentro de un entorno productivo de forma autónoma, mediante el uso de entornos virtuales, algoritmos genéticos y redes neuronales. El objetivo es la obtención del conjunto de posiciones y los movimientos requeridos para conformar la estrategia de actuación necesaria para completar una actividad específica. De esta forma, el sistema es capaz de guiar el efector final, evadiendo diferentes obstáculos y buscando la combinación espacial y articular que permita una cantidad reducida de movimientos, así como la menor distancia entre ellos. El proceso se torna una herramienta viable de programación y entrenamiento que reduce sustancialmente el tiempo promedio requerido por el factor humano para entrenar el robot.

Page 4: Algoritmica y Principios de Programación

Algoritmo para aplicar Base64 http://www.javamexico.com/blogs/gabo/algoritmo_para_aplicar_base64 El Base64 Content-Transfer-Encoding está diseñado para representar secuencias arbitrarias de octetos en una forma que no necesita ser humanamente legible. Los algoritmos de codificación y decodificación son simples, pero los datos codificados son sistemáticamente sólo alrededor del 33% más grande que los datos sin codificar. Está compuesta por un subconjunto 65 de caracteres US-ASCII, permitiendo 6 bits para ser representados por caracteres imprimibles. (El 65° carácter adicional, "=", se utiliza para significar una función específica para la transformación.) Aquí 3 Bytes se representan con una cadena de texto de 4 caracteres, en total estos 24 bits se subdividen en agrupaciones de 6 bits, cada uno de los cuales se traduce en un solo dígito en el alfabeto base64. En otras palabras estos 6 bits se usan como índice en una matriz de 64 caracteres imprimibles. Todos los saltos de línea, espacios en blanco u otros caracteres que no se encuentra en la Tabla 1 deben de ser ignorado por el software de decodificación. Esta codificación es prácticamente idéntica a la utilizada en la privacidad de Correo Mayor (PEM), también en la URL's de algunos sitios, PGP, Thunderbird y Evolution lo ocupan para el cifrado de contraseñas en los correos entre otros. Base64 no es un algoritmo de compresión de datos, de hecho aumenta 25% los datos que codificas; es un algoritmo para codificar datos binarios como texto para su transmisión o almacenamiento en medios que no permiten transmisión de datos binarios (incluso en sistemas viejos que manejan caracteres de 7 bits). Se usa también por ejemplo en mails encriptados ya sea con certificados X509 o con PGP, así como attachments de mail Los certificados X509, llaves privadas y públicas de RSA o DSA (por ejemplo para SSH o PGP) se almacenan en base 64, precisamente para poder enviarlas en un mail y que se puedan guardar en un archivo de texto simple sin ningún formato especial. Los passwords en UNIX/Linux se guardan en base64, revisa tu /etc/passwd

Page 5: Algoritmica y Principios de Programación

1.3 Estudios a Fines

La informática Es la ciencia aplicada que abarca el estudio y aplicación del tratamiento automático de la información utilizando dispositivos electrónicos y sistemas computacionales.

También está definida como el procesamiento automático de la información.

Conforme a ello, los sistemas informáticos deben realizar las siguientes tres tareas básicas:

Entrada: Captación de la información digital. Proceso: Tratamiento de la información. Salida: Transmisión de resultados binarios.

En los inicios del procesado de información, con la informática sólo se facilitaba los trabajos repetitivos y monótonos del área administrativa, gracias a la automatización de esos procesos, ello trajo como consecuencia directa una disminución de los costes y un incremento en la producción.

En la informática convergen los fundamentos de las ciencias de la computación, la programación y las metodologías para el desarrollo de software, la arquitectura de computadores, las redes de datos (como Internet), la inteligencia artificial y ciertas cuestiones relacionadas con la electrónica.

Se puede entender por informática a la unión sinérgica de todo este conjunto de disciplinas.

Esta disciplina se aplica a numerosas y variadas áreas del conocimiento o la actividad humana, como por ejemplo: gestión de negocios, almacenamiento y consulta de información, monitorización y control de procesos, industria, robótica, comunicaciones, control de transportes, investigación, desarrollo de juegos, diseño computarizado, aplicaciones/herramientas multimedia, medicina, biología, física, química, meteorología, ingeniería, arte, etc.

Una de la aplicaciones más importantes de la informática es facilitar información en forma oportuna y veraz, lo cual, por ejemplo, puede tanto facilitar la toma de decisiones a nivel gerencial (en una empresa) como permitir el control de procesos críticos.

Actualmente es difícil concebir un área que no use, de alguna forma, el apoyo de la informática; en un enorme abanico que cubre desde las más simples cuestiones domésticas hasta los cálculos científicos más complejos. Entre las funciones principales de la informática se cuentan las siguientes:

Creación de nuevas especificaciones de trabajo. Desarrollo e implementación de sistemas informáticos. Sistematización de procesos. Optimización de los métodos y sistemas informáticos existentes.

Page 6: Algoritmica y Principios de Programación

Inteligencia Artificial Convencional Se conoce también como IA simbólico-deductiva e IA débil. Está basada en el análisis formal y estadístico del comportamiento humano ante diferentes problemas:

Razonamiento basado en casos: Ayuda a tomar decisiones mientras se resuelven ciertos problemas concretos.

Sistemas expertos: Infieren una solución a través del conocimiento previo del contexto en que se aplica y de ciertas reglas o relaciones.

Redes bayesianas: Propone soluciones mediante inferencia estadística. Inteligencia artificial basada en comportamientos: que tienen autonomía y pueden

auto-regularse y controlarse para mejorar.

Inteligencia Artificial Computacional La Inteligencia Computacional (también conocida como IA subsimbólica-inductiva o IA fuerte) implica desarrollo o aprendizaje interactivo (por ejemplo, modificaciones interactivas de los parámetros en sistemas conexionistas). El aprendizaje se realiza basándose en datos empíricos.

Programación Existe una tendencia a identificar el proceso de creación de un programa informático con la programación, que es cierta cuando se trata de programas pequeños para uso personal, y que dista de la realidad cuando se trata de grandes proyectos. El proceso de creación de software, desde el punto de vista de la ingeniería, incluye los siguientes pasos:

1. Reconocer la necesidad de un programa para solucionar un problema o identificar la posibilidad de automatización de una tarea.

2. Recoger los requisitos del programa. Debe quedar claro qué es lo que debe hacer el programa y para qué se necesita.

3. Realizar el análisis de los requisitos del programa. Debe quedar claro cómo debe realizar el programa las cosas que debe hacer. Las pruebas que comprueben la validez del programa se pueden especificar en esta fase.

4. Diseñar la arquitectura del programa. Se debe descomponer el programa en partes de complejidad abordable.

Page 7: Algoritmica y Principios de Programación

5. Implementar el programa. Consiste en realizar un diseño detallado, especificando completamente todo el funcionamiento del programa, tras lo cual la codificación debería resultar inmediata.

6. Implantar (instalar) el programa. Consiste en poner el programa en funcionamiento junto con los componentes que pueda necesitar (bases de datos, redes de comunicaciones, etc.).

La ingeniería del software se centra en los pasos de planificación y diseño del programa, mientras que antiguamente (programación artesanal) la realización de un programa consistía únicamente en escribir el código.

Ingeniería de software

Es la disciplina o área de la informática que ofrece métodos y técnicas para desarrollar y mantener software de calidad.

Esta ingeniería trata con áreas muy diversas de la informática y de las Ciencias de la Computación, tales como construcción de compiladores, Sistemas Operativos, o desarrollos Intranet/Internet, abordando todas las fases del ciclo de vida del desarrollo de cualquier tipo de Sistema de Información y aplicables a infinidad de áreas (negocios, investigación científica, medicina, producción, logística, banca, control de tráfico, meteorología, derecho, Internet, Intranet, etc.).

Una definición precisa aún no ha sido contemplada en los diccionarios, sin embargo se pueden citar las enunciadas por algunos de los más prestigiosos autores:

1 - Ingeniería de Software es el estudio de los principios y metodologías para el desarrollo y mantenimiento de sistemas software (Zelkovitz, 1978)

2 - Ingeniería de software es la aplicación práctica del conocimiento científico al diseño y construcción de programas de computadora y a la documentación asociada requerida para desarrollar, operar y mantenerlos. Se conoce también como Desarrollo de Software o Producción de Software ( Bohem, 1976).

3 - Ingeniería de Software trata del establecimiento de los principios y métodos de la ingeniería a fin de obtener software de modo rentable, que sea fiable y trabaje en máquinas reales (Bauer, 1972).

4 - Es la aplicación de un enfoque sistemático, disciplinado y cuantificable al desarrollo, operación y mantenimiento del software; es decir, la aplicación de la ingeniería al software (IEEE, 1993).

Page 8: Algoritmica y Principios de Programación

1.4 Formalidades Los algoritmos pueden ser expresados de muchas maneras, incluyendo al lenguaje natural, pseudocódigo, diagramas de flujo y lenguajes de programación entre otros. Las descripciones en lenguaje natural tienden a ser ambiguas y extensas. El usar pseudocódigo y diagramas de flujo evita muchas ambigüedades del lenguaje natural. Dichas expresiones son formas más estructuradas para representar algoritmos; no obstante, se mantienen independientes de un lenguaje de programación específico. Estructura general de un algoritmo

Algoritmo <nombre_del_algoritmo>

Inicio

definición de constantes

declaración de variables

Sentencia 1

Sentencia 2

.

.

.

Sentencia n

Fin

La descripción de un algoritmo usualmente se hace en tres niveles:

1. Descripción de alto nivel. Se establece el problema, se selecciona un modelo matemático y se explica el algoritmo de manera verbal, posiblemente con ilustraciones y omitiendo detalles.

2. Descripción formal. Se usa pseudocódigo para describir la secuencia de pasos que encuentran la solución.

3. Implementación. Se muestra el algoritmo expresado en un lenguaje de programación específico o algún objeto capaz de llevar a cabo instrucciones.

También es posible incluir un teorema que demuestre que el algoritmo es correcto, un análisis de complejidad o ambos.

Page 9: Algoritmica y Principios de Programación

Diagrama de flujo que expresa un algoritmo para calcular la raíz cuadrada de un número x

Diagramas de Flujo Los diagramas de flujo son descripciones gráficas de algoritmos; usan símbolos conectados con flechas para indicar la secuencia de instrucciones y están regidos por ISO. Los diagramas de flujo son usados para representar algoritmos pequeños, ya que abarcan mucho espacio y su construcción es laboriosa. Por su facilidad de lectura son usados como introducción a los algoritmos, descripción de un lenguaje y descripción de procesos a personas ajenas a la computación. Pseudocódigo es la descripción de un algoritmo que asemeja a un lenguaje de programación pero con algunas convenciones del lenguaje natural. Tiene varias ventajas con respecto a los diagramas de flujo, entre las que se destaca el poco espacio que se requiere para representar instrucciones complejas.

Pseudocódigo El pseudocódigo no está regido por ningún estándar. pseudo viene de falso y por ende es un código al que aunque es entendible no se aplica al proceso que debe realizar la maquina.

Page 10: Algoritmica y Principios de Programación

Máquina de Turing La máquina de Turing es un modelo matemático, diseñado por Alan Turing, que formaliza el

concepto de algoritmo. A este modelo se le refiere comúnmente como la "descripción de más bajo

nivel" por el hecho de que no utiliza ninguna expresión coloquial.

Implementación Muchos algoritmos son ideados para implementarse en un programa.

Sin embargo, los algoritmos pueden ser implementados en otros medios, como una red neuronal,

un circuito eléctrico o un aparato mecánico.

Algunos algoritmos inclusive se diseñan especialmente para implementarse usando lápiz y papel.

El algoritmo de multiplicación tradicional, el algoritmo de Euclides, la criba de Eratóstenes y

muchas formas de resolver la raíz cuadrada son sólo algunos ejemplos.

Page 11: Algoritmica y Principios de Programación

Ejemplo de algoritmo Java Base64

1 package encode;

2

3 /**

4 * @author Gabriel Mtz. Nájera

5 */

6 public class Base64Encoder {

7 private static StringBuilder sb = new StringBuilder();

8

9 public static String[] mapInt2Str = {

10 "a","b","c","d","e","f","g","h",

11 "i","j","k","l","m","n","o","p",

12 "q","r","s","t","u","v","w","x",

13 "y","z","A","B","C","D","E","F",

14 "G","H","I","J","K","L","M","N",

15 "O","P","Q","R","S","T","U","V",

16 "W","X","Y","Z","0","1","2","3",

17 "4","5","6","7","8","9","+","/"

18 };

19

20 /**

21 * @param data un array de 3 bytes con los datos a codificar

22 * @param ioff

23 * @return String

24 * @throws java.lang.Exception

25 */

26 public static String encodeBase64(byte[] data, int ioff)throws Exception{

27 sb = new StringBuilder("");

28 if (ioff > 0) {

29

/*

30-32

*/

33 int i0 = (data[0] & 0x3f);

34 sb.append(mapInt2Str[i0]);

35 if (ioff > 1) {

/*36-42*/

43 int i1 = ((data[1] & 0x0f) << 2) | ((data[0] & 0xc0) >> 6);

44 sb.append(mapInt2Str[i1]);

45 if (ioff > 2) {

46

/*47-52*/

53 int i2 = ((data[2] & 0x03) << 4) | ((data[1] & 0xf0) >>

4);

54 sb.append(mapInt2Str[i2]);

55

/*56-58*/

59 int i3 = ((data[2] & 0xfc) >> 2);

60 sb.append(mapInt2Str[i3]);

61 }

62 }

Page 12: Algoritmica y Principios de Programación

63 }

64 return sb.toString();

65 }

66 /**

67 * Codifica

68 * Se leen 3 bytes y se obtiene la cadenas de texto de 4 caracteres

69 * @param sInputFilePath La ruta de binario

70 * @return String codificación del archivo

71 */

72 public static String encodeBinaryData(String sInputFilePath){

73 String sBase64Data = ""; //codificada

74 java.io.BufferedInputStream bis = null; //lectura

75 StringBuilder strb = new StringBuilder();//escritura

76 try{

77 bis = new java.io.BufferedInputStream(

78 new java.io.FileInputStream(sInputFilePath)

79 );

80 int iReadBytes = 0;

81 byte data[] = new byte[3];

/*82-85*/

85 while( (iReadBytes = bis.read(data, 0,3)) != -1){

86 strb.append( Base64Encoder.encodeBase64(data, iReadBytes) );

87 //System.out.println("Escribe:"+strb);

88 }

89 sBase64Data = strb.toString();

90 }catch(Exception ex){

91 sBase64Data = null;

92 System.out.println( ex.getMessage() );

93 }finally{

94 try {

95 if (bis != null) bis.close();

96 } catch (java.io.IOException ex) {

97 System.out.println( ex.getMessage() );

98 }

99 }

100 return sBase64Data;

101 }

102

103 }

104

105

Page 13: Algoritmica y Principios de Programación

Bibliografía

• Fundamentos de Algoritmia, G. Brassard y P. Bratley. (ISBN 848966000)

• The Art of Computer Programming, Knuth, D. E. [quien fue también, el creador del TeX]

• Introduction to Algorithms (2nd ed), Cormen, T. H., Leiserson, C. E., Rivest, R. L. y Stein, C.

• Introduction to Algorithms. A Creative Approach, Mamber, U.

• Tirso de Andrés, Homo Cybersapiens. La Inteligencia artificial y la humana, 2002, ISBN 84-

313-1982-8

• Luis Mª Gonzalo, Inteligencia Humana e Inteligencia Artificial, Madrid, 1987. ISBN 84-7118-

490-7

• http://www.javamexico.com/blogs/gabo/algoritmo_para_aplicar_base64