Vous êtes sur la page 1sur 13

1

Instituto de Educacin Superior Norbert Wiener

Curso : Algoritmos Semana1 Tema 1 Prof. D.Noriega A.

Tema : Conceptos bsicos

Objetivo:

Comprender los conceptos fundamentales de los algoritmos


Analizar problemas cotidianos y plantear una solucin
Desarrollar algoritmos bsicos

INTRODUCCIN

La palabra algoritmo proviene del nombre del matemtico Muhammad ibn Musa al-Jwarizmi que vivi
entre los siglos VIII y IX. Un Algoritmo es una lista bien definida, ordenada y finita de operaciones
que permite hallar la solucin a un problema

El anlisis y estudio de los algoritmos es una disciplina de las ciencias de la computacin y, en la mayora
de los casos, su estudio es completamente abstracto sin usar ningn tipo de lenguaje de programacin
ni cualquier otra implementacin; por eso, en ese sentido, comparte las caractersticas de las disciplinas
matemticas.

En la vida cotidiana se emplean algoritmos en multitud de ocasiones para resolver diversos problemas.
Algunos ejemplos se encuentran en los instructivos (manuales de usuario), los cuales muestran algoritmos
para usar el equipo o aparato en cuestin, e inclusive en las instrucciones que recibe un trabajador por
parte de su jefe.

DEFINICIN DE ALGORITMO:

Un algoritmo es un conjunto ordenado y finito de instrucciones que conducen a la solucin de un


problema. En la vida cotidiana ejecutamos constantemente algoritmos.

Por ejemplo, al instalar un equipo de sonido ejecutamos las instrucciones contenidas en el manual del
equipo, este conjunto de instrucciones constituyen un algoritmo. Otro caso de algoritmo es el algoritmo
matemtico de Euclides para la obtencin del mximo comn divisor de dos nmeros.

Si un algoritmo puede ser ejecutado por una computadora, se dice que es un algoritmo computacional; en
caso contrario, se dice que es un algoritmo no computacional.

Segn esto, el algoritmo de Euclides es un algoritmo computacional; pero el algoritmo para instalar el
equipo de sonido es un algoritmo no computacional. Para que un algoritmo pueda ser ejecutado por una
computadora se necesita expresar el algoritmo en instrucciones comprensibles por la computadora, para
esto se requiere de un determinado lenguaje de programacin.

Al algoritmo expresado en un determinado lenguaje de programacin, se denomina programa.


2

Puesto de otra manera, podemos decir que, un programa es la implementacin o expresin de un


algoritmo en un determinado lenguaje de programacin siguiendo las reglas establecidas por el lenguaje
elegido. En la Figura que sigue se muestra la relacin entre problema, algoritmo y programa.

Todo Algoritmo debe tener las siguientes caractersticas:

Debe ser preciso, es decir, cada instruccin debe indicar de forma inequvoca que se tiene que hacer.
Debe ser finito, es decir, debe tener un nmero limitado de pasos.
Debe ser definido, es decir, debe producir los mismos resultados para las mismas condiciones de
entrada.
Es independiente del lenguaje de programacin que se utilice.

Todo algoritmo est compuesto por tres partes:

Entrada de datos.
Proceso.
Salida de resultados.

Ejemplo 1: Algoritmo para preparar ceviche de bonito para 6 personas.

Entradas:
1 kilo de bonito
3 camotes sancochados
3 cebollas cortadas a lo largo
1 rocoto en rodajas
3 ramas de apio picado
2 ramitas de culantro picado
4 vasos de jugo de limn
4 cucharadas de ajo molido
2 cucharadas de aj amarillo molido
Sal y pimienta

Proceso:
Cortar la carne de pescado en pequeos trozos.
Mezclar la carne con el jugo de limn, el ajo, la pimienta, el culantro, el aj amarillo y el apio.
3

Dejar reposar 30 minutos.


Agregar sal al gusto y echar las cebollas cortadas.
Servir acompaando el cebiche con el camote sancochado y el rocoto en rodajas

