Está en la página 1de 25

Algoritmo

En matemáticas, lógica, ciencias de la computación y disciplinas relacionadas,


un algoritmo (del latín, dixit algorithmus y este del griego arithmos, que significa
«número», quizá también con influencia del nombre del matemático persa Al-
Juarismi)1 es un conjunto de instrucciones o reglas definidas y no-ambiguas,
ordenadas y finitas que permite, típicamente, solucionar un problema, realizar un
cómputo, procesar datos y llevar a cabo otras tareas o actividades.2 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.1

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 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 de
ecuaciones lineales.

En términos de programación, un algoritmo es una secuencia de pasos lógicos


que permiten solucionar un problema. Los derechos de autor otorgan al
propietario el derecho exclusivo sobre el uso de la obra, con algunas
excepciones. Cuando alguien crea una obra original fija en un medio tangible,
automáticamente se convierte en el propietario de los derechos de autor de dicha
obra.

Se denomina algoritmo a un grupo finito de operaciones organizadas de manera


lógica y ordenada que permite solucionar un determinado problema. Se trata de
una serie de instrucciones o reglas establecidas que, por medio de una sucesión
de pasos, permiten arribar a un resultado o 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 de ecuaciones lineales.

Los algoritmos pueden ser expresados de muchas maneras, incluyendo el


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, los algoritmos son
independientes de los lenguajes de programación. En cada problema el
algoritmo puede escribirse y luego ejecutarse en un lenguaje de diferente
programación. El algoritmo es la infraestructura de cualquier solución, escrita
luego en cualquier lenguaje de programación.

Los algoritmos se pueden clasificar en cuatro tipos:

 Algoritmo computacional: Es un algoritmo que puede ser ejecutado en


una computadora. Ejemplo: Fórmula aplicada para un cálculo de la raíz
cuadrada de un valor x.
 Algoritmo no computacional: Es un algoritmo que no requiere de una
computadora para ser ejecutado. Ejemplo: Instalación de un equipo de
sonido.
 Algoritmo cualitativo: Un algoritmo es cualitativo cuando en sus pasos
o instrucciones no están involucrados cálculos numéricos. Ejemplos: Las
instrucciones para desarrollar una actividad física, encontrar un tesoro.
 Algoritmo cuantitativo: Un algoritmo es cuantitativo cuando en sus
pasos o instrucciones involucran cálculos numéricos. Ejemplo: Solución
de una ecuación de segundo grado.
Medios de expresión

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:

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

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.
Pseudocodigo
El pseudocódigo (falso lenguaje, el prefijo pseudo significa falso) es una
descripción de alto nivel de un algoritmo que emplea una mezcla de lenguaje
natural con algunas convenciones sintácticas propias de lenguajes de
programación, como asignaciones, ciclos y condicionales, aunque no está regido
por ningún estándar.

El pseudocódigo está pensado para facilitar a las personas el entendimiento de


un algoritmo, y por lo tanto puede omitir detalles irrelevantes que son necesarios
en una implementación. Programadores diferentes suelen utilizar convenciones
distintas, que pueden estar basadas en la sintaxis de lenguajes de programación
concretos. Sin embargo, el pseudocódigo, en general, es comprensible sin
necesidad de conocer o utilizar un entorno de programación específico, y es a la
vez suficientemente estructurado para que su implementación se pueda hacer
directamente a partir de él.

Así el pseudocódigo cumple con las funciones antes mencionadas para


representar algo abstracto los protocolos son los lenguajes para la
programación. Busque fuentes más precisas para tener mayor comprensión del
tema.

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:

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.

Lenguaje natural

Son aquellas lenguas que han sido generadas espontáneamente en un grupo de


hablantes con propósito de comunicarse, a diferencia de otras lenguas, como
puedan ser una lengua construida, los lenguajes de programación o los
lenguajes formales usados en el estudio de la lógica formal, especialmente la
lógica matemática.

Los algoritmos escritos en este lenguaje se caracterizan por seguir un proceso


de ejecución común y lógico, describiendo textualmente paso a paso cada una
de las actividades a realizar para resolver un problema determinado.

Los inconvenientes de escribir algoritmos en este lenguaje son: la ambigüedad,


la no universalidad y la amplitud del mismo lo cual genera errores y no puede ser
interpretado correctamente por el computador.

Pseudocódigo

