Anda di halaman 1dari 42

1ra.

Edición-2018

ALGORITMOS Mg. Hugo Caselli Gismondi 1


Universidad Nacional del Santa
Facultad de Ingeniería
Escuela Académico Profesional de Ingeniería de Sistemas e Informática

Semana 01

ALGORTIMOS
¿Qué es un algoritmo?
Es la secuencia de pasos (método) que nos permite resolver un problema determinado
Además, debe cumplir estas condiciones:
• Finito:
El algoritmo debe acabar tras un número finito de pasos. Es más, es casi
fundamental que sea en un número razonable de pasos.
• Definible: el algoritmo debe definirse de forma precisa para cada paso, es decir,
hay que evitar toda ambigüedad al definir cada paso. Puesto que el lenguaje
humano es impreciso, los algoritmos se expresan mediante un lenguaje formal,
ya sea matemático o de programación para un computador. Esto significa que
ejecutando 2 veces el mismo algoritmo con los mismos datos de entrada debe
darnos el mismo resultado.
• Efectivo: se entiende por esto que una persona sea capaz de realizar el
algoritmo de modo exacto por que se indica el orden de realización de cada
paso
También debe contar de las 3 partes siguientes:
• Entrada: el algoritmo tendrá cero o más entradas, es decir, cantidades dadas
antes de empezar el algoritmo. Estas cantidades pertenecen además a
conjuntos especificados de objetos. Por ejemplo, pueden ser cadenas de
caracteres, enteros, naturales, fraccionarios, etc. Se trata siempre de
cantidades representativas del mundo real expresadas de tal forma que sean
aptas para su interpretación por el computador.
• Proceso: Donde se describe la transformación de los datos de entrada en un
resultado válido.
• Salida: el algoritmo tiene una o más salidas, en relación con las entradas.

Algo de historia
Uno de los algoritmos más antiguos conocidos es el algoritmo del matemático
griego Euclides. El término algoritmo proviene del matemático Mohammed ibn Musa
al-Khowarizmi, matemático persa (actual Irán), que vivió aproximadamente entre los
años 780 y 850 d.C. (Siglo IX) El describió la realización de operaciones elementales
en el sistema de numeración decimal. De al-Khwarizmi se obtuvo la derivación
algoritmo.

Los recursos que utiliza un algoritmo en relación a un computador son principalmente:


• El tiempo: período transcurrido entre el inicio y la finalización del algoritmo.
• La memoria: la cantidad (la medida varía según la máquina) que necesita el
algoritmo para su ejecución.
Obviamente, la capacidad y el diseño de la máquina pueden afectar al diseño del
algoritmo.

ALGORITMOS Mg. Hugo Caselli Gismondi 2


Universidad Nacional del Santa
Facultad de Ingeniería
Escuela Académico Profesional de Ingeniería de Sistemas e Informática

ANÁLISIS DE PROBLEMAS
En nuestra vida cotidiana, cada que realizamos una actividad o tarea tomamos
decisiones, que en definitiva es la manera de resolver micro problemas, que en su
suma resuelven nuestros quehaceres diarios de manera inadvertida, es más, al
comienzo, por ejemplo de muy niños aprendemos a lavarnos los dientes y esta
actividad responde a una serie de tareas o actividades, que a medida que lo hemos
resuelto una primera vez, el hecho se vuelve repetitivo y cada vez vamos mejorando la
manera en como realizamos tal actividad y de igual manera ocurre para cualquier otra
actividad que realicemos por primera vez.

De acuerdo con Cairo, para solucionar un problema debemos seguir las 3 siguientes
etapas:
a) Análisis profundo del problema
b) Diseño y Construcción del algoritmo
c) Verificación del Algoritmo.

Recordando reunir las siguientes características para los algoritmos:


Preciso: Los pasos a seguir en el algoritmo deben ser indicados claramente.
Definido: El algoritmo, si se sigue dos veces con un conjunto de datos idénticos de
entrada, siempre debe arrojar los mismos resultados.
Finito: El algoritmo, independientemente de la complejidad del mismo, siempre debe
ser de longitud definida es decir debe tener un fin.

a) Análisis del problema


Para poder identificar y definir bien un problema es conveniente responder a
las siguientes preguntas:
1) ¿Qué entradas se requieren? (tipo de datos con los cuales se trabaja y
cantidad).
2) ¿Cuál es la salida deseada? (tipo de datos de los resultados y cantidad).
3) ¿Qué método produce la salida deseada?
4) Requisitos o requerimientos adicionales y restricciones a la solución.

En esta etapa se determina que hace el programa

b) Diseño y construcción del algoritmo


En esta siguiente etapa se determina como hace el programa la tarea
solicitada.

Y por lo general optamos por dividir el problema y resolverlo por partes, luego
juntamos esas partes en un todo integrado, bajo la técnica de diseño
descendente de arriba hacia abajo (diseño top-down)

Para el diseño y construcción del algoritmo se utilizan herramientas tales como


los diagramas de flujo, los diagramas de Nassi-Shneiderman, los
pseudocódigos, entre otros.

ALGORITMOS Mg. Hugo Caselli Gismondi 3


Universidad Nacional del Santa
Facultad de Ingeniería
Escuela Académico Profesional de Ingeniería de Sistemas e Informática

1) Diagramas de Flujo
En ingles se le conoce como flowchart, y es una representación gráfica del
algoritmo. Los símbolos que emplean han sido normalizados por el ANSI
(American National Standards Institute) y son los siguientes:

2) Diagramas de Nassi-Shneiderman
Es un diagrama de flujo en base a cajas o bloques contiguos, donde se
omiten las flechas, de igual amanera estos diagramas se leen de arriba
hacia abajo. Los siguientes son los símbolos principales:

ALGORITMOS Mg. Hugo Caselli Gismondi 4


Universidad Nacional del Santa
Facultad de Ingeniería
Escuela Académico Profesional de Ingeniería de Sistemas e Informática

Ejemplo de Diagrama N-S:

3) Pseudocódigo
O falso lenguaje, es una descripción de alto nivel compacta e informal del
principio operativo de un algoritmo que luego se traducirá en un programa
computacional. Normalmente, el pseudocódigo omite detalles que no son
esenciales para la comprensión humana del algoritmo. No existe una
sintaxis estándar para el pseudocódigo, pero nosotros utilizaremos las
siguientes convenciones:
Asignación
x y
Estructura secuencial
Sentencia1
Sentencia2
(.........)
Sentencian

ALGORITMOS Mg. Hugo Caselli Gismondi 5


Universidad Nacional del Santa
Facultad de Ingeniería
Escuela Académico Profesional de Ingeniería de Sistemas e Informática

Selección Simple
Si condición entonces
Sentencia(s)
Fin_si

Selección doble
Si condición entonces
Sentencia(s)1
Caso contrario
Sentencia(s)2
Fin_si

Selección múltiple
Si condición1 entonces
Sentencia(s)1
Caso contrario Si condición2 entonces
Sentencia(s)2
(.........)

Caso contrario Si condiciónn entonces


Sentencia(s)n1
Caso contrario
Sentencia(s)n2
Fin_si

Selección Múltiple de CASOS


Según expresión hacer
Caso valor1
Sentencia(s)1
Caso valor2
Sentencia(s)2
Caso valor3
Sentencia(s)3
(.........)

Caso contrario
Sentencia(s)n
Fin_según

