Sie sind auf Seite 1von 9

Algoritmo

Podemos encontrar muchas definiciones completas o formales de algoritmo en los textos de algoritmica y programacion, todas ellas muy similares:

Secuencia finita de instrucciones, reglas o pasos que describen de forma precisa las operaciones de un ordenador debe realizar para llevar a cabo un tarea en un tiempo mas finito. [Donald E. Knuth, 1968] Descripcion de un esquema de comportamiento expresado mediante un reportorio finito de acciones y de informaciones elementales, identificadas, bien comprendidas y realizables a priori. Este repertorio se denomica lexico [Pierre Scholl, 1988] Un algoritmo es un conjunto finito de pasos definidos, estructurados en el tiempo y formulados con base a un conjunto finito de reglas no ambiguas, que proveen un procedimiento para dar la solucin o indicar la falta de esta a un problema en un tiempo determinado. [Rodolfo Quispe-Otazu, 2004]

Caracteristicas: Las caractersticas fundamentales que debe cumplir todo algoritmo son:

Ser definido: Sin ambigedad, cada paso del algoritmo debe indicar la accin a realizar sin criterios de interpretacin. Ser finito: Un nmero especfico y numerable de pasos debe componer al algoritmo, el cual deber finalizar al completarlos. Tener cero o ms entradas: Datos son proporcionados a un algoritmo como insumo (o estos son generados de alguna forma) para llevar a cabo las operaciones que comprende. Tener una o ms salidas: Debe siempre devolver un resultado; de nada sirve un algoritmo que hace algo y nunca sabemos que fue. El devolver un resultado no debe ser considerado como nicamente verlos en forma impresa o en pantalla, como ocurre con las computadoras. Existen muchos otros mecanismos susceptibles de programacin que no cuentan con una salida de resultados de esta forma. Por salida de resultados debe entenderse todo medio o canal por el cual es posible apreciar los efectos de las acciones del algoritmo. Efectividad: El tiempo y esfuerzo por cada paso realizado debe ser preciso, no usando nada ms ni nada menos que aquello que se requiera para y en su ejecucin.

Historia: La palabra algoritmo proviene del nombre del matemtico llamado Abu Abdullah Muhammad bin Musa al-Khwarizmi (hay muchas variantes para el nombre al usar el alfabeto latin, tales como Al-Khorezmi, Al-Khwarizmi, Al-Khawarizmi, Al-Khawaritzmi o Al-Khowarizmi) que vivi entre los siglos VIII y IX. Su trabajo consisti en preservar y difundir el conocimiento de la antigua Grecia y de la India. Sus libros eran de fcil comprensin, de ah que su principal valor no fuera el de crear nuevos teoremas o nuevas corrientes de pensamiento, sino el de simplificar las matemticas a un nivel lo suficientemente bajo para que pudiera ser comprendido por un amplio pblico. Cabe destacar cmo seal las virtudes del sistema decimal indio (en contra de los sistemas tradicionales rabes) y cmo explic que, mediante una especificacin clara y concisa de cmo calcular sistemticamente, se podran definiralgoritmos que fueran usados en dispositivos

