domingo, 26 de abril de 2015

Algoritmos

Algoritmos 
Algoritmos y programas   
World Of Warcraft, WoW Glowing Hand Armor Un algoritmo es un conjunto ordenado y finito de operaciones que permite hallar la solución de un problema (Diccionario RAE) Para programar de forma eficaz es necesario aprender a resolver problemas de una forma sistemática y rigurosa. Sólo se puede llegar a realizar un buen programa si previamente se ha diseñado un algoritmo Un algoritmo puede ser utilizado para codificar programas en distintos lenguajes

Los algoritmos son independientes de los lenguajes de programación. Un lenguaje de programación permite expresar un algoritmo para que sea ejecutado por un ordenador  

Un algoritmo describe los datos de entrada, el proceso y los datos de salida 
1. Entrada: Datos que utiliza el algoritmo para su ejecución 
2. Proceso: Reglas y operaciones del algoritmo para resolver un problema 
3. Salida: Resultados del proceso

Algoritmos y programas  
Un algoritmo debe ser claro y preciso, debe especificar las acciones a realizar y el orden de realización Un algoritmo debe tener un número finito de pasos y, cada vez que se realice con los mismos datos de entrada, debe dar el mismo resultado

Las fases de desarrollo de un programa 
1. Análisis. Consiste en entender el problema que se quiere resolver ¿Qué debemos hacer? 
2. Diseño. Plan para resolver el problema ¿Cómo hacer? 
3. Programación. Traducción de un algoritmo en un programa Java o de cualquier otro lenguaje 
4. Validación del programa. Evaluación de los resultados del programa

Constantes y variables  
Las constantes y las variables son valores almacenados en una dirección de memoria. El valor almacenado debe tener un tipo de dato: entero, decimal, carácter, etc. El nombre que se utiliza para hacer referencia a una constante o una variable se denomina identificador El valor de una constante no cambia durante la ejecución de un programa. Por ejemplo pi = 3,1416 Las variables almacenan los datos utilizados por los programas. El valor de una variable puede cambiar durante la ejecución de un programa

Identificadores  
Representan las variables de un programa e identifican la dirección de memoria donde se almacena una variable El identificador de una variable debe comenzar con una letra. Después de la primera letra pueden aparecer más letras o números Un identificador no puede tener espacios en blanco a1 es un identificador válido la no es un identificador válido

Herramientas para diseño de algoritmos  
Para diseñar un algoritmo se dispone de dos herramientas: los diagramas de flujo y el pseudocódigo  
Un diagrama de flujo representa gráficamente un algoritmo. 
Muestra la secuencia de operaciones a realizar para resolver un problema. 
Cada símbolo de un diagrama de flujo representa una acción  
El pseudocódigo es un lenguaje que describe algoritmos con una sintaxis similar a un lenguaje de programación. 
Normalmente se escribe en inglés o en español. La traducción de pseudocódigo a un lenguaje de programación es muy sencilla

Diagramas de flujo 
Diagramas de flujo y procesos  
Un diagrama de flujo muestra las actividades y las decisiones que definen un proceso Un diagrama de flujo tiene un punto de inicio y un número finito de puntos de finalización. Puede dividirse en “carriles” para identificar a los responsables de realizar cada actividad Un diagrama de flujo es una herramienta útil en las fases de análisis y diseño de software

Diagramas de flujo Simbología El inicio y el final de un diagrama de flujo se representa con un rectángulo con los bordes redondeados  

 Los procesos se representan con rectángulos



Diagramas de flujo Simbología  

Los controles del flujo se representan con rombos. Dentro del rombo se indica la condición o expresión lógica a evaluar


Diagramas de flujo 
Simbología  
Para indicar un punto de unión de dos o más flujos se utiliza un conector

La entrada y salida de datos se representa con el símbolo

Diagramas de flujo Simbología Para indicar un punto de unión dos o más flujos de ejecución se utiliza el flujo se utiliza un “join”. El flujo no continua hasta que todos los flujos de entrada hayan finalizado



Para iniciar dos o más flujos en paralelo se utiliza un “fork”


viernes, 24 de abril de 2015

Algoritmos y Programas

Qué son los operadores y los operando, sus tipos y las prioridades de ejecución de los mismos.


Operadores

Son elementos que relacionan de forma diferente, los valores de una o mas variables y/o constantes. Es decir, los operadores nos permiten manipular valores. 





