Algoritmos, Pseudocodigo y Diagramas de Flujo
Algoritmos, Pseudocodigo y Diagramas de Flujo
Algoritmos, Pseudocodigo y Diagramas de Flujo
y Diagramas de Flujo
Primera
Unidad
Definición de
Algoritmos
Un algoritmo constituye una lista bien definida, ordenada y
finita de operaciones, que permite encontrar la solución a un
problema determinado. Dado un estado inicial y una entrada,
es a través de pasos sucesivos y bien definidos que se llega a
un estado final, en el que se obtiene una solución (si hay
varias) o la solución (si es única).
Process output
input
Concepto de
algoritmo Parte importantes de un algoritmo:
• Entrada de datos: Datos necesarios que un algoritmo
necesita para ser ejecutado.
• Proceso: Secuencia de pasos para la ejecución del
algoritmo.
• Salida de resultado: dato(s) obtenidos luego de la ejecución
del algoritmo.
Ejemplo
Problema: Realizar un algoritmo que determine si una
persona puede casarse; considerando que para poderlo hacer
debe ser mayor de edad y estar soltero.
Solución
1. Inicio
2. Escribir ¿Cuál es su edad?
Concepto de 3. Leer edad
4. Escribir ¿Cuál es su estado civil?
algoritmo 5. Leer estado civil
6. Si (edad >= 18 y estado civil = soltero) entonces
7. Escribir Puede casarse
8. Si no
9. Escribir No puede casarse
10. Fin si
11. Fin
Ejemplo
Problema: Realizar un algoritmo que calcule el promedio de los
cursos que ha aprobado un estudiante. Permitiendo que el
usuario ingrese cuantas notas desee.
Solución
1. Inicio
2. Suma = 0, Conteo = 0, Promedio = 0
3. Escribir Ingrese nota
Concepto de 4. Leer nota
Análisis y 2.
establece lo que se pretende lograr con su solución.
Análisis: En este punto se analiza el problema y sus
Ejemplo
Supóngase un número entero N del que se requiere probar si es divisible o no entre 3.
En este caso, la definición del problema es el enunciado mismo: “Probar si un número entero N es o no divisible
entre 3”.
En la etapa de análisis, identificamos las entradas y las salidas:
• Entrada: Un número entero N.
• Salida: Una respuesta (Sí o No).
Para la resolución del problema de este ejemplo, conocemos la definición de la divisibilidad: “un número N es
divisible entre otro número k, si la división N / k es exacta (o el resto es 0)”.
Asimismo, existen métodos que presentan diferentes grados de dificultad para un ser humano:
• Realizar la división n / k y comprobar si es exacta.
• Efectuar la suma de las cifras que componen el número en base 10 y verificar si el número es divisible entre 3.
Análisis y comprensión de un problema
De acuerdo con la naturaleza del ser humano, él puede aplicar con mayor facilidad el segundo método,
debido a que la división de la suma de las cifras y el cálculo mismo de la suma son más simples que la
división inicial; sin embargo, para la computadora es lo mismo realizar la división de 78564589 entre 3 o la
división de 52 entre 3. En el segundo caso, en cambio, es necesario hacer la extracción de las cifras y luego la
suma de las cifras; entonces, la resolución del problema es simple, como lo establecen los siguientes pasos:
1. Se hace la lectura del número N.
2. Se toma el resto de la división de N entre 3 (la operación módulo N %3).
3. Según el valor del resto, se escribe: “Sí” o “No”.
En la etapa de fin de análisis, los pasos a seguir resultan muy claros; en tanto, en el paso de diseño se
formalizan aún más y lo describen sin ninguna ambigüedad. Durante la implementación, es preciso saber
cómo introducir los valores de entrada en la computadora y cómo hacer el programa.
Programas y paradigmas de programación y lenguajes
Un programa informático se define como un conjunto de instrucciones que, una vez ejecutado,
realiza una o varias tareas en una computadora. De esta forma, sin programas, una computadora
no puede realizar las actividades para las que fue diseñada y creada.
El conjunto general de programas que posee una computadora se denomina software, término
que se utiliza para definir al equipamiento o soporte lógico de una computadora.
Un programa se escribe con instrucciones en un lenguaje de programación, el cual, a su vez, está
definido por su sintaxis, que establece e indica las reglas de escritura (la gramática), y por la
semántica de los tipos de datos, instrucciones, definiciones, y otros elementos que constituyen
un programa.
Un lenguaje de programación es un caso particular del lenguaje informático; este último permite
hacer programas, pero también describir datos, configuraciones físicas y protocolos de
comunicación entre equipos y programas.
Si un programa está escrito en un lenguaje de programación
comprensible para el ser humano, se le llama código fuente. A
su vez, el código fuente se puede convertir en un archivo
ejecutable (código máquina) con la ayuda de un compilador,
aunque también puede ser ejecutado de inmediato a través de
un intérprete.
Programas y Un paradigma de programación provee (y determina) la visión y
los métodos de un programador en la construcción de un
paradigmas de programa o subprograma. Existen diferentes paradigmas que
derivan en múltiples y variados estilos de programación y en
diferentes formas de solución de problemas:
programación y • Paradigma Imperativo
• Paradigma Estructurado
lenguajes • Paradigma Declarativo
• Paradigma Funcional
• Paradigma Lógico
• Paradigma Orientado a Objetos
• Encapsulación
• Herencia
• Polimorfismo
• Paradigma de Programación por Eventos
• Paradigmas Paralelo, Distribuido y Concurrente
Transformación de un programa
Ejemplo
La expresión matemática 1/2 mv2 + mhg tiene como posible árbol de evaluación el siguiente (la operación de
multiplicación es asociativa, entonces hay varias maneras de hacer el cálculo):
Un pseudocódigo se escribe para dar las grandes líneas del cálculo; su objetivo es compartir con los demás
programadores su visión de la resolución del problema. Hay dos principios en la escritura de un
pseudocódigo:
• Al inicio se escriben todas las variables que se usan en pseudocódigo; cada una con su nombre y su tipo.
• Las líneas del pseudocódigo que siguen son órdenes (instrucciones o estructuras) que se ejecutan de
arriba hacia abajo; primero una orden y después otra, así sucesivamente.
El pseudocódigo que se utiliza para la descripción de un algoritmo o para indicar los pasos de resolución de
un problema contiene estructuras de control, las cuales se utilizan para describir las instrucciones de los
algoritmos. Hay cuatro tipos de estructuras:
• Secuencial
• Selectiva
• Iterativa
• Anidamiento
Estructuras componentes del
Pseudocódigo
Estructura secuencial
Las instrucciones se ejecutan en el orden indicado por los índices: de arriba hacia abajo y una después de la otra.
Ejemplo:
Lectura de x y cálculo del cuadrado de x:
Real x, y;
Lectura (x)
y←x×x
Escritura (y)
La estructura secuencial es la base del pseudocódigo, pero no es sufi ciente para resolver todos los problemas.
Estructura selectiva
Las estructuras selectivas permiten expresar las elecciones que se hacen durante la
resolución del problema. Hay varios
tipos de estructuras selectivas:
• Selectiva simple.
• Selectiva doble (alternativa).
• Selectiva múltiple.
• Selectiva casos (múltiple).
La estructura selectiva simple es de la siguiente forma:
La estructura selectiva múltiple-casos se usa cuando un mismo valor se compara con varios
valores. Su forma es la siguiente:
La expresión puede ser una sola variable. Primero, se obtiene el valor de esta expresión y se
compara con cada valor1; si hay expresión = valor1, se ejecutan las instrucciones1… Si
ningún valor corresponde, se ejecuta la parte ‘en otro caso’, instruccionesn.
Selectiva Simple Selectiva doble (alternativa)
Estructura Verificar si un número entero es o no Verificar si un número entero es o
no divisible entre 3.
selectiva divisible entre 3.
La entrada es el número n, la salida La entrada es el número n, la salida
Integer N Integer N
Lectura (N)
String mensaje = “NO”
resto = N%3
Lectura (N)
si resto = 0 entonces
resto = N%3
Escritura (“SÍ”)
si resto = 0 entonces
sino
mensaje = “SÍ”
Escritura (“NO”)
fin si
fin si
Escritura (mensaje)
Selectiva Múltiple
Resolver la ecuación de primer grado que tiene su forma
matemática más general:
ax + b = 0
Una proposición de pseudocódigo es la siguiente:
Real a, b
Real x
(Ejemplos) si a ≠ 0 entonces
Escritura (“Hay una única raíz”)
x = b/a
Escritura (x)
sino si b ≠ 0 entonces
Escritura (“No hay ninguna raíz”)
sino
Escritura (“Hay una infinidad de raíces”)
fin si
Selectiva casos (múltiples)
Según el valor de una variable de entrada, se escribe:
• “FALSO” si el valor de la variable es 0.
• “CIERTO” si el valor de la variable es 1.
• “INDEFINIDO” si el valor de la variable es −1.
• “ERROR” en otros casos.
El pseudocódigo es muy simple, está estructurado en dos partes:
la lectura de la variable y una estructura selectiva de tipo “caso”:
(Ejemplos) seleccionar x
caso 0
Escritura (“FALSO”)
caso 1
Escritura (“CIERTO”)
caso −1
Escritura (“INDEFINIDO”)
en otro caso
Escritura (“ERROR”)
fin seleccionar
Estructura iterativa
Las estructuras iterativas abren la posibilidad de ejecutar un grupo de instrucciones más de una vez; es decir, sirven
para ejecutar varias veces una misma parte de un código. Hay varios tipos de estas:
• Bucle mientras
• Bucle repetir
• Bucle para (cada)
La estructura iterativa mientras (while) tiene la siguiente forma:
Primero se calcula la expresión lógica y si su valor es verdadero, se ejecutan las instrucciones y se hace un nuevo
cálculo de la expresión lógica. Entones, en total, las instrucciones se ejecutan 0 o varias veces, dependiendo del
valor de la expresión lógica.
Estructura iterativa
Una estructura iterativa que toma en cuenta la noción de variable-contador es la estructura iterativa para
(for), la cual tiene la siguiente forma:
Donde i es una variable (simple) e inicio, fin, p, son valores numéricos. Si el paso no es declarado, su valor es
1. Su ejecución es repetitiva y su funcionamiento es el siguiente:
La i recibe el valor inicio y se ejecutan las instrucciones; luego, i se incrementa el valor de p (el paso) y se
reejecutan las instrucciones, si el valor de i es menor que fin.
En resumen, las instrucciones se ejecutan 0 o varias veces, dependiendo de los valores de inicio, fin y el paso.
El valor de la variable i se puede usar al interior de las instrucciones, pero no puede ser modificado.
Bucle mientras
Buscar el entero m más pequeño, pero que sea mayor que un
número real positivo x, con x ≥ 1.
La entrada del problema es el número x y la salida es el
número entero m. La idea es incrementar en 1 una variable m
iniciada con el valor 0 hasta que la variable m sea más grande
Estructura que la variable de entrada x. El pseudocódigo es:
iterativa Real x
(Ejemplos) Integer m
Lectura (x)
m=0
mientras m<x hacer
m=m+1
fin mientras
Escritura (m)
Bucle repetir
Para un número real x entre 0 y 1 (0 <x< 1), una base de numeración b (b ≤
10) y un número entero positivo k, buscar las k primeras cifras después del
punto decimal de la representación de x en base de b.
Real x, y, p
Integer b, k, i, c
Estructura Lectura (x)
Lectura (b)
iterativa Lectura (k)
y=x
(Ejemplos) i=0
repetir
p = y*b
c = parte_entera(p)
y = parte_fraccionaria(p)
Escritura (c)
i=i+1
hasta que i ≥ k
Estructura iterativa (Ejemplos)
Bucle PARA
Obtener todas las potencias de un número a desde a1 hasta ak, donde a y k son valores de entrada; a es un número real y k es un
entero positivo.
Real a, p
Integer k, i
Lectura (a)
Lectura (k)
p=1
para cada i de 1 hasta k
p = p*a
Escritura (p)
fin para
Uso de arreglos
Arreglos
En Java, un arreglo es un grupo de variables (llamadas elementos o componentes) que contienen valores,
todos del mismo tipo. Recuerde que los tipos en Java se dividen en dos categorías: tipos primitivos y tipos de
referencia. Los arreglos son objetos, por lo que se consideran como tipos de referencia. Lo que consideramos
generalmente como un arreglo es en realidad una referencia a un objeto arreglo en memoria. Los elementos
de un arreglo pueden ser tipos primitivos o de referencia. Para hacer referencia a un elemento específico en
un arreglo, debemos especificar el nombre de la referencia al arreglo y el número de la posición del
elemento en el arreglo. El número de la posición del elemento se conoce formalmente como el índice o
subíndice del elemento.
Los valores por defecto son los siguientes:
• Para números el valor cero “0”.
• Para cadenas y letras el valor vacío.
• Para booleanos el valor false.
• Para objetos el valor null.
Arreglos unidimensionales
.
Arreglos multidimensionales
En Java es posible crear arrays con más de una dimensión, pasando de la idea de lista, vector
o matriz de una sola fila a la idea de matriz de m x n elementos.
La sintaxis para declarar e inicializar un arrays multidimensionales será:
Arreglos multidimensionales
También es posible crear arreglos de cualquier tipo de objeto, aunque el proceso es un poco
mas complicado.
La función tiene que regresar o devolver un valor del mismo tipo de la función. Una llamada
de función es parecida a una llamada de procedimiento y puede ser escrita en una
expresión.
La definición de un procedimiento para la
lectura de un arreglo:
lectura_arreglo(100, A)
lectura_arreglo(N, X)
La definición de una función para la suma de
los elementos de un arreglo es la siguiente:
Los diagramas de flujo son comunes en varios dominios técnicos y se usan para poner en orden
los pasos a seguir o las acciones a realizar. Su principal ventaja es que tienen la capacidad de
presentar la información con gran claridad, además de que se necesitan relativamente pocos
conocimientos previos para entender los procesos y/o el objeto del modelado.
En Lenguaje Unificado de Modelado (UML), es un diagrama de actividades que representa los
flujos de trabajo paso a paso. Un diagrama de actividades muestra el flujo de control general.
En la descripción de los algoritmos o de los programas existen varios formalismos. Pero, de una
manera sintética, las reglas comunes a todos para expresar algoritmos, según el paradigma de la
programación estructurada, son:
• Un diagrama de flujo se lee de arriba hacia abajo.
• Un diagrama se compone de bloques entre los cuales existen flechas que indican el sentido de
lectura o de ejecución.
Forma ANSI/ISO Nombre Descripción
Muestra el orden de operación de los procesos. Una línea saliendo de un símbolo
Línea de flujo (Flecha)
y apuntando a otro.
Proceso Predefinido Muestra, por su nombre, un proceso que ha sido definido otro lugar.
Conector fuera de página Un conector etiqueta para usar cuando el objetivo es otra página.
Diagrama de Flujo (Ejemplo)
• Se desea obtener una tabla con las depreciaciones acumuladas y valores reales de cada
año, de un automóvil comprado en Q 1,800,000.00 en el año 1996, durante los seis años
siguientes suponiendo un valor de recuperación o rescate de Q 120,000.00. realizar el
análisis del problema, conociendo la formula de la depreciación anual D para cada año de
vida útil.
Año Acumulada Valor actual
0Q 0.00 Q 1,800,000.00
1 Q 280,000.00 Q 1,520,000.00
2 Q 560,000.00 Q 1,240,000.00
3 Q 840,000.00 Q 960,000.00
4 Q 1,120,000.00 Q 680,000.00
5 Q 1,400,000.00 Q 400,000.00
6 Q 1,680,000.00 Q 120,000.00
• Seudocódigo • Diagrama de flujo
Diagrama de
Flujo
(Ejemplo)
Inicio
C=0
S=0
Dato <> 0 No
Si
(Ejemplo) Numero = 4
Suma = Suma +
Numero
• Suma de los números pares comprendidos
entre 2 y 100.
Numero =
Numero + 2
No
Escribir
Suma
Fin
• Se desea realizar el algoritmo que resuelva el siguiente problema:
Cálculo de los salarios semanales de los empleados de una empresa,
Diagrama de Flujo sabiendo que estos se calculan con base a las horas semanales
trabajadas y de acuerdo a un precio especificado por horas. Si se pasan
(Ejemplo) de cuarenta horas semanales, las horas extraordinarias se pagaran a
razón de 1.5 veces la hora ordinaria.
Inicio
Horas,
PrecioHora,
Nombre
Si Horas >= 40 No
Escribir
Salario
Si Más datos
No
Fin
La escritura de algoritmos para realizar operaciones sencillas de conteo es
una de las primeras cosas que un ordenador puede aprender:
Diagrama de Flujo Supongamos que se proporciona una secuencia de números, tales como
5 3 0 2 4 4 0 0 2 3 6 0 2
(Ejemplo)
y se desea contar e imprimir el numero de ceros de la secuencia.
Inicio
Total = 0
Más números No
Si
Leer Escribir
Numero Total
No Numero = 0 Fin
Si
Total = Total + 1