Академический Документы
Профессиональный Документы
Культура Документы
Telecomunicaciones
Sistema a Distancia
ALGORITMOS
Un enfoque práctico
2009
Algoritmos: Un enfoque práctico - Capítulo I Franklin Arriola R. / Yuliana Jáuregui R.
Índice General
Presentación .......................................................................................... 1
Introducción .......................................................................................... 2
Capitulo I
Nociones de algoritmos ......................................................................... 3
1. Definición de algoritmos ....................................................................... 3
2. Visión histórica .................................................................................... 3
3. Características de los algoritmos ............................................................ 3
4. Herramientas para el diseño de algoritmos ............................................. 4
4.1. Diagramas de flujo ...................................................................... 4
4.2. Diagramas Nassi-Schneiderman ..................................................... 5
4.3. Pseudocódigo .............................................................................. 5
5. Composición de los algoritmos .............................................................. 6
5.1. Sección de datos ....................................................................... 7
5.1.1. Variables ............................................................................. 7
5.1.2. Constantes .......................................................................... 7
5.1.3. Tipos de datos ...................................................................... 7
5.2. Sección del código ..................................................................... 8
5.2.1. Expresión ............................................................................ 8
5.2.2. Operadores u Operandos ....................................................... 8
5.2.2.1. Prioridad de los operadores ......................................... 10
5.2.2.2. Uso de paréntesis ...................................................... 10
5.2.3. Funciones predefinidas ......................................................... 11
5.2.4. Asignación .......................................................................... 11
6. Secuencia de los algoritmos ................................................................. 12
6.1. Entrada de datos ...................................................................... 12
6.2. Salida de datos ........................................................................ 13
Capitulo II
Programación estructurada .................................................................. 14
1. Definición de programación estructurada ............................................... 14
2. Estructura secuencial ...........................................................................14
2.1. Ejercicios resueltos ....................................................................14
2.2. Ejercicios propuestos ................................................................ 29
3. Estructura selectiva .............................................................................30
3.1. Estructura selectiva simple: Si – Fin_si .........................................31
3.2. Estructura selectiva doble: Si – Sino – Fin_si ................................34
3.3. Estructura selectiva múltiples ..................................................... 41
3.3.1. Estructura selectiva múltiple: Si anidado ................................ 41
3.3.2. Estructura selectiva múltiple: En caso sea – Fin_caso ............... 51
3.3.3. Estructura selectiva múltiple: En caso sea múltiple .................. 58
3.4. Ejercicios propuestos ................................................................ 62
4. Estructura repetitiva ........................................................................... 65
4.1. Conceptos básicos .................................................................... 65
4.2. Estructura repetitiva Mientras - Fin_mientras ............................... 65
4.3. Estructura repetitiva Repetir – Hasta_que..................................... 81
4.4. Estructura repetitiva Desde – Fin_desde ...................................... 90
4.5. Variantes de las estructuras repetitivas ....................................... 99
4.5.1. Bucles anidados ................................................................... 99
4.5.2. Bucles infinitos .................................................................. 107
4.6. Ejercicios propuestos .............................................................. 108
Capitulo III
Programación modular ....................................................................... 112
1. Definición de programación modular ................................................... 112
1 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo I Franklin Arriola R. / Yuliana Jáuregui R.
Capitulo IV
Arreglos............................................................................................... 171
1. Arreglos .......................................................................................... 171
2. Tipos de arreglos .............................................................................. 171
2.1. Arreglos Unidimensionales o vectores......................................... 171
2.1.1. Declaración de un vector .................................................... 171
2.1.2. Acceso a los elementos de un vector .................................... 172
2.1.3. Operaciones con vectores ................................................... 172
2.2. Arreglos Bidimensionales o matrices ......................................... 172
2.2.1. Declaración de una matriz .................................................. 173
2.2.2. Acceso a los elementos de una matriz .................................. 173
2.3. Arreglos Multidimensionales ..................................................... 173
3. Formas de inicialización de los arreglos ............................................... 174
3.1. En vectores ............................................................................ 174
3.2. En matrices ........................................................................... 174
4. Arreglos sin tamaño .......................................................................... 175
5. Lectura e impresión de un arreglo ....................................................... 175
5.1. Lectura en vectores ................................................................ 175
5.2. Lectura en matrices ................................................................ 175
5.3. Impresión en vectores ............................................................. 175
5.4. Impresión en matrices ............................................................ 176
6. Ejercicios resueltos ............................................................................. 176
7. Ejercicios propuestos ........................................................................ 190
8. Paso de vectores a módulos ............................................................... 191
8.1. Parámetro actual .................................................................... 191
8.2. Parámetro formal ................................................................... 192
9. Paso de una matriz a módulos ............................................................ 192
9.1. Parámetro actual .................................................................... 192
9.2. Parámetro formal ................................................................... 192
10. Ejercicios resueltos ........................................................................... 193
11. Ejercicios propuestos ........................................................................ 249
Capitulo V
Métodos de ordenación y búsqueda .................................................... 253
1. Métodos de ordenación por selección .................................................. 253
2 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo I Franklin Arriola R. / Yuliana Jáuregui R.
3 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo I Franklin Arriola R. / Yuliana Jáuregui R.
Introducción
En cada capitulo del libro se considera una parte teórica, importante para el
entendimiento de los temas tratados, así como un número significativo y variado de
ejercicios resueltos, que ayude al lector a comprender y experimentar el manejo de
algoritmos, además se proporciona una lista de problemas planteados, que pueden
ser resueltos como resultado de la lectura del libro.
4 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo I Franklin Arriola R. / Yuliana Jáuregui R.
Nociones de algoritmos
1. Definición de algoritmos
Se puede comparar el concepto de algoritmo con una receta de cocina, así pues, los
algoritmos habitualmente están formados por secuencias de instrucciones que
probablemente se repiten (iteran) o que requieren decisiones (comparaciones
lógicas) hasta que completan su tarea.
2. Visión histórica
La palabra algoritmo proviene del nombre del matemático y astrónomo Abu Ja’far
Muhammad ibn Musa al-Khwarizmi que vivió entre los siglos VIII y IX. Este
personaje no se destaca por crear nuevos teoremas, sino más bien por escribir
libros de muy fácil comprensión, simplificando el entendimiento de la matemática,
pudiendo ser aplicada por un mayor número de personas. Desarrolló en el Al-yebr-
mugabata, fórmulas para posibilitar que con un número limitado de pasos e
indicaciones claras de ejecución, se pudieran resolver ecuaciones de primer y
segundo grado; explicó por medio de algoritmos el uso de dispositivos mecánicos
como los ábacos. Es por esto y otras razones, que aun no siendo el creador del
primer algoritmo, el concepto lleva aunque no su nombre, sí su pseudónimo.
Así, de la palabra algorismo, que originalmente hacía referencia a las reglas de uso
de la aritmética utilizando dígitos árabes, se evolucionó a la palabra latina,
derivación de al-Khwarizmi, algobarismus, que en el siglo XVIII mutaría a algoritmo
abarcando su definición a toda clase de procedimientos utilizados con el propósito
de resolver problemas o realizar determinadas tareas.
5 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo I Franklin Arriola R. / Yuliana Jáuregui R.
Para hacer comprensibles los diagramas a todas las personas, los símbolos
utilizados han sido normalizados por el Instituto Nacional Estadounidense de
Estándares (ANSI, por sus siglas en inglés: American National Standards
Institute).
Diagrama Descripción
6 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo I Franklin Arriola R. / Yuliana Jáuregui R.
Inicio
Acción1
Acción2
.
.
.
AcciónN
Fin
4.3. Pseudocódigo
Inicio
Acción1
Acción2
.
.
.
AcciónN
Fin
7 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo I Franklin Arriola R. / Yuliana Jáuregui R.
Ejercicio 01
Algoritmo para hacer una llamada desde un teléfono fijo, conociendo el número
al cual se llamará.
Inicio
Inicio
Levanto fono Levanto fono
Espero tono
Marco número Espero tono
Espero que contesten
Hablo con la otra persona Marco número
Cuelgo el fono
Fin
Espero que contesten
Cuelgo el fono
Fin
Ejercicio 02
Algoritmo para freír un huevo asumiendo que todo lo que se necesita se tiene
disponible.
Inicio
Abrir la llave del gas
Coger un fósforo
Prender la cocina
Poner aceite en la sartén
Romper huevo haciendo caer el contenido en la sartén
Tirar cáscaras a la basura
Poner sal al huevo
Mover el huevo con una rasera mientras se esta friendo
Una vez frito el huevo sacarlo con una rasera y colocarlo en un plato
Apagar la cocina.
Fin
Básicamente los algoritmos están compuestos por una sección de datos y otra del
código, así tenemos:
Inicio
Constante real: pi 3.1416
Variable real: r, c Sección de datos
8 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo I Franklin Arriola R. / Yuliana Jáuregui R.
5.1.1. Variables
5.1.2. Constantes
9 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo I Franklin Arriola R. / Yuliana Jáuregui R.
• Enteros
Son números que no contienen componentes decimales o fraccionarias;
pueden ser positivos o negativos. Permite realizar operaciones
aritméticas.
• Reales
Son números, siempre tienen un punto decimal y pueden ser positivos o
negativos. Un número real consta de un número entero y una parte
decimal. Permite realizar operaciones aritméticas.
• Carácter
Es un conjunto finito y ordenado de caracteres que la computadora
reconoce. Un dato de este tipo contiene solo un carácter. Dentro del
algoritmo se distingue de las variables, porque son delimitados por
apóstrofes o comillas simples.
Así tenemos:
o Caracteres Alfabéticos (‘A’,’B’,’C’,… ‘Z’, ‘a’, ‘b’, ‘c’… ‘z’)
o Caracteres Numéricos (‘0’, ‘1’, ‘2’,… ‘9’)
o Caracteres Especiales (‘+’, ‘-’, ‘/’, ‘^’, ‘;’, ‘<‘, ‘>’, ‘$’, ...)
• Cadena
Es un sucesión de caracteres que se encuentran delimitados por comillas
doble, representan información textual (palabras, frases, etc). La
longitud de una cadena es el número de caracteres comprendidos entre
los separadores o delimitadores, los espacios en blanco tambien los
cuenta. Por ejemplo:
“Hola amigos” Longitud = 11
“Bienvenidos al mundo de los algoritmos” Longitud = 38
• Lógicos
Denominados también Booleano, es aquél dato que solo puede tomar
uno de dos valores: verdadero (true) o falso (false).
A esta sección se le considera el corazón del algoritmo. En ella van el cuerpo del
programa, conformado por las sentencias que indican los pasos que se van a
realizar durante la ejecución del algoritmo.
5.2.1. Expresión
a+2*b–c/3
10 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo I Franklin Arriola R. / Yuliana Jáuregui R.
Los operadores son símbolos especiales que relacionan los valores de una o
más variables y/o constantes. Es decir, los operadores nos permiten
manipular valores.
Los operandos son los valores, constantes, variables o expresiones que
intervienen en una expresión.
Variable o Constante
a) Operadores Aritméticos
• Permite la realización de operaciones matemáticas con los valores de
las variables y constantes.
• Pueden ser utilizados con tipos de datos enteros o reales.
• Cuando en una operación aritmética los operandos son de tipos
diferentes, ambos son convertidos al tipo de operando de precisión
mas alta, es decir si ambos son enteros, el resultado es entero, si
alguno de ellos es real, el resultado es real.
b) Operadores Relacionales
• Se utiliza para comparar dos valores, produciendo un resultado lógico
(verdadero o falso)
• La comparación se realiza entre valores del mismo tipo de datos
(numéricos o cadenas).
• Estos operadores sirve para expresar las condiciones en los
algoritmos.
11 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo I Franklin Arriola R. / Yuliana Jáuregui R.
c) Operadores Lógicos
• Permite establecer comparaciones entre valores lógicos
• El resultado de esta comparación es de tipo lógico o booleano
(verdadero o falso).
Los operadores lógicos son:
Variables Operador
x y x and y x or y not x
Se observa en la tabla que el resultado de una operación and será cierto solo
si los dos operandos son ciertos, el resultado de una operación or será cierto
si alguno de los dos operandos es cierto o ambos a la vez, en el caso del
operador not niega el operando, obteniéndose true (verdadero) si el
operando es falso o viceversa.
^ Exponenciación
*, /, mod Multiplicación, división, modulo.
+, - Suma y resta.
Por ejemplo: 2 + 3 * 10
12 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo I Franklin Arriola R. / Yuliana Jáuregui R.
x=a+b/2
x = (a+b) / 2
Por ejemplo:
8 + ( 6 – ( 8 – 3 ) + 2)
Primero efectuamos el paréntesis mas interno (8 – 3) obteniendo 5 como
resultado, reemplazamos obtenemos 8 + (6 – 5 + 2).
Función Descripción
absoluto(x) Valor absoluto
cos(x) Coseno
sin(x) Seno
entero(x) Parte entera de un número
ln(x) Logaritmo natural
log(x) Logaritmo decimal
raiz(x) Raíz cuadrada
redondeo(x) Redondear un número
5.2.4. Asignación
13 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo I Franklin Arriola R. / Yuliana Jáuregui R.
Nom_variable Expresión
Ejemplo:
a 2
Inicio
14 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo I Franklin Arriola R. / Yuliana Jáuregui R.
Se utiliza para que un usuario introduzca los datos requeridos por un algoritmo.
Leer (a, b, c) a, b, c
Los mensajes se escriben entre comillas dobles " ". Si una variable es escrita
entre comillas, se mostrará el nombre de la variable correspondiente, y si la
variable es escrita sin comillas se mostrara el contenido de la variable.
Así se tiene:
• Escribir (“Cualquier mensaje”)
• Escribir (variable1, variable2)
15 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
Programación estructurada
1. Definición
2. Estructura secuencial
inicio
Inicio
Acción1 Accion1
Acción2
. Accion2
.
. .
AcciónN .
Fin .
AccionN
Fin
Ejemplo 01
Pseudocódigo para sumar dos números.
16 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
Inicio
// Definir variables
entero: nro1, nro2, suma
// Lectura de datos
Escribir (“Ingresar dos valores”)
Leer (nro1, nro2)
// Calcular suma
suma nro1 + nro2
Escribir (“La suma de ambos números es: ” , suma)
Fin
Explicación
• Los Pseudocódigos están delimitados por las palabras: Inicio y Fin.
• Los comentarios son mensajes de texto opcionales que se utiliza para
documentar un programa haciéndolo fácilmente entendibles a los lectores.
Empieza con los caracteres “//” seguido a continuación del comentario deseado.
En nuestro ejemplo se ha utilizado:
// Definir e inicializar variables
// Lectura de datos
// Calcular suma
• Se definen todas las variables que se van a utilizar en el desarrollo del
algoritmo. En nuestro ejemplo:
entero: nro1, nro2, suma
Aqui se define el tipo de dato de las variables y a continuación la lista de
variables separadas por comas.
• Se utiliza la palabra Leer para introducir el valor de una variable a través del
teclado o algún otro medio. En nuestro ejemplo:
Leer (nro1, nro2)
• Se asigna un valor a una variable, a través del símbolo flecha () que dice que
el valor a la derecha tiene que ser asignado a la variable que esta a la izquierda.
En nuestro ejemplo:
suma nro1 + nro2
Se suman los números nro1 y nro2 utilizando el operador “+”. Luego este
resultado es asignado a la variable suma.
• Se usa la palabra Escribir para identificar una salida estándar a través del
monitor o consola. En nuestro ejemplo:
Escribir (“La suma de ambos números es: ”, suma)
De esta forma, se muestra en la pantalla el siguiente texto: La suma de ambos
números es: … , en este caso el operador “,” une el texto La suma de ambos
números es: con el contenido de la variable suma.
Ejemplo 02
Pseudocódigo para calcular el área de un rectángulo, donde la base y la altura
serán ingresados. La fórmula es:
17 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
Inicio
// Definir variables
entero: base, altura, area
// Lectura de datos
Escribir (“Ingrese la base y la altura”)
Leer (base, altura)
// Proceso: calculo del area
area base * altura
// Salida de resultados
Escribir (“El área del rectángulo es ”,area)
Fin
Ejemplo 03
Pseudocódigo para determinar la suma de las cifras de un número entero positivo
de 3 cifras.
Por ejemplo para sumar las cifras del número 257 se tiene:
2 + 5 + 7 = 14
Para obtener cada cifra del número será necesario realizar divisiones sucesivas
entre 10.
Lectura de datos Impresión de datos
Inicio
// Definir e inicializar variables
entero: nro, unidades, decenas, centenas, suma 0
// Lectura de datos
Leer (nro)
// Proceso de cálculo
unidades nro Mod 10
nro nro Div 10
decenas nro Mod 10
nro nro Div 10
centenas nro Mod 10
suma unidades + decenas + centenas
// Salida de resultados
Escribir (“La suma de los dígitos es ”, suma)
Fin
18 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
Ejemplo 04
Pseudocódigo para sumar dos tiempos dados en horas, minutos y segundos.
Por ejemplo:
Tiempo 1 = 8:15:56
Tiempo 2 = 10:58:43
1 1
8 : 15 : 56
10 : 58 : 43
19 74 60 99 60
60 1 60 1
19 : 14 : 39
Para el desarrollo del pseudocódigo se suman los segundos de los dos tiempos, el
resultado de esta suma se divide entre 60, siendo el residuo de esta división el total
de segundos y el cociente se suma a los minutos, de igual forma se realiza la suma
de los minutos, el resultado de esta suma se divide entre 60, siendo el residuo de
la división el total de minutos y el cociente se suma a las horas.
Inicio
// Definir variables
entero: hor1, min1, seg1, llevaMin,hor2, min2, seg2, llevaHora, hor, min, seg
// Lectura de datos
Escribir (“Ingresar primer tiempo”)
Leer (hor1, min1, seg1)
Escribir (“Ingresar segundo tiempo”)
Leer (hor2, min2, seg2)
// Determina la cantidad total de segundos entre los dos tiempos
seg seg1 + seg2
llevaMin seg Div 60
seg seg Mod 60
min llevaMin + min1 + min2
19 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
Ejemplo 05
Pseudocódigo que permita pasar de grados centígrados a grados Farenheit sabiendo
que:
9
º F = º C + 32
5
centi faren
10 50
20 68
30 86
40 104
Inicio
// Definir variables
real: centi, faren
// Lectura de datos
Escribir (“Ingresar grados centígrados”)
Leer (centi)
// Proceso de cálculo: conversión de temperatura
faren 9 / 5 * centi +32
// Salida de resultados
Escribir (centi, “ centígrado equivale a ”, faren, “ Farenheit“)
Fin
Ejemplo 06
Pseudocodigo calcular la suma de los “n” primeros números naturales. Emplear la
fórmula:
n (n + 1)
suma =
2
20 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
Factor de conversión
Es una fracción en la que el numerador y denominador son medidas iguales
expresadas en unidades distintas, de tal manera, que esta fracción vale la unidad.
Método efectivo para cambio de unidades y resolución de ejercicios sencillos
dejando de utilizar la regla de tres.
Ejemplo 07
Pseudocódigo para convertir una longitud dada en metros a sus equivalentes en
milímetros, centímetros, pies, pulgadas y yardas. Se sabe que:
21 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
Inicio
// Definir variables
real: metros, mili, cent, pies, pulg, yarda, km
// Lectura de datos
Escribir (“Ingresar medida en metros”)
Leer (metros)
// Proceso de cálculo: conversiones métricas
mili 1000 * metros
cent metros * 100
pulg cent / 2.54
pies pulg / 12
yarda pies / 3
km metros / 1000
// Salida de resultados
Escribir (metros, “metros equivale a ”, mili, “ milímetros ”, cent,
“Centímetros ”, pulg, “pulgadas ”, pies, “ pies ”, yarda, “ yardas ”, km,
“Kilómetros”)
Fin
Ejemplo 08
Pseudocódigo para convertir pesos, dado en gramos a sus equivalentes en
miligramos, kilogramos, onza y libras. Se sabe que:
22 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
mili 1000*gramo
kilo gramo/1000
gramo onza gramo/28.35 mili, kilo, onza, libra
libra gramo/453.6
Inicio
// Definir variables
real: gramo, mili, kilo, onza, libra, tm
// Lectura de datos
Escribir (“Ingresar peso en gramos”)
Leer (gramo)
// Proceso de cálculo: conversiones de pesos
mili 1000 * gramo
kilo gramo / 1000
onza gramo / 28.35
libra gramo / 453.6
tm libra / 2000
// Salida de resultados
Escribir (gramo, “gramos equivale a ”, mili, “ miligramos “, kilo, “
Kilogramos ”, onza, “ Onzas ”, libra, “ Libra ”, tm , “ toneladas ”)
Fin
Ejemplo 09
Pseudocódigo para convertir velocidades dada en metros/segundos a sus
equivalentes en km/hora, km/seg, pies/seg, milla/hora, nudo. Se sabe que:
1 km = 1000 metros
1 minuto = 60segundos
1 hora = 3600 segundos
1 nudo = 1.852 km
1 pie = 12 pulgadas =0.3048 metros
1 milla =1.609 km
23 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
Inicio
// Definir variables
real: metroSeg, kmHora, kmSeg, piesSeg, millaHora, nudo
// Lectura de datos
Escribir (“Ingresar velocidad en metros y segundos”)
Leer (metroSeg)
// Proceso de cálculo: conversiones de velocidades
kmHora metroSeg * 3.6
kmSeg metroSeg / 1000
piesSeg metroSeg / 0.3048
millaHora 3600 * metroSeg / 1609
nudo 3600 * metroSeg / 1852
// Salida de resultados
Escribir (metroSeg, “ Metros/seg equivale a ”, kmHora, “ Kilómetros/hora ”,
kmSeg, “ Kilómetros /seg ”, piesSeg, “ Pie/seg ”, millaHora, “ Millas/hora ”,
nudo, “ Nudo ”)
Fin
Ejemplo 10
En una tienda se ha puesto en oferta la venta de cierto tipo de producto ofreciendo
un descuento fijo del 15% del monto de la compra. Elabore un algoritmo que
determine el monto del descuento y el monto a pagar por la compra de cierta
cantidad de unidades del producto.
Inicio
24 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
// Definir variables
entero: cantidad
real: precio, desc, compra, montoAPagar
// Lectura de datos
Escribir (“Ingresar precio del producto”)
Leer (precio)
Escribir (“Ingresar cantidad”)
Leer (cantidad)
// Proceso de calculo
compra precio * cantidad
desc 0.15 * compra
montoAPagar compra - desc
// Salida de resultados
Escribir (“El monto del descuento es ”, desc)
Escribir (“El monto a pagar es ”, montoAPagar)
Fin
Ejemplo 11
Pseudocódigo que determina el porcentaje de varones y de mujeres que hay en un
salón de clase.
Inicio
// Definir variables
entero: cvar, cmuj, total
real: pvar, pmuj
// Lectura de datos
Escribir (“Ingresar cantidad de varones”)
Leer (cvar)
Escribir (“Ingresar cantidad de mujeres”)
Leer (cmuj)
// Proceso de calculo
total cvar + cmuj
pvar (cvar * 100) / total
pmuj 100 - pvar
// Salida de resultados
Escribir (“El porcentaje de varones es ”, pvar)
Escribir (“El porcentaje de mujeres es ”, pmuj)
Fin
Ejemplo 12
Pseudocódigo que intercambie las cifras de las unidades de dos números naturales.
Por ejemplo:
Número 1: 2485
Número 2: 17
25 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
Inicio
// Definir variables
entero: nro1, nro2, unro1, unro2
// Lectura de datos
Escribir (“Ingresar dos números”)
Leer (nro1, nro2)
// Proceso de calculo
unro1 nro1 Mod 10
unro2 nro2 Mod 10
nro1 nro1 – unro1 + unro2
nro2 nro2 – unro2 + unro1
// Salida de resultados
Escribir (“Los números intercambiados son ”, nro1, nro2)
Fin
Ejemplo 13
Pseudocódigo que convierte una hora expresada como un número real a su
equivalente en horas, minutos y segundos.
Por ejemplo:
Hora: 16.235
Equivale a: 16 horas, 14 minutos y 6 segundos
26 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
Inicio
// Definir variables
real: hora, minuto, segundo
entero: hor, min, seg, cs
// Lectura de datos
Escribir (“Ingresar hora”)
Leer (hora)
// Proceso de cálculo
hor entero (hora)
hora hora - hor
minuto hora * 60
min entero (minuto)
minuto minuto - min
segundo minuto * 60
seg entero (segundo)
segundo segundo – seg
cs segundo * 100
// Salida de resultados
Escribir (“El equivalente es ”, hor, min, seg, cs)
Fin
Ejemplo 14
Pesudocódigo para calcular el monto final que se paga por la compra de un auto al
crédito, al precio de venta se le aumenta el 4% de impuestos estatales, de tal
forma que el cliente tendrá que pagar como cuota inicial el 20% de este nuevo
precio, el monto financiado tendrá un interés del 7% anual.
Inicio
// Definir variables
real: imp, precio, cuota, finan, inter, total
// Lectura de datos
Escribir (“Ingresar precio”)
Leer (precio)
Escribir (“Ingresar años financiados”)
27 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
Leer (tiempo)
// Proceso de cálculo
imp 0.04 * precio
precio precio + imp
cuota 0.20 * precio
finan precio - cuota
inter 0.07 * finan * tiempo
total cuota + finan + inter
// Salida de resultados
Escribir (“El total a pagar es ”, total)
Fin
Ejemplo 15
Pseudocódigo para calcular la cantidad de arena que se necesita para pulir una
pared, se conoce las medidas de la pared (largo y alto) y se sabe que se necesita
0,5 metros cúbicos de arena por cada metro cuadrado de pared.
Inicio
// Definir variables
real: largo, alto, area, arena
// Lectura de datos
Escribir (“Ingresar largo y alto de la pared”)
Leer (largo, alto)
// Proceso de cálculo
area largo * alto
arena 0.5 * area
// Salida de resultados
Escribir (“Se necesita ”, arena, “metros cúbicos de arena”)
Fin
Ejemplo 16
Pesudocódigo para calcular el tiempo que tarda el atleta en dar 2 vueltas a una
pista de atletismo, se tiene como datos la velocidad en metros/segundos y el radio
de la circunferencia de la pista, se sabe además que el atleta descansa 1 minuto
cada 100 metros.
28 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
Inicio
// Definir variables
real: vel, radio, recor, tiempo, tiemdes
// Lectura de datos
Escribir (“Ingresar velocidad”)
Leer (vel)
Escribir (“Ingresar radio”)
Leer (radio)
// Proceso de cálculo
recor (2 * 3.1416 * radio) * 2
tiempo recor / vel
tiemdes (recor Div 100) * 2
tiempo tiempo + tiemdes
// Salida de resultados
Escribir (“El tiempo empleado en dar 2 vueltas es ”, tiempo)
Fin
Ejemplo 17
Pseudocódigo para calcular el precio de venta de una pizza; el tamaño de la pizza
varía según la solicitud del cliente, quien determina el diámetro en centímetros que
tendrá la pizza. El costo básico (pizza sin ingredientes extras) es de 0,48 soles por
cm, el costo de cada ingrediente extra agregado a la pizza base es de 0,10 soles
por cm, el precio de venta de la pizza se obtiene recargando un 120% en costo
total.
Inicio
// Definir variables
entero: diam, extra
real: precio, adic, recar, venta
// Lectura de datos
Escribir (“Ingresar diámetro de la pizza”)
Leer (diam)
Escribir (“Ingresar cantidad de ingredientes extras”)
Leer (extra)
29 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
// Proceso de cálculo
precio diam * 0.48
adic extra * diam
recar (precio + adic) * 1.2
venta precio + adic + recar
// Salida de resultados
Escribir (“El precio de venta es ”, venta)
Fin
Ejemplo 18
Pesudocódigo para calcular el mínimo de monedas de 2.00, 1.00, 0.50, 0.20 y 0.10
que una máquina electrónica da como vuelto por la compra de un paquete de
galletas, dicha maquina solo acepta monedas de 5 soles.
Inicio
// Definir variables
entero: vueltoEnt, vueltoReal, m1, m2, m50, m20, m10
real: precio, vuelto
// Lectura de datos
Escribir (“Ingresar precio de la galleta”)
Leer (precio)
// Proceso de cálculo
vuelto 5 – precio
vueltoEnt entero (vuelto)
vueltoReal (vuelto – vueltoEnt) * 100
m2 vueltoEnt Div 2
m1 vueltoEnt Mod 2
m50 vueltoReal Div 50
vueltoReal vueltoReal Mod 50
m20 vueltoReal Div 20
m10 vueltoReal Mod 20
// Salida de resultados
30 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
Escribir (“Se recibe ”, m2, “monedas de 2.00 soles”, m1, “monedas de 1.00
sol”, m50, “monedas de 0.50 céntimos”, m20, “monedas de 0.20 céntimos”,
m10, “monedas de 0.10 céntimos”)
Fin
Ejemplo 19
Pseudocódigo para calcular el tiempo, en horas y minutos que emplea un profesor
para calificar un grupo de exámenes. Se tienen tres tipos de examen A, B, C y el
tiempo en minutos requerido para cada tipo son: A = 5 min, B = 7 min y C = 8
min.
Inicio
// Definir variables
entero: ca, cb, cc, hor, min
// Lectura de datos
Escribir (“Ingresar cantidad de exámenes tipo A”)
Leer (ca)
Escribir (“Ingresar cantidad de exámenes tipo B”)
Leer (cb)
Escribir (“Ingresar cantidad de exámenes tipo C”)
Leer (cc)
// Proceso de cálculo
tiempo (ca * 5) + (cb * 7) + (cc * 8)
hor tiempo Div 60
min tiempo Mod 60
// Salida de resultados
Escribir (“Se emplea ”, hor, “horas con”, min, “minutos”)
Fin
2.2.Ejercicios Propuestos
31 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
32 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
3. Estructura selectiva
Si (expresión_lógica) entonces
Acción(es)
Fin_si
Ejemplo 01
Pseudocódigo que lea tres notas de un alumno: examen parcial, examen final y
promedio de prácticas imprima el promedio final del estudiante y el mensaje
“aprobado”, solo si el promedio final es mayor o igual que 10.5.
promedio =
exPar exFin promP mensaje
(exPar+exFin+promP)/3
14 16 12 14.00 aprobado
10 14 15 13.00 aprobado
Inicio
// Definir variables
real: exPar, exFin, promP, promedio
// Lectura de datos
Escribir (“Ingresar tres notas:”)
Leer (exPar, exFin, promP)
33 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
// Calcula promedio
promedio (exPar + exFin + promP) / 3
Si (promedio >= 10.5) entonces
Escribir (“El promedio es ”, promedio, "aprobado”)
Fin_si
Fin
Explicación
Para resolver el ejemplo planteado se definen las variables reales exPar, exFin,
promP y promedio:
real: exPar, exFin, promP, promedio
Ejemplo 02
Pseudocódigo que lea el sueldo de un trabajador, aplique un aumento del 15%
si su sueldo es inferior a 500 e imprima el nuevo sueldo.
Inicio
// Definir variables
real: sueldo, nuevoSueldo, aum 0
// Lectura de datos
Escribir (“Ingresar sueldo: ”)
Leer (sueldo)
// Calcula el sueldo
Si (sueldo >=0 and sueldo < 500) entonces
aum 0.15*sueldo
Fin_si
nuevoSueldo sueldo + aum
Escribir (“Nuevo sueldo ”, nuevoSueldo)
Fin
Ejemplo 03
Pseudocódigo calcula el monto final que se paga por un consumo en un
restaurante, sabiendo que por consumos mayores a S/.100.00 se aplica un
descuento del 20%.
34 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
Inicio
// Definir e inicializar variables
real: consumo, desc 0, montoFinal
// Lectura de datos
Escribir (“Ingresar consumo: ”)
Leer (consumo)
// Calcula el descuento
Si (consumo > 100) entonces
desc 0.20 * consumo
Fin_si
montoFinal consumo - desc
Escribir (“El total a pagar es ”, montoFinal)
Fin
Ejemplo 04
Pseudocódigo que calcula el sueldo semanal de un obrero que trabaja por horas,
si durante la semana trabajó más de 40 horas se le paga por cada hora extra
dos veces la tarifa normal.
Inicio
// Definir e inicializar variables
real: tarifa, sueldo, extra 0
entero: horas
// Lectura de datos
Escribir (“Ingresar tarifa: ”)
Leer (tarifa)
Escribir (“Ingresar horas trabajadas: ”)
Leer (horas)
// Calcula el sueldo
sueldo horas * tarifa
Si (horas > 40) entonces
extra (horas – 40) * (2*tarifa)
Fin_si
sueldo sueldo +extra
Escribir (“El sueldo final es ”, sueldo)
Fin
Ejemplo 05
Pseudocódigo para hallar el menor de 4 números.
Inicio
// Definir variables
entero: nro1, nro2, nro3, nro4, menor
35 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
// Lectura de datos
Escribir (“Ingresar 4 números: ”)
Leer (nro1, nro2, nro3, nro4)
// Proceso
menor nro1
Si (nro2 < menor) entonces
menor nro2
Fin_si
Si (nro3 < menor) entonces
menor nro3
Fin_si
Si (nro4 < menor) entonces
menor nro4
Fin_si
Escribir (“El menor es ”, menor)
Fin
Si (expresión_lógica) entonces
Acción1
Sino
Acción2
Fin_si
Ejemplo 06
Pseudocódigo para hallar el mayor de dos números.
Inicio
// Definir variables
entero: nro1, nro2, mayor
36 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
// Lectura de datos
Escribir (“Ingresar dos números: ”)
Leer (nro1, nro2)
// Calcula el mayor de dos números
Si (nro1 > nro2) entonces
mayor nro1
Sino
mayor nro2
Fin_si
Escribir ("El mayor de dos números es:", mayor)
Fin
Explicación
Para resolver el ejemplo planteado se definen las variables enteras nro1, nro2,
mayor:
entero: nro1, nro2, mayor
Ejemplo 07
Pseudocódigo para hallar el mayor de tres números
Inicio
// Definir variables
entero: nro1, nro2, nro3, t, mayor
// Lectura de datos
Escribir (“Ingresar tres números:”)
Leer (nro1, nro2, nro3)
// Calcula el mayor de tres números
Si (nro1 > nro2) entonces
t nro1
Sino
37 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
t nro2
Fin_si
Si (t > nro3) entonces
mayor t
Sino
mayor nro3
Fin_si
Escribir (“El mayor de tres números es: ”, mayor)
Fin
Ejemplo 08
Pseudocódigo que lea el espacio recorrido por un auto y su tiempo empleado en
este recorrido. Se pide hallar la velocidad del recorrido. Fórmula:
Tenga en cuenta que en caso de que el tiempo sea igual a cero la velocidad no
se podrá calcularse.
Inicio
// Definir variables
real : espacio, tiempo, velocidad
// Lectura de datos
Escribir (“Ingresar espacio recorrido y tiempo”)
Leer (espacio, tiempo)
// Calcula velocidad
Si (tiempo <> 0) entonces
velocidad espacio / tiempo
Escribir (“La velocidad es: ”, velocidad)
Sino
Escribir (“Error”)
Fin_si
Fin
Ejemplo 09
Pseudocódigo que lea tres valores tal como a, b, c. Calcular el resultado de la
siguiente expresión:
y = (a - b) / c
Inicio
// Definir variables
real: a, b, c, y
// Lectura de datos
38 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
Ejemplo 10
Pseudocódigo que lea tres notas de un alumno: examen parcial, examen final y
promedio de prácticas, imprima el promedio y el mensaje aprobado en caso de
que el promedio es mayor o igual que 10.5, si su promedio es menor de 10.5
imprimir el promedio y el mensaje desaprobado.
Inicio
// Definir variables
real: exPar, exFin, promP, promedio
// Lectura de datos
Escribir ("Ingrese tres notas: ")
Leer (exPar, exFin, promP)
// Calcula promedio
promedio (exPar + exFin + promP) / 3
Si (promedio >= 10.5) entonces
Escribir (promedio, “aprobado”)
sino
Escribir (promedio, “desaprobado”)
Fin_si
Fin
Ejemplo 11
Pseudocódigo que lea como dato el sueldo de un trabajador, aplique un
aumento del 15% si su sueldo es inferior a 500 y 10% en caso contrario.
Imprima el nuevo sueldo del trabajador.
Inicio
// Definir variables
39 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
Ejemplo 12
Pseudocódigo que determine si un número es múltiplo de otro. Un número a es
múltiplo de otro numero b, cuando el residuo de la división de a entre b es cero.
Inicio
// Definir variables
entero: nro1,nro2, r
// Lectura de datos
Escribir (“Ingresar dos numeros”)
Leer (nro1, nro2)
// Calcular múltiplo
r nro1 Mod nro2
Si (r = 0) entonces
Escribir (nro1, “es múltiplo de”, nro2)
sino
Escribir (nro1, “no es múltiplo de”, nro2)
Fin_si
Fin
Ejemplo 13
Pseudocódigo que lea tres números e imprima su producto si el primero de ellos
es positivo, en caso contrario imprima su suma.
Por ejemplo:
a = 4, b = 3, c = 2 entonces su producto es p = a * b * c = 42
a = -4, b = 3, c = 2 entonces la suma es s = a + b + c = 1
40 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
p producto
s suma
Inicio
// Definir variables
entero: a, b, c, p, s
// Lectura de datos
Escribir (“Ingresar primer numero:”)
Leer (a)
Escribir (“Ingresar segundo número:”)
Leer (b)
Escribir (“Ingresar tercer número:”)
Leer (c)
Si (a > 0) entonces
pa*b*c
Escribir (“El producto es igual ”, p)
Sino
s a+b+c
Escribir (“La suma es igual ”, s)
Fin_si
Fin
Ejemplo 14
Pseudocódigo que lea dos números y diga si la suma de los números es par o
impar.
Por ejemplo:
a = 4, b = 3 entonces su suma es s = a + b = 7 es impar
a = 4, b = 4 entonces la suma es s = a + b = 8 es par
Inicio
// Definir variables
entero: a, b, s
// Lectura de datos
Escribir ("Ingresar primer numero:")
Leer (a)
Escribir ("Ingresar segundo número:")
Leer (b)
s a+b
Si (s Mod 2 = 0) entonces
Escribir (s, “La suma es par”)
Sino
Escribir (s, “La suma es impar”)
Fin_si
Fin
Ejemplo 15
Pseudocódigo que determine si un año es bisiesto. Un año es bisiesto si es
múltiplo de 4 y no de 100 o cuando es múltiplo de 400.
41 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
a Mod 4 = 0
Además, se sabe que no debe ser múltiplo de 100 para lo cual escribimos
a Mod 100 <> 0
Sea múltiplo de 400.
a Mod 400 = 0
Entonces un año es bisiesto si múltiplo de 4, que no debe ser multiplo de 100 a
menos que sea múltiplo de 400
(((a Mod 4 = 0 ) and (a Mod 100 <> 0)) or (a Mod 400 = 0))
Inicio
// Definir variable
entero: a
// Lectura de datos
Escribir ("Ingresar año:")
Leer (a)
Si (((a Mod 4 = 0) and (a Mod 100 <> 0)) or (a Mod 400 = 0)) entonces
Escribir (“El año es bisiesto”)
Sino
Escribir (“El año no es bisiesto”)
Fin_si
Fin
Ejemplo 16
Pseudocódigo que calcule el total a pagar por la compra de camisas. Si se
compran tres camisas o más se aplica un descuento del 20% sobre el total de
la compra, sino se aplica un descuento del 10%.
Inicio
// Definir variables
entero: cant
real: precio, compra, desc, total
// Lectura de datos
Escribir ("Ingresar precio unitario:")
Leer (precio)
Escribir ("Ingresar cantidad de camisas:")
Leer (cant)
compra cant * precio
Si (compra >=3) entonces
desc 0.20 * compra
Sino
desc 0.10 * compra
Fin_si
total compra – desc
Escribir (“El total a pagar es ”, total)
Fin
42 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
Ejemplo 17
Pseudocódigo que calcule el total que se paga en una playa de estacionamiento,
en el que se registra la hora de ingreso y la hora de salida del vehículo en
HH:MM, la tarifa por hora o fracción de S/.2.00.
Por ejemplo:
Hora de inicio:4:20
Hora de término: 7:10
Total a pagar: 7:10- 4:20= 2: 40 = 6
Hora de inicio:3:20
Hora de termino: 8:40
Total a pagar: 8:40- 3:20= 5: 20 = 12
Inicio
// Definir e inicializar variables
entero: h1, m1, h2, m2, min, hor 0
real : pago
// Lectura de datos
Escribir ("Ingresar hora de ingreso:")
Leer (h1, m1)
Escribir ("Ingresar hora de salida:")
Leer (h2, m2)
Si (m2 >= m1) entonces
min m2 – m1
Sino
min (m2 + 60) – m1
h2 h2 - 1
Fin_si
hor h2 – h1
Si (min > 0)
hor hor + 1
Fin_si
pago hor * 2
Escribir (“El total a pagar es ”, pago)
Fin
Si (expresión_lógica1) entonces
Acción1
Sino
Si (expresión_lógica2) entonces
Acción2
43 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
Sino
Acción3
Fin_si
Fin_si
Ejemplo 18
Pseudocódigo que lea un número y determine si es positivo, negativo o cero.
Inicio
// Definir variables
entero: nro
cadena: mensa
// Lectura de datos
Escribir (“Ingresar numero:”)
Leer (nro)
Si (nro = 0 ) entonces
mensa “Cero”
Sino
Si (nro>0) entonces
mensa “Positivo”
Sino
mensa “Negativo”
Fin_si
Fin_si
Escribir (nro, mensa)
Fin
Explicación
44 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
Si (nro = 0 ) entonces
mensa “Cero”
Este sino esta conformado por un SI que evalua la expresión logica (nro >
0), si la asignación es verdadera se asigna “Positivo” a la variable mensa:
Si (nro>0) entonces
mensa “Positivo”
Ejemplo 19
En una tienda comercial se realizan descuentos en las compras en función
del importe total de dichas compras. Se desea calcular el importe que se
cobra a un cliente, teniendo en cuenta los siguientes supuestos:
Inicio
// Definir variables
real: importeTotal, descto, importeACobrar
cadena: nombre
// Lectura de datos
Escribir (“Ingresar nombre del cliente:”)
Leer (nombre)
Escribir (“Ingresar monto total de la compra:”)
45 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
Leer (importeTotal)
// Calcula el importe a Cobrar
Si (importeTotal >= 0 and importeTotal < 200) entonces
descto 0
Sino
Si (importeTotal <= 800) entonces
descto 0.10*importeTotal
Sino
descto 0.20*importeTotal
Fin_si
Fin_si
ImporteACobrar importeTotal - descto
Escribir (“Cliente: ”, nombre)
Escribir (“Descuento: ”, descto)
Escribir (“Importe total: ”, importeTotal)
Escribir (“Importe a cobrar: ”, importeACobrar)
Fin
Ejemplo 20
Una compañía de gaseosas está realizando una promoción por la compra de
su producto. Dentro de cada chapa viene un número que determina el
premio que obtiene un comprador.
Si la chapa tiene un número entre 1 y 5 el comprador obtiene como
premio el doble del precio pagado por la gaseosa.
Si la chapa tiene un número entre 6 y 8 el comprador obtiene como
premio la devolución del precio pagado por la gaseosa.
Si chapa tiene un número entre 9 y 10 el comprador no gana ningún
premio.
Escribir un pseudocódigo que muestre los diferentes resultados que se
podría obtener al comprar una gaseosa.
46 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
Sino
Si (nroChapa >=9 and nroChapa<=10) entonces
premio 0
Fin_si
Fin_si
Fin_si
Escribir (“Premio: ”, premio)
Fin
Ejemplo 21
El precio de venta de DVD varía de acuerdo a la cantidad que se compra:
• S/.2.50 si se compran unidades separadas hasta 9.
• S/.2.20 si se compran entre 10 unidades hasta 99.
• S/.1.90 entre 100 y 499 unidades
• S/.1.50 para mas de 500
El vendedor gana por cada CD vendido el 20% del costo. Realizar un
pseudocódigo que calcule el pago total y la ganancia para el vendedor.
Inicio
// Definir variables
entero: cant
real: pago, ganan
// Lectura de datos
Escribir (“Ingresar cantidad de DVD: ”)
Leer (cant)
Si (cant < 10) entonces
pago 2.50 * cant
Sino
Si (cant < 100) entonces
pago 2.20 * cant
Sino
Si (cant < 500) entonces
pago 1.90 * cant
Sino
pago 1.50 * cant
Fin_si
Fin_si
Fin_si
ganan 0.20 * pago
Escribir (“El pago total es: ”, pago)
Escribir (“La ganancia del vendedor es: ”, ganan)
Fin
Ejemplo 22
Pseudocódigo que calcule el sueldo neto de un trabajador, que tiene los
siguientes descuentos:
47 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
Inicio
// Definir variables
caracter: afp
real: sueldoBruto, desc1, desc2, sueldoNeto
// Lectura de datos
Escribir (“Ingresar sueldo bruto: ”)
Leer (sueldoBruto)
Escribir (“Ingresar AFP: ”)
Leer (afp)
Si (afp = ‘A’) entonces
desc1 0.11 * sueldoBruto
Sino
Si (afp = ‘B’) entonces
desc1 0.10 * sueldoBruto
Fin_si
Fin_si
Si (sueldoBruto > 4000) entonces
desc2 0.07 * sueldoBruto
Sino
Si (sueldoBruto > 3000) entonces
desc2 0.06 * sueldoBruto
Sino
desc2 0.05 * sueldoBruto
Fin_si
Fin_si
sueldoNeto sueldoBruto – desc1 – desc2
Escribir (“El sueldo neto es: ”, sueldoNeto)
Fin
Ejemplo 23
Un supermercado ofrece a sus clientes descuentos de acuerdo al monto de
compra, como se muestra en el siguiente cuadro:
Elaborar un pseudocódigo que calcule el monto final que paga un cliente por
una compra.
Inicio
// Definir variables
48 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
Ejemplo 24
En empresa ensambladora de computadoras oferta a sus clientes descuentos
que varían de acuerdo al número de computadoras que se compre. Si se
compra hasta cinco computadoras se descontará el 10%, si se compra entre
6 y 10 computadoras se descuenta el 20% y si se compra más de 10
computadoras se descuenta el 40%.
Elaborar un pseudocódigo que calcule el monto final que se paga por un
cierto número de computadoras.
Inicio
// Definir variables
real: precio, total, desc
entero: cant
// Lectura de datos
Escribir (“Ingresar precio: ”)
Leer (precio)
Escribir (“Ingresar cantidad: ”)
Leer (cant)
total precio * cant
Si (cant <= 5) entonces
desc 0.10 * total
Sino
Si (cant <= 10) entonces
desc 0.20 * total
Sino
desc 0.40 * total
Fin_si
Fin_si
total total – desc
Escribir (“El total a pagar es: ”, total)
49 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
Fin
Ejemplo 25
Pseudocódigo que compruebe si tres lados forman un triángulo, de ser así
calcule su área y muestre que tipo de triangulo forma: equilátero, isósceles
o escaleno.
Teorema: En todo triángulo cada lado es menor que la suma de los otros dos
lados, pero mayor que su diferencia.
Donde, p es el semiperímetro.
Inicio
// Definir variables
real: p, area
entero: a, b, c
// Lectura de datos
Escribir (“Ingresar lados: ”)
Leer (a, b, c)
Si ((a < b + c) and (b < a + c) and (c < a + b)) entonces
Escribir (“Forman un triángulo”)
p (a + b + c) /2
area raiz (p * (p - a) * (p - b) * (p - c))
Si (a = b and b = c) entonces
Escribir (“Equilátero”)
Sino
Si (a = b or b = c or a = c) entonces
Escribir (“Isósceles”)
Sino
Escribir (“Escaleno”)
Fin_si
Fin_si
Escribir (“El área es ”, area)
Sino
Escribir (“No forman un triángulo”)
Fin_si
Fin
Ejemplo 26
Pseudocódigo que calcula la calificación de un alumno en base a 3 notas,
validar el ingreso de notas entre 0 y 100, considerar la siguiente tabla:
Promedio Calificación
90 – 100 A
80 – 89 B
70 – 79 C
50 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
50 – 69 D
0 – 49 E
Inicio
// Definir variables
entero: nt1, nt2, nt3, prom
caracter: calf
// Lectura de datos
Escribir (“Ingresar tres notas: ”)
Leer (nt1, nt2, nt3)
Si ((nt1 >= 0 and nt1 <= 100) and (nt2 >= 0 and nt2 <= 100) and
(nt3 >= 0 and nt3 <= 100)) entonces
prom (nt1 + nt2 + nt3) Div 3
Si (prom > 89) entonces
calf ‘A’
Sino
Si (prom > 79) entonces
calf ‘B’
Sino
Si (prom > 69) entonces
calf ‘C’
Sino
Si (prom > 49) entonces
calf ‘D’
Sino
calf ‘E’
Fin_si
Fin_si
Fin_si
Fin_si
Escribir (“La calificación es: ”, calf)
Sino
Escribir (“Ingreso incorrecto”)
Fin_si
Fin
Ejemplo 27
Una clínica ofrece tres tipos de seguro:
51 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
Inicio
// Definir variables
entero: cant, max
real: pago 0, padic
caracter: tipo
entero: cant
// Lectura de datos
Escribir (“Ingresar tipo de seguro: ”)
Leer (tipo)
Escribir (“Ingresar cantidad de consultas: ”)
Leer (cant)
Si (tipo = ‘A’) entonces
pago 80.00
max 8
padic 8.50
Sino
Si (tipo = ‘B’) entonces
pago 60.00
max 6
padic 6.50
Sino
Si (tipo = ‘C’) entonces
pago 40.00
max 4
padic 5.00
Fin_si
Fin_si
Fin_si
Si (cant > max) entonces
padic padic * (cant - max)
Fin_si
pago pago + padic
Escribir (“El total a pagar es: ”, pago)
Fin
Ejemplo 28
Un centro comercial bonifica a sus clientes con puntos los cuales son
reemplazados por obsequios. Por compras menores a S/.10.00 el cliente
recibe 1 punto, por compras de S/.10.00 a más el cliente recibe 2 puntos
por cada S/.10.00 y un punto por el monto adicional. Elaborar un
pseudocódigo que calcule la cantidad de puntos que obtiene un cliente en
una compra.
Por ejemplo:
• Si la compra es de S/.7.00 el cliente recibe 1 punto
• Si la compra es de S/.23.00 el cliente recibe 5 puntos (2 puntos por cada
S/.10.00 y 1 punto por los S/.3.00).
• Si la compra es de S/.40.00 el cliente recibe 8 puntos (2 puntos por cada
S/.10.00)
52 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
Inicio
// Definir variables
entero: punto 0, parEnt, resto2, c10
real: monto, resto1 0
// Lectura de datos
Escribir (“Ingresar monto de la compra: ”)
Leer (monto)
Si (monto < 10) entonces
punto 1
Sino
parEnt entero (monto)
resto1 monto – parEnt
resto2 parEnt Mod 10
c10 parEnt Div 10
Si (resto1 > 0 or resto2 >0) entonces
punto (2 * c10) + 1
Sino
punto 2 * c10
Fin_si
Fin_si
Escribir (“Los puntos obtenidos son: ”, punto)
Fin
Ejemplo 29
Un grupo de alumnos de un centro educativo, desea saber cuanto se va a
gastar en pasajes para realizar el viaje de promoción, el precio de cada
pasaje varía de acuerdo al día en que viajan y al número de alumnos que
viajan:
Inicio
// Definir variables
entero: dia, cant
real: total
// Lectura de datos
Escribir (“Ingresar día del mes: ”)
Leer (dia)
53 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
Donde:
• Selector, cuyo valor se compara con cada una de las alternativas (c1, c2,
etc).
• c1, c2, etc., son constantes enteras o de tipo caracter compatibles con el
selector. Si es de tipo caracter c1, c2, etc. deben de ir encerradas entre
comillas simples, es decir ‘c1’, ‘c2’, etc.
• Sino, cuando toma un valor distinto de las alternativas (c1, c2, etc). El
Sino es opcional, si se omite y no hay coincidencia finaliza la sentencia
En caso sea – Fin_caso sin ejecutar nada.
54 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
Ejemplo 30
Pseudocódigo que lea una variable entera, que representa un día de la
semana y que muestre el texto correspondiente al día. Por ejemplo: Lunes si
es 1, Martes si es 2, …, Domingo si es 7.
Inicio
// Definir variable
entero: dia
// Lectura de datos
Escribir (“Ingresar dia:”)
Leer (dia)
En caso sea (dia) hacer
1 : Escribir (“lunes”)
2 : Escribir (“martes”)
3 : Escribir (“miércoles”)
4 : Escribir (“jueves”)
5 : Escribir (“viernes”)
6 : Escribir (“sábado”)
7 : Escribir (“domingo”)
Sino
Escribir (“Fuera de rango”)
Fin_Caso
Fin
Explicación
55 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
Ejemplo 31
Pseudocódigo que permite ingresar una calificación expresada con un
caracter (a, b, c o d) y averiguar su equivalencia correspondiente de acuerdo
a la siguiente tabla:
Nota Descripción
A Sobresaliente
B Notable
C Aprobado
D Insuficiente
Otra letra Nota no esta en el rango
Inicio
// Definir variable
caracter: nota
// Lectura de datos
Escribir (“Ingresar nota”)
Leer (nota)
En caso sea (nota) hacer
‘A’: Escribir (“Sobresaliente”)
‘B’: Escribir (“Notable”)
‘C’: Escribir (“Aprobado”)
‘D’: Escribir (“Insuficiente”)
Sino
Escribir (“Nota no esta en el rango”)
Fin_caso
Fin
Ejemplo 32.
Una compañía incrementa el sueldo actual de sus empleados de acuerdo a
su categoría como se muestra en el siguiente cuadro:
56 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
D 10
Inicio
// Definir e inicializar variables
entero: cant
real: sueldo, aum, adic, desc, sueldoNeto
caracter: cat
// Lectura de datos
Escribir (“Ingresar categoría”)
Leer (cat)
Escribir (“Ingresar sueldo”)
Leer (sueldo)
Escribir (“Ingresar cantidad de hijos”)
Leer (cant)
En caso sea (cat) hacer
‘A’: aum 0.25 * sueldo
‘B’: aum 0.20 * sueldo
‘C’: aum 0.15 * sueldo
‘D’: aum 0.10 * sueldo
Sino
Escribir (“Categoría no existe”)
sw 1
Fin_caso
Si (sw = 0) entonces
sueldo sueldo + aum
Si (cant > 0) entonces
adic 0.025 * sueldo * cant
Fin_si
sueldo sueldo + adic
Si (sueldo > 2000) entonces
desc 0.03 * sueldo
Fin_si
sueldoNeto sueldo - desc
Escribir (“El sueldo neto del empleado es ”, sueldoNeto)
Fin_si
Fin
57 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
Ejemplo 33
Pseudocódigo que actúe como una calculadora, permitiendo realizar las
operaciones de suma, resta, multiplicación y división entre dos números
cualquiera.
Inicio
// Definir e inicializar variables
real: n1, n2, res
caracter: oper
entero: sw 0
// Lectura de datos
Escribir (“Ingresar primer número”)
Leer (n1)
Escribir (“Ingresar operador”)
Leer (oper)
Escribir (“Ingresar segundo número”)
Leer (n2)
En caso sea (oper) hacer
‘+’: res n1 + n2
‘-’ : res n1 - n2
‘*’: res n1 * n2
‘/’ : Si (n2 <>0)
res n1 / n2
Sino
Escribir (“Error”)
sw 1
Fin_si
Sino
Escribir (“Operador no válido”)
sw 1
Fin_caso
Si (sw = 0) entonces
Escribir (“El resultado es ”, res)
Fin_si
Fin
Ejemplo 34
Un centro comercial ofrece ventas financiadas por medio de 3 tipos de
tarjetas de crédito como indica a continuación:
58 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
C 12 5
El cliente solo puede financiar una compra hasta el máximo de letras que se
indica en el cuadro anterior, en caso contrario la venta no debe proceder.
Calcular el monto de cada letra por pagar así como el monto total.
Inicio
// Definir variables
entero: cant, max, sw 0
real: monto, inte, letra
caracter: tipo
// Lectura de datos
Escribir (“Ingresar tipo de tarjeta”)
Leer (tipo)
Escribir (“Ingresar monto de la compra”)
Leer (monto)
Escribir (“Ingresar cantidad de letras a financiar”)
Leer (cant)
En caso sea (tipo) hacer
‘A’: max 36
inte 0.07 * monto
‘B’: max 24
inte 0.06 * monto
‘C’: max 12
inte 0.05 * monto
Sino
Escribir (“Tipo de tarjeta no existe”)
sw 1
Fin_caso
Si (sw = 0) entonces
monto monto + inte
Si (cant <= max) entonces
letra monto / cant
Escribir (“El monto total a pagar es ”, monto)
Escribir (“El monto de cada letra es ”, letra)
Sino
Escribir (“La venta no procede”)
Fin_si
Fin_si
Fin
Ejemplo 35
Calcular el consumo de combustible y el total que se invirtió en el recorrido
de un automóvil. Para esto se debe diseñar un algoritmo en el que se
ingresa los kilometrajes con el que inicia y termina el recorrido, así como la
cantidad de galones de combustible con el que se inicia y termina el
recorrido. Además calcular la cantidad de galones que consume el auto por
cada 100 kilómetros. Los precio por cada galón de combustible son:
59 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
Inicio
// Definir variables
entero: tipo
real: kil1, kil2, gal1, gal2, kilRec 0, totGal 0, total, c100
// Lectura de datos
Escribir (“Ingresar kilometraje de inicio y fin del recorrido”)
Leer (kil1, kil2)
Escribir (“Ingresar galones con el que inicia y termina el recorrido”)
Leer (gal1, gal2)
Escribir (“Ingresar tipo de combustible que usa el automóvil
(1)Gasolina 97, (2)Gasolina 95, (3)Gasolina 89, (4)Diesel”)
Leer (tipo)
Si (tipo > 0 and tipo < 5) entonces
En caso sea (tipo) hacer
1 : precio 16.98
2 : precio 15.60
3 : precio 13.50
4 : precio 10.20
Fin_caso
kilRec kil2 – kil1
totGal gal2 – gal1
total totGal * precio
c100 (totGal * 100) / kilRec
Escribir (“El total de combustible que se consumió es ”, totGal)
Escribir (“El total de se invirtió en el recorrido es ”, total)
Escribir (“El consumo por cada 100 kilómetros es ”, c100)
Sino
Escribir (“El tipo de combustible no es válido”)
Fin_si
Fin
60 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
Ejemplo 36
Pseudocódigo que determine si un número que se encuentre en el rango de
1 a 9, es par o impar.
El siguiente cuadro muestra resultados con datos de prueba, para diferentes
valores de la variable nro.
Nro de
Nro Resultado
corrida
1 5 impar
2 2 par
3 9 impar
5 10 Error fuera de rango
Inicio
// Definir variable
entero: nro
// Lectura de datos
Escribir (“Ingresar número:”)
Leer (nro)
En caso sea (nro) hacer
1: 3: 5: 7: 9: Escribir (“impar”)
2: 4: 6: 8 : Escribir (“par” )
sino
Escribir (“Fuera de rango”)
Fin_Caso
Fin
Ejemplo 37
En un campeonato de tiro al blanco se ha llegado a un acuerdo entre los
participantes para que el puntaje obtenido sea calculado en base al puntaje
original (el que esta entre 0 y 10) alcanzado en el tiro multiplicado por un
factor el cual se muestra en el siguiente cuadro. Hacer un pseudocódigo que
muestre el nuevo puntaje obtenido por cualquier participante.
Inicio
// Definir e inicializar variables
entero: factor, puntaje, nuevoPuntaje, sw 0
// Lectura de datos
Escribir (“Ingresar puntaje:”)
Leer (puntaje)
// Calcula puntaje
En caso sea (puntaje) hacer
61 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
0: factor 0
1: 2: 3: 4: 5: factor 6
6: 7: 8: factor 9
9: 10: factor 10
Sino
Escribir (“Fuera de rango”)
sw 1
Fin_Caso
Si (sw = 0) entonces
nuevoPuntaje puntaje + factor
Escribir (“El nuevo puntaje es ”, nuevoPuntaje)
Fin_si
Fin
Ejemplo 38
Pseudocódigo que permita calcular cuántos días tiene un mes, teniendo en
cuenta lo siguiente:
a) El orden del calendario indica que enero es 1, febrero es 2, etc.
b) Enero, marzo, mayo, julio, agosto, octubre y diciembre tienen 31 días.
c) Abril, junio, setiembre y noviembre tienen 30 días.
d) Febrero tiene 28 días o 29 días si el año bisiesto. Un año es bisiesto si es
múltiplo de 4 y no de 100 o cuando es múltiplo de 400.
Inicio
// Definir variables
entero: mes, year, dias
// Lectura de datos
Escribir (“Ingresar mes, año ”)
Leer (mes, year)
En caso sea (mes) Hacer
1: 3: 5: 7: 8: 10: 12: dias 31
4: 6: 9: dias 30
2: Si (year Mod 4 = 0) and (year Mod 100 <> 0) or
(year Mod 400 = 0)) entonces
dias 29
Sino
dias 28
Fin_si
Fin_Caso
Escribir (mes, year, dias)
62 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
Fin
Ejemplo 39
Pseudocódigo para calcular la pensión que tiene que pagar un alumno de un
instituto cuya cuota de matricula tiene un porcentaje de descuento que se
establece en la siguiente tabla y esta en función del colegio de procedencia
del alumno y de las tres categorías que existe en el instituto. Considere que
la pensión esta exonerada de impuesto.
Colegio de Categoría
procedencia A B C
Nacional 50 40 30
Particular 15 20 25
Inicio
// Definir e inicializar variables
real: cuota, dscto, importe 0
caracter: colegio, categoría
entero: sw 0
// Lectura de datos
Escribir (“Ingresar colegio de procedencia (N)acional, (P)articular:”)
Leer (colegio)
Escribir (“Ingresar categoría (A, B, C):”)
Leer (categoria)
Escribir (“Ingresar cuota:”)
Leer (cuota)
// Cálculos
En caso sea (colegio) hacer
‘N’: En caso sea (categoria) hacer
‘A’ : dscto 0.50 * cuota
‘B’ : dscto 0.40 * cuota
‘C’ : dscto 0.30 * cuota
Sino
Escribir (“Opción no contemplada”)
sw 1
Fin_caso
‘P’: En caso sea (categoria) hacer
‘A’ : dscto 0.25 * cuota
‘B’ : dscto 0.20 * cuota
63 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
Ejemplo 40
Calcular el pago de un obrero que trabaja al destajo. El pago que recibe el
obrero por cada unidad producida depende de su categoría y del tipo de
producto que produce, como se muestra en el siguiente cuadro:
Inicio
// Definir e inicializar variables
entero: cant, sw 0
real: pago, bonf, desc 25.00
caracter: cat, prod
// Lectura de datos
Escribir (“Ingresar categoría:”)
Leer (cat)
Escribir (“Ingresar producto que produce (T)ejas, (L)osetas”)
Leer (prod)
Escribir (“Ingresar cantidad producida:”)
64 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
Leer (cant)
// Cálculos
En caso sea (prod) hacer
‘T’: En caso sea (cat) hacer
‘A’ : pago 2.50 * cant
‘B’ : pago 2.00 * cant
‘C’ : pago 1.50 * cant
Sino
Escribir (“Categoría no existe”)
sw 1
Fin_caso
‘L’: En caso sea (cat) hacer
‘A’ : pago 2.00 * cant
‘B’ : pago 1.50 * cant
‘C’ : pago 1.00 * cant
Sino
Escribir (“Categoría no existe”)
sw 1
Fin_caso
Sino
Escribir (“Producto no existe”)
sw 1
Fin_caso
Si (sw = 0) entonces
Si (cant <= 250) entonces
bonf 0
Sino
Si (cant <= 500) entonces
bonf 50.00
Sino
Si (cant <= 1000) entonces
bonf 100.00
Sino
bonf 150.00
Fin_si
Fin_si
Fin_si
pago pago + bonf – desc
// Salida de resultados
Escribir (“El pago del obrero es: ”, pago)
Fin_si
Fin
3.4.Ejercicios propuestos
x 2 si ( x Mod 4 ) = 0
x / 6 si ( x Mod 4 ) = 1
f (x ) =
x si ( x Mod 4 ) = 2
x 3 + 5 si ( x Mod 4 ) = 3
65 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
0, si x = 0
x = x, si x > 0
- x, si x < 0
Por Ejemplo:
• De -7 su valor absoluto es: -(-7) = 7 (cuando es negativo se cambia de
signo)
• De 7 su valor absoluto es: (7) = 7 (cuando es positivo nos da el mismo
número)
4. Escribir un programa para leer dos números a, b y obtenga el valor
numérico de la función.
2 a + b, si a2 - b 2 < 0
f (x ) = a2 - 2b, si a2 - b 2 = 0
a + b, si a2 - b 2 > 0
5. Pseudocódigo que determine si un número es divisible por 5. Un número es
divisible por 5 cuando acaba en cero 0 en 5.
6. Mostrar el nombre correspondiente a un número de mes y además mostrar
la estación al cual pertenece. Considerar 3 meses por estación.
Verano = enero, febrero, marzo
Otoño = abril, mayo, junio
Invierno = julio, agosto, setiembre
Primavera = octubre, noviembre, diciembre.
7. Ingresar cuatro valores por el teclado a, b, c, d. Se desea redondear a la
centena más próxima y visualizar la salida. Por ejemplo:
a = 2, b = 3, c = 6 y d = 2 entonces n = 2362 el resultado redondeado será
2400.
Si n = 2342 el resultado redondeado será 2300
Si n = 2962 el resultado redondeado será 3000
8. Pseudocódigo que lea tres números y diga si la suma de los dos primeros
números es igual al tercer número.
9. Una empresa de bienes y raíces ofrece casas de interés social bajo las
siguientes condiciones: si el ingreso mensual del comprador es menos de
S/2250 la cuota inicial será igual al 15% del costo de la casa y el resto se
distribuirá en 120 cuotas mensuales. Si el ingreso mensual del comprador es
mayor o igual a S/.2250 la cuota inicial será igual al 30% del costo de la
casa y el resto se distribuirá en 75 cuotas mensuales. Diseñe un algoritmo
que permita determinar cuanto debe pagar un comprador por concepto de
cuota inicial y cuanto por cada cuota mensual.
10. En una escuela la colegiatura de los alumnos se determina según el número
de materias que cursan. El costo de todas las materias es el mismo. Se ha
establecido un programa para estimular a los alumnos, el cual consiste en lo
siguiente: si el promedio obtenido por un alumno en el ultimo periodo es
mayor o igual que 15, se le hará un descuento del 30% sobre la colegiatura
y no se le cobrara impuesto; si el promedio obtenido es menor que 15
deberá pagar la colegiatura completa, la cual incluye el 10% de impuesto.
Obtener cuanto debe pagar un alumno.
66 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
11. Una persona desea iniciar un negocio, para lo cual piensa verificar cuanto
dinero le prestará el banco por hipotecar su casa. Tiene una cuenta
bancaria, pero no quiere disponer de ella a menos que el monto por
hipotecar su casa sea muy pequeño. Si el monto de la hipoteca es menor
que $30,000 entonces invertirá el 50% de la inversión total y un socio
invertirá el otro 50%. Si el monto de la hipoteca es de $30,000 o mas,
entonces invertirá el monto total de la hipoteca y el resto del dinero que se
necesite para cubrir la inversión total se repartirá a partes iguales entre el
socio y el.
12. Elaborar un algoritmo que tenga como entrada los valores de dos ángulos,
expresados en grados, minutos y segundos, obtenga el valor de su suma de
la misma forma. Se supone que las entradas son correctas, en el sentido de
que cada ángulo está expresado como tres números enteros, en los rangos
respectivos (0 - 360), (0 - 60) y (0 - 60). La salida debe estar expresada de
la misma manera.
13. El ministerio de agricultura ha distribuido la siembra de 3 productos en
terrenos con más de 1000 hectáreas de la siguiente manera:
67 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
4. Estructura repetitiva
4.1.Conceptos básicos
• Contador
Es una variable numérica entera que se incrementa o decrementa cada vez que
se ejecuta la acción que lo contiene, toma un valor inicial de cero o uno, según
sea el caso. En la siguiente figura la variable i representa a un contador.
i = i + 1
• Acumulador o totalizador
Es una variable numérica que se incrementa o decrementa de forma no
constante, toma un valor inicial de cero o uno según sea el caso. En la siguiente
figura, la variable total representa a un acumulador y la variable parcial es la
cantidad que se incrementará el acumulador en cada iteración.
• Bucle
Es un mecanismo de programación que repite un segmento de un programa
(una o mas sentencias) un cierto número de veces. Los bucles se implementan
utilizando las sentencias repetitivas: mientras, repetir y para.
• Iteración
Representa cada repetición del cuerpo de bucle.
68 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
Ejemplo 01
Pseudocódigo que invierta un número entero positivo.
Inicio
// Definir e inicializar variables
entero: nro, nro1, digito, nroinvertido 0
// Leer Datos
Escribir (“Ingresar número:”)
Leer (nro)
// Calcular número invertido
nro1 nro
Mientras (nro > 0) hacer
digito nro Mod 10
nroinvertido 10 * nroinvertido + digito
nro nro Div 10
Fin_Mientras
Escribir (“El número invertido de ”, nro1, “es ”, nroinvertido)
Fin
Explicación
Para resolver el ejemplo planteado se definen las variables enteras: nro, nro1,
dígito y se inicializa en cero la variable nroinvertido
entero: nro, nro1, digito, nroinvertido 0
Se ingresa la variable nro:
Escribir (“Ingresar número:”)
Leer (nro)
Y se asigna nro a una nueva variable nro1, para conservar el valor original del
número ingresado:
nro1 nro
La sentencia Mientras ejecuta tres sentencias, mientras que la expresión lógica
(nro > 0) es verdadera, en estas sentencia se va extrayendo cada dógito del
número ingresado:
Mientras (nro > 0) hacer
digito nro Mod 10
nroinvertido 10 * nroinvertido + digito
nro nro Div 10
Fin_Mientras
69 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
Cuando la expresión logica (nro > 0) llega a ser falsa, se ejecuta la sentencia
escribir y finaliza el pseudocódigo:
Escribir (“El número invertido de ”, nro1, “es ”, nroinvertido)
Por ejemplo si el número es 134, entonces el número invertido será 431. Para
ir reduciendo cada número emplearemos la operación:
134 Div 10 = 13
13 Div 10 = 1
1 Div 10 = 0 Se detiene cuando
es cero
Así tenemos:
134 Mod 10 = 4
13 Mod 10 = 3
1 Mod 10 = 1
10 * 0 + 4 = 4
10 * 4 + 3 = 43
10 * 43+ 1 = 431
Inicialmente nroinvertido = 0
Resultado
Iteración Valores Expresión Resultados del cuerpo del bucle
de la
nro de Lógica digito = nroinvertido = nro =
Expresión
nro nro > 0 nro Mod 10 10*nroinvertido nro Div 10
Lógica
+ digito
1 134 134>0 True 4 4 13
2 13 13 >0 True 3 43 1
3 1 1> 0 True 1 431 0
--- 0 0>0 False Fin del Mientras
Ejemplo 02
Pseudocódigo que multiplique dos números enteros utilizando el siguiente
algoritmo:
70 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
23 Div 2 = 11
11 Div 2 = 5
5 Div 2 = 2 Se detiene cuando
2 Div 2 = 1 es 1
4*2=8
8 * 2 = 16
16 * 2 = 32
32 * 2 = 64
Inicio
// Definir e inicializar variables
entero: nro1, nro2, suma 0
// Leer Datos
Escribir (“Ingresar dos números:”)
Leer (nro1, nro2)
// Calcula multiplicación
Mientras (nro1 >= 1) Hacer
Si (nro1 Mod 2 = 1) entonces
suma suma + nro2
Fin_si
nro1 nro1 Div 2
nro2 nro2 * 2
Fin_mientras
Escribir (“El producto es: ”, suma)
Fin
Ejemplo 03
71 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
2 + 5 + 8 + 11 + 14 + …
Inicio
// Definir e inicializar variables
entero: n, ter 2, con , suma 0
// Leer Datos
Escribir (“Ingresar cantidad de términos:”)
Leer (n)
// Calcula serie y suma
con 1
Mientras (con <= n) Hacer
Escribir (ter)
suma suma + ter
ter ter + 3
con con + 1
Fin_mientras
Escribir (“La suma es: ”, suma)
Fin
Ejemplo 04
Pseudocódigo que calcule la suma total y determine cuantos números múltiplos
de M hay en los N primeros números naturales, tal que M <= N.
Por ejemplo:
Si se desea saber cuantos múltiplos de 7 hay en los primeros 80 números
naturales.
Diremos que existen 11 números y son:
Inicio
// Definir e inicializar variables
entero: n, m, con, suma 0
// Leer Datos
Escribir (“Ingresar cantidad de números:”)
Leer (n)
Escribir (“Ingresar múltiplo a validar:”)
Leer (m)
// Calcula serie y suma
con 1
Mientras (m <= n) Hacer
Escribir (m)
72 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
con con + 1
suma suma + m
mm+n
Fin_mientras
Escribir (“La suma es: ”, suma)
Escribir (“La cantidad de múltiplos de ”, m, “encontrados en los ”, n,
“primeros números naturales es ”, con)
Fin
Ejemplo 05
Pseudocódigo que calcule el cuadrado de un número realizando sólo sumas. El
cuadrado de un número n es la suma de los n primeros números impares.
Ejemplo: 32 = 1 + 3 + 5 = 9.
Inicio
// Definir e inicializar variables
entero: n, cuad 0, ter 1, con
// Leer Datos
Escribir (“Ingresar número:”)
Leer (n)
// Calcula serie y suma
con 1
Mientras (con <= n) Hacer
cuad cuad + ter
ter ter + 2
con con + 1
Fin_mientras
Escribir (“El cuadrado de ”, n, “es: ”, cuad)
Fin
Ejemplo 06
Pseudocódigo que imprima la serie y calcule el producto de los n términos de:
Inicio
// Definir e inicializar variables
entero: n, con
real : num 1, den 1, prod 1
// Leer Datos
Escribir (“Ingresar cantidad de términos:”)
Leer (n)
// Calcula serie y multiplica
con 1
73 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
Ejemplo 07
Pseudocódigo que imprima la serie y calcule la suma de los n términos de:
1 + 2 + 5 + 10 + 17 + 26 + …
Inicio
// Definir e inicializar variables
entero: n, con, ter 1, suma 0, inc 1
// Leer Datos
Escribir (“Ingresar cantidad de términos:”)
Leer (n)
con 1
// Calcula serie y suma
Mientras (con <= n) Hacer
Escribir (ter)
suma suma + ter
ter ter + inc
inc inc + 2
con con + 1
Fin_mientras
Escribir (“La suma es: ”, suma)
Fin
Ejemplo 08
Pseudocódigo en el que se ingresa un número entero y se calcula:
a) La suma de sus dígitos
b) El número total (cantidad) de dígitos.
c) La cantidad de dígitos pares e impares
Para obtener cada digito emplearemos la operación digito digito Mod 10, que
en valores es:
74 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
3897 Mod 10 = 7
389 Mod 10 = 9
38 Mod10 = 8
3 Mod 10 = 3
Inicio
// Definir e inicializar variables
entero: nro, digito, suma 0, c 0, cpar 0, cimpar 0
// Leer Datos
Escribir (“Ingresar número:”)
Leer (nro)
Mientras (nro>0) Hacer
digito nro Mod 10
suma suma + digito
cc+1
Si (digito Mod 2 = 0) entonces
cpar cpar + 1
Sino
cimpar cimpar + 1
Fin_si
nro nro Div 10
Fin_mientras
Escribir (“La suma es: ”, suma)
Escribir (“El total de dígitos es: ”, c)
Escribir (“La cantidad de digitos pares es: ”, cpar)
Escribir (“La cantidad de digitos impares es: ”, cimpar)
Fin
Ejemplo 09
Pseudocódigo que calcula los salarios de un conjunto de N trabajadores,
conociendo la tarifa por hora y las horas trabajadas, asi como, la cantidad de
trabajadores que reciben un salario mayor o igual a S/.700. Considerar una
única tarifa por hora para todos los trabajadores.
75 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
con contador
Inicio
// Definir e inicializar variables
entero: tar, n, con, hor, salario, conS 0
// Leer Datos
Escribir (“Ingresar tarifa:”)
Leer (tar)
Escribir (“Ingresar cantidad de trabajadores:”)
Leer (n)
// Calculo
con 1
Mientras (con <= n) Hacer
Escribir (“Ingresar horas trabajadas del trabajador”, con, “:”)
Leer (hor)
salario hor * tar
Si (salario >= 700) entonces
conS conS + 1
Fin_si
con con + 1
Escribir (“El salario del trabajador ”, con, “ es ”, salario)
Fin_mientras
Escribir (“La cantidad de trabajadores con salarios mayores o iguales a
S/.700.00 es: ”, conS)
Fin
Ejemplo 10
Durante un censo se registra los datos de n personas como: sexo (masculino,
femenino), edad y estado civil (soltero, casado, viudo, divorciado). Elaborar un
pseudocódigo que muestre el número de jóvenes solteras que tienen entre 18 y
30 años.
Inicio
// Definir e inicializar variables
entero: n, edad, con 1 , conM 0
caracter: sexo, estCiv
// Leer Datos
Escribir (“Ingresar cantidad de personas:”)
Leer (n)
// Calculo
con 1
Mientras (con <= n) Hacer
Escribir (“Ingresar sexo (M)asculino, (F)emenino:”)
Leer (sexo)
Escribir (“Ingresar edad:”)
Leer (edad)
Escribir (“Ingresar estado civil (S)oltero, (C)asado, (V)iudo, (D)ivorsiado:”)
Leer (estCiv)
Si (sexo = ‘F’ and estCiv = ‘S’ and edad>=18 and edad <=30) entonces
76 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
conM conM + 1
Fin_si
con con + 1
Fin_mientras
Escribir (“La cantidad de mujeres solteras entre 18 y 30 años son: ”, conM)
Fin
Ejemplo 11
Una organización de bienestar familiar registra los pesos de las N personas de
un centro poblado, a partir de estos datos, se desea determinar el promedio de
peso de los niños, jóvenes, adultos y ancianos que existen en la zona.
Considerar la siguiente tabla de categorías:
Categoría Edad
Niños 0 – 12
Jóvenes 13 – 29
Adultos 30 – 59
Ancianos 60 – más
Inicio
// Definir e inicializar variables
entero: n, edad, con 1, conN 0, conJ 0, conA 0, conC 0
real: peso, sumaN 0, sumaJ 0, sumaA 0, sumaC 0, promN,
promJ, promA, promC
// Leer Datos
Escribir (“Ingresar cantidad de población”)
Leer (n)
// Calculo
con 1
Mientras (con <= n) Hacer
Escribir (“Ingresar edad”)
Leer (edad)
Escribir (“Ingresar peso”)
Leer (peso)
Si (edad <= 12) entonces
sumaN sumaN + peso
conN conN + 1
Sino
Si (edad <= 29) entonces
77 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
Ejemplo 12
Pseudocódigo para calcular el máximo común divisor (M.C.D.) de dos números a
y b, empleando el algoritmo de Euclides.
El algoritmo consiste en:
a) Dividir el mayor número entre el menor número, obteniendo el cociente q1 y
el resto r1.
b) Si r1 < > 0, se divide el menor número entre r1, obteniendo el cociente q2
y el resto r2.
c) Si r2 < > 0, se divide r1 entre r2 obteniendo cociente q3 y resto r3.
d) Este proceso continua hasta obtener un resto igual a 0.
e) El máximo común divisor (M.C.D.) es el resto anterior al resto igual a 0.
q1 q2 q3 q4 q5 q6
Cociente 3 1 1 1 1 3
a 1560 432 264 168 96 72 24
Residuo 264 168 96 72 24 0
r1 r2 r3 r4 r5 r6
Observamos que a toma el valor de b y b toma el valor del residuo para lo cual
escribimos a b y b residuo.
78 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
a dividendo
b divisor
residuo residuo
Inicio
// Definir variables
entero: a, b, residuo, n1, n2
// Leer Datos
Escribir (“Ingresar dos números:”)
Leer (n1, n2)
// Calculo
Si (n1 > n2) entonces
a n1
b n2
Sino
a n2
b n1
Fin_si
Mientras (b > 0) Hacer
residuo a Mod b
ab
b residuo
Fin_mientras
Escribir (“El máximo común divisor es: ”, a)
Fin
Ejemplo 13
Para convertir un número en base diferente de 10 a base 10, emplearemos la
descomposición polinómica, se denomina así por que tiene la característica de
un polinomio donde la variable del polinomio viene a estar dado por la base en
la cual se ha escrito el número. Se pide realizar un Pseudocódigo para realizar la
descomposición polinómica
Numero a
Resultado
convertir y su Proceso de Conversión
de la
correspondiente (descomposicion polinomica)
conversión
base
344(7 3*72 + 4*71 + 4*70 = 3*49 + 4*7 + 4 179
*1= 147 + 28 + 4
Para ir reduciendo cada número emplearemos la operación nro nro Div 10,
que en valores es:
344 Div 10 = 34
34 Div 10 = 3
3 Div 10 = 0 Se detiene cuando es cero
Para obtener cada dígito emplearemos la operación digito digito Mod 10, que
en valores es:
79 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
344 Mod 10 = 4
34 Mod 10 = 4
3 Mod 10 = 3
0 + 4 * 70 = 4
4 + 4 * 71 = 32
32 + 3 * 72 = 179
Inicio
// Definir e inicializar variables
entero: nro, nro1, base, digito, suma 0, expo 0
// Leer datos
Escribir (“Ingresar un número y su base”)
Leer (nro, base)
nro1 nro
Mientras( nro > 0) hacer
digito nro Mod 10
suma suma + digito * base ^ expo
expo expo +1
nro nro Div 10
Fin_mientras
Escribir (“El número ”, nro1, “en base 10 es ”, suma)
Fin
Ejemplo 14
Pseudocódigo para convertir un número decimal a una base que puede ser
binario u octal.
Existe varios sistemas de numeración como:
• El sistema binario utiliza los dígitos 0, 1
• El sistema octal usa ocho dígitos 0, 1, 2, 3, 4, 5, 6 y 7.
• El sistema hexadecimal utiliza 16 dígitos, del 0 al 9 y para los otros seis se
usan las letras A, B, C, D, E y F, que tienen valores 10, 11, 12, 13, 14 y 15,
respectivamente. Se usan indistintamente mayúsculas y minúsculas.
• En la tabla se muestran los primeros diecisiete números decimales con su
respectiva equivalencia binaria, octal y hexadecimal.
80 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
5 0101 5 5
6 0110 6 6
7 0111 7 7
8 1000 10 8
9 1001 11 9
10 1010 12 A
11 1011 13 B
12 1100 14 C
13 1101 15 D
14 1110 16 E
15 1111 17 F
16 10000 20 10
17 10001 21 11
10 2
0 5 2
1 2 2 10(10)=1010(2)
0 1
Inicio
// Definir e inicializar variables
entero: nro, nro1, base, residuo, nuevonro 0, coeficiente 1
cadena: mensa
// Lectura de datos
Escribir ("Ingrese numero en base decimal: " )
Leer (nro)
Escribir ("Ingrese base: ")
Leer (base)
nro1 nro
Mientras (nro >0) hacer
residuo nro Mod base
81 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
Concatenar ( unir)
digito = nro Mod base nro = nro / base
cadena = digito + cadena
12 Mod 2 = 0 0+“”=0 12 Div 2 = 6
6 Mod 2 = 0 0 + 0 = 00 6 Div 2 = 3
3 Mod 2 = 1 1 + 00 = 100 3 Div 2 = 1
1 Mod 2 = 1 1 + 100 = 1100 1 Div 2 = 0
El resultado es 1100.
Inicio
// Definir e inicializar variables
entero: nro,nro1,base,residuo
cadena: nuevonro “ ”, mensa
// Lectura de datos
Escribir (“Ingrese numero en base decimal:”)
Leer (nro)
Escribir (“Ingrese base:”)
Leer (base)
nro1nro
Mientras (nro >0) hacer
residuo nro Mod base
nuevonro residuo + nuevonro
nro nro Div base
Fin_mientras
Si (base = 2) entonces
mensa “Binario”
Fin_si
Si (base = 8) entonces
mensa “Octal”
Fin_si
82 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
Inicio
// Definir e inicializar variables
entero: nro, base, residuo, nro1
cadena: nuevonro “ ”, mensa “ ”
// Lectura de datos
Escribir (“Ingresar número en base dcimal: ”)
Leer (nro)
Escribir (“Ingresar base: ”)
Leer (base)
nro1 nro
Mientras (nro > 0) hacer
residuo nro Mod base
Si (residuo <= 9) entonces
nuevonro residuo + nuevonro
Fin_si
Si (residuo <= 10) entonces
nuevonro “a” + nuevonro
Fin_si
Si (residuo <= 11) entonces
nuevonro “b” + nuevonro
Fin_si
Si (residuo <= 12) entonces
nuevonro “c” + nuevonro
Fin_si
Si (residuo <= 13) entonces
nuevonro “c” + nuevonro
Fin_si
Si (residuo <= 14) entonces
nuevonro “d” + nuevonro
Fin_si
Si (residuo <=15 ) entonces
nuevonro “f” + nuevonro
Fin_si
Si (base = 2) entonces
83 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
mensa “Binario”
Fin_si
Si (base = 8) entonces
mensa “Octal”
Fin_si
Si (base = 16) entonces
mensa “Hexadecimal”
Fin_si
nro nro Div base
Fin_mientras
Escribir (nro1, “ en base ”, mensa, “ es ”, nuevonro)
Fin
Esta sentencia repite una sentencia o más sentencias hasta que el resultado de
una expresión lógica sea verdadero (true), momento en que termina la
sentencia Repetir y se continúa con el resto del algoritmo. Su sintaxis es la
siguiente:
Repetir
Acción
Hasta_que (expresión_lógica)
Ejemplo 15
Pseudocódigo que imprime los 10 primeros términos de la serie:
1, 3, 5, 7, ...
Inicio
// Definir e inicializar variables
entero: termino 1, con 1
// Calcula e imprime termino
Repetir
Escribir (termino)
termino termino + 2
con con + 1
84 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
Ejemplo 16
Pseudocódigo que encuentra el menor número, de un conjunto de números
positivos ingresados. El pseudocódigo termina cuando se ingresa el cero o un
número negativo.
Inicio
// Definir e inicializar variables
entero: nro, menor 99999
// Calcula e imprime término
Repetir
Escribir (“Ingresar número”)
Leer (nro)
Si (nro < menor) entonces
menor nro
Fin_si
Hasta_que (nro <= 0)
Escribir (“El menor número ingresado es ”, menor)
Fin
Ejemplo 17
Pseudocódigo que genere una secuencia de números utilizando el siguiente
algoritmo:
85 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1 4 2 1 …
Número Proceso
7 7 es impar, entonces 7 * 3 + 1 = 22
22 22 es par, entonces 22 / 2 = 11
11 11 es impar, entonces 11 * 3 + 1 =34
34 34 es par, entonces 34 / 2 = 17
17 17 es impar, entonces 17 * 3 + 1 = 52
52 52 es par, entonces 52 / 2 = 26
26 26 es par, entonces 26 / 2 = 13
12 13 es impar, entonces 13 * 3 + 1 = 40
40 40 es par, entonces 40 / 2 = 10
10 10 es par, entonces 10 / 2 = 5
5 5 es impar, entonces 5 * 3 + 1 = 16
16 16 es par, entonces 16 / 2 = 8
8 8 es par, entonces 8 / 2 = 4
4 4 es par, entonces 4 / 2 = 2
2 2 es par, entonces 2 / 2 = 1
1
Inicio
// Definir variables
entero: nro, residuo
// Leer Datos
Escribir (“Ingresar número:”)
Leer (nro)
// Calcula la serie
Repetir
residuo nro Mod 2
Si (residuo = 0) entonces
nro nro Div 2
Sino
nro 3 * nro + 1
Fin_si
Escribir (nro)
Hasta_que (nro = 1)
Fin
Ejemplo 18
Pseudocódigo que calcule el promedio de números positivos y el promedio de
números negativos de un conjunto de números ingresados. El pseudocódigo
termina cuando se ingresa el cero.
86 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
Inicio
// Definir e inicializar variables
entero: nro, sumap 0, suman 0, cp 0, cn 0
real: promp, promn
// Ingreso y cálculo
Repetir
Escribir (“Ingresar número”)
Leer (nro)
Si (nro > 0) entonces
sumap sumap + nro
cp cp + 1
Sino
Si (nro < 0) entonces
suman suman + nro
cn cn + 1
Fin_si
Fin_si
Hasta_que (nro = 0)
promp sumap / cp
promn suman / cn
Escribir (“El promedio de los números positivos es ”, promp)
Escribir (“El promedio de los números negativos es ”, promn)
Fin
Ejemplo 19
Pseudocódigo que lee N consumos de un restaurante. Si el consumo ingresado
excede los S/.70.00, se le descontará el 15%. Mostrar el monto de cada
consumo realizado y el total que recauda el restaurante por todos los consumos.
87 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
Ejemplo 20
Pseudocódigo que calcula la compra de N productos de diferentes precios, dicha
compra se realiza hasta que el cliente ya no desea seguir comprando. Mostrar el
monto total que paga el cliente.
Inicio
// Definir e inicializar variables
entero: cant
real: precio, subTot, total 0
caracter: resp
// Cálculo
Repetir
Escribir (“Ingresar precio del producto”)
Leer (precio)
Escribir (“Ingresar cantidad de productos”)
Leer (cant)
subTot precio * cant
total total + subTot
Escribir (“¿Desea seguir comprando (S/N)?”)
Leer (resp)
Hasta_que(resp = ‘N’)
Escribir (“El total a pagar es ”, total)
Fin
Ejemplo 21
Pseudocódigo que calcula el monto total que se paga por una entrada a un
evento cultural, los precios varían de acuerdo al tipo de entrada:
Además el precio tiene un incremento del 12% por impuesto. Validar el ingreso
de datos.
Inicio
88 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
// Definir variables
real: precio, inc
caracter: tipo
// Cálculo
Repetir
Escribir (“Ingresar tipo de entrada (V)ip, (P)latea, Popu(L)ar”)
Leer (tipo)
Si (tipo <> ‘V’ and tipo <> ‘P’ and tipo <> ‘L’)
Escribir (“Tipo no existe”)
Fin_si
Hasta_que (tipo = ‘V’ or tipo = ‘P’ or tipo = ‘L’)
Según sea (tipo)
‘V’: precio 70.00
‘P’: precio 50.00
‘L’: precio 30.00
Fin_según
inc precio * 0.12
precio precio + inc
Escribir (“El precio final a pagar es ”, precio)
Fin
Ejemplo 22
Un entrenador le ha propuesto a un atleta recorrer una ruta de cinco kilómetros
durante 10 días, para determinar si es apto para competir. Para que el atleta
sea considerado apto debe cumplir por lo menos una de las siguientes
condiciones:
• Que en ninguna de las pruebas haga un tiempo mayor a 16 minutos.
• Que su promedio de tiempos sea menor o igual a 15 minutos.
Inicio
// Definir e inicializar variables
entero: tpo, ct 0, suma 0, con 0
real: prom
// Cálculo
Repetir
Escribir (“Ingresar tiempo en minutos”)
Leer (tpo)
Si (tpo > 16) entonces
ct ct + 1
Fin_si
suma suma + tpo
con con + 1
Hasta_que (con = 10)
prom suma / 10
Si ((ct = 0) or (prom <= 15))
Escribir (“Si es apto para competir”)
Sino
Escribir (“No es apto para competir”)
Fin_si
Fin
89 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
Ejemplo 23
Se ingresan los resultados de la evaluación de un cierto número de alumnos del
curso de Programación; por cada alumno se informa: su asistencia (1 =
presente; 0 = ausente) y su calificación. A partir de esta información se debe
calcular:
• La cantidad y el porcentaje de alumnos presentes.
• Promedio de calificaciones de alumnos presentes.
Si un alumno esta ausente no se registra su calificación. El pseudocódigo
termina cuando se ingresa como asistencia un valor diferente a 1 ó 0.
Inicio
// Definir e inicializar variables
entero: asis, calf, suma 0, cap 0, caa 0, cant 0
real: porp, prom
// Cálculo
Repetir
Escribir (“Ingresar asistencia (1)Presente, (0)Ausente”)
Leer (asis)
Si (asis = 1)
Escribir (“Ingresar calificación”)
Leer (calf)
suma suma + calf
Fin_si
Según sea (asis) hacer
1 : cap cap + 1
0 : caa caa + 1
Fin_según
cant cant + 1
Hasta_que (asis <> 0 or asis <>1)
porp (cap * 100) / cant
prom suma / cap
Escribir (“La cantidad de alumnos presentes es ”, cap)
Escribir (“El porcentaje de alumnos presentes es ”, porp)
Escribir (“El promedio de calificaciones de los alumnos presentes es ”, prom)
Fin
Ejemplo 24
Pseudocódigo que lee de forma consecutiva y aleatoria una serie de números, y
finalice cuando se ingresa un número mayor que la suma de los dos números
anteriores ingresados, mostrándose la cantidad de números ingresados y los
tres números que cumplieron la condición.
90 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
Inicio
// Definir e inicializar variables
entero: nro, sw 0, n1 0, n2 0, con 0, suma
// Cálculo
Repetir
Escribir (“Ingresar número”)
Leer (nro)
Si (con >= 2)
suma n1 + n2
Si (nro > suma) entonces
sw 1
Fin_si
Fin_si
Si (sw = 0) entonces
Si (con Mod 2 = 0) entonces
n1 nro
Sino
n2 nro
Fin_si
Fin_si
con con + 1
Hasta_que (sw = 1)
Escribir (“La cantidad de números ingresados es ”, con)
Escribir (“Los números que cumplieron la condicion son ”, n1, n2, nro)
Fin
Ejemplo 25
Pseudocódigo que lee números de forma consecutiva y aleatoria hasta que se
ingrese el número 0 (cero). Calcular la suma de todos los números ingresados
antes de que aparezca el primer número mayor a 150, asi como la suma de
todos los números que entran a continuación de éste, hasta la aparición del
cero.
Mostrar la cantidad de números ingresados (sin contar el cero ni el primer
número mayor de 150), en la primera y la segunda suma.
Contemplar la posibilidad de que entre antes el 0 que el primer número mayor
de 150.
Inicio
// Definir e inicializar variables
entero: nro, sw 0, suma1 0, suma2 0, con 0
// Cálculo
Repetir
Escribir (“Ingresar número”)
Leer (nro)
Si (nro <> 0) entonces
con con + 1
91 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
Fin_si
Si (sw = 1) entonces
suma2 suma2 + nro
Fin_si
Si ((nro < 150) and (sw = 0)) entonces
suma1 suma1 + nro
Sino
sw = 1
con con - 1
Fin_si
Hasta_que (nro = 0)
Escribir (“La cantidad de números ingresados es ”, con)
Escribir (“La primera suma es ”, suma1)
Escribir (“La segunda suma es ”, suma2)
Fin
Ejemplo 26
Suponga que se piden X soles prestados a un banco, con el acuerdo de devolver
Y soles cada mes hasta devolver el préstamo completo. Parte del pago mensual
serán los intereses calculados como el i por ciento del capital por devolver en
ese momento. El resto del pago mensual se aplica a reducir el capital a
devolver. El algoritmo debe determinar:
• La cantidad de intereses que se paga cada mes.
• La cantidad de dinero aplicada cada mes al capital por devolver.
• La cantidad acumulada de intereses.
• La cantidad del préstamo aún pendiente al final de cada mes.
• La cantidad probable que se devuelve en el último pago.
92 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
Inicio
// Definir e inicializar variables
real: x, i, inte, y, ma, suma 0
// Leer dato
Escribir (“Ingresar monto prestado”)
Leer (x)
Escribir (“Ingresar interes”)
Leer (i)
Escribir (“Ingresar monto que se devuelve”)
Leer (y)
Repetir
inte (i/100) * x
Escribir (“El interes del mes es”, inte)
ma y - inte
Si (y > x) entonces
Escribir (“El monto aplicado al capital es ”, x)
Sino
Escribir (“El monto aplicado al capital es ”, ma)
Fin_si
x x - ma
Si (x < 0) entonces
Escribir (“El monto pendiente es 0”)
Escribir (“Se le devuelve ”, -x)
Sino
Escribir (“El monto pendiente es ”,x)
Fin_si
suma suma + inte
Hasta_que (x > 0)
Escribir (“La cantidad acumulada de interés es ”, suma)
Fin
93 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
Ejemplo 27
Pseudocódigo que calcule la suma de los cuadrados y los cubos de los N
primeros números naturales.
Inicio
// Definir e inicializar variables
entero: n, nro, cuad, cubo, sumaCuad 0, sumaCubo 0
// Leer dato
Escribir (“Ingresar cantidad de números naturales”)
Leer (n)
Desde (nro 1) hasta (nro <= n) con incremento 1 Hacer
cuad nro * nro
sumaCuad sumaCuad + cuad
cubo nro * nro * nro
sumaCubo sumaCubo + cubo
Fin_desde
Escribir(“La suma de los cuadrados es ”, sumaCuad)
Escribir(“La suma de los cubos es ”, sumaCubo)
Fin
Explicación
94 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
Para realizar el ejercicio planteado se definen las variables enteras n, nro, cuad,
cubo y se define e inicializa en cero las variables sumaCuad, sumaCubo:
entero: n, nro, cuad, cubo, sumaCuad 0, sumaCubo 0
Ejemplo 28
Pseudocódigo que calcula el numero PI, de acuerdo a la siguiente fórmula:
PI/4 = 1 - 1/3 + 1/5 - 1/7 + ...
Inicio
// Definir e inicializar variables
entero : n, con
real : pi, suma 0, num 1, den 1
// Leer dato
Escribir (“Ingresar cantidad de términos”)
Leer (n)
Desde (con 1) hasta (con <= n) con incremento 1 Hacer
suma suma + (num / den)
num num * -1
den den + 2
Fin_desde
pi suma * 4
Escribir (“El valor de PI es ”, pi)
Fin
Ejemplo 29
95 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
Así pues, decimos que 5 es divisor de 20, porque 20 Mod 5 nos da residuo cero.
Por ejemplo, los divisores de 24 son: 1, 2, 3, 4, 6, 8, 12, 24, para hallar estos
valores es necesario dividir al número 24 con valores comprendidos entre 1 y
24, los cuales se trabajarán mediante la variable i, si el residuo de la división
del número 24 entre i es cero entonces i es uno de los divisores de 24.
Nro Mod i
24 Mod 1 = 0 entonces 1 es divisor de 24
24 Mod 2 = 0 entonces 2 es divisor de 24
24 Mod 3 = 0 entonces 3 es divisor de 24
24 Mod 4 = 0 entonces 4 es divisor de 24
24 Mod 5 <> 0 entonces 5 no es divisor de 24
y así sucesivamente
Inicio
// Definir e inicializar variables
entero: nro, i 1
// Leer datos
Escribir (“Ingresar número”)
Leer (nro)
Desde (i 1) hasta (i <= nro) con incremento 1 hacer
Si (nro Mod i = 0) entonces
Escribir (i)
Fin_si
Fin_desde
Fin
Ejemplo 30
Pseudocódigo que calcule el factorial de un número entero. El factorial de un
número n se representa por n! y su fórmula es:
n ! = 1 * 2 * 3 * 4 * … * (n-2) * (n-1) * n
n! = (n-1)! * n
fact fact * i
96 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
Inicio
// Definir e inicializar variables
entero i, nro, fact 1
// Leer Datos
Escribir (“Ingresar número:”)
Leer (nro)
// Calcula el factorial
Desde (i 1) hasta (i <= nro) con incremento 1 hacer
fact fact * i
Fin_desde
Escribir (“El factorial es: ”, fact)
Fin
Resultados
Iteración Expresión Valor de la del cuerpo
Nro lógica Expresión del bucle Incremento
i i<=5 lógica fact = fact * i i=i+1
1 1<= 5 true 1 2
2 2<= 5 true 2 3
3 3 <=5 true 6 4
4 4 <=5 true 24 5
5 5<= 5 true 120 6
6 6<= 5 false Finaliza la sentencia desde
Ejemplo 31
Pseudocódigo que obtenga el cuadrado de un número entero utilizando la
formula:
n2 = 1 + 3 + 5 + . . . + 2n-1.
Si n = 1 2*1–1=1
Si n = 2 2*2-1=3
Si n = 3 2*3–1=5
10+1
41+3
94+5
Inicio
97 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
Ejemplo 32
Pseudocódigo para determinar si un año es bisiesto en un rango dado. Un año
es bisiesto si es múltiplo de 4 pero no múltiplo de 100 excepto los múltiplos de
400.
Como tenemos que hallar los años bisiestos en un rango, empleamos un bucle
repetitivo que permita recorrer los años determinados en el rango añoinicio y
añotermino que definen el año de inicio y término respectivamente, de esta
manera usamos un contador año que empieza en añoinicio y termina en
añotermino que se irá incrmentando en 1, el mismo que definirá cada año que
se evalúa como bisiesto. De esta manera, dentro del bucle realizamos los
cálculos correspondientes
Inicio
// Definir variables
entero: añoinicio, añotermino, a
// Leer dato
Escribir (“Ingresar año inicial y año final”)
Leer (añoinicio, añotermino)
Desde (a añoinicio) hasta (a <= añotermino) con incremento 1 Hacer
Si ((a Mod 4 = 0) and (a Mod 100 <> 0) or (a Mod 400 = 0)) entonces
Escribir (“El año ”, a, “es bisiesto”)
Fin_si
Fin_desde
Fin
Ejemplo 33
Pseudocódigo que muestra y calcula el promedio de todos los números pares
comprendidos entre a y b. Indistintamente a puede ser menor que b o b menor
que a.
98 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
Inicio
// Definir e inicializar variables
entero: a, b, nro, suma 0, con 0
real: prom
// Leer Datos
Escribir (“Ingresar límites:”)
Leer (a, b)
Si (a > b) entonces
n1 a
n2 b
Sino
n1 b
n2 a
Fin_si
Desde (nro n1) hasta (nro <= n2) con incremento 1 hacer
Si (nro Mod 2 = 0) entonces
Escribir (nro)
suma suma + nro
con con +1
Fin_si
Fin-desde
prom suma / con
Escribir (“El promedio es ”, prom)
Fin
Ejemplo 34
Pseudocódigo que lee dos números, el primero representa el número a ser
transformado, y el segundo el transformador, se debe hacer girar hacia la
derecha el número a transformarse, tantas veces lo indique el transformador, e
ir desplegando el número después de cada transformación.
Inicio
// Definir e inicializar variables
entero: n1, n2, aux, dig, cd 0, con
// Leer dato
Escribir (“Ingresar dos números”)
Leer (n1, n2)
aux n1
Mientras (aux > 0) hacer
dig aux Mod 10
99 Sistema a Distancia
Algoritmos: Un enfoque práctico - Capítulo II Franklin Arriola R. / Yuliana Jáuregui R.
cd cd + 1
aux aux Div 10
Fin_mientras
cd cd - 1
Desde (con 0) hasta (con < n2) con incremento 1 Hacer
dig n1 Mod 10
n1 n1 Div 10
dig dig * 10 ^ cd
n1 dig + n1
Fin_desde
Escribir(“El número transformado es ”, n1)
Fin
Ejemplo 35
Pseudocódigo para averiguar si un número ingresado es primo. Un número es
primo, si solo tiene como divisores al mismo número y a la unidad.
Inicio
// Declarar e inicializar variables
entero: nro, d, con 0
// Leer Datos
Escribir (“Ingresar número:”)
Leer (nro)
Desde (d 1) hasta (d <= nro) con incremento 1 hacer
Si (nro Mod d = 0) entonces
con con + 1
Fin_si
Fin-desde
Si (con <= 2)
Escribir (“El número es primo”)
Sino
Escribir (“El número no es primo”)
Fin_si
Fin
Ejemplo 36
Una empresa almacena los datos de N empleados, para esto, en un proceso
repetitivo se ingresa el sexo (masculino, femenino) y el salario de cada
empleado. Se pide calcular:
a) El mayor y el menor salario
b) El promedio de salarios.
c) La cantidad de mujeres y varones que trabajan en esa empresa
Inicio
// Definir e inicializar variables
entero: n, con, conVar 0, conMuj 0
real: sal, mayor 0, menor 99999, suma 0, prom
caracter: sexo
// Leer dato
Escribir (“Ingresar cantidad de empleados”)
Leer (n)
Desde (con 1) hasta (con <= n) con incremento 1 Hacer
Escribir (“Ingresar sexo”)
Leer (sexo)
Escribir (“Ingresar salario”)
Leer (sal)
Si (sal > mayor) entonces
mayor sal
Fin_si
Si (sal < menor) entonces
menor sal
Fin_si
suma suma + sal
Según sea (sexo) hacer
‘M’ : conVar conVar + 1
‘F’ : conMuj conMuj + 1
Fin_según
Fin_desde
prom suma / n
Escribir (“El mayor salario es ”, mayor)
Escribir (“El menor salario es ”, menor)
Escribir (“El promedio de salarios es ”, prom)
Escribir (“La cantidad de varones que trabajan en la empresa es ”, conVar)
Escribir (“La cantidad de mujeres que trabajan en la empresa es ”, conMuj)
Fin
Ejemplo 37
Pseudocódigo que indica mediante un mensaje si dos números son amigos o no.
Se dice que dos números son amigos si la suma de los divisores del primer
número (excepto él mismo) coincide con el segundo número y viceversa.
1 + 2 + 4 + 5 + 10 + 11 + 20 + 22 + 44 + 55 + 110 = 284
1 + 2 + 4 + 71 + 142 = 220
Inicio
// Definir e inicializar variables
entero: nro1, nro2, d, suma1 0, suma2 0
// Leer Datos
Escribir (“Ingresar primer número:”)
Leer (nro1)
Escribir (“Ingresar segundo número:”)
Leer (nro2)
Desde (d 1) hasta (d <= (nro1 Div 2)) con incremento 1 hacer
Si (nro1 Mod d = 0) entonces
suma1 suma1 + d
Fin_si
Fin-desde
Desde (d 1) hasta (d <= (nro2 Div 2)) con incremento 1 hacer
Si (nro2 Mod d = 0) entonces
suma2 suma2 + d
Fin_si
Fin-desde
Si (suma1 = nro2 and suma2 = nro1)
Escribir (“Los números ”, nro1, “y ”, nro2, “son amigos”)
Sino
Escribir (“Los números ”, nro1, “y ”, nro2, “no son amigos”)
Fin_si
Fin
Ejemplo 38
Se ha seleccionado n números de personas para realizar una encuesta, en un
proceso repetitivo se ingresa el grado de instrucción y la edad de cada persona.
Se desea saber el promedio de edades, la mayor edad y el porcentaje de
personas con instrucción Primaria, Secundaria y Superior (P, S, R).
Inicio
// Definir e inicializar variables
entero: n, con, edad, suma 0, mayor 0, conp 0, cons 0, conr 0
real: prom, p1, p2, p3
caracter: grad
// Leer Datos
Escribir (“Ingresar cantidad de personas:”)
Leer (n)
Desde (con 1) hasta (con <= n) con incremento 1 hacer
Escribir (“Ingrese grado de instrucción (P)rimaria, (S)ecunadaria, supe(R)ior:”)
Leer (grad)
Ejemplo 39
Bucle anidado Desde dentro de otro Desde, para hallar la tabla de multiplicar
del 1 y del 2. Se pide la siguiente salida:
……
2 * 12 = 24
Ejemplo 40
Un centro de estudios desea saber cuál ha sido el promedio más alto, de un
conjunto de 120 alumnos, sabiendo que cada alumno a llevado 5
asignaturas.
Inicio
// Definir e inicializar variables
entero: nota, suma 0, prom, mayor 0, con1 1, con2 1
// Calculo
Mientras (con1 <= 120) Hacer
Mientras (con2 <= 5) Hacer
Escribir (“Ingresar nota de asignatura”, con, “:”)
Leer (nota)
suma suma + nota
Fin_mientras
prom suma / 5
Si (prom > mayor) entonces
mayor prom
Fin_si
Fin_mientras
Escribir (“El mayor promedio es: ”, mayor)
Fin
Ejemplo 41
Pesudocódigo que reduce una fracción a su mínima expresión.
Por ejemplo:
Si se ingresa 36 / 48
num den
36 48 2
18 24 2
9 12 3
3 4
En su mínima expresión es 3 / 4
Inicio
// Definir e inicializar variables
entero: num, den, d 2
// Leer Datos
Escribir (“Ingresar fracción:”)
Leer (num, den)
// Calcula serie y multiplica
Mientras ((d < num) and (d < den)) Hacer
Mientras ((num mod d = 0) and (den mod d = 0)) Hacer
num num Div d
den den Div d
Fin_mientras
dd+1
Fin_mientras
Escribir (“La fracción en su mínima expresión es: ”, num, “/”, den)
Fin
Ejemplo 42
Pseudocódigo que lea N notas de un estudiante y calcule su promedio,
sabiendo que se elimina la nota mas baja. Se debe validar el ingreso de
notas, que debe estar comprendido entre 0 y 20.
Inicio
// Definir e inicializar variables
entero: n, con, nota, menor 21
real: suma 0, prom
Escribir (“Ingresar cantidad de notas”)
Leer (n)
// Calculo
con 1
Ejemplo 43
Pseudocódigo para encontrar todos los números que sean capicúas en un
rango dado. Un número es capicúa o poliandro, si al invertir el número nos
da el mismo número.
Inicio
// Definir e inicializar variables
entero: vi, vf, nro, digito, inver 0, i
// Leer datos
Escrbir (“Ingresar el valor inicial y final de un rango de números”)
Leer (vi, vf)
Ejemplo 44
Pseudocódigo para buscar el número del tarot de una persona; para hallar el
número del tarot, se tiene que sumar cada uno de los números de la fecha
de nacimiento de una persona y a continuación reducirlos hasta obtener un
solo dígito.
Inicio
// Definir e inicializar variables
Ejemplo 45
Pseudocódigo para hallar los números primos en un rango dado, un número
es primo si es divisible por si mismo y por la unidad. Algunos números
primos son:
1 2 3 5 7 11 13
Inicio
// Definir variables
entero: vi, vf, nro, k, p
// Leer datos
Escribir (“Ingresar valor inicial y final de un rango”)
Leer (vi, vf)
// Calcula los números primos
Desde (nro vi) hasta (nro <= vf) con incremento 1 hacer
p0
Ejemplo 46
Pseudocódigo que solicite un valor no negativo (si se ingresa un valor
negativo volverá a pedir el número hasta que se ingrese un número
positivo), una vez ingresado el número mostrar los números naturales desde
el 1 hasta el número ingresado de forma consecutiva de manera que se vaya
mostrando un número menos hasta que se muestre solo la unidad.
Inicio
// Definir variables
entero: nro, aux, con, n
// Leer Datos
Repetir
Escribir (“Ingresar número:”)
Leer (nro)
Hasta_que (nro>0)
aux nro
Desde (con 1) hasta (con <= aux) con incremento 1 hacer
Desde (n 1) hasta (n <= nro) con incremento 1 hacer
Escribir (n)
Fin_desde
nro nro -1
Fin-desde
Fin
Ejemplo 47
Pseudocódigo que permita ingresar números enteros, y calcule el factorial de
cada número ingresado. El algoritmo termina cuando se ingresa un número
negativo.
con contador
Inicio
// Definir variables
entero: nro, fact, con
// Leer Datos
Repetir
Escribir (“Ingresar número:”)
Leer (nro)
fact 1
Si (nro >= 0) entonces
Desde (con 1) hasta (con <= nro) con incremento 1 hacer
fact fact * con
Fin_desde
Escribir (“El factorial de ”, nro, “es ”, fact)
Fin_si
Hasta_que (nro < 0)
Fin
Ejemplo 48
Se desea calcular los sueldos semanales de N obreros; durante los 5 días de
la semana se registran la cantidad de horas diarias y el turno en el que
trabajó el obrero. Un obrero puede alternar su trabajo en cualquiera de los
dos turnos. La tarifa de cada hora trabajada para el turno mañana es de
S/23.00 y para el turno tarde S/25.40. Además, si un obrero trabajó durante
una semana más de 40 horas, se le pagará S/.12.00 por cada hora adicional
a las 40.
Inicio
// Definir e inicializar variables
entero: n, hor, dia, con 0, totHor
caracter: tur
real: pagoDia, pagoSem, pagoExtra
// Leer Datos
Escribir (“Ingresar cantidad de obreros:”)
Leer (n)
Repetir
pagoSem 0
totHor 0
Desde (dia 1) hasta (dia <= 5) con incremento 1 hacer
Escribir (“Ingresar turno (M)añana, (T)arde”)
Leer (tur)
Escribir (“Ingresar cantidad de horas trabajadas”)
Leer (hor)
Según sea (tur) hacer
‘M’: pagoDia hor * 23.00
Son bucles que nunca terminan (no tienen fin). Pueden implementarse
fácilmente utilizando las sentencias Mientras o Repetir – Hasta_que.
Generalmente son condiciones no deseadas y el programador las utiliza
según su criterio, colocando en su interior una instrucción que fuerza la
terminación del bucle, para nuestro caso se utiliza la palabra Salir (break).
Ejemplo 49
Pseudocódigo que genera una secuencia de números utilizando el siguiente
algoritmo:
• Empezamos por cualquier número entero positivo
• Si es par, Lo dividimos por dos, si es impar lo multiplicamos por tres y le
sumamos 1
• Repetimos el segundo paso con el número resultante, la secuencia se
puede repetir indefinidamente, detenerlo hasta que aparezca el primer
número 1
Inicio
// Definir variable
entero: nro
// Leer Datos
Escribir (“Ingresar número que inicia la serie:”)
Leer (nro)
Mientras (verdadero) hacer // bucle infinito
Si (nro Mod 2 = 0)
nro nro / 2
Sino
nro 3*nro + 1
Fin_si
Escribir (nro)
Si (nro = 1) entonces // cuando nro es igual a 1
Salir // termina el bucle infinito
Fin_si
Fin_mientras
Fin
Ejemplo 50
Pseudocódigo que muestra el mensaje “BUCLE INFINITO” infinitas veces.
Inicio
Mientras (verdadero)
Escribir (“BUCLE INFINITO”)
Fin_mientras
Fin
Ejemplo 51
Pseudocódigo que imprima el mensaje es par o impar, en caso se ingrese un
número entre 3 y 13, sino está en el intervalo, imprimir el mensaje “fuera de
rango”.
Inicio
// Definir e inicializar variable
lógico: r falso
Repetir
Escribir (“Ingresar número”)
Leer (nro)
Si (nro >= 3 and nro <= 13) entonces
Si ( nro Mod 2 = 0 ) entonces
Escribir (“Es par”) // es par
Sino
Escribir (“Es impar”) // es impar
Fin_si
r verdadero // r se hace verdadero para que
// salga del bucle infinito
Sino
Escribir (“No esta entre 3 y 13”)
r falso // r se hace falso para que siga en
el bucle infinito
Fin_si
Hasta_que (r)
Fin
4.6.Ejercicios propuestos
Programación Modular
Raíz
Módulo 12
2. Módulo
3. Partes de un módulo
Podemos decir que está conformado por dos partes: La declaración del módulo y el
cuerpo del módulo, tal como se ilustra a continuación.
// Sentencias
Cuerpo del módulo
Fin_módulo
4. Parámetros
5. Tipos de Módulos
Los módulos se pueden clasificar según el tipo de retorno o valor que devuelve, en:
funciones y procedimientos.
5.1. Funciones
Retornar valor
Fin_función
La variable x nos sirve para guardar el valor devuelto de la función, debe ser
del mismo tipo del valor que se devuelve.
Por ejemplo:
x suma (n1, n2)
Escribir (“La suma es ”, x)
5.2. Procedimientos
Parámetros actuales
Inicio
//Cuerpo del módulo principal
nombreDelMódulo1 (Lista de parámetros)
nombreDelMódulo2 (Lista de parámetros)
nombreDelMódulo3 (Lista de parámetros)
Fin
tipoDeMódulo nombreDelMódulo1 (Lista de parámetros)
// Cuerpo del módulo Parámetros formales
Fin_modulo
tipoDeMódulo nombreDelMódulo2 (Lista de parámetros)
// Cuerpo del módulo
Fin_modulo
tipoDeMódulo nombreDelMódulo3 (Lista de parámetros)
// Cuerpo del módulo
Fin_modulo
Una vez que se encuentra una llamada a un módulo, se transfiere el control del
programa al módulo invocado, se ejecuta las instrucciones del cuerpo del módulo y
finalmente, el control del programa regresa a la siguiente instrucción de la llamada
del módulo.
El control Inicio
retorna a la entero x, nro1 3, nro2 5
instrucción Transfiere
x suma (n1, n2) //llamada a la función el control
que sigue a
la llamada Escribir (“La suma es ”, x) a la función
Fin
Cuando se declara un módulo, el tipo de resultado nos indica el tipo de dato que ha
de devolver, es decir se está trabajando con una función, si el módulo no devuelve
ningún valor se trata de un procedimiento.
Ejemplo
Pseudocódigo para hallar el mayor de dos números ingresados.
• Función mayor (entero pnro1, entero pnro2), devuelve un valor entero que
representa el mayor de dos números.
Inicio
// Definir e inicializar variables
entero: nro1 5, nro2 6, m
m mayor(nro1, nro2)
Escribir (“El mayor numero es : ” , m)
Fin
Pasar parámetros por valor significa copiar los parámetros actuales en sus
correspondientes parámetros formales, operación que se hace
automáticamente cuando se llama a un módulo, con lo cual no se modifica los
parámetros actuales.
Se puede modificar el valor de un parámetro formal dentro del módulo, pero el
valor del parámetro actual en el punto de llamada no cambiará. Los parámetros
por valor no pueden ser modificados por el subprograma.
Ejemplo
Pasar por valor a 3
Inicio
//Definir e inicializar variable
entero: a 3
Escribir (“Antes de la llamada a = ”, a)
porValor (a) // llamada al módulo
Escribir (“Después de la llamada a = ”, a)
Fin
Antes de la llamada a = 3
Después de la llamada a = 3 (no cambia el parámetro actual)
Dirección 205
18
Ejemplo
Pasar por referencia a 3
Inicio
//Definir e inicializar variable
entero: a 3
Escribir (“Antes de la llamada a = ”, a)
Antes de la llamada a = 3
Después de la llamada a = 4 (cambia el parámetro actual)
• Las Variables Globales, son aquellas variables que pueden ser usadas en todos
los módulos del algoritmo, estas variables son declaradas fuera de todos los
módulos.
• Las Variables Locales, son aquellas variables que sólo son usadas dentro del
módulo donde es declarada.
Ejemplo:
Inicio
// Declaración de variables locales
tipo: nombreDeVariableLocal1, nombreDeVariableLocal2
nombreDelMódulo1 (Lista de parámetros)
nombreDelMódulo2 (Lista de parámetros)
nombreDelMódulo3 (Lista de parámetros)
Fin
12.Ejercicios resueltos
Ejemplo 01
Pseudocódigo que calcule el área de un cuadrado. La fórmula es:
Inicio
// Definir variables
entero: lado, r
Escribir (“Ingrese lado del cuadrado ")
Leer (lado)
r areaCuadrado (lado)
Escribir (" El área del cuadrado es ", r)
Fin
Ejemplo 02
Pseudocódigo para calcular el determinante de una matriz de orden 2; un
determinante se obtiene multiplicando en cruz y restando.
a b
= a*d − b *c
c d
Inicio
// Definir variables
entero: a, b, c, d, m
ingresar (a, b, c, d)
m calculaDeterminante (a, b, c, d)
imprimir(m)
Fin
Función calculaDeterminante(entero pa, entero pb, entero pc, entero pd) : entero
// Definir variables
entero: t
t pa * pd – pb * pc
retornar t
Fin_función
Ejemplo 03
Pseudocódigo que identifique si un número entero es par o impar.
Inicio
// Definir variables
entero: nro
booleano: m
ingresar (nro)
m esparImpar (nro)
imprimir (nro, m)
Fin
Ejemplo 04
Pseudocodigo para intercambiar los valores de dos números enteros.
Inicio
// Definir variables
entero: a, b
ingresar (a, b)
intercambio (a, b)
imprimir (a, b)
Fin
Ejemplo 05
Pseudocódigo que construye un número a través de 3 valores ingresados.
Por ejemplo:
Primer valor: 4
Segundo valor: 5
Tercer valor: 6
El número compuesto es: 456
• Procedimiento ingresar(entero &pa, entero &pb, entero & pc), permite ingresar
tres números enteros de un dígito a través de los parámetros por referencia
&pa, &pb y &pc.
• Función compone (entero pa, entero pb, entero pc), devuelve un número
entero que representa la concatenación de tres valores.
• Procedimiento imprimir(entero px), muestra el número construido a partir de los
valores ingresados.
Inicio
// Definir variables
entero: a, b, c, x
// Lectura de datos
ingresar (a, b, c)
x compone (a, b, c)
imprimir (x)
Fin
Ejemplo 06
Pseudocódigo que lea un número entero N y un digito D, y averigüe si D es o no un
digito de N.
Por ejemplo:
n =123, d = 3 devuelve verdad (3 es dígito de 123)
n =123, d = 4, devuelve falso (4 no es dígito de 123)
Inicio
// Definir variables
entero: n, d
booleano: r
ingresar (n, d)
r encontroDigito (n, d)
imprimir (r, d)
Fin
Ejemplo 07
Pseudocódigo que permite ingresar un número entero que representa la cantidad
de horas y devuelve su equivalente en minutos y segundos.
Inicio
entero: hor, min, seg
ingresar (hor)
equivalente (hor, min, seg)
imprimir (hor, min, seg)
Fin
Fin_procedimiento
Ejemplo 08
Pseudocódigo que lea un número entero y diga si es capicúa o no. Un número es
capicúa, si al invertir el número nos da el mismo número.
Inicio
// Definir variables
entero: n, digito, r
ingresar (n)
r capicua (n)
imprimir (n, r)
Fin
Fin_mientras
retornar inver
Fin_función
Ejemplo 09
Pseudocódigo para hallar el mayor de tres números.
Inicio
// Definir e inicializar variables
entero: a, b, c, m1, m2
ingresar (a, b, c)
// Se halla el mayor de los dos primeros números
m1 mayor (a, b)
// Se halla el mayor entre el resultado de los dos primeros números y el
// tercer número
m2 mayor (m1, c)
imprimir (m2)
Fin
Ejemplo 10
Pseudocódigo para calcular la suma de los N términos de la serie:
Inicio
// Definir e inicializar variables
entero: n, i, r
real: s 0
ingresar (n)
Desde (i 1) hasta (i <= n) con incremento 1 Hacer
r potencia (2, i)
ss+i/r
Fin_desde
Imprimir (s)
Fin
Ejemplo 11
Pseudocódigo que calcula la cantidad de números múltiplos de N en un rango de 1 y
50.
Inicio
entero: n
ingresar (n)
múltiplo (n)
Fin
Ejemplo 12
Pseudocódigo para calcular la suma de los dígitos de un número.
Inicio
// Definir variables
entero: nro, r
ingresar (nro)
r sumaDigitos (nro)
imprimir (r)
Fin
Ejemplo 13
Pseudocódigo que realice la “prueba de la suma” que consiste en comprobar si una
suma esta correcta o no.
Por ejemplo:
Para probar la siguiente operación: 39 + 47 = 86
Sumamos los dígitos de cada uno de los sumandos por separado hasta que quede
una sola cifra, de esta forma:
3 + 9 = 12, 1 + 2 = 3
4 + 7 = 11, 1 + 1 = 2
Luego sumamos 3 + 2 = 5, si el resultado tiene dos cifras, se tendrá que volver a
sumar hasta obtener una sola cifra.
De la misma forma se suma las cifras del resultado de la suma: 8 + 6 = 14, 1 + 4
= 5.
Si la suma de las cifras de los sumandos y la suma de las cifras del resultado son
iguales, decimos que la suma es correcta. Así:
Operación 39 + 47 = 86
12 11 14
Suma de dígitos 3 2 5
5 = 5
Inicio
// Definir e inicializar variables
Ejemplo 14
Pseudocódigo que resuelva la fórmula del análisis combinatorio. Esta fórmula se
muestra a continuación, siendo los valores de m y n números enteros, donde m>n.
M M!
=
N N! (M - N)!
Ejemplo:
6 6! 720
= = = 20
3 3! (6 - 3)! 6 * 6
Inicio
// Definir variables
entero: a, b, x, y, z, c
ingresar (a, b)
x factorial (a)
y factorial (b)
z factorial (a - b)
c x / (y*z)
imprimir(c)
Fin
Ejemplo 15
Pseudocódigo para calcular los N términos de la serie
Inicio
// Definir variables
entero: n, i, r
real: s 1
ingresar (n)
Desde (i 0) hasta (i< n) con incremento 1 Hacer
r factorial (i)
ss+i/r
Fin_desde
imprimir (s)
Fin
Ejemplo 16
Pseudocódigo para calcular los N términos de la serie de Catalán. La serie es:
1, 2, 5, 14, 42, 132 ...
Cada término de la serie de catalán se obtiene con la formula:
2n!
cn =
(n + 1)! n!
Donde n >= 1
Ejemplo:
6! 6 * 5 * 4! 30
c3 = = = =5
(4)! 3! 4! * 3! 6
Inicio
// Definir variables
entero: n, i
real: r1, r2, r3, c
ingresar (n)
Desde (i 1) hasta (i <= n) con incremento 1 Hacer
r1 factorial (2 * i)
r2 factorial (i + 1)
r3 factorial (i)
c r1 / (r2 * r3)
Escribir (c)
Fin_desde
Fin
Fin_procedimiento
Ejemplo 17
Pseudocódigo para leer dos números y calcular si son parientes. Se dice a es
“pariente” de b si la suma de los dígitos de a2 es igual a b y recíprocamente la
suma de los dígitos de b2 es igual a a.
Por ejemplo: 13 y 16 son parientes:
132 = 169 1 + 6 + 9 = 16
162 = 256 2 + 5 + 6 = 13
Inicio
// Definir variables
entero: a, b, r, s
ingresar (a, b)
r parientes (a * a)
s parientes (b * b)
imprimir (a, b, r, s)
Fin
Leer (pb)
Fin_procedimiento
Ejemplo 18
Pseudocódigo para calcular la división y el resto de dos números enteros, mediante
el método de restas sucesivas. El método consiste en restar el dividendo con el
divisor hasta que el dividendo sea menor que el divisor, este número es el resto de
la división y la cantidad de restas realizadas es el cociente. Por ejemplo:
Cociente = 3
Residuo = 1
Inicio
// Definir e inicializar variables
entero: a, b, r 0, q 0
ingresar (a, b)
restoCociente (a, b, r, q)
imprimir (“El cociente es ”, q)
imprimir (“El residuo es ”, r)
Fin
Ejemplo 19
Pseudocódigo para calcular el máximo común divisor y el mínimo común múltiplo
de dos números
Inicio
// Definir variables
entero: a, b, r ,r1
ingresar (a, b)
r mcd (a, b)
r1 mcm (a, b)
imprimir (“MCD”, r)
imprimir (“MCM”, r1)
Fin
pa pa / i
Fin_si
Si (pb Mod i = 0) entonces
pb pb / i
Fin_si
Sino
ii+1
Fin_si
Fin_mientras
retornar x
Fin_funcion
Ejemplo 20
Pseudocódigo para calcular la suma de los N términos de la serie de leibnitz:
π/4 = 1/1 – 1/3 + 1/5 – 1/7 + …
Por ejemplo:
Si n = 3 la suma es igual a 0.8667
Si n = 5 la suma es igual a 0.8349
Inicio
// Definir variable
entero: n
real: r
ingresar (n)
r sumaFraccionAlterna (n)
imprimir (r)
Fin
s s + signo / d
d d+ 2
signo -signo
Fin_desde
retornar s
Fin_función
Ejemplo 21
Pseudocódigo para construir un nuevo número a partir de un número ingresado,
donde el último dígito del número será el primer dígito del nuevo número, el
penúltimo dígito del número será el segundo dígito del nuevo número, y así
sucesivamente. Al finalizar el pseudocódigo el número ingresado será cero.
Inicio
// Definir e inicializar variables
entero: a, b 0
ingresar (a)
invertir (a, b)
imprimir (b)
Fin
Ejemplo 22
Pseudocódigo para averiguar si una fecha ingresada es correcta y de ser así calcular
el día anterior.
Por ejemplo:
Si se ingresa 23/15/2007 se mostrará “La fecha no es correcta”
Si se ingresa 19/11/2007 se mostrará “El día anterior es 18/11/2007”
Inicio
// Definir e inicializar variables
entero: d, m, a, maxDia
//Lectura de datos
ingresar (d, m, a)
maxDia cantidadDias (m, a)
Si (d>0 and d<=maxDia and m>0 and m<13 and a>0) entonces
diaAnterior(d, m, a)
Sino
Escribir (“La fecha no es correcta”)
Fin_si
Fin
Ejemplo 23
Dada una fecha obtenga la cantidad de días transcurridos en el año
correspondiente. Por ejemplo si se ingresa 15/06/2007, se ha transcurrido 166 días
del año 2007.
Inicio
// Definir e inicializar variables
Ejemplo 24
Pseudocódigo que realiza la conversión de un número que esta en una base x a
base decimal. Por ejemplo el número 325(7 que esta en base 7 (x = 7) se convierte
en base decimal en 166.
Número a
Resultado
convertir y su Proceso de Conversión
de la
correspondiente (descomposición polinómica)
conversión
base
1304(5 1*53 + 3*52 + 0*51 + 4*50 = 125 + 75 + 0 204
+4
325(7 3*72 + 2*71 + 5*70 = 147 + 14 + 5 166
Inicio
// Definir variables
entero: nro, base, r
ingresar (nro , base)
r convertirBaseX_Base10 (nro, base)
imprimir (r)
Fin
Ejemplo 25
Realizar un pseudocódigo que convierta un número que esta en una base x a otra
base y.
m n
10
Descomposición Divisiones
polinómica sucesivas
Por ejemplo el número 465(9 que esta en base 9 (x = 9) se convertirá a base 6
(y = 6) en 1435(6 para lo cual se realiza los siguientes pasos:
383
6
63
5 6
10
3 6
1
4
Inicio
// Definir variables
entero: nro, base, base1, r, convdeci
ingresar (nro, base, base1)
convdeci convertirBaseX_Base10 (nro, base)
r convertirBase10_BaseY (convdeci, base1)
imprimir (r)
Fin
Ejemplo 26
Construir un pseudocódigo que actúe como un cajero, mediante el cual se puede
realizar sucesivos retiros de montos múltiplos de S/.20.00, luego muestre la
cantidad de billetes correspondientes al monto solicitado (billetes de 20, 100); si no
se ingresa el monto correcto ya sea un monto que no es múltiplo de 20 o un monto
mayor al que se dispone, que muestre un mensaje correspondiente y continúe
solicitando el monto a retirar, el pseudocódigo termina cuando el cliente ya no
desea realizar retiros o cuando se dispone de un saldo menor a S/.20.00.
Ejemplo 27
Los surtidores de una gasolinera registran las ventas por galones, pero el precio de
la gasolina está fijado en litros. El programa debe calcular lo que los clientes deben
pagar y el total recaudado por la gasolinera, tomando en cuenta lo siguiente:
• Cada galón tiene 3,785 litros
• El precio del litro es para el Tipo A S/.5.80, para el Tipo B S/.4.90 y para el Tipo
C S/.3.10
• El programa finaliza cuando se introduce un tipo distinto a los existentes.
Inicio
// Definir e inicializar variables
real: cantGal, cantLitros, pago, total 0
caracter: tipo
Repetir
Procedimiento calculos (caracter pt, entero cl, real &pg, real &tot)
En caso sea (pt) hacer
‘A’: pg cl * 5.80
‘B’: pg cl * 4.90
‘C’: pg cl * 3.10
Fin_caso
tot tot + pg
Fin_procedimiento
Ejemplo 28
Pseudocódigo para realizar las cuatro operaciones, haciendo uso de menús.
Inicio
// Definir e inicializar variables
entero: a, b, r, opcion
Hacer
menu ()
Escribir (“Ingrese opción”)
Escribir (opcion)
Procedimiento menu()
Escribir (“1 sumar”)
Escribir ("2 restar”)
Escribir (“3 multiplicar”)
Escribir (“4 dividir”)
Escribir (“5 salir”)
Fin_procedimiento
13.Ejercicios propuestos
14.Recursividad
14.1. Características
Las llamadas recursivas van quedando pendientes hasta llegar al caso base. Al
llegar a la condición de salida (el caso base) se desencadena el cálculo de los
resultados pendientes.
Ejemplo 01
Pseudocódigo para sumar dos números.
a Si, b = 0
suma (a, b) =
1 + suma (a, b - 1) Si, b > 0
2+3=2+1
+1 +
1 =5
3 " Unos"
suma(2, 3) ->
1+ suma(2, 2) ->
1+ 1+ suma(2, 1) ->
1+1 +1+suma(2, 0) ->
1+1+1+ 2 ->5
Inicio
// Definir variables
entero: x, a, b
ingresarDatos (a, b)
x suma (a, b)
imprimir (x)
Fin
Ejemplo 02
Pseudocódigo para calcular el factorial de un número. El factorial se simboliza
como n!, se lee como "n factorial", y la definición es:
1 si n = 0
factorial (n) =
n * factorial (n - 1) si n > 0
Por ejemplo 5:
5! = 5 * 4!
4! = 4 * 3!
3! = 3 * 2!
2! = 2 * 1!
1! = 1 * 0!
factorial(5) ->
(5) factorial(4) ->
(5) (4) factorial(3) ->
(5) (4) (3) factorial(2) ->
(5) (4) (3) (2) factorial(1) ->
(5) (4) (3) (2) (1) factorial(0) ->
(5) (4) (3) (2) (1) ->
120
Inicio
// Definir variables
entero: n, x
ingresarDatos (n)
x factorial (n)
imprimir (x)
Fin
Ejemplo 03
Pseudocódigo para calcular cualquier término de la serie de fibonacci:
1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144
1 Si, n = 1 ó n = 2
fibonacci(n) =
fibonacci(n - 1) + fobonacci(n - 2) Si, n > 0
Inicio
// Definir variables
entero: x, n
ingresarDatos (n)
x fibonacci (n)
imprimir (n, x)
Fin
Ejemplo 04
Pseudocódigo para calcular la potencia de un número.
2 3 = 2 * 2 2 = 2 * 2 * 21 = 2 * 2 * 2 * 2 0 = 2 * 2 * 2 * 1 = 8
1 Si, n = 0
potencia (x, n) =
x * x
n -1
Si, n > 0
Inicio
// Definir variables
entero: x, base, expo
ingresarDatos (base, expo)
x potencia (base, expo)
imprimir (x)
Fin
Ejemplo 05
Pseudocódigo para calcular la suma de los N primeros números naturales.
S=1+ 2+3+4+5+…+n
s = 1 + 2 + 3 + 4 + 5 + ... + (n - 1) + n
sumaNatura l (n - 1)
0 Si, n = 0
sumaNatural (a, b) =
sumaNatural (n - 1) + n Si, n > 0
Inicio
// Definir variables
entero: n, r
ingresarDatos (n)
r sumaNatural(n)
imprimir (r)
Fin
Ejemplo 06
Pseudocódigo para sumar la siguiente serie:
0 Si, n = 0
sumaSerie (n) =
sumaSerie (n - 1) + 1/n Si, n > 0
Inicio
// Definir variable
entero: n
real: s
ingresarDatos (n)
s sumaSerie (n)
imprimir (s)
Fin
entero: r, result
r pn Mod 2
Si (r = 0) entonces
result -1
Sino
result 1
Fin_si
retornar result
Fin_función
Ejemplo 07
Pseudocódigo para calcular la suma de los N términos de la serie:
0 Si, n = 0
sumaFraccion (n) =
sumaFraccion (n - 1) + 1/n Si, n > 0
Inicio
// Definir variable
entero: n
ingresarDatos (n)
s sumaFraccion (n)
imprimir (s)
Fin
Ejemplo 08
Pseudocódigo para calcular la suma de los cuadrados de los N primeros
números naturales:
S = 12 + 22 + 3 2 + 4 2 + 5 2 + … + n 2
S = 11 + 2 2 + 33 + ... + (n - 1)2 + n2
sumaCuadrado (n - 1)
0 Si, n = 0
sumaCuadrado (n) =
sumaCuadrado (n - 1) + n Si, n > 0
2
Inicio
// Definir variables
entero: r, n
ingresarDatos (n)
r sumaCuadrado (n)
imprimir (r)
Fin
Ejemplo 09
Pseudocódigo para calcular la suma de las cifras de un número.
0 Si, n = 0
sumaDigito (n) =
sumaDigito (n/10) + (n Mod 10) Si, n > 0
Inicio
// Definir variables
entero: r, n
ingresarDatos (n)
r sumaDigito (n)
imprimir (r)
Fin
Ejemplo 10
Pseudocódigo para calcular el residuo de dos números enteros mediante el
método de restas sucesivas. El método consiste en restar el dividendo del
divisor hasta que el dividendo sea menor que el divisor, en este caso el
resultado es el dividendo.
a Si, a < b
resto (a, b) =
resto (a - b, b) Si, a >= b
ingresarDatos (a, b)
s resto (a, b)
imprimir (s)
Fin
Ejemplo 11
Pseudocódigo para calcular el máximo común divisor de dos números:
n Si, m Mod n = 0
mcd (m, n) =
mcd (n, m Mod n) Si, m, n > 0
Inicio
// Definir variables
entero: m, n, s
ingresarDatos (m, n)
s mcd (m, n)
imprimir (s)
Fin
Ejemplo 12
Pseudocódigo para convertir un número decimal a binario.
Inicio
// Definir variables
entero: x, n
ingresarDatos (n)
x deci_Binario (n)
imprimir (n, x)
Fin
Ejemplo 13
Pseudocódigo para calcular la descomposición polinómica, utilizando
recursividad.
0 Si, n = 0
descomPoli (n, base) =
descomPoli (n/10, base) * base + (n Mod 10) Si, n > 0
Ejemplo 14
Pseudocódigo que cuente el número de apariciones de un digito en un número
positivo. Por ejemplo:
0 Si, n = 0
apariciones(d, nro) =
coincide (d, nro Mod 10) + apariciones(d, nro Div 10) Si, n > 0
Inicio
// Definir variables
entero: d, nro, r
ingresarDatos (d, nro)
r apariciones (d, nro)
imprimir (r)
Fin
Procedimiento ingresarDatos(entero &pd, entero &pnro)
Escribir (“Ingresar digito”)
Leer ( pd)
Escribir("Ingresar nro")
Leer (pnro)
Fin_procedimiento
a*b = a
+a+a +...
+a
" b" veces " a"
0 Si, b = 0
producto (a, b) =
a + producto (a, b - 1) Si, b > 0
2*3 = +2
2 +2 =6
"3" veces "2"
1 Si, n = 1
lucas(n) = 3 Si, n = 2
lucas(n) = lucas(n - 1) + lucas(n - 2) Si, n > 2
S = 13 + 23 + 33 + 43 + 53 +………+ n3
0 Si, n = 0
sumaCubo (n) =
sumaCubo (n - 1) + n3 Si, n > 0
n Si, n < b
deciBaseY(n, b) =
deciBaseY (n Mod base, b) + 10 * diciBaseY (n/b, b) Si, n >= b
5. Escriba una función recursiva para calcular el máximo común divisor de dos
números enteros dados mediante restas sucesivas.
a Si, a = b
mcd(a, b) = mcd(a - b, b) Si, a > b
mcd(b, a) Si, a < b
6. Escribir una función recursiva pascal (i, j) que calcule el elemento i, j del
triangulo de pascal, que sigue el siguiente patrón:
1
1 1
1 2 1
1 3 3 1
1 4 6 1 4
1 5 10 10 5 1
. . . . . . . . . . .
Como puede apreciarse, los elementos en el borde del triángulo son unos, y
el resto de los elementos son iguales a la suma de los dos elementos que
hay entre ellos.
Arreglos
1. Arreglos
Es un conjunto finito de elementos todos del mismo tipo, que son representados
mediante una variable común. Los elementos del arreglo tienen un índice que se
enumera consecutivamente 0, 1, 2, 3,…., n-1. Siendo n el numero de elementos del
arreglo. Un índice que no esta en el intervalo de 0 a n -1 esta fuera de los límites.
x[n]=
índice 0 1 2 3 4 5 6 7 … n-1
2. Tipos de Arreglos
Llamados también vectores, son aquellos que tienen un solo índice. Sus
elementos se diferencian entre si por el valor que toma el índice.
Igual que sucede con otras variables, es necesario declarar un vector antes
de utilizarlo, para lo cual se especifica el tipo base de sus elementos y se
añade corchetes ([]) al nombre del vector, para indicar que la variable
corresponde a un vector.
tipo nombre_del_vector[tamaño]
Donde:
tipo tipo de dato del vector que puede ser entero, real, etc.
nombre_del_vector nombre identificador de la variable
tamaño número entero que indica la cantidad de elementos del
vector.
Ejemplo:
entero a[5]
a[5] = 2 6 8 4 1
indice 0 1 2 3 4
x[10]= 4 8 7 5 6 10 12 3 1 18
Indice 0 1 2 3 4 5 6 7 8 9
i4
x[i + 4] 40 // asigna el valor de 40 a x[8]
i7
x[i] // nos da el valor (contenido) del elemento x[7]
tipo nombre_de_la_matriz[fila][columna]
Donde:
tipo tipo de dato del arreglo que puede ser entero,
real, etc.
nombre_de_la_matriz nombre identificador de la variable
fila número entero que indica número de filas de la
matriz
columna número entero que indica la número de
columnas de la matriz
Ejemplo:
entero x[4][5]
0 1 2 3 4
0 25 8 2 10 7
x[4][5]= 1 7 13 18 1 6
2 1 9 11 14 4
3 24 17 6 20 15
Para tener acceso a cada elemento individual de una matriz, se usan dos
índices: el primero indica la fila y el segundo la columna, es decir
nombre_de_ la_matriz[fila][columna]
0 1 2 3
0 5 8 12 7
X[3][4]= 1 2 3 18 6
2 1 9 11 4
Su sintaxis es:
tipo nombre_arreglo[fila][columna][profundidad]
Ejemplo:
entero A[5][4][2]
0 1 2 3
Indice2
0 1 0 1 0 1 0 1
Indice1 0
1
A[5][4][2] = 2 Indice3
3
4
Los arreglos como cualquier variable, se les puede dar valores iniciales, esto se
consigue especificando una lista de valores que tendrá el arreglo. Así tenemos:
3.1.En Vectores
Por ejemplo:
Esto significa que a[0] tiene el valor de 1, a[1] tiene el valor de 31 y que a[4]
tiene el valor de 8.
3.2.En Matrices
tipo nombre_de_la_matriz[fila][columna]={{valores_fila1},{valores_fila2},
…,{valores_filaN}}
Donde: Los valores_filaN es una lista de valores separados por comas que será
colocada en las columnas correspondientes de cada fila N. Ejemplo:
Donde:
La primera fila es el primer par de llaves internas:
10 2 50
x=
30 15 25
5.1.Lectura en vectores
5.2.Lectura en matrices
Al igual que en los vectores se debe leer elemento a elemento. Así tenemos:
5.3.Impresión en vectores
5.4.Impresión en matrices
Al igual que en los vectores se debe escribir elemento a elemento. Así tenemos:
6. Ejercicios resueltos
Ejemplo 01: Pseudocódigo para calcular la suma de los elementos del siguiente
vector de enteros:
Inicio
// Definir e inicializar variables y vectores
entero: a[] {1, 5, 10, 15, -30, 20, 25, 50, -100, 40}
entero: i, suma 0
// Proceso cálculo de la suma
Desde (i 0) hasta (i < 10) con incremento 1 hacer
suma suma + a[i]
Fin_desde
// Salida de resultados
Desde (i 0) hasta (i < 10) con incremento 1 hacer
Escribir (a[i])
Fin_desde
Escribir (“La suma del vector”, suma)
Fin
entero: a[] {1, 5, 10, 15, -30, 20, 25, 50, -100, 40}
entero: i, suma 0
Para sumar los elementos del vector, es necesario recorrer el vector desde su
primer elemento (a[0]) hasta su ultimo elemento (a[9]), para esto se puede
emplear alguna estructura repetitiva, en nuestro caso se utiliza la estructura Desde
– Fin_desde, de esta manera se irá acumulando la suma de cada elemento del
vector en la variable suma.
Finalmente, como salida se muestra todos los elementos del vector, para lo cual es
necesario también usar una estructura repetitiva; en nuestro caso se utiliza la
estructura Desde – Fin_desde, que permite mostrar cada elemento del vector,
luego de esto, se muestra el resultado de la suma calculada.
Ejemplo 02: Pseudocódigo para calcular el promedio de los valores del siguiente
vector:
numeros[] = 10 8 12 7 14 20 18
Inicio
// Definir e inicializar variables y vectores
entero: numeros[] {10, 8, 12, 7, 14, 20, 18}
entero: n 7, i
real: resultado 0, prom
// Proceso: calculo del promedio
Desde (i 0) hasta (i < n) con incremento 1 hacer
resultado resultado + numeros[i]
Fin_desde
prom resultado / n
Escribir (“El promedio es ”, prom)
Fin
Ejemplo 03: Pseudocódigo que halle el menor y el mayor valor del siguiente
vector:
a[] = 70 80 100 50 20 10 30 60 35 40
Inicio
// Definr e inicializar variables y vectores
entero: a[] {70, 80, 100, 50, 20, 10, 30, 60, 35, 40}
entero: i, mayor, menor, n 10
mayor a[0]
menor a[0]
// Proceso: calculo del mayor y menor elemento del vector
Desde (i 0) hasta (i < n) con incremento 1 hacer
Si (a[i] > mayor) entonces
mayor a[i]
Fin_si
Si (a[i] < menor) entonces
menor a[i]
Fin_si
Fin_desde
// Salida de resultados
Desde (i 0) hasta (i < n) con incremento 1 hacer
Escribir(a[i])
Fin_desde
Escribir (“El mayor elemento es ”, mayor)
Escribir (“El menor elemento es ”, menor)
Fin
Por ejemplo:
n = 10
a[] = 15 30 12 50 70 30 25 35 33 13
Inicio
// Definir e inicializar variables y vectores
entero: n, i, mayorIgual20 0, menor20 0, a[80]
// Lectura de datos
Escribir (“Ingresar cantidad de elementos”)
Leer (n)
Desde (i 0) hasta (i < n) con incremento 1 hacer
Escribir (“Ingresar número”)
Leer(a[i])
Fin_desde
// Proceso calculo de >=20 y <20
Desde (i 0) hasta (i < n) con incremento 1 hacer
Si (a[i] >= 20) entonces
mayorIgual20 mayorIgual20 + 1
Sino
menor20 menor20 + 1
Fin_si
Fin_desde
// Salida de resultados
Desde (i 0) hasta (i < n) con incremento 1 hacer
Escribir (a[i])
Fin_desde
Escribir (“La cantidad de números mayores e iguales a 20 es ”, mayorIgual20)
Escribir (“La cantidad de números menores a 20 es ”, menor20)
Fin
htrab[] = 40 45 37 39 50 35 42
Inicio
// Definir e inicializar variables y vectores
entero: n, i, totalEmpl 0, he 0, she 0, codEmpl[30], htrab[30]
caracter: asterisco[30]
// Lectura de datos
Escribir (“Ingresar cantidad de empleados:”)
Leer (n)
Desde (i 0) hasta (i < n) con incremento de 1 Hacer
Escribir (“Ingresar código del empleado”)
Leer (codEmpl [i])
Escribir (“Ingresar horas trabajadas”)
Leer (htrab [i])
Fin_desde
// Proceso
Desde (i 0) hasta (i < n) con incremento 1 Hacer
Si (htrab[i] > 40 ) entonces
asterisco[i] '*'
totalEmp totalEmp + 1
he htrab[i] - 40
she she + he
Fin_si
Fin_desde
// Salida de resultados
Escribir (“Codigo Horas extras Observación")
Desde (i 0) hasta (i < n) con incremento 1 hacer
Escribir (codEmpl[i], htrab[i], asterisco[i])
Fin_desde
Escribir (“Total de empleados con mas de 40 horas = ”, totalEmp)
Escribir (“Total de horas extras = ”, she)
Fin
Ejemplo 06: Pseudocódigo que sume dos números enteros. Ambos números tienen
la misma cantidad de dígitos. Los dígitos de estos números deberán guardarse en
los vectores correspondientes, asimismo, el resultado de la suma también se
deberá guardar en otro vector.
Por ejemplo:
a[] = 3 7 5 9
b[] = 8 7 3 6
suma[] = 1 2 4 9 5
Inicio
// Definir e inicializar variables y vectores
entero: n, i, r 0, s 0, a[30], b[30]
// Lectura de datos
Escribir (“Ingresar cantidad de dígitos de los números:”)
Leer (n)
Desde (i 0) hasta (i < n) con incremento de 1 Hacer
Escribir (“Ingresar dígito”)
Leer (a[i])
Fin_desde
Desde (i 0) hasta (i < n) con incremento de 1 Hacer
Escribir (“Ingresar dígito”)
Leer (b[i])
Fin_desde
i (n - 1)
Mientras (i >= 0) Hacer
s a[i] + b[i] + r
Si (s >9 ) entonces
s s - 10
r1
Sino
r0
Fin_si
suma[i] s
ii-1
Fin_mientras
// Salida de resultados
Si (r > 0) entonces
Escribir (r)
Fin_si
Desde (i 0) hasta (i < n) con incremento 1 hacer
Escribir (suma[i])
Fin_desde
Fin
Inicio
// Definir e inicializar variables y vectores
entero: nro, i 0, k, digito 0, nDigito[10]
cadena: b[4] = { “Unidades”, “Decenas”, “Centenas”, “Millares”}
// Lectura de datos
Escribir (“Ingrese numero:”)
Leer (nro)
Mientras (nro >0) Hacer
digito nro Mod 10 // se obtiene cada digito
nDigito[i] digito // se asigna cada digito en el vector nDigito
i i +1 // incrementa índice
nro nro Div 10 // reduce nro
Fin_mientras
//Salida de resultados
Desde (k 0) hasta (k < i) con incremento 1 Hacer
Escribir (nDigito[k], b[k])
Fin_desde
Fin
Por ejemplo:
1 moneda 1
Desea seguir s/n:
Inicio
// Definir e inicializar variables y vectores
entero: n 8, i, sueldo, b[40]
boolean: seguir verdadero
entero: a[8] {200, 100, 50, 20, 10, 5, 2, 1}
cadena: m[8]={“billete”, “billete”, “billete”, “billete”, “billete”, “moneda”,
“moneda”, “moneda”}
caracter: resp
Mientras (seguir) Hacer
Escribir (“Ingrese sueldo”)
Leer (sueldo)
// Proceso
Desde (i 0) hasta (i < n) con incremento 1 Hacer
b[i] sueldo Div a[i]
sueldo sueldo Mod a[i]
Fin_desde
// Salida de resultados
Desde (i 0) hasta (i < n) con incremento 1 Hacer
Si (b[i] > 0) entonces
Escribir (b[i], m[i], a[i])
Fin_si
Fin_desde
Escribir (“Desea seguir s/n:”)
Leer (resp)
Si (resp = 's') entonces
seguir verdadero
Sino
seguir falso
Fin_si
Fin_mientras
Fin
a[]= 70 80 100 50 20 10 30 60 35 40
Posición a eliminar: 2
a[]= 70 80 50 20 10 30 60 35 40
Inicio
// Definir e inicializar variables y vectores
entero: n, i, k 0, a[50]
// Lectura de datos
Escribir (“Ingresar cantidad de elementos del vector:”)
Leer (n)
Desde (i 0) hasta (i < n) con incremento de 1 Hacer
Escribir (“Ingresar elemento”)
Leer (a[i])
Fin_desde
Escribir (“Ingresar indice del elemento a eliminar”)
Leer (posi)
k posi
Mientras (k < (n – 1)) Hacer
a[k] a[k+1]
k k +1
Fin_mientras
// Salida de resultados
Escribir (“Eliminando el indice: ”, posi, “se tiene ”)
Desde (i 0) hasta (i < n-1) con incremento 1 Hacer
Escribir(a[i])
Fin_desde
Fin
a[]= 12 18 20 12 20 23 20 25
La salida será:
12 se repite 2 veces
18 se repite 1 vez
20 se repite 3 veces
23 se repite 1 vez
25 se repite 1 vez
Inicio
// Definir e inicializar variables y vectores
entero: n, i, j, n10, cuenta1, b[50], repite[50], a[50]
caracter: marca[50]
// Lectura de datos
Escribir (“Ingresar cantidad de elementos del vector:”)
Leer (n)
Desde (i 0) hasta (i < n) con incremento de 1 Hacer
Escribir (“Ingresar elemento”)
Leer (a[i])
Fin_desde
// Proceso calculo de repeticiones
Desde (i 0) hasta (i < n-1) con incremento 1 hacer
Si (marca[i] = ' ') entonces
Desde (j i+1) hasta (i < n) con incremento 1 hacer
Si (a[i] = a[j]) entonces
cuenta cuenta + 1
marca[j] '*'
Fin_si
b[n1] a[i]
repite[n1] cuenta
cuenta 1
n1 n1+1
Fin_desde
Fin_si
Fin-desde
// Ultimo valor no estamos considerando
Si (marca[n-1] = ' ') entonces
b[n1] a[n-1]
repite[n1] 1
Fin_si
// Salida de resultados
Desde (i 0) hasta (i < n1) con incremento 1 hacer
Escribir (b[i], “se repite ”, repite[i], “veces”)
Fin_desde
Fin
Ejemplo 11: Pseudocódigo para hallar el mayor y menor elemento de una matriz
de N filas y M columnas.
Por ejemplo:
N=5
M=4
35 40 22 70
10 27 42 31
a[][]= 15 18 25 17
90 5 175 85
37 35 45 105
Inicio
// Definir variables y matrices
Explicación:
Para desarrollar el ejemplo planteado se definen las variables i, j, fila, columna,
mayor, menor y la matriz a[][], con un tamaño de 50 filas y 50 columnas, es decir
se esta reservando 250 espacios de memoria.
Leer (a[i][j])
Fin_desde
Fin_desde
mayor a[0][0]
menor a[0][0]
Ejemplo 12: Pseudocódigo que halle el mayor de cada fila de una matriz de N filas
y M columnas, y los almacene en un vector.
Por ejemplo:
N=5
M=4
80 40 50 70
10 27 42 31
a[][]= 15 30 25 10
90 5 175 85
55 35 45 105
Inicio
// Definir variables y matrices
entero: i, j, fila, columna, mayor, a[50][50]
// Lectura de datos
Escribir (“Ingresar cantidad de filas de la matriz:”)
Leer (fila)
Escribir (“Ingresar cantidad de columnas de la matriz:”)
Leer (columna)
Desde (i 0) hasta (i < fila) con incremento 1 Hacer
Desde (j 0) hasta (j < columna) con incremento 1 Hacer
Escribir (“Ingresar elemento”)
Leer (a[i][j])
Fin_desde
Fin_desde
// Se asigna a la variable mayor el primer elemento
mayor a[0][0]
// Proceso mayor de cada fila
Desde (i 0) hasta (i < fila) con incremento 1 Hacer
Desde (j 0) hasta (j < columna) con incremento 1 Hacer
Si (a[i][j] > mayor) entonces
mayor a[i][j]
Fin_si
Fin_desde
b[i] mayor
mayor 0
Fin_desde
// Salida de resultados
Desde (i 0) hasta (i < fila) con incremento 1 Hacer
Desde (j 0) hasta (j < columna) con incremento 1 Hacer
Escribir (a[i][j])
Fin_desde
Fin_desde
Escribir (“Mayor de cada fila”)
Desde (i 0) hasta (i < fila) con incremento 1 Hacer
Escribir (b[i])
Fin_desde
Fin
1 0 0 0
a[][]= 0 1 0 0
0 0 1 0
0 0 0 1
Inicio
// Definir variables y matrices
entero: n, i, j, a[40][40]
// Lectura de datos
Escribir (“Ingresar tamaño de la matriz:”)
Leer (n)
// Proceso
Desde (i 0) hasta (i < n) con incremento 1 Hacer
Desde (j 0) hasta (j < n) con incremento 1 Hacer
Si (i = j) entonces
a[i][j] 1
Sino
a[i][j] 0
Fin_si
Fin_desde
Fin_desde
// Salida de resultados
Desde (i 0) hasta (i < n) con incremento 1 Hacer
Desde (j 0) hasta (j < n) con incremento 1 Hacer
Escribir (a[i][j])
Fin_desde
Fin_desde
Fin
Ejemplo 14: Pseudocódigo que sume los elementos de cada fila de una matriz y
almacene el resultado en un vector.
80 40 50 70
10 27 42 31
a[][]= 15 30 25 10
90 5 175 85
55 35 45 105
Inicio
// Definir variables y matrices
entero: i, j, fila, columna, a[80][80], suma[80]
// Lectura de datos
Escribir (“Ingresar cantidad de filas de la matriz:”)
Leer (fila)
Escribir (“Ingresar cantidad de columnas de la matriz:”)
Leer (columna)
Desde (i 0) hasta (i < fila) con incremento 1 Hacer
7. Ejercicios propuestos
a[]= 1 2 2 3 3 4 5 5 6
a[]= 1 2 3 4 5 6
4. Pseudocódigo que elimina una fila y una fila y una columna de una matriz.
El algoritmo preguntara que fila y que columna desea eliminar
El usuario deberá introducir estos datos
Se mostrará las dos matrices, la original y el resultado luego de eliminar la
fila y la columna especificadas.
80 40 50 40
15 30 25 10
90 5 175 85
35 55 45 105
1 2 8 1 2 8 x
3 4 3 4
5 9 2 5 9 2
3 8 4 3 8 4
4 4 3 2 4 4 3 2
8.1.Parámetro Actual
variable NombreDelModulo(nombreDelVector, …)
NombreDelModulo(nombreDelVector, …)
8.2.Parámetro formal
Cuando se pasa una matriz a un módulo al igual que en los vectores, los
parámetros son pasados por referencia.
De acuerdo al tipo de parámetro para pasar una matriz a un módulo se debe de
tener en cuenta lo siguiente:
9.1.Parámetro actual
El nombre de la matriz debe de aparecer solo es, decir sin corchetes o índices
como un argumento actual dentro de la llamada al módulo.
variable NombreDelModulo(nombreDeLaMatriz, …)
NombreDelModulo(nombreDeLaMatriz, …)
9.2.Parámetro formal
10.Ejercicios resueltos
Solución a:
Inicio
// Definir e inicializar variables y vectores
entero: n, max 0 , a[80]
// Lectura de datos
ingresarVector(a, n)
// Proceso
maximo(a, n, max)
// Salida de resultados
imprimirVector(a, n)
Escribir (“Mayor numero”, max)
Fin
Fin_desde
Fin_procedimiento
Solución b:
Inicio
// Definir e inicializar variables y vectores
entero: n, max, a[80]
// Lectura de datos
ingresarVector(a, n)
// Proceso
max maximo(a, n)
// Salida de resultados
imprimirVector(a, n)
Escribir (“El mayor elemento del vector ”, max)
Fin
a[]= 4 5 7 4 3 4 8 4 9 4
Elemento a contar: 4
Nro ocurrencias: 5
Inicio
// Definir e inicializar variables y vectores
entero: a[10]{4,5,7,4,3,4,8,4,9,4}
entero: n 10, ele, x
// Lectura de datos
Escribir (“Ingrese elemento”)
Leer (ele)
// Proceso
x ocurrencia(a, n, ele)
// Salida de resultados
imprimirVector(a, n)
Escribir (“El número de ocurrencias es ”, x)
Fin
r (pvalor1 = pvalor2)
retornar r
Fin_procedimiento
Inicio
// Definir e inicializar variables y vectores
entero: n1, n20, n30, a[50] , b[50], c[50]
//Lectura de datos
ingresarVector(a, n1)
//Proceso
separarpi(a, n1, b, n2, c, n3)
// Salida de resultados
Escribir (“El vector A es”)
imprimirVector(a, n1)
Escribir (“El vector de pares es”)
imprimirVector(b, n2)
Escribir (“El vector de impares es”)
imprimirVector(c, n3)
Fin
Inicio
// Definir e inicializar variables y vectores
a[] = 3 7 11 15 19
b[] = 4 7 13 15 18 19 20
Inicio
// Definir variables y vectores
entero: n1, n2, n3 0, a[80], a[80], c[80]
// Lectura de datos
ingresarVector(a, n1)
ingresarVector(b, n2)
// Proceso
interseccion(a, n1, b, n2, c, n3)
// Salida de resultados
imprimirVector(a, n1)
imprimirVector(b, n2)
imprimirVector(c, n3)
Fin
Procedimiento interseccion (entero a[80], entero n1, entero b[80], entero n2,
entero c[80], entero &n3)
// Definir variables
entero: i, j
boolean: r
n3 0
Desde (i 0) hasta (i < n1) con incremento 1 Hacer
Desde (j 0) hasta (j < n2) con incremento 1 Hacer
r igual (a[i],b[j] )
Si (r) entonces
c[n3] a[i]
n3 n3+1
j n2
Fin_si
Fin_desde
Fin_desde
Fin_procedimiento
retornar r
Fin_función
a[] = 3 7 11 15 19
b[] = 4 7 13 15 18 19 20
Inicio
// Definir variables y vectores
entero: n1, n2, n3 0, a[100], b[100], c[100]
// Lectura de datos
ingresarVector(a, n1)
ingresarVector(b, n2)
// Proceso
diferencia(a, n1, b, n2, c, n3)
// Salida de resultados
imprimirVector(a,n1)
imprimirVector(b,n2)
imprimirVector(c,n3)
Fin
Inicio
// Definir e inicializar variables y vectores
entero: n1, n2 0, a[50]
caracter: b[50]
ingresarVector(a, n1)
sustituyepi (a, n1, b, n2)
// Salida de resultados
imprimirVectorA(a, n1)
imprimirVectorB(b, n2)
Fin
entero: i
Escribir ("Ingresar cantidad de elementos del vector:")
Leer (n)
Desde (i 0) hasta (i < n) con incremento 1 Hacer
Escribir ("Ingresar elemento")
Leer (a[i])
Fin_desde
Fin_procedimiento
Procedimiento sustituyepi( entero a[50], entero n1, carácter b[50], entero &n2)
// Definir variables
entero: i
boolean: r
i0
Mientras (i < n1) hacer
Si (a[i] > 0) entonces
r par(a[i])
Si (r) entonces
b[n2] 'p'
Sino
b[n2] 'i'
Fin_si
n2 n2 +1
Fin_si
ii+1
Fin_mientras
Fin_procedimiento
Función par(entero valor): booleano
// Definir variable
boolean: r
r (valor Mod 2 = 0)
retornar r
Fin_función
Ejemplo:
Inicio
// Definir variables y vectores
entero: n, t[100], tf[100]
caracter: proceso[100]
// Lectura de datos
ingresarVector(proceso, t, n)
// Proceso
fcfs(proceso, n, t, tf)
imprimirVector(proceso, tf, n)
Fin
Escribir(proceso[i], “ = ”, tf[i])
Fin_desde
Fin_procedimiento
a[] = 1 2 5 7 9 11 14
b[] = 2 4 6 8 9 11 14 25 26
c[] = 1 2 4 5 6 7 9 11 14 25 26
Inicio
// Definir variables y vectores
entero: n1, n2, n3 0, a[50], b[50], c[50]
// Lectura de datos
ingresarVector (a, n1)
ingresarVector (b, n2)
// Proceso
merge (a, n1, b, n2, c, n3)
// impresiones
Escribir (“El vector A es”)
imprimirvector(a, n1)
Escribir(“El vector B es”)
imprimirVector(b, n2)
Escribir(“El vector C es”)
imprimirVector(c, n3)
Fin
Procedimiento merge(entero a[50], entero n1, entero b[50], entero n2, entero
c[50], entero &n3)
// Definir variables
entero: i, j
boolean: r
n3 0
i 0
j 0
Mientras (i < n1 and j < n2) Hacer
r igual (a[i], b[j])
Si (r) entonces
c[n3] a[i]
n3 n3 + 1
ii+1
jj+1
Sino
r infer (a[i], b[j])
Si (r) entonces
c[n3] a[i]
n3 n3 + 1
ii+1
Sino
c[n3] b[j]
n3 n3 + 1
jj+1
Fin_si
Fin_si
Fin_mientras
// acaba a
acaba(a, n1, c, i, n3)
// acaba b
acaba(b, n2, c, j, n3)
Fin_procedimiento
Procedimiento acaba(entero a[50], entero n1, entero c[50], entero i, entero &n3)
// Definir variables
entero: x
xi
Mientras (x<n1) hacer
c[n3] a[x]
n3 n3 + 1
xx+1
Fin_mientras
Fin_procedimiento
Por ejemplo:
n=7
a[]= 7 3 14 26 4 18 9
a[]= 7 19 14 26 4 18 9
Inicio
// Definir e inicializar variables y vectores
entero: n1, suma 0, posi 0, a[50]
// Lectura de datos
ingresarVector (a, n1)
// Proceso
sumaPosi(a, n1, suma, posi)
a[posi] suma
imprimirVector(a, n1)
Fin
Leer (n)
Desde (i 0) hasta (i < n) con incremento de 1 Hacer
Escribir (“Ingresar elemento”)
Leer (a[i])
Fin_desde
Fin_procedimiento
Por ejemplo:
a[]= 7 3 14 26 9
b[]= 11 18 17 8 5 20 21
El vector C es:
c[]= 7 3 9 11 17 5 21
Inicio
// Definir e inicializar variables
entero: n1, n2, k 0, a[50], b[50], c[50]
// Lectura de datos
ingresarVector (a, n1)
ingresarVector (b, n2)
// proceso
intercala(a, n1, c, k)
intercala(b, n2, c, k)
imprimirVector(a, n1)
imprimirVector(b, n2)
imprimirVector(c, k)
Fin
Por ejemplo:
a[]= 11 3 14 26 5 40 18 9
a[]= 11 18 14 26 5 40 3 9
Inicio
// Definir e inicializar variables y vector
entero: n1, r1, r2, k 0, a[50]
// Lectura de datos
ingresarVector(a, n1)
r1 multiplo(a, n1, 3)
Si (r1 >= 0) entonces
r2 multiplo(a, n1, 2)
intercambio(a, r1, r2)
imprimirVector(a, n1)
Sino
Escribir (“No tiene múltiplo de tres”)
Fin_si
Fin
entero: i
Desde (i 0) hasta (i < num) con incremento 1 Hacer
Escribir (vector[i])
Fin_desde
Fin_procedimiento
Ejemplo 13: Pesudocódigo que calcula el promedio entero del mayor y el menor
número de un vector y reemplazar este resultado a todos los números pares del
vector.
a[]= 7 3 14 31 4 18 9
Menor elemento = 3
Mayor elemento = 31
Promedio del mayor y el menor elemento del vector: (31 + 3) Div 2 = 17
a[]= 7 3 17 31 17 17 9
Inicio
// Definir e inicializar variables y vectores
entero: n1, p, mayor 0, menor 0, a[50]
// Lectura de datos
ingresarVector(a, n1)
mayorMenor(a, n1, mayor, menor)
p (mayor+menor) Div 2
reemplazaVector(a, n1, p)
imprimirVector(a, n1)
Fin
i0
Mientras (i < n1) Hacer
Si (a[i] > mayor) entonces
mayor a[i]
Fin_si
Si (a[i] < menor) entonces
menor a[i]
Fin_si
ii+1
Fin_mientras
Fin_procedimiento
Por ejemplo:
a[]= 7 3 14 26 9 20 21
b[]= 11 18 17 13
El vector C es:
b[]= 11 18 17 13 7 3 14
Inicio
// Definir e inicializar variables
entero: n1, n2, d, a[50], b[50]
// Lectura de datos
ingresarVector(a, n1)
// Lectura de datos
ingresarVector(b, n2)
// proceso
Si (n1 = n2) entonces
Escribir (“Vectores con los mismos elementos”)
Sino
Si (n1>n2) entonces
d n1-n2
empareja(a, n1, b, n2, d)
Sino
d n2-n1
empareja(b, n2, a, n1, d)
Fin_si
imprimirVector(a,n1)
imprimirVector(b,n2)
Fin_si
Fin
• Se continúa grabando los elementos restantes del vector original sobre el nuevo
vector.
• Finalmente se obtiene el nuevo vector con todos los elementos del vector original
más el valor insertado.
Por ejemplo:
Sea el vector a:
a[]= 1 2 13 24 26
Insertar el valor: 20
En la posición: 2
Se obtine:
b[]= 1 2 20 13 24 26
Inicio
// Definir e inicializar variables y vectores
entero: n1, valInsertar, posi, a[50], b[50]
ingresarVector (a, n1)
ingresarDatos(valInsertar, posi)
insertarPosi(a, n1, posi, valInsertar, b)
// impresiones
Escribir(“Vector A”)
imprimirVector(a, n1)
Escribir (“Insertar posición”, posi )
Escribir (“Valor a insertar”,valInsertar)
Escribir (“Vector B”)
imprimirVector (b, n1+1)
Fin
Por ejemplo:
Sea el vector a:
a[]= 1 2 13 24 26
Valor a eliminar: 24
Se obtiene:
a[]= 1 2 13 26
Inicio
// Definir variables y vectores
entero: n1, valor, sw 0, a[50], b[50]
ingresarVector(a, n1)
ingresarDatos(valor)
suprimirValor(a, n1, valor , b, sw)
// impresiones
Escribir (“Vector A”)
imprimirVector(a, n1)
Escribir (“Valor a eliminar ”, valor)
Si (sw = 1)
Escribir (“Nuevo vector A”)
imprimirVector(b, n1)
Sino
Escribir (“El valor no existe dentro del vector”)
Fin_si
Fin
// Definir variable
entero: i
Desde (i 0) hasta (i < num) con incremento 1 Hacer
Escribir (vector[i])
Fin_desde
Fin_procedimiento
a b c d e f g h i j k l m n o p q r s t u v w x y z
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
Notas:
• Una cadena de caracteres se guarda como un vector almacenándose cada
carácter en una posición diferente. Asi tenemos:
letras[] “abcdefghijklmnopqrstuvwxyz”
• Cada carácter del alfabeto tiene un correspondiente valor en código ASCCII, las
letras minúsculas varian de 97 a 122, de esta manera el carácter ‘a’ = 97, ‘b’ =
98, etc. De esta manera se puede efectuar cualquier operación entre caracteres,
como por ejemplo:
car ‘d’ - 2
Inicio
// Inicializar cadenas
caracter: letras[] “abcdefghijklmnopqrstuvwxyz”
caracter: cadena[80]
Escribir (“Ingrese cadena”)
Leer (cadena)
cesar(letras, cadena)
Escribir (“La cadena encriptada ”, cadena)
Fin
Ejemplo 18: Pseudocódigo para sumar los números positivos y negativos de una
matriz de N filas y M columnas.
Por ejemplo:
-1 2 3
a[][]= 4 -5 6
7 -8 9
Suma de positivos = 31
Suma de negativos = -14
Inicio
// Definir e inicializar variables y matriz
entero: fila, columna, a[50][50], positivo 0, negativo 0
ingresarMatriz(a, fila, columna)
sumaMatriz(a, fila, columna, positivo, negativo)
imprimeMatriz(a, fila, columna)
Escribir (“Suma positiva ", positivo)
Escribir(“Suma negativa", negativo)
Fin
Por ejemplo:
1 2 3
a[][]= 4 5 6
7 8 9
1 4 7
a[][]= 2 5 8
3 6 9
Inicio
// Definir variables
entero: fila, columna, a[50][50]
ingresarMatriz(a, fila, columna)
transpuesta(a, fila, columna)
imprimirMatriz(a, fila, columna)
Fin
modo que la suma de cada una de sus filas, de cada una de sus columnas y de
cada una de sus diagonales dé el mismo resultado.
Los números almacenados están comprendidos entre 1 y n2 . Para situar estos
números se sigue el siguiente algoritmo.
Colocar el número 2, encima y a la derecha, como nos salimos del límite del
cuadrado, colocamos el número 2 en la posición correspondiente dentro de la
última fila. (paso 3)
El siguiente número (el numero 3), encima y a la derecha, pero como nos salimos
del limite del cuadrado, la ultima columna a la derecha es la primera columna.
(paso 3)
1
3
2
El siguiente número (el numero 4), encima y a la derecha, pero como esta
ocupada, se coloca el número 4 debajo del numero 3. (paso 4)
1
3
4 2
8 1 6
3 5 7
4 9 2
Inicio
// Definir e inicializar variables y matrices
entero: n, cuadrado[15][15]
boolean: r verdadero
Repetir
// Leer variable
Escribir (“Ingresar tamaño del cuadrado mágico”)
Leer (n)
r impar(n)
hasta_que (r)
magico (cuadrado, n)
imprimirCuadrado (cuadrado, n)
Fin
i n-1
Sino
i i-1
Fin_si
// Ir a la dercha
Si ( j = n-1 ) entonces
j0
Sino
jj+1
Fin_si
// verificar si esta ocupado
Si (cuadrado[i][j]>=1) entonces
// Poner abajo del numero
Si ( a = n-1 ) entonces
a0
Sino
a a + 1
Fin_si
// Coloca la nueva posicion debajo del número que se ha puesto antes
ia
jb
Fin_si
Fin_desde
Fin_procedimeinto
a) Suma de matrices
Para sumar dos matrices A y B, estas deben de tener el mismo número de filas
y columnas, el resultado de la suma es una matriz C, que tendrá el mismo
número de filas y columnas de A y B. Ejemplo:
Proceso de la suma
La primera fila, se obtiene con las siguientes operaciones
• c[0][0] a[0][0] + b[0][0] 11 = 3 + 8
• c[0][1] a[0][1] + b[0][1] 10 = 6 + 4
• c[0][2] a[0][2] + b[0][2] 13 = 8 + 5
// Variables globales
entero: i, j
Inicio
// Definir e inicializar variables y matrices
entero: fila, columna, a[50][50], b[50][50], c[50][50]
// Lectura de datos
ingresarMatriz (a, fila, columna)
ingresarMatriz (b, fila, columna)
// Proceso
sumaMatriz (a, b ,c , fila , columna)
// Salida de resultados
Escribir (“ Suma de Matrices ”)
Escribir (“Matriz A Matriz B Matriz C”)
imprimirMatriz(a, b, c , fila, columna)
Fin
3 6 8 8 4 5 11 10 13
7 5 1 1 2 7 8 7 8
2 4 9 6 9 3 8 13 12
3 1 2 10 2 4 13 3 6
b) Multiplicación de matrices
Para multiplicar dos matrices A y B, el número de filas de A debe de ser igual al
número de columnas de B
La matriz resultante C, tendrá tanto filas como A y tantas columnas como B.
Ejemplo:
Proceso de la multiplicación
La primera fila de C
• La primera celda de C, se obtiene multiplicando la primera fila de A por la
primera columna de B uno a uno con las siguientes operaciones
c[0][0] = a[0][0] * b[0][0] + a[0][1] * b[1][0] + a[0][2] * b[2][0] =
3*1+2*4+1*3 = 14
• La segunda celda de C, se obtiene multiplicando la primera fila de A por la
segunda columna de B uno a uno con las siguientes operaciones
c[0][1] = a[0][0] * b[0][1] + a[0][1] * b[1][1] + a[0][2] * b[2][1] =
3*3+2*2+1*3 = 16
• La tercera celda de C, se obtiene multiplicando la primera fila de A por la
tercera columna de B uno a uno con las siguientes operaciones
c[0][2] = a[0][0] * b[0][2] + a[0][1] * b[1][2] + a[0][2] * b[2][2] =
3*2+2*5+1*1 = 17
La Segunda fila de C
• La primera celda de la segunda fila de C, se obtiene multiplicando la
segunda fila de A por la primera columna de B uno a uno con las siguientes
operaciones
c[1][0] = a[1][0] * b[0][0] + a[1][1] * b[1][0] + a[1][2] * b[2][0] =
5*1+6*4+7*3 = 50
• La segunda celda de la segunda fila de C, se obtiene multiplicando la
segunda fila de A por la segunda columna de B uno a uno con las siguientes
operaciones
c[1][1] = a[1][0] * b[0][1] + a[1][1] * b[1][1] + a[1][2] * b[2][1] =
5*3+6*2+7*3 = 48
• La tercera celda de la tercera fila de C, se obtiene multiplicando la segunda
fila de A por la tercera columna de B uno a uno con las siguientes
operaciones
c[1][2] = a[1][0] * b[0][2] + a[1][1] * b[1][2] + a[1][2] * b[2][2] =
5*2+6*5+7*1 = 47
y así sucesivamente, se multiplica fila por columna hasta obtener la matriz c
// Variables globales
entero: i, j
Inicio
// Definir e inicializar variables y matrices
entero: fila, columna, a[50][50], b[50][50], c[50][50]
// Lectura de datos
ingresarMatriz (a, fila, columna)
ingresarMatriz (b, fila, columna)
// Proceso
Multiplicacion de Matrices
Si se tiene: Se obtiene:
1 7 9 8 10 17 17 10 8 9 7 1
a[][]= 13 2 4 25 6 22 a[][]= 22 6 25 4 2 13
4 0 5 12 15 20 20 15 12 5 0 4
// Variables globales
entero: i, j
Inicio
// Definir variables y matrices
entero: fila, columna, a[50][50]
// Lectura de datos
ingresarMatriz (a, fila, columna)
imprimeMatriz (a, fila, columna)
// Salida de resultados
interCambio (a, fila, columna)
imprimeMatriz (a, fila, columna)
Fin
7 10 5 12
15 3 13 4
a[] = 10 2 18 7 b[][] = 6 22 4 16
9 14 23 9
17 21 8 11
c[] = 25 5 31 11
// Variables globales
entero: i, j
Inicio
// definir e inicializar variables y matrices
entero: n1, posi, fila, columna, a[50], b[50][50]
ingresarVector (a, n1)
ingresarMatriz (b, fila, columna)
imprimirVector (a, n1)
imprimeMatriz (b, fila, columna)
posi buscaPosi (b, f ila, columna)
sumar (a, b, posi, columna, c)
imprimirVector (c, n1)
Fin
Ejemplo 25: Pseudocódigo que permita intercambiar los elementos de una fila y
una columna determinada, de una matriz cuadrada.
Por ejemplo:
N=5
Fila = 2, columna = 2
6 12 18 4 21 6 10 18 4 21
10 7 9 14 2 12 7 16 11 3
a[][]= 13 16 20 3 17 a[][]= 13 9 20 3 17
5 11 22 1 15 5 14 22 1 15
23 3 19 8 12 23 2 19 8 12
// Variables globales
entero: i, j
Inicio
// Definir variables
entero: posiFila, posiColumna, fila, columna, a[50][50]
ingresarMatriz(a, fila, columna)
imprimeMatriz(a, fila, columna)
Escribir ("Ingrese fila a cambiar")
Leer (posiFila)
Escribir ("Ingrese columna cambiar")
Leer (posiColumna)
interFilaColumna(a, posiFila, posiColumna, columna)
imprimeMatriz(a, fila, columna)
Fin
Ejemplo 26. Pseudocódigo que pasar a un vector todos los elementos de una
matriz de tamaño N * M que forman la letra O.
9 4 11 15 6
a[][]= 2 16 19 1 17
13 10 5 18 8
7 14 20 3 12
b[]= 9 4 11 15 6 2 17 13 8 7 14 20 3 12
// Variables globales
entero: i, j
Inicio
// Definir variables
entero: fila, columna, a[50][50], b[50], k 0
ingresarMatriz(a, fila, columna)
imprimeMatriz(a, fila, columna)
letraO(a, fila, columna, b, k)
imprimeVector(b, k)
Fin
Fin_desde
Fin_desde
Fin_procedimiento
Ejemplo 27. Pseudocódigo para intercambiar los contenidos del menor y el mayor
número de cada columna de una matriz de tamaño N * M.
Por ejemplo:
N=5
M=4
6 10 18 11
12 2 22 4
a[][]= 13 9 20 1
5 14 19 3
23 7 16 8
// Variables globales
entero: i, j
Inicio
// Definir e inicializar variables y matrices
entero: fila, columna, a[50][50]
ingresarMatriz (a, fila, columna)
imprimeMatriz (a, fila, columna)
interMayorMenor (a, fila, columna)
imprimeMatriz (a, fila, columna)
Fin
Por ejemplo:
6 10 18 4 21
12 7 16 11 3
a[][]= 13 9 20 3 17
5 14 50 1 15
23 2 19 8 12
21 10 18 4 6
12 11 16 7 3
a[][]= 13 9 20 3 17
5 1 50 14 15
12 2 19 8 23
// Variables globales
entero: i, j
Inicio
// Definir e inicializar variables y matrices
entero: fila, columna, a[50][50]
ingresarMatriz(a, fila, columna)
cambiaDiagonal(a, fila)
imprimeMatriz(a, fila, columna)
Fin
Procedimiento ingresarMatriz (entero a[50][50], entero &fila, entero &columna)
Escribir (“Ingresar cantidad de filas de la matriz:”)
Leer (fila)
Escribir (“Ingresar cantidad de columnas de la matriz:”)
Leer (columna)
Desde (i 0) hasta (i < fila) con incremento 1 Hacer
Desde (j 0) hasta (j < columna) con incremento 1 Hacer
Escribir ("Ingresar elemento")
Leer (a[i][j])
Fin_desde
Fin_desde
Fin_procedimiento
Por ejemplo:
1 2 3 4 5
6 7 8 9 10
a[][]= 11 12 13 14 15
16 17 18 19 20
21 22 23 24 25
a[]= 2 3 4 5 8 9 10 14 15 20
b[]= 6 11 12 16 17 18 21 22 23 24
Triangular superior
Triangular inferior
// Variables globales
entero: i, j
Inicio
// Definir e inicializar variables y matrices
entero: n1 0, n2 0, fila, columna, a[50][50], b[50], c[50]
ingresarMatriz(m, fila, columna)
superiorInferior(m, fila, columna, a, n1, b, n2)
imprimeMatriz(m, fila, columna)
Escribir (“Vector superior”)
imprimirVector(a, n1)
Escribir(“Vector inferior”)
imprimirVector(b, n2)
Fin
Leer (fila)
Escribir (“Ingresar cantidad de columnas de la matriz:”)
Leer (columna)
Desde (i 0) hasta (i < fila) con incremento 1 Hacer
Desde (j 0) hasta (j < columna) con incremento 1 Hacer
Escribir ("Ingresar elemento")
Leer (a[i][j])
Fin_desde
Fin_desde
Fin_procedimiento
Por ejemplo:
Raquel 15 9 10 12 11
Felipe 16 17 6 19 12
a[]= Carlos b[][]= 9 5 11 7 13
Maria 14 17 15 18 8
Luisa 13 8 9 17 12
Raquel 12
Felipe 16
a[]= Carlos c[]= 10
Maria 16
Luisa 13
Inicio
ingresarDatos (a, b, n)
promediar (b, n, c)
imprimirDatos (a, c, n)
mayorNota (a, c, n)
Fin
Ejemplo 31: Pseudocódigo para llenar e imprimir una matriz de orden N, en forma
de caracol.
Por ejemplo:
Si n = 3:
1 2 3
a[][]= 8 9 4
7 6 5
Si n = 5:
1 2 3 4 5
16 17 18 19 6
b[][]= 15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
// Variables globales
entero: i, j
Inicio
// Definir e inicializar variables
entero: fila, columna, guardafila, nfila, r, k 1, a[50][50]
ingresarFilaColumna (fila,columna)
guardafila fila
Fin_desde
Fin_desde
Fin_procedimiento
Ejemplo 32: Pseudocódigo para realizar el algoritmo del banquero para un solo
recurso.
Algoritmo del banquero para un solo recurso: El banquero de un pueblo trabaja con
cuatro clientes P, Q, R, S, cada uno tiene asignado cierto número de unidades de
crédito.
El banquero sabe que no todos los clientes necesitan el crédito máximo en forma
inmediata, por lo que solo reserva 10 unidades para darle servicio.
En la tabla se muestra lo que tiene asignado cada cliente y la línea de crédito que
podrá solicitar como máximo
Por ejemplo el cliente P tiene asignado una unidad de línea de crédito, pero podría
solicitar hasta 6 unidades. El cliente Q tiene asignado una unidad de línea de
crédito, pero podría solicitar hasta 5 unidades, y asi sucesivamente.
R 2 4 2 *
S 4 7 3
// Variable global
entero: i
Inicio
// Definir e inicializar variables y vectores
entero: n1, e 10, a, s, encontro, tiene[20], max[20]
boolean: seguro verdadero
caracter: proceso[20], marca[20]
// Lectura de datos
ingresarVector (proceso, tiene, max, n1)
Escribir (“Imprime vector Tiene:”)
imprimirVector (tiene, n1)
Escribir (“Imprime vector Maximo:”)
imprimirVector (max, n1)
s sumaTiene (tiene,n1)
ae–s
Mientras (seguro) Hacer
encontro compara (tiene, max, n1, a, marca)
Si (encontro>=0) entonces
a a + tiene[encontro]
Escribir (“Se ejecuta proceso”, proceso[encontro], “a =”, a )
Sino
seguro falso
Fin_si
Fin_mientras
Si (a = e) entonces
Escribir (“Estado seguro”)
Sino
Escribir (“Estado inseguro”)
Fin_si
Fin
Escribir(a[i])
Fin_desde
Fin_procedimiento
E[]= 9 3 6
Asi se tiene:
S[]= 9 2 5
6 1 2 6 1 3 0 0 1 *
2 1 1 3 1 4 1 0 3 A[]= 7 2 3
0 0 2 4 2 2 4 2 0
Como todos los procesos se han ejecutado y E[]=A[] decimos que el sistema es
seguro.
// Variables globales
entero: i, j
Inicio
// Definir e inicializar variables, vectores y matrices
entero: fila, columna, encontro 0, c[20][20], d[20][20], a[20],
dif[20][20], e[] {9, 3, 6}
caracter: marca[]
boolean: seguro verdadero, r falso
//Lectura de datos
ingresarMatriz (c, d, fila, columna)
calculaDiferencia (c, d, dif, fila, columna)
imprimirMatriz (c, d, dif, fila, columna)
Mientras (seguro) Hacer
encontro compara (dif, a, marca, fila, columna)
Si (encontro >= 0) entonces
nuevoA (c, a, encontro, columna)
imprimirnuevoA (a, encontro, columna)
Sino
seguro falso
Fin_si
Fin_mientras
r igual (e, a, columna)
Si (r) entonces
Escribir (“El sistema es seguro”)
Sino
Escribir (“El sistema es inseguro”)
Fin_si
Fin
retornar posi
Fin_funcion
Valor a insertar: 20
Insertar después de: 13
Se obtiene:
b[]= 1 2 13 20 24 26
Se obtiene:
b[]= 1 2 24 26
a[]= 3 7 9 11 15 18 20 24
b[]= 2 5 10 16 27
Se obtiene:
c[]= 2 3 5 7 9 10 11 15 16 18 20 24 27
b[]= 5 3 10 18 9 7 22 85 55 105
16. Hacer un algorítmo para mover los contenidos de las filas de una matriz una
posición hacia la derecha. El último elemento de cada fila pasará a la primera
posición de la misma. Trabajar con una matriz N x M.
17. Calcular la suma de los números pares e impares de una matriz de N filas y M
columnas.
Por ejemplo:
1 2 3
a[][]= 4 5 6
7 8 9
Suma de pares = 20
Suma de impares = 25
18. Dado una matriz de orden N girar 90 grados en el sentido de las agujas del
reloj.
Si n es de orden 3:
1 2 3
a[][]= 4 5 6
7 8 9
Entonces se obtendrá:
7 4 1
a[][]= 8 5 2
9 6 3
80 40 50 70
175 15 25 10
a[][]= 10 18 34 9
90 30 5 85
55 35 45 105
20. Ingresar valores a una matriz de tamaño N * M y pasar a un vector todos los
valores que se encuentren en columnas impares a un vector.
21. Almacenar en una fila X los cuadrados de la fila Y de una matriz de tamaño N *
M.
Por ejemplo:
1 2 3
a[][]= 4 5 6
7 8 9
Fila 1: su cuadrado: 1 4 9
Se almacene en la fila 3:
Obtenemos:
1 2 3
a[][]= 4 5 6
1 4 9
22. Sumar los datos de los elementos de cada fila de una matriz de tamaño N * M y
almacenar el resultado en una nueva fila.
Por ejemplo:
1 2 3
a[][]= 4 5 6
7 8 9
Suma fila 1: 6
Suma fila 2: 15
Suma fila 3: 24
6 10 18 4 21
12 7 16 11 3
a[][]= 13 9 20 3 17
5 14 50 1 15
23 2 19 8 12
2 12 25 6 5 15 10 41
c[][]= 7 13 38 4 d[][]= 19 16 22 17
23 22 9 41 37 5 12 13
Ordenar significa permutar estos elementos de tal forma que los mismos quedan de
acuerdo con una distribución preestablecida.
Para nuestro caso, solo se trabajará con los métodos de ordenación interna, así
tenemos: métodos de ordenación por selección, métodos de ordenación por
comparación – intercambio y métodos de ordenación por inserción.
Sea un vector por clasificar, para construir el vector final se extrae sucesivamente
los elementos del vector y se coloca adecuadamente según dos tipos de métodos:
8 40 26 12 1 18 14
0 1 2 3 4 5 6
1 40 26 12 8 18 14
0 1 2 3 4 5 6
1 8 26 12 40 18 14
0 1 2 3 4 5 6
1 8 12 26 40 18 14
0 1 2 3 4 5 6
1 8 12 14 40 18 26
0 1 2 3 4 5 6
1 8 12 14 18 40 26
0 1 2 3 4 5 6
1 8 12 14 18 26 40
0 1 2 3 4 5 6
Algoritmo
Se tiene un vector de N elementos para clasificar, primero se escoge el menor
elemento del vector y se ubica en la posición 0.
Luego quedan N-1 elementos para clasificar de los cuales se evalúa el menor y
se pone en la posición 1 y así sucesivamente hasta que quede un solo elemento
el cual se coloca en la última posición del arreglo.
8 40 26 12 1 18 14 Cambio entre
Vector original posi
A[0] A[1] A[2] A[3] A[4] A[5] A[6] A[i] y A[posi]
Pri.Pasada i=0 1 40 26 12 8 18 14 4 A[0] y A[4]
Seg.Pasada i=1 1 8 26 12 40 18 14 4 A[1] y A[4]
Ter.Pasada i=2 1 8 12 26 40 18 14 3 A[2] y A[3]
Cut.Pasada i=3 1 8 12 14 40 18 26 6 A[3] y A[6]
Qui.Pasada i=4 1 8 12 14 18 40 26 5 A[4] y A[5]
Sex.Pasada i=5 1 8 12 14 18 26 40 6 A[5] y A[6]
Inicio
// Definir e inicializar variables y vectores
entero: n, a[50], b[50]
// Lectura de datos
ingresarVector (a, n)
// Proceso
sortsimple (a, n)
imprimirVector (a, n)
Fin
Ejemplo:
Sea A el vector a clasificar en forma ascendente.
A0 A1 A2 A3 A4 A5 A6
8 40 26 12 1 18 14
0 1 2 3 4 5 6
Contadores C0 C1 C2 C3 C4 C5 C6 Asociados
1. C0 = C1 = C2 = C3 = C4 = C5 = C6 = 0
2. Primer elemento = 8
3. Segundo elemento = 40
Comparamos 40 con todos los anteriores, le sumamos 1 al contador
asociado del elemento mayor:
8 < 40 C1 = C1 + 1 = 1 (40 es el mayor, su contador asociado es C1)
4. Tercer elemento = 26
Se obtiene
C0 = 1
C1 = 6
C2 = 5
C3 = 2
C4 = 0
C5 = 4
C6 = 3
1 8 12 14 18 26 40
0 1 2 3 4 5 6
Inicio
// Definir e inicializar variables y vectores
entero: n1, a[50], b[50], c[50]
// Lectura de datos
ingresarVector (a, n)
inicializarVector (c, n)
// Proceso
conteo (a, c, n)
posición (a, c, b, n)
Escribir ("Vector desordenado ")
imprimirVector (a, n)
Escribir ("Vector ordenado)
imprimirVector (b, n)
Fin
• Método de burbuja
• Método de shell
• Método Par-Impar
Principio: Recibe este nombre por que los elementos mayores “burbujean”
gradualmente (suben) hacia la parte superior del vector.
Sea A el vector con N elementos que se desea clasificar en forma ascendente,
para cada elemento se determina el mayor elemento de A y se guarda en la
última posición, luego quedan N-1 elementos para clasificar y se guarda el
siguiente mayor en la posición N-1 y así sucesivamente hasta que quede un solo
elemento que se guarda en la posición cero.
18 40 26 15 12 9 8
0 1 2 3 4 5 6
Primera Pasada:
A0 < A1 (18 < 40) No hay intercambio
A1 > A2 (40 > 26) Si hay intercambio
A2 > A3 (40 > 15) Si hay intercambio
A3 > A4 (40 > 12) Si hay intercambio
A4 > A5 (40 > 9 ) Si hay intercambio
A5 > A6 (40 > 8) Si hay intercambio
El vector queda:
18 26 15 12 9 8 40
0 1 2 3 4 5 6
Segunda Pasada:
A0 < A1 (18 < 26) No hay intercambio
A1 > A2 (26 > 15) Si hay intercambio
A2 > A3 (26 > 12) Si hay intercambio
A3 > A4 (26 > 9) Si hay intercambio
A4 > A5 (26 > 8) Si hay intercambio
El vector queda:
18 15 12 9 8 26 40
0 1 2 3 4 5 6
Tercera Pasada:
A0 > A1 (18 > 15) Si hay intercambio
A1 > A2 (18 > 12) Si hay intercambio
A2 > A3 (18 > 9) Si hay intercambio
A3 > A4 (18 > 8) Si hay intercambio
El vector queda:
15 12 9 8 18 26 40
0 1 2 3 4 5 6
Cuarta Pasada:
A0 > A 1 (15 > 12) Si hay intercambio
A1 > A 2 (15 > 9) Si hay intercambio
A2 < A 3 (15 > 8) Si hay intercambio
El vector queda:
12 9 8 15 18 26 40
0 1 2 3 4 5 6
Quinta Pasada:
A0 > A1 (12 > 9) Si hay intercambio
A1 > A2 (12 > 8) Si hay intercambio
El vector queda:
9 8 12 15 18 26 40
0 1 2 3 4 5 6
Sexta Pasada:
A0 > A1 (9 > 8) Si hay intercambio
El vector queda:
8 9 12 15 18 26 40
0 1 2 3 4 5 6
Vector original 18 40 26 15 12 9 8
Primera pasada 18 26 15 12 9 8 40
Segunda pasada 18 15 12 9 8 26 40
Tercera pasada 15 12 9 8 18 26 40
Cuarta pasada 12 9 8 15 18 26 40
Quinta pasada 9 8 12 15 18 26 40
Sexta pasada 8 9 12 15 18 26 40
Inicio
// Definir e inicializar variables y vectores
entero: n, a[50]
// Lectura de datos
ingresarVector (a, n)
// Proceso
burbuja (a, n)
imprimirVector (a, n)
Fin
Ejemplo:
Sea A el vector a clasificar en forma ascendente.
8 40 26 12 1 18 14
0 1 2 3 4 5 6
Para i =0
Para i = 2
Para i = 3
8 12 26 1 40 18 14 Intercambio (40 y 1) se
regresa atrás
8 12 1 26 40 18 14 Intercambio (26 y 1) se
regresa atrás
8 1 12 26 40 18 14 Intercambio (12 y 1) se
Regresa atrás
1 8 12 26 40 18 14 Intercambio (8 y 1) se
Regresa atrás
Para i = 4
Para i = 5
Inicio
// Definir e inicializar variables y vectores
entero: n, a[50]
// Lectura de datos
ingresarVector(a, n)
// Proceso
sortShell (a, n)
imprimirVector (a, n)
Fin
entero: temp
temp a[i]
a[i] a[j]
a[j] temp
Fin_procedimiento
Primera etapa
Cada elemento de posición impar es comparado con su sucesor y se
intercambian si el sucesor fuera menor.
Segunda etapa
Cada elemento de posición par es comparado con su sucesor y se intercambia si
el sucesor fuera menor.
Las pasadas sobre el vector son repetidas hasta que en una pasada no se ha
realizado ningún intercambio.
Ejemplo:
Sea A el vector a clasificar en forma ascendente
8 40 26 12 1 18 14
0 1 2 3 4 5 6
Primera pasada:
Primera etapa: impares
A[1] > A[2] 40 > 26 intercambio (40 y 26)
A[3] > A[4] 12 > 1 intercambio (12 y 1)
A[5] > A[6] 18 > 14 intercambio (18 y 14)
El vector queda
8 26 40 1 12 14 18
0 1 2 3 4 5 6
8 26 1 40 12 14 18
0 1 2 3 4 5 6
Segunda pasada:
Primera etapa: impares
A[1] > A[2] 26 > 1 intercambio (26 y 1)
A[3] > A[4] 40 > 12 intercambio (40 y 12)
A[5] < A[6] 14 < 18 No hay intercambio
El vector queda
8 1 26 12 40 14 18
0 1 2 3 4 5 6
1 8 12 26 14 40 18
0 1 2 3 4 5 6
Tercera pasada:
Primera etapa: impares
A[1] < A[2] 8 < 12 No hay intercambio
A[3] > A[4] 26 > 14 intercambio (26 y 14)
A[5] > A[6] 40 > 18 intercambio (40 y 18)
El vector queda
1 8 12 14 26 18 40
0 1 2 3 4 5 6
1 8 12 14 18 26 40
0 1 2 3 4 5 6
Cuarta pasada:
Primera etapa: impares
A[1] < A[2] 8 < 12 No hay intercambio
A[3] > A[4] 14 < 18 No hay intercambio
A[5] < A[6] 26 < 40 No hay intercambio
El vector queda
1 8 12 14 18 26 40
0 1 2 3 4 5 6
1 8 12 14 18 26 40
0 1 2 3 4 5 6
Inicio
// Definir e inicializar vectores
entero: n1 , a[50]
// Lectura de datos
ingresarVector (a, n)
// proceso
sortParImpar (a, n)
imprimirVector (a, n)
Fin
8 40 26 12 1 18 14
0 1 2 3 4 5 6
8 40 26 12 1 18 14
0 1 2 3 4 5 6
8 26 40 12 1 18 14
0 1 2 3 4 5 6
8 12 26 40 1 18 14
0 1 2 3 4 5 6
1 8 12 26 40 18 14
0 1 2 3 4 5 6
1 8 12 14 18 26 40
0 1 2 3 4 5 6
Inicio
// Definir e inicializar variables y vectores
entero: n1, a[50]
// Lectura de datos
ingresarVector (a, n)
// proceso
sortInsersion (a, n)
// Salida de resultados
imprimirVector (a,n)
Fin
8 40 26 12 1 18 14
0 1 2 3 4 5 6
En la primera pasada
i=0
Guardamos 40 que es el elemento activo en una variable auxiliar, aux = 40
Debemos comparar 40 con los anteriores (mientras inf < sup), para lo cual:
inf 0, sup 1, m (0 + 1) / 2 = 0
Si aux >= A[0] entonces inf = m + 1 = 1
Salimos del proceso repetitivo ya que no se cumple inf < sup (1 < 1)
No podemos desplazar ya que sup es mayor que i
El elemento 8 esta ordenado, el vector queda igual
8 40 26 12 1 18 14
0 1 2 3 4 5 6
En la segunda pasada
i=1
Guardamos 26 que es el elemento activo en una variable auxiliar, aux = 26
Debemos comparar 26 con los anteriores (mientras inf < sup), para lo cual:
• inf 0, sup 2, m (0 + 2) / 2 = 1
Si aux >= A[1] (no se cumple la condición) sup = m = 1
Repetimos otra vez el proceso repetitivo ya que inf < sup (0<1)
• inf 0, sup 1, m (0 + 1) / 2 = 0
Si aux >= A[0] entonces inf = m + 1 = 1
Salimos del proceso repetitivo ya que no se cumple inf < sup (1<1)
El vector queda:
8 26 40 12 1 18 14
0 1 2 3 4 5 6
En la tercera pasada
i=3
8 12 26 40 1 18 14
0 1 2 3 4 5 6
En la cuarta pasada
i=4
Guardamos 1 que es el elemento activo en una variable auxiliar, aux = 1.
Debemos comparar 1 con los anteriores (mientras inf < sup), para lo cual:
• inf 0, sup 4, m (0 + 4) / 2 = 2
Si aux >=A[2] (no se cumple la condición) sup = 2
Repetimos otra vez el proceso repetitivo ya que inf < sup (0 < 2)
• inf 0, sup 2, m (0 + 2) / 2 = 0
Si aux >=A[0] (no se cumple la condición) sup = 0
Salimos del proceso repetitivo ya que no se cumple inf < sup (0 < 0)
1 8 12 26 40 18 14
0 1 2 3 4 5 6
En la quinta pasada
i=5
Guardamos 18 que es el elemento activo en una variable auxiliar, aux = 18
Debemos comparar 18 con los anteriores (mientras inf < sup), para lo cual:
• inf 0, sup 5, m (0 + 5) / 2 = 2
Si aux >= A[2] (si cumple la condición) inf = m + 1 = 3
Repetimos otra vez el proceso repetitivo ya que inf < sup (3 < 5)
• inf 3, sup 5, m (3 + 5) / 2 = 4
Si aux >= A[4] (no se cumple la condición) sup = 4
Repetimos otra vez el proceso repetitivo ya que inf < sup (3 < 4)
• inf 3, sup 4, m (3 + 4) / 2 = 3
Si aux >= A[3] (no se cumple la condición) sup = 3
Salimos del proceso repetitivo ya que no se cumple inf < sup (3 < 3)
1 8 12 18 26 40 14
0 1 2 3 4 5 6
En la sexta pasada
i=6
Guardamos 14 que es el elemento activo en una variable auxiliar, aux = 14.
Debemos comparar 14 con los anteriores (mientras inf < sup), para lo cual:
• inf 0, sup 6, m (0 + 6) / 2 = 3
Si aux >=A[3] (no se cumple la condición) sup = m = 3
Repetimos otra vez el proceso repetitivo ya que inf < sup (0 < 3)
• inf 0, sup 3, m (0 + 3) / 2 = 1
Si aux >=A[1] (si se cumple la condición) inf = m + 1 = 2
Repetimos otra vez el proceso repetitivo ya que inf < sup (2 < 3)
• inf 2, sup 3, m (2 + 3) / 2 = 2
Si aux >= A[2] (si se cumple la condición) inf = m + 1 = 3
Salimos del proceso repetitivo ya que no se cumple inf < sup (3 < 3)
1 8 12 14 18 26 40
0 1 2 3 4 5 6
Tabla que muestra las diferentes pasadas por el método de inserción binaria
Inicio
// Definir e inicializar variables
entero: n, a[50]
// Lectura de datos
ingresarVector (a, n)
// Proceso
sortBinaria (a, n)
imprimirVector (a, n)
Fin
aux a[i]
inf 0
sup i
Mientras (inf < sup) Hacer
m (inf + sup) / 2
Si (aux >= a[m]) entonces
inf m + 1
Sino
sup m
Fin_si
Fin_mientras
ji
Mientras (j >= sup +1) Hacer
a[j] a[j-1];
j j - 1;
Fin_mientras
a[sup] aux
a[sup] aux
ii+1
Fin_mientras
Fin_procedimiento
4. Métodos de búsqueda
Sea A el vector
5 3 10 6 19 12 80 40 26
Elemento a buscar 40
Comparamos cada elemento del vector con la clave, como encuentra la clave
devuelve verdad, ya que 40 pertenece al vector.
Algoritmo
Para cada elemento del vector, determina si es igual al elemento buscado,
esta búsqueda es realizado por la función buscaVectorDesordenado, que
devuelve verdad si elemento pertenece al vector y falso si elemento no
pertenece al vector
Inicio
// Definir e inicializar variables y vectores
entero: n, ele, a[50]
boolean: z
// Lectura de datos
ingresarVector (a, n)
Escribir (“Ingrese elemento a buscar ”)
Leer (ele)
// Imprimir
imprimirVector (a, n)
z buscaVectorDesordenado (a, n1, ele)
Si (z) entonces
Escribir (“Elemento se encuentra en el vector”)
Sino
Escribir (“Elemento no se encuentra en el vector”)
Fin_si
Fin
Fin_mientras
r (a[i] = ele)
retornar r
Fin_función
Sea A el vector
3 5 6 10 12 19 26 40 80 100
Elemento a buscar 40
Comparamos cada elemento del vector con el elemento a buscar, como
encuentra el elemento a buscar devuelve verdad, ya que 40 pertenece al
vector.
Algoritmo
Para cada elemento del vector a se determina si es igual al elemento
buscado, esta búsqueda es realizado por la función buscaVectorOrdenado,
que devuelve verdad si elemento pertenece al vector y falso si elemento no
pertenece al vector
Inicio
// Definir e inicializar variables y vectores
entero: n, ele, a[50]
boolean: z
// Lectura de datos
ingresarVector (a, n)
Escribir ("Ingrese elemento a buscar ")
Leer (ele)
// Imprimir
imprimirVector (a, n)
z buscaVectorOrdenado (a, n, ele)
Si (z) entonces
Sea A el vector:
3 5 6 10 12 19 26 40 80 100
0 1 2 3 4 5 6 7 8 9
Elemento a buscar: 80
inf = 0
sup = 9
medio = (inf + sup) / 2 = (0 + 9) / 2 = 4.5 (se toma la parte entero),
a[4] =12 se divide el vector en dos partes
3 5 6 10 12 19 26 40 80 100
0 1 2 3 5 6 7 8 9
19 26 40 80 100
5 6 8 9
Algoritmo
Para cada elemento del vector a se determina si es igual al elemento buscado,
esta búsqueda es realizado por la función binario, que devuelve verdad si
elemento pertenece al vector y falso si elemento no pertenece al vector
Inicio
// Definir e inicializar variables y vectores
entero: n, ele, a[50]
boolean: z
// Lectura de datos
ingresarVector (a, n)
Escribir (“Ingrese elemento a buscar”)
Leer (ele)
// Imprimir
imprimirVector (a, n)
z buscaBinaria(a, n, ele)
Si (z) entonces
Escribir (“Elemento se encuntra en el vector”)
Sino
Escribir (“Elemento no se encunetra en el vector”)
Fin_si
Fin
Procedimiento ingresarVector (entero a[50], entero &n)
// Definir variables
entero: i
Escribir (“Ingresar cantidad de elementos del vector:”)
Leer (n)
Desde (i 0) hasta (i < n) con incremento de 1 Hacer
Escribir (“Ingresar elemento”)
Leer (a[i])
Fin_desde
Fin_procedimiento
Bibliografía
Libros
• Leobardo López, R., (2003), “Programación estructurada: un enfoque
algorítmico”, 2ª. Edición, Editorial Alfaomega México.
• Cairo, Osvaldo, (2000), “Metodología de la Programación: Algoritmos,
Diagramas de Flujo y Programas”, Computec, México.
• Cairo, Osvaldo y Silvia Guardati, (2002), “Estructura de Datos”. Mc Graw-Hill,
México.
• Ceballos, Francisco, Javier, (2002), “Java 2 Curso de programación”.
Alfaomega.
• Joyanes, Luis y otros, (2002), “Java 2 Manual de programación”, Mc Graw-Hill,
México.
• Schildt, Hebert, (2002), “Fundamentos de programación”. Mc Graw Hill.
• Peterson, James y otros, (2003), “Sistemas Operativos conceptos
fundamentales”, Editorial Addison, Barcelona – España.
• Fuster Sabater, Amparo y otros, (2004), “Técnicas Criptográficas de protección
de Datos”, Alfaomega, México.
Enlaces
http://ieslospedroches.seinforma.net/moodle/file.php/5/Pseudocodigo_parte_1.pdf
http://www.unizar.es/ttm/2004-05/Algoritmos.pdf
http://ing.utalca.cl/~fmeza/cursos/2005/cyp/algoritmos2.pdf
http://www.viajayconoce.com/aulaenlinea/