ALGORITMOS Mg. Hugo Caselli Gismondi 6


Universidad Nacional del Santa
Facultad de Ingeniería
Escuela Académico Profesional de Ingeniería de Sistemas e Informática

Estructura repetitiva (FOR)


desde i 0 hasta n hacer
Sentencia(s)
Fin_desde
o
Para i 0 hasta n hacer
Sentencia(s)
Fin_para

 Estructura repetitiva (WHILE-DO)


Mientras condición hacer
Sentencia(s)
Fin_mientras

 Estructura repetitiva (DO-WHILE)


Hacer
Sentencia(s)
Mientras condición

c) Verificación del algoritmo


Una vez que se ha terminado de escribir un algoritmo es necesario comprobar
que realiza las tareas para las que se ha diseñado y produce el resultado
correcto y esperado. El modo inicial de comprobar un algoritmo es mediante su
ejecución manual, usando datos significativos que abarquen todo el posible
rango de valores y anotando en una hoja de papel las modificaciones que se
den estos datos y en los del resto del algoritmo, en las diferentes fases hasta la
obtención de los resultados.
Este proceso se conoce como prueba de escritorio, que nos va a permitir
depurar los errores del algoritmo y corregir y/o eliminar dichos errores. Siendo
los errores lógicos los que suelen estar en el diseño del algoritmo. Estos
errores son los más difíciles de detectar, ya que más adelante el programa
puede funcionar y no producir errores de compilación ni de ejecución, y sólo
puede advertirse el error por la obtención de resultados incorrectos. En este
caso se debe volver a la fase de diseño del algoritmo, modificar el algoritmo,
cambiar el programa fuente y compilar y ejecutar una vez más.

Referencias
Cairó Battistutti, O. (2005). Metodología de la Programación. Algoritmos,
diagramas de flujo y programas. México: Alfaomega.
Joyanes Aguilar, L. (2008). FUNDAMENTOS DE PROGRAMACIÓN. Algoritmos,
estructura de datos. Madrid. España: McGRAW-HILL/INTERAMERICANA
DE ESPAÑA, S. A. U.
López García, J. (2009). Algoritmos y Programación. Guía para docentes. Bogota,
Colombia: Fundación Gabriel Piedrahita Uribe.

ALGORITMOS Mg. Hugo Caselli Gismondi 7


Universidad Nacional del Santa
Facultad de Ingeniería
Escuela Académico Profesional de Ingeniería de Sistemas e Informática

Semana 02

Estructura general de un programa

Luego de analizar el problema y de plantear una solución algorítmica lógica vía


cualquiera de las herramientas antes mencionadas (diagramas de flujo, diagramas
Nassi-Shneiderman y/o pseudocódigo), debemos trasladar esa solución a código del
lenguaje de programación con el cual vamos a trabajar (en nuestro caso el lenguaje de
programación seleccionado será JAVA), el diseño de la estructura general de un
programa tiene los siguientes componentes que se muestran en la figura siguiente:

Entrada PROCESO Salida

Programa (algoritmo de solución)

La entrada de datos se puede proporcionar desde teclado y/o disco principalmente,


existen otras formas de proporcionar entradas como los scanner y otros periféricos
que no son de interés para el curso. Con estas entradas alimentaremos al algoritmo
que los procesara, para enseguida obtener datos de salida que se presentaran en
dispositivos periféricos de salida como pantalla, disco, impresoras, etc. La salida se
puede contextualizar como el acto de escribir de manera genérica.

Antes de abordar la estructura secuencial, es necesario que nos familiaricemos con


ciertos conceptos que participaran en la implementación de un algoritmo en un
lenguaje de programación.

Conceptos fundamentales

a) Tipos de datos
Empezaremos reconociendo los datos a procesar por un computador que se
clasifican en:
• Simples
• Estructurados

La principal característica de los datos simples es que hacen referencia a un único


valor a la vez. Dentro de este grupo de datos se encuentran: los números enteros,
los números reales, los caracteres, los booleanos, los enumerados

Los datos estructurados se caracterizan por el hecho de que con un nombre


(identificador de variable estructurada) se hace referencia a un grupo de casillas de
memoria. Es decir, un dato estructurado tiene varios componentes. Cada uno de los
componentes puede ser a su vez un dato simple o estructurado.

ALGORITMOS Mg. Hugo Caselli Gismondi 8


Universidad Nacional del Santa
Facultad de Ingeniería
Escuela Académico Profesional de Ingeniería de Sistemas e Informática

A continuación, trataremos los datos simples: enteros, reales, caracteres y


booleanos; y el dato estructurado: cadena de caracteres. Posteriormente
estudiaremos los datos estructurados arreglos.

 Datos numéricos
Dentro de los tipos de datos numéricos encontramos los números enteros y los
números reales. Los enteros son números que pueden estar precedidos del
signo + o y que no tienen parte decimal. Por ejemplo:
128 256 -2114 18580
Los reales son números que pueden estar precedidos del signo + o y que tienen
una parte decimal. Por ejemplo:
9.3 256.0 -71.568 16000.50
 Datos alfanuméricos