Es una descripción de alto nivel de un algoritmo que emplea una mezcla de


lenguaje natural con algunas convenciones sintácticas propias de lenguajes de
programación, como asignaciones, ciclos y condicionales, aunque no está regido
por ningún estándar. Es utilizado para describir algoritmos en libros y
publicaciones científicas, y como producto intermedio durante el desarrollo de un
algoritmo, como los diagramas de flujo, aunque presentan una ventaja
importante sobre estos, y es que los algoritmos descritos en pseudocódigo
requieren menos espacio para representar instrucciones complejas.
El pseudocódigo está pensado para facilitar a las personas el entendimiento de
un algoritmo, y por lo tanto puede omitir detalles irrelevantes que son necesarios
en una implementación. Programadores diferentes suelen utilizar convenciones
distintas, que pueden estar basadas en la sintaxis de lenguajes de programación
concretos. Sin embargo, el pseudocódigo, en general, es comprensible sin
necesidad de conocer o utilizar un entorno de programación específico, y es a la
vez suficientemente estructurado para que su implementación se pueda hacer
directamente a partir de él.
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.

Diagramas estructurados (Nassi-Schneiderman)

 El diagrama estructurado N-S también conocido como diagrama de


chapin es como un diagrama de flujo en el que se omiten las flechas de
unión y las cajas son contiguas. Las acciones sucesivas se pueden
escribir en cajas sucesivas y como en los diagramas de flujo, se pueden
escribir diferentes acciones en una caja.
 Los diagramas estructurados, son una técnica que permite formular
algoritmos mediante una representación geométrica y de asignación de
espacios de un bloque específico.

Características de un algoritmo

1. Precisión
Las instrucciones y los pasos contenidos en un algoritmo deben ser precisos, es
decir, no deben dejar margen para ningún tipo de ambigüedad.

Esto se debe a que sus instrucciones deben poder seguirse y comprenderse


a cabalidad, o de lo contrario el diagrama de flujo en el que se inscribe no arrojará
el resultado correcto.

2. Definición

Todo algoritmo debe estar perfectamente definido, es decir, se lo debe seguir


cuantas veces sea necesario obteniendo cada vez siempre el mismo resultado.

De lo contrario, el algoritmo no será fiable y no servirá como guía en la toma de


decisiones.

3. Finitud

Los algoritmos deben ser finitos: deben terminar en algún momento o arrojar un
resultado al final de sus pasos.

Si el algoritmo se prolonga indefinidamente, regresando a algún punto inicial sin


poderse resolver jamás, estaremos en presencia de una paradoja o un “loop” de
repeticiones.

4. Legibilidad

La legibilidad de los algoritmos es clave, pues si su contenido es incomprensible


no podrán seguirse las instrucciones adecuadas. Esto implica una redacción
directa, clara y concisa del texto contenido en cada uno.

5. Partes de un algoritmo

Todo algoritmo presenta tres partes distintas: entrada, proceso y salida.

 Entrada. La instrucción inicial que da pie al algoritmo y que motiva su


lectura. Puede llamarse también inicio, cabecera o punto de partida.
 Proceso. Se trata de la elaboración puntual ofrecida por el algoritmo, el
cuerpo de sus claves para formular una instrucción. También puede
llamarse declaraciones.
 Salida. Por último, están las instrucciones puntuales dictaminadas por el
algoritmo, es decir, sus resoluciones o comandos. También puede
llamarse cuerpo, pie o fin.

6. Tipos de algoritmo

Existen diversas clasificaciones de los algoritmos, en base a distintas


características. Algunos pueden ser:

Según su sistema de signos. Conforme a la manera en que describen los


pasos a seguir, podemos hablar de:

 Algoritmos cualitativos. Emplean texto y caracteres verbales para impartir


sus instrucciones. Por ejemplo, una receta de cocina.
 Algoritmos cuantitativos. Emplean cálculos numéricos y operaciones
algebraicas. Por ejemplo, una multiplicación.

Según sus funciones. De acuerdo a las funciones del algoritmo, podemos


hablar de:

 Algoritmos de ordenamiento. Establecen una secuencia de algún tipo para


el ingreso de algún tipo de datos.
 Algoritmos de búsqueda. Como su nombre lo indica, permite recuperar de
una lista específica una serie de elementos determinados.
 Algoritmos de encaminamiento. Determinan qué proceso seguirá una
instrucción o cómo deberá transmitirse un conjunto de datos. Pueden ser
adaptativos (se adaptan al problema) o estáticos (siempre operan igual).

Según su estrategia. Conforme al método empleado para arrojar sus


resultados, podemos estar en presencia de:

 Algoritmos probabilísticos. Ofrecen un margen de probabilidad como


resultado, de modo que no hay total certeza de su precisión.
 Algoritmos heurísticos. Se emplean cuando los métodos tradicionales
fallan en arrojar una solución ya que abandonan algún objetivo para
alcanzar un resultado posible.
 Algoritmos cotidianos. Aquellos usados en la toma cotidiana de decisiones
y que pertenecen al ámbito de los más sencillos.
 Algoritmos de escalada. Modifican el proceso a medida que la solución es
insatisfactoria (no cumple con la entrada y salida) hasta aproximarse a lo
buscado.
 Algoritmos deterministas. Operan de manera lineal, de modo que sus
resultados pueden ser predichos y pueden aplicarse a procesos
controlados.

7. Ventajas y desventajas

El trabajo con algoritmos presenta las siguientes virtudes y flaquezas:

 Ventajas. Permiten el ordenamiento secuencial de los procesos y


disminuyen, por lo tanto, el rango posible de errores, ayudando a resolver
más rápido y más fácil los problemas planteados. Además, son precisos
y permiten ceñirse a una guía específica.
 Desventajas. Suelen requerir de conocimiento previo y sobre todo
técnico, ya que a menudo los algoritmos se expresan (excepto los más
cotidianos y sencillos) en un lenguaje adaptado al caso en cuestión. Por
otro lado, la confianza ciega en un método lógico para resolver los
problemas puede obviar soluciones creativas más innovadoras pero
impredecibles.

8. Pasos para formular un algoritmo

Para plantear un algoritmo adecuado es preciso seguir estos tres pasos:

 Enunciar el problema. Esto es clave, ya que la manera en que


planteemos el problema será el enfoque específico que nos servirá para
alcanzar una solución. Se debe recopilar datos, abordar el problema
desde una perspectiva amplia y a la vez puntual.
 Analizar la solución general. Se debe cotejar los datos previos con las
posibles soluciones y explorar las áreas de trabajo, fórmulas y otras
herramientas posibles. Luego, aproximarse a diversas tentativas de
solución.
 Elaborar el algoritmo. Una vez elegido el camino a seguir, se debe elegir
el tipo de algoritmo adecuado y plantearlo, para luego ponerlo a prueba y
determinar si es exactamente la solución deseada.

Las características fundamentales que debe cumplir todo algoritmo son:

 Un algoritmo debe ser preciso: tiene que indicar el orden de realización


de cada paso.
 Un algoritmo debe estar definido: Si se sigue un algoritmo dos veces, se
debe obtener el mismo resultado cada vez.
 Un algoritmo debe ser finito: el algoritmo se debe terminar en algún
momento; o sea, debe tener un número finito de pasos.
 Un algoritmo debe ser legible: El texto que lo describe debe ser claro, tal
que permita entenderlo y leerlo fácilmente.
 Un algoritmo debe definir tres partes: Entrada, Proceso y Salida.

Elementos para construir un algoritmo

Dado que un algoritmo es un conjunto de instrucciones elaboradas con la


finalidad de resolver un problema, los elementos que se utilizan en la
construcción de algoritmos son los siguientes:

 Comandos
 Datos
 Variables y contantes
 Operadores

Comandos o Palabras reservadas


Todos los lenguajes, naturales o computacionales, tienen palabras que denotan
una acción. Los comandos no son más que acciones que debe interpretar y
ejecutar el computador. Cada comando conserva una sintaxis determinada, es
decir la forma de utilizarlo.

Los lenguajes computacionales tienen en su repertorio comandos dirigidos al


procesamiento de archivos y datos, entre ellos: Inicio, Leer, Imprimir.

Datos

Un dato es un campo que puede convertirse en información. Un dato puede


significar un número, una letra, un signo ortográfico o cualquier símbolo que
represente una cantidad, una medida, una palabra o una descripción. La
importancia de los datos está en su capacidad de asociarse dentro de un
contexto para convertirse en información. Es decir, por si mismos los datos no
tienen capacidad de comunicar un significado y por tanto no pueden afectar el
comportamiento de quien los recibe. Para ser útiles, los datos deben convertirse
en información que ofrezca un significado, conocimiento, ideas o conclusiones.