Operadores Aritméticos

Los operadores aritméticos permiten la realización de operaciones matemáticas con los valores (variables y constantes).

Los operadores aritméticos pueden ser utilizados con tipos de datos enteros o reales. Si ambos son enteros, el resultado es entero; si alguno de ellos es real, el resultado es real.






Operadores Aritméticos
+ Suma
- Resta
* Multiplicación
/ División
mod Modulo (residuo de la división entera)

Ejemplos:


Expresión
7 / 2
3.5
12 mod 7 


Resultado 
5
4 + 2 * 5
14


Prioridad de los Operadores Aritméticos

Todas las expresiones entre paréntesis se evalúan primero. Las expresiones con paréntesis anidados se evalúan de dentro a fuera, el paréntesis más interno se evalúa primero.
Dentro de una misma expresión los operadores se evalúan en el siguiente orden:

^ Exponenciación
*, /, mod Multiplicación, división, modulo.
+, - Suma y resta.Los operadores en una misma expresión con igual nivel de prioridad se evalúan de izquierda a derecha.

Ejemplos:
4 + 2 * 5 = 14
23 * 2 / 5 = 9.2
3 + 5 * (10 - (2 + 4)) = 23
2.1 * (1.5 + 12.3) = 2.1 * 13.8 = 28.98

Operadores Relacionales 
World Of Warcraft, WoW Glowing Hand Armor
Se utilizan para establecer una relación entre dos valores. Luego compara estos valores entre si y esta comparación produce un resultado de certeza o falsedad (verdadero o falso).
Los operadores relacionales comparan valores del mismo tipo (numéricos o cadenas). Estos tienen el mismo nivel de prioridad en su evaluación.
Los operadores relaciónales tiene menor prioridad que los aritméticos.

Tipos de operadores Relacionales
> Mayor que
< Menor que
> = Mayor o igual que
< = Menor o igual que
< > Diferente
= Igual

Ejemplos:
Si a = 10, b = 20, c = 30
a + b > c
Falso
Operador Not Operador Not a - b < c
Verdadero

a - b = c
Falso

a * b < > c
Verdadero

Ejemplos no lógicos:
a < b < c
10 < 20 < 30
T > 5 < 30
(no es lógico porque tiene diferentes operandos)

Operadores Lógicos

Estos operadores se utilizan para establecer relaciones entre valores lógicos. Estos valores pueden ser resultado de una expresión relacional.

Tipos de operadores Lógicos
And = Y
Or = O
Not = Negación

Ejemplo:
Para los siguientes ejemplos T significa verdadero y F falso.




Operando
T 
F 
Resultado
F
T


Prioridad de los Operadores Lógicos
Not
And
Or

Prioridad de los Operadores en General
( )
^
*, /, Mod, Not
+, -, And
>, <, > =, < =, < >, =, Or

Ejemplos:
Sea: a = 10 b = 12 c = 13 d =10





Tecnicas de diseño

Existen dos principales tecnicas de diseño de algoritmos de programación, el Top Down y el Bottom Up.

Top Down

También conocida como de arriba-abajo y consiste en establecer una serie de niveles de mayor a menor complejidad (arriba-abajo) que den solución al problema. Consiste en efectuar una relación entre las etapas de la estructuración de forma que una etapa jerárquica y su inmediato inferior se relacionen mediante entradas y salidas de información. 


Este diseño consiste en una serie de descomposiciones sucesivas del problema inicial, que recibe el refinamiento progresivo del repertorio de instrucciones que van a formar parte del programa.

La utilización de la técnica de diseño Top-Down tiene los siguientes objetivos básicos:

Simplificación del problema y de los subprogramas de cada descomposición.
Las diferentes partes del problema pueden ser programadas de modo independiente e incluso por diferentes personas.
El programa final queda estructurado en forma de bloque o módulos lo que hace mas sencilla su lectura y mantenimiento.

Bottom Up

El diseño ascendente se refiere a la identificación de aquellos procesos que necesitan computarizarse con forme vayan apareciendo, su análisis como sistema y su codificación, o bien, la adquisición de paquetes de software para satisfacer el problema inmediato.

Cuando la programación se realiza internamente y haciendo un enfoque ascendente, es difícil llegar a integrar los subsistemas al grado tal de que el desempeño global, sea fluido.