Dentro de este tipo de datos encontramos los de tipo carácter (simple) y cadena
de caracteres (estructurado). Son datos cuyo contenido pueden ser letras del
abecedario (a,b,c,...,z; A. B, C, ….. , Z), dígitos (0, 1, 2 ..... 9) o símbolos
especiales (#, $, * ,* , %, /,..., etc.). Es necesario indicar que, si bien este tipo de
datos pueden contener números, no pueden ser utilizados para realizar
operaciones aritméticas.

Un dato tipo carácter contiene un solo carácter, y se escribe entre apostrofes.


Por ejemplo: ‘b’ ‘A' ‘$’ ‘8'

Un dato tipo cadena de caracteres contiene un conjunto de caracteres, y se


escribe entre comillas. La longitud de una cadena depende de los lenguajes de
programación, aunque normalmente se acepta una longitud máxima de 255.
Por ejemplo: “ABCD” “$5_6” “Charly García”

 Datos lógicos
Dentro de este tipo de datos encontramos los booleanos. Son datos que sólo
pueden tomar dos valores: verdadero (true) o falso (false).

 Identificadores
Los datos que se procesan en un lenguaje de programación, sean simples o
estructurados, tienen un nombre que permite su identificación, es por ello que se
denominan identificadores y se forman de acuerdo a ciertas reglas (las mismas
pueden variar dependiendo del lenguaje de programación utilizado):
El primer carácter que forma un identificador debe ser una letra (a, b, c,…, z, A,
B, C,… Z), el subrayado (_) o e símbolo dólar ($). Los demás caracteres pueden
ser letras (a, b, c...,z, A, B, C,….Z), dígitos (0,1,2,...,9). La longitud del
identificador varía en cada lenguaje de programación.
Por ejemplo: SUMA Nota_01 color

 Constantes
Las constantes son datos que no cambian durante la ejecución de un programa.
Para nombrar las constantes utilizamos los identificadores que mencionamos
anteriormente.

ALGORITMOS Mg. Hugo Caselli Gismondi 9


Universidad Nacional del Santa
Facultad de Ingeniería
Escuela Académico Profesional de Ingeniería de Sistemas e Informática

Existen tantos tipos de constantes como tipos de datos, por lo tanto, puede
haber constantes de tipo entero, real, carácter, cadena de caracteres, etc.
Es muy importante que los nombres de las constantes sean representativos de la
tarea que desempeñan dentro del programa de tal manera que no tenemos que
adivinar que significan.
Por ejemplo: PI = 3.141516 radio = 20

 Variables
Las variables son objetos que pueden cambiar su valor durante la ejecución de
un programa. Para nombrar las variables utilizaremos los identificadores que
hemos explicado con anterioridad. Al igual que las constantes, pueden existir
tantos tipos de variables como tipos de datos. De igual manera el nombre de las
variables que incorporamos e un programa deben ser representativas de la tarea
que desempeñan dentro del programa de tal manera que no tenemos que
adivinar que significan.
Por ejemplo: Suma radio nota_01

 Operaciones aritméticas
Para poder realizar operaciones aritméticas empleamos los operadores
aritméticos entre operandos (números, constantes o variables). El resultado de
una operación aritmética será un número.
Los operadores aritméticos básicos son: potencia (^)1, multiplicación (*), división
(/), suma (+), resta (-).
Las expresiones aritméticas se evalúan de izquierda a derecha teniendo en
cuenta la jerarquía de los operadores aritméticos, los operadores de igual nivel
también su evaluación es de izquierda a derecha, si deseamos alterar el orden
de cálculo utilizamos los paréntesis ejecutándose primero los paréntesis más
interiores.
Jerarquía de los operadores aritméticos
Jerarquía OperadorOperación
Mayor Altera orden de
()
cálculo
^ Potencia
Multiplicación –
* /
división
menor + - Suma - resta

Por ejemplo:
Sí n1 = 12 y n2 = 14
Promedio = n1 + n2 / 2
Promedio = 19.
Que es muy distinto a:
Promedio = (n1 + n2) / 2
Promedio = 13.

1 El circunflejo (^) debe ser reemplazado por la función adecuada en JAVA

ALGORITMOS Mg. Hugo Caselli Gismondi 10


Universidad Nacional del Santa
Facultad de Ingeniería
Escuela Académico Profesional de Ingeniería de Sistemas e Informática

Estructura Secuencial
La estructura de control secuencial conocida también como estructura lineal. Se
compone de instrucciones que deben ejecutarse en forma consecutiva, una tras otra,
siguiendo una línea de flujo. Aplica para problemas muy sencillos. Esta estructura
forma parte de soluciones de problemas complejos en las que se la utiliza mezclada
con estructuras iterativas y condicionales.

Esta estructura puede contener cualquiera de las


siguientes instrucciones o sentencias:
 Declaración de variables
 Asignación de valores
 Entrada de datos
 Procesamiento de datos (operaciones)
 Reporte de resultados.

Ejemplo
Dado el nombre y las notas de examen escrito y de prácticas de la primera
unidad de un alumno de la Escuela de Educación Secundaria, elabore un
algoritmo que imprima el nombre y el promedio de las calificaciones de Juan
quien tuvo 09 en examen escrito y 14 en prácticas, tenga en cuenta que el
examen escrito tiene peso 2.

Solución Diagrama de flujo


Constantes
Nombre = Juan (tipo: Cadena)
NotaEE = 9 (tipo: entero)
NotaPR = 14 (tipo: entero)

Variable
Promedio (tipo: real)

Proceso (operación)
Obtener el promedio:
(NotaEE*2+NotaPR)/3.0

Salida
Nombre y Promedio

ALGORITMOS Mg. Hugo Caselli Gismondi 11


Universidad Nacional del Santa
Facultad de Ingeniería
Escuela Académico Profesional de Ingeniería de Sistemas e Informática

Diagrama Nassi-Shneiderman

Inicio
Nombre = “Juan”
NotaEE = 9
NotaPR = 14
Promedio = (NotaEE*2+NotaPR)/3
Escribir Nombre, Promedio
Fin

Pseudocódig
o Inicio
Nombre “Juan”
NotaEE 9
NotaPR 14
Promedio (NotaEE*2+NotaPR)/3

FinEscribir Nombre, Promedio

Ejercicios
1. Determine el producto de tres enteros cualquiera.

2. Determinar la suma de las N primeros números enteros de acuerdo a la


siguiente formula:

3. Estimar el número de páginas de un texto que puede almacenar en la


memoria de un computador. A un promedio de 300 palabras por página y
10 caracteres por palabra. Asumir que un carácter ocupa un (1) Byte. El
tamaño de la memoria del computador debe ingresarse expresado en
Kilobytes. Recuerde que un Kilobyte = 1024 bytes.

4. Dado la base y la altura de un rectángulo, calcule el área y el perímetro del


mismo.

5. Determine y muestre el cuadrado y el cubo de un número.

6. Suponga que está a cargo de una veterinaria, y se tienen los datos de las
mascotas: nombre, peso (en libras) y longitud (en pies). Muestre el nombre
de la mascota, su peso expresado en Kilogramos y su longitud expresada
en metros. Recuerde: 1 libra = 0.453592 Kilogramo y 1 pie =
0.3047 Referencias
Cairó Battistutti, O. (2005). Metodología de la Programación. Algoritmos,
diagramas de flujo y programas. México: Alfaomega.
Joyanes Aguilar, L. (2008). FUNDAMENTOS DE PROGRAMACIÓN. Algoritmos,
estructura de datos. Madrid. España: McGRAW-HILL/INTERAMERICANA
DE ESPAÑA, S. A. U.

ALGORITMOS Mg. Hugo Caselli Gismondi 12


Universidad Nacional del Santa
Facultad de Ingeniería
Escuela Académico Profesional de Ingeniería de Sistemas e Informática

Semana 03

A medida que avanzamos, encontramos que la mayoría de los problemas no se logran


resolver con estructuras secuenciales, pues siempre hemos de tomar una decisión,
hay diversas alternativas por las cuales elegir sobre la base de evaluar una condición
determinada. Para poder conseguir solucionar estos problemas utilizaremos las
estructuras selectivas o condicionales o de selección y en este primer momento la
estructura de selección simple, la cual gráficamente se representa con un rombo.

Diagrama de flujo

Cuando la condición es verdadera, se ejecutan


las instrucciones (acciones) que están
incluidas en el rectángulo del proceso, caso
contrario, no se ejecuta nada y se continúa con
el resto del programa.

Nassi-Shneiderman

Pseudocódigo
Si condición entonces
Sentencia(s)
Fin_si

Sentencia Sí
Evalúa una condición que es una expresión booleana, que de ser verdadera ejecuta
la(s) sentencia(s), de otro modo se continúa con las sentencias que siguen a la
instrucción Sí.

ALGORITMOS Mg. Hugo Caselli Gismondi 13


Universidad Nacional del Santa
Facultad de Ingeniería
Escuela Académico Profesional de Ingeniería de Sistemas e Informática

Para la condición que es una expresión booleana, iniciaremos utilizando los


operadores relacionales que se detallan a continuación:

Operador Nombre Ejemplo Significado


< menor que a<b a es menor que b
> mayor que a>b a es mayor que b
== igual a a==b a es igual a b
!= no igual a a!=b a no es igual a b
<= menor que o igual a a<=5 a es menor que o igual a b
>= mayor que o igual a a>=b a es menor que o igual a b

En JAVA el operador de igualdad es ==, no confundir con el simple = que es


asignación.

Operadores lógicos
Los operadores lógicos son:
&& AND (el resultado es verdadero si ambas expresiones son verdaderas)
|| OR (el resultado es verdadero si alguna expresión es verdadera)
! NOT (el resultado invierte la condición de la expresión)

AND y OR trabajan con dos operandos y retornan un valor lógico basadas en las
denominadas tablas de verdad. El operador NOT actúa sobre un operando. Estas
tablas de verdad son conocidas y usadas en el contexto de la vida diaria, por ejemplo:
"si llueve Y tengo clases, utilizaré chompa", "si NO llueve, saldré a pasear", "si hay una
buena película O tengo compañía, iré al cine". Las tablas de verdad de los operadores
AND, OR y NOT se muestran en las tablas siguientes:

Tabla de verdad del operador lógico AND


x y resultado
true true true true
false false
false true false
false false false

Tabla de verdad del operador lógico OR


x y resultado
true truetrue
true false true
false true true
false false false

Tabla de verdad del operador lógico NOT


x resultado
truefalse
falsetrue

ALGORITMOS Mg. Hugo Caselli Gismondi 14


Universidad Nacional del Santa
Facultad de Ingeniería
Escuela Académico Profesional de Ingeniería de Sistemas e Informática

Ejemplos:

Los operadores AND y OR combinan expresiones relacionales cuyo resultado viene


dado por la última columna de sus tablas de verdad. Por ejemplo:

(a<b) && (b<c)

es verdadero (true), si ambas son verdaderas. Si alguna o ambas son falsas el


resultado es falso (false).

En cambio, la expresión
(a<b) || (b<c)

es verdadera si una de las dos comparaciones lo es. Si ambas, son falsas, el


resultado es falso.

La expresión " NO a es menor que b"


!(a<b)

es falsa si (a<b) es verdadero, y es verdadera si la comparación es falsa. Por


tanto, el operador NOT actuando sobre (a<b) es equivalente a

(a>=b)

La expresión "NO a es igual a b"


!(a==b)

es verdadera si a es distinto de b, y es falsa si a es igual a b. Esta expresión es


equivalente a
(a!=b)

Ejemplo 3-1
Del ejemplo anterior, que permitía obtener el promedio ponderado de las notas de un
alumno, agregar la consideración si acaso tiene un promedio mayor o igual que 11, se
debe enviar el mensaje de Aprobado.
Solución

Constantes Proceso (operaciones)


Nombre = Juan (tipo: Cadena) Obtener el promedio:
NotaEE = 09 (tipo: entero) (NotaEE*2+NotaPR)/3.0
NotaPR = 14 (tipo: entero) Condición
Promedio>=11.0
Variable
Promedio (tipo: real) Salida
Condicion = “” (tipo: Cadena) Nombre, Promedio y condición

ALGORITMOS Mg. Hugo Caselli Gismondi 15


Diagrama de Flujo

Diagrama de Nassi-Shneiderman Pseudocódigo

Inicio
Nombre = “Juan”
NotaEE = 9
NotaPR = 14
Condición = “”
Promedio =(NotaEE*2+NotaPR)/3
Si Promedio >= 11 entonces
Condición = “Aprobado”
Fin_si
Imprimir Nombre, Promedio
Imprimir Condición
Fin

ALGORITMOS Mg. Hugo Caselli Gismondi 16


Universidad Nacional del Santa
Facultad de Ingeniería
Escuela Académico Profesional de Ingeniería de Sistemas e Informática

Ejercicios
1. Elabore el algoritmo que solicite ingresar la edad de una persona y si es mayor o
igual a 18 años se debe imprimir el mensaje “Es tu obligación obtener DNI azul”.

2. Diseñar el algoritmo que luego de ingresar el nombre y el sueldo de un trabajador,


se evalué si el sueldo es menor al sueldo mínimo en cuyo caso se le aplica una
bonificación del 15%. Debe imprimir el nombre, el sueldo y su sueldo
incrementado.

3. Construya un algoritmo que solicite ingresar dos números enteros distintos


cualquiera, si el primer número ingresado es mayor que el segundo, entonces se
debe imprimir la diferencia, la multiplicación y la división entre ellos.

4. Desarrolle la solución que nos muestre como resultado si una persona es adulta,
para ello se debe ingresar el nombre y la edad de la persona. Considerar persona
adulta a aquellos comprendidos entre los 20 y 40 años.

Referencias Bibliográficas
Cairó Battistutti, O. (2005). Metodología de la Programación. Algoritmos,
diagramas de flujo y programas. México: Alfaomega.
Joyanes Aguilar, L. (2008). FUNDAMENTOS DE PROGRAMACIÓN. Algoritmos,
estructura de datos. Madrid. España: McGRAW-HILL/INTERAMERICANA
DE ESPAÑA, S. A. U.
Vasco, U. d. (1 de Abr de 2016). Operadores Lógicos y Relacionales. Obtenido de
http://www.sc.ehu.es/sbweb/fisica/cursoJava/fundamentos/introduccion/operado
res1.htm

ALGORITMOS Mg. Hugo Caselli Gismondi 17


Universidad Nacional del Santa
Facultad de Ingeniería
Escuela Académico Profesional de Ingeniería de Sistemas e Informática

Reconociendo que la estructura selectiva simple tiene sus limitaciones pues solamente
maneja una sola posibilidad, cuando la mayor parte de las veces necesitamos manejar
dos alternativas de solución.
La estructura selectiva doble permite al programa elegir entre dos opciones, si la
condición es verdadera se ejecutará el grupo de instrucciones 1, caso contrario de ser
falso se ejecutará el grupo de instrucciones 2.
Es necesario precisar que solamente se ejecuta una de las 2 opciones o bien el
conjunto de sentencias cuando la condición es Verdadera o bien el conjunto de
sentencias cuando la condición es Falsa, pues ambas son mutuamente excluyentes.

Diagrama de flujo Pseudocódigo

Diagrama de Nassi-Shneiderman

Ejemplo 3-2
Continuando con el ejemplo anterior, en el cual se obtenía el promedio ponderado de
las notas de un alumno, que cuando tenía un promedio mayor o igual que 11, se
enviaba el mensaje de “Aprobado”, ahora hay que considerar enviar el mensaje
“Desaprobado” si el promedio es el caso contrario menor que 11.
Solución
Constantes Variable
Nombre = Juan (tipo: Cadena) Promedio (tipo: real)
NotaEE = 9 (tipo: entero) Condición = “” (tipo: Cadena)
NotaPR = 14 (tipo: entero) Proceso (operaciones)
Obtener el promedio:
(NotaEE*2+NotaPR)/3.0

ALGORITMOS Mg. Hugo Caselli Gismondi 18


Universidad Nacional del Santa
Facultad de Ingeniería
Escuela Académico Profesional de Ingeniería de Sistemas e Informática

Condición Salida
Promedio>=11 Nombre, Promedio y condición

Diagrama de Flujo
Solución (Diagrama de Flujo)

Solución Pseudocódigo

Inicio
Nombre = “Juan”
NotaEE = 9
NotaPR = 14
Condición = “”
Promedio =(NotaEE*2+NotaPR)/3
Si Promedio >= 11 entonces
Condición = “Aprobado”
Caso contrario
Condicion = “Desaprobado”
Fin_si
Imprimir Nombre, Promedio
Imprimir Condición
Fin

Solución Diagrama de Nassi-Shneiderman

ALGORITMOS Mg. Hugo Caselli Gismondi 19


Universidad Nacional del Santa
Facultad de Ingeniería
Escuela Académico Profesional de Ingeniería de Sistemas e Informática

Ejercicios
1. Elabore el algoritmo que solicite ingresar la edad de una persona y si es mayor o
igual a 18 años se debe imprimir el mensaje “Es tu obligación obtener DNI azul”
caso contrario le debe decir cuántos años le falta para ser mayor de Edad

2. Diseñar el algoritmo que luego de ingresar el nombre y el sueldo de un trabajador,


se evalué si el sueldo es menor o igual al sueldo mínimo en cuyo caso se le aplica
una bonificación del 15% caso contrario solo le debe aplicar una bonificación de
5% Debe imprimir el nombre, el sueldo y el sueldo incrementado.

3. Para verificar que 3 valores dados (lados) forman un triángulo, se debe probar si
se cumple la siguiente condición: “La suma de cualquiera de dos lados deberá ser
mayor que el tercer lado”. Enviar mensaje sino forman un triángulo.

4. La empresa de turismo “El Holandés Errante”, nos solicita que le facilitemos un


pequeño programa para poder orientar mejor a sus clientes con respecto a la
oferta que están promocionando, con respecto al precio de los viajes de ida y
vuelta de los tours que deben ser calculados según la distancia (2.35 Soles/km)
los días de permanencia en el sitio a visitar, con una reducción del 35% si la
permanencia supera los 7 días y la distancia los 1000 Km.

5. Elabore el algoritmo que permita determinar las raíces reales de una ecuación de
2do grado (ecuación cuadrática), solo se debe enviar un mensaje si acaso las
raíces son imaginarias.

Referencias Bibliográficas
Joyanes Aguilar, L. (2008). FUNDAMENTOS DE PROGRAMACIÓN. Algoritmos,
estructura de datos. Madrid. España: McGRAW-HILL/INTERAMERICANA
DE ESPAÑA, S. A. U.

ALGORITMOS Mg. Hugo Caselli Gismondi 20


Universidad Nacional del Santa
Facultad de Ingeniería
Escuela Académico Profesional de Ingeniería de Sistemas e Informática

Semana 04

Muchas veces es necesario atender más de una condición para obtener un resultado
que está sujeto a múltiples posibilidades, es por ello que podemos anidar en un primer
momento las estructuras de selección simple y dobles para encontrar y ofrecer el
resultado esperado.

Diagrama de flujo

Pseudocódigo
Si condición1 entonces
Sentencia(s)1
Caso contrario Si condición2 entonces
Sentencia(s)2
(.........)

Caso contrario Si condiciónn entonces


Sentencia(s)n1
Caso contrario
Sentencia(s)n2
Fin_si

ALGORITMOS Mg. Hugo Caselli Gismondi 21


Universidad Nacional del Santa
Facultad de Ingeniería
Escuela Académico Profesional de Ingeniería de Sistemas e Informática

Nassi-Shneiderman

Ejemplo 4-1
Elabore el algoritmo que determine cuál es el mayor de tres números dados.

Solución:

 Diagrama de flujo

ALGORITMOS Mg. Hugo Caselli Gismondi 22


Universidad Nacional del Santa
Facultad de Ingeniería
Escuela Académico Profesional de Ingeniería de Sistemas e Informática

 Pseudocódigo
Inicio
a = 1, b = 2, c = 3
mayor = 0

si (a>b y a>c) entonces


mayor = a
caso contrario si (b>a y b>c) entonces
mayor = b
Caso contrario si (c>a y c>b) entonces
mayor = c
fin_si
Imprimir “El número mayor es: “ mayor
Fin

 Nassi-Shneiderman

----------- Implemente su solución -----------------

Otra solución(2)

 Diagrama de flujo

ALGORITMOS Mg. Hugo Caselli Gismondi 23


Universidad Nacional del Santa
Facultad de Ingeniería
Escuela Académico Profesional de Ingeniería de Sistemas e Informática

 Pseudocódigo

Inicio
a = 1, b = 2, c = 3
mayor = 0

si (a>b) entonces
si (a>c) entonces
mayor = a
caso contrario
mayor = c
fin_si
caso contrario
si (b>c) entonces
mayor = b
caso contrario
mayor = c
fin_si
fin_si
Imprimir “El número mayor es: “ mayor
Fin

 Nassi-Shneiderman

----------- Implemente su solución -----------------

Otra solución(3)

 Diagrama de flujo

Pseudocódigo y
Nassi-Shneiderman

----- Implementar solución -----

ALGORITMOS Mg. Hugo Caselli Gismondi 24


Universidad Nacional del Santa
Facultad de Ingeniería
Escuela Académico Profesional de Ingeniería de Sistemas e Informática

Como se habrá dado cuenta a medida que hay más valores entre las cuales elegir, el
uso de las sentencias si (if) anidadas, le da mayor complejidad a nuestras soluciones,
es por ello tenemos en los lenguajes de programación una alternativa para que
nuestro código sea más legible a través de la selección múltiple de casos, en la cual
se evaluará una expresión que puede tomar valores distintos, de tal manera que si la
expresión es 1 se ejecutará el juego de sentencias 1 para ese caso, si toma valor 2 el
juego de sentencias 2 para este caso, así sucesivamente, luego de lo cual se
proseguirá con las demás sentencias del programa.

 Diagrama de flujo

 Pseudocódigo Nassi-Shneiderman
Según expresión hacer
Caso valor1
Sentencia(s)1
Caso valor2
Sentencia(s)2
Caso valor3
Sentencia(s)3
(.........)

Caso contrario
Sentencia(s)n
Fin_según

Ejemplo 4-2
Luego de ingresar el nombre de la persona, solicitar ingresar un número entre 1 y 7,
luego de lo cual en usuario debe recibir el mensaje de que día de la semana se trata.

Solución

 Diagrama de Flujo

ALGORITMOS Mg. Hugo Caselli Gismondi 25


Universidad Nacional del Santa
Facultad de Ingeniería
Escuela Académico Profesional de Ingeniería de Sistemas e Informática

 Diagrama de Nassi-Shneiderman

 Pseudocódigo
Inicio
Leer nombre, numDia
Según numDia hacer
Caso 1: diaSemana=”Lunes”
Caso 2: diaSemana=”Martes”
Caso 3: diaSemana=”Miércoles”
Caso 4: diaSemana=”Jueves”
Caso 5: diaSemana=”Viernes”
Caso 6: diaSemana=”Sábado”

ALGORITMOS Mg. Hugo Caselli Gismondi 26


Universidad Nacional del Santa
Facultad de Ingeniería
Escuela Académico Profesional de Ingeniería de Sistemas e Informática

Caso 7: diaSemana=”Domingo”
Por defecto: diaSemana=””
Fin_según
Imprimir nombre, diasemana
Fin

Ejercicios

1. Desarrolle el algoritmo que solicite ingresar 2 datos en variables de tipo entero,


enseguida evalúe la siguiente función
25* Y Si X = 1
25^ Y Si X = 2
Valor = 25/ Y Si X = 3
1. Para cualquier valor de X

Utilice selección múltiple de casos.

2. Construya un algoritmo utilizando selección múltiple de casos, que luego de


ingresar la categoría y el sueldo de un trabajador, calcule la bonificación
correspondiente por cumplimiento de metas, de acuerdo con el siguiente cuadro:
Categoría Tasa Bonificación
A 20%
B 15%
C 10%
D 5%
Al final debe imprimir la categoría, sueldo, bonificación y sueldo incrementado.

3. Para este ejercicio previo, se solicita elaborar un algoritmo de solución utilizando


selección múltiple de casos. Que solicite ingresar nombre y nota del Estudiante, se
evalúe de tal manera que, si tiene entre 20 y 18 se le considere Excelente, entre
17 y 15 se considera Bueno, entre 14 y 11 se considera Regular, entre 10 y 6
Malo y finalmente entre 5 y 0 Pésimo. Se debe imprimir el nombre del estudiante
y su condición.

4. Desarrolle el algoritmo que luego de ingresar 3 números enteros diferentes, los


muestre de manera descendente. (Selección múltiple)

5. Construya e algoritmo que solicite ingresar un número entero, se debe determinar


e imprimir este número es positivo, negativo o nulo.

6. Elabore el algoritmo que solicite ingresar un numero entero, se debe determinar si


es par o impar.

7. El costo de las llamadas telefónicas internacionales depende de la tarifa por la


distancia geográfica entre los países de origen y destino, así como de los minutos
hablados. Los costos respectivos a los diversos destinos desde Perú a cada
continente o región se muestran a continuación:

ALGORITMOS Mg. Hugo Caselli Gismondi 27


Universidad Nacional del Santa
Facultad de Ingeniería
Escuela Académico Profesional de Ingeniería de Sistemas e Informática

Código Continente/región Tarifa (S/.)


15 América 1.25
20 Europa 1.75
25 Asia 2.25
30 África 2.00
35 Oceanía 2.50
Ingrese nombre de usuario, código y minutos hablados, determine el costo.

Iniciamos el procesamiento de más de un dato, utilizando la estructura repetitiva


desde la cual es muy útil cuando se conoce el número de veces que se desea
procesar un conjunto de instrucciones, es decir el número de iteraciones es constante
o fijo. Esta estructura luego de ejecutar las sentencias que contiene en el número
indicado, de manera automática sede el paso a las siguientes instrucciones que
continúan en el programa

 Diagrama de Flujo

 Pseudocódigo

desde i 0 hasta n hacer


Sentencia(s)
Fin_desde

Para i 0 hasta n hacer


Sentencia(s)
Fin_para

ALGORITMOS Mg. Hugo Caselli Gismondi 28


Universidad Nacional del Santa
Facultad de Ingeniería
Escuela Académico Profesional de Ingeniería de Sistemas e Informática

 Nassi-Shneiderman

La sentencia desde proporciona una forma compacta para iterar sobre un rango de
valores. Los programadores a menudo se refieren a él como el "bucle" debido a la
forma en la que se realiza un bucle varias veces hasta que una condición particular
está satisfecha.

Ejemplo 4-3
Obtenga la suma de los 100 primeros números enteros.

Solución

 Diagrama de Flujo

 Pseudocódigo
Inicio
suma0
desde x1 hasta n con paso 1 hacer suma
suma+x
Fin_desde

Fin Escribir suma

ALGORITMOS Mg. Hugo Caselli Gismondi 29


Universidad Nacional del Santa
Facultad de Ingeniería
Escuela Académico Profesional de Ingeniería de Sistemas e Informática

 Nassi-Shneiderman

Ejemplo 4-4
Obtenga la tabla de multiplicar del 5
 Pseudocódigo
Inicio
desde x1 hasta 12 con paso 1 hacer
Escribir x, “ * 5 = “, 5*x
Fin_desde
Fin
Implementar solución en Diagrama de flujo y Nassi-Shneiderman

Ejercicios
1. Modifique el ejemplo 4-4 de tal manera que se pueda ver la tabla de multiplicar del
número que uno indique.
2. Amplié el ejercicio anterior de forma que se pueda ver las tablas de multiplicar del 0
al 12.
3. Teniendo en cuenta que un número es perfecto si “la suma de sus divisores excepto
el mismo es igual al propio número”. Elabore el algoritmo que calcule e imprima los
números perfectos menores o iguales a N.
4. Elabore el algoritmo que permita ingresar 10 valores enteros positivos cualquiera
utilizando el teclado, luego debe mostrar la suma de los valores ingresados y el
promedio.
5. Construya el algoritmo que lea la nota de 10 alumnos, al final nos debe reportar
cuantos alumnos hay aprobados y cuantos desaprobados.
6. Desarrolle el algoritmo que lea 10 números enteros, debe reportar cuantos de los
valores ingresados son múltiplo de 3 y 5, debe tener en cuenta que hay ciertos
números que son múltiplos de 5 y de 3 a la vez.

ALGORITMOS Mg. Hugo Caselli Gismondi 30


Universidad Nacional del Santa
Facultad de Ingeniería
Escuela Académico Profesional de Ingeniería de Sistemas e Informática

Semana 05

Estructuras repetitivas

La ventaja de tener un computador es que puede resolver problemas que conllevan


manejar operaciones que son repetitivas para cuando una persona lo realiza, es por
ello que los lenguajes de programación nos brindan sentencias que permiten realizar
estas tareas de una manera mucho más sencilla, de allí el gran auge que tuvieron las
aplicaciones informáticas que automatizaron el trabajo para hacerlo más rápido y
eficiente. Estas estructuras se conforman como bucles o rizos (loops), denominándose
iteración el conjunto de sentencias que se ejecutan repetidas veces.

La estructura mientras (while) es aquella que primero evalúa la condición y luego


ejecuta el conjunto de sentencias que contiene, si la condición es falsa, no se ejecuta
ninguna sentencia dentro del cuerpo de la sentencia while y se prosigue con la
siguiente sentencia después del bucle mientras.

Diagrama de flujo Pseudocódigo

Estructura repetitiva (WHILE-DO)

Mientras condición hacer


Sentencia(s)
Fin_mientras

Nassi-Shneiderman

ALGORITMOS Mg. Hugo Caselli Gismondi 31


Universidad Nacional del Santa
Facultad de Ingeniería
Escuela Académico Profesional de Ingeniería de Sistemas e Informática

Contadores
En las estructuras repetitivas se hace necesario contar las acciones que ocurren en
cada iteración del bucle, para ello se utilizan los contadores que contendrá las sumas
parciales sucesivas de los diferentes valores que pueden ser de incremento o
decremento que debe ser constante tanto positivo como negativo. En definitiva, el
contador es una variable de tipo entero.
Ejemplo:
contador = 0 cont = 0 // se inicializa
contador = contador + 1 cont = cont – 1 // se decrementa

En ambos casos el contador incrementa o decrementa en un valor constante igual a 1.

Acumuladores
De igual manera en las estructuras repetitivas será necesario mantener cantidades
variables de sumas sucesivas, a esto se denomina acumulador, que se diferencia del
contador por que los incrementos o decrementos no son constantes sino variables.
Ejemplo:
Total = 0 // se inicializa
Total = Total + X // X es variable no constante

Ejemplo 5-1
Obtenga la suma de los 100 primeros números enteros.
Solución

 Diagrama de Flujo

Diagrama de Nassi-Shneiderman

Pseudocódigo

Inicio
x = 0, suma = 0
mientras (x<100) hacer
x = x + 1
suma = suma + x
fin_si
Imprimir “La suma es: “ suma
Fin

ALGORITMOS Mg. Hugo Caselli Gismondi 32


Universidad Nacional del Santa
Facultad de Ingeniería
Escuela Académico Profesional de Ingeniería de Sistemas e Informática

Ejercicios
1. Imprimir los números enteros comprendidos entre -50 y 50
2. Imprimir los números del 2 al 200 pero de 2 en 2.
3. Imprimir los números del 100 al 0
4. Suponga que tenemos que calcular la suma de los gastos que hicimos cuando
fuimos de compras al hipermercado La Perla, tenemos todo un listín anotado por
lo que tendremos la precaución de indicar el termino de los cálculos con un valor
negativo (al final no podemos tener gastos negativos).
5. Elabore el algoritmo que permita ingresar un número entero positivo cualquiera
entre 1 y 20, calcule e imprima el cubo de ese número, utilice -1 para indicar que
no quiere calcular más.
6. Desarrolle un algoritmo que dado un número entero positivo cualquiera, menor
que 1000, nos muestre la suma de los números pares e impares.
7. Construya el algoritmo que obtenga la suma e imprima los términos de la siguiente
serie:
2, 5, 7, 10, 12, 15, 17, …….. , 1800
8. Resuelva el siguiente problema que tiene el jefe de personal de una constructora,
tiene que pagar a una lista no conocida de operarios que laboraron en un día
feriado, teniendo en cuenta lo siguiente:
 Si el sueldo es menor o igual a S/. 850 se le aumenta 18%
 Si el sueldo es mayor a S/. 850 se le aumenta 12%
Al final debe imprimir el sueldo nuevo de cada trabajador y el total de la planilla de
ese día.
9. Dado N números enteros obtenga:
 Cuantos números ingresados fueron mayores que cero
 El promedio de los números positivos
 El promedio de todos los números
10. Construya el algoritmo que dado N números enteros como dato, calcule el mayor
y el menor de estos números.

ALGORITMOS Mg. Hugo Caselli Gismondi 33


Universidad Nacional del Santa
Facultad de Ingeniería
Escuela Académico Profesional de Ingeniería de Sistemas e Informática

Dentro de las estructuras repetitivas, encontramos la estructura hacer ... mientras


(do ... while), que a diferencia del hacer … mientras, esta estructura primero evalúa el
conjunto de sentencias o instrucciones contenidos dentro del cuerpo de la sentencia,
para luego evaluar la condición, que de ser verdadera se prosigue con la ejecución de
las sentencias, de ser falsa la condición, se prosigue con las demás sentencias o
instrucciones del programa.

Diagrama de flujo Pseudocódigo

Hacer
Sentencia(s)
Mientras condición

Nassi-Shneiderman

Ejemplo
Obtenga la suma de los 100 primeros números enteros.
Solución
 Pseudocódigo
Inicio
x = 0, suma = 0
hacer
x = x + 1
suma = suma + x
mientras (x<100)
Imprimir “La suma es: “ suma
Fin

ALGORITMOS Mg. Hugo Caselli Gismondi 34


Universidad Nacional del Santa
Facultad de Ingeniería
Escuela Académico Profesional de Ingeniería de Sistemas e Informática

 Diagrama de Nassi-Shneiderman
Diagrama de Flujo

Ejercicios

Resuelva los ejercicios de la semana 07 con la estructura do … while, de igual manera


los ejercicios siguientes:
1. Un vendedor de golosinas ha hecho varias ventas en el día las cuales lleva
anotado en una libreta, ayúdele a determinar cuántas ventas fueron menores o
iguales a S/.10.00, cuantas fueron mayores a S/.10.00 pero menores a S/.20.00 y
cuántas fueron iguales o mayores a S/.20.00, haga los ingresos necesarios
indicando terminar cuando ingrese un número negativo.
2. A continuación, presentamos la conjetura de ULAM (En honor del matemático S.
Ulam) que dice:
a) Empezar con cualquier número positivo
b) Si es par divídalo entre 2; si es impar multiplíquelo por 3 y agréguele 1.
c) Obtener enteros sucesivamente repitiendo el proceso.
Al final se debe obtener el número 1, independiente del entero inicial.
3. Desarrolle el algoritmo que lea un número entero N y calcule la suma de la
siguiente serie:
11 + 22 + 33 + . . . + Nn (N número de términos de la serie)