mecnicos similares a un baco en vez de las manos. Tambin estudi la manera de reducir el numero de operaciones necesarias que formaban el clculo. Por esta razn, aunque no haya sido l el inventor del primer algoritmo, merece que este concepto est asociado a su nombre. Al-Khorezmi fue sin duda el primer pensador algortmico. Ya en el siglo XIX, se produjo el primer algoritmo escrito para un computador. La autora fue Ada Byron, en cuyos escritos se detallaban la mquina analtica en 1842. Por ello que es considerada por muchos como la primera programadora aunque, desde Charles Babbage, nadie complet su mquina, por lo que el algoritmo nunca se implement. La idea de resolver un problema o de disponer de un algoritmo es bastante antigua, tal es as, que exista la errada creencia que no haba problema que no se pudiera resolver y en base a ello, el matemtico David Hilbert quiso descubrir un algoritmo para los algoritmos. Hoy en dia gracias a los trabajos de Kurt Gdel, Alonzo Church (calculo lamba), Alan Turing (maquina de turing), se sabe que dentro del universo de problemas, una pequea parte es computable, luego que el objetivo que perseguia David Hilbert no era computable, es lo que se ha denominado como la computabilidad de los algoritmos. Elementos de un algoritmo En programacin se debe separar la diferencia entre el diseo del algoritmo y su implementacin en un lenguaje especfico. Por ello, se debe distinguir claramente entre los conceptos de programacin y el medio en que ellos se implementan en un lenguaje especfico. Sin embargo, una vez que se comprendan los conceptos de programacin, como utilizarlos, la enseanza de un nuevo lenguaje es relativamente fcil. Los lenguajes de programacin como los restantes lenguajes- tienen elementos bsicos que se utilizan como bloques constructivos, as como reglas para las que esos elementos se combinan. Estas reglas se denominan sintaxis del lenguaje. Solamente las instrucciones sintcticamente correctas pueden ser interpretadas por la computadora y los programas que contengan errores de sintaxis con rechazados por la mquina. Los elementos bsicos constitutivos de un programa o algoritmo son:

. palabras reservadas (inicio, fin, si entonces..., etc), . identificadores (nombres de variables esencialmente), . Caracteres especiales (coma, apstrofe, etc.), . constantes . variables . expresiones . instrucciones

Programa informtico
Un programa informtico es un conjunto de instrucciones que una vez ejecutadas realizarn una o varias tareas en una computadora. Sin programas, estas mquinas no pueden funcionar.1 2 Al conjunto general de programas, se le denomina software, que ms genricamente se refiere al equipamiento lgico o soporte lgico de una computadora digital. En informtica, se los denomina comnmente binarios, (propio en sistemas Unix, donde debido a la estructura de este ltimo, los ficheros no necesitan hacer uso de extensiones. Posteriormente, los presentaron como ficheros ejecutables, con extensin .exe, en los sistemas operativos de la familia Windows) debido a que una vez que han pasado por el proceso de compilacin y han sido creados, las instrucciones que se escribieron en un lenguaje de programacin que los humanos usan para escribirlos con mayor facilidad, se han traducido al nico idioma que la mquina comprende, combinaciones de ceros y unos llamada cdigo mquina. El mismo trmino, puede referirse tanto a un programa ejecutable, como a su cdigo fuente, el cual es transformado en un binario cuando es compilado. Generalmente el cdigo fuente lo escriben profesionales conocidos como programadores. Se escribe en un lenguaje que sigue uno de los siguientes dos paradigmas: imperativo o declarativo y que posteriormente puede ser convertido en una imagen ejecutable por un compilador. Cuando se pide que el programa sea ejecutado, el procesador ejecuta instruccin por instruccin. De acuerdo a sus funciones, se clasifican en software de sistema y software de aplicacin. En los computadores actuales, al hecho de ejecutar varios programas de forma simultnea y eficiente, se le conoce como multitarea.

Aplicacin informtica
En informtica, una aplicacin es un tipo de programa informtico diseado como herramienta para permitir a un usuario realizar uno o diversos tipos de trabajo. Esto lo diferencia principalmente de otros tipos de programas como los sistemas operativos (que hacen funcionar al ordenador), las utilidades (que realizan tareas de mantenimiento o de uso general), y los lenguajes de programacin (con el cual se crean los programas informticos). Suele resultar una solucin informtica para la automatizacin de ciertas tareas complicadas como pueden ser la contabilidad, la redaccin de documentos, o la gestin de un almacn. Algunos ejemplos de programas de aplicacin son los procesadores de textos, hojas de clculo, y base de datos. Ciertas aplicaciones desarrolladas a medida suelen ofrecer una gran potencia ya que estn exclusivamente diseadas para resolver un problema especfico. Otros, llamados paquetes integrados de software, ofrecen menos potencia pero a cambio incluyen varias aplicaciones, como un programa procesador de textos, de hoja de clculo y de base de datos.