Salida:
El ceviche

Evidentemente este es un algoritmo no computacional, no podr ser ejecutado por una computadora, pero
s por una persona. Por si acaso el ceviche es peruano.

Ejemplo 2: Algoritmo para expresar en centmetros y pulgadas una cantidad dada en metros.

Entrada:
La cantidad M de metros

Proceso:
Clculo de centmetros : C = M*100
Clculo de pulgadas : P = C/2.54

Salida:
La cantidad C de centmetros y la cantidad P de pulgadas

Este es un algoritmo computacional escrito en lenguaje natural, puede ser convertido en un programa
de computadora, pero tambin puede ser ejecutado manualmente por una persona.

Ejemplo 3: Algoritmo para aceptar o rechazar el pedido de un cliente.

Un cliente ejecuta un pedido a una fbrica. La fbrica 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.

Entrada:
El Monto del pedido y el estado del cliente

Proceso:

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

Salida:
La aceptacin o el rechazo del pedido
4
5
6
7
8

1. SOFTWARE Y LENGUAJES DE PROGRAMACIN

Para que un procesador (cerebro de la computadora) realice un proceso se le debe suministrar en primer
lugar un algoritmo adecuado. El procesador debe ser capaz de interpretar el algoritmo, lo que significa:

comprender las instrucciones de cada paso,


realizar las operaciones correspondientes.

Cuando el procesador es un computadora, el algoritmo se ha de expresar en un formato que se denomina


programa. Un programa se escribe en un lenguaje de programacin y las operaciones que conducen a
expresar en un algoritmo en forma de programa se llaman programacin. As pues, los lenguajes
utilizados para escribir programas de computadoras son los lenguajes de programacin y programadores
son los escritores y diseadores de programas.

Los principales tipos de lenguajes utilizados en la actualidad son tres:

Lenguaje Mquina,
Lenguaje de bajo nivel ( ensamblador),
Lenguajes de alto nivel.

Los programas se escriben mediante lenguajes de programacin que conducen a expresar el algoritmo
(problema a resolver) de una forma ordenada y programada.

Existen 3 tipos de lenguajes:

Lenguaje Mquina: Inteligibles por la mquina directamente, es decir que las ordenes escritas las
procesa y realiza directamente la mquina. Estas instrucciones son cadenas binarias (0 y 1) que
especifican las instrucciones a realizar y la memoria donde deben realizarse. Las instrucciones dependen
directamente de la mquina donde se programan.

Lenguaje Ensamblador: Sus instrucciones son NEMONICOS que indican la accin a realizar y su
direccin de memoria donde se ejecutan. La programacin depende tambin de la mquina donde se
programe. Ms sencillos que los lenguajes mquina. La mquina no entiende directamente las ordenes y es
necesario traducir las ordenes a travs de un programa ensamblador.

La construccin de los programas consta de 3 partes:

Lenguajes de Alto Nivel: Lenguajes creados a partir de ensamblador. Basan la programacin en


sentencias y funciones que realizan una operacin ya implementada en la creacin del lenguaje de
programacin. Este tipo de lenguajes son los ms sencillos de leer y comprender.

Son independientes de la mquina donde se programan. La mquina no puede entender directamente las
sentencias y se necesita de un programa traductor y linkador para que la mquina pueda ejecutar las
operaciones. Algunos de estos de lenguajes son Visual Basic, Power Builder, C, etc...

4. PROGRAMA
9

Un programa de computadora es un conjunto de instrucciones rdenes dadas a la mquina que


producirn la ejecucin de una determinada tarea. En esencia, un programa es un medio para conseguir un
fin.

Proceso de la programacin

El proceso de programacin es, por consiguiente, un proceso de solucin de problemas y el desarrollo de


un programa requiere las siguientes fases:

1. DEFINICIN Y ANLISIS DEL PROBLEMA;