ALGORITMOS Mg. Hugo Caselli Gismondi 35


Universidad Nacional del Santa
Facultad de Ingeniería
Escuela Académico Profesional de Ingeniería de Sistemas e Informática

4. Construya el algoritmo que calcule el término 150 de la serie de Fibonacci.


Recuerde que los 2 primeros términos de la serie son 0 y 1. El resto se calculan
como la suma de los 2 números inmediatos que le preceden.
Ejemplo: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, ……….
5. En la última elección de congresistas de nuestra región 4 candidatos en una mesa
quieren el reconteo de los votos (identificarlos con los números 1, 2, ,3 y 4).
Elabore el algoritmo que le permita al Presidente de mesa agilizar el conteo a
medida que el secretario le va dictando en el orden que los va sacando del ánfora,
para terminar, utilice el valor 0.
6. Con un algoritmo ayude a determina a una empresa de N empleados, el código
del empleado y el sueldo del trabajador de mayor sueldo de la empresa.
7. El SENAMHI lleva los registros de los promedios mensuales de las lluvias caídas
en las principales regiones agrícolas del país. Ellos las han divido en 3 regiones:
Norte, Centro y Sur, calcule:
a) El promedio anual de la región Centro
b) El mes y registro con menor lluvia en la región Sur
c) La región con mayor lluvia anual Considere que los registros anuales de las
regiones son diferentes)

