Sunteți pe pagina 1din 81

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 01Semana 01.- Introducción a los algoritmos, análisis de


problemas y diseño

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 Operador Operació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 2.1
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ódigo
Inicio
Nombre “Juan”
NotaEE 9
NotaPR 14
Promedio (NotaEE*2+NotaPR)/3
Escribir Nombre, Promedio
Fin
Ejercicios
2.1 Determine el producto de tres enteros cualquiera.

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


siguiente formula:

2.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.

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


mismo.

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

2.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
Estructuras Condicionales simples y dobles.

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 true true
true false true
false true true
false false false

Tabla de verdad del operador lógico NOT


x resultado
true false
false true

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

4.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.

4.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.

4.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.4 Desarrolle el algoritmo que luego de ingresar 3 números enteros diferentes, los
muestre de manera descendente. (Selección múltiple)

4.5 Construya e algoritmo que solicite ingresar un número entero, se debe determinar
e imprimir este número es positivo, negativo o nulo.

4.6 Elabore el algoritmo que solicite ingresar un numero entero, se debe determinar si
es par o impar.

4.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
suma 0
desde x 1 hasta n con paso 1 hacer
suma suma+x
Fin_desde
Escribir suma
Fin

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 x 1 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
4.8 Modifique el ejemplo 4-4 de tal manera que se pueda ver la tabla de multiplicar
del número que uno indique.
4.9 Amplié el ejercicio anterior de forma que se pueda ver las tablas de multiplicar
del 0 al 12.
4.10 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.11 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.
4.12 Construya el algoritmo que lea la nota de 10 alumnos, al final nos debe reportar
cuantos alumnos hay aprobados y cuantos desaprobados.
4.13 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
5.1 Imprimir los números enteros comprendidos entre -50 y 50
5.2 Imprimir los números del 2 al 200 pero de 2 en 2.
5.3 Imprimir los números del 100 al 0
5.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.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.
5.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.
5.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
5.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.
5.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
5.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 5-2
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:
5.11 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.
5.12 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.
5.13 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

5.14 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.15 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.
5.16 Con un algoritmo ayude a determinar a una empresa de N empleados, el
trabajador de mayor sueldo de la empresa, al final debe imprimir el código del
empleado, su nombre y sueldo.
5.17 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.
 Funciones predefinidas
Todos los lenguajes de programación nos proporcionan funciones predefinidas
tanto numéricas, cadenas, de fechas.
 Funciones matemáticas. - podemos enumerar las siguientes: valor absoluto,
exponencial, potencia, raíz cuadrada, redondear, etc. A ellas se suman las
funciones trigonométricas: seno, coseno, tangente y sus correspondientes arcos.
 Funciones de cadenas. – se tiene: de información básica, de comparación de
cadenas, de búsqueda de caracteres, de búsqueda de subcadenas, convertir
mayúsculas a minúsculas y viceversa, etc.
 Funciones de fecha y hora.- que devuelven la fecha y hora del sistema, que
suman y restan fechas, que comparan fechas, etc.
 Funciones del usuario
Las funciones predefinidas quedan cortas para solucionar la gran variedad de
problemas, es por ello que los lenguajes de programación nos permiten generar
nuestras propias funciones.
De manera general cualquier 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

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

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

Función Suma2Num(x, y)
Suma x+y
retornar Suma
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
retornar Suma
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

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

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
retornar Y
Fin_función

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.

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_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)
Escribir “Las Raíces Reales son: “
Escribir “X1 = “, x1
Escribir “X2 = “, x2
caso_contrario
Escribir “La ecuación NO tiene raíces reales“
Fin_si
Fin

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


real discriminante
real 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

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

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.
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

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

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
retornar 1
caso_contrario
retornar x*factorial(x-1)
Fin_si
Fin_función

Ejercicios

1.1 Elaborar el algoritmo para 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 * 

base* altura
Areatriángulo 
2

Areacuadrado  lado* lado

1.2 Construya el algoritmo para 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.

1.3 Elabore el algoritmo para, 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.

ALGORITMOS Mg. Hugo Caselli Gismondi 42


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

1.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.

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

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


Entrada: 123, Salida: 321

1.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 43


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

Semana 07

Alcanzamos una serie de ejemplos que combinan las diversas estructuras de tal
manera que podamos controlar el ingreso de ciertos valores válidos

Ejemplos

1.1 Construya el algoritmo que muestre un pequeño menú de 4 opciones con


números, cada que se seleccione uno nos diga que opción se eligió. Se debe
restringir al usuario para que solo pueda digitar esos números.
Solución

ALGORITMOS Mg. Hugo Caselli Gismondi 44


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

1.2 Modifique el algoritmo anterior, que luego de elegida cualquier opción permita
preguntar si se desea continuar, de elegirse la opción desea continuar debe
mostrarse el menú de opciones nuevamente, caso contrario darle un mensaje de
despedida al usuario.

ALGORITMOS Mg. Hugo Caselli Gismondi 45


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

1.3 Diagrama de flujo maqueta de Proyecto de Producción de la asignatura.

ALGORITMOS Mg. Hugo Caselli Gismondi 46


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

EJERCICIOS

7.1 Elabore el algoritmo que solo permita leer S o N.


7.2 Construya el algoritmo que cuente e imprima los múltiplos de 3 partiendo de la
unidad hasta un valor máximo ingresado.
7.3 Elaborar el algoritmo que cuente e imprima los números que son múltiplo de 2 o
de 3 para valores a partir de 1 y un número leído no mayor o igual que 200.
7.4 Generar el algoritmo que imprima el mayor y el menor de 5 números leídos.
7.5 Construya el algoritmo que cuente, sume e imprima los múltiplos de 2 que hay
entre dos valores, siendo el segundo valor mayor que el primero.
7.6 Escriba el algoritmo que permita ingresar horas, minutos y segundos y que
permita indicar la hora correcta. Ejemplo se ingresa 3 horas, 121 minutos 121
segundos la respuesta debe ser 5 horas 03 minutos 01 Segundo.
7.7 Generar el algoritmo que solicite leer un número menor o igual a 2000 luego del
cual se debe escribir su equivalente en números romanos.
7.8 Escriba la línea en pseudocódigo equivalente, a las siguientes fórmulas
matemáticas: p p N
( )(1  )
a) b) 1200 1200
AB 2  A2 B m L
Z p N
x y (1  ) 1
1200
c) n n 1 n(n  1) n 2 2 n(n  1)(n  2) n 3 3
Y  an  a b a b  a b
1 1.2 1.2.3
7.9 Dado el siguiente algoritmo en pseudocódigo que incluye una función recursiva,
diga qué valor se produciría para N=5. Efectué la prueba de escritorio para ello.
INICIO //Programa principal
Leer N
Escribir N, “ sumado a 5 hasta “, N, “ veces es = “, sumaXT(N)
FIN
SumaXT(entero x)
Si x==0 entonces
Retornar 5
Caso contrario
Retornar sumaXT(x-1)+5
Fin_si
Fin_sumaXT