Los problemas de integración entre los subsistemas son sumamente costosos y muchos de ellos no se solucionan hasta que la programación alcanza la fecha limite para la integración total del sistema.

En esta fecha, ya se cuenta con muy poco tiempo, presupuesto o paciencia de los usuarios, como para corregir aquellas delicadas interfaces, que en un principio, se ignoran.
Aunque cada subsistema parece ofrecer lo que se requiere, cuando se contempla al sistema como una entidad global, adolece de ciertas limitaciones por haber tomado un enfoque ascendente.
Uno de ellos es la duplicación de esfuerzos para acceder el software y mas aún al introducir los datos.
Otro es, que se introducen al sistema muchos datos carentes de valor.
Un tercero y tal vez el mas serio inconveniente delenfoque ascendente, es que los objetivos globales de la organización no fueron considerados y en consecuencia no se satisfacen.

Entonces…
La diferencia entre estas dos técnicas de programación se fundamenta en el resultado que presentan frente a un problema dado.
Imagine una empresa, la cual se compone de varios departamentos (contabilidad, mercadeo, …), en cada uno de ellos se fueron presentando problemas a los cuales se le dieron una solución basados en un enfoque ascendente (Bottom Up): creando programas que satisfacían sólo el problema que se presentaba.


Cuando la empresa decidió integrar un sistema global para suplir todas las necesidades de todos los departamentos se dio cuenta que cada una de las soluciones presentadas no era compatible la una con la otra, no representaba una globalidad, característica principal de los sistemas.

Como no hubo un previo análisis, diseño de una solución a nivel global en todos sus departamentos, centralización de información, que son características propias de un diseño Descendente (Top Down) y características fundamentales de los sistemas; la empresa no pudo satisfacer su necesidad a nivel global.
La creación de algoritmos es basado sobre la técnica descendente, la cual brinda el diseño ideal para la solución de un problema.

¿QUÉ ES ALGORITMO?

¿QUÉ ES ALGORITMO?

La palabra algoritmo se deriva de la traducción al latín de la palabra árabe alkhowarizmi, nombre de un matemático y astrónomo árabe que escribió un tratado sobre manipulación de números y ecuaciones en el siglo IX.

Un algoritmo es una serie de pasos organizados que describe el proceso que se debe seguir, para dar solución a un problema específico.

¿TIPOS DE ALGORITMOS…?

Existen dos tipos y son llamados así por su naturaleza:

Cualitativos: Son aquellos en los que se describen los pasos utilizando palabras.
Cuantitativos: Son aquellos en los que se utilizan cálculos numéricos para definir los pasos del proceso.

Lenguajes Algorítmicos

Un Lenguaje algorítmico es una serie de símbolos y reglas que se utilizan para describir de manera explícita un proceso.

Tipos de Lenguajes Algorítmicos

Gráficos: Es la representación gráfica de las operaciones que realiza un algoritmo (diagrama de flujo).















No Gráficos: Representa en forma descriptiva las operaciones que debe realizar un algoritmo (pseudocodigo).

INICIO
Edad: Entero
ESCRIBA “cual es tu edad?”
Lea Edad
SI Edad >=18 entonces
ESCRIBA “Eres mayor de Edad”
FIN SI
ESCRIBA “fin del algoritmo”
FIN


Metodología para la creación de algoritmos

Ahora que ya sabemos qué es un algoritmo, vamos a estudiar la metodología para la solución de un problema mediante un ordenador. 


La creación de un algoritmo y su programación es una etapa, pero como programador debes realizar varios pasos antes y después.El computador es una máquina que por sí sola no puede hacer nada, necesita ser programada, es decir, introducirle instrucciones u ordenes que le digan lo que tiene que hacer. 

Un programa es la solución a un problema inicial, así que todo comienza allí: en el Problema. El proceso de programación es el siguiente: Dado un determinado problema el programador debe idear una solución y expresarla usando un algoritmo (aquí es donde entra a jugar); luego de esto, debe codificarlo en un determinado lenguaje de programación y por último ejecutar el programa en el computador el cual refleja una solución al problema inicial. 

Esto es a grandes rasgos lo que hace el programador de computadores.

La parte que corresponde a este manual es la de: “Dado un determinado problema debemos idear una solución y expresarla usando un ALGORITMO!”.