ALGORITMOS Mg. Hugo Caselli Gismondi 36


Universidad Nacional del Santa
Facultad de Ingeniería
Escuela Académico Profesional de Ingeniería de Sistemas e Informática

Semana 06

A medida que vamos avanzando, encontramos que los problemas a resolver son cada
vez más complejos, ante ello la manera más fácil de abordar su solución es separarlo
en pequeños problemas (divide y vencerás) de tal manera que en conjunto uno puede
tener una solución que puede ser depurada de manera más sencilla, es decir los
posibles errores se pueden detectar más rápido. En los lenguajes de programación
estos pequeños problemas se les reconocen como subprogramas que su vez se
identifican como funciones y procedimientos o subrutinas, los cuales pueden ser
invocados desde cualquier parte del programa. Esta facilidad nos permite evitar la
redundancia de código.

Funciones
Las funciones son una operación o método que recibe uno o más valores los cuales se
denominan argumentos, que luego de procesarlos nos retornan un resultado.
Todos los lenguajes de programación nos proporcionan funciones predefinidas tanto
numéricas como de cadenas, de ellas hemos presentado en tema anterior un listado
de las principales funciones matemáticas. Pero estas funciones predefinidas quedan
cortas para solucionar la gran variedad de problemas, los lenguajes de programación
nos permiten generar nuestras propias funciones.
De manera general una función responde a la siguiente estructura:
tipo_dato nombre_funcion(parámetros)
instrucción(es)
retorna valor
fin_función