Semana 08.- Examen de 1era Unidad

ALGORITMOS Mg. Hugo Caselli Gismondi 47


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

Semana 09

El trabajar con variables simples a medida que tenemos que evaluar más datos sería
muy complicado, pues debemos incluir tantas variables para su procesamiento como
datos incluyamos, es por ello que los lenguajes de programación incluyen tipos de
datos estructurados como los arreglos (del inglés arrays) que están asociados a los
conceptos matemáticos de vector y por extensión matriz, que nos van a permitir
manipular juegos de valores del mismo tipo, pero definiendo una sola variable, como
veremos a continuación.

ARREGLOS
Un arreglo es una estructura de datos interna por cuanto su manejo se da a nivel de la
memoria RAM del computador, reconociéndose los siguientes tipos: Unidimensionales
(vector), Bidimensionales (matrices) y Multidimensionales (cubos), cualquiera de ellos
es en un conjunto finito de elementos del mismo tipo de datos primitivos, los cuales se
pueden identificar por su posición en el arreglo. Un arreglo puede ser de tipo entero,
todos sus elementos serán valores enteros; o puede ser de tipo cadena y contendrá
solo elementos de cadenas, nunca una combinación de tipos de datos. Esto significa
que pueden ser: Numéricos y Alfanuméricos. Cada elemento puede tener un elemento
simple, los elementos pueden ser primitivos, la longitud del arreglo se fija cuando se
crea. La desventaja de trabajar con arreglos es que al manejarse a nivel de memoria
RAM, cuando uno apague el computador toda la data se perderá.

ARREGLOS UNIDIMENSIONALES
O vectores, también conocidos como listas o arrays son un conjunto de datos
homogéneos de tamaño n, para acceder a cada dato del arreglo hay que referenciarlo
a través de un índice o subíndice.
Para poder utilizar un arreglo debemos separarle espacio en la memoria, de acuerdo
con la necesidad del tratamiento de datos de un problema particular, para ello es
necesario declarar y crear el arreglo de la siguiente manera:

Declaración: Tipo_dato[] Nombre_Arreglo


Creación: Nombre_Arreglo nuevo Tipo_dato[tamaño]

Declaración y creación en la misma línea:

Tipo_dato[] Nombre_Arreglo nuevo Tipo_dato[tamaño]

ALGORITMOS Mg. Hugo Caselli Gismondi 48


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

Un error común es manipular un arreglo no válido, que puede ser un valor negativo o
un número mayor a la longitud del arreglo.
Ejemplos Tamaño del arreglo

Declaración: entero[] notas


Creación: notas nuevo entero[15]

Declaración y creación en la misma línea:


entero[] notas nuevo entero[15]

Se puede declarar e inicializar el arreglo con valores de la siguiente manera:


entero notas {11, 15, 18, 12, 10}

Luego puede ser manipulado dentro del código de solución en su forma simple:
notas[índice]

Operaciones con Arreglos


Un arreglo al ser un dato estructurado, es posible darle mantenimiento a través de una
serie de operaciones como el recorrido, búsqueda, modificación, altas y bajas entre las
más básicas y esenciales.

RECORRIDO
Por ahora iniciaremos con el recorrido que nos será de utilidad para poder resolver
una serie de casos básicos. El recorrido consiste en visitar cada celda del arreglo de
manera secuencial, utilizando cualquier estructura de control repetitiva, siempre
debemos tener en cuenta de no rebasar los límites del arreglo, los índices no pueden
ser menores que cero (underflow) o superiores al tamaño máximo definido para dicho
arreglo (overflow).

EJEMPLO 9-1
Se tienen las notas de examen escrito de 5 alumnos: 15, 9, 17, 8, 14. Elabore el
diagrama de flujo que presente las 5 notas a través de la pantalla.

EJEMPLO 9-2
Sobre la base del ejercicio anterior, determinar la mayor nota y reportarla, elabore el
diagrama Nassi-Shneiderman correspondiente.

EJEMPLO 9-3
De los datos de los ejercicios previos determine la mayor nota, la menor nota y el
promedio de los 5 estudiantes. Elabore el pseudocódigo de solución.

ALGORITMOS Mg. Hugo Caselli Gismondi 49


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

RPTA EJEMPLO 9-1

RPTA EJEMPLO 9-2

ALGORITMOS Mg. Hugo Caselli Gismondi 50


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

RPTA EJEMPLO 9-3

INICIO
entero notaEE[] {14, 11, 7, 18, 9}
entero may 0, men 999, suma 0
real prom 0.0
desde i 0 hasta i=longitud(notaEE)-1 con paso 1 hacer
Escribir notaEE[i]
suma suma + notaEE[i]
si (notaEE > may) entonces
may notaEE[i]
fin_si
si (notaEE < men) entonces
men notaEE[i]
fin_si
fin_desde
prom suma/longitud(notaEE)
Escribir “El mayor valor de la lista es: “, may
Escribir “El menor valor de la lista es: “, men
Escribir “El promedio de las notas es: “, prom
FIN

EJERCICIOS