2. DISEO DE ALGORITMOS:
. Diagrama De Flujo,
. Diagrama N S,
. PseudoCdigo;
3. CODIFICACIN DEL PROGRAMA;
4. DEPURACIN Y VERIFICACIN DEL PROBLEMA;
5. DOCUMENTACIN;
6. MANTENIMIENTO.

4.1 PARTES CONSTRUCTIVAS DE UN PROGRAMA

Tras la decisin de desarrollar un programa, el programador debe establecer el conjunto de


especificaciones que debe contener el programa: entrada, salida y algoritmos de resolucin, que incluirn
las tcnicas para obtener las salidas a partir de las entradas.

Conceptualmente, un programa puede ser considerado como una caja negra, como se muestra en la figura.
La caja negra o el algoritmo de resolucin, en realidad, es el conjunto de cdigos que transforman las
entradas del programa (datos) en Salida (resultados)

Bloque de un programa.

El programador debe establecer de donde provienen las entradas al programa. Las entradas, en cualquier
caso, procedern de un dispositivo de entrada teclado, disco... El proceso de introducir la informacin
de entrada datos- en la memoria de la computadora se denomina entrada de datos, operacin de lectura
o accin de leer.

Las salidas de datos se deben presentar en dispositivos perifricos de salida: pantalla, impresoras,
disco, etc. La operacin de salida de datos se conoce tambin como escritura o accin de escribir.

4.2 CARACTERSTICAS GENERALES DE UN PROGRAMA


10

Con el fin de facilitar la explotacin y el mantenimiento de un programa, es fundamental reunir un


conjunto de caractersticas generales para obtener su mximo rendimiento en el menor plazo de tiempo
y esfuerzo. Estas caractersticas son:

LEGIBILIDAD: Un programa debe ser claro y sencillo para facilitar su lectura y comprensin a las
personas ajenas al programador (autor) de la aplicacin. De este modo existe la posibilidad de repartir
las tareas de mantenimiento y explotacin.

FIABILIDAD: Nuestra aplicacin debe ser un programa "robusto". Es decir, capaz de recuperarse
frente a errores o usos inadecuados por parte del usuario y controlar todo posible error que pueda
producirse en las distintas operaciones que realicen los dispositivos que se utilizan en la aplicacin.

PORTABILIDAD: El diseo de la aplicacin debe permitir la codificacin en diferentes lenguajes


utilizando para ello un diseo nico y universal, sin entrar en sentencias u operadores especficos de
algn lenguaje en especial.

MODIFICABILIDAD: Debe ser fcil y posible su instalacin en distintas mquinas. Facilitar al mximo
su mantenimiento, modificacin y actualizacin para adaptarlo o mejorarlo a nuevas situaciones. Por
ejemplo efecto 2000. Este apartado se le denomina por el termino coloquial "parcheado".

EFICIENCIA: Aprovechar y no derrochar los recursos de la mquina. Esto lo conseguimos minimizando el


uso de la memoria, el tiempo de proceso y el de ejecucin. No debemos dejarnos llevar por los ltimos y
potentes mquinas que surgen da a da en el mercado. Siempre que podamos debemos pensar que
disponemos de una mquina con pocos recursos.

LA RESOLUCIN DE PROBLEMAS.

La principal razn para que las personas aprendan a programar en general y los lenguajes de
programacin en particular es utilizar la computadora como una herramienta para la resolucin de
problemas. Ayudado por una computadora, la resolucin de un problema se puede dividir en tres fases
importantes:

1.- Anlisis del problema.


2.- Diseo o desarrollo del algoritmo.
3.- Resolucin del algoritmo en la computadora.

El primer paso Anlisis 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 programacin
Basic, C++, Java, etc. , es decir, convertir el algoritmo en Programa, ejecutarlo y comprobar que el
programa soluciona verdaderamente el problema. Las fases del proceso de resolucin de un problema
mediante computadora se indican en la figura:
11

ANLISIS DEL PROBLEMA