Ejemplo 6-1
Elaborar el algoritmo que mediante una función obtenga la suma de 2 números
enteros positivos

Solución

 Pseudocódigo (1)

Inicio //Programa principal


Escribir “Ingrese valor 1: “
Leer n1
Escribir “Ingrese valor 2: “
Leer n2
Escribir “La suma de “,n1,“ + “,n2,“ = “,Suma2Num(n1, n2)

Fin

ALGORITMOS Mg. Hugo Caselli Gismondi 37


Universidad Nacional del Santa
Facultad de Ingeniería
Escuela Académico Profesional de Ingeniería de Sistemas e Informática

Función Suma2Num(x, y)
Suma x+y

Fin_función
 Pseudocódigo (2)

Inicio //Programa principal


Escribir “Ingrese valor 1: “
Leer n1
Escribir “Ingrese valor 2: “
Leer n2
S Suma2Num(n1, n2)
Escribir “La suma de “,n1,“ + “,n2,“ = “,S
Fin
Función Suma2Num(x, y)
Suma x+y

Fin_función
Ejemplo 6-2
Elaborar el algoritmo que mediante una función obtenga la potencia n de un número x.
Considere la posibilidad de que los exponentes puedan ser positivos y negativos.

 Pseudocódigo

Inicio //Programa principal