Diagrama mostrando la ubicacin y relacin que tienen las aplicaciones frente al usuario final, y con otros programas informticos existentes. Otros ejemplos de programas de aplicacin pueden ser: programas de comunicacin de datos, Multimedia, presentaciones, diseo grfico, clculo, finanzas, correo electrnico, navegador web, compresin de archivos, presupuestos de obras, gestin de empresas, etc.

Ciclo de vida del software


El trmino ciclo de vida del software describe el desarrollo de software, desde la fase inicial hasta la fase final. El propsito de este programa es definir las distintas fases intermedias que se requieren paravalidar el desarrollo de la aplicacin, es decir, para garantizar que el software cumpla los requisitos para la aplicacin y verificacin de los procedimientos de desarrollo: se asegura de que los mtodos utilizados son apropiados. Estos programas se originan en el hecho de que es muy costoso rectificar los errores que se detectan tarde dentro de la fase de implementacin. El ciclo de vida permite que los errores se detecten lo antes posible y por lo tanto, permite a los desarrolladores concentrarse en la calidad del software, en los plazos de implementacin y en los costos asociados. El ciclo de vida bsico de un software consta de los siguientes procedimientos:

Definicin de objetivos: definir el resultado del proyecto y su papel en la estrategia global. Anlisis de los requisitos y su viabilidad: recopilar, examinar y formular los requisitos del cliente y examinar cualquier restriccin que se pueda aplicar. Diseo general: requisitos generales de la arquitectura de la aplicacin. Diseo en detalle: definicin precisa de cada subconjunto de la aplicacin. Programacin (programacin e implementacin): es la implementacin de un lenguaje de programacin para crear las funciones definidas durante la etapa de diseo. Prueba de unidad: prueba individual de cada subconjunto de la aplicacin para garantizar que se implementaron de acuerdo con las especificaciones. Integracin: para garantizar que los diferentes mdulos se integren con la aplicacin. ste es el propsito de la prueba de integracin que est cuidadosamente documentada. Prueba beta (o validacin), para garantizar que el software cumple con las especificaciones originales. Documentacin: sirve para documentar informacin necesaria para los usuarios del software y para desarrollos futuros. Implementacin Mantenimiento: para todos los procedimientos correctivos (mantenimiento correctivo) y las actualizaciones secundarias del software (mantenimiento continuo). El orden y la presencia de cada uno de estos procedimientos en el ciclo de vida de una aplicacin dependen del tipo de modelo de ciclo de vida acordado entre el cliente y el equipo de desarrolladores.

Modelos de ciclo de vida


Para facilitar una metodologa comn entre el cliente y la compaa de software, los modelos de ciclo de vida se han actualizado para reflejar las etapas de desarrollo involucradas y la documentacin requerida, de manera que cada etapa se valide antes de continuar con la siguiente etapa. Al final de cada etapa se arreglan las revisiones de manera que (texto faltante).

Modelo en cascada
El modelo de ciclo de vida en cascada comenz a disearse en 1966 y se termin alrededor de 1970. Se define como una secuencia de fases en la que al final de cada una de ellas se rene la documentacin para garantizar que cumple las especificaciones y los requisitos antes de pasar a la fase siguiente:

Modelo V
El modelo de ciclo de vida V proviene del principio que establece que los procedimientos utilizados para probar si la aplicacin cumple las especificaciones ya deben haberse creado en la fase de diseo.

