1. UNIVERSIDAD DE MARGARITA
VISERRECTORADO ACADEMICO
DECANATO DE INGENIERIA Y AFINES
ALGEBRA DISCRETA
SECCION TARDE 02
ALGORITMOS
Realizado por:
RODOLFO A. SALAZAR R.
C.I: 30.065.455
2. ALGORITMOS
Dada la conceptualización suministrada y estudiada de algoritmo,
entendemos que son una herramienta versátil para facilitar el paso a paso, y llegar
fácilmente a construir el camino hacia un fin determinado, llámese tarea, receta,
planes o guías para, planes de acceso o planes de emergencia de entrada o salida, etc.
Ésta aplicación depende del sitio de estudio, investigación, trabajo, donde se busque
la sistematización y avance bien sea de una empresa u otra organización para el
desarrollo de sistemas estandarizados y mejorar el rendimiento laboral y empresarial.
También hemos estado trabajando y estudiado otros puntos que se encuentran
en este contenido y son igual de importantes ya que cada uno de ellos nos facilita el
trabajo a la hora de programación y elaboración de algoritmos.
Con este contenido el objetivo es facilitar el método de estudio con esta
investigación completa y bien estructurada.
3. ¿QUE ES UN ALGORITMO?
Es un conjunto ordenado y finito de operaciones que
nos permiten ejecutar una acción o resolver un
problema mediante una serie de instrucciones
definidas, ordenadas y finitas. Así, dado un estado
inicial y una entrada, y siguiendo los sucesivos pasos
indicados, se llega al estado final y se obtiene una
solución
DISEÑO DE UN ALGORITMO
Es un método específico para poder crear un
modelo matemático ajustado a un problema
específico para resolverlo. Existen varias
técnicas de diseño de algoritmos que
permiten desarrollar la solución al problema
planteado.
MEDIOS DE EXPRESIÓN DE UN ALGORITMO
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:
• 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.
• Descripción formal: Se usa pseudocódigo para describir
la secuencia de pasos que encuentran la solución.
• 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.
4. Tipos de datos
Datos numéricos: permiten representar valores
escalares de forma numérica, esto incluye a los
números enteros y los reales. Este tipo de datos
permiten realizar operaciones aritméticas
comunes.
Datos lógicos: son aquellos que solo pueden
tener dos valores (cierto o falso) ya que
representan el resultado de una comparación
entre otros datos (numéricos o alfanuméricos).
Datos alfanuméricos (string): es una secuencia
de caracteres alfanuméricos que permiten
representar valores identificables de forma
descriptiva, esto incluye nombres de personas,
direcciones, etc. Es posible representar
números como alfanuméricos, pero estos
pierden su propiedad matemática, es decir no
es posible hacer operaciones con ellos. Este
tipo de datos se representan encerrados entre
comillas.
ANÁLISIS DEL PROBLEMA
El análisis de problemas permite determinar las causas
más relevantes de un problema social. Este análisis se
realiza bajo la consideración de que su conocimiento
sirve como pauta para la selección de alternativas de
solución. El análisis de problemas ofrece una primera
idea del impacto social que tendría el proyecto, en la
medida que permite identificar los efectos o
consecuencias que serían evitados si el problema fuera
solucionado. Desde el punto de vista cognitivo, el análisis
de problemas es un estudio transversal: busca establecer
relaciones causales en torno a un problema, en un
momento dado, a través del descubrimiento de
interrelaciones entre las distintas variables.
5. DIAGRAMA DE FLUJO
Son la representación gráfica de la secuencia de actividades de un proceso en los
algoritmos. Consiste en símbolos para representar los pasos de un algoritmo. Cada
símbolo tiene un significado que representa una acción a ser seguida,
correspondiente a un paso del algoritmo. Cada símbolo se conecta a través de
flechas, denominadas líneas de flujo, que indican el orden en que los pasos deben
ser ejecutados.
Puesto que un diagrama de flujo es la representación gráfica de un algoritmo,
también debe tener: ENTRADA – PROCESO – SALIDA.
Para comprender mejor los diagramas de flujo, se tiene que respetar las reglas de
construcción. Al realizar una prueba manual, se debe tomar un conjunto de datos
significativos de entrada y comenzar a recorrer el Flujograma de arriba hacia abajo
y de izquierda a derecha; según sea la forma representada, para ver cómo se
comporta el Flujograma y si los resultados obtenidos son correctos y coherentes.
EJEMPLO:
Queremos hacer un programa informático que nos sume dos número y nos dé el
resultado en pantalla.
SOLUCIÓN DEL EJEMPLO:
6. DESVENTAJAS
• No provee una representación gráfica del algoritmo, por lo que
puede ser difícil entender la lógica compleja de un
pseudocódigo.
• Si el pseudocódigo contiene demasiadas condiciones anidadas
puede ser difícil de entender.
Ejemplo
Escribir un Pseudocódigo de un programa que permita leer la edad
y peso de una persona y posteriormente imprimirla.
Inicio
Variables Numéricas: edad, peso.
Imprimir "Escribir los datos (Edad, Peso):";
Leer Edad, Leer Peso;
Escribir "Tu peso es: ", peso, " y tu edad es: ", edad.;
Fin
PSEUDOCÓDIGO
El pseudocódigo es un tipo de descripción que incluye un poco de lenguaje natural y de
instrucciones estandarizadas para los lenguajes de programación. Podemos decir que es un
lenguaje intermedio entre el lenguaje natural (nuestra forma normal de expresarnos) y
cualquier lenguaje de programación específico, como por ejemplo C, Fortran, Pascal, etc.
VENTAJAS
• Es más fácil y rápido de elaborar en comparación con el
Flujograma.
• Es más fácil detectar errores y hacer cambios.
• No necesita ser reescrito si se hacen cambios, ya que cada
paso es independiente y puede ser modificado sin alterar
los otros pasos.
• Es fácil su traducción a cualquier lenguaje de
programación. Esto no se logra con los flujogramas y
tablas de decisión, ya que el formato usado por el
pseudocódigo es similar a un programa. Ambos contienen
un grupo de instrucciones secuenciales usando un grupo
de instrucciones definidas.
• Es un lenguaje algorítmico similar al español u otro
idioma
• Es una imitación de las instrucciones reales para una
computadora
• Permite representar en forma fácil operaciones repetitivas
complejas.
• Al seguir las reglas se pueden observar claramente los
niveles que tiene cada operación.
7. VARIABLE, CONSTANTE Y PROCESOS
Variable
Cada variable debe ser declarada
antes de ser utilizada en el
programa. Como las variables se
almacenan en la memoria RAM, es
necesario reservar el espacio para
ellas (uno, dos o más bytes). Al
escribir un programa, usted sabe
qué tipo de datos quiere utilizar y
qué tipo de datos espera como
resultado de una operación,
mientras que el compilador no lo
sabe. No se olvide de que el
programa maneja las variables con
los nombres asignados. El
compilador las reconoce como
números en la memoria RAM sin
conocer su tamaño y formato.
Constante
Similar a las variables, las
constantes deben ser declaradas
antes de ser utilizadas en el
programa. En mikroC, no es
obligatorio especificar el tipo
de constante al declararla. Por
otra parte, las constantes deben
ser inicializadas a la vez que se
declaran. El compilador
reconoce las constantes por su
prefijo constante utilizado en la
declaración.
Procesos
Cuando son ejecutables varios
procesos, el sistema operativo
debe decidir cuál conviene
ejecutar si el CPU se encuentra
disponible. El elemento del
sistema quien toma esta
decisión se llama
PLANIFICADOR y
el algoritmo del cual hace uso
se denomina ALGORITMO
PLANIFICADOR.
8. ESTRUCTURA DE CONTROL
Los algoritmos vistos hasta el momento han
consistido en simples secuencias de instrucciones;
sin embargo, existen tareas más complejas que no
pueden ser resueltas empleando un esquema tan
sencillo, en ocasiones es necesario repetir una
misma acción un número determinado de veces o
evaluar una expresión y realizar acciones
diferentes en base al resultado de dicha
evaluación. Para resolver estas situaciones existen
las denominadas estructuras de control que poseen
las siguientes características:
• Una estructura de control tiene un único punto
de entrada y un único punto de salida.
• Una estructura de control se compone de
sentencias o de otras estructuras de control. Tales
características permiten desarrollar de forma muy
flexible todo tipo de algoritmos aún cuando sólo
existen tres tipos fundamentales de estructuras de
control:
• Secuencial.
• Alternativa.
• Repetitiva. A lo largo de esta lección se
presentarán las distintas estructuras de control, la
forma de representarlas en la notación algorítmica
y las correspondientes sentencias FORTRAN para
poder utilizarlas en nuestros programas.
ESTRUCTURAS SECUENCIALES
Son problemas en los que, para su
solución se emplea una serie de
acciones ejecutadas invariablemente
en un orden secuencial.
Las tareas suceden de tal modo que
la salida de una es la entrada de la
siguiente y así sucesivamente hasta el
fin del proceso.
Dentro de este tipo podemos
encontrar operaciones de inicio/fin,
inicialización de variables,
operaciones de asignación, cálculo,
sumarización, etc.
Este tipo de estructura se basa en las
5 fases de que consta todo algoritmo
o programa:
•Definición de variables
(Declaración)
•Inicialización de variables.
•Lectura de datos
•Cálculos
•Salida
REPRESENTACIÓN GRÁFICA:
9. ESTRUCTURAS SELECTIVAS
Las estructuras selectivas se utilizan para tomar decisiones lógicas; de
ahí que también se conocen como estructuras decisión o alternativas.
En las estructuras selectivas se evalúa una condición, y en función del
resultado de la misma se toma un camino u otro.
Las condiciones se establecen usando expresiones lógicas.
La representación de una estructura selectiva se hace con palabras (Si-
entonces-si_no), con una figura geométrica en forma de rombo, que
incluye dos salidas. La salida que se utiliza depende del resultado de
evaluar la expresión lógica que se encuentra en la parte interna del
rombo.
SELECTIVA DOBLE (ALTERNATIVA)
La estructura selectiva si entonces/sino permite que el flujo del diagrama se
bifurque por dos ramas diferentes en el punto de la toma de decisión(es). Si
al evaluar la condición (o condiciones) el resultado es verdadero, entonces
se sigue por un camino específico y se ejecuta(n) cierta(s) operación(es). SI
el resultado es falso entonces se sigue por otro camino y se ejecuta(n) otra(s)
operación(es).
SELECTIVA MULTIPLE
La estructura selectiva si múltiple permite que el flujo del diagrama se bifurque
por varias ramas en el punto de la toma de decisión(es), esto en función del
valor que tome el selector. Así si el selector toma el valor 1 se ejecutará la
acción 1, si toma el valor 2 se ejecutará la acción 2, si toma el valor N se
realizará la acción N, y si toma un valor distinto de los valores comprendidos
entre 1 y N, se continuará con el flujo normal del diagrama realizándose la
acción N + 1.
10. ESTRUCTURAS ITERATIVAS:
Son estructuras con instrucciones de repetición, de iteración o bucles,
que facilitan la repetición de un bloque de instrucciones, un número
determinado de veces o mientras se cumpla una condición. Por lo
general, existen dos tipos de estructuras iterativas o bucles en los
lenguajes de programación. El tipo de bucle que se ejecuta un
número preestablecido de veces, que es controlado por un contador o
índice, incrementado en cada iteración y el bucle que se ejecuta
mientras se cumple una condición. Esta condición se comprueba al
principio o el final de la construcción.
• BUCLE MIENTRAS O BUCLE WHILE
Es un ciclo repetitivo basado en los resultados
de una expresión lógica; se encuentra en la
mayoría de los lenguajes de programación
estructurados. El propósito es repetir un bloque
de código mientras una condición se mantenga
verdadera.
• BUCLE HACER O BUCLEDO
El bucle do, bucle hacer, hacer-mientras o también
llamado ciclo do-while, es una estructura de
control de la mayoría de los lenguajes de
programación estructurados cuyo propósito es
ejecutar un bloque de código y repetir la ejecución
mientras se cumpla cierta condición expresada en
la cláusula while. La diferencia con el bucle while
radica en que este evalúa la condición al principio,
y si esta no se cumple, el código que está
encerrado dentro del cuerpo no se ejecuta. En
cambio, el bucle do-while evalúa la condición para
seguir ejecutándose luego de haber ejecutado el
código dentro de su cuerpo; es decir, siempre se
ejecuta por lo menos una vez el código.
TIPOS DE BUCLE
11. • BUCLE PARA O BUCLE FOR
El bucle for es una estructura de
control en programación en la que se
puede indicar de antemano el número
mínimo de iteraciones. Está
disponible en casi todos los lenguajes
de programación imperativos. Su uso
principal se orienta a los vectores,
pudiendo modificar, agregar, eliminar
o consultar datos que se encuentren
según el índice. Por esto último, una
condición mínima del vector es que
debe ser ordenado, porque si se
intenta leer un dato inexistente, esto
genera un error de programación.
• BUCLE REPETIR
El bucle repetir comprueba la condición de
finalización al final del cuerpo del bucle, y
si ésta es cierta continua con el resto del
programa, a veces esto resulta más
adecuado. La instrucción se ejecutará al
menos una vez. El cuerpo del bucle es el
fragmento de programa que será repetido en
cada iteración.
La condición es una variable o una función
reducible a valor booleano.
• BUCLE PARA CADA O FOR
EACH
Este bucle es una evolución del concepto
del bucle para en algunos lenguajes.
Se utiliza para recorrer estructuras
repetitivas de datos de forma más simple
y ágil.
El bucle For Each puede describirse
genéricamente (en pseudolenguaje) de la
siguiente manera:
POR CADA elemento DE
tipo EN conjunto
HACER
Cuerpo
FIN FOR EACH
12. ALGORITMO DE BUSQUEDA
Un algoritmo de búsqueda es un conjunto de
instrucciones que están diseñadas para localizar
un elemento con ciertas propiedades dentro de
una estructura de datos.
ALGORIDMO DE ORDENACIÓN
En computación y matemáticas un algoritmo de ordenamiento es
un algoritmo que pone elementos de una lista o un vector en una secuencia
dada por una relación de orden, es decir, el resultado de salida ha de ser
una permutación —o reordenamiento— de la entrada que satisfaga la relación
de orden dada. Las relaciones de orden más usadas son el orden numérico y
el orden lexicográfico. Ordenamientos eficientes son importantes para
optimizar el uso de otros algoritmos (como los de búsqueda y fusión) que
requieren listas ordenadas para una ejecución rápida. También es útil para
poner datos en forma canónica y para generar resultados legibles por humanos.
EJEMPLO
ubicar el registro correspondiente a cierta
persona en una base de datos, o el mejor
movimiento en una partida de ajedrez.
La variante más simple del problema es la
búsqueda de un número en un vector.
ORDENAR = ['a','s','o','r','t','i','n','g','e','x','a','m','p','l','e'],
el algoritmo va a recorrer el arreglo de izquierda a derecha. Primero toma el
segundo dato 's' y lo asigna a v y i toma el valor de la posición actual de v.
Luego compara esta 's' con lo que hay en la posición j-1, es decir, con 'a'.
Debido a que 's' no es menor que 'a' no sucede nada y avanza i.
Ahora v toma el valor 'o' y lo compara con 's', como es menor recorre a la 's'
a la posición de la 'o'; decrementa j, la cual ahora tiene la posición en dónde
estaba la 's'; compara a 'o' con a[j-1] , es decir, con 'a'. Como no es menor
que la 'a' sale del for y pone la 'o' en la posición a[j]. El resultado hasta este
punto es el arreglo siguiente: a = ['a','o','s','r',....]
Así se continúa y el resultado final es el arreglo ordenado :
a = ['a','a','e','e','g','i','l','m','n','o','p','r','s','t','x']
EJEMPLO: