Sie sind auf Seite 1von 12

DOCUMENTO DE APOYO

Código: F08-0019-006/ 02-10 Versión: 1


Proceso: Ejecución de la Formación
Modelo de
Procedimiento: Gestión de Proyectos Formativos Mejora Continua

INTRODUCCION A LOS ALGORITMOS

1 LENGUAJES DE PROGRAMACION

1.1 CÓDIGO DE MÁQUINA

El código de máquina es la forma más básica y primitiva en que se


puede programar una computadora digital. En esencia consiste en
colocar en la memoria (de alguna manera) los ceros y unos que
conforman las instrucciones de un programa.

Se ha supuesto que el programa reside en la memoria, pero, ¿cómo ha


llegado allí?

En los sistemas de cálculo automático de los años 1940 y siguientes se


disponía de medios primitivos para realizar esta tarea. Las tarjetas
perforadas, las cintas agujereadas (de papel o de celuloide) eran
métodos habituales. Posteriormente surgieron las cintas magnéticas y
los discos.

Sea cual fuera el método, era preciso que alguna persona diseñara el
programa que consistía en una cadena de ceros y unos. A modo de
ejemplo considérese la tabla 1 que muestra una serie de instrucciones
de una computadora simple. Cada línea está formada por 16 celdas que
contiene una instrucción. A la derecha se ha indicado lo que cada
instrucción representa.

El programa realiza una tarea muy simple: lee dos números del teclado
y los almacena en memoria. Tras esto, los suma y guarda en la memoria
el resultado. Finalmente el resultado se presenta por pantalla. Para
guardar los números leídos se van a usar las posiciones de memoria con
dirección 10 y 11 (que se van a suponer vacías o no usadas). El
resultado se almacena en la dirección 12.

En este ejemplo se ha supuesto que las instrucciones del programa se


almacenan codificadas en la memoria principal comenzando en la
dirección 20. De este modo el programa queda en memoria tal y como
muestra dicha tabla. Para ejecutarlo basta con introducir en el contador
de pasos de programa (registro P) la dirección de comienzo del mismo,
es decir, la dirección 20.
DOCUMENTO DE APOYO
Código: F08-0019-006/ 02-10 Versión: 1
Proceso: Ejecución de la Formación
Modelo de
Procedimiento: Gestión de Proyectos Formativos Mejora Continua

Un programa escrito en la forma vista en el ejemplo anterior se dice que


está en código de máquina, pues utiliza únicamente las instrucciones de
la máquina codificadas con ceros y unos.

Dirección ... CO MD D Significado



20 0100 0 00000001010 Leer de teclado almacenando el valor leído en la
posición de memoria 10
21 0100 0 00000001011 Leer de teclado almacenando el valor leído en la
posición de memoria 11
22 0010 0 00000001010 Posición de memoria 10
23 0101 0 00000001011 Sumar al acumulador el número guardado en la
posición de memoria 11
24 0001 0 00000001100 Almacenar el contenido del acumulador en la
posición de memoria 12
25 0011 0 00000001100 Escribir en pantalla el valor de la posición de
memoria 12

26 0000 0 00000000000 Parar la máquina


Tabla 1. Ejemplo de programa. A la izquierda se presenta una lista de


las operaciones a efectuar, a la derecha se tiene el programa en la
memoria. El contenido de los registros de la memoria se ha separado en
tres bloques (CO, MD y D) para facilitar el estudio, dicha separación no
existe en realidad.

Cada Unidad Central de Procesamiento tiene su propio juego de


instrucciones, por lo que los programas en código máquina no son
necesariamente portables; es decir, no pueden ser ejecutados en otras
máquinas.

El programa de la suma que ha servido de ejemplo es muy simple y se


puede programar fácilmente en código máquina. Sin embargo es fácil
adivinar la complejidad que tendría el código de máquina
correspondiente a la programación de una tarea con muchas más
instrucciones. Para aliviar este problema surge el código mnemotécnico,
que se describe en el punto siguiente.

1.2 CÓDIGO MNEMOTÉCNICO

Una forma de simplificar la programación es reemplazar la codificación