Un lenguaje de programacin
Un lenguaje de programacin es un idioma artificial diseado para expresar computaciones que pueden ser llevadas a cabo por mquinas como las computadoras. Pueden usarse para crear programas que controlen el comportamiento fsico y lgico de una mquina, para expresar algoritmos con precisin, o como modo de comunicacin humana.1 Est formado por un conjunto de smbolos y reglas sintcticas y semnticas que definen su estructura y el significado de sus elementos y expresiones. Al proceso por el cual se escribe, se prueba, se depura, se compila y se mantiene el cdigo fuente de un programa informtico se le llama programacin. Tambin la palabra programacin se define como el proceso de creacin de un programa de computadora, mediante la aplicacin de procedimientos lgicos, a travs de los siguientes pasos: El desarrollo lgico del programa para resolver un problema en particular. Escritura de la lgica del programa empleando un lenguaje de programacin especfico (codificacin del programa). Ensamblaje o compilacin del programa hasta convertirlo en lenguaje de mquina. Prueba y depuracin del programa. Desarrollo de la documentacin. Existe un error comn que trata por sinnimos los trminos 'lenguaje de programacin' y 'lenguaje informtico'. Los lenguajes informticos engloban a los lenguajes de programacin y a otros ms, como por ejemplo HTML (lenguaje para el marcado de pginas web que no es propiamente un lenguaje de programacin, sino un conjunto de instrucciones que permiten disear el contenido de los documentos). Permite especificar de manera precisa sobre qu datos debe operar una computadora, cmo deben ser almacenados o transmitidos y qu acciones debe tomar bajo una variada gama de circunstancias. Todo esto, a travs de un lenguaje que intenta estar relativamente prximo al lenguaje humano o natural. Una caracterstica relevante de los lenguajes de programacin es precisamente que ms de un programador pueda usar un conjunto comn de instrucciones que sean comprendidas entre ellos para realizar la construccin de un programa de forma colaborativa.

Sistema de tipos
Artculo principal:

Sistema de tipos

Un sistema de tipos define la manera en la cual un lenguaje de programacin clasifica los valores y expresiones en tipos, cmo pueden ser manipulados dichos tipos y cmo interactan. El objetivo de un sistema de tipos es verificar y normalmente poner en vigor un cierto nivel de exactitud en programas escritos en el lenguaje en cuestin, detectando ciertas operaciones invlidas. Cualquier sistema de tipos decidible tiene sus ventajas y desventajas: mientras por un lado rechaza muchos programas incorrectos, tambin prohbe algunos programas correctos aunque poco comunes. Para poder minimizar esta desventaja, algunos lenguajes incluyen lagunas de tipos, conversiones explcitas no checadas que pueden ser usadas por el programador para permitir explcitamente una operacin normalmente no permitida entre diferentes tipos. En la mayora de los lenguajes con tipos, el sistema de tipos es usado solamente para checar los tipos de los programas, pero varios lenguajes, generalmente funcionales, llevan a cabo lo que se conoce como inferencia de tipos, que le quita al programador la tarea de especificar los tipos. Al diseo y estudio formal de los sistemas de tipos se le conoce como teora de tipos.

Lenguajes tipados versus lenguajes no tipados


Se dice que un lenguaje tiene tipos si la especificacin de cada operacin define tipos de datos para los cuales la operacin es aplicable, con la implicacin de que no es aplicable a otros tipos. Por ejemplo, "este texto entre comillas" es una cadena. En la mayora de los lenguajes de programacin, dividir un nmero por una cadena no tiene ningn significado. Por tanto, la mayora de los lenguajes de programacin modernos rechazaran cualquier intento de ejecutar dicha operacin por parte de algn programa. En algunos lenguajes, estas operaciones sin significado son detectadas cuando el programa es compilado (validacin de tipos "esttica") y son rechazadas por el compilador, mientras en otros son detectadas cuando el programa es ejecutado (validacin de tipos "dinmica") y se genera una excepcin en tiempo de ejecucin. Un caso especial de lenguajes de tipo son los lenguajes de tipo sencillo. Estos son con frecuencia lenguajes de marcado o de scripts, como REXX o SGML, y solamente cuentan con un tipo de datos; comnmente cadenas de caracteres que luego son usadas tanto para datos numricos como simblicos. En contraste, un lenguaje sin tipos, como la mayora de los lenguajes ensambladores, permiten que cualquier operacin se aplique a cualquier dato, que por lo general se consideran secuencias de bits de varias longitudes. Lenguajes de alto nivel sin datos incluyen BCPL y algunas variedades de Forth. En la prctica, aunque pocos lenguajes son considerados con tipo desde el punto de vista de la teora de tipos (es decir, que verifican o rechazan todas las operaciones), la mayora de los lenguajes modernos ofrecen algn grado de manejo de tipos. Si bien muchos lenguajes de produccin proveen medios para brincarse o subvertir el sistema de tipos.

Tipos estticos versus tipos dinmicos


