Analisis Algoritmos y Programacion
Analisis Algoritmos y Programacion
Analisis Algoritmos y Programacion
Antes de iniciar el tema, es conveniente, sobre todo para aquellos que comienzan su instrucción
informática, hacer un breve repaso de conceptos fundamentales que se han de tomar en cuenta
cuando se desarrollan programas que se utilizarán en las computadoras.
Los datos de entrada y los datos de salida pueden ser, realmente, cualquier cosa, texto, dibujos, o
sonidos.
¿Qué es el software?
¿Qué es el hardware?
Componentes físicos que constituyen la computadora, junto con los dispositivos que
realizan las tareas de entrada y salida
¿Qué es un programa?
Concepto de algoritmo
Los seres humanos realizamos una serie de pasos, procedimientos o acciones que nos permiten
alcanzar un resultado o resolver un problema, esto se repite innumerables veces durante el día. En
realidad estamos aplicando un algoritmo para resolver un problema.
Definición de Algoritmo.- secuencia ordenada y cronológica de pasos que llevan a la
solución de un problema o a la ejecución de una tarea (o actividad).
Tener un principio
Tener un fin.
Entrada.
Proceso.
Salida
La serie de pasos, procedimientos o acciones que nos permiten alcanzar un resultado o resolver un
problema a través de algoritmos, los desarrollamos por medio de pseudocódigo.
El objetivo del pseudocódigo es permitir que el programador se centre en los aspectos lógicos de la
solución, evitando las reglas de sintaxis de los lenguajes de programación.
Diagramas de flujo
En realidad muestra gráficamente los pasos o procesos a seguir para alcanzar la solución de un
problema.
Si el diagrama de flujo está completo y correcto, el paso del mismo a un lenguaje de programación
es relativamente simple y directo.
A continuación, presentamos los símbolos que utilizaremos y una explicación de los mismos. Estos
satisfacen las recomendaciones de la ISO y la ANSI.
Tipos de datos
• Simples
• Estructurados
Los datos simples se caracterizan porque ocupan sólo una casilla de memoria, por lo tanto una
variable simple hace referencia a un único valor a la vez. Dentro de este grupo de datos
encontramos:
• Enteros
• Reales (flotantes)
• Caracteres
• Cadena de caracteres
• Booleanos
Los datos estructurados se caracterizan por el hecho de que con un nombre se hace referencia a un
grupo de casillas de memoria.
Es decir, un dato estructurado tiene varios componentes. Cada uno de sus componentes puede ser
a su vez un dato simple. Dentro de este grupo de datos se encuentran:
• Arreglos
• Cadena de caracteres
• Registros
Datos simples
ejemplo:
Identificadores.- son nombres que se usamos para referirnos a variables, constantes, funciones o
cualquier objeto definido por el usuario.
» El primer carácter que forma un identificador debe ser una letra o el símbolo de subrayado
(_).
Constantes
• Son datos que no cambian durante la ejecución de un programa. Existen tipos de constantes
como tipos de datos, por lo tanto, puede haber constantes enteras, reales (flotantes), de
carácter, de cadenas de caracteres, booleanas, etc.
Variables
• Se utiliza para representar un dato tipo entero, real (flotante), o una constante de carácter.
Por ejemplo:
Operaciones aritméticas
Estos operadores nos permiten realizar operaciones aritméticas entre operandos: números,
constantes o variables. El resultado de una operación aritmética es un número.
A continuación presentamos en una tabla los operadores aritméticos, la operación
que puede realizar y, un ejemplo de su uso y su resultado:
Si una expresión contiene sub expresiones entre paréntesis, éstas se evalúan primero, respetando
claro la jerarquía de los operadores aritméticos en esta sub expresión.
Si las sub expresiones se encuentran anidadas por paréntesis, primero se evalúan las sub
expresiones que se encuentran en el último nivel de anidamiento.
Por ejemplo:
Dados los siguientes casos, resolver cada caso aplicando las reglas correspondientes:
Expresiones lógicas
Las expresiones lógicas o booleanas, están constituidas por números, constantes o variables y
operadores lógicos o relacionales. El valor que pueden tomar estas expresiones es de verdadero o
falso.
Operadores relacionales
Son operadores que permiten comparar dos operandos, los operandos pueden ser números,
caracteres, constantes o variables.
Las constantes o variables, a su vez, pueden ser de tipo entero, real (flotante), carácter o cadena de
caracteres.
Son operadores que permiten formular condiciones complejas a partir de condiciones simples.
Conjunción (y).- relaciona dos operandos booleanos. Proporciona un valor verdadero (V), si los dos
son verdaderos; en caso contrario da un resultado falso (F).
Disyunción (o).- relaciona dos operandos booleanos. Proporciona un valor verdadero (V), si uno de
los dos es verdadero; en caso contrario da un resultado falso (F).
Negación (No).- este operador relaciona sólo un operando booleano y da como resultado un valor
opuesto al que tenga el operando.
Por ejemplo:
Dados los siguientes casos, resolver cada caso aplicando las reglas correspondientes:
Estructura y diseño de un algoritmo
Existe una gran cantidad de problemas que requieren de un análisis profundo y de un pensamiento
flexible y estructurado para la solución.
La secuenciación es una estructura de control que permite a la computadora ejecutar una acción,
después otra, luego la que sigue y así sucesivamente hasta la última.
Es conveniente etiquetar cada acción con números desde el uno en forma ascendente de uno en
uno, para denotar el orden secuencial.
Por lo tanto los elementos básicos que integran la estructura de un algoritmo son:
1. Encabezado.- todo algoritmo debe tener un encabezado como identificación, el cual debe
empezar con la palabra Algoritmo seguida por una descripción del problema a resolver.
2. Inicio.- todo algoritmo debe empezar con la etiqueta 1, que marca el inicio del mismo.
4. Leer, calcular e imprimir.- los siguientes pasos pueden consistir en acciones tales como: leer
datos, calcular algunas expresiones aritméticas e imprimir datos tantas veces como se
requiera y en el orden apropiado para resolver el problema en cuestión.
5. Fin del algoritmo.- el último paso del algoritmo consiste en incluir la indicación fin.
Calcular e imprimir el sueldo de un empleado, se pedirá la clave del empleado, las horas
trabajadas y el pago por hora trabajada.
4. sueldo = ht * pht
Ejemplo No 2.- desarrollar un algoritmo que permita leer un número en radianes e imprima su
equivalencia en grados; así mismo, leer un número en grados e imprima su equivalencia en radianes.
1. Inicio
2. Declaración de variables:
7. Fin
1. Inicio
2. Declaración de variables
matest: entero
6. Fin
Reglas para la construcción de diagramas de flujo
• Debemos recordar que un diagrama de flujo debe ilustrar gráficamente los pasos o procesos
a seguir para alcanzar la solución de un problema.
• Los símbolos colocados adecuadamente, permiten crear una estructura gráfica flexible que
ilustra los pasos a seguir para alcanzar un resultado específico.
• El diagrama de flujo facilitará más tarde la escritura del programa en algún lenguaje de
programación.
Reglas
2. Las líneas utilizadas para indicar la dirección del flujo del diagrama deben ser rectas,
verticales y horizontales.
3. Todas las líneas utilizadas para indicar la dirección del flujo del diagrama deben estar
conectadas. La conexión puede ser a un símbolo que exprese lectura, proceso, decisión,
impresión, conexión o fin de diagrama.
4. El diagrama de flujo debe ser construido de arriba hacia abajo (top-down) y de izquierda a
derecha (right to left).
6. Es conveniente cuando realizamos una tarea compleja poner comentarios que expresen o
ayuden a entender lo que hicimos.
7. Si el diagrama de flujo requiere más de una hoja para su construcción, debemos utilizar los
conectores adecuados y enumerar las páginas convenientemente.
ESTRUCTURA SELECTIVAS
Selección si-entonces
• La estructura selectiva lógica “si entonces” permite que el flujo siga por un camino
específico si se cumple una condición o un conjunto de condiciones.
Formato:
si condición entonces
operación (es)
Donde:
Funcionamiento:
a). Si se cumple, se ejecuta (n) la (s) operación (es) del entonces y luego salta hasta el
siguiente paso después del fin del condicional.
b). Si no se cumple, salta hasta después del fin del condicional, es decir no hace nada.
Diagrama de flujo:
Ejemplo 1: Dado como dato una calificación de un alumno en un examen,
desarrollar un algoritmo y diagrama de flujo, que imprima el mensaje de aprobado
en caso de que la calificación sea mayor o igual a 70.
1. Inicio
2. Declaración de variables
cal: flotante
3. Leer cal
imprimir “Aprobado”
6. Fin
1. Inicio
2. Declaración de variables:
3. Leer sue
4. si sue < 1000 entonces
imprimir nsue
6. Fin
Selección si entonces/sino
• La estructura selectiva si entonces/sino permite que el flujo se bifurque por dos ramas
diferentes en el punto de la toma de decisión (es).
• En ambos casos, luego de ejecutarse la (s) operación (es) indicada (s), se continúa con la
secuencia normal del proceso.
• Por la naturaleza de éstas, se debe ejecutar una o la otra, pero no ambas a la vez, es decir,
son mutuamente excluyentes.
Formato:
si condición
entonces
hacer operación 1
sino
hacer operación 2
Donde:
Funcionamiento:
si se cumple, se ejecuta (n) la (s) operación (es) del entonces y luego salta hasta el
siguiente paso después del fin del condicional.
De lo contrario, salta hacia el sino, ejecuta la (s) operación (es), y después salta hasta el
siguiente paso después del fin del condicional.
Ejemplo 1: Dado como dato una calificación de un alumno en un examen,
desarrollar un algoritmo y diagrama de flujo, que imprima el mensaje de aprobado
en caso de que la calificación sea mayor o igual a 70 o reprobado en caso contrario.
Algoritmo
1. Inicio 5. Fin
2. Declaración de variables
cal: flotante
3. Leer cal
4. si cal >=70
entonces
imprimir “Aprobado”
sino
imprimir “Reprobado”
Algoritmo
3. Leer sue
4. si sue < 1000
entonces
sino
El proceso puede repetirse numerosas veces. En este caso, para resolver el problema, estamos
aplicando estructuras selectivas en cascada o anidadas.
n si condición1 entonces
n1 si condición2
entonces
hacer operación21
sino
hacer operación22
n2 fin del condicional del paso n1
n si condición1
entonces
n1 si condición2
entonces
hacer operación 21
sino
hacer operación 22
sino
n3 si condición3 entonces
hacer operación 31
n si condición1
entonces
n1 si condición2 entonces
hacer operación 21
sino
n3 si condición3
entonces
hacer operación 31
sino
hacer operación 32
n4 fin del condicional del paso n3
Ejemplo 1: desarrollar un algoritmo y diagrama de flujo el cual, dado un valor entero, determinar
si es cero, positivo o negativo.
1 inicio
2 Declaración de variables:
num: entero
3 Leer num
4. si num ==0
entonces
imprimir “cero”
sino
entonces
imprimir “positivo”
sino
imprimir “negativo”
• La estructura selectiva si múltiple permite que el flujo del proceso 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.
Formato:
si selector igual
hacer acción n + 1
Donde:
Selector.- variable o expresión a evaluarse, según la cual se tomará una de las múltiples
decisiones o alternativas.
Acción 1.- expresa la operación o conjunto de operaciones que se van a realizar si el selector
toma el valor 1.
Acción 2.- expresa la operación o conjunto de operaciones que se van a realizar si el selector
toma el valor 2.
Acción n.- expresa la operación o conjunto de operaciones que se van a realizar si el selector
toma el valor n.
Acción n + 1.- expresa la operación que se va a realizar cuando se continúe con el flujo
normal del proceso.
• La estructura selectiva si múltiple es muy flexible, lo que permite aplicarse de diferentes
formas. Por ejemplo observemos el siguiente formato:
si selector igual
hacer acción x
Por ejemplo: Desarrollar un algoritmo y diagrama de flujo tal que dado como datos
la categoría y el sueldo de un trabajador, calcule el aumento correspondiente
teniendo en cuenta la siguiente tabla. Se imprimirá la categoría del trabajador y su nuevo sueldo.
Algoritmo:
2. Declaración de variables:
cate: entero
4. si cate igual
7. Fin
ESTRUCTURAS REPETITIVAS
• Este tipo de estructura está presente en todos los lenguajes de programación, ya sean
estructurados u orientados a objetos. Por ejemplo cuando necesitamos calcular la nómina
total de la empresa, tenemos que sumar los sueldos de los n empleados de la misma.
• Dicho de otra forma el ciclo, es controlado por un contador que tiene que definirse con un
valor inicial, un valor final y un incremento, esto significa que debe conocerse de
antemano el número de veces que se debe repetir el ciclo.
• Donde:
• Funcionamiento:
V (contador del ciclo, generalmente representado por las variables i, j, k) toma un valor
inicial y se compara con VF (valor final). El ciclo se ejecuta mientras V es menor, menor o igual,
mayor, mayor o igual al valor de VF, el valor de V se incrementa o decrementa en cada iteración.
Cuando V supera el valor de VF entonces el ciclo se detiene
Ejemplo 1: desarrollar un algoritmo y diagrama de flujo tal que dado como datos 10 números
enteros, obtenga la suma de los 10 números enteros. Se mostrará la suma de los 10 números
enteros.
2. declaración de variables:
i, num, suma = 0: entero
3. i = 1
leer num
i=i+1
6. imprimir suma
7. fin
Ejemplo 2: desarrollar un algoritmo y diagrama de flujo tal que dado como datos n números
enteros, obtenga la suma de los n números enteros. Se mostrará la suma de los n números
enteros.
2. declaración de variables:
3. leer n
4. i = 1
leer num
i=i+1
6. fin del ciclo del paso 3
7. imprimir suma
8. fin
• Esta estructura permite que se repita una acción o un conjunto de acciones, en tanto
cierta condición se mantenga verdadera.
Formato:
proceso
•
•
Hacer PI = modificación de PI
Donde:
Ejemplo1: Desarrollar un algoritmo y diagrama de flujo que lea n números positivos, determine y
muestre el promedio de los n números positivos.
i, n: enteros 8. fin
2. leer n
3. i = 1
4. mientras i <= n
leer num
i=i+1
1. inicio
2. declaración de variables:
3. leer gasto
leer gasto
6. imprimir sumgas
7. fin
Estructura repetitiva hacer mientras (do/while)
Formato:
Hacer
proceso
Hacer PI = modificación de PI
3. leer n
4. i = 1
5. hacer
leer num
i = i + 1 mientras (i < = n)
Ejemplo 2: Desarrollar un algoritmo y diagrama de flujo el cual, para n números enteros positivos
mostrar los pares.
1. inicio
2. declaración de variables:
i, n: entero
3. leer n
4. i = 2
5. hacer
imprimir i
i=i+2
mientras (i < = n)
7. fin
DATOS ARREGLOS Y MATRICES
Arreglos
El arreglo es un tipo de dato estructurado formado por un conjunto de elementos de un mismo tipo
de datos.
En las unidades anteriores trabajamos con tipos de datos enteros, flotantes, cadenas, etc., los cuales
son considerados como datos de tipo simple, puesto que una variable que se define con alguno de
estos tipos sólo puede almacenar un valor a la vez, es decir, existe una relación de uno a uno entre
la variable y el número de elementos (valores) que es capaz de almacenar.
En cambio un dato de tipo estructurado como el arreglo, puede almacenar a más de un elemento
(valor) a la vez, con la condición de que todos los elementos deben ser del mismo tipo de dato, es
decir, que se puede tener un arreglo de datos enteros, flotantes, etc.
Los arreglos se clasifican de acuerdo con el número de dimensiones que tienen. Así, se tienen los
arreglos unidimensionales (una dimensión), los bidimensionales (dos dimensiones) y los
multidimensionales (de más de dos dimensiones), etc.
Definición de arreglo
Finita.- todo arreglo tiene un límite, es decir se sabe determinar cuál será el número máximo de
elementos que podrán formar parte del arreglo.
Un arreglo unidimensional, está formado por un conjunto de elementos de un mismo tipo de datos
que se almacenan bajo un mismo nombre y se diferencian por la posición (índice) que tiene cada
elemento dentro del arreglo de datos. Por ejemplo: tenemos el número de unidades producidas por
un obrero en cada uno de los días del mes. Para almacenarlos y manejarlos definimos un arreglo de
una dimensión de 30 elementos, como se muestra a continuación:
El cual define un arreglo llamado producción con 30 casillas o lugares para almacenar los datos de
30 días.
Donde:
Nombre Variable.- Nombre de identificación de la variable.
Tipo.- Tipo de dato que tendrá el conjunto de elementos del arreglo que se
está definiendo, puede ser entero, real, carácter, etc.
• • •
El subíndice puede ser una constante numérica entera como 1, 2, 3,…, 30, una variable de tipo
entero, como: Producción [ i ], o bien, una expresión algebraica que de un resultado de tipo entero
como:
Producción [ i + 3 ]
Producción [ (i * 4) – j ]
Como toda variable, una de tipo arreglo puede usarse para leer datos, asignarle valores mediante
expresiones aritméticas, imprimir su contenido, formar parte de expresiones lógicas, etc.
Lectura
El proceso de lectura de un arreglo consiste en leer y asignar un valor a cada uno de sus elementos.
Consideremos de nuevo nuestro ejemplo
Leer Produccion[2],
• • •
Leer Producción[30]
De esta forma no resultaría práctico, por lo tanto se usará un ciclo para leer todos los elementos del
arreglo:
i=1
leer Producción[i]
i=i+1
Escritura
El caso de escritura es similar al de lectura. Se debe escribir el valor de cada uno de los componentes,
por ejemplo, considerando nuestro ejemplo:
i=1
imprimir Producción[i]
i=i+1
Ejemplo1: Desarrollar un algoritmo y diagrama de flujo que reciba como entrada un arreglo
unidimensional de n valores de tipo entero y muestre el arreglo unidimensional:
1. inicio 7. i = 1
4. i = 1 10. fin
i = i +1
Ejemplo 2: Desarrollar un algoritmo y diagrama de flujo que reciba como entrada un arreglo
unidimensional que corresponde a los sueldos de un grupo de 70 empleados de una empresa y
necesitamos saber cuántos de estos empleados tienen un sueldo superior al promedio del grupo.
Mostrar el total de empleados que tiene un sueldo superior al promedio del grupo.
Algoritmo
1. inicio
2. declaración de variables:
i, conta = 0: entero
3. i = 1
6. prom = acsue / 70
7. i = 1
conta = conta + 1
i=i+1
Ejemplo 3: Desarrolla un algoritmo y diagrama de flujo que reciba como entrada dos arreglos
unidimensionales cada uno con 20 números enteros, calcular la suma uno a uno de los elementos
de los dos arreglos y almacenar el resultado en un tercer arreglo. Mostrar al final los tres arreglos.
Algoritmo
1. inicio
2. declaración de variables:
a, b, c: Arreglo[20] entero
i: entero
3. i = 1
leer b[i]
i=i+1
6. i = 1
i = i +1
9. fin
Arreglos multidimensionales
En este tema analizaremos los arreglos bidimensionales (caso especial de los multidimensionales)
por ser los más utilizados.
Arreglos bidimensionales
El arreglo bidimensional o de dos dimensiones, está formado por un conjunto de
elementos de un mismo tipo de datos que se almacenan bajo un mismo nombre y
que al igual que en el unidimensional, se diferencian por la posición que tiene cada elemento dentro
del arreglo de datos, con la aclaración de que la disposición de los elementos es en forma
rectangular o cuadrada, donde la primera dimensión está dada por los renglones y la segunda por
las columnas.
Un arreglo de este tipo, también conocido como matriz, es del orden M x N, donde M es el número
de renglones y N el número de columnas, es decir, en forma de tabla.
1<=j<=N
Al declarar un arreglo es necesario hacerlo como una variable, por la cual en la parte de
declaraciones de variables se utiliza el siguiente formato:
Donde:
Para relacionar cada elemento individual de una matriz se usan dos subíndices; el primero indica el
renglón y el segundo la columna, como sigue:
Matriz[Renglón, Columna]
donde:
Como toda variable, una de tipo matriz puede usarse para leer datos, asignarle valores mediante
expresiones aritméticas, imprimir su contenido, formar parte de expresiones lógicas, etc. Por
ejemplo:
Matriz[1, 1] = 20
Leer Matriz[R, C]
Leer Matriz[3, 4]
Imprimir Matriz[1, 2]
Lectura
Para realizar la lectura de una matriz los elementos deben referenciarse por medio de dos índices,
normalmente se usan dos ciclos (anidados) para lograr la lectura de elementos consecutivos. Por
ejemplo leer los elementos de una matriz de orden 5 x 3, los pasos a seguir son los siguientes:
i=1
leer matriz[i, j]
j=j+1
i=i+1
Al variar los índices de i y j se lee un elemento de matriz, según la posición indicada por los índices i
yj
• • • •
Escritura
i=1
j=1
Imprimir Matriz[i, j]
j = j +1
i=i+1
Ejemplo1 1: Desarrollar un algoritmo y diagrama de flujo el cual, reciba como entrada un arreglo
bidimensional de orden m x n con valores de tipo entero y muestre el arreglo bidimensional:
Algoritmo
1. inicio
2. declaración de variables:
i, j, m, n: entero
mat: Arreglo[m, n] entero
3. leer m, n
4. i = 1
j=1
leer mat[i, j]
j=j+1
i=i+1
7. i = 1
j=1
imprimir mat[i, j]
j=j+1
i=i+1
10. fin
Ejemplo 2: Desarrollar un algoritmo y diagrama de flujo el cual reciba como entrada un arreglo
bidimensional de orden m x n con valores de tipo entero, para calcular la suma de los elementos de
la diagonal principal. Mostrará el arreglo bidimensional y la suma de los elementos de la diagonal
principal.
Algoritmo
1. inicio
2. Declaración de variables
i, j, m, n, sumdiag=o: entero
3. Leer m, n
4. i = 1
j=1
leer mat[i, j]
5.1.1 si i == j entonces
j=j+1
7. i = 1
j=1
imprimir mat[i, j]
j=j+1
i=i+1
11. fin