binaria por una más inteligible. Tal codificación ha de ser equivalente al
código máquina, por lo que en cada sentencia debe aparecer de manera
DOCUMENTO DE APOYO
Código: F08-0019-006/ 02-10 Versión: 1
Proceso: Ejecución de la Formación
Modelo de
Procedimiento: Gestión de Proyectos Formativos Mejora Continua

clara los componentes básicos de cada instrucción, que son la operación


a realizar, el modo de direccionamiento y el operando.

Una forma sencilla de facilitar la tarea al programador consiste en


escribir cada instrucción por su nombre y los números en decimal.

El programa del ejemplo anterior podría codificarse del modo que se


muestra en la tabla 2. Esta forma de codificar necesita una posterior
traducción puesto que en la memoria no se puede colocar otra cosa que
no sea los ceros y unos de las instrucciones y datos. La tarea de traducir
es repetitiva y mecanizable, por lo que se dejaba en manos de personal
poco cualificado.

Tabla 2: Ejemplo de programa. A la izquierda se presenta una lista de


las operaciones a efectuar, a la derecha se tiene el programa en la
memoria. El contenido de los registros de la memoria se ha separado en
tres bloques (CO, MD y D) para facilitar el estudio, dicha separación no
existe en realidad.

Posteriormente las propias computadoras fueron programadas para que


llevaran a cabo la tarea de traducir programas para otras máquinas o
para sí mismas.

1.3 ENSAMBLADOR
Los programas traductores tomaron la dura tarea de pasar el código
mnemotécnico a código de máquina. Además se les añadieron otras
funciones que aliviaban aún más la tarea del programador:

1. Los programas pueden necesitar valores para los cálculos, por


ejemplo, el valor dos para hallar la media. Este valor debe residir en
DOCUMENTO DE APOYO
Código: F08-0019-006/ 02-10 Versión: 1
Proceso: Ejecución de la Formación
Modelo de
Procedimiento: Gestión de Proyectos Formativos Mejora Continua

memoria al iniciarse la ejecución del programa, por lo que resulta de


ayuda que el traductor lo coloque en la memoria antes de dicha
ejecución. Esta tarea recibe el nombre de establecimiento de valores
iniciales o de datos numéricos constantes.

2. También resulta preciso que existan direcciones de memoria libres


para almacenar en ellas las variables del programa. Por ejemplo, para
almacenar un resultado calculado. Puesto que en la memoria se
almacenan tanto datos como instrucciones es preciso algún mecanismo
para dejar huecos libres. Es decir, hay que indicar que una determinada
posición de memoria no va a contener una instrucción sino que ha de
dejarse libre para alojar información.

Se crearon entonces las pseudoinstrucciones. Estas son anotaciones que


el programador escribe para que el programa traductor realice tareas
adicionales durante la traducción, como por ejemplo dejar espacios
vacíos en medio del programa o colocar valores constantes para que el
programa los use, una vez traducido, durante su ejecución.

El conjunto de instrucciones y pseudoinstrucciones forma el lenguaje


ensamblador.

A pesar de ser un gran avance, el lenguaje ensamblador sigue siendo de


difícil uso. Para mejorar sus características se crearon
macroinstrucciones, subprogramas y otros desarrollos que dieron lugar a
los modernos lenguajes de programación.

1.4 LENGUAJES DE ALTO NIVEL


La programación de computadoras sería una tarea bastante
desagradable y pesada si no existiesen los lenguajes de programación.

Persiguiendo una mayor facilidad de la programación se llegó a la


observación que es útil disponer de un medio de indicar a la máquina
tareas complicadas con pocas sentencias del programa. Por ejemplo:
poder realizar una raíz cuadrada sin necesidad de escribir varias páginas
de programa. Esto se logra con los lenguajes de alto nivel. La
correspondencia entre instrucciones de máquina y sentencias del
lenguaje queda rota. Las sentencias del programa en alto nivel son
traducidas y dan lugar a muchas instrucciones de máquina.

Las ventajas de los lenguajes de alto nivel son muchas: mayor


legibilidad del programa, menor tiempo de programación, mayor
DOCUMENTO DE APOYO
Código: F08-0019-006/ 02-10 Versión: 1
Proceso: Ejecución de la Formación
Modelo de
Procedimiento: Gestión de Proyectos Formativos Mejora Continua

facilidad para el aprendizaje por parte de personas sin grandes


conocimientos de informática, y sobre todo transportabilidad.

La transportabilidad se consigue gracias a la existencia de programas


traductores que construyen las instrucciones de máquina necesarias a
partir del programa escrito con el lenguaje de alto nivel. Para cada
máquina distinta existe un programa que realiza la traducción adecuada.

Pero no todo son ventajas, la traducción implica una serie de


operaciones que antes no existían. Además, al utilizar lenguaje de alto
nivel a menudo se produce el efecto de "matar moscas a cañonazos".
Ilustremos con un ejemplo esta afirmación. Consideremos la tarea de
sumar dos números que en código de máquina queda resuelta con muy
pocas instrucciones. Al usar un lenguaje de alto nivel se escriben
sentencias que son luego traducidas. El traductor proporciona una serie
de instrucciones que realizan la suma, en general aparecen más
instrucciones que el número mínimo necesario. Esto es debido a que el
traductor no tiene la fineza del programador humano.

Programar con un lenguaje de alto nivel es equivalente a construir una


casa con grandes bloques de cemento frente a construir con ladrillos: es
más rápido, pero se derrocha material.

Como consecuencia, los programas en código de máquina se ejecutan


más rápidamente que los producidos con un lenguaje de alto nivel, pues
éstos contienen más operaciones.

Existen lenguajes de programación que contienen elementos de alto y


bajo nivel. Un buen ejemplo es el lenguaje de programación C. En este
lenguaje se pueden escribir expresiones que, al ser traducidas, producen
pocas instrucciones, como en los lenguajes de bajo nivel, y otras de
gran potencia cuyo equivalente en código de máquina son muchas
instrucciones.
Como ejemplo de lenguaje de alto nivel se muestra aquí un programa
en C.
#include <stdio.h>
void main( ) {
int i;
for( i = 0; i < 10; i++ )
printf( "\n %d %d", i, i * i );
printf( "\n Fin" );
}
DOCUMENTO DE APOYO
Código: F08-0019-006/ 02-10 Versión: 1
Proceso: Ejecución de la Formación
Modelo de
Procedimiento: Gestión de Proyectos Formativos Mejora Continua

Puede observarse que el programa está escrito usando palabras del


idioma inglés y expresiones parecidas a las habituales en Matemáticas.

2 COMPILADORES E INTÉRPRETES

Como se ha visto son necesarios traductores para los lenguajes de bajo


y alto nivel. Recordemos que tiene como misión producir las
instrucciones del programa a partir del código escrito en lenguaje
simbólico en la forma que se muestra en la figura 1.

Figura 1: El programa traductor.

Cuando se usan lenguajes de alto nivel es posible utilizar intérpretes o


compiladores.

Los intérpretes realizan la traducción y ejecución del programa sentencia


a sentencia. En cambio, los compiladores producen un código intermedio
que sirve para crear un archivo ejecutable que puede ejecutarse
posteriormente tantas veces como se desee.

La forma de trabajo queda reflejada en la figura 2. Los bloques


marcados como MF son trozos de programa escritos en el lenguaje de
alto nivel y reciben el nombre de módulos de código fuente. Estos
módulos se almacenan en archivos llamados archivos fuente. El
compilador acepta varios de estos módulos para producir los
correspondientes bloques de código objeto. El código objeto consiste en
instrucciones de máquina, pero no está preparado para funcionar. Es
preciso un proceso de montaje, donde se reúnen todas las partes para
formar el programa ejecutable.

Obsérvese que además del código fuente escrito por el programador


existen partes del programa que proceden de la biblioteca. Se incluyen
ahí rutinas de uso frecuente para matemáticas o para el manejo de
DOCUMENTO DE APOYO
Código: F08-0019-006/ 02-10 Versión: 1
Proceso: Ejecución de la Formación
Modelo de
Procedimiento: Gestión de Proyectos Formativos Mejora Continua

periféricos, etc. que facilitan la tarea del programador. La biblioteca se


compone de muchos módulos de código objeto que se venden
normalmente con el compilador.

El programador no puede ver o cambiar las rutinas incluidas en la


biblioteca, pero recibe información del vendedor para poder usarlas.

El resultado del montaje es un programa ejecutable, consistente en


instrucciones de la máquina que se esté utilizando.

El proceso de creación de programas usando lenguajes de alto nivel