En lenguajes con tipos estticos se determina el tipo de todas las expresiones antes de la ejecucin del programa (tpicamente al compilar). Por ejemplo, 1 y (2+2) son expresiones enteras; no pueden ser pasadas a una funcin que espera una cadena, ni pueden guardarse en una variable que est definida como fecha. Los lenguajes con tipos estticos pueden manejar tipos explcitos o tipos inferidos. En el primer caso, el programador debe escribir los tipos en determinadas posiciones textuales. En el segundo caso, el compilador infiere los tipos de las expresiones y las declaraciones de acuerdo al contexto. La mayora de los lenguajes populares con tipos estticos, tales comoC++, C# y Java, manejan tipos explcitos. Inferencia total de los tipos suele asociarse con lenguajes menos populares, tales como Haskell y ML. Sin embargo, muchos lenguajes de tipos explcitos permiten inferencias parciales de tipo; tanto Java y C#, por ejemplo, infieren tipos en un nmero limitado de casos. Los lenguajes con tipos dinmicos determinan la validez de los tipos involucrados en las operaciones durante la ejecucin del programa. En otras palabras, los tipos estn asociados con valores en ejecucin en lugar de expresiones textuales. Como en el caso de lenguajes con tipos inferidos, los lenguajes con tipos dinmicos no requieren que el programador escriba los tipos de las expresiones. Entre otras cosas, esto permite que una misma variable se pueda asociar con valores de tipos distintos en diferentes momentos de la ejecucin de un programa. Sin embargo, los errores de tipo no pueden ser detectados automticamente hasta que se ejecuta el cdigo, dificultando la depuracin de los programas. Ruby, Lisp,JavaScript y Python son lenguajes con tipos dinmicos.

Tipos dbiles y tipos fuertes


Los lenguajes dbilmente tipados permiten que un valor de un tipo pueda ser tratado como de otro tipo, por ejemplo una cadena puede ser operada como un nmero. Esto puede ser til a veces, pero tambin puede permitir ciertos tipos de fallas que no pueden ser detectadas durante la compilacin o a veces ni siquiera durante la ejecucin.

Los lenguajes fuertemente tipados evitan que pase lo anterior. Cualquier intento de llevar a cabo una operacin sobre el tipo equivocado dispara un error. A los lenguajes con tipos fuertes se les suele llamar de tipos seguros. Lenguajes con tipos dbiles como Perl y JavaScript permiten un gran nmero de conversiones de tipo implcitas. Por ejemplo en JavaScript la expresin 2 * x convierte implcitamentex a un nmero, y esta conversin es exitosa inclusive cuando x es null, undefined, un Array o una cadena de letras. Estas conversiones implcitas son tiles con frecuencia, pero tambin pueden ocultar errores de programacin. Las caractersticas de estticos y fuertes son ahora generalmente consideradas conceptos ortogonales, pero su trato en diferentes textos varia. Algunos utilizan el trmino de tipos fuertes para referirse a tipos fuertemente estticos o, para aumentar la confusin, simplemente como equivalencia de tipos estticos. De tal manera que C ha sido llamado tanto lenguaje de tipos fuertes como lenguaje de tipos estticos dbiles.