Los datos simples pueden ser:

 Numéricos (Reales, Enteros)


 Lógicos
 Carácter (Char, String)

Variables y Constantes

Son espacios de memoria creados para contener valores que de acuerdo


a su naturaleza deseen mantenerse (Constantes) o que puedan variar
(Variables).

Constante
Es un dato que permanece con un valor, sin cambios, es decir constante, a lo
largo del desarrollo del algoritmo o a lo largo de la ejecución del programa. Se
utiliza cuando necesitamos que el valor de determinada variable se mantenga
durante la ejecución del programa o hasta tanto se requiera su cambio.

Variable

Es un dato cuyo valor puede variar a lo largo del desarrollo del algoritmo o en el
transcurso de la ejecución del programa.

Una variable descrita o declarada de un tipo determinado, sólo podrá co


ntener, valores de ese tipo. Una variable declarada numérica entera, no
podrá contener números reales. Se utiliza cuando el dato que contiene sufrirá
cambios o variará en la medida que cambien los valores que maneje.

Operadores aritméticos

Son utilizadas para construir fórmulas matemáticas. Las variables y const


antes utilizadas son de naturaleza numérica, es decir números enteros o
reales, y las operaciones a efectuar son de orden aritmético.

Operadores relacionales

Los operadores relacionales sirven para expresar las condiciones en los


algoritmos. Las variables y constantes utilizadas son de distinta naturaleza, el
resultado de una expresión lógica y relacional es de tipo lógico.

Operadores lógicos

Se utilizan en los programas cuando se requiere conocer o evaluar si lo


s valores de variables o constantes determinadas cumplen con ciertas
condiciones. De cumplirse o no, permiten un conjunto de instrucciones que
pueden o no ejecutarse. Una expresión lógica puede ser verdadera o falsa.
Partes de un algoritmo

Todo algoritmo debe obedecer a la estructura básica de un sistema, es decir:


entrada, proceso y salida. Donde:

Entrada de datos

Es la información dada al algoritmo o los valores con los que se va a trabajar


para ofrecer los resultados esperados.

Procesos

Son los cálculos o pasos necesarios para que a partir de un dato de entrada se
pueda llegar a un resultado de solución del problema o la situación planteada

Salida de datos

Son los resultados finales o la transformación de la entrada a través del proceso.

Traza de un algoritmo (corrida en frío)

La traza de un algoritmo se puede definir como la ejecución manual de forma


secuencial de las sentencias que lo componen. La traza de un algoritmo (o
programa) indica la secuencia de acciones (instrucciones) de su ejecución, así
como, el valor de las variables del algoritmo (o programa) después de cada
acción (instrucción).

La función principal que posee realizar la traza de un algoritmo es la de


comprobar que éste funciona correctamente o para realizar la etapa de
depuración en la que se intenta corregir errores, simplificar el algoritmo al
máximo e incrementar su eficacia y velocidad.

Programa

Un programa informático o programa de computadora es una secuencia de


instrucciones, escritas para realizar una tarea específica en una computadora.
Este dispositivo requiere programas para funcionar, por lo general, ejecutando
las instrucciones del programa en un procesador central. El programa tiene un
formato ejecutable que la computadora puede utilizar directamente para ejecutar
las instrucciones. El mismo programa en su formato de código fuente legible para
humanos, del cual se derivan los programas ejecutables (por ejemplo,
compilados), le permite a un programador estudiar y desarrollar sus algoritmos.
Una colección de programas de computadora y datos relacionados se conoce
como software.

Generalmente, el código fuente lo escriben profesionales conocidos como


programadores de computadora. Este código se escribe en un lenguaje de
programación que sigue uno de los siguientes dos paradigmas: imperativo o
declarativo, y que posteriormente puede ser convertido en un archivo ejecutable
(usualmente llamado un programa ejecutable o un binario) por un compilador y
más tarde ejecutado por una unidad central de procesamiento. Por otra parte,
los programas de computadora se pueden ejecutar con la ayuda de un intérprete,
o pueden ser empotrados directamente en hardware.

De acuerdo a sus funciones, los programas informáticos se clasifican en software