Metodología para la solución de problemas por medio de computadora

DEFINICIÓN DEL PROBLEMA
Esta fase está dada por el enunciado del problema, el cual requiere una definición clara y precisa. Es importante que se conozca lo que se desea que realice la computadora; mientras esto no se conozca del todo no tiene mucho caso continuar con la siguiente etapa.

ANÁLISIS DEL PROBLEMA
Una vez que se ha comprendido lo que se desea de la computadora, es necesario definir:
Los datos de entrada.
Cual es la información que se desea producir (salida)
Los métodos y fórmulas que se necesitan para procesar los datos.Una recomendación muy práctica es el de colocarse en el lugar de la computadora y analizar qué es lo que se necesita que se ordene y en qué secuencia para producir los resultados esperados.

DISEÑO DEL ALGORITMO
Las características de un buen algoritmo son:
Debe tener un punto particular de inicio.
Debe ser definido, no debe permitir dobles interpretaciones.
Debe ser general, es decir, soportar la mayoría de las variantes que se puedan presentar en la definición del problema.
Debe ser finito en tamaño y tiempo de ejecución.

Prueba de escritorio o Depuración

Se denomina prueba de escritorio a la comprobación que se hace de un algoritmo para saber si está bien hecho. Esta prueba consiste en tomar datos específicos como entrada y seguir la secuencia indicada en el algoritmo hasta obtener un resultado, el análisis de estos resultados indicará si el algoritmo está correcto o si por el contrario hay necesidad de corregirlo o hacerle ajustes.

Entidades primitivas para el desarrollo de algoritmos

Para el proceso de Algoritmos es necesario aprender a desarrollar un conjunto de elementos.

Todo estos elementos con los cuales se construyen dichos algoritmos se basan en una disciplina llamada: Programación Estructurada.

Empecemos por conocer las reglas para cambiar fórmulas matemáticas a expresiones válidas para la computadora, además de diferenciar constantes e identificadores y tipos de datos simples.

Tipos De Datos

Todos los datos tienen un tipo asociado con ellos. Un dato puede ser un simple carácter, tal como ‘b’, un valor entero tal como 35. El tipo de dato determina la naturaleza del conjunto de valores que puede tomar una variable. 


Tipos de Datos Simples

Datos Numéricos:
Permiten representar valores escalares de forma numérica, esto incluye a los números enteros y los reales. Este tipo de datos permiten realizar operaciones aritméticas comunes.

Datos lógicos:
Son aquellos que solo pueden tener dos valores (cierto o falso) ya que representan el resultado de una comparación entre otros datos (numéricos o alfanuméricos).

Datos alfanuméricos (string):
Es una secuencia de caracteres alfanuméricos que permiten representar valores identificables de forma descriptiva, esto incluye nombres de personas, direcciones, etc. Es posible representar números como alfanuméricos, pero estos pierden su propiedad matemática, es decir no es posible hacer operaciones con ellos. Este tipo de datos se representan encerrados entre comillas.

Identificadores
Los identificadores representan los datos de un programa (constantes, variables, tipos de datos). Un identificador es una secuencia de caracteres que sirve para identificar una posición en la memoria de la computadora, que permite acceder a su contenido.
Ejemplo:



» Nombre


» Num_hrs


» Calif2

Reglas para formar un identificador 
Debe comenzar con una letra (A a Z, mayúsculas o minúsculas) y no deben contener espacios en blanco.
Letras, dígitos y caracteres como la subraya ( _ ) están permitidos después del primer carácter.
La longitud de identificadores puede ser de varios caracteres. Pero es recomendable una longitud promedio de 8 caracteres.
El nombre del identificador debe dar una idea del valor que contiene.

Constantes, variables y expresiones
Qué son las constantes, las variables y las expresiones en la programación así como su clasificación.
Constantes

Una constante es un dato numérico o alfanumérico que no cambia durante la ejecución del programa.
Ejemplo:
pi = 3.1416

Variable

Es un espacio en la memoria de la computadora que permite almacenar temporalmente un dato durante la ejecución de un proceso, su contenido puede cambiar durante la ejecución del programa.


Para poder reconocer una variable en la memoria de la computadora, es necesario darle un nombre con el cual podamos identificarla dentro de un algoritmo.

Ejemplo:
area = pi * radio ^ 2
Las variables son : el radio, el area y la constate es pi