El primer paso para encontrar la solucin a un problema es el anlisis del mismo. Se debe examinar cuidadosamente
el problema a fin de obtener una idea clara sobre lo que se solicita y determinar los datos necesarios para
conseguirlo.

El propsito del anlisis de un problema, es ayudar al programador para llegar a una cierta comprensin de la
naturaleza del problema. El problema debe estar bien definido si ase desea llegar a una solucin satisfactoria.

Para poder definir con precisin el problema se requiere que las especificaciones de entrada y salida sean descritas
con detalle. Una buena definicin del problema, junto con una descripcin detallada de las especificaciones de
entrada y salida, son los requisitos ms importantes para llegar a una solucin eficaz.

El anlisis 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 resolver a las preguntas:

Qu informacin debe proporcionar la resolucin del problema?


Qu datos se necesitan para resolver el problema?

La respuesta a la primera pregunta indicar los resultados deseados a las salidas del problema.

La respuesta a la segunda pregunta indicar que datos se proporcionan a las entradas del problema.

Ejemplo

Leer el radio de un circulo y calcular e imprimir su superficie y la longitud de la circunferencia.

Anlisis.

Las entradas de datos en este problema se concentran en el radio del crculo. Dado que el radio puede tomar
cualquier valor dentro del rango de los nmeros reales, el tipo de datos radio debe ser real.

Las salidas sern dos variables: superficie y circunferencia, que tambin sern de tipo real.

Entradas: Radio del crculo (variable RADIO).

Salidas: Superficie del crculo (variable Area).


Circunferencia del circulo(variable Circunferencia).
12

Variables: Radio, rea y circunferencia (tipo real).

DISEO DEL ALGORITMO

Una computadora no tiene capacidad para solucionar problemas mas que cuando se le proporcionan los sucesivos
pasos a realizar. Estos pasos sucesivos que indican las instrucciones a ejecutar por la maquina, constituyen, como ya
conocemos, el algoritmo.

La informacin proporcionada al algoritmo, constituye su entrada y la informacin producida por el algoritmo


constituye su salida. Los problemas complejos se pueden resolver mas eficazmente con la computadora, cuando se
rompen en sub problemas que sean ms fciles de solucionar que el original.

Este mtodo se suele denominar divide y vencers (divide and conquer) que consiste en dividir un problema
complejo en otros ms simples.

As el problema de encontrar la superficie y longitud de un circulo se puede dividir en tres problemas ms simples o
subproblemas (figura de abajo).

La descomposicin del problema original en subproblemas ms simples y a continuacin dividir estos subproblemas
en otros ms simples que pueden ser implementados para su solucin en la computadora se denomina diseo
descendente (top-down design).

Normalmente los pasos diseados en el primer esbozo del algoritmo son incompletos e indicaran solo unos pocos
pasos (un mximo de doce aproximadamente). Tras esta primera descripcin, estos se amplan en una descripcin
mas detallada con ms pasos especficos. 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.

Refinamiento del algoritmo

El problema de calculo de la circunferencia y superficie de un circulo se puede descomponer en subproblemas ms


simples:

(1) Leer datos de entrada,


(2) Calcular superficie y longitud de circunferencia y
(3) Escribir resultados (datos de salida).

Subproblema Refinamiento
leer radio leer radio
calcular superficie Superficie = 3.141592 * Radio^2
calcular circunferencia Circunferencia = 2 * 3.141592 *
Radio
escribir resultados Escribir radio, circunferencia,
superficie

Las ventajas ms importantes del diseo descendente son:

El problema se comprende ms fcilmente al dividirse en partes ms simples denominadas mdulos.


13

Las modificaciones en los mdulos son ms fciles.


La comprobacin del problema se puede verificar fcilmente.

Tras los pasos anteriores (diseo descendente y refinamiento por pasos) es preciso representar el algoritmo
mediante una determinada herramienta de programacin:
diagrama de flujo, pseudocdigo o diagrama N.S

As pues, el diseo de algoritmo se descompone en las fases recogidas en la siguiente Figura