intrprete
En ciencias de la computacin, intrprete o interpretador es un programa informtico capaz de analizar y ejecutar otros programas, escritos en un lenguaje de alto nivel. Los intrpretes se diferencian de los compiladores en que mientras estos traducen un programa desde su descripcin en un lenguaje de programacin al cdigo de mquina del sistema, los intrpretes slo realizan la traduccin a medida que sea necesaria, tpicamente, instruccin por instruccin, y normalmente no guardan el resultado de dicha traduccin. Usando un intrprete, un solo archivo fuente puede producir resultados iguales incluso en sistemas sumamente diferentes (ej. una PC y un PlayStation 3). Usando un compilador, un solo archivo fuente puede producir resultados iguales solo si es compilado a distintos ejecutables especficos a cada sistema. Los programas interpretados suelen ser ms lentos que los compilados debido a la necesidad de traducir el programa mientras se ejecuta, pero a cambio son ms flexibles como entornos de programacin y depuracin (lo que se traduce, por ejemplo, en una mayor facilidad para reemplazar partes enteras del programa o aadir mdulos completamente nuevos), y permiten ofrecer al programa interpretado un entorno no dependiente de la mquina donde se ejecuta el intrprete, sino del propio intrprete (lo que se conoce comnmente comomquina virtual). Para mejorar el desempeo, algunas implementaciones de programacin de lenguajes de programacin pueden interpretar o compilar el cdigo fuente original en una ms compacta forma intermedia y despus traducir eso al cdigo de mquina (ej. Perl, Python, MATLAB, y Ruby). Algunos aceptan los archivos fuente guardados en esta representacin intermedia (ej. Python, UCSD Pascal y Java). Comparando su actuacin con la de un ser humano, un compilador equivale a un traductor profesional que, a partir de un texto, prepara otro independiente traducido a otra lengua, mientras que un intrprete corresponde al intrprete humano, que traduce de viva voz las palabras que oye, sin dejar constancia por escrito. En la actualidad, uno de los entornos ms comunes de uso de los intrpretes informticos es Internet, debido a la posibilidad que estos tienen de ejecutarse independientemente de la plataforma.

Un compilador
Un compilador es un programa informtico que traduce un programa escrito en un lenguaje de programacin a otro lenguaje de programacin, generando un programa equivalente que la mquina ser capaz de interpretar. Usualmente el segundo lenguaje es lenguaje de mquina, pero tambin puede ser un cdigo intermedio (bytecode), o simplemente texto. Este proceso de traduccin se conoce como compilacin.1 Un compilador es un programa que permite traducir el cdigo fuente de un programa en lenguaje de alto nivel, a otro lenguaje de nivel inferior (tpicamente lenguaje de mquina). De esta manera un programador puede disear un programa en un lenguaje mucho ms cercano a como piensa un ser humano, para luego compilarlo a un programa ms manejable por una computadora.

Partes de un compilador
La construccin de un compilador involucra la divisin del proceso en una serie de fases que variar con su complejidad. Generalmente estas fases se agrupan en dos tareas: el anlisis del programa fuente y la sntesis del programa objeto.

Anlisis: Se trata de la comprobacin de la correccin del programa fuente, e incluye las fases correspondientes al Anlisis Lxico (que consiste en la descomposicin del programa fuente en componentes lxicos), Anlisis Sintctico (agrupacin de los componentes lxicos en frases gramaticales ) y Anlisis Semntico (comprobacin de la validez semntica de las sentencias aceptadas en la fase de Anlisis Sintctico). Sntesis: Su objetivo es la generacin de la salida expresada en el lenguaje objeto y suele estar formado por una o varias combinaciones de fases de Generacin de Cdigo (normalmente se trata de cdigo intermedio o de cdigo objeto) y de Optimizacin de Cdigo (en las que se busca obtener un cdigo lo ms eficiente posible).

Alternativamente, las fases descritas para las tareas de anlisis y sntesis se pueden agrupar en Front-end y Back-end:

Front-end: es la parte que analiza el cdigo fuente, comprueba su validez, genera el rbol de derivacin y rellena los valores de la tabla de smbolos. Esta parte suele ser independiente de la plataforma o sistema para el cual se vaya a compilar, y est compuesta por las fases comprendidas entre el Anlisis Lxico y la Generacin de Cdigo Intermedio. Back-end: es la parte que genera el cdigo mquina, especfico de una plataforma, a partir de los resultados de la fase de anlisis, realizada por el Front End.

Esta divisin permite que el mismo Back End se utilice para generar el cdigo mquina de varios lenguajes de programacin distintos y que el mismo Front End que sirve para analizar el cdigo fuente de un lenguaje de programacin concreto sirva para generar cdigo mquina en varias plataformas distintas. Suele incluir la generacin y optimizacin del cdigo dependiente de la mquina. El cdigo que genera el Back End normalmente no se puede ejecutar directamente, sino que necesita ser enlazado por un programa enlazador (linker)

Das könnte Ihnen auch gefallen