Clasificación de las Variables




Por su contenido

Variables Numéricas: Son aquellas en las cuales se almacenan valores numéricos, positivos o negativos, es decir almacenan números del 0 al 9, signos (+ y -) y el punto decimal.

Ejemplo:
iva = 0.15 pi = 3.1416 costo = 2500

Variables Lógicas: Son aquellas que solo pueden tener dos valores (cierto o falso) estos representan el resultado de una comparación entre otros datos.

Variables Alfanuméricas: Esta formada por caracteres alfanuméricos (letras, números y caracteres especiales).

Ejemplo:
letra = ’a’ apellido = ’lopez’ direccion = ’Av. Libertad #190’
Por su uso
Variables de Trabajo: Variables que reciben el resultado de una operación matemática completa y que se usan normalmente dentro de un programa.

Ejemplo:
Suma = a + b /c

Contadores: Se utilizan para llevar el control del numero de ocasiones en que se realiza una operación o se cumple una condición. Con los incrementos generalmente de uno en uno.

Acumuladores: Forma que toma una variable y que sirve para llevar la suma acumulativa de una serie de valores que se van leyendo o calculando progresivamente.Expresiones

Las expresiones son combinaciones de constantes, variables, símbolos de operación, paréntesis y nombres de funciones especiales.

Por ejemplo:


a + (b + 3) / c 
World Of Warcraft, WoW Glowing Hand Armor Cada expresión toma un valor que se determina tomando los valores de las variables y constantes implicadas y la ejecución de las operaciones indicadas. 



Una expresión consta de operadores y operandos. Según sea el tipo de datos que manipulan, se clasifican las expresiones en:


Aritméticas


Relacionales

Lógicas

Algoritmos 2

Algoritmos y programas

¿Qué es un algoritmo?

Por algoritmo, se entiende a un conjunto finito de instrucciones que se deben seguir para resolver un problema. No obstante, desde el punto de vista de la programación de ordenadores, la definición del algoritmo como la especificación de una serie de pasos, es incompleta. Debe observarse que los ordenadores son equipos que tienen limitaciones físicas en cuanto a capacidad de almacenamiento y procesamiento. Por consiguiente debemos refinar un poco más nuestra definición de algoritmo para hacerla aplicable de manera efectiva en el ámbito de la informática.

El algoritmo es un conjunto de pasos, instrucciones o acciones que se deben seguir para resolver un problema. Existen una gran cantidad de algoritmos, hay que coger el más efectivo. Hay dos tipos de algoritmos que son los cualitativos y cuantitativos, cualitativos son todos aquellos pasos o instrucciones descritos por medio de palabras que sirven para llegar a la obtencion de una respuesta o solucion de un problema, y cuantitativos son todos aquellos pasos o instrucciones que involucran calculos numéricos para llegar a un resultado sastifactorio.


World Of Warcraft, WoW Glowing Hand Armor Características:
  • Tiene que ser preciso.
  • Tiene que estar bien definido.
  • Tiene que ser finito.
  • La programación es adaptar el algoritmo al ordenador.
  • El algoritmo es independiente según donde lo implemente.
Definición: Un algoritmo se entiende como una sucesión finita de pasos que debe cumplir las siguientes especificaciones:

Cada paso del algoritmo debe estar bien definido: Esto significa que la definición de un paso debe ser suficientemente clara, para que una persona pueda entenderla y realizarla. 
Si bien no se puede dar un criterio determinístico para decidir si un paso está bien definido, debemos apelar al sentido común para decidir que un paso está especificado sin ambigüedades.

Un algoritmo debe tener un principio y un fin: Un programa es un algoritmo escrito con un objetivo: conseguir un resultado. No tiene sentido crear un programa que espere ~ segundos (infinitos segundos) y luego escriba en pantalla "Hola Mundo!", del mismo modo que un algoritmo debe tener un principio bien definido (tampoco tiene sentido el algoritmo "haz nada, y luego escribe Hola Mundo!")

Modelos computacionales

Un modelo computacional es un modelo matemático en las ciencias de la computación que requiere extensos recursos computacionales para estudiar el comportamiento de un sistema complejo por medio de la simulación por computadora. 

