Uploaded by lauti_postigo_

Apunte Algoritmos

ALGORITMOS
INTRODUCCIÓN
La etapa vital de la solución de un problema con una computadora es el diseño
del algoritmo y de la estructura de datos. Un algoritmo es un procedimiento
expresado precisamente para obtener la computadora en el lenguaje de
programación seleccionado. Los algoritmos se presentan de una manera
conveniente para un lector humano, mientras que en los programas sirven a las
necesidades de las computadoras.
Es importante recordar mientras diseñamos un algoritmo que una computadora
sólo sigue las instrucciones y no puede actuar si no se le ha ordenado de manera
explícita. Por lo tanto, el solucionador de problemas debe prever cualquier
aspecto del problema en el propio algoritmo.
La palabra algoritmo se usa en homenaje al matemático UZBEKO
ALKUARITZMI quién escribió un libro el cual por primera vez se expresaban
métodos precisos para efectuar las cuatro operaciones básicas, las cual hoy en
día se siguen utilizando.
DEFINICIÓN
Todas las tareas que lleva a cabo una computadora se pueden expresar como
algoritmos. Una vez que se ha diseñado un algoritmo, se codifica en un lenguaje
de programación, y el programa es ejecutado por una computadora.
Un algoritmo es un conjunto finito de instrucciones que especifica en una
secuencia de operaciones a realizar en orden para resolver un problema
específico o clases de problemas. En otras palabras, un algoritmo es un
método para la solución del problema.
Un algoritmo se puede presentar en varios niveles de detalles.
El hardware de una computadora sólo puede obedecer las instrucciones si están
expresadas en el lenguaje máquina de la computadora. El diseñador del
algoritmo puede encontrar dificultades al pensar en términos de estas
instrucciones ya que los detalles pueden oscurecer la esencia del procedimiento.
CARACTERISTICAS DE LOS ALGORITMOS:
Las características fundamentales que debe cumplir todo algoritmo son:
• Un algoritmo debe ser preciso, es decir, debe indicar claramente (sin
ambigüedades) cada uno de los pasos a seguir para conseguir el objetivo
propuesto.
• Un algoritmo debe estar bien definido. Si se sigue un algoritmo dos
veces, se debe obtener el mismo resultado cada vez.
• Un algoritmo debe ser finito. Si se sigue un algoritmo, se debe terminar
en algún momento; o sea, debe tener un número finito de pasos.
1
•
Un algoritmo debe ser independiente tanto del lenguaje de
programación en el que se expresa como de la computadora que lo
ejecuta.
La definición de un algoritmo debe describir tres partes: Entrada, Proceso y
Salida.
DOMINIO DE UN ALGORITMO
Si el algoritmo es general dentro de alguna clase de problemas, entonces es de
poca utilidad. Por lo tanto, un método para marcar el número telefónico 2200234
casi no tiene valor para nadie, mientras que un método para marcar cualquier
número podría ser útil. Por su puesto, debe haber alguna restricción a la
generalidad de un algoritmo.
La clase o el conjunto de datos y las condiciones para las cuales un algoritmo
trabaja correctamente se llama dominio. Cuando se trata de resolver cualquier
problema es necesario definir el dominio del algoritmo y después verificar que
trabaja para todos los casos que se encuentran dentro de ese dominio.
Al decidir el dominio de un algoritmo es necesario incluir todas las situaciones
similares, pero los casos remotos o pocos probables se pueden omitir.
ERRORES EN LA CONSTRUCCIÓN DE UN ALGORITMO
Errores de dominio: se presentan cuando no se han especificado todas
situaciones que se pueden presentar en la práctica o se ha descuidado la
apreciación de su importancia. Las pruebas más difíciles son aquellas que
verifican que se han seleccionado un dominio correcto para el algoritmo.
A medida que el problema se presenta, se tiene que clasificar y hay tres
opciones:
1- Ignorarlo porque es improbable y quizás nunca ocurra.
2- Restringir el dominio del algoritmo para excluir.
3- Corregir el algoritmo.
Errores de lógica: son aquellos errores que se detectan después de que se ha
definido en forma adecuada el dominio de un algoritmo, en la etapa de prueba o
verificación. Se deben principalmente a las siguientes causas:
1- Etapas incorrectas.
2- Secuencia incorrecta de etapas.
FORMAS DE EXPRESAR O REPRESENTAR UN ALGORITMO
Un mismo algoritmo puede ser expresado de distintas formas y en distintos
lenguajes.
2
Lenguaje común: en el lenguaje común que hablamos y escribimos; útil para
comunicar un algoritmo a otra persona o en una fase de análisis previo de un
sistema computacional.
Diagramas de flujo: es un lenguaje gráfico; útil para visualizar en forma rápida
la secuencia lógica de pasos a seguir por un algoritmo y de gran ayuda para la
traducción del mismo a un programa de computación.
Tablas de decisión: expresan en forma de tablas las distintas alternativas que
intervienen en un algoritmo y las operaciones elementales a realizar en cada
alternativa. Muy útiles para analizar la lógica de un algoritmo en forma exhaustiva
y precisa.
Lenguajes de pseudocódigos: tipo de lenguaje compuesto por una lista de
enunciados, algunos de los cuales coinciden con los que se usan en los
diagramas de flujo. En la lógica del algoritmo se pueden utilizar distintos tipos de
organización o estructuras de control. Se pseudocodifican las estructuras de
control de la programación estructurada.
Lenguajes de programación: es la forma obligada de expresión de un algoritmo
para que pueda ser leído, ejecutado y almacenado por el computador.
DIAGRAMAS DE FLUJO
Un diagrama de flujo es la representación gráfica o visual de un algoritmo. Se
usan en el planteamiento, desarrollo y estructuración de un algoritmo. Mediante
los diagramas de flujo el algoritmo se puede comunicar y documentar (porque
enseña y describe el proceso).
Formalmente, un diagrama de flujo es un diagrama formado por símbolos (cajas,
bloques, figuras) y flechas o líneas de flujo que conectan los símbolos entre sí.
Los símbolos denotan los pasos esenciales del algoritmo y las fechas indican la
secuencia. Se dibujan de tal manera que la dirección del flujo sea hacia abajo o
de izquierda a derecha.
UTILIDAD DE LOS DIAGRAMAS DE FLUJO
El diagrama de flujo refleja los pasos sucesivos que el computador debe dar para
llegar a la solución de in problema. Las principales razones por las cuales es
generalmente aconsejable el trazado de un diagrama de flujo son las siguientes:
• Oportunidad de verificar la lógica de la solución.
• Sirve de guía al programador para la codificación del programa.
• Permite fácilmente modificar un programa.
• Es útil para la discusión grupal.
• Sirve para documentar el programa.
3
SIMBOLOGÍA BÁSICA
Los símbolos que se describen a continuación son de uso universal:
Símbolo
Función
Indica el principio o fin de un algoritmo.
Indica entrada o salida de datos, es decir una lectura
o escritura.
Procesamiento, se usa generalmente para
sentencias o enunciados de asignación (cualquier
tipo de operación que pueda originar cambio de
valor, formato o posición de la información
almacenada en memoria, operaciones aritméticas,
de transferencia, etc.).
Decisión (indica operaciones lógicas o de
comparación entre datos —normalmente dos— y en
función del resultado de la misma determina cuál de
los distintos caminos alternativos del programa se
debe seguir; normalmente tiene dos salidas —
respuestas SÍ o NO— pero puede tener tres o más,
según los casos).
Conector o símbolo de conexión, se usa cuando el
diagrama es largo y se requiere más de un hoja de
papel o para evitar líneas que se crucen. Para cada
rótulo de conectar hay un único conector de entrada
y puede haber más de un conector de salida.
Llamada a subrutina o a un proceso predeterminado
(una subrutina es un módulo independientemente
del programa principal, que recibe una entrada
procedente de dicho programa, realiza una tarea
determinada y regresa, al terminar, al programa
principal).
Indica la salida impresa de la información.
Indica la dirección del algoritmo en cada momento
mediante una flecha.
4
ESTRUCTURAS BÁSICAS DE CONTROL DEL FLUJO DE
EJECUCIÓN
Flujo es la secuencia de instrucciones que se ejecutan desde la primera línea de
programa hasta la última. Así, decimos que el flujo de ejecución es la trayectoria
que sigue al ir ejecutando todos los pasos presentes en un algoritmo.
La estructura de control es cualquier herramienta que controle el flujo de
ejecución de un algoritmo.
Un programa se puede construir mediante tres tipos de estructuras básicas de
control:
• Secuencial
• Selectiva
• Repetitivas
ESTRUCTURA SECUENCIAL
Es la que sigue la máquina si no se le especifica lo contrario. Las sentencias se
ejecutan una a continuación de otra, siguiendo el orden en el que están definidas.
Su representación en un diagrama de flujo sería:
ESTRUCTURA SELECTIVA
Las estructuras selectivas son también llamadas de decisión. Las estructuras
selectivas se utilizan para tomar decisiones lógicas. También se las llama
condicionales, ya que consisten en la ejecución de una o más sentencias,
dependiendo de la evaluación de una condición y de que sí ésta se cumple o no.
5
TIPOS DE ESTRUCTURAS SELECTIVAS:
SIMPLE
Se ejecutará si la condición de la expresión lógica es verdadera.
DOBLE
Consiste en realizar una pregunta y ejecutar una serie de instrucciones si la
respuesta es verdadera, o bien ejecutar otra serie de instrucciones si al
respuesta es falsa.
6
MÚLTIPLE
Necesidad de más de dos opciones. La estructura de selección múltiple evalúa
una condición la cual puede adoptar n valores posibles. Según sea el valor dado
por la condición se ejecuta un determinado conjunto de acciones.
ESTRUCTURAS REPETITIVAS
Las estructuras repetitivas son aquellas que repiten un conjunto de acciones un
número de veces. Podemos definir:
• Bucle o ciclo: toda estructura de control en la que se ejecutan una serie
de instrucciones, en el orden en que aparecen, tantas veces como se
cumpla una condición.
• Cuerpo del bucle: es el conjunto de acciones que se ejecutan de forma
secuencial dentro del bucle.
• Iteración: se produce una iteración cada vez que se ejecutan las
sentencias que hay en el cuerpo del bucle (es el hecho de repetir la
ejecución de una secuencia de acciones).
Los tipos de estructuras repetitivas son el WHILE, DO-WHILE, REPEAT UNTIL
y FOR.
7
ESTRUCTURA REPETITIVA WHILE (MIENTRAS)
La estructura repetitiva mientras (en inglés while) es aquella en que el cuerpo del
bucle se repite mientras se cumple una determinada condición. Cuando se
ejecuta la instrucción mientras, la primera cosa que sucede es que se evalúa la
condición (una expresión booleana). Si se evalúa falsa, no se toma ninguna
acción y el programa prosigue en la siguiente instrucción del bucle. Si la
expresión booleana es verdadera, entonces se ejecuta el cuerpo del bucle,
después de lo cual se evalúa de nuevo la expresión booleana. Este proceso se
repite una y otra vez mientras la expresión booleana (condición) sea verdadera.
ESTRUCTURA REPETITIVA DO-WHILE (HACER MIENTRAS)
Esta estructura es muy similar a la anterior, sólo que a diferencia del while el
contenido del bucle se ejecuta siempre al menos una vez, ya que la evaluación
de la condición se encuentra al final. De esta forma garantizamos que las
acciones dentro de este bucle sean llevadas a cabo, aunque sea una vez
independientemente del valor de la condición.
8
ESTRUCTURA REPETITIVA FOR (PARA)
La estructura FOR es un poco más compleja que las anteriores y nos permite
ejecutar un conjunto de acciones para cada elemento de un arreglo, o para cada
paso de un conjunto de elementos. Su implementación depende del lenguaje de
programación, pero en términos generales podemos identificar tres
componentes: la inicialización, la condición de corte y el incremento.
Su uso principal se orienta a los vectores, pudiendo modificar, agregar, eliminar
o consultar datos que se encuentren según el índice.
ANIDAMIENTO
Es cualquier estructura de control en la que aparezca otra estructura de control.
Las estructuras internas deben estar totalmente contenidas dentro de la externa
y no puede existir solapamiento.
9