Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Diagramas de Flujo
y
Seudocódigo
2020
I. ALGORITMOS
2.1 Identificador
2.2 tipos de Datos
2.3 Variables
2.4 Operadores
2.5 Prioridad de Operadores
2.6 Tabla de la Verdad para O, Y y NO
2.7 Sentencias de Asignación
2.8 Funciones Internas de PSeInt
IV. ARREGLOS
Luis Joyanes, programador experto y autor de muchos libros acerca de lógica y programación nos dice
“en la ciencia de la computación y en la programación, los algoritmos son más importantes que los lenguajes
de programación o las computadoras. Un lenguaje de programación es sólo un medio para expresar un
algoritmo y una computadora es sólo un procesador para ejecutarlo”.
Cuadrado Mágico de 4 x 4:
Para que quede claro la definición de algoritmo, usaremos como ejemplo, el cuadrado mágico de 4 x 4
ver la figura 1.1. Un cuadrado mágico de n x n, es una matriz cuadradas de orden n, cuyos elementos son
diferentes, de forma que la suma de los elementos de cualquiera de las filas, de cualquiera de las columnas y
de las dos diagonales principales da siempre el mismo resultado. Al número resultante se le denomina
“constante mágica”. El cuadrado mágico de 4 x 4 puede ser elaborado como sigue:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
2. Borrar los numeros que estan en las dos diagonales, es decir 1, 4, 6, 7, 10, 11, 13 y 16
2 3
5 8
9 12
14 15
3. Llenar los casilleros en blanco con los numeros eliminados en forma descendente
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
1. Diagramas de Flujo
2. Pseudocódigo
Diagramas de Flujo
Los diagramas de flujo ilustran con figuras simbólicas la lógica de la solución de un problema, son una
representación gráfica de un algoritmo. Adicionalmente a las palabras, utilizan símbolos geométricos ya
definidos para representar tipos de operaciones.
Un diagrama de flujo es quizá el mejor método disponible para expresar lo que pueda hacer una
computadora o lo que queremos que haga. Ellos son simples, fáciles de crear, fáciles de emplear y no tienen
ambigüedades.
Pseudocódigo
El pseudocódigo es un lenguaje informal para representar algoritmos, nació como un lenguaje similar
al inglés común y es un medio de representar básicamente las estructuras de control de programación
estructurada, se considera un primer borrador. Frecuentemente se utiliza palabras imperativas como: lea,
imprima, sume, divida, calcule, finalice, etc.
DFD
PSeInt
PSeInt
PSeInt es software libre, gratuito y multiplataforma y, por sus características, una excelente
herramienta para todo aquel que se inicia en el mundo de la programación.
Permite representar algoritmos utilizando tanto diagramas de flujo como pseudocódigo, incluso pasar
de una forma a otra de manera inmediata. Posibilita la ejecución del algoritmo como si éste ya estuviera
implementado en un lenguaje de programación, con la opción, si se desea, de ir ejecutándolo paso a paso.
El editor ofrece distintos niveles de ayuda, lo que permite familiarizarse con la sintaxis de las
instrucciones de una forma sencilla y rápida. Otra característica muy interesante es la posibilidad de traducir el
algoritmo a distintos lenguajes de programación, lo que constituye una ventaja enorme.
Identificador
Se denomina identificador al nombre que se le asigna a una variable, una función, un tipo de dato, etc.
Para obtener un identificador valido se debe tener en cuenta lo siguiente:
Para facilitar el entendimiento de un algoritmo, debemos tratar de conseguir identificadores que reflejen o
señalen una característica de este. Por ejemplo, si quiero calcular la edad de una persona, entonces al algoritmo
le podría llamar CalculaEdad, Cal_Edad o EdadP y a una de sus variables respectivas puede ser edad.
Tipos de Datos
Todos los datos tienen un tipo asociado con ellos. Por ejemplo, 5 es un dato numérico entero, 5.0 es un
dato numérico real y “5” es un caracter.
Arreglos: Los arreglos son estructuras de datos homogéneas (todos sus datos son del mismo tipo) que permiten
almacenar un determinado número de datos bajo un mismo identificador, para luego referirse a los mismos
utilizando subíndices.
Una variable es un lugar de memoria donde se almacena uno o más datos. El contenido de una variable
puede cambiar durante la ejecución del algoritmo mediante una sentencia de asignación o mediante una
instrucción de lectura.
En el primer ejemplo, la variable area almacenara datos numéricos reales, como 10.45; mientras que
en el segundo ejemplo las variables edad y NroHijos almacenarán datos numéricos enteros, como 55 y 4
respectivamente.
Operadores
Para la construcción de expresiones aritméticas o expresiones lógicas, se pueden usar los operadores
mostrados en la tabla 2.1.
1. Funciones
2. Operadores aritméticos
2.1 ^
2.2 *, / , %
2.3 +, -
3. Operadores de relación
<, <=, =, >, >=, <> (todos tienen la misma prioridad)
4. Operadores de relación
4.1 No
4.2 Y
4.3 O
Si una expresión tiene paréntesis, primero se valora lo que esta dentro del paréntesis, con la prioridad
enumerada anteriormente. Si hay empate, esta se rompe de izquierda a derecha.
Sentencia de Asignación
Permite asignar valores a las variables, tiene el siguiente formato:
Id_variable ExpArit_Log_Car
o
Id_variable = ExpArit_Log_Car
Ejemplos
1. Si x=4, y=12
K25 = 12 * 4 / 5 + 28 % 3 – 1.5
2. Si x = 5, y = 12, z = 50
Función Significado
RC(X) o RAIZ (x) Raíz Cuadrada de x
ABS(x) Valor Absoluto de x
LN(x) Logaritmo Natural de x
EXP(x) Función Exponencial de x
SEN(x) Seno de x
COS(x) Coseno de x
TAN(x) Tangente de x
ASEN(x) Arcoseno de x
ACOS(x) Arcocoseno de x
ATAN(x) Arcotangente de x
TRUNC(x) Parte entera de x
REDOND(x) Entero mas cercano a x
AZAR(x) Entero aleatorio [0;1]
ALEATORIO(X,Y) Entero aleatorio en [x;y]
LONGITUD(s) Tamaño de la cadena s
MAYUSCULAS(s) Todo mayúsculas la cadena s
MINUSCULAS(s) Todo minúsculas la cadena s
En ocasiones existen actividades y acciones que son repetitivas, por lo que los ciclos (estructuras
repetitivas) presentan características que permiten su implementación en tales situaciones.
Los tres elementos mencionados anteriormente son la base de los algoritmos y a través de ellos se
plantea las soluciones de problemas por computadora.
Estructura Secuencial
Joyanes Aguilar, define a una estructura secuencial como aquella en la que una acción (instrucción)
sigue a otra en serie. Señala que las tareas suceden de tal modo que la salida de una es la entrada de la
siguiente y así sucesivamente hasta el final del proceso. La estructura secuencial tiene una entrada y una salida.
Su representación gráfica se muestra en la figura 3
Solución:
Seudocodigo
Algoritmo MediaAritmetica
Definir A,B,MA Como Real
Escribir 'Ingrese el Primer Numero: '
Leer A
Escribir 'Ingrese el Segundo Numero: '
Leer B
MA <- (A+B)/2
Escribir 'MA(',A,',',B,')=',MA
FinAlgoritmo
Diagrama de Flujo
2. Realizar un algoritmo que halle el AREA de un triángulo conociendo sus tres lados
Solución:
Se tiene lo siguiente
Seudocodigo
Algoritmo AreaTrianguloCon3Lados
Definir A,B,C,S,Area Como Real
Escribir 'Ingrese el Primer Lado: '
Leer A
Escribir 'Ingrese el Segundo Lado: '
Leer B
Escribir 'Ingrese el Tercer Lado: '
Leer C
S <- (A+B+C)/2
Area <- ((S-A)*(S-B)*(S-C)*S)^0.5
Escribir 'El Area es: ',Area
FinAlgoritmo
Solución:
Seudocodigo
Algoritmo MayorMenor
// Mas Adelante, este mismo problema es resuelto con Instruciones de
//Control Condicional
// Hay palabras reservadas (de color azul)
// que no se pueden usar como IDENTIFICADORES
// ejemplo Mayor, Algoritmo, Como..
Definir N1,N2,May,Men Como Real
Escribir 'Ingrese dos numeros: '
Leer N1,N2 // Ingrese Datos uno por linea
May <- (N1+N2+ABS(N1-N2))/2 // Puedes usar;
Men <- (N1+N2-ABS(N1-N2))/2
Escribir 'El mayor de ',N1,' y ',N2,' es ',May
Escribir 'El menor de ',N1,' y ',N2,' es ',Men
FinAlgoritmo
Diagrama de Flujo
4. Escribir un algoritmo que encuentre el tiempo de permanencia en horas y minutos de un profesor en el aula,
conociendo la hora de entrada y hora de salida.
Solucion:
Seudocodigo
Algoritmo TiempoDePermanencia
//HE y ME: hora y minutos de entrada
//HS y MS: hora y minutos de salida
//HP y MS: hora y minutos de permanencia
Definir HE,ME,HS,MS,HP,MP Como entero
Escribir "Ingrese la Hora de Entrada (HH MM):"
Leer HE,ME
Escribir "Ingrese la Hora de Salida (HH MM):"
Leer HS,MS
MP <- (HS*60+MS)-(HE*60+ME)
// RESIDUO DE UNA DIVISION ENTERA
// LOS OPERANDOS SON ENTEROS
HP <- (MP - (MP % 60)) / 60
MP <- MP % 60
Escribir "TIEMPO DE PERMANENCIA:"
Escribir HP," hora(s) y ", MP, " minutos"
FinAlgoritmo
Resultados: 1 40
Se tiene:
- Simple
- Doble
- Anidada
- Múltiple
Si ExpLogica Entonces
// Instruccion(es)
Escribir "..."
Leer Var1
IdVar <- Expresion
FinSi
Si ExpLogica Entonces
Ing. Edgar NORABUENA MEZA 19
//Instruccion(es)
Escribir "..."
Leer Var1
3. Selectiva Anidada: Si … entonces … sinoSi … entonces … sino … Esta opción PSeInt no lo tiene
implementado.
Seudocodigo
Si ExpLog1 Entonces
// Instruccion(es)
Escribir "..."
Leer Var1
IdVar <- Expresion
SiNo Si ExpLog2
Entonces
// Instruccion(es)
Escribir "..."
Leer Var1
IdVar <- Expresion
SiNo Si ExpLog3
Entonces
// Instruccion(es)
Escribir "..."
Leer Var1
IdVar <- Expresion
SiNo
// Instruccion(es)
Escribir "..."
Leer Var1
IdVar <- Expresion
FinSi
FinAlgoritmo
Diagrama de Flujo
Si ExpLogica Entonces
//Instruccion(es)
Escribir "..."
Leer Var1
IdVar <- Expresion
SiNo
//Instrucción(es)
FinSi
Si ExpLogica Entonces
// Instruccion(es)
Escribir "..."
Leer Var1
IdVar <- Expresion
FinSi
Ejemplos
1. Desarrollar un algoritmo que lea dos números diferentes y encuentre el mayor y el menor
Solución:
Anteriormente este ejemplo se resolvió usando solo INSTRUCCIONES SECUENCIALES, ahora con
INSTRUCCIONES SELECTIVAS
Seudocodigo
Algoritmo MayorMenorSi
Definir N1,N2,May,Men Como Real
Escribir 'Ingrese dos numeros: '
Leer N1,N2
Si N1>N2 Entonces
May <- N1
Men <- N2
SiNo
May <- N2
Men <- N1
FinSi
Escribir 'El mayor de ',N1,' y ',N2,' es ',May
Escribir 'El menor de ',N1,' y ',N2,' es ',Men
FinAlgoritmo
Solución:
Anteriormente este ejemplo se resolvió usando solo INSTRUCCIONES SECUENCIALES, ahora con
INSTRUCCIONES SELECTIVAS
Diagrama de Flujo
3. Mostrar un algoritmo que lea dos puntos del plano y que calcule la ecuación de la recta que pasa por
dichos puntos.
Solución:
Diagrama de Flujo
4. Elaborar un algoritmo que calcule la edad de una persona teniendo como datos la fecha de nacimiento
(dn/mn/an) y la fecha actual (da/ma/aa).
Solución:
Seudocodigo
Algoritmo CalculaEdad
Definir da,ma,aa,dn,mn,an,Edad Como Entero
Escribir 'Fecha de Nacimiento (dn/mn/an): '
Leer dn,mn,an
Escribir 'Fecha Actual (da/ma/aa): '
Leer da,ma,aa
Edad <- aa-an
Si mn>ma Entonces
Edad <- Edad-1
FinSi
Si mn=ma Y dn>da Entonces
Edad <- Edad-1
FinSi
Escribir 'La persona tiene: ',Edad,' año(s)'
FinAlgoritmo
5. Escribir un algoritmo que lea tres números diferentes y calcule el promedio del mayor y menor.
Solución:
Diagrama de Flujo
Solución:
Se tiene el siguiente sistema de ecuaciones lineales de 2 x 2
𝐴𝑥 + 𝐵𝑦 = 𝐶
𝐷𝑥 + 𝐸𝑦 = 𝐹
Aplicando la regla de Cramer, puedo calcular x e y, siempre y cuando el denominador sea diferente de cero
(será igual a cero si L1 y L2 son rectas paralelas)
𝐶 𝐵 𝐴 𝐶
| | | |
𝐹 𝐸 𝐷 𝐹
𝑥= 𝐴 𝐵 ; 𝑦= 𝐴 𝐵
| | | |
𝐷 𝐸 𝐷 𝐸
Seudocodigo
Algoritmo IntersecDeRectas
Definir A,B,C,D,E,F,dis,X,YY Como Real
Escribir 'Interseccion de RECTAS'
Escribir 'L1 Ax + By = C'
Escribir 'Ingrese los coeficientes de L1:'
Leer A,B,C
Escribir 'L1 Dx + Ey = F'
Escribir 'Ingrese los coeficientes de L2:'
Leer D,E,F
dis <- A*E-D*B
Si dis!=0 Entonces
X <- (C*E-F*B)/dis
YY <- (A*F-D*C)/dis
Escribir 'Punto de Interseccion'
Escribir '(x,y)=(',X,',',YY,')'
SiNo
Escribir 'No hay Punto de Interseccion'
FinSi
FinAlgoritmo
Seudocodigo
Algoritmo OperaArit
Definir A,B,R,OP Como Entero
Definir Re Como Real
Escribir 'OPERACIONES ARITMETICAS'
Escribir '< 1 > Suma'
Escribir '< 2 > Resta'
Escribir '< 3 > Multiplicacion'
Escribir '< 4 > Division'
Escribir '< 5 > Residuo'
Escribir '< 6 > Fin'
Escribir 'OPCION == >'
Leer OP
Si (OP<6) Y (OP>=1) Entonces
Escribir 'Ingrese dos NUMEROS ENTEROS'
Leer A,B
FinSi
Segun OP Hacer
1:
R <- A+B
Escribir A,' + ',B,' = ',R
2:
R <- A-B
Escribir A,' - ',B,' = ',R
3:
R <- A*B
Escribir A,' * ',B,' = ',R
4:
Si B=0 Entonces
Escribir 'NO SE PUEDE DIVIDIR'
SiNo
Re <- A/B // En C++ es diferente
Escribir A,' / ',B,' = ',Re
FinSi
5:
R <- A MOD B
Escribir A,' mod ',B,' = ',R
6:
Escribir 'GRACIAS!!!!'
De Otro Modo:
Escribir 'NO EXISTE ESA OPCION'
FinSegun
FinAlgoritmo
1. Mientras
2. Hacer … Mientras
Seudocodigo
Para VC <- VI Hasta VF Con Paso INC Hacer
// Instrucciones
Var1 <- ExpArit
Leer V1
Escribir ' '
FinPara
Figura 4
Figura 5
1. Realizar un algoritmo que calcule el promedio de una lista indeterminada de números reales positivos,
hasta que se introduzca un número negativo.
Solución:
Resultado de la compilación y
ejecución
Solución:
Seudocodigo
Algoritmo DivEntera
Definir DD,d,q,rd Como Entero
Escribir 'DIVISION ENTERA POR DEFECTO'
Escribir 'DIVIDENDO(>0)'
Leer DD
Escribir 'DIVISOR(<0)'
Leer d
Escribir DD,' entre ',d
q <- 0
Mientras DD>=d Hacer
DD <- DD-d
q <- q+1
FinMientras
rd <- DD
Escribir 'COCIENTE: ',q
Escribir 'RESIDUO: ',rd
FinAlgoritmo
Diagrama de Flujo
Resultado de la compilación y
ejecución
Escribir un algoritmo que lea un número entero positivo N y escriba su respectiva secuencia.
Solución:
Seudocodigo
Algoritmo UlamMientras
Definir N Como Entero
Escribir 'Ingrese un Numero Entero Positivo '
Leer N
Escribir 'SECUENCIA DE ULAM: '
Mientras N>1 Hacer
Escribir N
Si N MOD 2=0 Entonces
N <- N/2
SiNo
N <- 3*N+1
FinSi
FinMientras
Escribir N
FinAlgoritmo
Seudocodigo
Algoritmo UlamRepetir
Definir N Como Entero
Escribir 'Ingrese un Numero Entero Positivo '
Leer N
Escribir 'SECUENCIA DE ULAM: '
Si N!=1 Entonces
Repetir
Escribir N
Si N MOD 2=0 Entonces
N <- N/2
SiNo
N <- 3*N+1
FinSi
Mientras Que N>1
FinSi
Escribir N
FinAlgoritmo
Solución:
Solución:
Arreglos Unidimensionales
Índice → 0 1 2 3 4 5 6 7 8 9
Datos →
10.4 11.3 8.5 19.5 15.1 13.1 5.2 10.2 9.8 13.7
U[4]
Figura 6. Vector U
1. Escribir un algoritmo que permita ingresar las notas de la asignatura Introducción a la Computación a un
arreglo de la siguiente forma: en el índice 0, la nota del EP; en el índice 1 el EF; en el índice 2 la PC1; en
el índice 3 la PC2; en el índice 4 la PC3; en el índice 5 la PC4; en el índice 6 asigan el Promedio de
Practicas (calcular). Finalmente, el algoritmo debe mostrar el Promedio Final del curso y el mensaje de
Aprobado o Jalado según corresponda.
Solución:
2. Diseñar un solo algoritmo que lea un vector a, de n elementos, luego, debe leer k entero, a continuación,
eleve al cuadrado cada elemento de a que sea menor que k, para finalmente mostrar el vector a.
Solución:
Seudocodigo
Algoritmo ModElVec
Definir a,n,k,i Como Entero
Dimension a[50]
Escribir 'Nro. de Elementos del Vector'
Leer n
Escribir 'Elementos del Vector'
Para i<-0 Hasta n-1 Hacer // Ingreso de datos del VECTOR
Escribir '[',i+1,']='
Leer a[i]
FinPara
Escribir 'Ingrese un Numero Entero'
Leer k
Para i<-0 Hasta n-1 Hacer
Si a[i]<k Entonces
a[i] <- a[i]*a[i] // Modificando los elementos
FinSi
FinPara
Escribir 'Elementos del Vector'
Para i<-0 Hasta n-1 Hacer // Mostrar el VECTOR
Escribir a[i]
FinPara
FinAlgoritmo
3. Escribir un algoritmo que lea en el vector X las notas del Examen Final del curso Introducción a la
Computación y calcular la varianza de las notas.
∑𝑛
1 𝑥𝑖
Promedio: 𝑥̅ =
𝑛
∑𝑛
𝑖 (𝑥𝑖 −𝑥̅ )
2
Varianza: 𝑉 (𝑥) =
𝑛
Para ordenar datos en forma ascendente o descendente existen muchos métodos, entre ellos tenemos:
- Ordenamiento de BURBUJA
- Ordenamiento por SELECCIÓN
- Ordenamiento por INSERCION
- Ordenamiento SHELL
Ordenamiento de BURBUJA
También llamado buble sort, este algoritmo obtiene su nombre de la forma como suben por la lista los
elementos durante los intercambios como si fueran pequeñas “burbujas”. También es conocido como el método
de intercambio directo, dado que usa comparaciones para el ordenamiento. de datos
En el ejemplo siguiente se ordena en forma ascendente (>) un vector que tiene 5 elementos enteros.
Datos Iniciales:
18 7 10 6 4
Ejemplo:
1. Elaborar un algoritmo que lea las notas del Examen Parcial de n (>5) alumnos. El algoritmo debe
calcular:
- El promedio de los aprobados
- Las 5 peores notas
- La mejor nota
- La cantidad de alumnos que aprobaron con 10.
Solución:
Seudocodigo
Algoritmo OrdVecOtros
Definir PromA Como Real
Definir X,N,i,j,MeNota,CanA10,CanA,Ayu Como Entero
Dimension X[50]
PromA <- 0
CanA <- 0
CanA10 <- 0
Escribir 'Nro. de Alumnos'Leer N
Escribir 'Ingrese las Notas'
Para i<-0 Hasta N-1 Hacer
Escribir 'NOTA[',i+1,']='
Leer X[i]
Si X[i]>=10 Entonces
PromA <- PromA+X[i]
CanA <- CanA+1
FinSi
Si X[i]=10 Entonces
CanA10 <- CanA10+1
FinSi
FinPara
PromA <- PromA/CanA
Escribir 'Promedio de Aprobados ',PromA
Escribir 'Cantidad de Aprobados con 10 es ',CanA10
Para i<-0 Hasta N-2 Hacer // ORDENANDO-METODO BURBUJA
Para j<-0 Hasta N-i-2 Hacer
Si X[j]>X[j+1] Entonces
Ayu <- X[j]
X[j] <- X[j+1]
X[j+1]<-Ayu
FinSi
FinPara
FinPara
Escribir 'Las 5 peores notas: '
Para i<-0 Hasta 4 Con Paso 1 Hacer
Escribir X[i]
FinPara
Escribir 'La mejor Nota: ',X[N-1]
FinAlgoritmo