de sistema y software de aplicación, al hecho de alternar la ejecución simultánea
de varios programas se le conoce como multitarea.

Lenguaje de programación

Es un lenguaje formal diseñado para realizar procesos que pueden ser llevados
a cabo por máquinas como las computadoras.

Pueden usarse para crear programas que controlen el comportamiento físico y


lógico de una máquina, para expresar algoritmos con precisión, o como modo de
comunicación humana.

Está formado por un conjunto de símbolos y reglas sintácticas y semánticas 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 (de ser necesario) y se
mantiene el código fuente de un programa informático se le llama programación.
También la palabra programación se define como el proceso de creación de un
programa de computadora, mediante la aplicación de procedimientos lógicos, a
través de los siguientes pasos:

 El desarrollo lógico del programa para resolver un problema en particular.


 Escritura de la lógica del programa empleando un lenguaje de
programación específico (codificación del programa).
 Ensamblaje o compilación del programa hasta convertirlo en lenguaje de
máquina.
 Prueba y depuración del programa.
 Desarrollo de la documentación.

Elementos de los lenguajes de programación

Variables y vectores

Las variables son títulos asignados a espacios en memoria para almacenar datos
específicos. Son contenedores de datos y por ello se diferencian según el tipo
de dato que son capaces de almacenar. En la mayoría de lenguajes de
programación se requiere especificar un tipo de variable concreto para guardar
un dato específico. Por ejemplo, en Java, si deseamos guardar una cadena de
texto debemos especificar que la variable es del tipo String. Por otra parte, en
lenguajes como PHP este tipo de especificación de variables no es necesario.
Además, existen variables compuestas llamadas vectores. Un vector no es más
que un conjunto de bytes consecutivas en memoria y del mismo tipo guardadas
dentro de una variable contenedor. A continuación, un listado

Tipo de
Breve descripción
dato

Estas variables contienen un único carácter, es decir, una letra,


Char
un signo o un número.
Int Contienen un número entero.

Float Contienen un número decimal.

Contienen cadenas de texto, o lo que es lo mismo, es un vector


String
con varias variables del tipo Char.

Boolean Solo pueden contener un cero o un uno.

En el caso de variables booleanas, el cero es considerado para muchos


lenguajes como el literal falso ("False"), mientras que el uno se considera
verdadero ("True").

Condicionales

Las sentencias condicionales son estructuras de código que indican que, para
que cierta parte del programa se ejecute, deben cumplirse ciertas premisas; por
ejemplo: que dos valores sean iguales, que un valor exista, que un valor sea
mayor que otro... Estos condicionantes por lo general solo se ejecutan una vez
a lo largo del programa. Los condicionantes más conocidos y empleados en
programación son:

 If: Indica una condición para que se ejecute una parte del programa.
 Else if: Siempre va precedido de un "If" e indica una condición para que
se ejecute una parte del programa siempre que no cumpla la condición
del if previo y si se cumpla con la que el "else if" especifique.
 Else: Siempre precedido de "If" y en ocasiones de "Else If". Indica que
debe ejecutarse cuando no se cumplan las condiciones previas.

Bucles

Los bucles son parientes cercanos de los condicionantes, pero ejecutan


constantemente un código mientras se cumpla una determinada condición. Los
más frecuentes son:
 For: Ejecuta un código mientras una variable se encuentre entre 2
determinados parámetros.
 While: Ejecuta un código mientras que se cumpla la condición que solicita.

Hay que decir que a pesar de que existan distintos tipos de bucles, todos son
capaces de realizar exactamente las mismas funciones. El empleo de uno u otro
depende, por lo general, del gusto del programador.

Funciones

Las funciones se crearon para evitar tener que repetir constantemente


fragmentos de código. Una función podría considerarse como una variable que
encierra código dentro de sí. Por lo tanto, cuando accedemos a dicha variable
(la función) en realidad lo que estamos haciendo es ordenar al programa que
ejecute un determinado código predefinido anteriormente.

Todos los lenguajes de programación tienen algunos elementos de formación


primitivos para la descripción de los datos y de los procesos o transformaciones
aplicadas a estos datos (tal como la suma de dos números o la selección de un
elemento que forma parte de una colección). Estos elementos primitivos son
definidos por reglas sintácticas y semánticas que describen su estructura y
significado respectivamente.