El sistema bajo estudio es a menudo un sistema complejo no lineal para el cual las soluciones analíticas simples e intuitivas no están fácilmente disponibles. En lugar de derivar una solución analítica matemática para el problema, la experimentación es hecha con el modelo cambiando los parámetros del sistema en la computadora, y se estudian las diferencias en el resultado de los experimentos. Las teorías de la operación del modelo se pueden derivar/deducir de estos experimentos de computacionales.

Ejemplos de modelos de computacionales comunes son modelos de el pronóstico del tiempo, modelos del Earth Simulator, modelos de simulador de vuelo, modelos de plegamiento molecular de proteínas, y modelos de red neuronal.

Se considera a los algoritmos al conjunto de pasos ordenados, que permiten resolver un problema bajo una secuencia lógica, es decir, que tenga inicio y fin (sentido concreto).


Programas: Algoritmos para ser ejecutados por un ordenador

Un ordenador o computadora está, desde que se enciende hasta que se apaga totalmente, ejecutando un algoritmo. Por lo general, estos algoritmos, escritos para que los entienda una máquina, terminan siendo vagos y confusos para la mayoría de quienes no han estudiado programación. 

Una máquina no puede entender "escribe Hola Mundo!" porque no sabe lo que es "escribe" ni lo que es una letra o un espacio, ni lo que es una pantalla. En cambio, puede entender "mov eax, 0x23afb31" (escribir en el registro eax el número 0x23afb31), aunque nosotros no. Un ordenador es solo un circuito electrónico, no funciona a base de magia ni nada por el estilo.

Debido a lo dificil que es escribir en lenguaje máquina, e incluso en ensamblador, se crearon diferentes lenguajes de programación, más o menos parecidos al inglés actual y a cómo se redacta un algoritmo. 

Estos lenguajes proveen de cosas tan complejas para una máquina como los bucles for. Los compiladores se encargan de traducir esos ficheros al lenguaje ensamblador que corresponda, el ensamblador de traducirlos a lenguaje máquina y el enlazador de juntar todo ese código máquina en un solo archivo, el programa. 

Y el microprocesador, se encarga de ir encendiendo o apagando transistores según lo que le diga el código máquina. Es facil entender el lenguaje de alto nivel en comparacion al lenguaje maquina pero de la evolucion surgieron.

¿Qué instrucciones ejecuta un ordenador?Lenguaje de máquina

Cada tipo de microprocesador contiene un conjunto de instrucciones que realizan ciertas operaciones sobre una o más palabras de bits; las instrucciones van también codificadas en bits. No queremos hacer aquí una discusión sobre arquitectura de ordenadores, por lo que con esto debe valer por ahora.

Se entiende que escribir sólo con dos teclas, el 0 y el 1, es incómodo. Históricamente, a la hora de diseñar un algoritmo para que el ordenador ejecutara, se escribía mediante unas etiquetas memotécnicas; éste fue el origen del lenguaje ensamblador. 

Por ejemplo quizás en una cierta arquitectura la instrucción de borrado de memoria (Memory Clear, en inglés) corresponda al código 010. Pronto surgieron programas que leían, siguiendo el ejemplo, MC, y lo sustituían por 010.

Lenguaje ensamblador

El código máquina tenía dos grandes inconvenientes para los programadores:
las instrucciones eran difíciles de recordar, ya que no guardaban relación con la operación que se está realizando.
puede haber, y de hecho hay, diferencias entre las instrucciones de un procesador a otro.

Todo esto ha llevado a "poner nombre" a las instrucciones de código máquina de manera que a una secuencia concreta de bits que realiza una operación se le pone un nombre sencillo que identifique la operación. 

Esta traducción a un lenguaje más sencillo para las personas resulta en una mayor comodidad para el programador, además el proceso de traducción inverso de lenguaje ensamblador a código máquina puede ser realizado por un sencillo programa.

Programación para seres humanos

Lenguajes de alto nivel


Sobre este lenguaje ensamblador inicial se fueron construyendo otros lenguajes de programación de más alto nivel; esto significa que ocultan ciertos aspectos de manera que el programador no se ha de preocupar sobre si en la máquina que quiere que se ejecute el algoritmo el MC corresponde a la instrucción 101 o 010. 

Se produce, por tanto, una abstracción de datos, muy deseable para poder utilizar el trabajo de otros para avanzar un paso más en vez de tener que "reinventar la rueda", como se suele decir. 