9.1 Elabore el algoritmo en diagrama de flujo, que procese los datos de 5 alumnos:
Juan, Luis, José, Iván y Adán, que tiene las siguientes notas de Examen Escrito:
10, 19, 5, 17, 11 y sus notas de prácticas: 15, 13, 10, 19, 11 respectivamente, se
debe obtener su promedio teniendo en cuenta que el examen escrito tiene peso 2.
Si su promedio es menor que 11 se debe indicar la condición de Desaprobado,
caso contrario debe decir Aprobado, como se muestra a continuación:
Alumno EE NP PROM CONDICION
Juan 10 15 11.67 APROBADO
Luis 19 13 17.00 APROBADO
José 5 10 6.67 DESAPROBADO
Iván 17 19 17.67 APROBADO
Adán 11 9 10.33 DESAPROBADO

ALGORITMOS Mg. Hugo Caselli Gismondi 51


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

9.2 Generar un arreglo de 100 elementos, inicialice los datos de cada elemento del
arreglo con la siguiente formula: i*2/3+3, donde i es la posición de cada dato del
arreglo. Luego debe imprimir solo los elementos pares del arreglo, teniendo la
precaución de numerar consecutivamente los datos impresos partiendo de 1.
9.3 Partiendo de la solución del ejercicio anterior, realizar las modificaciones
pertinentes que permitan imprimir los resultados en 5 columnas, de manera muy
similar a lo que se muestra a continuación:
01 – 3,00 02 – 4,33 03 – 5,67 04 – 7,00 05 – 8,33
06 - xxx 07 – yyy 08 – zzz 09 – www 10 – qqq
(…) (…) (…) (…) (…)

ALGORITMOS Mg. Hugo Caselli Gismondi 52


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

JAVA

Java es un lenguaje de programación de propósito general orientado a objetos que fue


