República Bolivariana de Venezuela
Universidad de Oriente
Maturín – Monagas
Algoritmo
Profesor: Rommel Guevara
Integrantes:
Daniel Bolívar CI:27.527.840
Junio – 2018
Historia de Algoritmos
El origen de los algoritmos se le atribuye al matemático, geógrafo y astrónomo árabe
llamado Abu Abdullah Muhammad bin Musa al-Khwarizmi conocido generalmente
como al-Juarismi que vivió entre los siglos VIII y IX. Se cree que nació en la actual
república de Uzbekistán, aunque se educó y trabajó en el ambiente intelectual y
científico de la Bagdag de la Casa de la Sabiduría. Su apellido fue traducido al latín
como algorismus y posteriormente paso al español como algoritmo.
Al-Khorezmi expone en su obra titulada “al-jebr w'al-muqabalah” los cimientos de
álgebra. Es un libro histórico de matemáticas perteneciente a la Casa de la sabiduría
de Bagdad, en el que desarrollo fórmulas para hacer posible que con un número
pequeño de procesos se pudieran resolver ecuaciones de primer y segundo grado.
De hecho, la palabra álgebra se deriva de una de las operaciones básicas con
ecuaciones en este libro. La obra fue traducida al latín, por primera vez, en la
escuela de traductores de Toledo y tuvo mucha influencia en las matemáticas de
esa época.
Sus trabajos de álgebra, aritmética y tablas de astronómicas adelantaron
enormemente el pensamiento matemático. Al-Khorezmi quiso resguardar y enseñar
el conocimiento proveniente de la India y de la Antigua Grecia. Llevando acabo la
tarea de simplificar las matemáticas a un nivel mucho más sencillo para una más
fácil comprensión por parte del público. Explico cómo calcular de manera
sistemática a través de algoritmos diseñados para ser usados con algún tipo de
dispositivo (como, por ejemplo: el ábaco), en vez de utilizar lápiz y papel. También
se preocupó por reducir lo más posible el número de operaciones para cada cálculo.
De esta forma, aunque no fue en si el creador del primer algoritmo, fue sin duda el
primer pensador algorítmico, razón por la cual este término está asociado a su
seudónimo.
Así que la palabra algoritmo, originalmente era usada para referirse a las reglas de
uso de la aritmética, utilizando dígitos árabes. Pero este término ha evolucionado y
comenzó a utilizarse para designar las secuencias de operaciones o
procedimientos, usados para resolver un problema o llevar a cabo una tarea.
Expresado de otra manera, se denomina algoritmo a un grupo finito de operaciones
organizadas de manera lógica y ordenada que permite solucionar un determinado
problema.
En el siglo XIX, se produjo el primer caso de un algoritmo escrito para una
computadora. La autora fue Ada Byron, conocida habitualmente como Ada
Lovelace; fue una matemática y escritora británica, ampliamente reconocida por su
trabajo acerca de la calculadora de uso general de Charles Babbage, la denominada
maquina analítica. Entre sus notas sobre la máquina se encuentra lo que se conoce
como el primer algoritmo destinado a ser procesado por una máquina. Sin embrago,
dado que Charles Babbage nunca terminó su motor analítico, el algoritmo de Ada
Byron jamás llego a ejecutarse.
Hoy se le considera como la primera programadora de ordenadores. Dedujo y previó
el potencial de las máquinas para ir más allá de los simples cálculos numéricos,
mientras que otros se centraron únicamente en dichas capacidades.
Entre otros registros que se tienen acerca de los algoritmos en la historia, se
encuentran los babilonios que habitaron en la antigua Mesopotamia, utilizaban unas
pequeñas bolas hechas de semillas o pequeñas piedras, a manera de “cuentas” y
que eran congregadas en carriles de caña. Más aún, en 1.800 A.C. un matemático
babilónico inventó algoritmos que le permitieron resolver problemas de cálculo
numérico.
En 1850 A.C., un algoritmo de multiplicación similar al de expansión binaria es
usado por los egipcios.
La historia del algoritmo nace por necesidad de hacer cálculos matemáticos, en el
menor número de operaciones a través de ella se fundamenta el paso inicial para
entender cualquier problema planteado.
Definición de Algoritmos
Llamamos algoritmo a la metodología para resolver un problema, se basa en
una secuencia de instrucciones o reglas bien definidas y ordenadas que permiten
realizar una actividad, mediante pasos consecutivos que no generen dudas a quien
deba hacer dicha tarea. En el cual, este conjunto de pasos es finito y van seguidos
de un orden lógico que entrega la solución al problema. Un algoritmo tiene una
estructura básica para plantear la solución.
El primer paso es hacer el planteamiento y análisis del problema, luego identificar
las entradas, los procesos y todas las salidas. El aprendizaje de los algoritmos es
de suma importancia ya que son la base de la programación de ordenadores. Deben
tener ciertas características de manera obligatoria como: la de resolver el problema
para el que fue creado, debe ser especifico, independiente al lenguaje de
programación, preciso, finito, valido y eficiente para resolver el problema en poco
tiempo. Los algoritmos son el objeto de estudio de la algoritmia.
En un algoritmo hay un estado inicial, un Input (Entrada) y que siguiendo al pie de
la letra una secuencia de pasos (proceso), se produce siempre un resultado, un
output (Salida). De esta manera, aunque se desconozca el proceso que se ejecute,
siguiendo la serie de operaciones se va a llegar al resultado correcto. Buena parte
del conocimiento que compartimos tiene la forma de una secuencia de pasos. Por
ejemplo, un algoritmo podría ser una receta de cocina: la entrada son los
ingredientes, la preparación es el proceso y la salida es la cena terminada; y de
nuevo el algoritmo indica como pasar de un estado a otro.
En la vida cotidiana, se emplean algoritmos continuamente para solucionar
problemas. Algunos ejemplos son los manuales de usuario, que muestran
algoritmos para usar un aparato, o las instrucciones que recibe un trabajador de su
jefe. Algunos ejemplos en matemática son el algoritmo de la división para calcular
el cociente de dos números, el algoritmo de multiplicación, para calcular el producto,
el algoritmo de Euclides para obtener el máximo común divisor de dos enteros
positivos, o el método de Gauss para solventar un sistema de ecuaciones lineales.
En términos de programación, un algoritmo es una secuencia de pasos lógicos que
permiten resolver un problema. Los algoritmos pueden ser expresados de muchas
maneras, incluyendo al lenguaje natural, lenguajes de programación, pseudocódigo,
diagramas de flujo, entre otros. Las descripciones en lenguaje natural tienden a ser
confusas y extensas. El usar pseudocódigo y diagramas de flujo evita muchas
ambigüedades del lenguaje natural. Dichas expresiones son maneras más
estructuradas para representar algoritmos; sin embargo, se mantienen
independientes de un lenguaje de programación específico.
Los algoritmos son independientes de los lenguajes de programación. En cada
problema el algoritmo puede escribirse y luego implementarse en un lenguaje
diferente de programación. El algoritmo es la infraestructura de cualquier solución,
escrita luego en cualquier lenguaje de programación. De hecho, todas las tareas
ejecutadas por la computadora se basan en algoritmos. Un software o programa
informático está diseñado a base de algoritmos, de modo que podemos introducir
una tarea en él y resolverla.
Formalmente definimos un algoritmo como un conjunto de pasos, procedimientos o
acciones que nos permiten alcanzar un resultado o resolver un problema.
Muchas veces aplicamos el algoritmo de manera inadvertida o inconsciente. Esto
generalmente pasa cuando el problema que tenemos lo hemos resuelto con
anterioridad un gran número de veces.
Supongamos que solo debemos abrir una puerta. Lo hemos hecho tantas veces que
difícilmente nos ponemos a enumerar los pasos para alcanzar este objetivo. Lo
mismo pasa cuando queremos subir a nuestro carro, cuando nos vestimos, cuando
debemos lavar nuestro automóvil.
Tipos de Algoritmos
A-) Según el sistema de signos con el que describen los pasos a seguir, se
reconocen:
1) Algoritmos cualitativos: cuando se hace a través de palabras, es decir,
las instrucciones son verbales. Sucede, por ejemplo, con recetas de cocina.
2) Algoritmos cuantitativos: cuando se hace a través de cálculos numéricos.
Se puede hacer un algoritmo, por ejemplo, para obtener la raíz cuadrada de
un número.
B-) Según su función, los algoritmos pueden ser:
1) Algoritmos de ordenamiento: secuencian los elementos que ingresan a
partir de un cierto orden, en general, según un orden numérico o léxico.
2) Algoritmos de búsqueda: al contrario de realizar operaciones o secuenciar
elementos, se dedica a encontrar dentro de una lista que ingresa, uno o
varios elementos en particular que cumplan con el conjunto de condiciones
dadas.
3) Algoritmos de encaminamiento: deciden de qué modo se deberá transmitir
algo que llega, y cómo seguirá un conjunto de pasos encadenados. Se
dividen fundamentalmente entre adaptativos y estáticos, los primeros con
cierta capacidad de aprendizaje y ajuste a la circunstancia, mientras que los
segundos funcionan mecánicamente, siempre del mismo modo. Es
importante decir que los algoritmos de encaminamiento cuentan con una
propia subdivisión, según el camino que se toma para que la transmisión
llegue de manera efectiva (ejemplos de estos tipos son: por el camino más
corto, de manera óptima, basado en el flujo, etc.).
C-) También los algoritmos han sido clasificados según la estrategia que se utiliza
para llegar al resultado. Veamos algunos ejemplos:
1) Algoritmos probabilísticos: no se puede estar seguro de la exactitud de la
respuesta que darán. Se agrupan en distintos subtipos, pero con esa
premisa: o bien presentan soluciones aproximadas del problema, o bien
presentan soluciones que pueden ser correctas, pero también erróneas.
2) Algoritmo cotidiano: es el que se da en la vida común de las personas, no
se aplica en sistemas informáticos ni en nada ajeno al día a día. Muchas de
las decisiones que se toman desde que uno se despierta por la mañana
pertenecen a este grupo.
3) Algoritmo heurístico: abandona alguno de los objetivos como recurso para
terminar llegando a la solución. En general, son utilizados cuando no existe
una solución mediante las vías tradicionales.
4) Algoritmo de escalada: se comienza con una solución insatisfactoria (que
no cumple la entrada y la salida), y se la va modificando aproximándose a lo
que se busca. En algún momento, estaremos cerca de (o llegaremos a) la
solución correcta.
5) Algoritmo voraz: Con la idea de llegar a una solución óptima definitiva, elige
analizar cada paso como único y elegir la solución óptima para ese paso.
6) Algoritmo determinista: es completamente lineal (cada paso tiene un paso
sucesor y un paso predecesor) y por lo tanto predictivo, si se conocen sus
entradas y su forma de proceder. El algoritmo de Euclides, que permite
averiguar el máximo común divisor entre dos números, responde a este tipo.
Se distinguen de los no deterministas, donde el algoritmo tiene un
comportamiento en forma de árbol.
Características de los Algoritmos
Las características fundamentales que debe cumplir todo algoritmo son:
a) Un algoritmo debe ser preciso e indicar el orden de realización de cada
paso.
b) Un algoritmo debe estar definido: Si se sigue un algoritmo dos veces, se
debe obtener el mismo resultado cada vez.
c) Un algoritmo debe ser finito: el algoritmo se debe terminar en algún
momento; o sea, debe tener un número finito de pasos.
d) Un algoritmo debe ser legibles: 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. Ejemplo: el
algoritmo de receta de cocina se tendrá:
Entrada: Ingrediente y utensilios.
Proceso: Elaboración de la receta en la cocina.
Salida: Terminación del plato (por ejemplo, Pollo al horno)
Es importante resaltar que el algoritmo debe definirse de forma precisa para cada
paso, es decir, hay que evitar toda ambigüedad al definir cada paso. Puesto que el
lenguaje humano es impreciso, los algoritmos se expresan mediante un lenguaje
formal, ya sea matemático o de programación para un computador.
El algoritmo tendrá cero o más entradas, es decir, cantidades dadas antes de
empezar el algoritmo. Estas cantidades pertenecen además a conjuntos
especificados de objetos. Se trata siempre de cantidades representativas del mundo
real expresadas de tal forma que sean aptas para su interpretación por el
computador.
Y en cuanto a la efectividad Se entiende que una persona sea capaz de realizar el
algoritmo de modo exacto y sin ayuda de una máquina en un lapso de tiempo finito.
Pseudocodigo
En ciencias de la computación, y análisis numérico el pseudocódigo (o falso
lenguaje) es una descripción informal de alto nivel de un algoritmo informático de
programación, compacto e informal, que utiliza las convenciones estructurales de
un lenguaje de programación verdadero, pero que está diseñado para la lectura
humana en lugar de la lectura mediante máquina, y con independencia de cualquier
otro lenguaje de programación. Normalmente, el pseudocódigo omite detalles que
no son esenciales para la comprensión humana del algoritmo, tales como
declaraciones de variables, código específico del sistema y algunas subrutinas.
El lenguaje de programación se complementa, donde sea conveniente, con
descripciones detalladas en lenguaje natural, o con notación matemática compacta.
Se utiliza pseudocódigo pues este es más fácil de entender para las personas que
el código de lenguaje de programación convencional, ya que es una descripción
eficiente y con un entorno independiente de los principios fundamentales de un
algoritmo. Se utiliza comúnmente en los libros de texto y publicaciones científicas
que se documentan varios algoritmos, y también en la planificación del desarrollo
de programas informáticos, para esbozar la estructura del programa antes de
realizar la efectiva codificación. No existe una sintaxis estándar para el
pseudocódigo, aunque los ocho IDE's que manejan pseudocódigo tengan su
sintaxis propia. Aunque sea parecido, el pseudocódigo no debe confundirse con los
programas esqueleto que incluyen código ficticio, que pueden ser compilados sin
errores. Los diagramas de flujo y UML pueden ser considerados como una
alternativa gráfica al pseudocódigo, aunque sean más amplios en papel.
Aplicación:
Un programador que tiene que aplicar un algoritmo específico, sobre todo uno
desfamiliarizado, generalmente comienza con una descripción en pseudocódigo, y
luego "traduce" esa descripción en el lenguaje de programación meta y lo modifica
para que interactúe correctamente con el resto del programa. Los programadores
también pueden iniciar un proyecto describiendo la forma del código en
pseudocódigo en el papel antes de escribirlo en su lenguaje de programación, como
ocurre en la estructuración de un enfoque de Top-down y Bottom-up arriba hacia
abajo.
Sintaxis:
En la actualidad y por lo general, el pseudocódigo, como su nombre lo indica, no
obedece a las reglas de sintaxis de ningún idioma en particular ni es de forma
estándar sistemática, a pesar de que cualquier escritor en particular vaya a pedir
prestado las estructuras de control general, la sintaxis y el estilo, por ejemplo, de
algún lenguaje de programación convencional. Pero en caso de que se quiera
ejecutar, se debe llevar a forma tipo, para que no genere mensajes de error. Las
fuentes populares incluyen la sintaxis de Pascal, BASIC, C, C++, Java, Lisp, y
ALGOL. Por lo general, se omiten las declaraciones de variables. A veces, las
llamadas a funciones, los bloques de código y el código contenido dentro de un loop
se remplazan por una sentencia de una línea en lenguaje natural.
Dependiendo del escritor, el pseudocódigo puede variar mucho en su estilo, yendo
desde en un extremo, una imitación casi exacta de un lenguaje de programación
real, hasta al acercarse a una descripción en prosa de formato de pseudocódigo en
el otro extremo.
Este es un ejemplo de pseudocódigo (para el juego matemático bizz buzz):
Características y Partes:
A. Las principales características de este lenguaje son:
Se puede ejecutar en un ordenador (con un IDE como por ejemplo
SLE, LPP, PilatoX, Maruga Script, Seudocódigo o PSeInt. Otros Ides
de consideración son Inter-P y Algor)
Es una forma de representación sencilla de utilizar y de manipular.
Facilita el paso del programa al lenguaje de programación.
Es independiente del lenguaje de programación que se vaya a utilizar.
Es un método que facilita la programación y solución al algoritmo del
programa.
B. Todo documento en pseudocódigo debe permitir la descripción de:
Instrucciones primitivas.
Instrucciones de proceso.
Instrucciones de control.
Instrucciones compuestas.
Instrucciones de descripción.
C. Estructura a seguir en su realización:
1) Cabecera.
a. Programa.
b. Módulo.
c. Tipos de datos.
d. Constantes.
e. Variables.
2) Cuerpo.
a. Inicio.
b. Instrucciones.
c. Fin.
Definición de datos del pseudocódigo
La definición de datos se da por supuesta, sobre todo en las variables sencillas, si
se emplea formaciones: pilas, colas, vectores o registros, se pueden definir en la
cabecera del algoritmo, y naturalmente cuando empleemos el pseudocódigo para
definir estructuras de datos, esta parte la desarrollaremos adecuadamente.
Funciones y operaciones
Cada autor usa su propio pseudocódigo con sus respectivas convenciones. Por
ejemplo, la instrucción "reemplace el valor de la variable X por el valor de la variable
Y" puede ser representado como:
Las operaciones aritméticas se representan de la forma usual en matemáticas.
Estructuras de Control:
En la redacción del pseudocódigo se utiliza tres tipos de estructuras de control: las
secuenciales, las selectivas y las iterativas.
Estructuras secuenciales:
Las instrucciones se siguen en una secuencia fija que normalmente viene dada por
el número de renglón. Es decir que las instrucciones se ejecutan de arriba hacia
abajo. Las instrucciones se ejecutan dependiendo de la condición dada dentro del
algoritmo.
Estructura selectiva:
Las instrucciones selectivas representan instrucciones que pueden o no
ejecutarse, según el cumplimiento de una condición.
La condición es una expresión booleana. Instrucciones es ejecutada sólo si la
condición es verdadera.
Selectiva doble (alternativa).
La instrucción alternativa realiza una instrucción de dos posibles, según el
cumplimiento de una condición.
La condición es una variable booleana o una función reducible a booleana
(lógica, Verdadero/Falso). Si esta condición es cierta se ejecuta Instrucciones1, si
no es así, entonces se ejecuta Instrucciones2.
Selectiva múltiple.
También es común el uso de una selección múltiple que equivaldría a anidar
varias funciones de selección.
En este caso hay una serie de condiciones que tienen que ser mutuamente
excluyentes, si una de ellas se cumple las demás tienen que ser falsas
necesariamente, hay un caso si no que será cierto cuando las demás condiciones
sean falsas.
En esta estructura si Condición1 es cierta, entonces se ejecuta
sólo Instrucciones1. En general, si Condicióni es verdadera, entonces sólo se
ejecuta Instruccionesi
Selectiva múltiple-Casos.
Una construcción similar a la anterior (equivalente en algunos casos) es la
que se muestra a continuación.
En este caso hay un Indicador es una variable o una función cuyo valor es
comparado en cada caso con los valores "Valori", si en algún caso coinciden ambos
valores, entonces se ejecutarán las Instruccionesi correspondientes. La sección en
otro caso es análoga a la sección si no del ejemplo anterior.
Estructuras iterativas.
Las instrucciones iterativas representan la ejecución de instrucciones en más
de una vez.
Bucle mientras.
El bucle se repite mientras la condición sea cierta, si al llegar por primera vez
al bucle mientras la condición es falsa, el cuerpo del bucle no se ejecuta ninguna
vez.
Bucle repetir.
Existen otras variantes que se derivan a partir de la anterior. La estructura de
control repetir se utiliza cuando es necesario que los cuerpos del bucle se ejecuten
al menos una vez y hasta que se cumpla la condición:
La estructura anterior equivaldría a escribir:
Bucle hacer.
El Bucle hacer se utiliza para repetir un bloque de código mientras se cumpla
cierta condición.
Bucle para.
Una estructura de control muy común es el ciclo para, la cual se usa cuando
se desea iterar un número conocido de veces, empleando como índice una variable
que se incrementa (o decrementa):
la cual se define como:
Bucle para cada.
Por último, también es común usar la estructura de control para cada. Esta
sentencia se usa cuando se tiene una lista o un conjunto L y se quiere iterar por
cada uno de sus elementos:
Si asumimos que los elementos de son, entonces esta sentencia equivaldría a:
Que es lo mismo que:
Sin embargo, en la práctica existen mejores formas de implementar esta
instrucción dependiendo del problema.
Es importante recalcar que el pseudocódigo no es un lenguaje estandarizado.
Eso significa que diferentes autores podrían dar otras estructuras de control o bien
usar estas mismas estructuras, pero con una notación diferente. Sin embargo, las
funciones matemáticas y lógicas toman el significado usual que tienen en
matemática y lógica, con las mismas expresiones.
El anidamiento.
Cualquier instrucción puede ser sustituida por una estructura de control. El
siguiente ejemplo muestra el pseudocódigo del ordenamiento de burbuja, que
tiene varias estructuras anidadas. Este algoritmo ordena de menor a mayor los
elementos de una lista L.
En general, las estructuras anidadas se muestran indentadas, para hacer más
sencilla su identificación a simple vista. En el ejemplo, además de la indentación, se
ha conectado con flechas los pares de delimitadores de cada nivel de anidamiento.
Funciones y Procedimientos:
Muchas personas prefieren distinguir entre funciones y procedimientos.
Una función, al igual que una función matemática, recibe uno o varios valores
de entrada y regresa una salida mientras que un procedimiento recibe una entrada
y no genera ninguna salida, aunque en algún caso podría devolver resultados a
través de sus parámetros de entrada si estos se han declarado por referencia.
En ambos casos es necesario dejar en claro cuáles son las entradas para el
algoritmo, esto se hace comúnmente colocando estos valores entre paréntesis al
principio o bien declarándolo explícitamente con un enunciado. En el caso de las
funciones, es necesario colocar una palabra como regresar o devolver para indicar
cuál es la salida generada por el algoritmo. Por ejemplo, el pseudocódigo de una
función que permite calcular (un número elevado a potencia).
Un ejemplo de procedimiento seria el algoritmo de Ordenamiento de burbuja, por
el que partiendo de una lista de valores estos se ordenan, nótese que, en un
procedimiento, no se calcula el valor de una función, sino que se realiza una acción,
en este caso ordenar la lista.
Desarrollo de algoritmos:
Con este pseudocódigo se puede desarrollar cualquier algoritmo que:
Tenga un único punto de inicio.
Tenga un número finito de posibles puntos de término.
Haya un número finito de caminos, entre el punto de inicio y los posibles
puntos de término.
Ventajas del pseudocódigo sobre los diagramas de flujo:
Los pseudocódigos presentan los siguientes beneficios:
1. Ocupan mucho menos espacio en el desarrollo del problema.
2. Permite representar de forma fácil operaciones repetitivas complejas.
3. Es más sencilla la tarea de pasar de pseudocódigo a un lenguaje de programación
formal.
4. Si se siguen las reglas de identación se puede observar claramente los niveles en
la estructura del programa.
5. En los procesos de aprendizaje de los alumnos de programación, éstos están más
cerca del paso siguiente (codificación en un lenguaje determinado, que los que se
inician en esto con la modalidad Diagramas de Flujo).
6. Mejora la claridad de la solución de un problema.
Diagrama de Flujo
Como ayuda en el desarrollo de la solución de un problema, podemos utilizar los
diagramas de flujo.
Un diagrama de flujo también conocido como: flujograma o diagrama de
actividades es una manera de representar un algoritmo que sigue una metodología
para resolver un problema mediante símbolos y en el interior de ellos se explica de
manera corta los pasos se deben ejecutar
En la elaboración de un programa informático previamente se debe realizar el
flujograma, sin necesidad de utilizar un lenguaje de programación. Después de
hecho el diagrama de flujo solo faltaría saber las órdenes del lenguaje que realizaran
esas tareas que se detallan en el flujograma.
Esto quiere decir que los diagramas se dibujan antes de escribir el programa,
para asegurar un desarrollo lógico.
PASOS PARA ELABORAR UN DIAGRAMA DE FLUJO
Comúnmente para realizar un flujograma primero se hace el algoritmo. Un
algoritmo es una cadena de pasos ordenados para resolver un problema de manera
escrita.
Ejemplo: “Algoritmo del Huevo Frito”
- Pregunto si desea el huevo frito.
- Si su respuesta es sí, lo frío. Si su respuesta es no, lo hiervo.
- Después de cocinado le pregunto si desea sal en el huevo.
- Si su respuesta es sí, le agrego sal y luego lo sirvo. Si su respuesta es no, lo sirvo
en el plato.
Es muy importante que los pasos estén ordenados.
Ahora que se conoce todos los pasos a seguir, con el algoritmo, se puede realizar
un esquema. Este bosquejo es el diagrama de flujo.
CARACTERÍSTICAS DEL DIAGRAMA DE FLUJO
- Sintética: La representación de un diagrama debe quedar resumida en pocas
hojas, recomendable sea en una hoja. Los diagramas extensivos complican su
entendimiento y asimilación por esta razón dejan de ser prácticos.
- Simbolizada: La utilización de la simbología apropiada a los diagramas y
procedimientos evita a los analistas anotaciones abundantes, repetitivas y confusas
en su lectura (interpretación).
- De forma visible a un proceso: Los diagramas nos permiten tener una vista
panorámica de los pasos sin obligación de leer apuntes amplios.
TIPOS DE DIAGRAMA DE FLUJO
En base a su orientación de representación existen cuatro tipos de diagramas:
1. Horizontal (Left-Right): El proceso de las operaciones tiene que ser de izquierda
hacia derecha.
2. Vertical (Top-Bottom): El proceso de las operaciones tiene que ser de arriba
hacia abajo.
3. Panorámico: Este modelo emplea tanto el horizontal como el vertical.
4. Arquitectónico: Describe el itinerario de trabajo de una persona o una forma
sobre su área de trabajo.
SÍMBOLOS DEL DIAGRAMA DE FLUJO
EJEMPLOS DE DIAGRAMA DE FLUJO
Algoritmo Secuencial
La estructura secuencial es aquella en la que una acción (instrucción) sigue a
otra en secuencia. Las tareas se suceden de tal modo que la salida de una es la
entrada de la siguiente y así sucesivamente hasta el fin del proceso.
ELEMENTOS BÁSICOS DE UN ALGORITMO SECUENCIAL
Los elementos básicos constitutivos de un programa o algoritmo son:
- Palabras reservadas: (inicio, fin, si – entonces..., etc).
- Identificadores: (nombres de variables esencialmente).
- Caracteres especiales: (coma, apóstrofe, etc.).
- Constantes.
- Variables.
- Expresiones.
ESTRUCTURA SECUENCIAL
Una estructura de programa es secuencial si se ejecutan una tras otra a modo
de secuencia, es decir que una instrucción no se ejecuta hasta que finaliza la
anterior.
La estructura secuencial tiene una entrada y una salida. Su representación
gráfica es la siguiente:
Los algoritmos que necesitan de estructuras secuenciales para su solución son
los más difíciles de comprender y más sencillos de identificar los procesos que
realizará el programa que nos llevarán a la solución del mismo.
En algunos algoritmos se omite la declaración de variables, en casos que el
algoritmo no es complicado.
En Pseudocódigo una Estructura Secuencial se representa de la siguiente forma:
Otro ejemplo: Problema de tipo cotidiano.
Ejercicio 1
Hacer el rastreo manual para:
a=2
a=a+1
b=a*2
b=b–1
c=a +2 *b
Presentar "c".
Rastreo: Para el rastreo hay que asignarle a cada línea un número, de la siguiente
manera, de antemano ya nos habremos fijado que el valor de salida es el de la
variable c, el problema sería saber el valor de esta variable c que se mostrará
finalmente.
1) a = 2
2) a = a + 1
3) b = a * 2
4) b = b – 1
5) c = a + 2 * b
6) Presentar "c".
Línea 1: a=2
Línea 2: a=2+1=3
Línea 3: b=3*2=6
Línea 4: b=6–1=5
Línea 5: c=3+2*5=13
Línea 6: Se presenta 13
El valor de la variable c será 13.
EJEMPLOS DE ALGORITMOS SECUENCIALES
Problema: Escribir un algoritmo que, multiplique el valor del nº 328.432.555 por 3 y
lo divida por 5 y muestre el resultado por pantalla.
Algoritmo para resolverlo:
1. inicio.
2. Definir variable RESULTADO= 0
3. RESULTADO = 328.432.555 * 3 / 5
4. muestra por pantalla “EL RESULTADO ES”, RESULTADO
5. fin
Problema: Escribir un algoritmo que, ingresado un número y un coeficiente por
pantalla lo obtenga el porcentaje y lo muestre por pantalla.
Algoritmo para resolverlo:
1. inicio.
2. Definir variables (numero, coeficiente, porcentaje= 0)
3. Ingresar por pantalla (numero, coeficiente)
4. PORCENTAJE = (numero * coeficiente / 100)
5. muestra por pantalla “(el porcentaje de”, numero, “es “, porcentaje)
6. fin
(estos algoritmos tienen una estructura secuencial ya que los pasos se suceden
uno a continuación del otro hasta resolver el problema.)
Algoritmos Repetitivos
Los algoritmos repetitivos, también llamados estructuras, lazos, ciclos o bucles,
permiten repetir una operación o secuencias de operaciones en función de ciertas
condiciones. Se utilizan cuando se quiere que un conjunto de instrucciones se
ejecute un cierto número finito de veces y estos algoritmos permiten hacerlo de
manera sencilla.
Mientras se cumpla una condición establecida, las instrucciones se repiten un
número determinado de veces. Dentro de los ciclos se utilizan contadores y
acumuladores, que regulan que este ciclo llegue a su fin.
-Contador: esta es una variable en la memoria que aumenta en una unidad
cada vez que se ejecuta el proceso. Se utiliza para seguir la cuenta de
determinadas acciones que se pueden solicitar al resolver un problema.
-Acumulador: esta es una variable en la memoria cuya misión es almacenar
cantidades variables. Se utiliza para hacer sumas sucesivas.
Diferencia entre contador y acumulador
La principal diferencia del acumulador con el contador es que el aumento o la
disminución de cada suma es variable y no constante, como en el caso del
contador.
Estructuras algorítmicas repetitivas.
Para (For): se utiliza cuando se puede determinar el número de veces que hay
que ejecutar las instrucciones
1) I Es la variable índice con un valor inicial de 1, se incrementa uno en cada
paso hasta 100.
2) La estructura desde comienza con un valor inicial de la variable índice y las
acciones se ejecutan hasta que su valor sea MAYOR que el que el Valor final.
3) La variable índice se incremente en uno y si este nuevo valor del índice no es
mayor que
el valor final, se ejecuta de nuevo la acción imprimir.
En este caso se visualizará los números 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ....97, 98, 99,
100
Mientras (While): repite el ciclo mientras se cumpla una determina condición. Este
arroja dos resultados:
- La condición se cumple: se ejecuta acción 1,2,3….acción n.se repite hasta que
la condición no se cumpla, entonces se sale del ciclo y se sigue ejecutando la o
las instrucciones que viene a continuación y están fuera del bucle; instrucciones X
- La condición no se cumple: no entrará en el ciclo. se realizan las instrucciones
que viene después del bucle, instrucciones X.
Ejemplo
Repetir hasta (Do-while): cumple la misma función que la estructura mientras, solo
que esta comprueba la condición al inicio y repetir lo hace al final, mientras que la
estructura repetir se ejecuta por lo menos una vez
Ejemplo
Lo que la computadora hace al ejecutar la estructura repetir es:
1) Se ejecuta: instrucción 1 , instrucción 2 ,…..instrucción n.
2) Se evalúa la condición.
Si esta es Falsa(No)se vuelve a repetir el ciclo y se ejecuta instrucción 1 ,
instrucción 2 ,…..instrucción n
Si la condición es VERDADERA(Si) se sale del ciclo y se ejecuta instrucción
X.
Características de cada estructura algorítmica repetitiva.
Ciclo Para (For):
Siempre use una variable (contador) que aumentará automáticamente su valor
y ayudará a determinar si el ciclo continúa o se completa.
El contador debe inicializarse con un valor, generalmente 0 o 1, dependiendo
de lo que se haga.
Un ciclo puede contener otro ciclo en sí mismo (llamado ciclo anidado). Nunca
use el mismo nombre de variable (contador) en ambos ciclos, ya que el
programa no puede determinar cuándo termina el ciclo.
Se utiliza para repetir una o más instrucciones varias veces
Ciclo Mientras (While):
Hay una condición de ciclo, una expresión lógica que controla la secuencia
de repetición.
La posición de esta condición es delante al cuerpo del ciclo y significa que
es de comprobación previa. Por lo tanto, cuando se ejecuta, la condición se
evalúa antes de que se ejecute el cuerpo del ciclo.
Indica la condición que debe cumplirse para que tenga lugar una iteración.
Se utilizan cuando queremos repetir la ejecución de varias sentencias de
forma indefinida, siempre que se cumpla una condición.
Ciclo Repetir hasta (Do-while):
Este ciclo se presenta en algunas circunstancias en las que se ha de tener la
seguridad de que una determinada acción se ejecutara una o más veces, pero
al menos una vez.
Tiene que tener su final y salirse de él, tiene un límite y este es hasta que la
condición ya no se cumpla, es decir que sea falsa.
Se utiliza generalmente cuando no se sabe cuántas veces se habrá de ejecutar
el bucle.
¿Cuándo emplear cada estructura repetitiva?
Algoritmos de Selección
En informática, es un algoritmo para encontrar el k-ésimo número más pequeño en
una lista o un vector, este número se llama estadística de orden k. Esto incluye los
casos de búsqueda de mínimo, máximo y mediana. El caso más simple de un
algoritmo de selección consiste en encontrar el elemento mínimo (o máximo) por
iteración en la lista, manteniendo un registro del mínimo (o máximo) en cada etapa
de la iteración.
Estos algoritmos sirven para ordenar elementos de manera creciente o
decreciente en una lista de n elementos. Si hay n elementos que requieren
ordenarse, se repetirá el proceso n-1 veces para conseguir el resultado
deseado. La mayoría de ellos, consisten en comparar los dos primeros elementos
de una matriz e intercambiarlos si es necesario; luego se realiza la comparación
con el primer y tercer término, se intercambian si se es requerido, y asi
sucesivamente hasta comparar el primer y último término. Después se repite el
mismo procedimiento con el segundo elemento, se compara este con cada uno de
la matriz, y así con el resto de los elementos de la matriz dada.
Algoritmos de selección más usados:
- Selection sort: Este algoritmo de selección es el más fácil de implementar y
recordar, pues es muy sencillo. Consiste en ordenar una matriz al encontrar
repetidamente el elemento mínimo o maximo de la parte sin clasificar y colocarlo
en su posición correcta en una matriz ordenada. Este algoritmo se basa en realizar
comparaciones, y para que pueda hacer su trabajo, mantiene dos subarreglos en
una matriz dada.
1) El sub-array que ya está ordenado.
2) Sub-array restante sin clasificar.
-Insertion sort: El orden de inserción funciona de una manera ligeramente
diferente. Siempre mantiene una lista secundaria ordenada en las posiciones más
bajas de la lista. Cada nuevo elemento se "inserta" de nuevo en la lista secundaria
anterior, de modo que la lista secundaria ordenada es un elemento más grande.
-Bubble sort: Es un algoritmo basado en la relación, en el que cada par de
elementos adyacentes se compara y los elementos se intercambian si no están en
orden.
-Shell sort: Este algoritmo utiliza la ordenación por inserción en elementos muy
extendidos, primero para ordenarlos y luego clasifica los elementos menos
espaciados. Este espaciado se denomina intervalo.
-Heapsort: implica construir una estructura de datos del montón a partir de la
matriz dada y luego utilizar el montón para ordenar la matriz. Heapsort es una
estructura de datos basada en árbol especial, que satisface las siguientes
propiedades especiales del montón:
1. Propiedad de la forma: la estructura de los datos del montón es siempre un
árbol binario completo, lo que significa que todos los niveles del árbol están
completamente llenos.
2. Propiedad del montón: todos los nodos son mayores, iguales o menores que
cada uno de sus hijos. Si los nodos principales son mayores que sus nodos
secundarios, el montón se llama Max-Heap, y si los nodos principales son más
pequeños que sus nodos secundarios, el montón se llama Min-Heap.
-Quicksort: es un algoritmo de dividir y conquistar. Selecciona un elemento como
pivote y divide la matriz dada alrededor del pivote seleccionado. Hay muchas
versiones diferentes de Quicksort que seleccionan pivote de diferentes maneras.