involucra muchas operaciones. Los programadores cuentan hoy en día
con aplicaciones que les permiten escribir código fuente, compilar,
montar e incluso ejecutar paso a paso los programas.

Figura 2. El proceso de creación de programas.


DOCUMENTO DE APOYO
Código: F08-0019-006/ 02-10 Versión: 1
Proceso: Ejecución de la Formación
Modelo de
Procedimiento: Gestión de Proyectos Formativos Mejora Continua

Los pasos que el programador ha de realizar son:


1. Estudio del problema a resolver.
2. Desarrollo y verificación de un algoritmo.
3. Estudio de la codificación del algoritmo.
4. Escritura de los archivos fuente.
5. Compilación.
6. Si hay errores volver a 4, si no proceder al montaje.
7. Si hay errores volver a 4, si no proceder a la prueba de ejecución.
8. Ejecutar programa.
9. Verificar salida proporcionada por el programa.

Se observa que, cada vez que se modifica alguna parte del código
fuente es preciso volver a compilar y montar. Esto no sucede si se utiliza
un intérprete, a pesar de ello los intérpretes son poco usados pues la
ejecución es más lenta.

3 ANÁLISIS, DISEÑO E IMPLEMENTACIÓN DE PROBLEMAS CON


ALGORITMOS

3.1 CONCEPTO DE ALGORITMO

La principal razón para que las personas aprendan lenguajes y técnicas


de programación es utilizar el computador como una herramienta para
resolver problemas. La resolución de estos problemas exige al menos los
siguientes pasos:
1. Definición o análisis del problema
2. Diseño del algoritmo
3. Transformación del algoritmo en un programa
4. Ejecución y validación del programa

El eje central de la anterior metodología es el algoritmo, que no es más


que una serie de pasos que se siguen para resolver un problema. En
esencia, la solución de un problema se puede expresar mediante un
algoritmo.

Los algoritmos son independientes del lenguaje de programación en que


se expresan como de la computadora en que se ejecuta. Por eso, esto
lleva a que los algoritmos sean más importantes que los lenguajes de
programación o incluso más importantes que las computadoras. Un
lenguaje de programación es tan solo un medio para expresar un
algoritmo y la computadora es solo un procesador para ejecutarlo.
DOCUMENTO DE APOYO
Código: F08-0019-006/ 02-10 Versión: 1
Proceso: Ejecución de la Formación
Modelo de
Procedimiento: Gestión de Proyectos Formativos Mejora Continua

3.1.1 CARACTERÍSTICAS DE LOS ALGORITMOS


* Deben ser precisos e indicar el orden de realización de cada paso
* Debe estar definido. Si este se ejecuta dos veces, nos debe dar el
mismo resultado
* Debe ser finito. Si se ejecuta, en algún momento debe terminar.

3.1.2 PARTES
* Entrada: Que necesita el algoritmo para su funcionamiento
* Proceso: Funciones que realiza el algoritmo
* Salida: Resultado que nos arroja el algoritmo

Ejemplos:
1. Un cliente ejecuta un pedido a una fábrica. La fábrica examina en su
banco de datos la ficha del cliente, si el cliente es solvente entonces la
empresa acepta el pedido; en caso contrario, rechazará el pedido.
Redactar el algoritmo correspondiente.

Los pasos del algoritmo son:

1. Inicio.
2. Leer el pedido.
3. Examinar la ficha del cliente.
4. Si el cliente es solvente, aceptar el pedido; en caso
contrario, rechazar el pedido.
5. Fin.

2. Cocinar un huevo

1. Inicio.
2. Encender la estufa.
3. Colocar a hervir el agua.
4. Cuando hierva el agua, introducir el huevo en el agua.
5. Esperar durante 5 minutos.
6. Sacar el huevo del agua.
7. Fin.

3. Realizar la suma de dos números enteros usando una calculadora

1. Inicio.
2. Introducir el primer número.
3. Presionar la tecla para sumar.
4. Introducir el segundo número.
5. Presionar la tecla para obtener el resultado.
DOCUMENTO DE APOYO
Código: F08-0019-006/ 02-10 Versión: 1
Proceso: Ejecución de la Formación
Modelo de
Procedimiento: Gestión de Proyectos Formativos Mejora Continua

6. Fin.