Escribir “Ingrese la base: “
Leer B
Escribir “Ingrese valor de la potencia:
“ Leer VP
P = potencia(B, VP)
Escribir B, “ elevado a la “, VP, “ es = “,
P Fin
Función Potencia(x, n)
Y 1
Desde i 1 hasta ABS(n) con paso 1 hacer
Y Y*x
Fin_desde
Si n<0 entonces
Y 1/Y
Fin_si
POT Y
Fin_función

ALGORITMOS Mg. Hugo Caselli Gismondi 38


Universidad Nacional del Santa
Facultad de Ingeniería
Escuela Académico Profesional de Ingeniería de Sistemas e Informática

Procedimientos
Las funciones son muy útiles, pero tienen limitaciones al devolver un solo resultado,
por lo general es necesario que el procesamiento devuelva más de un resultado, y es
ahí que utilizaremos los procedimientos o subrutinas, los cuales resolverán un proceso
particular, este procedimiento no necesita que algún valor se asocie a él o que lo
devuelva como único resultado.

Variables locales y globales


1. Las variables locales son aquellas que se declara y definen dentro del cuerpo de
un método y ese es su ámbito de alcance
2. Las variables globales se declaran en el algoritmo principal y están disponibles
para todos los subprogramas.

Fuente: (Joyanes Aguilar, 2008)