Sintaxis

A la forma visible de un lenguaje de programación se le conoce como sintaxis.


La mayoría de los lenguajes de programación son puramente textuales, es decir,
utilizan secuencias de texto que incluyen palabras, números y puntuación, de
manera similar a los lenguajes naturales escritos. Por otra parte, hay algunos
lenguajes de programación que son más gráficos en su naturaleza, utilizando
relaciones visuales entre símbolos para especificar un programa.
La sintaxis de un lenguaje de programación describe las combinaciones posibles
de los símbolos que forman un programa sintácticamente correcto. El significado
que se le da a una combinación de símbolos es manejado por su semántica (ya
sea formal o como parte del código duro de la referencia de implementación).
Dado que la mayoría de los lenguajes son textuales, este artículo trata de la
sintaxis textual.

La sintaxis de los lenguajes de programación es definida generalmente utilizando


una combinación de expresiones regulares (para la estructura léxica) y la
Notación de Backus-Naur (para la estructura gramática).

Semántica estática

La semántica estática define las restricciones sobre la estructura de los textos


válidos que resulta imposible o muy difícil expresar mediante formalismos
sintácticos estándar. Para los lenguajes compilados, la semántica estática
básicamente incluye las reglas semánticas que se pueden verificar en el
momento de compilar. Por ejemplo, el chequeo de que cada identificador sea
declarado antes de ser usado (en lenguajes que requieren tales declaraciones)
o que las etiquetas en cada brazo de una estructura case sean distintas. Muchas
restricciones importantes de este tipo, como la validación de que los
identificadores sean usados en los contextos apropiados (por ejemplo, no sumar
un entero al nombre de una función), o que las llamadas a subrutinas tengan el
número y tipo de parámetros adecuado, puede ser implementadas definiéndolas
como reglas en una lógica conocida como sistema de tipos. Otras formas de
análisis estáticos, como los análisis de flujo de datos, también pueden ser parte
de la semántica estática. Otros lenguajes de programación como Java y C#
tienen un análisis definido de asignaciones, una forma de análisis de flujo de
datos, como parte de su semántica estática.

Sistema de tipos
Un sistema de tipos define la manera en la cual un lenguaje de programación
clasifica los valores y expresiones en tipos, cómo pueden ser manipulados
dichos tipos y cómo interactúan. 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 cuestión, detectando ciertas operaciones inválidas. Cualquier
sistema de tipos decidible tiene sus ventajas y desventajas: mientras por un lado
rechaza muchos programas incorrectos, también prohíbe algunos programas
correctos, aunque poco comunes. Para poder minimizar esta desventaja,
algunos lenguajes incluyen lagunas de tipos, conversiones explícitas no
verificadas que pueden ser usadas por el programador para permitir
explícitamente una operación normalmente no permitida entre diferentes tipos.
En la mayoría de los lenguajes con tipos, el sistema de tipos es usado solamente
para verificar 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 diseño y estudio formal de los
sistemas de tipos se le conoce como teoría de tipos.

Clasificación de los lenguajes de programación

Los lenguajes de programación se pueden clasificar atendiendo a varios


criterios:

 Según el nivel de abstracción.


 Según la forma de ejecución.
 Según el paradigma de programación que poseen cada uno de ellos.

Según su nivel de abstracción

Lenguajes Maquina
Están escritos en lenguajes directamente inteligibles por la maquina
(computadora), ya que sus instrucciones son cadenas binarias (0 y 1).

Lenguajes de bajo nivel

Son lenguajes de programación que se acercan al funcionamiento de una


computadora. El lenguaje de más bajo nivel por excelencia es el código máquina.

Lenguajes de alto nivel

Son normalmente fáciles de aprender porque están formados por elementos de


lenguajes naturales, como el inglés.

Según la forma de ejecución

Lenguajes compilados

Naturalmente, un programa que se escribe en un lenguaje de alto nivel también


tiene que traducirse a un código que pueda utilizar la máquina.

Lenguajes interpretados

Se puede también utilizar una alternativa diferente de los compiladores para


traducir lenguajes de alto nivel. En vez de traducir el programa fuente y grabar
en forma permanente el código objeto que se produce durante la compilación
para utilizarlo en una ejecución futura, el programador sólo carga el programa
fuente en la computadora junto con los datos que se van a procesar.
Lenguajes intermediarios