Estos textos en los que se codifican los algoritmos son los códigos fuente; siguen las reglas sintácticas de un determinado lenguaje de programación. Existen numerosos lenguajes de programación, y se utiliza uno u otro según sus características se adecúen más o menos a la resolución de nuestro problema.

Traductores e intérpretes

Tras la escritura del algoritmo, un compilador o un intérprete (otros programas) transformarán el texto en código máquina que el procesador es capaz de ejecutar.

Toda esta abstracción permite resolver problemas alejados de sumar números binarios, como pueden ser la consulta de esta misma enciclopedia o jugar a un videojuego en 3D.


Lenguajes interpretados vs. lenguajes compilados

Los lenguajes interpretados son como respuesta a la dificultad de manejo de los compilados. Un lenguaje compilado es sólo apto para un sistema operativo o formato de ejecutable (en GNU/Linux y Unix System V es ELF, en Windows o incluso en BSD es muy diferente), y es tedioso de manejar: 

para comprobar bugs o errores el computador debe:
Compilar cada uno de los ficheros de código.
Ensamblarlos en ficheros objeto.
Enlazar los ficheros objeto.
Volverlos a ensamblar.

Todo eso no es gran derroche de recursos para un ordenador medio actualmente, pero dura sus 10 o 15 segundos. En cambio, con un lenguaje interpretado, el programa intérprete analiza el fichero de código y lo va ejecutando en tiempo real, sin compilarlo ni ensamblarlo. 

Otra de las ventajas de los lenguajes interpretados es que son multiplataforma: un programa en Perl, por ejemplo, no debe ser compilado dos veces (una para Unix y otra para Windows). Con que haya diferentes versiones del intérprete en cada uno de esos ordenadores, específicamente compilados para ellos, basta.

Sus desventajas:
Consume muchos recursos de memoria, sobre todo RAM.
Se depende del intérprete: si no tienes instalado el intérprete que corresponda, no podrás ejecutar el programa.

Ejemplos de lenguajes interpretados son PHP, Perl, Python, Tcl/Tk, BASIC, LISP (en algunas de sus versiones).


Algoritmos definicion

Algoritmo
World Of Warcraft, WoW Glowing Hand Armor En matemáticas, lógica, ciencias de la computación y disciplinas relacionadas, un algoritmo (del griego y latín, dixit algorithmus y este a su vez del matemático persa Al-Juarismi) es un conjunto prescrito de instrucciones o reglas bien definidas, ordenadas y finitas que permite realizar una actividad mediante pasos sucesivos que no generen dudas a quien deba realizar dicha actividad. Dados un estado inicial y una entrada, siguiendo los pasos sucesivos se llega a un estado final y se obtiene una solución. Los algoritmos son el objeto de estudio de la algoritmia.

En la vida cotidiana, se emplean algoritmos frecuentemente para resolver problemas. Algunos ejemplos son los manuales de usuario, que muestran algoritmos para usar un aparato, o las instrucciones que recibe un trabajador por parte de su patrón. Algunos ejemplos en matemática son el algoritmo de multiplicación, para calcular el producto, el algoritmo de la división para calcular el cociente de dos números, el algoritmo de Euclides para obtener el máximo común divisor de dos enteros positivos, o el método de Gauss para resolver un sistema lineal de ecuaciones.




















Definición formal

En general, no existe ningún consenso definitivo en cuanto a la definición formal de algoritmo. Muchos autores los señalan como listas de instrucciones para resolver un cálculo o un problema abstracto, es decir, que un número finito de pasos convierten los datos de un problema (entrada) en una solución (salida). 


Sin embargo cabe notar que algunos algoritmos no necesariamente tienen que terminar o resolver un problema en particular. Por ejemplo, una versión modificada de la criba de Eratóstenes que nunca termine de calcular números primos no deja de ser un algoritmo.

A lo largo de la historia varios autores han tratado de definir formalmente a los algoritmos utilizando modelos matemáticos. 


Esto fue realizado por Alonzo Church en 1936 con el concepto de "calculabilidad efectiva" basada en su cálculo lambda y por Alan Turing basándose en la máquina de Turing. Los dos enfoques son equivalentes, en el sentido en que se pueden resolver exactamente los mismos problemas con ambos enfoques.

Sin embargo, estos modelos están sujetos a un tipo particular de datos como son números, símbolos o gráficas mientras que, en general, los algoritmos funcionan sobre una vasta cantidad de estructuras de datos.