diseñado por James Gosling de Sun Microsystems (posteriormente adquirida por la
compañía Oracle). Su característica principal es permitir que los desarrolladores de
aplicaciones escriban el programa una vez y lo ejecuten en cualquier dispositivo ("write
once, run anywhere") cuyo acrónimo en inglés es WORA, significa que el código que
es ejecutado en una plataforma no tiene que ser recompilado para correr en otra. Java
se ha convertido en uno de los lenguajes de programación más populares en uso, con
unos 10 millones de usuarios reportados.
Oracle tiene dos productos que implementan Java Platform Standard Edition (Java SE)
7: Java SE Development Kit (JDK) 7 y Java SE Runtime Environment (JRE) 7.
JDK 7 es un superconjunto de JRE 7, y contiene todo lo que está en JRE 7, además
de herramientas tales como los compiladores y depuradores necesarios para el
desarrollo de applets y aplicaciones. JRE 7 proporciona las bibliotecas, la Máquina
Virtual de Java (JVM), y otros componentes para ejecutar applets y aplicaciones
escritas en el lenguaje de programación Java.
El siguiente diagrama conceptual ilustra los componentes de los productos de Oracle
Java SE:

ALGORITMOS Mg. Hugo Caselli Gismondi 53


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

NETBEANS

NetBeans es un entorno de desarrollo integrado (integrated development environment:


IDE), hecho principalmente para el lenguaje de programación Java, es un producto
libre y gratuito sin restricciones de uso.

NetBeans es un proyecto de código abierto fundado por Sun MicroSystems en junio de


2000, actualmente Sun Microsystems es administrado por Oracle Corporation.

Plataforma
El marco de trabajo (framework) simplifica el desarrollo de aplicaciones para escritorio
en Java Swing. El paquete de NetBeans IDE para Java SE contiene lo necesario para
desarrollar plugins y aplicaciones basadas en la plataforma NetBeans; no se requiere
un SDK adicional.

Las aplicaciones pueden instalar módulos dinámicamente.

La plataforma ofrece servicios reusables comunes para las aplicaciones de escritorio,


permitiendo a los desarrolladores centrarse en la lógica de sus aplicaciones. Algunas
de las características de la aplicación son:
 Gestión de la interfaz de usuario (menús y barras de herramientas)
 Gestión de configuración de usuario
 Gestión de almacenamiento (guardar o cargar algún tipo de dato)
 Gestión de ventana
 Marco Asistente (soporta diálogos para a paso)
 Librería visual de Netbeans
 Herramientas de desarrollo integrado

Podemos descargarlo desde: https://netbeans.org/downloads/


Teniendo las siguientes posibilidades:

ALGORITMOS Mg. Hugo Caselli Gismondi 54


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

NETBEANS
 Permite compilación incremental
 Es un editor de Composición visual
 Es un Ambiente de Desarrollo Integrado (IDE), que incluye:
 Depurador
 Editor de código fuente
 Explorador de Proyectos y Archivos
 Explorador de Servidores y procesos en ejecución
 Control de Versiones
 Repositorio de Drivers JDBC y ejecutor de comandos SQL
 Tiene Herramientas avanzadas de edición de código que incluyen formato
automático, completado automático e importación de paquetes y corrección
sensitiva.

La interface de Netbeans tiene la siguiente apariencia:

ALGORITMOS Mg. Hugo Caselli Gismondi 55


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

Para elaborar un programa Java, debemos crear un proyecto, para ello seleccionamos
en el menú principal la opción FILE, enseguida New Project …, tal como se ve en el
gráfico que sigue:

En la ventana contextual nos muestra las diferentes categorías de proyecto que se


pueden trabajar, seleccionamos simplemente Java, porque es la que utilizaremos para
las necesidades del curso y en el lado derecho Projects, seleccionamos Java
Application y le damos siguiente (next)

ALGORITMOS Mg. Hugo Caselli Gismondi 56


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

Enseguida le damos nombre al proyecto (Project name) en nuestro caso Prueba, y nos
fijamos que la casilla Create Main Class tenga un check, porque necesitamos que
nuestro proyecto tenga una clase principal que es la que ejecutará el programa que
resuelva un problema en particular.

ALGORITMOS Mg. Hugo Caselli Gismondi 57


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

Al hacer click en Finish tenemos acceso al editor de Netbeas que nos permitirá
escribir código JAVA:
Menú principal

Explorador Navegador Editor de


de proyectos entre objetos sentencias

ALGORITMOS Mg. Hugo Caselli Gismondi 58


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

Semana 10

Las matrices o tablas son arreglos bidimensionales, estos arrays de igual manera son
un conjunto de datos homogéneos de tamaño m x n, esto implica que se deben
referenciar a través de dos índices o subíndices i, j, los cuales deben estar dentro de
los límites: 0 <= i < m y 0 <= j < n.

De igual manera para poder utilizar un arreglo bidimensional debemos separarle


espacio en la memoria, de acuerdo con la necesidad del tratamiento de datos de un
problema particular, para ello es necesario declarar y crear el arreglo de la siguiente
manera:
Declaración: Tipo_dato[][] Nombre_matriz
Creación: Nombre_Matriz nuevo Tipo_dato[m][n]

Declaración y creación en la misma línea: tamaño

Tipo_dato[][] Nombre_Matriz nuevo Tipo_dato[m][n]

Ejemplos:
col 0 col 1 col 2
Matriz A = fila 0 dato00 dato01 dato02
fila 1 dato10 dato11 dato12

Luego puede ser manipulado dentro del código de solución en su forma simple:
A[i][j]
índice de fila índice de columna

Se puede declarar e inicializar el arreglo con valores de la siguiente manera:


entero[][] A {{1, 2, 3, 4},{5, 6, 7, 8}}

Operaciones con Arreglos Bidimensionales


De igual manera que los arreglos unidimensionales, es posible darle mantenimiento a
través de operaciones como el recorrido, búsqueda, modificación, altas y bajas entre
las más básicas y esenciales.

ALGORITMOS Mg. Hugo Caselli Gismondi 59


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

RECORRIDO
Partiremos con el recorrido para la solución de casos básicos. Esto implica el visitar
cada celda fila por fila completando el número de columnas declaradas o inicializadas.

El resultado de la corrida:

EJERCICIOS
1.1 Generar una matriz de 6 x 6, donde sus filas pares sean múltiplos de 2 y las
impares sean múltiplos de 5. Se debe imprimir está tabla. Debe hallar la suma de
todos sus elementos, imprimir los elementos de su diagonal principal.
1.2 Una empresa tiene 6 obreros distribuidos en 3 categorías, ellos conservan la
data de horas extras trabajadas por los 6 obreros cada día durante una semana.
Se sabe la categoría de cada obrero y se conoce el precio de las horas extras
por categorías. Se debe calcular cuánto cobrará cada obrero por horas extras en
la semana y el total pagado por dichas horas.
La data se presenta a continuación:

ALGORITMOS Mg. Hugo Caselli Gismondi 60


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

Horas extra trabajadas por cada obrero en la semana:


día 1 día 2 día 3 día 4 día 5 día 6 día 7
obrero 1 3 2 1 4 5 3 3
obrero 2 4 5 2 3 2 4 1
obrero 3 2 3 2 4 1 4 5
obrero 4 1 4 5 3 3 3 2
obrero 5 3 2 1 3 2 4 1
obrero 6 4 5 2 4 5 3 3

Categoría de cada obrero: Precio horas extras:

Categoría
obrero 1 C
Categoría Precio
obrero 2 A
A 100
obrero 3 B
B 80
obrero 4 B
C 50
obrero 5 C
obrero 6 A

1.3 Una empresa de sondeo de opinión, ha elaborado una encuesta para saber la
intención de voto de los 5 candidatos para la alcaldía provincial, para ellos ha
seccionado en cuatro sectores marcados: norte sur, este y oeste, de los 115
encuestados los resultados ha sido para el candidato 1: 11, 5, 4, 3 por sector
respectivamente, candidato 2: 1, 4, 3, 12, candidato 3: 2, 6, 12, 3, candidato 4:
10, 3, 5, 6, candidato 5: 2, 9, 5, 9. Determine quien tiene el más alto porcentaje
de aceptación y es el probable próximo alcalde de la ciudad. Utilice matrices y
vectores.

ALGORITMOS Mg. Hugo Caselli Gismondi 61


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

Tipos Primitivos en Java


Los resumimos en la siguiente tabla:

TIPO DE Rango Notación


NOMBRE TIPO OCUPA RANGO en DECIMAL
DATO Cientifica

byte Entero 1 byte -27 a 27-1 -128 a 127


15 15
short Entero 2 bytes -2 a 2 -1 -32768 a 32767
-2147483648 a
int Entero 4 bytes -231 a 231-1
2147483647
9223372036854775808 a
long Entero 8 bytes -231 a 231-1
9223372036854775807
Decimal
PRIMITIVOS float 4 bytes 2-149 a (2-2-23)*2127 Muy grande
simple
Decimal 2-107 a (2-2-
double 8 bytes 52 Muy grande
doble )*21023
Carácter
char 2 bytes \u0000' a '\uFFFF' ---
simple
Valor true
boolean 1 byte ---
o false

Elementos Léxicos
Son las palabras reservadas, identificadores, literales, operadores, delimitadores,
comentarios.
 Palabras reservadas
Palabras que tiene un significado concreto en el lenguaje de programación, por lo
que el programador debe evitar el utilizarlos para evitar confusiones y/o errores.
abstract default if private throw
boolean do implements protected throws
break double import public trasient
byte Else instanceof return true
strinctfp enum int short try
case extends interface static void
catch false long super while
char final native swtich
class finally new synchronized
const for null this
continue goto package threadsafe
cast future generic inner byvalue
operator outer rest var

ALGORITMOS Mg. Hugo Caselli Gismondi 62


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

 Identificadores
Se utilizan para nombrar variables, funciones, clases y objetos.
 Variables : para almacenamiento de datos
 Métodos : para especificación de funciones
 Clases : para especificación de objetos
 Interfaces : para especificación de protocolos
 Paquetes : para agrupación de clases

Características
 El primer símbolo del identificador será un carácter alfabético (a, …, z, A, …, Z,
‘_’, ‘$’) pero no un dígito.
 Después del primer carácter, pueden seguir caracteres alfanuméricos (a, …, z)
y (0, 1, …, 9), signos de dólar ‘$’ o guiones de subrayado ‘_’.
 Los identificadores no pueden coincidir con las palabras reservadas.
 Se hace diferencia entre mayúsculas y las minúsculas (case sensitive).
 El signo de dólar y el guion de subrayado se interpretan como una letra más.
 No hay una longitud máxima establecida para el identificador

Ejemplos válidos
a, z124, tu_pila, CoLa, cola, usd$, _miNota

Ejemplos no válidos
134abz, mi nota, Nombre.com

Variables

En Java las variables deben tener un tipo declarado. Para declarar una variable se
coloca en primer lugar el tipo primitivo de dato, seguido del nombre que la
identificará.

Ejemplos:
int valorMaximo; float valorMinimo; char letra1, aula2;

 Literales
Existen literales para:
 Números enteros: Secuencia de dígitos en decimal, octal o hexadecimal
Ejemplos: 124 345667
 Números reales: Secuencia de dígitos con punto decimal o en notación
científica
Ejemplos: 3.1415 3e15
 Valores booleanos: true o false
 Caracteres: un carácter entre comillas simples ‘. Ejemplo: ‘c’
 Cadenas de caracteres: Secuencia de caracteres entre comillas dobles “.
Ejemplos: “Hola Mundo” , “” (cadena vacía)

ALGORITMOS Mg. Hugo Caselli Gismondi 63


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

 Operadores en Java

Aritméticos y de conversión De comparación Lógicos De asignación


i,f + i & i,f == b & =

i,f - i | i,f != b | +=

i,f * i ^ i,f < b ^ -=

i,f / i << i,f <= b && *=

i,f % i >> i,f > b | /=

i,f ++ i >>> i,f >= b ! %=

i,f -- Tipos válidos de los operandos b == &=


i = Entero (byte, small, int, long)
i - f = Punto Flotante (float, double) b != |=
b = Lógico (boolean)
i ~ b ?: ^=
 Delimitadores
( ) PARÉNTESIS: Listas de parámetros en la definición y llamada a métodos,
precedencia en expresiones, expresiones para control de flujo y conversiones de
tipo.
{ } LLAVES: Inicialización de arrays, bloques de código, clases, métodos y ámbitos
locales.
[ ] CORCHETES: Arrays.
; PUNTO Y COMA: Separador de sentencias.
, COMA: Identificadores consecutivos en una declaración de variables y sentencias
encadenadas dentro de una sentencia for.
. PUNTO: Separador de nombres de paquetes, subpaquetes y clases; separador
entre variables y métodos/miembros.
 Comentarios
En Java hay tres tipos de comentarios:
 Comentarios de una sola línea ( // )
Ejemplo: // La fórmula es correcta
 Comentarios de una o más líneas ( /* */ )
Ejemplo:
/* El área de un cuadrado es
lado por lado
sus unidades se nombran al cuadrado */
 Comentarios de documentación ( /** */ )
Ejemplo:
/** El área de un cuadrado es lado por lado

ALGORITMOS Mg. Hugo Caselli Gismondi 64


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

sus unidades se nombran al cuadrado */


La herramienta javadoc genera automáticamente en HTML la documentación
del código a partir de los comentarios /** … */

 Declaración/Inicialización de variables
 Para usar una variable en un programa hay que declararla.
 El ordenador conoce así cómo codificar la información que se va a almacenar
en la posición de memoria correspondiente.
 Al declarar una variable, se reserva el espacio de memoria necesario para
almacenar un valor del tipo de la variable.
 El identificador asociado a la variable se puede utilizar para acceder al dato
almacenado en memoria y para modificarlo.
 Las variables se han de declarar antes de poder usarlas.
 Los identificadores de las variables son los nombres que utilizaremos para
referirnos a ellas.
 Al declarar una variable, hay que definir su tipo: la variable sólo admitirá valores
del tipo especificado.
En una misma declaración se pueden declarar varias variables, siempre que sean
del mismo tipo. En este caso, los identificadores de las variables se separan por
comas. Sintaxis:
<tipo> identificador;
<tipo> lista_de_identificadores ;
final <tipo> identificador = <valor> ; //para constantes

Ejemplo:
 Declaración e inicialización en líneas separadas:
int x;
x = 101;
 Declaración e inicialización en la misma línea:
int x = 101;
 Múltiple Declaración e inicialización en la misma línea:
int i, j = 1, x;

Codificando en JAVA
Implementación en Java del ejemplo 2.1 promedio de notas de la semana 02.

ALGORITMOS Mg. Hugo Caselli Gismondi 65


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

Implementación del programa en JAVA que multiplica 3 números, ejercicio 2.1 de la


semana 02.

Impresión por consola


En JAVA a través del System.out. disponemos de un método llamado println que nos
permite imprimir algo por pantalla en una ventana de consola.

Sintaxis JAVA
System.out.println ("Texto a mostrar");

La primera S de System.out es mayúscula. Si la escribes minúscula obtendrás un error


de compilación.

Si queremos incluir variables concatenamos usando el símbolo + de esta manera:

System.out.println ("El promedio es " + promedio + " puntos");

ESTRUCTURA CONDICIONAL SIMPLE EN JAVA

Sentencia if
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 if. Para la condición emplear los operadores relacionales y lógicos,
presentados en la semana 03 de este manual.

Sintaxis JAVA
if (condición){
Instrucción(es);
}

Esta sentencia utiliza las llaves para agrupar la(s) instrucción(es)

ALGORITMOS Mg. Hugo Caselli Gismondi 66


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

Codificación de Ejemplo 3-1 de la semana 03 de este Manual

ESTRUCTURA CONDICIONAL MULTIPLE EN JAVA

Sentencia if doble
Ampliamos la sintaxis, luego de evaluar la condición (expresión booleana), que de ser
verdadera ejecuta la(s) Instrucción(s) 1, caso contrario (else) se ejecuta la(s)
Instrucción(es) 2. Luego de la evaluación de cualquiera de los casos se sigue con las
instrucciones que siguen en el programa.
Sintaxis JAVA
if (condición){
Instrucción(es) 1; Esta sentencia utiliza las
} else { llaves para agrupar la(s)
Instrucción(es) 2; instrucción(es).
}

Codificación de Ejemplo 3-2 de la semana 03 de este Manual

ALGORITMOS Mg. Hugo Caselli Gismondi 67


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

Sentencia if múltiple
Para el sí condicional múltiple debemos ampliar la sintaxis del condicional doble,
consiguiendo anidar tantas sentencias if como sean necesarias al interior del entonces
o del caso contrario, se sugiere indentar correctamente para mantener la legibilidad del
programa y pueda ser depurado o corregido con mayor facilidad.

Ejemplo de Sintaxis JAVA


if (condición){
if (condición){
Instrucción(es) 1;
} else {
Instrucción(es) 2;
}
} else {
if (condición){
Instrucción(es) 1;
} else {
Instrucción(es) 2;
}
}

Codificación de Ejemplo 4-1 solución (b) de la semana 04 de este Manual

Si desea indentar su código y


este sea ordenado por Netbeans
(herramienta de edición de
código JAVA), click derecho en
el editor de código y utilice la
opción format o su ruta corta.

ALGORITMOS Mg. Hugo Caselli Gismondi 68


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

Entrada y Lectura de Datos con JAVA Scanner


La clase Scanner está disponible a partir de Java 5 y facilita la lectura de datos en los
programas Java.

Para utilizar Scanner en el programa tendremos que hacer lo siguiente:


1. Indicar el import
La clase Scanner se encuentra en el paquete java.util por lo tanto se debe incluir
al inicio del programa la instrucción:
import java.util.Scanner;
2. Crear un objeto Scanner
Tenemos que crear un objeto de la clase Scanner asociado al dispositivo de
entrada. Si el dispositivo de entrada es el teclado escribiremos:
Scanner teclado = new Scanner(System.in);

Se ha creado el objeto teclado asociado al teclado representado por System.in


Una vez hecho esto podemos leer datos por teclado.

Ejemplos de lectura:
Para leer podemos usar el método nextXxx() donde Xxx indica en tipo, por ejemplo
nextInt() para leer un entero, nextDouble() para leer un double, etc.

 Lectura por teclado de un número entero:


int n;
System.out.print("Introduzca un número entero: ");
n = teclado.nextInt();

 Lectura de un número de tipo double:


double x;
System.out.print("Introduzca número de tipo double: ");
x = teclado.nextDouble();
 Lectura de una cadena de caracteres:
String s;
System.out.print("Introduzca texto: ");
s = teclado.nextLine();

EJERCICIOS

Implementar en JAVA los ejercicios de semana 02 y semana 03 de este manual.

ALGORITMOS Mg. Hugo Caselli Gismondi 69


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

Semana 11

ORDENAMIENTO
Es la operación de organizar datos en algún orden secuencial de acuerdo a un criterio
que puede ser creciente o decreciente para los números o ascendente o descendente
(alfabéticamente) para datos de caracteres. El propósito principal de un ordenamiento
es el de facilitar las búsquedas de los miembros del conjunto ordenado.
Ejemplos de ordenamientos: Directorios telefónicos, índices de contenidos, bibliotecas
y diccionarios, etc.
¿Cuándo conviene usar un método de ordenamiento?
Cuando se requiere hacer una cantidad considerable de búsquedas y es importante el
factor tiempo.
1. Método de Inserción Directa
Este método toma cada elemento del arreglo para ser ordenado y lo compara con
los que se encuentran en posiciones anteriores a la de él dentro del arreglo. Si
resulta que el elemento con el que se está comparando es mayor que el elemento
a ordenar, se recorre hacia la siguiente posición superior. Si por el contrario,
resulta que el elemento con el que se está comparando es menor que el elemento
a ordenar, se detiene el proceso de comparación pues se encontró que el
elemento ya está ordenado y se coloca en su posición (que es la siguiente a la del
último número con el que se comparó).
Pseudocódigo
Este procedimiento recibe el arreglo de datos a ordenar A[] y altera las posiciones
de sus elementos hasta dejarlos ordenados de menor a mayor. N representa el
número de elementos que contiene A[ ].
Inicio
A[0] -999 Se inicializa bandera
N 8;K 2 Se inicializa tamaño arreglo e
Repetir hasta K=N inicio inspección
TEMP A[K]
PTR K-1
Mientras TEMP<A[PTR]
A[PTR+1] A[PTR]
PTR PTR-1
Fin_mientras
A[PTR+1] TEMP
K K+1
Fin repetir hasta
Fin

ALGORITMOS Mg. Hugo Caselli Gismondi 70


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

Ejemplo: sea el siguiente arreglo A[8] = { 7, 3, 4, 1, 8, 2, 6, 5 }, N=8

Prueba de Escritorio
A[0] N K TEMP PTR A[PTR] A[PTR+1]
-999 8 2 3 1 7 7
0 -999 3
3 4 2 7 7
1 3 4
4 1 3 7 7
2 4 4
1 3 3
0 -999 1
5 8 4 7 8
6 2 5 8 8
4 7 7

0 -999 -999 -999 -999 -999 -999 -999 -999


1 7 3 3 1
2 3 7 4 3
3 4 4 7 4
4 1 1 1 7
5 8 8 8 8
6 2 2 2 2
7 6 6 6 6
8 5 5 5 5

2. Método De Selección
El método de ordenamiento por selección consiste en encontrar el menor de todos
los elementos del arreglo e intercambiarlo con el que está en la primera posición.
Luego el segundo más pequeño, y así sucesivamente hasta ordenar todo el
arreglo.
Pseudocódigo
Inicio
desde K = 1 hasta N-1 con paso 1 hacer
MIN A[K]
POS K
Desde J = K+1 hasta N con paso 1 hacer
Si MIN>A[J] entonces
MIN A[J]
POS J
Fin _ si
Fin_ repetir_J
TEMP A[K]
A[K] A[POS]
A[POS] TEMP
Fin_desde_K
Fin

ALGORITMOS Mg. Hugo Caselli Gismondi 71


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

Prueba de escritorio

K MIN POS J A[J] TEMP A[K] A[POS]


1 7 1 2 3
1 3 2 3 4
1 3 2 4 1
1 1 4 5 8
1 1 4 6 2
1 1 4 7 6
1 1 4 8 5 7 1 7
2 3 2 3 4
2 3 2 4 7
2 3 2 5 8
2 3 2 6 2
2 2 6 7 6
8 5 3 2 3

1 2 3 4 5 6 7 8
7 3 4 1 8 2 6 5
1 3 4 7 8 2 6 5
1 2 4 7 8 3 6 5

3. Método Burbuja
El bubble sort, también conocido como ordenamiento burbuja, funciona de la
siguiente manera: Se recorre el arreglo intercambiando los elementos adyacentes
que estén desordenados. Se recorre el arreglo tantas veces hasta que ya no haya
cambios. Prácticamente lo que hace es tomar el elemento mayor y lo va
recorriendo de posición en posición hasta ponerlo en su lugar.

Tarea: Implementar el método de la burbuja en JAVA

Búsqueda

La búsqueda es una de las operaciones que aparecen con más frecuencia en


programación de ordenadores. Básicamente, se trata de buscar un elemento
determinado dentro de una colección de N datos, que generalmente se representa
mediante una estructura de tipo vector A[N], donde los tipo de datos pueden ser
entero, real, etc. Esto significa, que dado un argumento de búsqueda, X, se trata de
encontrar el índice i del vector A para el cual se verifica A(i)=X.

1. Búsqueda lineal

Es la solución más obvia y que se aplica cuando no hay ninguna información


adicional acerca de los datos buscados. Consiste en recorrer secuencialmente el

ALGORITMOS Mg. Hugo Caselli Gismondi 72


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

vector hasta encontrar el dato buscado, siendo por tanto las condiciones de
parada: A(i)=X se halló el elemento buscado ó i=N se llegó al final del vector. Se
debe comprobar después si la operación tuvo éxito, o simplemente se llegó al final
del vector.
Pseudocódigo

Inicio
POS 0
desde i = 1 hasta N con paso 1
Si A[i] = t entonces
POS i
Fin_ si
Fin_desde
Fin

2. Búsqueda binaria

La operación de búsqueda puede ser mucho más eficiente si se sabe que los
datos están previamente ordenados. Basta considerar como ejemplo un
diccionario, en el que hacemos una búsqueda gracias a la ordenación alfabética
de las palabras. En otro caso, sería algo completamente inutilizable.
La idea clave consiste en inspeccionar un elemento cualquiera, de índice m
(normalmente en la mitad), y compararlo con el argumento X. Los posibles casos
son:
 A(m)=X.- ha terminado la búsqueda y el índice buscado es m
 A(m)<X.- sabemos que todos los elementos a la izquierda de m son menores
que X, y por tanto pueden ser eliminada esta región de la zona de búsqueda y
considerar sólo la zona derecha (desde m+1 hasta N)
 A(m)>X.- sabemos que todos los elementos a la derecha de m son mayores
que X, y considerar para la búsqueda sólo la zona izquierda (desde 1 hasta m-
1)
 La repetición de este proceso de forma iterativa constituye este algoritmo. Para
ello, se utilizan dos variables de índice, I y D, que marcan los extremos
Izquierdo y Derecho de la zona de búsqueda considerada.

ALGORITMOS Mg. Hugo Caselli Gismondi 73


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

Pseudocódigo
INICIO
Leer X
i 1; j n-1;
m (i+j)\2 /* \ división entera */
Mientras (a[m] <> X y i<j ) hacer
Si X < a[m] entonces
j m-1
caso contrario
i m+1
fin_si
m (i+j)/2 ;
Fin_mientras
Si i >= j entonces
Escribir “Dato buscado no se encuentra”
Caso contrario
Escribir “Dato fue encontrado en
posición “, m;
Fin_si
FIN

SELECCIÓN MULTIPLE
Sentencia Switch … case
La estructura de selección múltiple para casos, que se mostraron tanto en diagrama de
flujo, pseudocódigo y/o diagrama de Nassi-Shneiderman, se implementan en código
Java de acuerdo con la siguiente sintaxis:

Sintaxis JAVA
switch( expresión ){ El valor de la expresión debe ser byte, char,
case valor1: short o int. No puede ser boolean, long,
acción 1; double, float, String o cualquier otra clase de
break; objeto.
case valor2: El valor de la expresión se compara contra
acción 2; la etiqueta de los case, si se encuentra un
break; valor que se empareja, las sentencia que
case valor3: siguen a la etiqueta se ejecutan hasta que
acción 3; se encuentre una sentencia break, la cual
break; nos lleva en secuencia a la siguiente
... sentencia luego del switch.
case valorN: Si no se encuentra pareja con ninguna
acción N; etiqueta, se ejecuta la acción por default
break; siempre y cuando esta haya sido
considerada, sino se continúa con la
[default: siguiente sentencia luego del switch.
acción D; ]
}

ALGORITMOS Mg. Hugo Caselli Gismondi 74


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

Codificación de Ejemplo 4-2 solución de la semana 04 de este Manual

Sentencia for (desde)


La sentencia for 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. La forma general de la instrucción for puede expresarse como sigue:
Sintaxis JAVA for (inicialización; termino; incremento) {
instrucción(es)
}

ALGORITMOS Mg. Hugo Caselli Gismondi 75


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

Cuando se utiliza esta versión de la instrucción for, tener en cuenta que:


La expresión de “inicialización” da inicio al bucle y se ejecuta una vez, luego continúa
con “incremento”, cuando la expresión de “termino” se evalúa como falsa, el bucle
termina.
La expresión de “incremento” se invoca después de cada iteración a través del lazo;
es perfectamente aceptable para esta expresión para incrementar o reducir un valor.

Codificación de Ejemplo 4-3 solución de la semana 04 de este Manual

Codificación de Ejercicio 4-8 solución de la semana 04 de este Manual

ALGORITMOS Mg. Hugo Caselli Gismondi 76


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

Entrada y lectura de Datos con BufferedReader


Con las clases BufferedReader e InputStreamReader, se puede conseguir entrada de
datos en nuestros programas, ambas pertenecen a la librería java.io.
BufferedReader solamente utiliza el método readLine() para la entrada de datos cuyo
retorno es String. Entonces cuando ingresamos un número entero, primero se
entiende como cadena, por lo que debemos convertirlo a entero a través del método
parseInt() de la clase Integer (Integer.parseInt()).
Si acaso un usuario ingresa letras en vez de números se disparará una excepción la
cual debe ser controlada para evitar quiebres en la ejecución de un programa.

Para utilizar BufferedReader debemos hacer lo siguiente:

1. Crear un objeto BufferedReader

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

En java tenemos accesible el teclado desde System.in, que es un InputStream del


que podemos leer bytes.

2. Indicar el import
import java.io.BufferedReader;
Lee texto de un flujo de caracteres de entrada, almacenando
caracteres a fin de proporcionar lectura eficiente de caracteres, matrices
y líneas.
import java.io.IOException;
Señala que se ha producido una excepción de E/S de algún tipo.
Esta clase es la clase general de excepciones producidas por las
operaciones fallidas o interrumpidas de E / S.
import java.io.InputStreamReader;
Es el puente de flujo de bytes de datos, lee los bytes y los decodifica en
caracteres.

Ejemplos de lectura:

 Cadenas
String nombre = br.readLine();

 Enteros
String entrada = br.readLine();
int edad = Integer.parseInt(entrada);
 Reales
double sueldo = Double.parseDouble(br.readLine());

EJERCICIOS

Implementar en JAVA los ejercicios de semana 04 de este manual.

ALGORITMOS Mg. Hugo Caselli Gismondi 77


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

Semana 12

Sentencia While

Esta sentencia ejecuta repetidamente un bloque de sentencias mientras una condición


es verdadera, responde a la siguiente sintaxis JAVA:

Sintaxis JAVA La sentencia while evalúa la condición, que


debe devolver un valor booleano. Si la
condición se evalúa como verdadera, la
while (condición) { sentencia while ejecuta la(s) instrución(es)
en su bloque cuerpo. La sentencia while
instrucción(es); continúa probando la condición y la
} ejecución de su bloque cuerpo hasta que la
condición se evalúa como falsa y se
prosigue con el resto del programa.

NOTA. - Recordar que, con las estructuras repetitivas, son muy útiles los
contadores y acumuladores (ver Semana 05 de este Manual).

Codificación de Ejemplo 5-1 solución de la semana 05 de este Manual

ALGORITMOS Mg. Hugo Caselli Gismondi 78


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

Sentencia Do ... While

La sentencia do … while ejecuta continuamente un bloque de instrucción(es) mientras


una condición particular, es verdadera, caso contrario termina. Su sintaxis se puede
expresar como:

Sintaxis JAVA La sentencia do ... while evalúa primero las


instrucciones contenidas en su cuerpo entre
llaves, luego evalúa la condición, que debe
do { devolver un valor booleano. Si la condición
se evalúa como verdadera, se continúa
instrucción(es); ejecutando la(s) instrucción(es) en su
} while (condición); cuerpo entre llaves hasta que la condición
se evalúa como falsa y se continua con el
resto del programa

Codificación de Ejemplo 5-2 solución de la semana 05 de este Manual

EJERCICIOS

Implementar en JAVA los ejercicios de semana 05 de este manual.

ALGORITMOS Mg. Hugo Caselli Gismondi 79


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

Funciones Matemáticas en JAVA

Como en cualquier otro lenguaje de programación JAVA también facilita una lista de
funciones matemáticas predefinidas, cuya sintaxis genérica es la siguiente:

Sintaxis
Nombre_función(argumento(s))
Dónde:
Nombre_función.- es el nombre de la función matemática, y
Argumento(s).- es la lista de valores necesario(s) que puede ser un
número, una variable u otro función

Todas las funciones matemáticas pertenecen a la clase Math, la cual debe estar en la
cabecera del programa como: import java.lang.math ;
Se invocan siempre de la siguiente manera: Math.Nombre_funcion(argumentos).

En la tabla siguiente se muestran algunas de las funciones matemáticas comprendidas


en la clase Math. Las cuales describiremos brevemente:
Función
Significado Ejemplo de uso Resultado
matemática
abs Valor absoluto int x = Math.abs(2.3); x = 2;
atan Arcotangente double x = Math.atan(1); x = 0.78539816339744;
sin Seno double x = Math.sin(0.5); x = 0.4794255386042;
cos Coseno double x = Math.cos(0.5); x = 0.87758256189037;
tan Tangente double x = Math.tan(0.5); x = 0.54630248984379;
exp Exponenciación neperiana double x = Math.exp(1); x = 2.71828182845904;
log Logaritmo neperiano double x = Math.log(2.7172); x = 0.99960193833500;
pow Potencia double x = Math.pow(2.3); x = 8.0;
round Redondeo double x = Math.round(2.5); x = 3;
random Número aleatorio double x = Math.ramdom(); x = 0.20614522323378;
floor Redondeo al entero menor double x = Math.floor(2.5); x = 2.0;
ceil Redondeo al entero mayor double x = Math.ceil(2.5); x = 3.0;

Las funciones relacionadas con ángulos (atan, cos, sin, tan, etc.) trabajan en radianes.
Por tanto, para operar con grados, tendremos que realizar la conversión oportuna. La
propia clase Math facilita los métodos toRadians para transformar grados
sexagesimales en radianes y toDegrees para transformar radianes en grados
sexagesimales, aunque las conversiones pueden no ser totalmente precisas. Por
ejemplo cos(toRadians(90.0)) debería devolver 0, pero es probable que devuelva un
valor aproximadamente cero pero no exactamente cero debido a que la precisión
decimal no es absoluta.

La función random,permite generar números aleatorios en el rango ]0,1[. Por tanto, el


0 y el 1 están excluidos.

ALGORITMOS Mg. Hugo Caselli Gismondi 80


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

La función exponenciación neperiana o exponenciación de e, matemáticamente


significa ex, que en Java sería Math.exp(x), donde x es un número real y la base es la
constante neperiana e = 2.7172...
La función logaritmo neperiano, matemáticamente significa Ln x, que en Java
correspondería a la expresión Math.log(x).
La función potencia, matemáticamente significa baseexponente, que en Java se
convertiría en Math.pow(base,exponente),donde base y exponente son números
reales, por lo tanto, si queremos obtener la raíz cubica de 2, la instrucción sería
Math.pow(2,0.333) o Math.pow(2, (1.0/3.0))
No hay una función directa para obtener la parte entera de un número real, pero para
estos casos, se puede obtener de la siguiente manera:
int x = (int)(8.7); x = 8;
int x = (int)(-8.7); x = -8;

ALGORITMOS Mg. Hugo Caselli Gismondi 81

S-ar putea să vă placă și