Algunos lenguajes pertenecen a ambas categorías (LISP, Java, Python...) dado


que el programa escrito en estos lenguajes puede, en ciertos casos, sufrir una
fase de compilación intermediaria, en un archivo escrito en un lenguaje
ininteligible (por lo tanto, diferente al archivo fuente) y no ejecutable (requeriría
un intérprete). Los applets Java, pequeños programas que a menudo se cargan
en páginas web, son archivos compilados que sólo pueden ejecutarse dentro de
un navegador web (son archivos con la extensión .class).

Según el paradigma de programación

Un paradigma de programación representa un enfoque particular o filosofía para


la construcción del software. No es mejor uno que otro, sino que cada uno tiene
ventajas y desventajas. Dependiendo de la situación un paradigma resulta más
apropiado que otro.

Atendiendo al paradigma de programación, se pueden clasificar los lenguajes


en:

 El paradigma imperativo o por procedimientos que programa mediante


una serie de comandos, agrupados en bloques y compuestos de órdenes
condicionales que permiten al programa retornar a un bloque de
comandos si se cumple la condición. Estos fueron los primeros lenguajes
de programación en uso y aún hoy muchos lenguajes modernos usan este
principio, es considerado el más común y está representado, por ejemplo,
por el C o por BASIC.
 El lenguaje de programación funcional (a menudo llamado lenguaje
procedimental) es un lenguaje que crea programas mediante funciones,
devuelve un nuevo estado de resultado y recibe como entrada el resultado
de otras funciones. Cuando una función se invoca a sí misma, hablamos
de recursividad. El paradigma funcional está representado por la familia
de lenguajes LISP (en particular Scheme), ML o Haskell.
 El paradigma lógico, un ejemplo es PROLOG.
 El paradigma orientado a objetos. Un lenguaje completamente orientado
a objetos es Smalltalk.

Lenguaje unificado de modelado

El lenguaje unificado de modelado (UML, por sus siglas en inglés, Unified


Modeling Language) es el lenguaje de modelado de sistemas de software más
conocido y utilizado en la actualidad; está respaldado por el Object Management
Group (OMG).

Es un lenguaje gráfico para visualizar, especificar, construir y documentar un


sistema. UML ofrece un estándar para describir un "plano" del sistema (modelo),
incluyendo aspectos conceptuales tales como procesos, funciones del sistema,
y aspectos concretos como expresiones de lenguajes de programación,
esquemas de bases de datos y compuestos reciclados.

Es importante remarcar que UML es un "lenguaje de modelado" para especificar


o para describir métodos o procesos. Se utiliza para definir un sistema, para
detallar los artefactos en el sistema y para documentar y construir. En otras
palabras, es el lenguaje en el que está descrito el modelo.

Se puede aplicar en el desarrollo de software gran variedad de formas para dar


soporte a una metodología de desarrollo de software (tal como el Proceso
Unificado Racional, Rational Unified Process o RUP), pero no especifica en sí
mismo qué metodología o proceso usar.

UML no puede compararse con la programación estructurada, pues UML


significa Lenguaje Unificado de Modelado, no es programación, solo se diagrama
la realidad de una utilización en un requerimiento. Mientras que programación
estructurada es una forma de programar como lo es la orientación a objetos, la
programación orientada a objetos viene siendo un complemento perfecto de
UML, pero no por eso se toma UML solo para lenguajes orientados a objetos.
UML cuenta con varios tipos de diagramas, los cuales muestran diferentes
aspectos de las entidades representadas.

Lenguaje ensamblador

El lenguaje ensamblador, o assembler (en inglés assembly language y la


abreviación asm), es un lenguaje de programación de bajo nivel. Consiste en un
conjunto de mnemónicos que representan instrucciones básicas para los
computadores, microprocesadores, microcontroladores y otros circuitos
integrados programables. Implementa una representación simbólica de los
códigos de máquina binarios y otras constantes necesarias para programar una
arquitectura de procesador y constituye la representación más directa del código
máquina específico para cada arquitectura legible por un programador. Cada
arquitectura de procesador tiene su propio lenguaje ensamblador que
usualmente es definida por el fabricante de hardware, y está basada en los
mnemónicos que simbolizan los pasos de procesamiento (las instrucciones), los
registros del procesador, las posiciones de memoria y otras características del
lenguaje. Un lenguaje ensamblador es por lo tanto específico de cierta
arquitectura de computador física (o virtual). Esto está en contraste con la
mayoría de los lenguajes de programación de alto nivel, que idealmente son
portátiles.