3.1.3 LA RESOLUCIÓN DE PROBLEMAS

La solución de problemas se puede dividir en tres fases:


1. Análisis
2. Diseño
3. Implementación

El primer paso (análisis del problema) requiere que el problema sea


definido y comprendido claramente para que pueda ser analizado con
todo detalle. Una vez analizado el problema, se debe desarrollar el
algoritmo (procedimiento paso a paso para solucionar el problema
dado). Por último, para resolver el algoritmo mediante una computadora
se necesita codificar el algoritmo en un lenguaje de programación
Pascal, C/C++, COBOL, FORTRAN, C# .Net, etc., es decir, convertir el
algoritmo en programa, ejecutarlo y comprobar que el programa
soluciona verdaderamente el problema.

3.2 ANÁLISIS DEL PROBLEMA.


El propósito del análisis de un problema es ayudar al programador para
llegar a una cierta comprensión de la naturaleza del problema. El
problema debe estar bien definido si se desea llegar a una solución
satisfactoria.

Para poder definir con precisión el problema se requiere que las


especificaciones de entrada y salida sean descritas con detalle. Una
buena definición del problema, junto con una descripción detallada de
las especificaciones de entrada y salida, son los requisitos más
importantes para llegar a una solución eficaz.

El análisis del problema exige una lectura previa del problema a fin de
obtener una idea general de lo que se solicita. La segunda lectura
deberá servir para responder a las preguntas:
* ¿Qué información debe proporcionar la resolución del problema?
* ¿Qué datos se necesitan para resolver el problema?

La respuesta a la primera pregunta indicará los resultados deseados o


las "salidas del problema". La respuesta a la segunda pregunta indicará
qué datos se proporcionan o las "entradas del problema".
DOCUMENTO DE APOYO
Código: F08-0019-006/ 02-10 Versión: 1
Proceso: Ejecución de la Formación
Modelo de
Procedimiento: Gestión de Proyectos Formativos Mejora Continua

3.3 DISEÑO DEL ALGORITMO.


Una computadora no tiene capacidad para solucionar problemas más
que cuando se le proporcionan los sucesivos pasos a realizar. Estos
pasos sucesivos que indican las instrucciones a ejecutar por la máquina
constituyen, como ya conocemos, el algoritmo. La información
proporcionada al algoritmo constituye su entrada y la información
producida por el algoritmo constituye su salida.
Los problemas complejos se pueden resolver más eficazmente con la
computadora cuando se rompen en subproblemas que sean más fáciles
de solucionar que el original. Este método se suele denominar divide y
vencerás (divide and conquer) y consiste en dividir un problema
complejo en otros más simples. Así, el problema de encontrar la
superficie y la longitud de un círculo se puede dividir en tres problemas
más simples o subproblemas.

La descomposición del problema original en subproblemas más simples


y a continuación dividir estos subproblemas en otros más simples que
pueden ser implementados para su solución en la computadora se
denomina diseño descendente (top-down design). Normalmente los
pasos diseñados en el primer esbozo del algoritmo son incompletos e
indicarán sólo unos pocos pasos (un máximo de doce
aproximadamente). Tras esta primera descripción, éstos se amplían en
una descripción más detallada con más pasos específicos. Este proceso
se denomina refinamiento del algoritmo (stepwise refinement). Para
problemas complejos se necesitan con frecuencia diferentes niveles de
refinamiento antes de que se pueda obtener un algoritmo claro, preciso
y completo.

4. PREGUNTAS

1. Esquematice la evolución de los lenguajes de programación por medio


de un mapa conceptual o un cuadro sinóptico.
2. Haga un paralelo entre compiladores e intérpretes.
3. Explique cuáles son los pasos generales para resolver un problema
4. En qué consiste la técnica “divide y vencerás”?

5. REFERENCIAS

ARAHAL M.R. Fundamentos de informática. Escuela Superior de


Ingenieros, Universidad de Sevilla, 2003.
DOCUMENTO DE APOYO
Código: F08-0019-006/ 02-10 Versión: 1
Proceso: Ejecución de la Formación
Modelo de
Procedimiento: Gestión de Proyectos Formativos Mejora Continua

JOYANES Luis. Fundamentos de programación, Algoritmos y estructura


de datos. McGraw – Hill

Das könnte Ihnen auch gefallen