En general, la parte común en todas las definiciones se puede resumir en las siguientes tres propiedades siempre y cuando no consideremos algoritmos paralelos:

Tiempo secuencial.
Un algoritmo funciona en tiempo discretizado –paso a paso–, definiendo así una secuencia de estados "computacionales" por cada entrada válida (laentrada son los datos que se le suministran al algoritmo antes de comenzar).

Estado abstracto. 
Cada estado computacional puede ser descrito formalmente utilizando una estructura de primer orden y cada algoritmo es independiente de su implementación (los algoritmos son objetos abstractos) de manera que en un algoritmo las estructuras de primer orden son invariantes bajo isomorfismo.

Exploración acotada. 
La transición de un estado al siguiente queda completamente determinada por una descripción fija y finita; es decir, entre cada estado y el siguiente solamente se puede tomar en cuenta una cantidad fija y limitada de términos del estado actual.

En resumen, un algoritmo es cualquier cosa que funcione paso a paso, donde cada paso se pueda describir sin ambigüedad y sin hacer referencia a una computadora en particular, y además tiene un límite fijo en cuanto a la cantidad de datos que se pueden leer/escribir en un solo paso. 

Esta amplia definición abarca tanto a algoritmos prácticos como aquellos que solo funcionan en teoría, por ejemplo el método de Newton y la eliminación de Gauss-Jordan funcionan, al menos en principio, con números de precisión infinita; sin embargo no es posible programar la precisión infinita en una computadora, y no por ello dejan de ser algoritmos.

En particular es posible considerar una cuarta propiedad que puede ser usada para validar la tesis de Church-Turing de que toda función calculable se puede programar en una máquina de Turing (o equivalentemente, en un lenguaje de programación suficientemente general):

Aritmetizabilidad. Solamente operaciones innegablemente calculables están disponibles en el paso inicial.

Medios de expresión de un algoritmo

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.

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

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.
Descripción formal. Se usa pseudocódigo para describir la secuencia de pasos que encuentran la solución.
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.

define algoritmo como un conjunto ordenado y finito de operaciones que permite hallar la solución de un problema. Método y notación en las distintas fórmulas del cálculo. El algoritmo constituye un método para resolver un problema mediante una secuencia de pasos a seguir. Dicha secuencia puede ser expresada en forma de diagrama de flujo con el fin de seguirlo de una forma más sencilla.

De acuerdo con el concepto anterior, el algoritmo podría estar incluido en la definición de programa de ordenador de la Ley de Propiedad Intelectual (TRLPI), al referirse a éste como toda secuencia de instrucciones o indicaciones destinadas a ser utilizadas, directa o indirectamente, en un sistema informático para realizar una función o una tarea o para obtener un resultado determinado, cualquiera que fuere su forma de expresión y fijación.

Sin embargo, ciertas características de los algoritmos hacen que no puedan ser calificados como programas de ordenador. (Ver recuadro) La consecuencia de estas características es la exclusión del algoritmo del ámbito de protección del derecho de autor, en la medida en que éste constituye una idea, un método de cálculo o una función, afectado por el artículo 96.4 del TRLPI.

Por otro lado, Preámbulo de la Directiva 91/250/CEE de 1991 sobre la protección jurídica de los programas de ordenador establece que: "en la medida en que la lógica, los algoritmos y los lenguajes de programación abarquen ideas y principios, estos últimos no estarán protegidos con arreglo a la presente Directiva."

Además, en un Memorandum de 1994 de la OMPI (WIPO) Organización Mundial de la Propiedad Intelectual, se manifestaba: "Es perfectamente cierto que el derecho de autor no protege los algoritmos, sino únicamente las expresiones concretas de los mismos. Precisamente por eso, el derecho de autor puede ofrecer una protección apropiada a los programas de ordenador, sin crear obstáculos infranqueables a la creación independiente de nuevos programas".

No obstante, existen excepciones a nivel jurisprudencial basadas en la doctrina del "look and feel", que establecen la existencia de plagio cuando se reproduce la estructura, secuencia y disposición de los datos integrados en un programa de ordenador. Estas excepciones podrían aplicarse en el caso de combinaciones de algoritmos o cuando el nivel de complejidad de un algoritmo fuese muy alto.+