Un programa utilitario llamado ensamblador es usado para traducir sentencias


del lenguaje ensamblador al código de máquina del computador objetivo. El
ensamblador realiza una traducción más o menos isomorfa (un mapeo de uno a
uno) desde las sentencias mnemónicas a las instrucciones y datos de máquina.
Esto está en contraste con los lenguajes de alto nivel, en los cuales una sola
declaración generalmente da lugar a muchas instrucciones de máquina.

Muchos sofisticados ensambladores ofrecen mecanismos adicionales para


facilitar el desarrollo del programa, controlar el proceso de ensamblaje, y la
ayuda de depuración. Particularmente, la mayoría de los ensambladores
modernos incluyen una facilidad de macro (descrita más abajo), y se llaman
macro ensambladores.
Fue usado principalmente en los inicios del desarrollo de software, cuando aún
no se contaba con potentes lenguajes de alto nivel y los recursos eran limitados.
Actualmente se utiliza con frecuencia en ambientes académicos y de
investigación, especialmente cuando se requiere la manipulación directa de
hardware, alto rendimiento, o un uso de recursos controlado y reducido. También
es utilizado en el desarrollo de controladores de dispositivo (en inglés, device
drivers) y en el desarrollo de sistemas operativos, debido a la necesidad del
acceso directo a las instrucciones de la máquina. Muchos dispositivos
programables (como los microcontroladores) aún cuentan con el ensamblador
como la única manera de ser manipulados.

Características

 El código escrito en lenguaje ensamblador posee una cierta dificultad de


ser entendido directamente por un ser humano ya que su estructura se
acerca más bien al lenguaje máquina, es decir, lenguaje de bajo nivel.
 El lenguaje ensamblador es difícilmente portable, es decir, un código
escrito para un Microprocesador, suele necesitar ser modificado, muchas
veces en su totalidad para poder ser usado en otra máquina distinta, aun
con el mismo Microprocesador, solo pueden ser reutilizados secciones
especiales del código programado.
 Los programas hechos en lenguaje ensamblador, al ser programado
directamente sobre Hardware, son generalmente más rápidos y
consumen menos recursos del sistema (memoria RAM y ROM). Al
programar cuidadosamente en lenguaje ensamblador se pueden crear
programas que se ejecutan más rápidamente y ocupan menos espacio
que con lenguajes de alto nivel.
 Con el lenguaje ensamblador se tiene un control muy preciso de las tareas
realizadas por un Microprocesador por lo que se pueden crear segmentos
de código difíciles de programar en un lenguaje de alto nivel.
 También se puede controlar el tiempo en que tarda una Rutina en
ejecutarse, e impedir que se interrumpa durante su ejecución.
 El lenguaje ensamblador es un código estructurado y gravitatorio
desarrollado sobre un archivo de programación (.ASM), en el cual pueden
existir varios programas, macros o rutinas que pueden ser llamados entre
sí.

C++

C++ es un lenguaje imperativo orientado a objetos derivado del C diseñado a


mediados de los años 1980 por Bjarne Stroustrup. En realidad, es un
superconjunto de C, que nació para añadirle cualidades y características de las
que carecía. El resultado es que, como su ancestro, sigue muy ligado al
hardware subyacente, manteniendo una considerable potencia para
programación a bajo nivel, pero se la han añadido elementos que le permiten
también un estilo de programación con alto nivel de abstracción. Estrictamente
hablando, C no es un subconjunto de C++; de hecho, es posible escribir código
C que es ilegal en C++. Pero a efectos prácticos, dado el esfuerzo de
compatibilidad desplegado en su diseño, puede considerarse que C++ es una
extensión del C clásico. La definición "oficial" del lenguaje nos dice que C++ es
un lenguaje de propósito general basado en el C, al que se han añadido nuevos
tipos de datos, clases, plantillas, mecanismo de excepciones, sistema de
espacios de nombres, funciones inline, sobrecarga de operadores, referencias,
operadores para manejo de memoria persistente, y algunas utilidades
adicionales de librería (en realidad la librería Estándar C es un subconjunto de la
librería C++)

También podría gustarte