Ejemplo 6-3
Elabore el algoritmo que determine las raíces reales de una Ecuación Cuadrática.
Solución_1 // Simple con valores constantes de prueba
Inicio //Programa principal
a 1.0, b -4.0, c 4.0
discri b*b-4*a*c
Si discri>=0 entonces
x1 (-b+RAIZ(discri))/(2*a)
x2 (-b-RAIZ(discri))/(2*a)
caso_contrario
Escribir “La ecuación NO tiene raíces
reales“ Fin_si
Fin

ALGORITMOS Mg. Hugo Caselli Gismondi 39


Universidad Nacional del Santa
Facultad de Ingeniería
Escuela Académico Profesional de Ingeniería de Sistemas e Informática

Solución_2 // Con métodos y valores constantes de prueba

a 1.0, b -4.0, c 4.0


Inicio //Programa principal
Escribir “Raíces Ecuación Cuadrática“
Discrimina()
RaicesReales()
Fin

Inicio Discrimina
discriminante b*b-4*a*c
Fin_discrimina

Inicio RaicesReales
Si discriminante>=0 entonces
x1 (-b+RAIZ(discri))/(2*a)
x2 (-b-RAIZ(discri))/(2*a)
msgRaicesReales()
caso_contrario
msgRaizNOreal()
Fin_si
Fin_RaicesReales

msgRaicesReales()
Escribir “Las Raíces Reales son: “
Escribir “X1 = “, x1
Escribir “X2 = “, x2
Fin_msgRaicesReales

msgRaizNOreal()
Escribir “La ecuación NO tiene raíces

reales“ Fin_msgRaizNOreal

RECURSIVIDAD
Sabemos que un subprograma puede llamar a otro subprograma, esto es una función
puede llamar a otra función y así sucesivamente consiguiéndose el anidamiento de
funciones o subprogramas. También ocurre que un subprograma puede llamarse así
mismo, entonces cuando una función o procedimiento se llama a si mismo se llama
recursión, es decir que estas funciones o procedimientos son recursivos. La recursión
se utiliza para evitar las estructuras repetitivas, aun así, debemos tener el cuidado de
incluir una condición de termino, para que la ejecución no se vuelva un bucle (loop)
infinito.

ALGORITMOS Mg. Hugo Caselli Gismondi 40


Universidad Nacional del Santa
Facultad de Ingeniería
Escuela Académico Profesional de Ingeniería de Sistemas e Informática

Ejemplo 6-4
Algunas funciones matemáticas se definen de manera recursiva. Tal es el caso del
factorial de un número entero, que se define como sigue:

n! = 1 x 2 x 3 x ….. x (n-1) x n o también

1 si n=0 tener presente que 0! = 1


n! =
(n-1)!*n si n>0

Solución NO Recursiva

INICIO
fact 1
Escribir “Ingrese número para calcular factorial:
“ Leer n
Si n=0 entonces
fact 1
caso_contrario
Desde i 1 hasta n con paso 1 hacer
fact fact*i
Fin_desde
Fin_si
Escribir “El factorial de “, n, ” es = “, fact
FIN

Solución Recursiva

INICIO //Programa principal


Escribir “Ingrese número para calcular factorial:
“ Leer n
F factorial(n)
Escribir “El factorial de “, n, ” es = “, F
FIN
Función factorial(x)
Si x=0 entonces
return 1
caso_contrario
return n*factorial(n-1)
Fin_si
Fin_función

ALGORITMOS Mg. Hugo Caselli Gismondi 41


Universidad Nacional del Santa
Facultad de Ingeniería
Escuela Académico Profesional de Ingeniería de Sistemas e Informática

Ejercicios

6.1 Elaborar el algoritmo e implementar en JAVA, una aplicación que calcule el área
de un circulo, triangulo o cuadrado. Se debe solicitar que figura geométrica se va
a evaluar, luego de lo cual debemos ingresar los datos que sean necesarios.
Generar una función para cada caso.
Areacírculo = radio2 *π

Area = base* altura


triángulo
2
Areacuadrado = lado *lado

6.2 Construya el algoritmo e implemente en JAVA, una aplicación que convierta un


número en base decimal a binario, para ello utilice una función a la cual se le
pasará el número, dicha función devolverá el número convertido a binario en una
cadena. Sabemos que, para convertir un número decimal a binario, debemos
dividir entre 2 y sucesivamente el resultado también entre 2 hasta que no se
pueda dividir más, el residuo de cada división formará el número binario que se
almacenará en una cadena.

6.3 Elabore el algoritmo e implemente en JAVA, una aplicación que cuente el número
de cifras de un número entero positivo que debemos ingresar por el teclado.
Devolver el número de cifras con una función a la cual se le pasará el número.

6.4 Construya el algoritmo que a través de un menú de opciones permita obtener las
áreas de un cuadrado, triángulo y círculo cada una de ellas en un procedimiento
distinto que será invocado al elegir la opción que le corresponde. Debe dar la
posibilidad de poder continuar con el cálculo de otra área.

6.5 Elabore el algoritmo recursivo que permita resolver una división por el método de
restas sucesivas.

6.6 Construya un algoritmo recursivo que permita invertir un número. Ejemplo:


Entrada: 123, Salida: 321

6.7 Elabore un algoritmo recursivo que permita sumar los dígitos de un número.
Ejemplo: Entrada: 123, Resultado: 6

ALGORITMOS Mg. Hugo Caselli Gismondi 42