P. 1
Algoritmica y Principios de Programación

Algoritmica y Principios de Programación

|Views: 2.091|Likes:
Caracterisiticas de la algoritmica y los principios de la programacion, conceptos y funciones de programación, ejemplos
Caracterisiticas de la algoritmica y los principios de la programacion, conceptos y funciones de programación, ejemplos

More info:

Published by: Marco A. Pérez Castillo on Aug 09, 2009
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

03/07/2013

pdf

text

original

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 .

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

 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 SplitWindow

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.

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

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.

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.

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).

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.

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.

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.

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 }

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

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 84313-1982-8 Luis Mª Gonzalo, Inteligencia Humana e Inteligencia Artificial, Madrid, 1987. ISBN 84-7118490-7 http://www.javamexico.com/blogs/gabo/algoritmo_para_aplicar_base64

You're Reading a Free Preview

Descarga
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->