Documentos de Académico
Documentos de Profesional
Documentos de Cultura
(Enfoque algorítmico)
UNIVERSIDAD DE S AN M ARTIN DE PORRES
Facultad de Ingeniería y Arquitectura
(Enfoque algorítmico)
- 2005 -
A mi madre adorada,
por siempre.
“Lo que escucho, lo olvido.
Lo que veo, lo recuerdo.
Pero lo que hago, lo entiendo”
Confucio.
Richard Exley.
AGRADECIMIENTOS
Equipo de trabajo:
• Isabel Rojas Vidal.
• Jorge Condezo Guerra.
• Roberto Pérez Huamaní.
• Ricky Vilcachagua Mosquera.
• Shugeily Pérez Campos.
• Boris Ortega Lescano.
Deseo también hacer extensivo mi agradecimiento a todos los docentes que contribuyeron en
el desarrollo del presente libro, a mi esposa Carmen por revisarlo y corregirlo, y a mi amigo
Omar por diseñar la carátula.
PRESENTACIÓN.
INDICE.
PROLOGO.
PREFACIO.
Introducción ........................................................................................................ 25
Método de las 6’D ............................................................................................... 27
Etapas y pasos ...................................................................................... 28
Resumen del método ............................................................................. 35
Resultado de las etapas del método ...................................................... 36
Marco de trabajo ................................................................................................. 37
Modelamiento ..................................................................................................... 39
Algoritmo ............................................................................................................. 45
Programación ..................................................................................................... 54
Introducción ........................................................................................................ 61
Estructuras de datos.
Variables ................................................................................................ 63
Tipos de datos ....................................................................................... 66
Conversión de datos ……………………………………………………….. 71
Estructuras lógicas.
Estructuras lógicas de secuencia.
Estructuras para la salida de información ESCRIBIR .................. 75
Estructuras para la entrada de datos LEER ................................. 76
Estructuras para operaciones aritméticas y de cálculo ................ 78
Estructuras lógicas de decisión.
Estructuras lógicas de decisión simple SI .................................... 80
Estructuras lógicas de decisión doble SI / SINO .......................... 82
Estructuras lógicas de decisión simple CUANDO ........................ 84
Estructuras lógicas de repetición.
Estructuras lógica de repetición DESDE ...................................... 87
Estructuras lógica de repetición MIENTRAS ................................ 90
Estructuras lógica de repetición HACER ...................................... 93
Instrucciones de bifurcación .................................................................. 97
Mapa de estructuras lógicas detallado .................................................. 98
Método de las 6’D. Etapas y pasos ....................................................... 99
Problemas resueltos en general del 01 al 27 ........................................ 101
Manejo de excepciones ……………………………………………………………… 195
Problemas resueltos del 28 al 31 ………………………………………..... 198
Desarrollo de capacidades lógicas ..................................................................... 207
Problemas resueltos sobre figuras del 32 al 60 ..................................... 209
APÉNDICE.
Problemas propuestos ……………………………………………………... 573
Clase Lectura ......................................................................................... 603
Otras clases Java.
DecimalFormat, Calendar, GregorianCalendar, SimpleDateFormat ...................... 605
Quiero pensar que al aceptar el grato pedido de Juan José Flores Cueto para prologar su
nuevo libro estoy compartiendo o participando de alguna manera en el excelente trabajo que
ha realizado para poner al alcance de estudiantes e informáticos un método para la solución
de problemas utilizando una computadora.
Al reflexionar sobre la tarea que representa escribir un prólogo para este libro, he reparado en
lo difícil que resulta agregar valor al ya presentado por su contenido, pues el texto que mi
joven amigo pone hoy a disposición de nuestros alumnos y también de profesionales de la
especialidad de computación y sistemas, es resultado de la conjunción de varios factores: su
experiencia académica, su desempeño profesional y la constante necesidad de estar
actualizado. Escasamente un año atrás la Facultad de Ingeniería y Arquitectura de la USMP
publicó el primer libro de J. J. Flores Cueto: Método para la solución de Problemas
utilizando la Programación Orientada a Objetos y, una de las muchas razones del éxito
obtenido por esa obra es que desarrolla una metodología para la solución de la gran cantidad
de ejercicios, problemas y aplicaciones que contiene. Este novedoso método está
conformado por seis etapas y cada una de ellas tiene una denominación que comienza con la
letra D, lo que hace que estos seis pasos se puedan recordar fácilmente. Se tuvo en cuenta
primordialmente al usuario y por ello, acertadamente, el método es llamado ahora método de
las 6 D’s; pero es importante comprender que su uso puede extenderse a otros temas y a
problemas con soluciones más complicadas y que para eso se tiene que redefinir algunos de
los pasos de las etapas especificadas en el método. Comprobamos así, que la ópera prima
de Juan José contenía, pues, ya el embrión de la segunda y de aquí, entonces, como
consecuencia, el título del libro que hoy motiva estas líneas: Método de las 6’D: UML –
Pseudocódigo – Java. (Un enfoque algorítmico).
¿Por qué la prisa en publicar esta segunda parte? Sabemos que lo más característico de la
informática es su permanente dinámica, reflejada en la aparición de nuevos paradigmas que
deben aplicarse rápidamente, pero cuya difusión en los textos no tiene la misma celeridad. El
rápido avance de la ciencia y de la tecnología, que para muchos es agobiante, resulta
estimulante para un espíritu como el de este prolífico docente de la USMP. El panorama de la
ingeniería de computación y sistemas evoluciona y cambia mientras trabajamos en ella; al
momento de aparecer su primer libro, nuestro autor sabía ya cuáles eran las nuevas
tendencias que se perfilaban, acumulaba información y escribía sobre ellas, profundizando en
el método de las 6 D’s para presentarnos en tan corto plazo una nueva obra.
Por lo arriba expresado y, por la amistad que me une a Juan José, es para mí sumamente
gratificante escribir estas apreciaciones sobre su segundo libro y le auguro nuevos aportes
como ingeniero y como docente de la USMP.
En este libro se utiliza y se profundiza en el Método de las 6’D, a través del cual se definen
los pasos que se tienen que desarrollar para la solución de un problema utilizando una
computadora, agrupados en seis etapas (Descripción del problema, Definición de la solución,
Diseño de la solución, Desarrollo de la solución, Depuración y pruebas, y Documentación).
Todos los nombres de las etapas del Método de las 6’D comienzan con la letra D (de ahí el
nombre de método).
Capítulo I:
Capítulo II:
Capítulo III:
Capítulo IV:
Capítulo V:
Los temas desarrollados a través de los 5 capítulos que forman parte de esta obra, pueden
ser utilizados de diferente manera de acuerdo a la experiencia de cada persona. Es
importante indicar que el lector tendrá un mejor entendimiento del método empleado en la
solución de los problemas y de todos los conceptos tratados, conforme avance con el
entendimiento de los problemas resueltos y el desarrollo de los problemas propuestos.
1
MÉTODO DE LAS 6’D
Un Enfoque Algorítmico
Temas:
Introducción.
Marco de trabajo.
Modelamiento.
Algoritmo.
Programación.
MÉTODO DE LAS 6’D – Un Enfoque Algorítmico.
CAPÍTULO I
INTRODUCCIÓN
Pag. 25
Ing. Juan José Flores Cueto.
Pag. 26
MÉTODO DE LAS 6’D – Un Enfoque Algorítmico.
Etapa 01
Descripción
Problema
Etapa 02
Definición
Solución n veces
Etapa 03
Ingeniería Reversa
Diseño
Solución
Etapa 04
Desarrollo
Solución
Etapa 05
Depuración
Pruebas
Etapa 06
Document.
Pag. 27
Ing. Juan José Flores Cueto.
ETAPAS Y PASOS
METODO 6’D.
PASOS:
ENUNCIADO
El resultado obtenido en esta etapa es un enunciado claro del problema que se desea
solucionar.
Pag. 28
MÉTODO DE LAS 6’D – Un Enfoque Algorítmico.
METODO 6’D.
PASOS:
ESPECIFICACIONES
El resultado obtenido en esta etapa son las especificaciones de lo que se debe hacer para
solucionar el problema.
Pag. 29
Ing. Juan José Flores Cueto.
METODO 6’D.
PASOS:
Desarrollo de Algoritmos.
DIAGRAMAS Y
ALGORITMOS
El resultado obtenido en esta etapa son los diagramas y los algoritmos que especifican
cómo se debe hacer para solucionar el problema.
Pag. 30
MÉTODO DE LAS 6’D – Un Enfoque Algorítmico.
METODO 6’D.
PASOS:
Codificar el proyecto.
Desarrollar comentarios internos en los
programas de computadora.
Desarrollar copias de seguridad de los
programas de computadora.
PROGRAMAS
El resultado obtenido en esta etapa son los programas y/o clases, codificados en un
lenguaje de programación, que permiten solucionar el problema.
Pag. 31
Ing. Juan José Flores Cueto.
METODO 6’D.
Etapa 05
Luego que se codifiquen los programas y/o clases,
deben ser probados mediante la ejecución de los
Depuración mismos (esto es conocido como corrida del programa).
y Pruebas Al realizarse ésta, pueden surgir diferentes tipos de
errores, siendo los errores de lógica y sintaxis los más
comunes.
PASOS:
Realizar la depuración y verificar la correcta
escritura de los programas.
Realizar pruebas de sintaxis.
Realizar pruebas de lógica.
PRUEBAS
El resultado obtenido en esta etapa son las pruebas que registran el adecuado
funcionamiento de la solución del problema.
Pag. 32
MÉTODO DE LAS 6’D – Un Enfoque Algorítmico.
METODO 6’D.
PASOS:
Recopilar el material generado en cada una
de las etapas anteriores.
Generar el manual del programa.
Generar el manual del usuario.
Manuales
El resultado obtenido en esta etapa son los manuales que permiten un adecuado manejo de
la solución desarrollada.
Pag. 33
Ing. Juan José Flores Cueto.
METODO 6’D.
Adicionalmente es posible realizar “Ingeniería Reversa” entre las Etapas 03, 04 y 05:
DIAGRAMAS
ACTUALIZADOS
Pag. 34
MÉTODO DE LAS 6’D – Un Enfoque Algorítmico.
METODO 6’D.
Pag. 35
Ing. Juan José Flores Cueto.
METODO 6’D.
DIAGRAMAS Y
ENUNCIADO ESPECIFICACIONES PROGRAMAS PRUEBAS
ALGORITMOS
Manuales
Pag. 36
MÉTODO DE LAS 6’D – Un Enfoque Algorítmico.
MARCO DE TRABAJO
Etapa 01
Descripción
Problema
ENUNCIADO
MARCO DE TRABAJO
Etapa 02
Definición
Solución Etapa 03
Diseño
Solución Etapa 04
Desarrollo
Solución
Pag. 37
Ing. Juan José Flores Cueto.
Pag. 38
MÉTODO DE LAS 6’D – Un Enfoque Algorítmico.
MODELAMIENTO
• Visualizar un modelo.
• Especificar un modelo (construir modelos precisos, no ambiguos).
• Construir un modelo en un lenguaje de programación (se establecen
correspondencias con lenguajes Orientados a Objetos, como Java, C++,
Visual Basic...).
• Documentar los componentes de un sistema de software (arquitectura,
requisitos, diseño, pruebas, versiones, planificación...).
• Describir el ciclo de vida completo del desarrollo Orientado a Objetos.
Pag. 39
Ing. Juan José Flores Cueto.
Diagramas de
Clase
Diagramas de
Paquete Diagramas de
Casos de Uso
Diagramas de Objeto
Secuencia
Diagramas de Diagramas de
Colaboración Componentes
Modelo
Diagramas de Diagramas de
Estado Distribución
Diagramas de
Actividad
Pag. 40
MÉTODO DE LAS 6’D – Un Enfoque Algorítmico.
Relación de dependencia
unidireccional.
La dependencia en este caso significa que todas las clases que pertenecen
al paquete “dominioDeLaAplicacion” podrán tener acceso a todas o algunas
de las clases que pertenecen al paquete “biblioteca” (observe el sentido de la
flecha que marca la dependencia unidireccional).
Pag. 41
Ing. Juan José Flores Cueto.
Etapa 03
Diseño
Solución
Pag. 42
MÉTODO DE LAS 6’D – Un Enfoque Algorítmico.
El nombre de la clase y el nombre del paquete deben comenzar con una letra
mayúscula y el resto en minúscula. Si el nombre es compuesto, todas las
primeras letras de los nombres simples que forman el nombre de la clase o
paquete deberán comenzar con mayúscula.
Los nombres de los atributos se escriben en minúscula. En caso que el nombre
sea compuesto, a partir de la segunda palabra se escribe la primera letra en
mayúscula.
Los nombres de los métodos cumplen las mismas características que los
nombres de atributos a excepción de los métodos constructores.
1
La clase Lectura se trata en el Capítulo II y se especifica en el Apéndice.
Pag. 43
Ing. Juan José Flores Cueto.
Pag. 44
MÉTODO DE LAS 6’D – Un Enfoque Algorítmico.
ALGORITMO
Una clase, en su forma más simple, está constituida por atributos y métodos.
Los métodos representan pequeños subprogramas encapsulados dentro de
las clases y contribuyen a definir el comportamiento típico de los objetos.
CARACTERÍSTICAS
Pag. 45
Ing. Juan José Flores Cueto.
HERRAMIENTAS
PSEUDOCODIGO
Un pseudocódigo permite expresar un algoritmo con palabras en castellano
que son semejantes a las sentencias de un lenguaje de programación.
Pautas básicas:
Todo algoritmo debe tener un nombre, el cual deberá comenzar con una
letra mayúscula. Si es un nombre compuesto, la primera letra de cada
palabra simple deberá estar en mayúscula. No se permiten los espacios
en blanco en el nombre del algoritmo (generalmente se utilizará el
nombre de la clase y el nombre del método para referirse a un
determinado algoritmo).
Es necesario que se determinen los datos de entrada y la información de
salida.
Para declarar una variable “x” se deberá determinar qué tipo de dato se
almacenará. Por ejemplo. Si se desea declarar una variable de tipo texto
se realizaría de la siguiente manera: TEXTO x.
Para asignar un valor a una variable “x” se utiliza el signo igual. Por
ejemplo, si se desea asignar 5 a la variable “x” se realizará de la siguiente
manera: x = 5.
Pag. 46
MÉTODO DE LAS 6’D – Un Enfoque Algorítmico.
ENTRADA:
SALIDA: En ENTRADA y SALIDA se
especifican las variables
que se usarán en el
INICIO desarrollo del algoritmo.
…
… Este es el cuerpo del
… algoritmo expresado en
pseudocódigo. Las
… instrucciones se colocan
FIN entre INICIO... FIN.
DIAGRAMA DE FLUJO
FLUJO
Porque muestra la secuencia de lo
que se tiene que realizar.
DIAGRAMA
Por el hecho de ser un dibujo que
no requiere estar a escala.
Pag. 47
Ing. Juan José Flores Cueto.
PROCESO
Utilizado para asignar valores a variables y resultados
de operaciones matemáticas.
ENTRADA / SALIDA
Utilizado para ingresar datos y visualizar la
información que resulta del procesamiento.
INICIO / FIN
Este símbolo permite marcar el inicio y el final del
algoritmo.
CONECTOR
Este símbolo permite que no se crucen los flujos
(líneas) en un diagrama.
FLUJOS (LINEAS)
Líneas que permiten unir los diagramas y mostrar la
secuencia lógica a la solución del problema.
Pag. 48
MÉTODO DE LAS 6’D – Un Enfoque Algorítmico.
GRUPO 1
GRUPO 2
Pag. 49
Ing. Juan José Flores Cueto.
SI (condición)
ENTONCES Permite especificar una estructura de
instrucciones... decisión doble “SI... SINO... FINSI”. Las
SI / SINO
SINO estructuras lógicas serán tratadas en el
instrucciones... capítulo II.
FINSI
DESDE i = valorInicial
HASTA valorFinal
instrucción 1 Permite especificar una estructura de
. repetición “DESDE... FINDESDE”. Las
DESDE
. estructuras lógicas serán tratadas en el
. capítulo II.
instrucción n
FINDESDE
MIENTRAS (condición)
instrucción 1
Permite especificar una estructura de
.
repetición “MIENTRAS...FINMIENTRAS”.
MIENTRAS .
Las estructuras lógicas serán tratadas en
.
el capítulo II.
instrucción n
FINMIENTRAS
HACER
instrucción 1
Permite especificar una estructura de
.
repetición “HACER...FINHACER”. Las
HACER .
estructuras lógicas serán tratadas en el
.
capítulo II.
instrucción n
MIENTRAS (condición)
Pag. 50
MÉTODO DE LAS 6’D – Un Enfoque Algorítmico.
GRUPO 3
GRUPO 4
Pag. 51
Ing. Juan José Flores Cueto.
GRUPO 5
GRUPO 6
Pag. 52
MÉTODO DE LAS 6’D – Un Enfoque Algorítmico.
Etapa 03
Diseño
Solución
Desarrollo de algoritmos.
En este paso, se desarrollará el algoritmo para el método especificado en
la clase, la cual forma parte del paquete “dominioDeLaAplicación”. Para el
desarrollo del algoritmo se utilizará pseudocódigo.
Pag. 53
Ing. Juan José Flores Cueto.
PROGRAMACIÓN
LENGUAJES DE PROGRAMACIÓN
JAVA
Pag. 54
MÉTODO DE LAS 6’D – Un Enfoque Algorítmico.
package NombrePaquete;
class NombreClase {
package
class
Pag. 55
Ing. Juan José Flores Cueto.
Pag. 56
MÉTODO DE LAS 6’D – Un Enfoque Algorítmico.
Etapa 04
Desarrollo
Solución
Codificar el proyecto.
En este paso, se desarrollará la codificación del proyecto. Es decir,
utilizando el lenguaje de programación Java, se traducirá lo especificado
en el modelamiento y en los algoritmos, en sentencias que la computadora
pueda comprender y ejecutar.
Pag. 57
Ing. Juan José Flores Cueto.
Pag. 58
Capítulo
2
Estructuras Fundamentales para la
Solución de Problemas
Temas:
Introducción.
Estructuras de Datos: Variables
• Tipos de datos.
• Conversión de datos.
Estructuras Lógicas:
• Estructuras lógicas de secuencia.
• Estructuras lógicas de decisión.
• Estructuras lógicas de repetición.
• Instrucciones de bifurcación.
• Mapa de estructuras lógicas detallado.
CAPÍTULO II
INTRODUCCIÓN
MARCO DE TRABAJO
ENUNCIADO
DEL
PROBLEMA
Etapa 02
Definición
Solución Etapa 03
Diseño
Solución Etapa 04
Desarrollo
Solución
Pag. 61
Ing. Juan José Flores Cueto.
SE DESARROLLAN UTILIZANDO:
• Estructuras lógicas de secuencia.
• Estructuras lógicas de decisión.
• Estructuras lógicas de repetición.
• Instrucciones de bifucación.
ALMACENADOS EN:
• Estructuras de datos tipo variables.
El presente capítulo, trata sobre las estructuras fundamentales para la solución de problemas.
Es importante mencionar que utilizando las estructuras fundamentales para la solución de
problemas (estructuras lógicas, instrucciones de bifurcación y las estructuras de datos
conocidas como variables), se pueden desarrollar algoritmos de tal forma que estos puedan
ser diseñados en pseudocódigo o diagrama de flujo, para luego ser codificados en un
lenguaje de programación.
Pag. 62
ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS
ESTRUCTURAS DE DATOS
VARIABLES
Definición:
Una variable es una estructura de datos que permite reservar un espacio con la
finalidad de almacenar o guardar temporalmente los datos. Una variable sólo puede
almacenar un dato a la vez. Si se necesita almacenar dos o tres datos, se requerirán
dos o tres variables según sea el caso.
Declarar una variable significa definir el nombre de la variable y el tipo de dato que
podrá almacenar. Generalmente se realiza al inicio de un programa.
La declaración de una variable se debe realizar antes de que ésta pueda ser
utilizada; esto es necesario en los diferentes lenguajes de programación, y Java no es
la excepción.
En Java:
TipoDeDato ListaDeVariables ;
Nombre de variable:
Siempre es necesario que las variables tengan un nombre para poder referirse a ellas
en cualquier parte de un programa. El nombre de una variable deberá comenzar con
una letra minúscula. Si el nombre de la variable está formado por varias palabras, se
deberá escribir con mayúscula la primera letra de cada palabra, a partir de la segunda
palabra que forme parte del nombre. No es válido que el nombre de una variable
tenga espacios en blanco ni caracteres especiales (tales como /()=?¨^* etc).
En pseudocódigo:
Una variable no puede tener el nombre de una regla o pauta
definida. (ejemplo: ESCRIBIR).
En Java:
Pag. 63
Ing. Juan José Flores Cueto.
Es posible que una variable sea definida con un valor inicial y que este valor
posteriormente sea modificado. Es bueno definir con un valor inicial a todas las
variables declaradas en el programa.
En Java:
TipoDeDato variable = valor ;
Para almacenar un valor en una variable se utiliza el nombre con el que esta fue
declarada, a continuación el signo igual, seguido del valor que se desea almacenar.
En Java:
variable = valor ;
Se deberá tener presente que una variable puede almacenar sólo un valor a la vez y
que este valor deberá ser equivalente al tipo de dato con el que se declaró la variable.
Cada vez que almacena un valor en la variable, perderá el valor que anteriormente
tenía esta. Es posible almacenar un valor en una variable en cualquier parte del
programa. El único requisito es que la variable donde se almacene el valor esté
previamente declarada.
El valor de una variable puede también ser sustituido por el resultado de una
operación aritmética o de cálculo. Por ejemplo:
Pag. 64
ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS
En Java:
suma = 7 + 5 ;
Contadores:
Acumuladores:
Interruptores:
Cabe mencionar que en una solución se puede utilizar una o varias variables que
pueden asumir las funciones de contador, acumulador o interruptor.
Pag. 65
Ing. Juan José Flores Cueto.
TIPOS DE DATOS
Definición:
Los tipos de datos permiten declarar las variables. A pesar que en el pseudocódigo y
diagrama de flujo sólo se reconocen tres tipos de datos, en los lenguajes de
programación se tiene una gran variedad de tipos de datos, los cuales están divididos
–generalmente- en dos categorías: básicos o simples y compuestos.
Los tipos de datos básicos se tratarán en este capítulo y constituyen la base para los
tipos de datos compuestos.
Hay que tener presente que las palabras NUMERO, ENTERO, REAL. CARACTER.
TEXTO y LOGICO son reglas utilizadas en el pseudocódigo y diagrama de flujo, por
lo que no podrán ser usadas como nombre de variable. Estos datos nos permiten
definir los tres tipos de variables utilizadas:
Variables numéricas:
Pag. 66
ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS
Ejemplos:
edad = 15
resultado = 5 + 8 * ( 6 – 2)
Variables de texto:
Ejemplos:
nombre = “Pedro”
letra = ‘J’
Variables lógicas:
Ejemplos:
masculino = VERDADERO
estudiante = FALSO
Pag. 67
Ing. Juan José Flores Cueto.
Los tipos de datos básicos o simples de Java son utilizados para declarar las
variables que serán utilizadas en los programas, y forman parte de las palabras
reservadas del lenguaje. Las palabras reservadas que permiten declarar variables
son byte, short, int, long, float, double, char y boolean.
Es importante destacar que estos ocho tipos de datos simples son diferentes, pero
entre ellos se pueden agrupar como datos de tipo NUMERO (byte, short, int, long,
float, double), tipo CARACTER (char) y tipo LOGICO (boolean). Los datos tipo
NUMERO (datos numéricos) se pueden dividir en valores de tipo ENTERO (byte,
short, int, long) y valores de tipo REAL (float, double).
Para representar una cadena de caracteres en Java, se utiliza la clase String. Los
String en Java no son un tipo de dato básico (simple), sino un tipo de dato compuesto
(a pesar de ello, se puede utilizar como un tipo de dato simple para definir datos de
tipo TEXTO en Java). Los valores de los datos de tipo String van entre comillas
dobles (ejemplo; “Hola”) y permite almacenar cadenas de texto, mientras que los de
tipo char van entre comillas simples (ejemplo; ‘K’) y sólo permiten almacenar un solo
caracter.
Las palabras reservadas de Java no pueden ser utilizadas como nombre de variable.
Pag. 68
ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS
Como regla general, una variable solo puede almacenar valores de acuerdo al tipo de
dato con el que fue declarado. Es decir, si se declara una variable con un tipo de dato
específico, solo podrá almacenar valores de dicho tipo de dato. En base a esto, si se
declara una variable con un tipo de dato específico y se intenta almacenar un valor de
distinto tipo, al momento de compilar, el programa indicará un error. Ejemplos:
Clase PrgTipoDato01
package dominioDeLaAplicacion ;
class PrgTipoDato01 {
System.out.println ( numEntero ) ;
}
}
Observación: No se puede almacenar un número real grande (double) en una variable entera (int).
Clase PrgTipoDato02
package dominioDeLaAplicacion ;
class PrgTipoDato02 {
System.out.println ( numRealFloat ) ;
}
}
Observación: No se puede almacenar un número real grande (double) en una variable real (float).
Pag. 69
Ing. Juan José Flores Cueto.
Clase PrgTipoDato03
package dominioDeLaAplicacion ;
class PrgTipoDato03 {
System.out.println ( caracter ) ;
}
}
Observación: No se puede almacenar un valor lógico (boolean) en una variable caracter (char).
Pag. 70
ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS
CONVERSIÓN DE DATOS
Anteriormente se mencionó que por regla general en una variable solo se puede
almacenar un solo valor y este valor debe ser del tipo de dato con el que la variable
fue declarada. Pero como toda regla, esta también tiene su excepción, y la excepción
para estos casos se denomina conversión de datos.
Ejemplos;
Clase PrgTipoDato04
package dominioDeLaAplicacion ;
class PrgTipoDato04 {
int numEntero = 5 ;
long numEnteroGrande ;
// Se visualiza 5
System.out.println ( numEnteroGrande ) ;
}
}
Pag. 71
Ing. Juan José Flores Cueto.
Clase PrgTipoDato05
package dominioDeLaAplicacion ;
class PrgTipoDato05 {
// Se visualiza 97.0
System.out.println ( numReal ) ;
}
}
numReal = numEntero + 5 ;
Lado izquierdo
de la expresión
Pag. 72
ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS
Ejemplo;
Clase PrgTipoDato06
package dominioDeLaAplicacion ;
class PrgTipoDato06 {
System.out.println ( div ) ;
}
}
Clase PrgTipoDato07
package dominioDeLaAplicacion ;
class PrgTipoDato07 {
int div ;
// Se visualiza 6.
System.out.println ( div ) ;
}
}
Finalmente, en el capítulo III se tratán las clases Wrappers que envuelven los tipos de
datos simples y también permiten realizar operaciones de conversión, entre otras.
Pag. 73
Ing. Juan José Flores Cueto.
Pag. 74
ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS
ESTRUCTURAS LÓGICAS
Definición:
Las Estructuras Lógicas de Secuencia son aquellas en las que una instrucción
sigue a otra en secuencia. Las instrucciones se ejecutan una a una de tal modo que,
finalizada la ejecución de una instrucción, se inicia la ejecución de la siguiente hasta
completar la ejecución de todas las instrucciones que forman parte de la secuencia.
Las Estructuras Lógicas de Secuencia son las estructuras lógicas más comunes y
constituyen la base sobre la cual se desarrollan las demás estructuras lógicas.
Tipos:
Definición:
Representación:
- La regla;
ESCRIBIR En pseudocódigo.
- El símbolo;
En diagrama de flujo.
- La clase;
System En Java.
Pag. 75
Ing. Juan José Flores Cueto.
Definición:
Representación:
- La regla;
LEER En pseudocódigo.
- El símbolo;
En diagrama de flujo.
Pag. 76
ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS
- La clase;
Lectura En Java.
Permite ingresar un
leerChar() caracter (una sola letra o
número)
Permite ingresar un
leerInt()
número entero.
Lectura.class
Permite ingresar un
leerLong()
número entero largo.
Permite ingresar un
leerFloat()
número con parte decimal.
Permite ingresar un
leerDouble()
número con parte decimal.
1
Se puede revisar el uso de la clase Math2 en el primer libro del autor, titulado “Método para la solución de
problemas utilizando la programación orientada a objetos – Aspectos básicos”.
Pag. 77
Ing. Juan José Flores Cueto.
Definición:
Representación:
Suma: +
Resta: -
Multiplicación: *
División: /
En Java:
Y lógico: &&
O lógico: ||
Negación: ~
Formatos:
Pseudocódigo
EXPLICACIÓN:
Pag. 78
ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS
Diagrama de Flujo
EXPLICACIÓN:
Instrucciones ...
Pag. 79
Ing. Juan José Flores Cueto.
Definición:
Tipos:
Definición:
Pseudocódigo
EXPLICACIÓN:
Pag. 80
ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS
Si la condición resulta
verdadera, se ejecutan las
VERDADERO instrucciones que se
condición ? encuentran en el flujo
etiquetado con la regla
“VERDADERO”.
... FALSO
instrucciones... Si la condición resulta falsa, se
... sigue el flujo etiquetado con la
regla o pauta “FALSO” y no
se ejecutan las instrucciones
que se encuentran en el flujo
etiquetado con la regla
“VERDADERO”.
Lenguaje de
Programación Java
EXPLICACIÓN:
Pag. 81
Ing. Juan José Flores Cueto.
Definición:
Pseudocódigo
EXPLICACIÓN:
Pag. 82
ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS
Diagrama de Flujo
EXPLICACIÓN:
Si la condición resulta
VERDADERO FALSO verdadera, se ejecutan las
condición ? instrucciones que se
encuentran en el flujo
etiquetado con la regla
“VERDADERO”.
... ...
instrucciones instrucciones
Si la condición resulta falsa,
... ...
se ejecutan las instrucciones
que se encuentran en el flujo
etiquetado con la regla
“FALSO”.
Lenguaje de
Programación Java
EXPLICACIÓN:
Pag. 83
Ing. Juan José Flores Cueto.
Definición:
Pseudocódigo EXPLICACIÓN:
Pag. 84
ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS
Diagrama de Flujo
variable ?
EXPLICACIÓN:
Pag. 85
Ing. Juan José Flores Cueto.
Lenguaje de
Programación Java EXPLICACIÓN:
Cuando se codifique un algoritmo recuerde que se tiene que seguir las reglas del
lenguaje de programación que usará, caso contrario, al momento de ejecutar un
programa, se dará con la sorpresa que tendrá errores de sintaxis.
Pag. 86
ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS
Definición:
Tipos:
Definición:
Pseudocódigo
DESDE i = valorInicial HASTA valorFinal INCREMENTA valor
instrucción 1
.
.
.
instrucción n
FINDESDE
Pag. 87
Ing. Juan José Flores Cueto.
EXPLICACIÓN:
Pag. 88
ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS
Diagrama de Flujo
INCREMENTA x
VERDADERO
...
instrucciones...
...
EXPLICACIÓN:
DESDE i HASTA z
Aquí “i” es la variable índice y “z” es el valor que el índice “i” debe
alcanzar para finalizar la ejecución.
INCREMENTA x
Aquí “x” representa el valor que se incrementará a la variable índice
cada vez que se termine la ejecución de las instrucciones que
forman parte de la estructura.
Pag. 89
Ing. Juan José Flores Cueto.
EXPLICACIÓN:
Definición:
Pag. 90
ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS
Pseudocódigo
MIENTRAS (condición)
instrucción 1
.
.
.
instrucción n
FINMIENTRAS
EXPLICACIÓN:
Pag. 91
Ing. Juan José Flores Cueto.
Diagrama de Flujo
FALSO
condición ?
VERDADERO
...
instrucciones...
...
while (condición) {
sentencias...
}
Pag. 92
ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS
EXPLICACIÓN:
Definición:
Pag. 93
Ing. Juan José Flores Cueto.
Pseudocódigo
HACER
instrucción 1
.
.
.
instrucción n
MIENTRAS (condición)
EXPLICACIÓN:
Pag. 94
ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS
Diagrama de Flujo
...
instrucciones
...
...
VERDADERO
condición ?
FALSO
do {
sentencias...
} while (condición) ;
Pag. 95
Ing. Juan José Flores Cueto.
EXPLICACIÓN:
Pag. 96
ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS
Instrucciones de bifurcación:
1. Instrucción “TERMINAR”.
2. Instrucción “CONTINUAR”
3. Instrucción “RETORNAR”
Pag. 97
Ing. Juan José Flores Cueto.
Estructuras Lógicas.
Pag. 98
ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS
A continuación, se presentan las etapas del Método de las 6’D con sus respectivos pasos.
Dichas etapas y pasos han sido desarrollados en su totalidad en los primeros 22 problemas.
Sin embargo, para los siguientes problemas hasta el final del presente capítulo (capítulo II), y
para los problemas del siguiente capítulo (capítulo III), solo se ha incluido la Etapa 04 –
“Desarrollo de la solución”. Esto permite presentar una mayor cantidad de problemas con
sus respectivas codificaciones.
ENUNCIADO
DEL
PROBLEMA
Etapa 02 Etapa 03 Etapa 04
• Determinar la
información deseada
(salida). • Determinar el nombre del • Codificar el diseño de la
• Determinar los datos proyecto. solución del problema. Se
de entrada (entrada). • Definir los paquetes y utiliza el lenguaje de
• Establecer como se desarrollar el diagrama de programación Java.
solucionará el paquetes respectivo.
problema (proceso). Establecer la dependencia.
(Utilice UML).
• Definir las clases que serán
parte de la solución del
problema. (Utilice UML).
Pag. 99
Ing. Juan José Flores Cueto.
Pag. 100
ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS
Problema 01
Paquete y clase
DominioDeLaAplicacion
PrgMensaje
main()
Pag. 101
Ing. Juan José Flores Cueto.
ENTRADA:
SALIDA: mensaje
FIN
Clase PrgMensaje
package dominioDeLaAplicacion ;
class PrgMensaje {
String mensaje ;
mensaje = “ Hola bienvenido ” ;
System.out.print (mensaje) ;
}
}
Pag. 102
ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS
Análisis de la solución:
En primer lugar, se definió el nombre del proyecto, se estableció el nombre del paquete, el
nombre de la clase y el método main ( ), en el cual se codifica la solución.
A continuación: SALIDA:
SALIDA: mensaje
Pag. 103
Ing. Juan José Flores Cueto.
Finalmente: FIN
Los pasos que están entre las palabras INICIO… FIN constituyen la parte más importante
del algoritmo y es conocido como “cuerpo del algoritmo”.
En primer lugar, observamos que el programa empieza con las siguientes líneas:
Pag. 104
ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS
package dominioDeLaAplicacion ;
Esta línea especifica el paquete al cual pertenecerá la clase que se creará con la palabra
reservada class.
class PrgMensaje {
Observe que en la línea de código anterior se utiliza la palabra reservada class, lo cual
nos indica que se declara una clase.
Pag. 105
Ing. Juan José Flores Cueto.
Esta línea de código es conocida como la firma del método main ( ) o método principal.
Toda clase en Java, que deseamos tenga la posibilidad de ejecutarse, deberá tener un
método main ( ) exactamente como ha sido escrito, debido a que Java diferencia las letras
mayúsculas de las letras minúsculas.
En resumen, podemos decir que para desarrollar un programa básico en Java necesitamos
definir un paquete, una clase y un método principal o método main ( ).
package dominioDeLaAplicacion ;
class PrgMensaje {
}
}
String mensaje ;
A través de esta línea se declara el uso de la variable mensaje de tipo TEXTO o cadena.
En Java, todas las variables deben ser declaradas antes de ser utilizadas (lo que no es
necesario realizar en las herramientas utilizadas para diseñar algoritmos). Además,
también se debe especificar el tipo de dato que la variable puede almacenar.
En este caso, el tipo de la variable mensaje es TEXTO o cadena. En Java, para declarar
una variable de tipo TEXTO o cadena, se debe de anteponer al nombre de la variable la
palabra String.
Pag. 106
ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS
variable, se utiliza el signo igual ( = ). En Java se crea una cadena cuando se encierra una
secuencia de caracteres entre comillas. De esta manera, “ Hola bienvenido ” es una
cadena.
System.out.print (mensaje) ;
Esta es una sentencia de salida por la consola. Hace que el valor de la variable mensaje
se visualice por la pantalla. De hecho, también uno puede visualizar cadenas y los
resultados de operaciones matemáticas.
}
}
De esto se deduce, que las siguientes líneas de código se utilizarán en todos los programas que
se desarrollen. Sólo variará el nombre del paquete y el nombre de la clase que, en este caso, es
dominioDeLaAplicacion y PrgMensaje respectivamente.
package dominioDeLaAplicacion ;
class PrgMensaje {
}
}
Pag. 107
Ing. Juan José Flores Cueto.
Problema 02
Paquete y clase
DominioDeLaAplicacion
PrgOperaciones
main()
Pag. 108
ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS
ENTRADA:
SALIDA: suma, multi, resta,divi
INICIO
NUMERO num1=9121236, num2=735
NUMERO suma, multi, resta, divi
Clase PrgOperaciones
package dominioDeLaAplicacion;
class PrgOperaciones {
Pag. 109
Ing. Juan José Flores Cueto.
Problema 03
Diagrama de paquetes
Pag. 110
ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS
Clases Clases
dominioDeLaAplicacion biblioteca
INICIO
ESCRIBIR soles
FIN
Pag. 111
Ing. Juan José Flores Cueto.
Clase PrgDolaresSoles
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgDolaresSoles {
}
}
Pag. 112
ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS
Problema 04
nf = ( n1 + n2 + n3 + ( n4 * 2) ) / 5
Diagrama de paquetes
Pag. 113
Ing. Juan José Flores Cueto.
Clases Clases
dominioDeLaAplicacion biblioteca
INICIO
NUMERO n1 = 0, n2 = 0, n3 = 0, n4 = 0
nf = ( n1 + n2 + n3 + ( n4 * 2 ) ) / 5
ESCRIBIR nf
FIN
Pag. 114
ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS
Clase PrgNotaFinal
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgNotaFinal {
double n1 = 0, n2 = 0, n3 = 0, n4 = 0, nf = 0 ;
nf = ( n1 + n2 + n3 + ( n4 * 2)) / 5 ;
}
}
Pag. 115
Ing. Juan José Flores Cueto.
Problema 05
Diagrama de paquetes
Pag. 116
ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS
Clases Clases
dominioDeLaAplicacion biblioteca
ENTRADA: sueldo
SALIDA: desc, pago
INICIO
LEER sueldo
FIN
Pag. 117
Ing. Juan José Flores Cueto.
Clase PrgSueldoObrero
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgSueldoObrero {
}
}
Pag. 118
ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS
Problema 06
Diagrama de paquetes
Pag. 119
Ing. Juan José Flores Cueto.
Clases Clases
dominioDeLaAplicacion biblioteca
ENTRADA: gradosCel
SALIDA: gradosFar
INICIO
LEER gradosCel
gradosFar = ( 9 / 5 ) * gradosCel + 32
ESCRIBIR gradosFar
FIN
Pag. 120
ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS
Clase PrgTemperatura
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgTemperatura {
gradosCel = Lectura.leerDouble ( ) ;
gradosFar = ( 9 / 5 ) * gradosCel + 32 ;
Pag. 121
Ing. Juan José Flores Cueto.
Problema 07
Diagrama de paquetes
Pag. 122
ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS
Clases Clases
dominioDeLaAplicacion biblioteca
INICIO
ESCRIBIR utilidad
FIN
Pag. 123
Ing. Juan José Flores Cueto.
Clase PrgUtilidad
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgUtilidad {
Pag. 124
ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS
Problema 08
Calcular y mostrar la nota final (nf) de un alumno, sabiendo que se tienen sólo dos
notas. Si el alumno obtiene una nota final mayor a 13 se deberá visualizar un mensaje
de felicitaciones.
nf = ((nota1 + nota2) / 2)
Diagrama de paquetes
Pag. 125
Ing. Juan José Flores Cueto.
Clases Clases
dominioDeLaAplicacion biblioteca
INICIO
TEXTO mensaje = “ ”
nf = (nota1 + nota2) / 2
SI ( nf > 13 )
ENTONCES
mensaje = “Felicitaciones”
FINSI
FIN
Pag. 126
ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS
Clase PrgNotaFinal2
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgNotaFinal2 {
nf = (nota1 + nota2) / 2 ;
Pag. 127
Ing. Juan José Flores Cueto.
Problema 09
Diagrama de paquetes
Pag. 128
ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS
Clases Clases
dominioDeLaAplicacion biblioteca
INICIO
ESCRIBIR sueldo
FIN
Pag. 129
Ing. Juan José Flores Cueto.
Clase PrgSueldoTrabajador
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgSueldoTrabajador {
int horas = 0 ;
double tarifa = 0, sueldo = 0 ;
}
}
Pag. 130
ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS
Problema 10
Calcular y mostrar el monto total a pagar por la compra de varios artículos si se tiene
que agregar el IGV (Impuesto General a las Ventas). En caso que el monto total a
pagar incluido IGV sea mayor a S/.500 nuevos soles se aplica un descuento de 8%,
caso contrario el descuento será de 2%.
Diagrama de paquetes
Pag. 131
Ing. Juan José Flores Cueto.
Clases Clases
dominioDeLaAplicacion biblioteca
ENTRADA: montoTotal
SALIDA: montoPago
INICIO
LEER montoTotal
ESCRIBIR montoPago
FIN
Pag. 132
ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS
Clase PrgArticulos
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgArticulos {
}
}
Pag. 133
Ing. Juan José Flores Cueto.
Problema 11
Categoría Aumento
1 25 %
2 15 %
3 10 %
4 05 %
Diagrama de paquetes
Pag. 134
ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS
Clases Clases
dominioDeLaAplicacion biblioteca
INICIO
FINCUANDO
ESCRIBIR nuevoSueldo
FIN
Pag. 135
Ing. Juan José Flores Cueto.
Clase PrgAumentoSueldo
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgAumentoSueldo {
switch (categoria) {
case 1:
nuevoSueldo = sueldo * 1.25 ;
break ;
case 2:
nuevoSueldo = sueldo * 1.15 ;
break ;
case 3:
nuevoSueldo = sueldo * 1.10 ;
break ;
case 4:
nuevoSueldo = sueldo * 1.05 ;
break ;
default:
nuevoSueldo = sueldo ;
}
Pag. 136
ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS
Problema 12
Pag. 137
Ing. Juan José Flores Cueto.
Diagrama de paquetes
Clases Clases
dominioDeLaAplicacion biblioteca
Pag. 138
ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS
INICIO
CASO 1 :
costoTotal = 200 * dias
SI (sexo = 2 )
ENTONCES
costoTotal = costoTotal * 1.10
FINSI
TERMINAR
CASO 2 :
costoTotal = 350 * dias
TERMINAR
CASO 3 :
costoTotal = 420 * dias
SI ( sexo = 1 )
ENTONCES
costoTotal = costoTotal * 1.05
FINSI
FINCUANDO
ESCRIBIR costoTotal
FIN
Pag. 139
Ing. Juan José Flores Cueto.
Clase PrgHospital
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgHospital {
switch ( tipoEnfermedad) {
case 1 :
costoTotal = 200 * dias ;
if ( sexo == 2 ) {
costoTotal = costoTotal * 1.10 ;
}
break ;
case 2 :
costoTotal = 350 * dias ;
break ;
case 3 :
costoTotal = 420 * dias ;
if ( sexo == 1 ) {
costoTotal = costoTotal * 1.05 ;
}
}
Pag. 140
ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS
Problema 13
Diagrama de paquetes
Pag. 141
Ing. Juan José Flores Cueto.
INICIO
SINO
SINO
mayor = n3
intermedio = n2
menor = n1
FINSI
FINSI
ESCRIBIR menor, intermedio, mayor
FIN
Pag. 142
ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS
Clase PrgOrdena
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgOrdena {
Pag. 143
Ing. Juan José Flores Cueto.
Problema 14
Rango Categoria
Desde 17 a 20 A
Desde 14 a 16 B
Desde 10 a 13 C
Desde 00 a 09 D
Pag. 144
ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS
Diagrama de paquetes
Clases Clases
dominioDeLaAplicacion biblioteca
Pag. 145
Ing. Juan José Flores Cueto.
INICIO
NUMERO n1 = 0, n2 = 0, n3 = 0, n4 = 0, n5 = 0, sumaNotas = 0
NUMERO notaMenor = 0, promedio = 0
TEXTO categoria = ‘ ’
sumaNotas = n1 + n2 + n3 + n4 + n5
notaMenor = n1
SI (notaMenor>n2) ENTONCES
notaMenor = n2
FINSI
SI (notaMenor > n3) ENTONCES
notaMenor = n3
FINSI
SI (notaMenor > n4) ENTONCES
notaMenor = n4
FINSI
SI (notaMenor > n5) ENTONCES
notaMenor = n5
FINSI
promedio = (sumaNotas - notaMenor) / 4
SI (promedio <= 20 AND promedio >= 17)
ENTONCES
categoria = ‘A’
SINO
SI (promedio <= 16 AND promedio >= 14)
ENTONCES
categoria = ‘B’
SINO
SI (promedio <= 13 AND promedio >= 10)
ENTONCES
categoria = ‘C’
SINO
SI (promedio<=10 AND promedio>=0)
ENTONCES
categoria = ‘D’
FINSI
FINSI
FINSI
FINSI
ESCRIBIR categoria
FIN
Pag. 146
ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS
Clase PrgCategoriaAlumno
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgCategoriaAlumno {
double n1 = 0, n2 = 0, n3 = 0, n4 = 0, n5 = 0, sumaNotas = 0 ;
double notaMenor = 0, promedio = 0 ;
char categoria = ‘ ’ ;
Pag. 147
Ing. Juan José Flores Cueto.
Problema 15
Diagrama de paquetes
Pag. 148
ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS
Clases Clases
dominioDeLaAplicacion biblioteca
INICIO
NUMERO edad = 0
TEXTO sexo = ‘F’, categoria = 0
CASO ‘f’:
CASO ‘F’:
SI (edad < 23) ENTONCES
categoria = “FA”
SINO
categoria = “FB”
FINSI
TERMINAR
CASO ‘m’:
CASO ‘M’:
SI (edad < 25) ENTONCES
categoria = “MA”
SINO
categoria = “MB”
FINSI
FINCUANDO
ESCRIBIR categoria
FIN
Pag. 149
Ing. Juan José Flores Cueto.
Clase PrgCategoriaPostulante
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgCategoriaPostulante {
int edad = 0 ;
char sexo = ‘F’ ;
String categoria = “ ” ;
switch (sexo) {
case ‘f’ :
case ‘F’ :
if (edad < 23)
categoria = “FA” ;
else
categoria = “FB” ;
break ;
case ‘m’ :
case ‘M’ :
if (edad < 25)
categoria = “MA” ;
else
categoria = “MB” ;
}
System.out.println ( “ La categoría del postulante es: ” + categoria ) ;
}
}
Pag. 150
ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS
Problema 16
Calcular la nota final de todos los alumnos del curso utilizando la siguiente fórmula:
nf = ( n1 + n2 + n3 + ( n4 * 2 ) ) / 5
Ingresar las notas a través del teclado. Utilizar la estructura lógica MIENTRAS.
nf = ( n1 + n2 + n3 + ( n4 * 2 ) ) / 5.
Diagrama de paquetes
Pag. 151
Ing. Juan José Flores Cueto.
Clases Clases
dominioDeLaAplicacion biblioteca
INICIO
NUMERO i = 1, n1 = 0, n2 = 0, n3 = 0, n4 = 0, nf = 0
NUMERO numAlumnos = 1
LEER numAlumnos
nf = ( n1 + n2 + n3 + ( n4 * 2 ) ) / 5
ESCRIBIR nf
i=i+1
FINMIENTRAS
FIN
Pag. 152
ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS
Clase PrgNotasAlumnos
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgNotasAlumnos {
int i = 1, numAlumnos = 0 ;
double n1= 0, n2 = 0, n3 = 0, n4 = 0, nf = 0 ;
nf = ( n1 + n2 + n3 + ( n4 * 2 ) ) / 5 ;
System.out.println ( “ Nota final del alumno [” + i + “]: ” + nf ) ;
i ++ ;
}
}
}
Pag. 153
Ing. Juan José Flores Cueto.
Problema 17
Calcular la nota final de todos los alumnos del curso utilizando la siguiente fórmula:
nf = ( n1 + n2 + n3 + ( n4 * 2 ) ) / 5.
Ingresar las notas a través del teclado. Utilizar la estructura lógica HACER.
nf = ( n1 + n2 + n3 + ( n4 * 2 ) ) / 5.
Diagrama de paquetes
Pag. 154
ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS
Clases Clases
dominioDeLaAplicacion biblioteca
INICIO
NUMERO i = 1, n1 = 0, n2 = 0, n3 = 0, n4 = 0, nf = 0
TEXTO continua = ‘ ’
HACER
nf = ( n1 + n2 + n3 + ( n4 * 2 ) ) / 5
ESCRIBIR nf
LEER continua
i=i+1
FIN
Pag. 155
Ing. Juan José Flores Cueto.
Clase PrgNotasAlumnos2
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgNotasAlumnos2 {
int i = 1 ;
double n1 = 0, n2 = 0, n3 = 0, n4 = 0, nf = 0 ;
char continua = ‘ ’ ;
do {
nf = ( n1 + n2 + n3 + ( n4 * 2 ) ) / 5 ;
i++ ;
Pag. 156
ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS
Problema 18
Determinar la suma de sueldos de los obreros (categoría 1), la suma de sueldos de los
empleados (categoría 2) y la suma de sueldos de los gerentes (categoría 3) de una
determinada empresa. Adicionalmente, determinar cuál es el mayor y el menor sueldo
en la empresa.
Pag. 157
Ing. Juan José Flores Cueto.
Diagrama de paquetes
Clases Clases
dominioDeLaAplicacion biblioteca
Pag. 158
ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS
INICIO
HACER
LEER categoria
FIN
Pag. 159
Ing. Juan José Flores Cueto.
Clase PrgSueldoCategoria
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgSueldoCategoria {
do {
System.out.println ( “ Ingrese la categoría del trabajador : ” ) ;
categoria = Lectura.leerInt ( ) ;
if ( categoria != 0 ) {
System.out.println ( “ Ingrese el sueldo del trabajador : ” ) ;
sueldo = Lectura.leerDouble ( ) ;
if ( i == 1) {
i=0;
mayorSueldo = sueldo ;
menorSueldo = sueldo ;
} else {
if (sueldo < menorSueldo ) {
menorSueldo = sueldo ;
}
if (sueldo > mayorSueldo ) {
mayorSueldo = sueldo ;
}
}
switch (categoria) {
case 1:
sueldo1 = sueldo1 + sueldo ;
break ;
case 2:
sueldo2 = sueldo2 + sueldo ;
break ;
case 3:
sueldo3 = sueldo3 + sueldo ;
}
}
} while (categoria != 0 ) ;
Pag. 160
ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS
Problema 19
Calcular y mostrar el número de alumnos que tienen promedio final menor que 10, los
alumnos que tiene promedio final entre 10 y 14, los alumnos que tienen promedio final
entre 15 y 18, y los alumnos que tienen promedio final mayor que 18. Ingresar las 4
notas de cada alumno y calcular su promedio final en base a la siguiente fórmula:
nf = ( n1 + n2 + n3 + ( n4 * 2 ) ) / 5.
nf = ( n1 + n2 + n3 + ( n4 * 2 ) ) / 5.
Pag. 161
Ing. Juan José Flores Cueto.
Diagrama de paquetes
Clases Clases
dominioDeLaAplicacion biblioteca
Pag. 162
ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS
INICIO
NUMERO n1 = 0, n2 = 0, n3 = 0, n4 = 0, nf = 0, numAlumnos = 0
NUMERO i = 1, total1 = 0 , total2 = 0 , total3 = 0 , total4 = 0
LEER numAlumnos
HACER
LEER n1
MIENTRAS (n1 < 0 OR n1> 20)
HACER
LEER n2
MIENTRAS (n2 < 0 OR n2 > 20)
HACER
LEER n3
MIENTRAS (n3 < 0 OR n3 > 20)
HACER
LEER n4
MIENTRAS (n4 < 0 OR n4 > 20)
nf = (n1 + n2 + n3 + ( n4 * 2 ) ) / 5
FINMIENTRAS
FIN
Pag. 163
Ing. Juan José Flores Cueto.
Clase PrgNotasRango
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgNotasRango {
do {
System.out.println ( “ Ingrese nota 1 del alumno [” + i + “]: ”);
n1 = Lectura.leerDouble ( ) ;
} while ((n1 < 0 || n1 > 20) ;
do {
System.out.println ( “ Ingrese nota 2 del alumno [” + i + “]: ”);
n2 = Lectura.leerDouble ( ) ;
} while ((n2 < 0 || n2 > 20) ;
do {
System.out.println ( “ Ingrese nota 3 del alumno [” + i + “]: ”);
n3 = Lectura.leerDouble ( ) ;
} while (( n3 < 0 || n3 > 20 ) ;
do {
System.out.println ( “ Ingrese nota 4 del alumno [” + i + “]: ”);
n4 = Lectura.leerDouble ( ) ;
} while (( n4 < 0 || n4 > 20 ) ;
nf = (n1 + n2 + n3 + ( n4 * 2) ) / 5 ;
Pag. 164
ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS
Problema 20
Elaborar una solución que permita controlar la venta de boletos en un determinado día en un
teatro de la capital, en base a la siguiente información:
• Al comenzar, se leerá una sola vez el precio de entrada para palco, platea y
mezanine.
• Por cada entrada vendida se leerá los siguientes datos: número de boleto y lugar
(puede ser platea, palco o mezanine).
• El programa terminará cuando el número de boleto sea igual a cero.
• Antes de finalizar, se deberá proporcionar la siguiente información:
• Número total de entradas vendidas durante el día.
• El total de soles recaudados en el día.
• Número de entradas vendidas para platea, palco y mezanine en el día.
Pag. 165
Ing. Juan José Flores Cueto.
Diagrama de paquetes
Clases Clases
dominioDeLaAplicacion biblioteca
Pag. 166
ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS
INICIO
HACER
HACER
LEER numBoleto
MIENTRAS ( numBoleto < 0)
SI ( numBoleto <> 0 )
ENTONCES
HACER
LEER tipo
MIENTRAS (tipo < 1 OR tipo >3)
ESCRIBIR totalVendidas
ESCRIBIR totalGanancia
ESCRIBIR totalPla, totalPal, totalMez
FIN
Pag. 167
Ing. Juan José Flores Cueto.
Clase PrgTeatro
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgTeatro {
if ( numBoleto != 0) {
do {
System.out.println ( “ Ingrese el lugar ” ) ;
System.out.println ( “ [1] Platea, [2] Palco [3] Mezanine ” ) ;
tipo = Lectura.leerInt ( ) ;
} while (tipo < 1 || tipo > 3) ;
switch ( tipo) {
case 1 :
totalPla ++ ; break ;
case 2 :
totalPal ++ ; break ;
case 3 :
totalMez ++ ;
}
}
} while ( numBoleto != 0 ) ;
Pag. 168
ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS
Problema 21
Los empleados de una fábrica trabajan en tres turnos; mañana, tarde y noche. Se
desea calcular el jornal diario de cada empleado teniendo en cuenta lo siguiente:
Pag. 169
Ing. Juan José Flores Cueto.
Diagrama de paquetes
Clases Clases
dominioDeLaAplicacion biblioteca
Pag. 170
ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS
INICIO
NUMERO numEmpleados = 0, i = 0, horas = 0, dia = 0, turno = 0
NUMERO tarifa = 0, jornal = 0
HACER
LEER numEmpleados
SI (numEmpleados <= 0) ENTONCES
ESCRIBIR “ Número empleados mayor a 0. ”
FINSI
MIENTRAS (numEmpleados <= 0)
MIENTRAS (i < numEmpleados)
i=i+1
HACER
LEER horas
SI (horas <= 0) ENTONCES
ESCRIBIR “ Número horas mayor a 0. ”
FINSI
MIENTRAS (horas <= 0)
HACER
LEER dia
SI (dia < 1 OR dia > 7)
ENTONCES
ESCRIBIR “ La opción no es válida. ”
FINSI
MIENTRAS (dia < 1 OR dia > 7)
HACER
LEER turno
CUANDO turno SEA:
CASO 1:
CASO 2:
SI (dia = 7)
ENTONCES
tarifa = 1.5 * 8
SINO
tarifa = 8
FINSI
TERMINAR
CASO 3:
SI (dia = 7)
ENTONCES
tarifa = 1.6 * 10
SINO
tarifa = 10
FINSI
TERMINAR
OTROS
ESCRIBIR “opción no válida”
FINCUANDO
MIENTRAS (turno <>1 AND turno <>2 AND turno <>3)
Pag. 171
Ing. Juan José Flores Cueto.
SI (turno = 2)
ENTONCES
jornal = horas * tarifa + 10
SINO
jornal = horas * tarifa
FINSI
ESCRIBIR jornal
FINMIENTRAS
FIN
Clase PrgJornal
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgJornal {
do {
System.out.print ( “ Ingrese el número de empleados: ”) ;
numEmpleados = Lectura.leerInt ( ) ;
if (numEmpleados <= 0)
System.out.println ( “ El número de empleados debe ser mayor a 0 ” ) ;
} while (numEmpleados <= 0) ;
i++ ;
do {
System.out.print ( “ Ingrese horas trabajadas empleado [” + i + “]: ” ) ;
horas = Lectura.leerInt ( ) ;
if (horas <= 0 )
System.out.println ( “ Número de horas mayor a 0 ” ) ;
} while (horas <= 0) ;
Pag. 172
ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS
Clase PrgJornal
do {
System.out.println ( “ Seleccione día trabajado empleado [“ + i + ”]: ” ) ;
System.out.println ( “ [1] Lunes ” ) ;
System.out.println ( “ [2] Martes ” ) ;
System.out.println ( “ [3] Miércoles ” ) ;
System.out.println ( “ [4] Jueves ” ) ;
System.out.println ( “ [5] Viernes ” ) ;
System.out.println ( “ [6] Sábado ” ) ;
System.out.println ( “ [7] Domingo ” ) ;
System.out.print( “ Opción: ” ) ;
dia = Lectura.leerInt ( ) ;
if (dia < 1 || dia > 7)
System.out.println ( “ La opción no es válida ”) ;
} while (dia < 1 || dia > 7) ;
do {
System.out.println ( “ Seleccione el turno del empleado: ”) ;
System.out.println ( “ [1] Mañana ”) ;
System.out.println ( “ [2] Tarde ”) ;
System.out.println ( “ [3] Noche ”) ;
System.out.print ( “ Opción: ”) ;
turno = Lectura.leerInt ( ) ;
switch (turno) {
case 1 :
case 2 :
if (dia == 7)
tarifa = 1.5 * 8 ;
else
tarifa = 8 ;
break ;
case 3 :
if (dia == 7)
tarifa = 1.6 * 10 ;
else
tarifa = 10 ;
break ;
default :
System.out.println ( “ La opción no es válida ”) ;
}
} while (turno != 1 && turno != 2 && turno != 3) ;
if (turno == 2)
jornal = horas * tarifa + 10 ;
else
jornal = horas * tarifa ;
Pag. 173
Ing. Juan José Flores Cueto.
Problema 22
Pag. 174
ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS
Diagrama de paquetes
Clases Clases
dominioDeLaAplicacion biblioteca
Pag. 175
Ing. Juan José Flores Cueto.
INICIO
HACER
i=i+1
HACER
LEER sexo
SI ( sexo <> ‘f’ AND sexo <> ‘F’ AND sexo <> ‘m’ AND sexo<> ‘M’ )
ENTONCES
ESCRIBIR “ El sexo no es válido. ”
FINSI
MIENTRAS ( sexo<> ‘f’ AND sevo<> ‘F’ AND sexo<> ‘m’ AND sexo<> ‘M’ )
HACER
LEER edad
SI (edad <= 0)
ENTONCES
ESCRIBIR “ La edad no es válida. ”
FINSI
MIENTRAS (edad <= 0)
HACER
LEER nota
SI (nota < 0 OR nota > 20)
ENTONCES
ESCRIBIR “ La nota no es válida. ”
FINSI
MIENTRAS (nota < 0 OR nota > 20)
CUANDO sexo SEA:
CASO ‘f’:
CASO ‘F’:
matriculadas = matriculadas + 1
SI (edad < 20)
ENTONCES
menores = menores + 1
FINSI
SI (nota < 11)
ENTONCES
desaprobadas = desaprobadas + 1
FINSI
TERMINAR
Pag. 176
ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS
CASO ‘m’:
CASO ‘M’:
matriculados = matriculados + 1
FINCUANDO
HACER
LEER rpta
SI ( rpta <> ‘s’ AND rpta <> ‘S’ AND rpta <> ‘n’ AND rpta <> ‘N’ )
ENTONCES
ESCRIBIR “ La opción no es válida. ”
FINSI
MIENTRAS ( rpta <> ‘s’ AND rpta <> ‘S’ AND rpta <> ‘n’ AND rpta <> ‘N’ )
ESCRIBIR matriculadas
ESCRIBIR matriculados
ESCRIBIR menores
ESCRIBIR mayores
ESCRIBIR aprobados
ESCRIBIR desaprobadas
FIN
Pag. 177
Ing. Juan José Flores Cueto.
Clase PrgClase
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgClase {
do {
i ++ ;
do {
System.out.println ( “ Ingrese sexo alumno [” + i + “] matriculado [F/M]: ” ) ;
sexo = Lectura.leerChar ( ) ;
if ( sexo != ‘f’ && sexo != ‘F’ && sexo != ‘m’ && sexo != ‘M’ )
System.out.println ( “ Sexo no válido. ”) ;
} while ( sexo != ‘f’ && sexo != ‘F’ && sexo != ‘m’ && sexo != ‘M’ ) ;
do {
System.out.println ( “ Ingrese la edad del alumno [” + i + “]: ” ) ;
edad = Lectura.leerInt ( ) ;
if (edad <= 0)
System.out.println ( “ Edad no válida. ” ) ;
switch (sexo) {
case ‘f’ :
case ‘F’ :
matriculadas += 1 ;
Pag. 178
ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS
Clase PrgClase
case ‘m’ :
case ‘M’ :
matriculados += 1 ;
if (edad > 18)
mayores += 1 ;
if (nota > 10)
aprobados += 1 ;
}
do {
System.out.println ( “ ¿Desea ingresar un nuevo alumno [S/N]?: ” ) ;
rpta = Lectura.leerChar ( ) ;
if ( rpta != ‘s’ && rpta != ‘S’ && rpta != ‘n’ && rpta != ‘N ’ )
System.out.println ( “Respuesta no válida.” ) ;
} while ( rpta != ‘s’ && rpta != ‘S’ && rpta != ‘n’ && rpta != ‘N’ ) ;
}
}
Pag. 179
Ing. Juan José Flores Cueto.
Pag. 180
ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS
Problema 23
Desarrollar una solución que permita ingresar un número por teclado. Mostrar el
número con las cifras invertidas, el número de cifras que tiene el número, la suma de
las cifras, el número de cifras pares e impares, y si el número es capicua o no.
Clase PrgNumCifras
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgNumCifras {
n = num ;
while ( n != 0 ) {
res = n % 10 ;
numInv = numInv * 10 + res ;
cont ++ ;
suma = suma + res ;
if ( res % 2 == 0 )
contPar ++ ;
else
contImp ++ ;
n = n / 10 ;
}
Pag. 181
Ing. Juan José Flores Cueto.
Problema 24
Desarrollar un programa que permita ingresar el día, el mes y el año de una determina
fecha. Determinar si la fecha ingresada es correcta y si el año es bisiesto o no.
Clase PrgVerificaFecha
package dominioDeLaAplicacion;
import biblioteca.Lectura;
class PrgVerificaFecha {
//verifica el dia
switch (mes) {
case 1 :
case 3 :
case 5 :
case 7 :
case 8 :
case 10 :
case 12 :
Pag. 182
ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS
Clase PrgVerificaFecha
if ( verifdia && ( mes > 0 ) && ( mes <= 12 ) && ( año > 0 ) ) {
switch (mes) {
case 1 :
mess = “Enero” ;
break ;
case 2 :
mess = “Febrero” ;
break ;
case 3 :
mess = “Marzo” ;
break ;
case 4 :
mess = “Abril” ;
break ;
case 5 :
mess = “Mayo” ;
break ;
case 6 :
mess = “Junio” ;
break ;
case 7 :
mess = “Julio” ;
break ;
case 8 :
mess = “Agosto” ;
break ;
Pag. 183
Ing. Juan José Flores Cueto.
Clase PrgVerificaFecha
case 10 :
mess = “Octubre” ;
break ;
case 11 :
mess = “Noviembre” ;
break;
case 12 :
mess = “Diciembre” ;
break ;
}
if ( bisiesto ) {
System.out.println ( “ Es año bisiesto ” ) ;
} else {
System.out.println ( “ No es año bisiesto ” ) ;
}
} else {
System.out.println ( “ error en fecha ” ) ;
}
}
}
Pag. 184
ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS
Problema 25
Desarrollar un programa que permita ingresar un número arábico entre 1000 y 3000.
Determinar y mostrar el equivalente del número ingresado en número romano.
Clase PrgNumRomano
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgNumRomano {
Pag. 185
Ing. Juan José Flores Cueto.
Clase PrgNumRomano
//obtener centenas
switch ( centena ) {
case 1 :
romano = romano + “C” ;
break ;
case 2 :
romano = romano + “CC” ;
break ;
case 3 :
romano = romano + “CCC” ;
break ;
case 4 :
romano = romano + “CD” ;
break ;
case 5 :
romano = romano + “D” ;
break ;
case 6 :
romano = romano + “DC” ;
break ;
case 7 :
romano = romano + “DCC” ;
break ;
case 8 :
romano = romano + “DCCC” ;
break ;
case 9 :
romano = romano + “CM” ;
break ;
}
//obtener decenas
switch ( decena ) {
case 1 :
romano = romano + “X” ;
break ;
case 2 :
romano = romano + “XX” ;
break ;
case 3 :
romano = romano + “XXX” ;
break ;
case 4 :
romano = romano + “XL” ;
break ;
case 5 :
romano = romano + “L” ;
break ;
case 6 :
romano = romano + “LX” ;
break ;
Pag. 186
ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS
Clase PrgNumRomano
case 7 :
romano = romano + “LXX” ;
break ;
case 8 :
romano = romano + “LXXX” ;
break ;
case 9 :
romano = romano + “XC” ;
break ;
}
//obtener unidades
switch ( unidad ) {
case 1 :
romano = romano + “I” ;
break ;
case 2 :
romano = romano + “II” ;
break ;
case 3 :
romano = romano + “III” ;
break ;
case 4 :
romano = romano + “IV” ;
break ;
case 5 :
romano = romano + “V” ;
break ;
case 6 :
romano = romano + “VI” ;
break ;
case 7 :
romano = romano + “VII” ;
break ;
case 8 :
romano = romano + “VIII” ;
break ;
case 9 :
romano = romano + “IX” ;
break ;
}
} else {
System.out.println ( " Número ingresado no válido " ) ;
}
}
}
Pag. 187
Ing. Juan José Flores Cueto.
Problema 26
Desarrollar un programa que permita ingresar un número entero menor que 100 y
permita mostrar su equivalente en letras.
Clase PrgNumALetras01
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgNumALetras01 {
String letra = “”, cero = “cero”, uno = “uno”, dos = “dos”, tres = “tres” ;
String cuatro = “cuatro”, cinco = “cinco”, seis = “seis”, siete = “siete” ;
String ocho = “ocho”, nueve = “nueve”, diez = “diez”, once = “once” ;
String doce = “doce”, trece = “trece”, catorce = “catorce”, quince = “quince” ;
String dieci = “dieci” ;
do {
System.out.println ( “Ingrese un número entero menor que 100: ” ) ;
num = Lectura.leerInt ( ) ;
dec = num / 10 ;
uni = num % 10 ;
switch ( uni ) {
case 0 :
letra = cero ;
break ;
case 1 :
letra = uno ;
break ;
Pag. 188
ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS
Clase PrgNumALetras01
case 2 :
letra = dos ;
break ;
case 3 :
letra = tres ;
break ;
case 4 :
letra = cuatro ;
break ;
case 5 :
letra = cinco ;
break ;
case 6 :
letra = seis ;
break ;
case 7 :
letra = siete ;
break ;
case 8 :
letra = ocho ;
break ;
case 9 :
letra = nueve ;
break ;
}
switch ( dec ) {
case 1 :
switch ( uni ) {
case 0 :
letra = diez ;
break ;
case 1 :
letra = once ;
break ;
case 2 :
letra = doce ;
break ;
case 3 :
letra = trece ;
break ;
case 4 :
letra = catorce ;
break ;
case 5 :
letra = quince ;
break ;
default :
letra = dieci + letra ;
}
break ;
Pag. 189
Ing. Juan José Flores Cueto.
Clase PrgNumALetras01
case 2 :
if ( uni == 0 )
letra = veinte ;
else
letra = veinti + letra ;
break ;
case 3 :
if ( uni == 0 )
letra = treinta ;
else
letra = treinta + y + letra ;
break ;
case 4 :
if ( uni == 0 )
letra = cuarenta ;
else
letra = cuarenta + y + letra ;
break ;
case 5 :
if ( uni == 0 )
letra = cincuenta ;
else
letra = cincuenta + y + letra ;
break ;
case 6 :
if ( uni == 0 )
letra = sesenta ;
else
letra = sesenta + y + letra ;
break ;
case 7 :
if ( uni == 0 )
letra = setenta ;
else
letra = setenta + y + letra ;
break ;
case 8 :
if ( uni == 0 )
letra = ochenta ;
else
letra = ochenta + y + letra ;
break ;
case 9 :
if ( uni == 0 )
letra = noventa ;
else
letra = noventa + y + letra ;
}
System.out.print ( “El número ” + num + “ en letras es ” + letra ) ;
}
}
Pag. 190
ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS
Problema 27
Clase PrgNumALetras02
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgNumALetras02 {
Pag. 191
Ing. Juan José Flores Cueto.
Clase PrgNumALetras02
case 2 :
letra = dos ;
break ;
case 3 :
letra = tres ;
break ;
case 4 :
letra = cuatro ;
break ;
case 5 :
letra = cinco ;
break ;
case 6 :
letra = seis ;
break ;
case 7 :
letra = siete ;
break ;
case 8 :
letra = ocho ;
break ;
case 9 :
letra = nueve ;
break ;
}
switch (dec) {
case 1 :
switch (uni) {
case 0 :
letra = diez ;
break ;
case 1 :
letra = once ;
break ;
case 2 :
letra = doce ;
break ;
case 3 :
letra = trece ;
break ;
case 4 :
letra = catorce ;
break ;
case 5 :
letra = quince ;
break ;
default :
letra = dieci + letra ;
}
break ;
case 2 :
Pag. 192
ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS
Clase PrgNumALetras02
if ( uni == 0 )
letra = veinte ;
else
letra = veinti + letra ;
break ;
case 3 :
if ( uni == 0 )
letra = treinta ;
else
letra = treinta + y + letra ;
break ;
case 4 :
if (uni == 0)
letra = cuarenta ;
else
letra = cuarenta + y + letra ;
break ;
case 5 :
if ( uni == 0 )
letra = cincuenta ;
else
letra = cincuenta + y + letra ;
break ;
case 6 :
if ( uni == 0 )
letra = sesenta ;
else
letra = sesenta + y + letra ;
break ;
case 7 :
if ( uni == 0 )
letra = setenta ;
else
letra = setenta + y + letra ;
break ;
case 8 :
if ( uni == 0 )
letra = ochenta ;
else
letra = ochenta + y + letra ;
break ;
case 9 :
if ( uni == 0 )
letra = noventa ;
else
letra = noventa + y + letra ;
}
switch ( cen ) {
case 1 :
if ( dec == 0 && uni == 0 )
letra = cien ;
else
Pag. 193
Ing. Juan José Flores Cueto.
Clase PrgNumALetras02
Pag. 194
ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS
MANEJO DE EXCEPCIONES
Cuando se está ejecutando un programa y ocurre un error, Java lanza una excepción que
cuando no se captura da lugar a un mensaje sobre lo ocurrido y detiene la ejecución del
programa (es importante establecer que las excepciones se lanzan, no ocurren). Ahora, si se
desea que la ejecución del programa no se detenga, se deberá capturar la excepción lanzada
y manejarla.
Existen diversos errores que pueden ocasionar que se lance una excepción en un programa,
por ejemplo, una entrada incorrecta de datos (IOException), una división por cero
(ArithmeticException) o una conversión de datos no válida (NumberFormatException).
Para evitar que la ejecución de un programa se detenga debido a un error que lanza una
excepción, se debe utilizar la sentencia try para alertar al programa acerca del código que
puede ocasionar un error, y utilizar la sentencia catch para capturar y manejar cada una de
las excepciones que se puedan lanzar.
Tipo de excepción
try { capturada por la sentencia
catch con la finalidad de
// Código de la aplicación.
manejarla.
…
…
…
…
…
} catch ( ) {
Pag. 195
Ing. Juan José Flores Cueto.
try {
// Código de la aplicación.
…
…
}
Como se ha indicado, existen diferentes tipos de excepciones por lo que es común observar
en un programa una sentencia try con varias sentencias catch. Cada sentencia catch
capturará y manejara un excepción.
try {
Pag. 196
ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS
El manejo de excepciones ofrece una forma de escribir o codificar programas con una mayor
claridad y sencillez, separando explícitamente el código que maneja los errores del código
básico de una aplicación.
Excepción Descripción
Pag. 197
Ing. Juan José Flores Cueto.
Problema 28
Desarrollar una solución que permita ingresar dos números enteros. Mostrar el
resultado de dividir ambos números. Se debe tener en cuenta que existe la posibilidad
que el divisor sea igual a cero.
Clase PrgDivisionSinExcepcion
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgDivisionSinExcepcion {
divisor = Lectura.leerInt ( ) ;
}
}
Pag. 198
ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS
Clase PrgDivisionConExcepcion
package dominioDeLaAplicacion;
import biblioteca.Lectura;
class PrgDivisionConExcepcion {
divisor = Lectura.leerInt ( ) ;
try {
rpta = dividendo / divisor ;
System.out.println ( “ El resultado de la división es: ” + rpta ) ;
} catch ( ArithmeticException e ) {
}
}
}
Pag. 199
Ing. Juan José Flores Cueto.
Problema 29
Desarrollar una solución que permita ingresar la hora en el siguiente formato hh:mm:ss
donde “hh” es igual a la hora (de 00 a 23 horas), “mm” es igual a los minutos (de 00 a
59 minutos) y “ss” es igual a los segundos (de 00 a 59 segundos). Mostrar un mensaje
cuando la hora ingresada sea válida. Manejar excepciones.
Clase PrgHoraConExcepcion
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgHoraConExcepcion {
boolean valido ;
String hora, tmp ;
int hh, mm, ss ;
do {
System.out.println ( “ Ingrese la hora en el siguiente formato: hh:mm:ss ” ) ;
hora = Lectura.leerString ( ) ;
try {
tmp = hora.substring ( 0, 2 ) ;
hh = Integer.parseInt ( tmp ) ;
if ( hh < 0 || hh > 23 ) {
System.out.println ( “ Hora ingresada no válida ” ) ;
valido = true ;
} else {
tmp = hora.substring ( 3, 5 ) ;
mm = Integer.parseInt ( tmp ) ;
if (mm < 0 || mm > 59) {
System.out.println ( “ minuto ingresado no válido ” ) ;
valido = true ;
} else {
tmp = hora.substring ( 6 ) ;
ss = Integer.parseInt ( tmp ) ;
if (ss < 0 || ss > 59) {
System.out.println ( “ segundo ingresado no válido ” ) ;
valido = true ;
} else {
valido = false ;
}
}
}
Pag. 200
ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS
Clase PrgHoraConExcepcion
23:10:xx
Es decir, en cualquier parte del formato indicado, ingrese letras en lugar de números.
Para poder entender la solución del programa sugiero que revise en el siguiente capítulo la clase
Integer (Clase Wrapper) y la clase String.
Pag. 201
Ing. Juan José Flores Cueto.
Problema 30
Desarrollar una solución que permita ingresar la fecha en una variable de tipo texto o
cadena con el siguiente formato: dd/mm/aaaa. Validar que la fecha ingresada tenga el
formato especificado. Manejar excepciones.
Clase PrgFechaConExcepcion
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgFechaConExcepcion {
do {
if ( fecha.length ( ) == 10 ) {
try {
tmp = fecha.substring ( 0, 2 ) ;
dia = Integer.parseInt ( tmp ) ;
tmp = fecha.substring ( 3, 5 ) ;
mes = Integer.parseInt ( tmp ) ;
tmp = fecha.substring ( 6 ) ;
año = Integer.parseInt ( tmp ) ;
puntos1 = fecha.substring ( 2, 3 ) ;
puntos2 = fecha.substring ( 5, 6 ) ;
Pag. 202
ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS
Clase PrgFechaConExcepcion
} else
valido = true ;
if ( valido )
System.out.println ( “ Error... Ingrese la fecha según formato!!! ” ) ;
} while ( valido ) ;
}
}
23/xx/2005
Es decir, en cualquier parte del formato indicado, ingrese letras en lugar de números (inclusive en
el lugar del / ).
Para poder entender la solución del programa sugiero que revise en el siguiente capítulo la clase
Integer (Clase Wrapper) y la clase String.
Pag. 203
Ing. Juan José Flores Cueto.
Problema 31
Desarrollar una solución que permita ingresar dos números de tres digitos en una
variable de tipo texto o cadena con el siguiente formato: nnn//nnn. Validar que los
números sean de tres cifras y mostrar la división de los mismos. Manejar excepciones.
Clase PrgNumeroConExcepcion
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgNumeroConExcepcion {
do {
if ( numeros.length ( ) == 8 ) {
try {
tmp = numeros.substring ( 0, 3 ) ;
num1 = Integer.parseInt ( tmp ) ;
tmp = numeros.substring ( 5 ) ;
num2 = Integer.parseInt ( tmp ) ;
puntos1 = numeros.substring ( 3, 5 ) ;
if ( puntos1.equals ( “//” ) ) {
valido = false ;
resultado = num1 / num2 ;
System.out.println ( “ La división es: ” + resultado ) ;
} else {
valido = true ;
}
Pag. 204
ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS
Clase PrgNumeroConExcepcion
} else {
valido = true ;
}
if ( valido ) {
System.out.println ( “ Error... Ingrese en el formato indicado!!! ” ) ;
}
} while ( valido ) ;
}
}
aaa//123
Es decir, en cualquier parte del formato indicado, ingrese letras en lugar de números (inclusive en
el lugar de las // ).
También se captura la excepción ArithmeticException para prevenir que no se intente dividir los
números cuando el segundo número es cero. Puede probar el programa ingresando como números
lo siguiente:
123//000
Para poder entender la solución del programa sugiero que revise en el siguiente capítulo la clase
Integer (Clase Wrapper) y la clase String.
Pag. 205
Ing. Juan José Flores Cueto.
Pag. 206
ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS
Existen problemas que por su naturaleza contribuyen de manera significativa a lograr este
objetivo, los cuales se desarrollan en esta última parte del presente capítulo. Es importante
analizar cada una de las soluciones propuestas siguiendo paso a paso el desarrollo de las
mismas y desarrollando a su vez las variaciones planteadas sobre los problemas.
Pag. 207
Ing. Juan José Flores Cueto.
Pag. 208
ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS
Problema 32
* * * * *
* * * * * Nota: En la figura mostrada el número de filas = 5. Asuma
* * * * * que el número de filas puede variar desde 2 hasta 20 y que
* * * * * entre los asteriscos no existen espacios en blanco.
* * * * *
Clase PrgCuadrado01
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgCuadrado01 {
do {
System.out.println ( “ Ingresar el número de filas de la figura ” ) ;
System.out.print ( “ Valores válidos desde 2 hasta 20: ” ) ;
totalFilas = Lectura.leerInt ( ) ;
Pag. 209
Ing. Juan José Flores Cueto.
Análisis de la solución:
Entonces, la condición de la primera sentencia for va ser verdadera para valores de i=1
hasta i=totalFilas (en el caso de totalFilas=5; los valores válidos para i son i=1, i=2, i=3, i=4 e
i=5). Los valores válidos de i coinciden con el número de filas que nuestra figura va ha tener,
por lo cual podemos afirmar que para cada valor de i, corresponde una fila de la figura.
Para fila=5:
Ahora necesitamos mostrar un número determinado de asteriscos en cada una de las filas y
ese número de asteriscos a mostrar coincide con el número de filas de la figura (para
nuestro caso totalFilas=5).
Para cada una de las filas (en el caso de totalFilas=5; para i=1, i=2, i=3, i=4 e i=5), el for
interno se ejecuta la misma cantidad de veces que el número de filas de la figura y cada vez
que se ejecuta muestra un asterisco (en el caso de totalFilas=5, el for interno se ejecuta 5
veces y mostrará en total 5 asteriscos en cada una de las filas). Cada vez que finaliza el for
interno, la sentencia System.out.println ( ); nos permite hacer un salto de línea y continuar
con la ejecución de la solución siempre y cuando la condición del primer for sea verdadera.
Los siguientes 2 problemas son una variación de este problema. Analice sus respectivas
soluciones y desarrolle sus propias observaciones.
Pag. 210
ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS
Problema 33
1 2 3 4 5
1 2 3 4 5 Nota: En la figura mostrada el número de filas = 5. Asuma
1 2 3 4 5 que el número de filas puede variar desde 2 hasta 9 y que
1 2 3 4 5 entre los números no existen espacios en blanco.
1 2 3 4 5
Clase PrgCuadrado02
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgCuadrado02 {
do {
System.out.println ( “ Ingresar el número de filas de la figura ” ) ;
System.out.print ( “ Valores válidos desde 2 hasta 9: ” ) ;
totalFilas = Lectura.leerInt ( ) ;
Pag. 211
Ing. Juan José Flores Cueto.
Problema 34
1 1 1 1 1
2 2 2 2 2 Nota: En la figura mostrada el número de filas = 5. Asuma
3 3 3 3 3 que el número de filas puede variar desde 2 hasta 9 y que
4 4 4 4 4 entre los números no existen espacios en blanco.
5 5 5 5 5
Clase PrgCuadrado03
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgCuadrado03 {
do {
System.out.println ( “ Ingresar el número de filas de la figura ” ) ;
System.out.print ( “ Valores válidos desde 2 hasta 9: ” ) ;
totalFilas = Lectura.leerInt ( ) ;
Pag. 212
ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS
Los últimos dos problemas son una variación del problema 32, en el cuál se desarrolla la
siguiente figura:
* * * * *
* * * * *
* * * * *
* * * * *
* * * * *
Con la finalidad de mejorar sus capacidades lógicas sugiero que desarrolle las siguientes
variaciones del problema:
1 2 3 4 5 5 4 3 2 1 5 5 5 5 5
6 7 8 9 0 5 4 3 2 1 4 4 4 4 4
1 2 3 4 5 5 4 3 2 1 3 3 3 3 3
6 7 8 9 0 5 4 3 2 1 2 2 2 2 2
1 2 3 4 5 5 4 3 2 1 1 1 1 1 1
Pag. 213
Ing. Juan José Flores Cueto.
Problema 35
*
* * Nota: En la figura mostrada el número de filas = 5. Asuma
* * * que el número de filas puede variar desde 2 hasta 20 y que
* * * * entre los asteriscos no existen espacios en blanco.
* * * * *
Clase PrgTriangulo01
package dominioDeLaAplicacion;
import biblioteca.*;
public class PrgTriangulo01 {
do {
System.out.println ( “ Ingresar el número de filas de la figura ” ) ;
System.out.print ( “ Valores válidos desde 2 hasta 20: ” ) ;
totalFilas = Lectura.leerInt ( ) ;
Pag. 214
ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS
Análisis de la solución:
Entonces, la condición de la primera sentencia for va ser verdadera para valores de i=1
hasta i=totalFilas (en el caso de totalFilas=5; los valores válidos para i son i=1, i=2, i=3, i=4 e
i=5). Los valores válidos de i coinciden con el número de filas que nuestra figura va ha tener,
por lo cual podemos afirmar que para cada valor de i, corresponde una fila de la figura.
Para fila=5:
En la primera fila (i=1) se necesita mostrar un asterisco. Esto se cumple ya que para i=1 el
único valor válido para j sería j=1, por lo que el for interno se ejecutaría una sola vez y se
mostraría solo un asterisco. Finalizada la ejecución del for interno, la sentencia
System.out.println ( ); nos permite hacer un salto de línea. Es decir, pasar a la segunda fila.
En la segunda fila (i=2) se necesita mostrar dos asterisco. Esto se cumple ya que para i=2
los valores válidos para j serían j=1 y j=2, por lo que el for interno se ejecutaría dos veces y
en cada una de las ejecuciones del for interno se mostraría dos asterisco (en consecuencia
se mostrarían en total dos asteriscos). Finalizada la ejecución del for interno, la sentencia
System.out.println ( ); nos permite hacer un salto de línea. Es decir, pasar a la tercera fila.
Pag. 215
Ing. Juan José Flores Cueto.
se ejecutaría cinco veces y en cada una de las ejecuciones del for interno se mostraría un
asterisco (en consecuencia se mostrarían en total cinco asteriscos). Luego se hace un salto
de linea y se finaliza la ejecución.
Los siguientes 7 problemas son una variación de este problema. Analice sus respectivas
soluciones y desarrolle sus propias observaciones.
Pag. 216
ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS
Problema 36
1
1 2 Nota: En la figura mostrada el número de filas = 5. Asuma
1 2 3 que el número de filas puede variar desde 2 hasta 9 y que
1 2 3 4 entre los números no existen espacios en blanco.
1 2 3 4 5
Clase PrgTriangulo02
package dominioDeLaAplicacion;
import biblioteca.*;
public class PrgTriangulo02 {
do {
System.out.println ( “ Ingresar el número de filas de la figura ” ) ;
System.out.print ( “ Valores válidos desde 2 hasta 9: ” ) ;
totalFilas = Lectura.leerInt ( ) ;
Pag. 217
Ing. Juan José Flores Cueto.
Problema 37
1
2 2 Nota: En la figura mostrada el número de filas = 5. Asuma
3 3 3 que el número de filas puede variar desde 2 hasta 9 y que
4 4 4 4 entre los números no existen espacios en blanco.
5 5 5 5 5
Clase PrgTriangulo03
package dominioDeLaAplicacion;
import biblioteca.*;
public class PrgTriangulo03 {
do {
System.out.println ( “ Ingresar el número de filas de la figura ” ) ;
System.out.print ( “ Valores válidos desde 2 hasta 9: ” ) ;
totalFilas = Lectura.leerInt ( ) ;
Pag. 218
ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS
Problema 38
5
5 4 Nota: En la figura mostrada el número de filas = 5. Asuma
5 4 3 que el número de filas puede variar desde 2 hasta 9 y que
5 4 3 2 entre los números no existen espacios en blanco.
5 4 3 2 1
Clase PrgTriangulo04
package dominioDeLaAplicacion;
import biblioteca.*;
public class PrgTriangulo04 {
do {
System.out.println ( “ Ingresar el número de filas de la figura ” ) ;
System.out.print ( “ Valores válidos desde 2 hasta 9: ” ) ;
totalFilas = Lectura.leerInt ( ) ;
Pag. 219
Ing. Juan José Flores Cueto.
Problema 39
5
4 4 Nota: En la figura mostrada el número de filas = 5. Asuma
3 3 3 que el número de filas puede variar desde 2 hasta 9 y que
2 2 2 2 entre los números no existen espacios en blanco.
1 1 1 1 1
Clase PrgTriangulo05
package dominioDeLaAplicacion;
import biblioteca.*;
public class PrgTriangulo05 {
do {
System.out.println ( “ Ingresar el número de filas de la figura ” ) ;
System.out.print ( “ Valores válidos desde 2 hasta 9: ” ) ;
totalFilas = Lectura.leerInt ( ) ;
Pag. 220
ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS
Problema 40
1
2 3 Nota: En la figura mostrada el número de filas = 5. Asuma
4 5 1 que el número de filas puede variar desde 2 hasta 9 y que
2 3 4 5 entre los números no existen espacios en blanco.
1 2 3 4 5
Clase PrgTriangulo06
package dominioDeLaAplicacion;
import biblioteca.*;
public class PrgTriangulo06 {
do {
System.out.println ( “ Ingresar el número de filas de la figura ” ) ;
System.out.print ( “ Valores válidos desde 2 hasta 9: ” ) ;
totalFilas = Lectura.leerInt ( ) ;
Pag. 221
Ing. Juan José Flores Cueto.
Problema 41
1
2 3 Nota: En la figura mostrada el número de filas = 5. Asuma
4 5 6 que el número de filas puede variar desde 2 hasta 20 y que
7 8 9 0 entre los números no existen espacios en blanco.
1 2 3 4 5
Clase PrgTriangulo07
package dominioDeLaAplicacion;
import biblioteca.*;
public class PrgTriangulo07 {
do {
System.out.println ( “ Ingresar el número de filas de la figura ” ) ;
System.out.print ( “ Valores válidos desde 2 hasta 20: ” ) ;
totalFilas = Lectura.leerInt ( ) ;
Pag. 222
ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS
Problema 42
5
4 3 Nota: En la figura mostrada el número de filas = 5. Asuma
2 1 5 que el número de filas puede variar desde 2 hasta 9 y que
4 3 2 1 entre los números no existen espacios en blanco.
5 4 3 2 1
Clase PrgTriangulo08
package dominioDeLaAplicacion;
import biblioteca.*;
public class PrgTriangulo08 {
do {
System.out.println ( “ Ingresar el número de filas de la figura ” ) ;
System.out.print ( “ Valores válidos desde 2 hasta 9: ” ) ;
totalFilas = Lectura.leerInt ( ) ;
Pag. 223
Ing. Juan José Flores Cueto.
Los últimos siete problemas son una variación del problema 35, en el cuál se desarrolla la
siguiente figura:
*
* *
* * *
* * * *
* * * * *
Con la finalidad de mejorar sus capacidades lógicas sugiero que desarrolle las siguientes
figuras y sus respectivas variaciones:
* * * * * * * * * * *
* * * * * * * * * *
* * * * * * * * *
* * * * * * * *
* * * * * * *
Pag. 224
ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS
Problema 43
* * * * *
* * * * Nota: En la figura mostrada el número de filas = 5. Asuma
* * * que el número de filas puede variar desde 2 hasta 20 y que
* * entre los asteriscos no existen espacios en blanco.
Clase PrgTriangulo09
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgTriangulo09 {
do {
System.out.println ( “ Ingresar el número de filas de la figura ” ) ;
System.out.print ( “ Valores válidos desde 2 hasta 20: ” ) ;
totalFilas = Lectura.leerInt ( ) ;
for ( j = 1 ; j < i ; j ++ ) {
System.out.print ( “ ” ) ;
}
for ( j = i ; j <= totalFilas ; j ++ ) {
System.out.print ( “*” ) ;
}
System.out.println ( ) ;
}
}
}
Intente mejorar la solución anterior (en lugar de usar tres sentencias for utilice solo dos), sino
lo consigue analice la siguiente solución.
Pag. 225
Ing. Juan José Flores Cueto.
Clase PrgTriangulo09Mejorado
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgTriangulo09Mejorado {
do {
System.out.println ( “ Ingresar el número de filas de la figura ” ) ;
System.out.print ( “ Valores válidos desde 2 hasta 20: ” ) ;
totalFilas = Lectura.leerInt ( ) ;
Pag. 226
ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS
Problema 44
*
Nota: la cantidad de asteriscos que tiene la figura al lado
* * derecho es el dato que se debe ingresar. Dicho dato debe tener
* * * un valor entre 2 y 20. En la figura el lado = 5. No existen
* * * * espacios en blanco entre los asteriscos.
* * * * *
Clase PrgTriangulo10
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgTriangulo10 {
do {
System.out.println ( “ Ingresar el número de filas de la figura ” ) ;
System.out.print ( “ Valores válidos desde 2 hasta 20: ” ) ;
totalFilas = Lectura.leerInt ( ) ;
Pag. 227
Ing. Juan José Flores Cueto.
Intente mejorar la solución anterior de tal forma que cambie el for interno por el siguiente for:
Clase PrgTriangulo10Mejorado
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgTriangulo10Mejorado {
do {
System.out.println ( “ Ingresar el número de filas de la figura ” ) ;
System.out.print ( “ Valores válidos desde 2 hasta 20: ” ) ;
totalFilas = Lectura.leerInt ( ) ;
Es importante indicar que un mismo problema puede ser solucionado de diferentes maneras.
Pag. 228
ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS
Problema 45
*
* * Nota: En la figura mostrada el número de filas = 5. Asuma
* * * que el número de filas puede variar desde 2 hasta 20 y que
* * * * entre los asteriscos existe un espacio en blanco.
* * * * *
Clase PrgTriangulo11
package dominioDeLaAplicacion;
import biblioteca.*;
public class PrgTriangulo11 {
do {
System.out.println ( “ Ingresar el número de filas de la figura ” ) ;
System.out.print ( “ Valores válidos desde 2 hasta 20: ” ) ;
totalFilas = Lectura.leerInt() ;
Pag. 229
Ing. Juan José Flores Cueto.
Análisis de la solución:
El primer for (como en todos los casos anteriores) está justificado y se ejecuta la misma
cantidad de veces que el número de filas de la figura. Cada vez que se ejecuta el primer for
debemos asegurarnos de mostrar los asteriscos necesarios.
Para fila=5:
Es necesario encontrar algunos parámetros para establecer una constante matemática (una
relación matemática) que nos permita mostrar adecuadamente la figura. Ahora, para realizar
un mejor análisis se va ha representar los espacios en blanco de la figura con un guión -
(esto para visualizar la cantidad de espacios en blanco necesarios en cada fila):
- - - - *
- - - * - * Nota: Los guiones representan espacios en blanco.
- - * - * - * Entre un guión y un asterisco no hay ningún
- * - * - * - * símbolo.
* - * - * - * - *
Pag. 230
ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS
En la parte que tiene los asteriscos y espacios en blanco entre los asteriscos, es necesario
buscar una relación matemática. Para esto, incluiremos un espacio en blanco al final de cada
una de las filas de la figura:
Al analizar la figura determinamos que hay dos partes las cuales son independientes, por lo
cual determinamos la necesidad de emplear dos for internos.
El primer for interno nos permite mostrar los espacios en blanco que están antes del primer
asterisco de cada una de las filas.
Para fila=5:
El segundo for interno nos permite mostrar los asteriscos y espacios en blanco que están
después de cada uno de los asteriscos en cada una de las filas:
Para fila=5:
Intente mejorar la solución anterior (en lugar de usar tres sentencias for utilice solo dos), sino
lo consigue analice la siguiente solución.
Pag. 231
Ing. Juan José Flores Cueto.
Clase PrgTriangulo11Mejorado
package dominioDeLaAplicacion;
import biblioteca.*;
public class PrgTriangulo11Mejorado {
do {
System.out.println ( “ Ingresar el número de filas de la figura ” ) ;
System.out.print ( “ Valores válidos desde 2 hasta 20: ” ) ;
totalFilas = Lectura.leerInt() ;
Análisis de la solución:
Imagínese ahora al triángulo como si este fuera un rectángulo (complete con guiones los
espacios en blanco que tendría la figura si fuera un rectángulo). La variable i va ha representar
cada una de las filas, mientras que la variable j va ha representar cada una de las columnas.
- * - * - * - * -
* - * - * - * - *
Pag. 232
ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS
El primer for controla el número de filas que se van ha mostrar (desde i=1 hasta i=totalFilas).
El segundo for (for interno) se ejecuta para cada una de la filas y controla el número de símbolos
(asteriscos o espacios en blanco) que se van a mostrar (en total se deben mostrar totalFilas * 2 –
1 símbolos). En el for interno hay una sentencia if que nos permite determinar el símbolo que se
va ha mostrar.
- - - - * -
- - - * - * -
- - * - * - * -
- * - * - * - * -
* - * - * - * - * -
También:
Pag. 233
Ing. Juan José Flores Cueto.
Con la finalidad de mejorar sus capacidades lógicas sugiero que desarrolle todas las
variaciones posibles o que se pueda imaginar del presente problema.
* - * - * - * - * * * * * * * * * * *
* - * - * - * * * * * * * * * * *
* - * - * * * * * * * * * * *
* - * * * * * * * * * * *
* * * * * * * * * * *
Pag. 234
ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS
Problema 46
*
* *
* * * Nota: desarrollar la figura con la estructura de repetición
* * * * MIENTRAS (while). El lado del rombo debe tener un valor entre
2 y 10. En la figura el lado = 4.
* * *
* *
*
Clase PrgRombo01
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgRombo01 {
System.out.println ( ) ;
diagonal = totalFilas * 2 - 1 ;
Pag. 235
Ing. Juan José Flores Cueto.
i ++ ;
}
}
}
Analice la solución del problema y anote sus conclusiones. Intente resolverlo utilizando la
sentencia for de Java.
Pag. 236
ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS
Problema 47
1
2 2
3 3 3 Nota: la figura mostrada es un rombo de número. Ingresar un
4 4 4 4 valor entero desde 2 hasta 9 que representa el número de
3 3 3 elementos de la fila central. En la figura el dato = 4.
2 2
1
Clase PrgRombo02
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgRombo02 {
do {
num = Lectura.leerInt ( ) ;
System.out.println ( ) ;
diagonal = 2 * num - 1 ;
Pag. 237
Ing. Juan José Flores Cueto.
if ( i < num )
cont ++ ;
else
cont - - ;
System.out.println ( ) ;
}
}
}
Modifique está solución utilizando la estructura de repetición while en lugar de la estructura for.
Con la finalidad de mejorar sus capacidades lógicas sugiero que desarrolle todas las
variaciones posibles o que se pueda imaginar del presente problema.
1
2 3
4 5 6
7 8 9 1
2 3 4 5 6
7 8 9 1
2 3 4
5 6
7
Analice cada una de las soluciones en forma detallada. Tenga en cuenta que se han
cambiado los nombres de las variables utilizadas en las soluciones anteriores.
Pag. 238
ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS
Problema 48
* * * * *
* *
Nota: En la figura mostrada el número de filas = 5. Asuma
* * que el número de filas puede variar desde 2 hasta 15.
* *
* * * * *
Clase PrgFiguraA
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgFiguraA {
do {
lado = Lectura.leerInt ( );
System.out.println ( ) ;
for( int fil = 1 ; fil <= lado ; fil ++ ) {
for( int col = 1 ; col <= lado ; col ++ ) {
if ( ( 1 < fil && fil < lado ) && ( 1 < col && col < lado ) ) {
// Se muestran dos espacios en blanco.
System.out.print ( “ ” ) ;
} else {
// Se muestra un asterisco y un espacio en blanco.
System.out.print ( “* ” ) ;
}
}
System.out.println ( ) ;
}
}
}
Pag. 239
Ing. Juan José Flores Cueto.
Problema 49
*
* * Nota: la cantidad de asteriscos que tiene la figura al lado
izquierdo es el dato que se debe ingresar. Dicho dato debe
* * tener un valor entre 2 y 20. En la figura el lado = 5.
* *
* * * * *
Clase PrgFiguraB
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgFiguraB {
do {
lado = Lectura.leerInt ( ) ;
System.out.println ( ) ;
Pag. 240
ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS
Problema 50
*
* * Nota: el dato de ingreso debe ser la cantidad de asteriscos que
tiene la base. La base debe tener un valor impar entre 3 y 25.
* * En la figura la base = 9.
* *
* * * * * * * * *
Clase PrgFiguraC
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgFiguraC {
do {
base = Lectura.leerInt ( ) ;
System.out.println ( ) ;
medio = base / 2 + 1 ;
Pag. 241
Ing. Juan José Flores Cueto.
Problema 51
* * * * *
* * * Nota: el lado de la figura debe tener un valor impar entre 5 y 15.
* * * * * En la figura el lado = 5.
* * *
* * * * *
Clase PrgFiguraD
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgFiguraD {
do {
lado = Lectura.leerInt ( ) ;
System.out.println ( ) ;
Pag. 242
ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS
Problema 52
* * * * *
* * * * Nota: el lado de la figura debe tener un valor impar entre 5 y 15.
* * * En la figura el lado = 5.
* * * *
* * * * *
Clase PrgFiguraE
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgFiguraE {
do {
lado = Lectura.leerInt ( ) ;
if ( lado < 5 || lado > 15 || lado % 2 == 0 ) {
System.out.println ( “\nValor fuera de rango. Ingrese impar entre [5,15]: ” ) ;
}
System.out.println ( ) ;
for ( int fil = 1 ; fil <= lado ; fil ++ ) {
for ( int col = 1 ; col <= lado ; col ++ ) {
if ( fil == 1 || fil == lado || fil == col || col == 1 || col == lado || col == (lado –fil +1) )
System.out.print ( “* ” ) ;
else
System.out.print ( “ ” ) ;
}
System.out.println ( ) ;
}
}
}
Pag. 243
Ing. Juan José Flores Cueto.
Problema 53
Clase PrgFiguraF
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgFiguraF {
do {
alto = Lectura.leerInt ( ) ;
if ( ( alto < 4 ) || ( alto > 18 ) || ( alto % 2 == 0 ) ) {
System.out.prinlnt ( “\nValor fuera de rango.Ingrese un número par entre [4,18]: ” ) ;
}
System.out.println ( ) ;
Pag. 244
ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS
Problema 54
* *
* * * * Nota: el lado de la figura debe tener un valor entre 2 y 15. En la
* * * * * * figura el lado = 5.
* * * * * * * *
* * * * * * * * * *
Clase PrgFiguraG
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgFiguraG {
public static void main (String args[]) {
int lado = 0, mayor = 0, col = 0 ;
System.out.println ( “ Programa que realiza dos triángulos de asteriscos ”);
System.out.print ( “ frente a frente a sus hipotenusas \n ” ) ;
System.out.print ( “ Ingrese el lado del triángulo entre [2,15]: ” ) ;
do {
lado = Lectura.leerInt ( ) ;
if ( lado < 2 || lado > 15 ) {
System.out.println ( “\nValor fuera de rango. Ingrese entero entre [2,15]: ” ) ;
}
Pag. 245
Ing. Juan José Flores Cueto.
Problema 55
* *
* * * * Nota: el lado de la figura debe tener un valor entre 2 y 15. En la
* * * * * * figura el lado = 5.
* * * * * * * *
* * * * * * * * * *
Clase PrgFiguraH
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgFiguraH {
do {
base = Lectura.leerInt ( ) ;
if ( base < 2 || base > 15 ) {
System.out.println ( “\nValor fuera de rango. Ingrese entero entre [2,15]: ” ) ;
}
System.out.println ( ) ;
mayor = ( 2 * base ) + 1 ;
Pag. 246
ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS
Problema 56
* * * * * * * * *
* * Nota: la base y la altura del cuadrado se ingresarán por teclado.
La base deberá ser mayor que la altura. En la figura la base=10
* * y altura=5.
* *
* * * * * * * * *
Clase PrgfiguraI
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgFiguraI {
do {
base = Lectura.leerInt ( ) ;
if ( base < 2 ) {
System.out.println ( “\nValor fuera de rango. Ingrese entero mayor a 2: ” ) ;
}
System.out.print ( “ Ingrese el alto del rectángulo...Debe ser menor a la base [“ + base + ”]: ” ) ;
do {
alto = Lectura.leerInt ( ) ;
if ( alto < 1 || alto >= base ) {
if ( alto == base ) {
System.out.print ( “\nEs un cuadrado. Ingrese entero mayor a 1 y menor ” ) ;
System.out.print ( “ a base [“ + base + ”]: ” ) ;
} else {
System.out.print ( “\nValor fuera de rango. Ingrese entero mayor a 1 y ” ) ;
System.out.print ( “ menor a base [“ + base + ”]: ” ) ;
}
}
Pag. 247
Ing. Juan José Flores Cueto.
System.out.println ( ) ;
for ( int fil = 1 ; fil <= alto ; fil ++ ) {
for ( int col = 1 ; col <= base ; col ++ ) {
if ( fil == 1 || fil == alto || col == 1 || col == base )
System.out.print ( “* ” ) ;
else
System.out.print ( “ ” ) ;
}
System.out.println ( “ ” ) ;
}
}
}
Pag. 248
ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS
Problema 57
Desarrollar la codificación de una solución que permita mostrar en pantalla la tabla de multiplicar
de los 12 primeros números naturales. Asegurese de establecer el espaciado correspondiente
para que no se muestre desordenada la tabla, de tal modo que quede de la siguiente forma:
Clase PrgFiguraJ
package dominioDeLaAplicacion ;
Pag. 249
Ing. Juan José Flores Cueto.
if ( i == -1 && j > 0 )
if ( j < 10 )
System.out.print ( “ ” + j + “ ” ) ;
else
System.out.print ( “ ” + j + “ ” ) ;
if ( j == -1 && i > 0 ) {
if ( i < 10 )
System.out.print ( “ ” + i + “ ” ) ;
else
System.out.print ( i + “ ” ) ;
}
if ( j == 0 && i != 0 )
System.out.print ( “ i ” ) ;
if ( i == 0 )
System.out.print ( “----” ) ;
}
}
}
System.out.println ( ) ;
}
}
}
Analice la solución y modifíquela de tal forma que el usuario ingrese la cantidad de números
que debe incluir la tabla de multiplicación. Asegúrese de establecer los valores válidos para
dicha tabla de multiplicar.
Pag. 250
ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS
Problema 58
Clase PrgFiguraK
package dominioDeLaAplicacion ;
if ( i == j || ( col + 1 - j ) == i )
System.out.print ( “ ” ) ;
else
System.out.print ( “***” ) ;
}
System.out.println ( ) ;
}
}
}
Analice la solución y modifíquela de tal forma que el usuario ingrese la cantidad de filas y
columnas que debe tener la figura. Asegúrese de establecer los valores válidos para dichos
datos.
Pag. 251
Ing. Juan José Flores Cueto.
Problema 59
Clase PrgFiguraL
package dominioDeLaAplicacion;
Pag. 252
ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS
Problema 60
Clase PrgFiguraM
package dominioDeLaAplicacion ;
Analice la solución y modifíquela de tal forma que el usuario ingrese la cantidad de filas y
columnas que debe tener la figura.
Pag. 253
Ing. Juan José Flores Cueto.
Finalmente, sugiero que desarrolle las posibles variaciones de los siguientes problemas:
* * * * * * *
* - - - * * * * - *
* - - - * * - * * - - - *
* - - - * * - - * * - - - - - *
* * * * * * * * * * * * * * * * * * *
* * 1
* * * - * 2 - 3
* * * * - - - * 4 - 5 - 6
* * * * * - - - - - * 7 - 8 - 9 - 0
* * * * * * * * * * - - - - - - - * 1 - 2 - 3 - 4 - 5
* * * * * - - - - - * 6 - 7 - 8 - 9
* * * * - - - * 0 - 1 - 2
* * * - * 3 - 4
* * 5
Nota; Tenga presente que los guiones (-) en las figuras representan espacios en blanco.
Pag. 254
ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS
Pag. 255
Ing. Juan José Flores Cueto.
Pag. 256
Capítulo
Clases Básicas Incorporadas en
3
el Lenguaje de Programación
Java
Temas:
Introducción.
El paquete del lenguaje Java: java.lang
Envoltorios de tipos de datos primitivos: Wrappers
• Introducción.
• Métodos.
• Problemas resueltos.
CAPÍTULO III
INTRODUCCIÓN
Un algoritmo constituye una lista completa de pasos secuenciales y una descripción de los
datos que dichos pasos deben manipular para resolver un determinado problema. La lista de
pasos se desarrolla utilizando las estructuras lógicas y las instrucciones o sentencias de
bifurcación y están contenidas en los métodos, mientras que los datos se almacenan en las
estructuras de datos.
MARCO DE TRABAJO
ENUNCIADO
DEL
PROBLEMA
Etapa 02
Definición
Solución Etapa 03
Diseño
Solución Etapa 04
Desarrollo
Solución
Pag. 259
Ing. Juan José Flores Cueto.
SE DESARROLLAN UTILIZANDO:
• Estructuras lógicas de secuencia.
• Estructuras lógicas de decisión.
• Estructuras lógicas de repetición.
• Instrucciones de bifucación.
TAMBIÉN:
• Clases incorporadas en el lenguaje
de programación utilizado.
ALMACENADOS EN:
• Estructuras de datos tipo variables.
Los algoritmos son desarrollados dentro de los métodos. Es decir, todo programa en Java
está contenido en uno o mas métodos, siendo el método main( ), el método principal que
tiene como función iniciar la ejecución de una aplicación desarrollada en Java.
Pag. 260
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
2
Es importante mencionar que utilizando las clases preprogramadas de Java se puede
ahorrar mucho tiempo y esfuerzo de programación, construyendo fácilmente aplicaciones
profesionales.
1
Paquete: Conjunto de clases similares.
Un paquete permiten organizar las clases. Un paquete contiene clases que tienen funciones similares.
2
Clase: Colección de objetos del mismo tipo.
Una clase es una implantación de un “tipo de objeto”, especifica una estructura para almacenar los atributos y los
métodos operativos permisibles que se aplican a cada uno de sus objetos (comparten datos o atributos y métodos
comunes). El mundo real se modela mediante clases. Una clase es una abstracción y no referencia a ningún objeto
en particular.
Pag. 261
Ing. Juan José Flores Cueto.
Pag. 262
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
El paquete del lenguaje Java, conocido también como java.lang, es uno de los paquetes más
3
importantes de la API de Java, y contiene las clases que constituyen el corazón del lenguaje
de programación Java.
El paquete Java.lang debido a su importancia no requiere ser importado por las aplicaciones
para usar las clases que contiene, es decir, está automáticamente importado para todos los
programas, por lo que la siguiente sentencia no será necesaria:
import java.lang.* ;
El paquete java.lang contiene clases que encapsulan los tipos primitivos de datos, una clase
4
que proporciona los objetos para manipular la entrada y la salida estándar, clases para
5
manipular cadenas de caracteres, una clase que proporciona métodos correpondientes a las
funciones matemáticas, etc.
3
API: Aplication Program Interface.
Una API es un conjunto de normas que determinan como debe usarse una determinada función de un lenguaje de
programación en una aplicación.
4
Objetos: Modelos de entes del mundo.
Un objeto de software es cualquier cosa, real o abstracta, acerca del cual almacenamos datos y los métodos que
controlan dichos datos.
5
Métodos: Desarrollo de algoritmos.
Los métodos especifican la forma en que se controlan los datos de un objeto y es donde se define el
comportamiento del mismo. En palabras sencillas; en los métodos se desarrollan o codifican los algoritmos.
Pag. 263
Ing. Juan José Flores Cueto.
1. Clases que envuelven los tipos de datos primitivos, conocidas como las clases
6
wrappers (envoltorios). Cada una de estas clases (consideradas subclases ), a
7
excepción de la clase Character, se derivan de la clase abstracta Number
(considerada superclase).
• Boolean.
• Byte.
• Character.
• Double.
• Float.
• Integer.
• Long.
• Short.
• Math.
3. Clase que proporciona los objetos necesarios para manipular y tratar cadenas de
caracteres.
• String.
6
Herencia: Subclase y Superclase.
La Herencia es uno de los conceptos más importantes de la Programación Orientada a Objetos (POO). Utilizando la
herencia se puede derivar una nueva clase a partir de otra clase existente, donde la nueva clase derivada heredará
todos los atributos y métodos de la clase existente. La nueva clase se llama Clase Derivada (o subclase) y la clase
original se llama Clase Base (o superclase).
7
Clase Abstracta: Clase tratada como SuperClase.
Una Clase Abstracta es un tipo de clase de la cual no se pueden crear o instanciar objetos. En su lugar, se debe
derivar una nueva clase a partir de la clase abstracta, codificar los métodos que son declarados como abstractos en
la clase abstracta y crear o instanciar objetos a partir de la clase derivada. Las clases abstractas se utilizan para
forzar a los programadores a desarrollar algunos o todos los métodos de una clase.
Pag. 264
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
En Java, los métodos siempre están dentro de una clase. Algunos métodos pueden ser
invocados o ejecutados utilizando directamente el nombre de la clase en la cual están
definidos, tal es el caso de los métodos de la clase Math de Java. Estos métodos son
conocidos como métodos estáticos o de clase.
8
Por otro lado, otros métodos son invocados o ejecutados utilizando un objeto o instancia de
la clase en la cual están definidos, tal es el caso de los métodos de la clase String de Java.
Estos métodos son conocidos como métodos de instancia o de objeto.
8
Instancia: Representación concreta de una clase.
Una Instancia viene a ser lo mismo que un objeto. Crear un objeto o instanciar una clase se refiere a poder tener una
representación real de una clase.
Pag. 265
Ing. Juan José Flores Cueto.
Pag. 266
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
INTRODUCCIÓN
Los tipos de datos primitivos (boolean, byte, char, double, float, int, long, short),
conocidos también como tipos de datos simples, son los únicos elementos del
lenguaje de programación Java que se representan internamente a través de valores,
tal y como se representan en un lenguaje de programación convencional. Esto
significa que los tipos de datos primitivos no son objetos y se sitúan fuera de la
9
jerarquía de clases de Java. Esto tiene algunas ventajas desde el punto de vista de
la eficiencia.
Existe una clase wrapper para cada uno de los tipos de datos primitivos, que permiten
tratarlos como objetos. Dichas clases se muestran a continuación:
boolean Boolean
byte Byte
char Character
double Double
float Float
int Integer
Long Long
9
Jerarquía de clases: Forma de ordenar las clases.
La jerarquía de clases es una forma de ordenar las clases existentes en un lenguaje de Programación Orientado a
Objetos (POO). Una jerarquía de clases define conceptos abstractos en la parte superior de la jerarquía y conforme
se desciende en la jerarquía los conceptos se tornan cada vez más concretos. Java tiene su propia jerarquía de
clases, estando en la parte superior de la jerarquía, la clase Object (esta clase pertenece al paquete java.lang).
Pag. 267
Ing. Juan José Flores Cueto.
Short Short
java.lang.Object
Las clases Java, en general, tienen métodos estáticos y métodos de instancia. Para
ejecutar un método de instancia es necesario crear un objeto de la clase donde está
definido dicho método. Para crear un objeto en Java se usa la sentencia new (a
excepción de los objetos de algunas clases, como los objetos de la clase String que
no necesariamente se crean con dicha sentencia).
int i = 5;
Integer I = new Integer ( i );
Pag. 268
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
MÉTODOS
Con la finalidad de resumir los métodos de las clases wrappers que permiten la
conversión, comprobación y traslación de datos, se utilizarán algunos objetos de
dichas clases. Se asume que los objetos han sido creados previamente. Dichos
objetos son:
CLASE AL QUE
OBJETO
PERTENECE
S String
I Integer
L Long
F Float
D Double
C Character
También se utilizarán algunas variables para lo cual se deberá asumir que dichas
variables han sido declaradas previamente. Las variables son:
TIPO DE DATO
VARIABLE
PRIMITIVO
i int
l long
f float
d double
b boolean
c char
Para referirnos a objetos se utilizará una letra en mayúscula, mientras que, para
referirnos a las variables se utilizará una letra minúscula.
Pag. 269
Ing. Juan José Flores Cueto.
CLASES WRAPPERS Y
OBJETO STRING
VARIABLES
S = Integer.toString (i ) ;
S = Long.toString ( l ) ;
S = Float.toString ( f ) ;
S = Double.toString ( d ) ;
Observe que se utiliza el método toString ( ) para convertir el valor de una variable a
un valor de tipo cadena contenido en un objeto String. El método toString ( ) es un
método estático o de clase por que se utiliza directamente el nombre de la clase para
ejecutar el método.
S = I.toString ( ) ;
S = L.toString ( ) ;
S = F.toString ( ) ;
S = D.toString ( ) ;
Pag. 270
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
Todas las clases wrappers tienen en común el método estático o de clase toString ( ).
Esto se debe, a que este método no pertenece a dichas clases, sino que pertenece a
la clase Object.
Integer.valueOf (S) ;
i =
Integer.parseInt (S) ;
Long.valueOf (S) ;
l =
Long.parseLong (S) ;
Float.valueOf (S) ;
f =
Float.parseFloat (S) ;
Double.valueOf (S) ;
d =
Double.parseDouble (S) ;
Pag. 271
Ing. Juan José Flores Cueto.
I.intValue ( ) ;
L.intValue ( ) ;
i =
F.intValue ( ) ;
D.intValue ( ) ;
I.longValue ( ) ;
L.longValue ( ) ;
l =
F.longValue ( ) ;
D.longValue ( ) ;
I.floatValue ( ) ;
L.floatValue ( ) ;
f =
F.floatValue ( ) ;
D.floatValue ( ) ;
I.doubleValue ( ) ;
L.doubleValue ( ) ;
d =
F.doubleValue ( ) ;
D.doubleValue ( ) ;
Observe que todas las clases wrappers tienen en común los métodos de instancia
intValue ( ), longValue ( ), floatValue ( ) y doubleValue ( ).
Todas las clases wrappers tienen en común los métodos de instancia intValue( ),
longValue( ), floatValue( ) y doubleValue( ). Estos métodos pertenecen en realidad a
la clase Number.
Pag. 272
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
CLASES WRAPPERS Y
VARIABLE
VARIABLES
Float.isNaN ( f ) ;
b =
Double.isNaN ( d );
F.isNaN ( ) ;
b =
D.isNaN ( );
CLASES WRAPPERS Y
VARIABLE
VARIABLES
Float.isInfinite ( f ) ;
b =
Double.isInfinite ( d );
Pag. 273
Ing. Juan José Flores Cueto.
F.isInfinite ( ) ;
b =
D.isInfinite ( );
Comprobaciones de caracteres
“Devuelve true si el
Character.isLowerCase (c) ; caracter es una
letra minúscula”.
“Devuelve true si el
Character.isUpperCase (c) ; caracter es una
letra mayúscula”.
b =
“Devuelve true si el
Character.isDigit (c) ; caracter es un
dígito decimal”.
“Devuelve true si el
Character.isSpace (c) ; caracter es un
espacio en blanco”.
Pag. 274
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
Traslación de caracteres
“Convierte el
Character.toLowerCase (c); caracter a una letra
minúscula”.
c =
“Convierte el
Character.toUpperCase (c); caracter a una letra
mayúscula”.
Pag. 275
Ing. Juan José Flores Cueto.
Problema 61
Clase PrgConvertirAString
package dominioDeLaAplicacion ;
class PrgConvertirAString {
String cadena = “ ”;
Observe que es posible convertir cualquier tipo de dato a cadena (String) utilizando el método valueOf ( ) de
la clase String. En ciertas ocasiones esto es necesario ya que las cadenas pueden ser manipuladas. Analice
como se pueden manipular las variables de tipo cadena (String) más adelante en este mismo capítulo.
Pag. 276
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
Problema 62
Clase PrgConvertirFecha
package dominioDeLaAplicacion ;
import java.util.Date ;
class PrgConvertirFecha {
cadena = hoy.toString ( ) ;
System.out.println ( “ Fecha: ” + cadena ) ;
}
}
La clase Date, es una clase propia de Java y está incluida en el paquete java.util. En este paquete podrá
encontrar clases de utilidad para sus aplicaciones. Este paquete está fuera del alcance del presente texto
(sugiero que investigue las clases que forman parte de este paquete).
Observe como se convierte la fecha almacenada en un objeto (llamado hoy) de la clase Date en una cadena
(String) utilizando el método toString ( ) de la clase String. Esta cadena de texto podrá ser manipulada para
obtener otros datos, tales como, el día, el mes, el año actual o la hora del sistema. Analice como se pueden
manipular las variables de tipo cadena (String) más adelante en este mismo capítulo.
Pag. 277
Ing. Juan José Flores Cueto.
Problema 63
Clase PrgCadenaAEntero
package dominioDeLaAplicacion ;
class PrgCadenaAEntero {
int numEntero = 0 ;
String cadena = “10" ;
}
}
Observe que es posible convertir una cadena (String) en un valor entero (int) o en un objeto de la clase
Integer. Recuerde, que deberá asegurarse que la cadena contenga un valor válido para que pueda ser
almacenado en un tipo de dato determinado.
Puede utilizar el método parseInt ( ) de la clase String para convertir una cadena en un número entero
(numEntero) y también el método valueOf ( ) de la clase Integer para convertir una cadena en un un objeto
(objInteger) de la clase Integer. El método intValue ( ) nos permite obtener el valor entero del objeto
(objInteger) de la clase Integer.
Como sugerencia desarrolle un programa en Java que realice lo mismo que este programa pero utilice una
variable long y la clase Long.
Pag. 278
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
Problema 64
Desarrollar un programa en Java que permita convertir una cadena en un número real y
en un objeto de tipo Double. Calcular y mostrar la suma de ambos valores.
Clase PrgCadenaAReal
package dominioDeLaAplicacion ;
class PrgCadenaAReal {
double numRealDoble = 0 ;
String cadena = “10.5” ;
}
}
Observe que es posible convertir una cadena (String) en un valor entero (double) o en un objeto de la clase
Double. Recuerde, que deberá asegurarse que la cadena contenga un valor válido para que pueda ser
almacenado en un tipo de dato determinado.
Puede utilizar el método parseDouble ( ) de la clase Double para convertir una cadena en un número real
(numRealDoble) y también el método valueOf ( ) de la clase Double para convertir una cadena en un un
objeto (objDouble) de la clase Double. El método doubleValue ( ) nos permite obtener el valor real del objeto
(objDouble) de la clase Double.
Como sugerencia desarrolle un programa en Java que realice lo mismo que este programa pero utilice una
variable float y la clase Float.
Pag. 279
Ing. Juan José Flores Cueto.
Pag. 280
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
INTRODUCCIÓN
java.lang.Object
java.lang.Math
La clase Math contiene métodos de cálculo básico, como exponencial, logaritmo, raiz
cuadrada y funciones trigonométricas. La clase Math a diferencia de otras clases es
10
una clase final . Esto significa que no puede ser instanciada (es decir; no se pueden
crear objetos de la clase Math). Los métodos de la clase Math son métodos estáticos
(llamados también métodos de clase) y para poder utilizarlos solo se debe colocar el
nombre de la clase, el operador punto y el nombre del método a utilizar.
Ejemplo:
Math.pow (a, b) ;
10
Clase Final: No puede ser una superclase.
Una clase final o declarada como final es una clase que no puede ser una superclase. Es decir, las clases finales no
pueden heredarse. Todos los métodos de una clase final son implícitamente finales.
Pag. 281
Ing. Juan José Flores Cueto.
MÉTODOS
Atributos de clase:
1. E.
2. PI.
Métodos de clase:
1. abs( ).
2. acos( ).
3. asin( ).
4. atan( ).
5. ceil( ).
6. cos( ).
7. exp( ).
8. floor( ).
9. log( ).
10. max( ).
11. min( ).
12. pow( ).
13. random( ).
14. round( ).
15. sin( ).
16. sqrt( ).
17. tan( ).
18. toDegrees( ).
19. toRadians( ).
Para trabajar con los métodos de clase, de la clase Math, no será necesario crear
previamente un objeto de dicha clase (esto se cumple para todas las clases que
implementen métodos de clase).
Asimismo; para ejecutar un método de la clase Math debemos tener en cuenta que si,
el método necesita algunos datos, estos deben ser necesariamente proporcionados
en la cantidad y tipos requeridos. En caso que el método devuelva un resultado
deberá almacenarlo en una variable del mismo tipo que el resultado proporcionado o
mostrarlo a través de la pantalla.
A continuación se presenta una breve descripción del uso de cada uno de los
métodos de la clase Math:
Pag. 282
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
CLASE Math
ATRIBUTOS DE
DESCRIPCIÓN USO
CLASE
double e = Math.E ;
Almacena el valor de E. Es decir, nos
System.out.print( e) ;
proporciona la base de un logaritmo
E
natural. El valor es equivalente a
Resultado:
2.718281828459045.
e = 2.718281828459045.
double pi = Math.PI ;
Almacena el valor de PI. Es decir, System.out.print( pi) ;
PI almacena el valor equivalente a
3.141592653589793. Resultado:
pi = 3.141592653589793.
MÉTODOS DE
DESCRIPCIÓN USO
CLASE
abs (float)
int x = -5 ;
abs (double) Retorna el valor absoluto de un System.out.print( Math.abs( x)) ;
número (que puede ser float, double,
int, long) dado como parámetro. Resultado:
abs (int) x = 5.
abs (long)
Pag. 283
Ing. Juan José Flores Cueto.
MÉTODOS DE
DESCRIPCIÓN USO
CLASE
Resultado :
result = 0.6657737500283538
result = 1.0
Pag. 284
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
MÉTODOS DE
DESCRIPCIÓN USO
CLASE
double x = 2 , y = 4 , result ;
Retorna un valor double con la result = Math.pow( x , y ) ;
potencia de un número (dado como System.out.print ( result ) ;
primer parámetro) elevado a otro
pow (double, double)
número (dado como segundo Resultado:
parámetro). Los dos parámetros
dados deben ser double. result = 16.
round (float)
Resultado:
Pag. 285
Ing. Juan José Flores Cueto.
MÉTODOS DE
DESCRIPCIÓN USO
CLASE
result = 0.6018150231520483
double x = 16 , result ;
Retorna un valor double con la raiz result = Math.sqrt( x ) ;
System.out.print ( result ) ;
cuadrada del parámetro dado. El
sqrt (double)
parámetro dado debe ser un valor
double. Resultado:
result = 4.
Pag. 286
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
Problema 65
Desarrollar un programa en Java que permita ingresar 3 números enteros a través del
teclado. Determinar y mostrar cuál de ellos es el número mayor.
Clase PrgNumeroMayor
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgNumeroMayor {
Parámetros.
Operador punto.
Nombre de la Clase.
Pag. 287
Ing. Juan José Flores Cueto.
El método max ( ) nos permite determinar el número mayor entre dos números (en nuestro caso el número
mayor entre num2 y num3).
Observe que en esta solución se emplea una estrategia mas simple para determinar el número mayor entre
tres números. El método max ( ) de la clase Math, retorna el valor del número mayor (puede ser un número
float, double, int o long) de dos números dados como parámetros. En nuestro ejemplo determinamos el
mayor de los dos últimos números ingresados y en la misma línea de código evaluamos el mayor de estos
dos números con el primer número ingresado, tal y como se muestra a continuación:
Es importante tener presente que el método max ( ) es un método que solo podemos utilizar con la clase
Math y su función es determinar el número mayor entre dos números dados como parámetros.
Pag. 288
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
Problema 66
Desarrollar un programa en Java que permita ingresar 3 números enteros a través del
teclado. Determinar y mostrar cuál de ellos es el número menor.
Clase PrgNumeroMenor
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgNumeroMenor {
Observe el uso del método min ( ) de la clase Math: En la codificación de esta solución se emplea una nueva
estrategia para hallar el menor de tres números ingresados por teclado (anteriormente se utilizaban
sentencias if anidadas).
Observe que Math.min ( ) retorna el valor del número menor (que puede ser float, double, int, long) de dos
números dados como parámetros. En nuestro ejemplo hallamos el menor de los dos últimos números
ingresados, y en la misma línea evaluamos el menor de estos dos números con el primer número ingresado,
tal y como se muestra a continuación:
Pag. 289
Ing. Juan José Flores Cueto.
Problema 67
Clase PrgNumerosAleatorios
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgNumerosAleatorios {
En la codificación de esta solución se utiliza una sentencia for con la finalidad de generar la cantidad de
números aleatorios (al azar) que el usuario desee. Cada vez que se ejecuta la sentencia for, se genera y
muestra un número aleatorio (un número entre 1 y 6), el cual es acumulado en la variable suma. Finalizada la
ejecución de la sentencia for se muestra el contenido de dicha variable (es decir, se muestra la suma de los
números aleatorios generados).
Recuerde que para generar números aleatorios entre dos números (entre un intervalo o rango), utilizando el
método random ( ) de la clase Math, se emplea la siguiente fórmula:
Pag. 290
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
1 + (int) ( Math.random( ) * ( 6 – 1 + 1 ) ) ;
1 + (int) ( Math.random( ) * ( 6 ) ) ;
Pag. 291
Ing. Juan José Flores Cueto.
Problema 68
Clase PrgNumAleatoriosPares
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgNumAleatoriosPares {
do {
num = 1 + (int) ( Math.random( ) * 10 ) ;
if (num % 2 == 0) {
cont++;
System.out.print ( num + “ \t ” ) ;
}
En la codificación de esta solución se utiliza una sentencia do con la finalidad de generar números aleatorios.
Si el número generado es par se le aumenta uno a la variable cont (que esta trabajando como contador de
números pares generados al azar) y se muestra el número generado.
Pag. 292
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
Problema 69
Clase PrgNumAleatoriosImpares
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgNumAleatoriosImpares {
do {
num = 1 + (int) ( Math.random( ) * 10 ) ;
if ( num % 2 == 1 ) {
cont ++;
System.out.print ( num + “ \t ” ) ;
}
En la codificación de esta solución se utiliza una sentencia do con la finalidad de generar números aleatorios.
Si el número generado es impar se le aumenta uno a la variable cont (que esta trabajando como contador de
números impares generados al azar) y se muestra el número generado.
Pag. 293
Ing. Juan José Flores Cueto.
Problema 70
Desarrollar un programa en Java que permita ingresar por teclado el radio de una
esfera. Calcular y mostrar el volumen de dicha esfera.
Clase PrgRadioEsfera
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgRadioEsfera {
El método pow ( ) retorna un valor double con la potencia de un número (dado como primer parámetro)
elevado a otro número (dado como segundo parámetro). En nuestro caso el método pow ( ) eleva a la
potencia 3 el radio del círculo.
Para hallar el volumen de la esfera se tendrá que utilizar la fórmula v=4/3*PI*R3. La clase Math define un
atributo (constante) muy útil, que contiene en valor del número PI (Math.PI).
Pag. 294
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
Problema 71
Clase PrgNumRedondeado
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgNumRedondeado {
resultado = Math.round(num) ;
}
}
resultado = Math.round(num) ;
En esta solución se ingresa un número y se almacena en la variable num. Luego, dicho número es
redondeado utilizando el método round ( ) y se almacena en la variable resultado.
Pag. 295
Ing. Juan José Flores Cueto.
Problema 72
Clase PrgNumPotencia
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgNumPotencia {
El método pow ( ) permite elevar a la potencia un número determinado. En la presente solución se utiliza una
sentencia for con la finalidad de elevar a la potencia todos los números menores que la variable cant y
mostrarlos por pantala. La variable cant y el exponente expo se ingresan por el teclado.
Recuerde y siempre tenga presente que el método pow ( ) de la clase Math, retorna un valor double, por lo
que dicho valor deberá ser almacenado en una variable del mismo tipo o deberá mostrarse por la pantalla.
Pag. 296
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
Problema 73
Clase PrgNumRaiz
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgNumRaiz {
int cant ;
double rpta ;
rpta = Math.sqrt ( x ) ;
En la presente solución se utiliza una sentencia for con la finalidad de obtener la raíz cuadrada de todos los
números menores que la variable cant y mostrarlos por pantalla. La variable cant se ingresa por el teclado.
Recuerde y siempre tenga presente que el método sqrt ( ) de la clase Math, retorno un valor double, por lo
que dicho valor deberá ser almacenado en una variable del mismo tipo o deberá mostrarse por la pantalla.
Pag. 297
Ing. Juan José Flores Cueto.
Problema 74
Clase PrgNumAleatorioCuad
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgNumAleatorioCuad {
En la presente solución se utiliza una sentencia for con la finalidad de obtener números aleatorios, elevarlos
al cuadrado y mostrarlos por pantalla. La variable cant se ingresa por el teclado.
Pag. 298
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
Problema 75
Clase PrgTriangulo
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgTriangulo {
p = (a + b + c) / 2 ;
tmp = ( p * (Math.abs(p - a)) * (Math.abs(p - c)) * (Math.abs(p - b) ) ) ;
area = Math.sqrt ( tmp ) ;
Pag. 299
Ing. Juan José Flores Cueto.
En esta solución se ingresan los valores de los tres lados de un triángulo y se obtiene el valor del
semiperímetro del triángulo.
Primero, se hace uso del método abs ( ) de la clase Math para calcular el valor absoluto de la diferencia entre
el semiperímetro y cada uno de los lados del triángulo. Luego, se multiplican los valores resultantes con el
valor del semiperímetro del triángulo y finalmente, se obtiene la raíz cuadrada del valor resultante utilizando
el método sqrt ( ) de la clase Math.
Pag. 300
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
Problema 76
perimetro = 2 * PI * radio.
area = PI * radio * radio.
Clase PrgCirculo
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgCirculo {
Pag. 301
Ing. Juan José Flores Cueto.
Problema 77
Clase PrgConversionAngulo
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgConversionAngulo {
public static void main ( String arg [ ] ) {
double anguloGrados, anguloRadianes ;
String tipoAngulo = “” ;
Pag. 302
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
Para el desarrollo de esta solución se hace uso de sentencias if múltiples con la finalidad de determinar el
tipo de ángulo ingresado por teclado. El tipo de ángulo es almacenado en una variable String (tipoAngulo) y
mostrado por pantalla.
Para realizar la conversión del ángulo ingresado en el sistema sexagesimal al sistema radial se utiliza el
método toRadians ( ) de la clase Math.
Pag. 303
Ing. Juan José Flores Cueto.
Problema 78
Desarrollar un programa en Java que permita determinar y mostrar las raíces de una
ecuación de segundo grado. Tipo:
2
Ax + Bx + C = 0
Considerar que la solución puede tener raíces imaginarias. Utilizar la siguiente fórmula:
x = ( - B + - ( ( B ** 2 – 4 * A * C ) RAIZ ( 2 ) ) ) / 2 * A.
Clase PrgEcuacion2Grado
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgEcuacion2Grado {
public static void main ( String arg [ ] ) {
int a, b, c ;
double tmp, x, x1, x2 ;
System.out.println ( “ Ingrese el coeficiente A: ” ) ;
a = Lectura.leerInt( ) ;
System.out.println ( “ Ingrese el coeficiente B: ” ) ;
b = Lectura.leerInt( ) ;
System.out.println ( “ Ingrese el coeficiente C: ” ) ;
c = Lectura.leerInt( ) ;
if (a == 0 && b == 0) {
System.out.println ( “ La ecuación no tiene solución ” ) ;
} else {
tmp = Math.pow (b, 2) - (4 * a * c) ;
if (tmp < 0) {
System.out.println ( “ La ecuación tiene raices imaginarias ” ) ;
} else {
if (a == 0) {
x = c / b * (-1) ;
System.out.println ( “ El valor para x es: ” + x ) ;
} else {
x1 = ( - b + Math.sqrt (tmp)) / (2 * a) ;
x2 = ( - b - Math.sqrt (tmp)) / (2 * a) ;
System.out.println ( “ El primer valor para x es: ” + x1 ) ;
System.out.println ( “ El segundo valor para x es: ” + x2 ) ;
}
}
}
}
}
Pag. 304
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
En esta solución se ingresan los coeficientes de una ecuación de segundo grado (a, b y c). Si los coeficientes
a y b son iguales a cero, se muestra un mensaje por la pantalla; “La ecuación no tiene solución”. Caso
contrario, se determina el valor de la discriminante, el cual se almacena en la variable tmp utilizando la
siguiente formula:
En caso que el valor de tmp sea igual a cero, se muestra el siguiente mensaje por pantalla; “La ecuación
tiene raices imaginarias”. Caso contrario, si el coeficiente a es igual a cero la ecuación tendría una sola
solución, la cual se calcularía utilizando:
x = c / b * (-1) ;
Si el coeficiente a es diferente de cero la ecuación tendría dos soluciones, las cuales se calcularían
utilizando:
x1 = ( - b + Math.sqrt (tmp)) / (2 * a) ;
x2 = ( - b - Math.sqrt (tmp)) / (2 * a) ;
Pag. 305
Ing. Juan José Flores Cueto.
Problema 79
Clase PrgJuego
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgJuego {
public static void main ( String arg [ ] ) {
int maximo = 100, num, numAzar, inten = 1 ;
double tmp;
System.out.println ( “ Bienvenido al juego: ¿Que número es? ” ) ;
System.out.println ( “ ----------------------------------------------------” ) ;
System.out.println ( “ - La computadora genera un -” ) ;
System.out.println ( “ - numero aleatorio y ud. tratara -” ) ;
System.out.println ( “ - de adivinar que número es -” ) ;
System.out.println ( “ - Trate de adivinar el número en -” ) ;
System.out.println ( “ - el menor número de intentos -” ) ;
do {
System.out.println ( “ Ingrese un número entre 0..100: ” ) ;
num = Lectura.leerInt( ) ;
} while (num < 0 || num > 100 ) ;
tmp = maximo * Math.random( ) ;
numAzar = (int) Math.round(tmp) ;
while (num != numAzar) {
inten++ ;
if (num < numAzar)
System.out.println ( “ El número buscado es mayor ” ) ;
else
System.out.println ( “ El número buscado es menor ” ) ;
do {
System.out.println ( “ Ingrese otro número entre 0..100: ” ) ;
num = Lectura.leerInt( ) ;
} while (num < 0 || num > 100) ;
}
System.out.println ( “ Ud. encontró el número en: ” + inten + “ intento(s) ” ) ;
}
}
Pag. 306
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
Utilizando el método random ( ) generamos un número aleatorio (al azar) entre el número 0 y el número 100,
utilizando la siguiente fórmula:
Este número generado al azar, almacenado en la variable numAzar, es comparado con un número
previamente ingresado por teclado y almacenado en la variable num. Si ambos son iguales, se mostrará un
mensaje indicando que el número numAzar fue encontrado. Si no son iguales, se mostrará un mensaje,
indicando si el número buscado es mayor o es menor (en relación al número ingresado) y se solicitará otro
número hasta encontrar el número que se generó en forma aleatoria.
Pag. 307
Ing. Juan José Flores Cueto.
Problema 80
Desarrollar un programa en Java que permita ingresar 6 números a traves del teclado.
Determinar y mostrar cuál de ellos es el número mayor y cuál es el número menor.
Clase PrgNumeroMayorMenor
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgNumeroMayorMenor {
public static void main ( String arg [ ] ) {
int n1, n2, n3, n4, n5, n6 ;
double mayor, meno r;
System.out.println ( “ Ingrese el primer número: ” ) ;
n1 = Lectura.leerInt();
System.out.println ( “ Ingrese el segundo número: ” ) ;
n2 = Lectura.leerInt( ) ;
System.out.println ( “ Ingrese el tercer número: ” ) ;
n3 = Lectura.leerInt( ) ;
System.out.println ( “ Ingrese el cuarto número: ” ) ;
n4 = Lectura.leerInt( ) ;
System.out.println ( “ Ingrese el quinto número: ” ) ;
n5 = Lectura.leerInt( ) ;
System.out.println ( “ Ingrese el sexto número: ” ) ;
n6 = Lectura.leerInt( ) ;
mayor = Math.max (n1,n2) ;
mayor = Math.max (mayor,n3) ;
mayor = Math.max (mayor,n4) ;
mayor = Math.max (mayor,n5) ;
mayor = Math.max (mayor,n6) ;
menor = Math.min (n1,n2) ;
menor = Math.min (menor,n3) ;
menor = Math.min (menor,n4) ;
menor = Math.min (menor,n5) ;
menor = Math.min (menor,n6) ;
System.out.println ( “ El mayor número es: " + mayor ) ;
System.out.println ( “ El menor número es: " + menor ) ;
}
}
Modificar la codificación de la solución de tal forma que pueda optimizar el código. Utilice una sentencia for.
Pag. 308
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
Problema 81
Desarrollar un programa en Java que permita ingresar las notas de todos los alumnos
de un determinado salon de clase. Calcular y mostrar el promedio final de cada alumno
en base a la siguiente fórmula:
pf = ( pp + ep + ( ef * 2 ) ) / 4.
Donde:
pf = Promedio final.
pp = Promedio de prácticas.
Son 4 prácticas de las cuales se elimina la más baja
pp = ( p1 + p2 + p3 + p4 – notaMenor ) / 3
ep = Examen parcial.
ef = Examen final.
Clase PrgPromedioNotas
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgPromedioNotas {
do {
Pag. 309
Ing. Juan José Flores Cueto.
Clase PrgPromedioNotas
pp = ( p1 + p2 + p3 + p4 – notaMenor ) / 3 ;
pf = ( pp + ep + ef ) / 3 ;
pf = Math.round (pf) ;
opc=Lectura.leerChar( ) ;
}
}
Modificar la codificación de la solución de tal forma que se elimine la práctica con la nota más baja y se
duplique la nota de la práctica más alta. Muestre el promedio de las notas redondeado a dos decimales.
Pag. 310
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
Problema 82
Desarrollar un programa en Java que permita ingresar un número cualquiera con parte
decimal y muestre la parte entera del número, el número redondeado sin decimales, y
el número redondeado a uno, dos y tres decimales.
Clase PrgRedondearNumero
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgRedondearNumero {
double numero ;
System.out.println ( “ -----------------------------------” ) ;
System.out.println ( “ La parte entera del número es: ” ) ;
System.out.println ( Math.floor (numero) ) ;
El método floor ( ) retorna un valor double con el valor más grande no mayor que el parámetro dado. El
parámetro dado debe ser double. Nótese que si ingresamos un numero cuya parte decimal es mayor que 5
sólo retorna la parte entera para tal caso se le agrega 0.5 para que en el segundo cálculo tenga efecto de
redondeo perfecto. Observe como se redondea un número con uno, dos y tres decimales utilizando el
método floor ( ).
Pag. 311
Ing. Juan José Flores Cueto.
Problema 83
Sugerencia:
Utilice el método random ( ) de la clase Math para
generar el número del boleto ganador.
Clase PrgSorteo
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgSorteo {
double num ;
int boletos, ganador ;
do {
if (boletos > 0) {
do {
} while (ganador == 0) ;
Pag. 312
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
Problema 84
Clase PrgSumaCuadradosCubos
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgSumaCuadradosCubos {
Pag. 313
Ing. Juan José Flores Cueto.
Problema 85
Clase PrgSenCos
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgSenCos {
do{
}
}
Es importante mencionar que Java trabaja con el sistema radial y para obtener las razones trigonométricas,
seno y coseno, de un ángulo ingresado por teclado hay que convertirlo primero al sistema radial. Para esto,
utilizamos el método toRadians ( ) de la clase Math. Este método retorna un valor double y permite convertir
un ángulo expresado en el sistema sexagesimal (enviado como parámetro double) en un ángulo expresado
Pag. 314
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
en radianes. Una vez convertido el ángulo en radianes podemos utilizar los métodos sin ( ) y cos ( ) de la
clase Math para obtener el seno y el coseno del ángulo ingresado por teclado.
Pag. 315
Ing. Juan José Flores Cueto.
Problema 86
Clase PrgTangente
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgTangente {
anguloRadianes = Math.toRadians(anguloGrados) ;
tangente = Math.tan(anguloRadianes) ;
System.out.println ( “ La pendiente de la resta es = ” + tangente ) ;
}
}
El método tan ( ) permite hallar la pendiente de una recta con respecto al eje X. Para ello, utiliza el ángulo de
inclinación de la recta, expresado en el sistema radial, tal y como se muestra:
tangente = Math.tan(anguloRadianes) ;
Pag. 316
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
Problema 87
Clase PrgHipotenusa
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgHipotenusa {
}
}
La fórmula para este caso sería: (hipotenusa)2 = (cateto1)2 + (cateto2)2 . Se ingresan los catetos por el teclado
y son elevados al cuadrado con Math.pow ( ). El resultado obtenido, al elevar al cuadrado cada uno de los
catetos, se suman. Luego se obtiene la raíz cuadrada con Math.sqrt ( ) y finalmente se muestra el resultado
almacenado en la variable hipotenusa. Ejemplo:
Pag. 317
Ing. Juan José Flores Cueto.
Problema 88
Clase PrgPunto
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgPunto {
}
}
Sabemos que Math.atan ( ) retorna un valor double con el arcotangente de un ángulo expresado en radianes.
Dicho ángulo expresado en radianes debe ser un valor double enviado al método como parámetro.
Pag. 318
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
Pero en este caso, se ingresan por teclado la ordenada y la abcisa de un punto cualquiera en el sistema de
coordenadas, por lo que el método atan ( ) de la clase Math no nos serviría (este método necesita el valor de
un ángulo expresado en radianes y no los valores de las coordenadas de un punto).
En este caso, se utiliza el método atan2 ( ) de la clase Math. Este método nos permite obtener el valor del
arcotangente de un par ordenado.
Es importante mencionar que el método atan2 ( ) nos devuelve el arcotangente de un ángulo expresado en
radianes por lo cual se tendrá que convertir dicho ángulo al sistema sexagesimal, utilizando el método
toDegrees ( ) de la clase Math.
Pag. 319
Ing. Juan José Flores Cueto.
Problema 89
Clase PrgExpLog
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgExpLog {
exponencial = Math.exp(num) ;
logaritmo = Math.log(num) ;
exponencial = Math.exp(num) ;
logaritmo = Math.log(num) ;
En esta solución se hace necesario el uso del método exp ( ) para obtener el número e elevado al número
ingresado por teclado:
enum
También se hace necesario el uso del método log ( ) para obtener el logaritmo natural del número ingresado
en base e:
logenum
Pag. 320
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
Tenga presente que Java sólo resuelve logaritmos en base e y no en base 10.
Pag. 321
Ing. Juan José Flores Cueto.
Problema 90
Un jugador lanza dos dados, cada uno de los cuales tiene 6 caras, las caras contienen
1, 2, 3, 4 ,5 y 6 puntos. Una vez que los dados quedan en reposo, se suman los puntos
de las dos caras que quedan hacia arriba. Si la suma es 7 o 11 en el primer
lanzamiento, el jugador gana. Si la suma es 2, 3 o 12 en el primer lanzamiento
(resultado que en los casinos reciben el nombre de “craps”), el jugador pierde (es decir,
la casa gana). Si la suma es 4, 5, 6, 8, 9, 10 en el primer lanzamiento, esto suma se
convierte en el punto del jugador. Para ganar, el jugador debe seguir tirando los dados
hasta “lograr su punto”. El jugador perderá si tira un 7 antes de lograr su punto.
Clase PrgLanzarDados1
package dominioDeLaAplicacion ;
import biblioteca.* ;
class PrgLanzarDados1 {
do {
if ( suma1 == 7 || suma1 == 11 ) {
opc1 = “s” ;
estado = 1 ;
Pag. 322
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
Clase PrgLanzarDados1
} else
if ( suma1 == 2 || suma1 == 3 || suma1 == 12 ) {
opc1 = “s” ;
estado = 0 ;
} else {
do {
System.out.println ( “Lanzar dados” ) ;
Lectura.leerString ( ) ;
if ( suma1 == suma2 ) {
estado = 1 ;
opc1 = “s” ;
opc2 = “s” ;
} else
if ( suma2 == 7 ) {
estado = 0 ;
opc1 = “s” ;
opc2 = “s” ;
}
}
}while ( opc1 != “s” ) ;
if ( estado == 1 )
System.out.println ( “El jugador gana” ) ;
else
System.out.println ( “El jugador pierde ” ) ;
}
}
Pag. 323
Ing. Juan José Flores Cueto.
Problema 91
Modificar el programa del problema anterior, de tal forma que se muestre un mensaje
preguntando si desea volver a tirar los dados.
Clase PrgLanzarDados2
package dominioDeLaAplicacion ;
import biblioteca.* ;
class PrgLanzarDados2 {
do {
opc1 = “ ” ;
opc2 = “ ” ;
do {
if ( suma1 == 7 || suma1 == 11 ) {
opc1 = “s” ;
estado = 1 ;
} else
if (suma1 == 2 || suma1 == 3 || suma1 == 12) {
opc1 = “s” ;
estado = 0 ;
} else {
Pag. 324
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
Clase PrgLanzarDados2
do {
System.out.println ( “Lanzar dados” ) ;
Lectura.leerString ( ) ;
if ( suma1 == suma2 ) {
estado = 1 ;
opc1 = “s” ;
opc2 = “s” ;
} else
if ( suma2 == 7 ) {
estado = 0 ;
opc1 = “s” ;
opc2 = “s” ;
}
}
} while ( opc1 != “s” ) ;
if ( estado == 1 )
System.out.println ( “ El jugador gana ” ) ;
else
System.out.println ( “ El jugador pierde ” ) ;
opc3 = Lectura.leerChar ( ) ;
}
}
Pag. 325
Ing. Juan José Flores Cueto.
Problema 92
Clase PrgLanzarMoneda
package dominioDeLaAplicacion ;
import biblioteca.* ;
class PrgLanzarMoneda {
if (moneda == 1)
cont1 ++ ;
else
cont2 ++ ;
Pag. 326
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
Problema 93
Clase PrgTragamoneda1
package dominioDeLaAplicacion ;
import biblioteca.* ;
class PrgTragamoneda1 {
do {
s = (char) valor1 ;
switch (s) {
case 1 :
monto = 100 ;
break ;
case 2 :
monto = 200 ;
break ;
case 3 :
monto = 300 ;
break ;
Pag. 327
Ing. Juan José Flores Cueto.
Clase PrgTragamoneda1
case 4 :
monto = 400 ;
break ;
case 5 :
monto = 500 ;
break ;
case 6 :
monto = 600 ;
break ;
case 7 :
monto = 1000 ;
break ;
}
System.out.println ( “Usted gana : ” + monto + “Soles ” ) ;
} else
System.out.println ( “La casa gana” ) ;
monto = 0 ;
System.out.println ( “Desea volver a jugador [s/n] : ” ) ;
opc1 = Lectura.leerChar ( ) ;
Pag. 328
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
Problema 94
Modificar el programa del problema anterior, de tal forma que se muestre la cantidad
acumulada del dinero ganado en el tragamoneda.
Clase PrgTragamoneda2
package dominioDeLaAplicacion ;
import biblioteca.* ;
class PrgTragamoneda2 {
do {
s= (char) valor1 ;
switch ( s ) {
case 1 :
monto=100 ;
break ;
case 2 :
monto=200 ;
break ;
Pag. 329
Ing. Juan José Flores Cueto.
Clase PrgTragamoneda2
case 3 :
monto=300 ;
break ;
case 4 :
monto=400 ;
break ;
case 5 :
monto=500 ;
break ;
case 6 :
monto=600 ;
break ;
case 7 :
monto=1000 ;
break ;
}
} else
System.out.println ( “La casa gana” ) ;
monto = 0 ;
System.out.println ( “Desea volver a jugador [s/n] : ” ) ;
opc1=Lectura.leerChar ( ) ;
Pag. 330
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
Problema 95
Clase PrgMultiplicacion
package dominioDeLaAplicacion ;
import biblioteca.* ;
class PrgMultiplicacion {
if ( resul1 == resul2 )
System.out.println ( “Respuesta correcta… Muy bien” ) ;
else
System.out.println ( “No es la respuesta correcta… Vuelva a intentarlo” ) ;
Pag. 331
Ing. Juan José Flores Cueto.
Problema 96
Modificar el programa del problema anterior, de tal forma que se muestre un menú de
opciones donde permita sumar, restar, multiplicar y dividir dos números generados al
azar. Se permitirá al estudiante contestar la misma pregunta una y otra vez hasta que
responda correctamente.
Clase PrgMenuOperaciones1
package dominioDeLaAplicacion ;
import biblioteca.* ;
class PrgMenuOperaciones1 {
do {
case 1 :
resul1 = valor1 + valor2 ;
operacion = “Suma” ;
signo = ‘+’ ;
break ;
Pag. 332
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
Clase PrgMenuOperaciones1
case 2 :
resul1 = valor1 - valor2 ;
operacion = “Resta” ;
signo = ‘-’ ;
break ;
case 3 :
resul1 = valor1 * valor2 ;
operacion = “Multiplicación” ;
signo = ‘*’ ;
break ;
case 4 :
resul1 = valor1 / valor2 ;
operacion = “División” ;
signo = ‘/’ ;
break ;
case 5 :
System.exit (0) ;
break ;
}
do {
if ( resul1 != resul2 )
System.out.println ( “No es, por favor trata otra vez” ) ;
} while ( op != 5 ) ;
}
}
Pag. 333
Ing. Juan José Flores Cueto.
Problema 97
Modificar el programa del problema anterior, de tal forma que se muestre un menú de
opciones donde permita sumar, restar, multiplicar y dividir dos números al azar. Mostrar
la cantidad de preguntas correctas y la cantidad de preguntas incorrectas.
Clase PrgMenuOperaciones2
package dominioDeLaAplicacion ;
import biblioteca.* ;
class PrgMenuOperaciones2 {
do {
case 1 :
resul1 = valor1 + valor2 ;
operacion = “Suma” ;
signo = ‘+’ ;
break ;
Pag. 334
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
Clase PrgMenuOperaciones2
case 2 :
resul1 = valor1 - valor2 ;
operacion = “Resta” ;
signo = ‘-’ ;
break ;
case 3 :
resul1 = valor1 * valor2 ;
operacion = “Multiplicación” ;
signo = ‘*’ ;
break ;
case 4 :
resul1 = valor1 / valor2 ;
operacion = “División” ;
signo = ‘/’ ;
break ;
case 5 :
System.exit (0) ;
break ;
}
if ( resul1 != resul2 ) {
System.out.println ( “No es, por favor trata otra vez” ) ;
cont1 ++ ;
} else {
System.out.println ( “Muy bien” ) ;
cont2 ++ ;
}
} while ( op != 5 ) ;
}
}
Pag. 335
Ing. Juan José Flores Cueto.
Problema 98
Elaborar un programa que permita adivinar cuál es el número entero generado al azar
entre 1 y 1000. El jugador ingresará una primera estimación, si la estimación del
jugador es incorrecta, el programa deberá indicar si el número ingresado fue más
grande o fué más pequeño que el número generado al azar. Cuando la respuesta sea
correcta se mostrará un mensaje de felicitaciones.
Clase PrgAdivinarNumero1
package dominioDeLaAplicacion ;
import biblioteca.* ;
class PrgAdivinarNumero1 {
Pag. 336
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
Problema 99
Modificar el programa del problema anterior, de tal forma que se pueda ingresar la
cantidad de intentos que se tiene para adivinar el número.
Clase PrgAdivinarNumero2
package dominioDeLaAplicacion ;
Import biblioteca.* ;
class PrgAdivinarNumero2 {
do {
System.out.println ( “Ingresar número : ” ) ;
num = Lectura.leerInt ( ) ;
if (cont >= intentos ) {
System.out.println ( “Deberías haberlo hecho mejor” ) ;
valor = num ;
}
else if ( num < valor )
System.out.println ( “El número es demasiado chico. Pruebe otra vez” ) ;
Pag. 337
Ing. Juan José Flores Cueto.
Pag. 338
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
INTRODUCCIÓN
Ejemplo:
String nom = “Danae” ;
java.lang.Object
java.lang.String
La clase String permite manipular las variables de tipo texto o cadena a través de los
métodos que implementa (la clase String tiene métodos de instancia y métodos de
clase). La clase String incluye métodos que permiten examinar los caracteres
individuales de una cadena para compararlos, para ubicarlos, para extraerlos como
subcadenas, y para crear copias de una cadena convirtiendo todos sus caracteres a
letra mayúscula o minúscula.
Las conversiones son realizadas a través del método toString ( ), método definido en
la clase Object, el cual puede ser utilizado por todas las clases Java a través de la
herencia.
Pag. 339
Ing. Juan José Flores Cueto.
MÉTODOS
Métodos de instancia:
1. charAt( ).
2. compareTo( ).
3. concat( ).
4. endsWith( ).
5. equals( ).
6. equalsIgnoreCase( ).
7. indexOf( ).
8. lastIndexOf( ).
9. length( ).
10. replace( ).
11. startsWith( ).
12. substring( ).
13. toCharArray( ).
14. toLowerCase( ).
15. trim( ).
16. toUpperCase( ).
Métodos de clase:
17. valueOf( ).
Asimismo, para ejecutar cualquiera de los método de la clase String, se debe tener en
cuenta que si, el método necesita algunos datos, éstos deben ser necesariamente
proporcionados en la cantidad y tipos requeridos. En caso, que el método devuelva un
resultado, éste deberá almacenarse en una variable del mismo tipo o mostrarse a
través de la pantalla.
A continuación se presenta una breve descripción del uso de cada uno de los
métodos de la clase String:
Pag. 340
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
CLASE String
MÉTODOS DE
DESCRIPCIÓN USO
INSTANCIA
Si la cadena es alfabéticamente
menor que la cadena colocada
como parámetro, el método String cad1 = “Hola Danae”;
devuelve un número entero menor String cad2 = “Hola Pedro”;
que cero. Si las dos cadenas son int x = cad1.compareTo(cad2);
compareTo(String)
alfabéticamente iguales devuelve
un número cero y si la cadena es Resultado:
alfabéticmente mayor que la x < 0 (cad1<cad2).
cadena colocada como parámetro,
el método devuelve un entero
mayor que cero.
Pag. 341
Ing. Juan José Flores Cueto.
MÉTODOS DE
DESCRIPCIÓN USO
INSTANCIA
x = true.
Pag. 342
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
MÉTODOS DE
DESCRIPCIÓN USO
INSTANCIA
String cad1 = “Hola Danae”;
Devuelve la longitud de una int x = cad1.length();
length() cadena. Es decir, el número de
caracteres que tiene la cadena. Resultado:
x = 10.
Pag. 343
Ing. Juan José Flores Cueto.
MÉTODOS DE
DESCRIPCIÓN USO
INSTANCIA
String cad1 = “Hola Danae”;
String x = cad1.toUpperCase();
Convierte las letras de una cadena
toUpperCase()
en letras mayúsculas.
Resultado:
x = “HOLA DANAE”.
String.valueOf(boolean)
String.valueOf(int) double pi = 3.1416;
String.valueOf(long) Método de clase que permite String x = String.valueOf(pi);
String.valueOf(float) convertir los valores de otros tipos
String.valueOf(double) de datos o variables a una cadena.
String.valueOf(Object) resultado:
String.valueOf(char[ ]) x = “3.1416”.
String.valueOf(char[ ], int,int)
Pag. 344
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
Problema 100
Clase PrgConvertirMayuscula
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgConvertirMayuscula {
String nom ;
nom = nom.toUpperCase( ) ;
nom.toUpperCase ( ) ;
Nombre del método.
Operador punto.
Nombre de la variable
(objeto).
El método toUpperCase ( ) se utiliza con variables de tipo String y permite convertir en letras mayúsculas el
contenido de la variable que antecede al nombre del método y al operador punto (en nuestro caso la variable
nom). Como el método toUpperCase ( ) nos devuelve un valor de tipo String (el contenido de la variable en
letra mayúscula), podemos mostrar el resultado utilizando System.out.println o almacenarlo en una variable
(que puede ser la variable que contenía la cadena original), tal y como lo hemos realizado en nuestro
ejemplo:
Pag. 345
Ing. Juan José Flores Cueto.
nom = nom.toUpperCase ( ) ;
Es importante tener presente que el método toUpperCase ( ) es un método que solo podemos utilizar con
variables de tipo String y su función es convertir el contenido de una variable en letras mayúscula.
Pag. 346
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
Problema 101
Clase PrgConvertirMinuscula
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgConvertirMinuscula {
String nom ;
nom = nom.toLowerCase( ) ;
nom.toLowerCase ( ) ;
Nombre del método.
Operador punto.
Nombre de la variable
(objeto).
El método toLowerCase ( ) se utiliza con variables de tipo String y permite convertir en letras minúsculas el
contenido de la variable que antecede al nombre del método y al operador punto (en nuestro caso la variable
nom). Como el método toLowerCase ( ) nos devuelve un valor de tipo String (el contenido de la variable en
letra minúscula), podemos mostrar el resultado utilizando System.out.println o almacenarlo en una variable
(que puede ser la variable que contenía la cadena original), tal y como lo hemos realizado en nuestro
ejemplo:
Pag. 347
Ing. Juan José Flores Cueto.
nom = nom.toLowerCase ( ) ;
Es importante tener presente que el método toLowerCase ( ) es un método que solo podemos utilizar con
variables de tipo String y su función es convertir el contenido de una variable en letras minúscula.
Pag. 348
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
Problema 102
Clase PrgConcatenarNombres
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgConcatenarNombres {
nom1 = nom1.concat(espacio) ;
nombre = nom1.concat(nom2) ;
El método concat ( ) se utiliza para juntar o concatenar el contenido de dos variables de tipo String (la misma
función cumple el signo “+ “cuando trabaja con variables de tipo String).
Es decir, el contenido de la variable nom1 y el contenido de la variable espacio se juntan (o concatenan) y el
resultado se almacena en la variable que antecede al signo = (en nuestro caso la misma variable nom1).
Luego el contenido de la variable nom1 se junta con el contenido de la variable nom2 y el resultado se
almacena en la variable nombre.
Pag. 349
Ing. Juan José Flores Cueto.
Esto permite juntar o concatenar los nombres del alumno con un espacio en blanco entre ellos en una única
variable de tipo String.
También podría visualizarse directamente el resultado de juntar o concatenar dos variables de tipo String
(cadenas) utilizando System.out.println, como se muestra a continuación:
Pag. 350
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
Problema 103
Clase PrgLongitudCadena
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgLongitudCadena {
int cant ;
String nom ;
do {
System.out.println ( “ Ingresar el nombre: ” ) ;
nom = Lectura.leerString( ) ;
nom = nom.trim( ) ;
if ( nom.length( ) < 2 ) {
System.out.println ( “ Nombre ingresado no válido… Reintente! ” ) ;
}
} while (nom.length( ) < 2 ) ;
cant = nom.length( ) ;
nom = nom.trim ( ) ;
El método trim ( ) permite eliminar los espacios en blanco que pueden existir al inicio y/o al final de una
cadena contenida en una variable (en nuestro caso la cadena contenida en la variable nom). Esto se realiza
como precaución, ya que el usuario puede haber presionado la barra espaciadora antes de ingresar el
nombre del alumno y esto se almacena en la variable como espacios en blanco.
Pag. 351
Ing. Juan José Flores Cueto.
cant = nom.length ( ) ;
El método length ( ) se utiliza con variables de tipo String y nos permite contar la cantidad de caracteres que
almacena una variable (en nuestro caso, la cantidad de caracteres que almacena la variable nom). Como el
método length ( ) devuelve la cantidad de caracteres que tiene una variable (incluido los espacios en blanco),
podemos mostrar el resultado utilizando System.out.println(), utilizarlo en una condición lógica o almacenarlo
en una variable. En nuestro ejemplo lo utilizamos como condición lógica y para almacenarlo en una variable.
En la líneas de código mostradas a continuación, se consistencia el ingreso del nombre de tal forma que no
se permita ingresar un nombre que tenga menos de 2 caracteres (se asume que pueden haber nombres de 2
caracteres o mas, como por ejemplo; Lu, Ana, José, Pedro, que tienen 2, 3, 4, y 5 caracteres
respectivamente).
do {
System.out.println ( “ Ingresar el nombre: ” ) ;
nom = Lectura.leerString( ) ;
nom = nom.trim ( ) ;
if ( nom.length ( ) < 2 ) {
System.out.println ( “Nombre ingresado no válido… Reintente! ” ) ;
}
} while (nom.length ( ) < 2) ;
Pag. 352
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
Problema 104
Clase PrgConvertirMayuscula2
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgConvertirMayuscula2 {
do {
System.out.println ( “ Ingresar el nombre: ” ) ;
nom = Lectura.leerString( ) ;
nom = nom.trim( ) ;
if ( nom.length( ) < 2 ) {
System.out.println ( “ Nombre ingresado no válido… Reintente! ” ) ;
}
} while ( nom.length( ) < 2 ) ;
nom = nom.toUpperCase( ) ;
System.out.println ( “ El nombre en Mayúscula es: ” + nom ) ;
}
}
En la codificación de este programa, se debe eliminar los espacios en blanco que la variable nom pueda tener
al inicio y al final del dato que contiene, luego se consistencia que tenga por lo menos 2 caracteres y luego se
convierte el contenido de la variable nom en letra mayúscula, para finalmente mostrar su contenido por
pantalla.
En consecuencia, se puede afirmar que esta solución es más óptima que la solución presentada en el
problema 100.
Pag. 353
Ing. Juan José Flores Cueto.
Problema 105
Clase PrgPrimeroMayuscula
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgPrimeroMayuscula {
do {
System.out.println ( “ Ingresar el nombre: ” ) ;
nom = Lectura.leerString( ) ;
nom = nom.trim( ) ;
if ( nom.length( ) < 2 ) {
System.out.println ( “ Nombre ingresado no válido… Reintente! ” ) ;
}
} while (nom.length( ) < 2 ) ;
cadena1 = nom.substring(0,1) ;
cadena1 = cadena1.toUpperCase( ) ;
cadena2 = nom.substring(1) ;
nom = cadena1.concat(cadena2) ;
cadena1 = nom.substring(0,1) ;
cadena2 = nom.substring(1) ;
El método substring ( ) se utiliza de dos formas. La primera forma nos permite obtener una subcadena desde
una posición inicial hasta un caracter antes de la posición final indicada. La segunda forma nos permite
obtener una subcadena desde una posición determinada hasta el final de la cadena.
Imagínese que la variable nom contiene el nombre “danae”, tal y como se muestra a continuación:
Pag. 354
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
nom = “danae”.
Cuando manipulamos cadenas con el método substring ( ) debemos tener en cuenta que cada caracter de la
cadena tiene una determinada posición, empezando por la posición cero (0).
nom = “danae”.
posición 0
cadena1 = nom.substring(0,1) ;
Donde, el primer número del método substring ( ) indica la posición de la cadena nom desde donde va a
empezar la subcadena y el segundo número indica la posición final de la cadena (es importante mencionar
que se debe incluir hasta un caracter antes de la posición final indicada). Esto nos permite solo obtener el
primer caracter de nom (la letra “d”).
Suponiendo que se desee obtener la subcadena “ana” de la cadena “danae” contenida en la variable nom,
utilizaríamos la siguiente sentencia:
Continuando con nuestro ejemplo, una vez obtenida la primera letra del nombre se convierte a mayúscula
utilizando:
cadena1 = cadena1.toUpperCase ( ) ;
Ahora es necesario obtener el resto del contenido de la variable nom. Esto lo realizamos utilizando:
Esta es la segunda forma de utilizar el método substring ( ), donde el número (en nuestro caso el número 1),
indica la posición de la cadena nom donde va a comenzar la subcadena (la primera letra “a”) hasta el final de
la cadena.
Ahora en la variable cadena1 tenemos almacenada la letra “D” y en la variable cadena2 tenemos
almacenadas las letras “anae”. Para finalizar solo será necesario juntar o concatenar ambas variables en la
variable original nom, utilizando el método concat ( ).
Pag. 355
Ing. Juan José Flores Cueto.
Problema 106
Clase PrgMayusculaMinuscula
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgMayusculaMinuscula {
int cant ;
String nom, cadena1 = “” , cadena2 = “” ;
do {
System.out.println ( “ Ingresar el nombre: ” ) ;
nom = Lectura.leerString( ) ;
nom = nom.trim( ) ;
if ( nom.length( ) < 2) {
System.out.println ( “ Nombre ingresado no válido… Reintente! ” ) ;
}
} while (nom.length( ) < 2 ) ;
cadena1 = nom.substring(0,1) ;
cadena1 = cadena1.toUpperCase( ) ;
cadena2 = nom.substring(1) ;
cadena2 = cadena2.toLowerCase( ) ;
nom = cadena1.concat(cadena2) ;
System.out.println ( “ El nombre del alumno es: ” + nom ) ;
}
}
Observe el uso de los métodos trim ( ), length ( ), substring ( ) en sus dos formas, toUpperCase ( ),
toLowerCase ( ) y concat ( ) de la clase String.
En la codificación de este programa, se convierte en mayúscula la primera letra del nombre y el resto se
convierte en minúscula. Esto como precaución de que se ingrese todo el nombre en mayúscula o en forma
combinada entre letras mayúsculas y minúsculas. Finalmente siempre el nombre tendrá la primera letra en
mayúscula y el resto en letra minúscula.
En consecuencia, se puede afirmar que esta solución es más óptima que la solución presentada en el
problema 104.
Pag. 356
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
Problema 107
Clase PrgNombreCompleto
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgNombreCompleto {
public static void main(String [ ] args) {
int cant ;
String nom, cadena1 = “”,cadena2 = “”, caracter ;
do {
System.out.println ( “ Ingresar el nombre: ” ) ;
nom = Lectura.leerString( ) ;
nom = nom.trim( ) ;
if ( nom.length( ) < 2) {
System.out.println ( “ Nombre ingresado no válido… Reintente! ” ) ;
}
} while (nom.length( ) < 2) ;
cant = nom.length( ) ;
for (int x=0; x<cant; x++) {
if ( x==0) {
cadena1 = nom.substring(0,1) ;
cadena1 = cadena1.toUpperCase( ) ;
cadena2 = nom.substring(1) ;
cadena2 = cadena2.toLowerCase( ) ;
nom = cadena1.concat(cadena2) ;
} else {
caracter = nom.substring(x, x+1) ;
if (caracter.equals ( “ ” ) ) {
cadena1 = nom.substring(0,x+1) ;
caracter = nom.substring(x+1, x+2) ;
caracter = caracter.toUpperCase( );
cadena2 = nom.substring(x+2) ;
nom = cadena1 + caracter + cadena2 ;
}
}
}
System.out.println ( “ El nombre del alumno es: ” + nom ) ;
}
}
Pag. 357
Ing. Juan José Flores Cueto.
if (caracter.equals (“ “)) {
El método equals ( ) se utiliza con variables de tipo String y nos permite comparar el contenido de dos
cadenas (en nuestro caso la variable caracter con un espacio en blanco). Si al comparar el contenido de las
dos cadenas resulta que ambas variables son iguales, el método equals ( ) nos devuelve un valor verdadero
(true), en caso contrario nos devuelve un valor falso (false). Este valor devuelto se evalúa en la estructura de
decisión if.
Nosotros desearíamos que la primera letra de cada nombre y de cada apellido de un alumno este en letra
mayúscula, mientras que el resto de las letras estén en letra minúscula.
Al inicio utilizamos parte de la solución del problema 105. Después obtenemos caracter por caracter y
evaluamos si el caracter obtenido es un espacio en blanco. Si el caracter resulta ser un espacio en blanco
entonces se almacena y se convierte en letra mayúscula la letra siguiente al espacio en blanco. El siguiente
esquema muestra como se debe almacenar parcialmente el nombre del ejemplo en la variable nom.
Después se concatenan las tres variables y se almacenan en la variable nom. El proceso se repite hasta
llegar al final de la cadena.
Ahora considere si entre los nombres existe más de un espacio en blanco. ¿Qué sucede? Modificando la
solución anterior para poder considerar la problemática anterior tendríamos la siguiente variación:
cant = nom.length( ) ;
sw = false ;
for (int x=0; x<cant; x++) {
if (x==0) {
cadena1 = nom.substring(0,1) ;
cadena1 = cadena1.toUpperCase( ) ;
cadena2 = nom.substring(1) ;
cadena2 = cadena2.toLowerCase( ) ;
nom = cadena1.concat(cadena2) ;
} else {
caracter = nom.substring(x, x+1) ;
if (caracter.equals( “ ” ) ) {
sw = true ;
} else {
if (sw) {
Pag. 358
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
cadena1 = nom.substring(0,x) ;
caracter = nom.substring(x, x+1) ;
caracter = caracter.toUpperCase( );
cadena2 = nom.substring(x+1) ;
nom = cadena1 + caracter + cadena2 ;
sw = false ;
}
}
}
}
En esta parte modificada de la solución se utiliza un centinela (o flag) que nos permite indicar el momento
preciso para realizar la conversión de la primera letra del nombre o apellido a letra mayúscula, sin
preocuparnos de la cantidad de espacios en blanco que pueda existir entre dos nombres.
Pag. 359
Ing. Juan José Flores Cueto.
Problema 108
Clase PrgLongitudCadenaBlanco
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgLongitudCadenaBlanco {
int x,cant,cont=0 ;
String nom,caracter ;
do {
System.out.println ( “ Ingresar el nombre: ” ) ;
nom = Lectura.leerString( ) ;
nom = nom.trim( ) ;
if ( nom.length( ) < 2 ) {
System.out.println ( “ Nombre ingresado no válido… Reintente! ” ) ;
}
cant = nom.length( ) ;
for (x=0;x<cant;x++) {
caracter = nom.substring(x,x+1) ;
if (caracter.equals ( “ ” ) ) {
cont ++ ;
}
}
System.out.println ( “ La cantidad de espacios: ” + cont ) ;
}
}
Observe el uso de los métodos trim ( ), length ( ), substring ( ) y equals ( ) de la clase String.
En la codificación de este programa, se evalúa caracter por caracter (de la variable nom). Si el caracter es
igual a un espacio en blanco (“ “), se le aumenta uno a la variable cont (que esta trabajando como contador
de espacios encontrados en la variable nom).
Pag. 360
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
Problema 109
Clase PrgLongitudCadenaNoBlanco
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgLongitudCadenaNoBlanco {
do {
System.out.println ( “ Ingresar el nombre: ” ) ;
nom = Lectura.leerString( ) ;
nom = nom.trim( ) ;
if ( nom.length( ) < 2 ) {
System.out.println ( “ Nombre ingresado no válido… Reintente! ” ) ;
}
} while (nom.length( ) < 2 ) ;
cant = nom.length( ) ;
for (x=0; x<cant; x++) {
caracter = nom.substring(x,x+1) ;
if ( !caracter.equals ( “ ” ) ) {
cadena = cadena.concat(caracter) ;
}
}
cant = cadena.length( ) ;
System.out.println ( “ La cantidad de caracteres sin contar espacios: ” + cant ) ;
}
}
Observe el uso de los métodos trim ( ), length ( ), substring ( ) y equals ( ) de la clase String.
En la codificación de este programa, se evalúa caracter por caracter (de la variable nom). Si el caracter no es
un espacio en blanco se junta o concatena con los caracteres de la variable cadena (al inicio no contiene
ningún caracter). Al final se obtiene la longitud de la variable cadena, que equivale a la cantidad de caracteres
de la variable nom diferentes a espacios en blanco.
Pag. 361
Ing. Juan José Flores Cueto.
Problema 110
Desarrollar una solución que permita ingresar los apellidos y nombres de un obrero (en
una sola variable). Mostrar el número de caracteres que no son espacios en blanco y el
número de caracteres que son espacios en blanco.
Clase PrgLongitudCadenaBlancoNoBlanco
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgLongitudCadenaBlancoNoBlanco {
public static void main(String [ ] args) {
int x, cant, cont = 0 ;
String nom, caracter ;
do {
System.out.println ( “ Ingresar el nombre: ” ) ;
nom = Lectura.leerString( ) ;
nom = nom.trim( ) ;
if ( nom.length( ) < 2 ) {
System.out.println ( “ Nombre ingresado no válido… Reintente! ” ) ;
}
} while (nom.length( ) < 2 ) ;
cant = nom.length( ) ;
fo r(x=0; x<cant; x++) {
caracter = nom.substring(x,x+1) ;
if (caracter.equals ( “ ” ) ) {
cont ++ ;
}
}
System.out.println ( “ La cantidad de espacios: ” + cont ) ;
System.out.println ( “ La cantidad de caracteres sin contar espacios: ” + ( cant - cont ) ) ;
}
}
En la codificación de este programa, se emplea la misma estrategia que la utilizada en la solución del
problema 108, para obtener el número de espacios en blanco contenidos en la variable nom. Al final se
obtiene la longitud total de la cadena nom y realizando una simple resta se obtiene el número de caracteres
de la variable nom que no son espacios en blanco.
Pag. 362
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
Problema 111
Clase PrgTotalVocales1
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgTotalVocales1 {
do {
System.out.println ( “ Ingresar el nombre: ” ) ;
nom = Lectura.leerString( ) ;
nom = nom.trim( ) ;
if ( nom.length( ) == 0 ) {
System.out.println ( “ Nombre ingresado no válido… Reintente! ” ) ;
}
} while (nom.length( ) == 0 ) ;
cant = nom.length( ) ;
nom = nom.toLowerCase( ) ;
Pag. 363
Ing. Juan José Flores Cueto.
nom.charAt (x) ;
El método charAt ( ) se utiliza con variables de tipo String y nos permite obtener un caracter de una cadena.
En nuestro caso, obtenemos un caracter de la variable nom y lo almacenamos en una variable de tipo char
(el método charAt ( ) devuelve un caracter).
c = nom.charAt (x) ;
El caracter obtenido es evaluado para determinar si es o no una vocal. Esta evaluación se realiza a través de
los códigos ASC correspondientes a las vocales (es importante mencionar que la evaluación de una variable
de tipo char se puede realizar utilizando los códigos ASC equivalentes a los caracteres especiales, letras y
números).
Antes de iniciar la evaluación de cada uno de los caracteres de la variable nom, se utiliza el método
toLowerCase ( ) para asegurarnos de convertir a letras minúsculas todos los caracteres de la variable nom y
luego utilizar los códigos ASC equivalentes a las vocales en minúscula.
Modifique la solución anterior de tal forma que pueda determinar cuantas vocales almacenadas en la variable
son a, e, i, o y u (en forma independiente).
Pag. 364
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
Problema 112
Clase PrgTotalVocalesNoVocales
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgTotalVocalesNoVocales {
do {
System.out.println ( “ Ingresar el nombre: ” ) ;
nom = Lectura.leerString( ) ;
nom = nom.trim( ) ;
if ( nom.length( ) == 0 ) {
System.out.println ( “ Nombre ingresado no válido… Reintente! ” ) ;
}
} while (nom.length( ) == 0 ) ;
cant = nom.length( ) ;
nom = nom.toLowerCase( ) ;
Pag. 365
Ing. Juan José Flores Cueto.
Este programa es similar al programa desarrolado en el problema 111. La diferencia es que se obtiene el
total de caracteres que tiene la variable y se resta del total de vocales que tiene, para poder obtener el total
de caracteres que no son vocales.
Modifique la solución anterior de tal forma que pueda determinar cuántas vocales almacenadas en la variable
nom son mayúsculas y cuántas son minúsculas. También puede modificar la solución de tal forma que
permita determinar cuántas consonantes contiene la variable nom. Recuerde utilizar los equivalentes en
código ASC de las consonantes en letra minúscula o en letra mayúscula.
Pag. 366
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
Problema 113
Desarrollar un programa en Java que permita ingresar dos cadenas. Contar y mostrar
cuantas veces se repite la segunda cadena en la primera cadena ingresada.
Clase PrgCadenaSubcadena
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgCadenaSubcadena {
do {
System.out.println ( “ Ingresar una cadena: ” ) ;
cad1 = Lectura.leerString( ) ;
cad1 = cad1.trim( ) ;
if (cad1.length( ) == 0 ) {
System.out.println ( “ Cadena ingresada no válido... Reintente! ” ) ;
}
} while (cad1.length( ) == 0 ) ;
do {
System.out.println ( “ Ingresar una subcadena de la primera cadena: ” ) ;
cad2 = Lectura.leerString( ) ;
cad2 = cad2.trim( ) ;
if (cad2.length( ) == 0) {
System.out.println ( “ Cadena ingresada no válida... Reintente! ” ) ;
}
} while (cad2.length( ) == 0 ) ;
Pag. 367
Ing. Juan José Flores Cueto.
Clase PrgCadenaSubcadena
} else {
if (cad1.equals (cad2) ) {
System.out.println ( “ las cadenas son iguales ” ) ;
} else {
System.out.println ( “ la segunda cadena no debe tener una longitud ” ) ;
System.out.println ( “ mayor que la primera cadena ” ) ;
}
}
}
}
Observe el uso de los métodos trim ( ), length ( ), substring ( ) y equals ( ) de la clase String.
En primer lugar, se verifica que la primera cadena (cad1) tenga una longitud mayor que la segunda cadena
(cad2). Luego, se obtiene la diferencia entre las longitudes de cad1 y cad2, y se almacena en la variable total.
El límite para la evaluación del número de veces que se repite cad2 en cad1, es el caracter ubicado en la
posición total de cad2. Después, empezando desde el primer caracter de cad1 se extrae una subcadena
(subcad) del mismo tamaño que cad2 y se comparan para ver si son iguales utilizando el método equals ( ).
Si son iguales el contador cont aumenta en 1. Este proceso se repite utilizando el siguiente caracter de cad1.
En primer lugar determinamos que cad1 tiene una longitud mayor que cad2. Luego, calculamos el valor
de la variable total (total = 5-3 = 2).
Pag. 368
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
El límite para la evaluación del número de veces que se repite cad2 en cad1 es el caracter ubicado en la
posición 2 de cad2.
cad1 = “Danae”
0 12
Segunda evaluación:
cad2 = “ana” y subcad = “ana”
Resultado: verdadero (cont =1).
Primera evaluación:
cad2 = “ana” y subcad = “nae”
Resultado: falso. Finalmente, se concluye que cad2
se repite una vez en cad1.
Pag. 369
Ing. Juan José Flores Cueto.
Problema 114
Clase PrgNombresIguales
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgNombresIguales {
public static void main(String [ ] args) {
String nom1, nom2 ;
do {
System.out.println ( “ Ingresar el nombre del primer alumno: ” ) ;
nom1 = Lectura.leerString( ) ;
nom1 = nom1.trim( ) ;
if ( nom1.length( ) < 2 ) {
System.out.println("Nombre ingresado no válido… Reintente! ");
}
} while ( nom1.length( ) < 2 ) ;
do {
System.out.println ( “ Ingresar el nombre del segundo alumno: ” ) ;
nom2 = Lectura.leerString( ) ;
nom2 = nom2.trim( ) ;
if ( nom2.length( ) < 2 ) {
System.out.println ( “ Nombre ingresado no válido… Reintente! ” ) ;
}
} while ( nom2.length( ) < 2 ) ;
if ( nom1.equals (nom2) ) {
System.out.println ( “ Los nombres ingresados son iguales ” ) ;
} else {
System.out.println ( “ Los nombres ingresados son diferentes ” ) ;
}
}
}
Se comparan dos variables de tipo cadena (nom1 y nom2 respectivamente) y se determinan si ambas
cadenas son iguales o no.
Pag. 370
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
Problema 115
Desarrollar un programa en Java que permita ingresar los nombres de dos alumnos.
Mostrar los nombres ordenados alfabéticamente.
Clase PrgOrdenados1
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgOrdenados1 {
if (nombre1.compareTo(nombre2) < 0 ) {
nombreMenor = nombre1 ;
nombreMayor = nombre2 ;
} else {
nombreMenor = nombre2 ;
nombreMayor = nombre1 ;
}
System.out.println ( “ ------------------------------------------------- ” ) ;
System.out.println ( “ Nombres ordenados alfabéticamente ” ) ;
System.out.println ( “ ------------------------------------------------- ” ) ;
System.out.println (nombreMenor) ;
System.out.println (nombreMayor) ;
}
}
nombre1.compareTo (nombre2) ;
El método compareTo ( ) permite comparar dos variables de tipo String. El método permite compareTo ( ) nos
devuelve un valor entero. Si el valor devuelto es igual a cero (0), entonces las cadenas son iguales, es decir;
las variables nombre1 y nombre2 contiene cadenas iguales. Si el valor devuelto es mayor que cero (0),
entonces la variable nombre1 es mayor que la variable nombre2. Finalmente, si el valor devuelto es menor
que cero, entonces la variable nombre1 es menor que la variable nombre2.
Pag. 371
Ing. Juan José Flores Cueto.
Cuando se comparan dos cadenas, se realiza una comparación alfabética en la cual tienen significado las
letras mayúsculas, las letras minúsculas, los caracteres especiales y los espacios en blanco.
En base a esto, mejore la solución de tal forma que se pueda realizar la consistencia de los nombres
ingresados.
Pag. 372
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
Problema 116
Desarrollar un programa en Java que permita ingresar los nombres de dos alumnos (no
permite el ingreso de solo espacios en blanco). Mostrar los nombres ordenados
alfabéticamente.
Clase PrgOrdenados2
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgOrdenados2 {
do {
System.out.println ( “ Ingrese el nombre de la primera persona: ” ) ;
nombre1 = Lectura.leerString( );
nombre1 = nombre1.trim( ) ;
if (nombre1.length( ) < 2 ) {
System.out.println ( “ Nombre ingresado no válido...Reintente!!! ” ) ;
}
} while (nombre1.length( ) < 2 ) ;
do {
System.out.println ( “ Ingrese el nombre de la segunda persona: ” ) ;
nombre2 = Lectura.leerString( ) ;
nombre2 = nombre2.trim( ) ;
if ( nombre2.length( ) < 2 ) {
System.out.println ( “ Nombre ingresado no válido...Reintente!!! ” ) ;
}
} while ( nombre2.length( ) < 2 ) ;
if ( nombre1.compareTo(nombre2) < 0 ) {
nombreMenor = nombre1 ;
nombreMayor = nombre2 ;
} else {
nombreMenor = nombre2 ;
nombreMayor = nombre1 ;
}
Pag. 373
Ing. Juan José Flores Cueto.
Clase PrgOrdenados2
System.out.println ( “------------------------------------------------- ” ) ;
System.out.println ( “Nombres ordenados alfabéticamente ” ) ;
System.out.println ( “------------------------------------------------- ” ) ;
System.out.println (nombreMenor) ;
System.out.println (nombreMayor) ;
}
}
Mejore la codificación del programa, de tal forma que se contemple la posibilidad que los nombres ingresados
sean iguales.
Pag. 374
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
Problema 117
Desarrollar un programa en Java que permita ingresar los nombres de tres alumnos (los
nombres no deben ser iguales). Mostrar los nombres ordenados alfabéticamente.
Clase PrgOrdenados3
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgOrdenados3 {
do {
System.out.println ( “ Ingrese el nombre de la primera persona: ” ) ;
nombre1 = Lectura.leerString( ) ;
nombre1 = nombre1.trim( ) ;
if ( nombre1.length( ) == 0 ) {
System.out.println ( “ Nombre ingresado no válido...Reintente!!! ” ) ;
}
} while ( nombre1.length( ) == 0 ) ;
do {
System.out.println ( “ Ingrese el nombre de la segunda persona: ” ) ;
nombre2 = Lectura.leerString( ) ;
nombre2 = nombre2.trim( ) ;
if ( nombre2.length( ) == 0 ) {
System.out.println ( “ Nombre ingresado no válido...Reintente!!! ” ) ;
}
} while (nombre2.length( ) == 0 ) ;
do {
System.out.println ( “ Ingrese el nombre de la tercera persona: ” ) ;
nombre3 = Lectura.leerString( ) ;
nombre3 = nombre3.trim( ) ;
if ( nombre3.length( ) == 0 ) {
System.out.println ( “ Nombre ingresado no válido...Reintente!!! ” ) ;
}
} while ( nombre3.length( ) == 0 ) ;
Pag. 375
Ing. Juan José Flores Cueto.
Clase PrgOrdenados3
Pag. 376
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
Problema 118
Desarrollar un programa en Java que permita ingresar los nombres de tres alumnos (los
nombres pueden ser iguales). Mostrar los nombres ordenados alfabéticamente.
Clase PrgOrdenados4
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgOrdenados4 {
do {
System.out.println ( “ Ingrese el nombre de la primera persona: ” ) ;
nombre1 = Lectura.leerString( ) ;
nombre1 = nombre1.trim( ) ;
if (nombre1.length( ) == 0 ) {
System.out.println ( “ Nombre ingresado no válido...Reintente!!! ” ) ;
}
} while ( nombre1.length( ) == 0 ) ;
do {
System.out.println ( “ Ingrese el nombre de la segunda persona: ” ) ;
nombre2 = Lectura.leerString( ) ;
nombre2 = nombre2.trim( ) ;
if (nombre2.length( ) == 0) {
System.out.println ( “ Nombre ingresado no válido...Reintente!!! ” ) ;
}
} while ( nombre2.length( ) == 0 ) ;
do {
System.out.println ( “ Ingrese el nombre de la tercera persona: ” ) ;
nombre3 = Lectura.leerString( ) ;
nombre3 = nombre3.trim( ) ;
if ( nombre3.length( ) == 0 ) {
System.out.println ( “ Nombre ingresado no válido...Reintente!!! ” ) ;
}
} while (nombre3.length( ) == 0 ) ;
Pag. 377
Ing. Juan José Flores Cueto.
Clase PrgOrdenados4
if ( nombre1.compareTo(nombre2) < 0 ) {
if ( nombre1.compareTo(nombre3) < 0 ) {
nom01 = nombre1 ;
if (nombre2.compareTo(nombre3) < 0 ) {
nom02 = nombre2 ;
nom03 = nombre3 ;
} else {
nom02 = nombre3 ;
nom03 = nombre2 ;
}
} else {
nom01 = nombre3 ;
nom02 = nombre1 ;
nom03 = nombre2 ;
}
} else {
if ( nombre2.compareTo(nombre3) < 0 ) {
nom01 = nombre2 ;
if ( nombre1.compareTo(nombre3) < 0 ) {
nom02 = nombre1 ;
nom03 = nombre3 ;
} else {
nom02 = nombre3 ;
nom03 = nombre1 ;
}
} else {
nom01 = nombre3 ;
nom02 = nombre2 ;
nom03 = nombre1 ;
}
}
System.out.println ( “ ------------------------------------------------- ” ) ;
System.out.println ( “ Nombres ordenados alfabéticamente ” ) ;
System.out.println ( “ ------------------------------------------------- ” ) ;
System.out.println (nom01) ;
System.out.println (nom02) ;
System.out.println (nom03) ;
}
}
Compruebe lo que sucede. Se ordenarán primero los nombres que comiencen con mayúscula y luego los
nombres que comiencen con minúscula.
Modifique el programa de tal forma que se cambie la primera letra del nombre ingresado a mayúscula.
Pag. 378
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
Problema 119
Desarrollar un programa en Java que permita ingresar los nombres de tres alumnos.
Asegúrese que los nombres ingresados empiecen con una letra mayúscula. Mostrar los
nombres ordenados alfabéticamente.
Clase PrgOrdenados5
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgOrdenados5 {
do {
System.out.println ( “ Ingrese el nombre de la primera persona: ” ) ;
nombre1 = Lectura.leerString( ) ;
nombre1 = nombre1.trim( ) ;
if ( nombre1.length( ) == 0 ) {
System.out.println ( “ Nombre ingresado no válido...Reintente!!! ” ) ;
} else {
nombre1 =
((nombre1.substring(0, 1)).toUpperCase()).concat(nombre1.substring(1)) ;
}
} while ( nombre1.length( ) == 0 ) ;
do {
System.out.println ( “ Ingrese el nombre de la segunda persona: ” ) ;
nombre2 = Lectura.leerString( ) ;
nombre2 = nombre2.trim( ) ;
if ( nombre2.length( ) == 0 ) {
System.out.println ( “ Nombre ingresado no válido...Reintente!!! ” ) ;
} else {
nombre2 =
((nombre2.substring(0, 1)).toUpperCase()).concat(nombre2.substring(1)) ;
}
} while ( nombre2.length( ) == 0 ) ;
do {
System.out.println ( “ Ingrese el nombre de la tercera persona: ” ) ;
nombre3 = Lectura.leerString( ) ;
nombre3 = nombre3.trim( ) ;
Pag. 379
Ing. Juan José Flores Cueto.
Clase PrgOrdenados5
if ( nombre3.length( ) == 0 ) {
System.out.println ( “ Nombre ingresado no válido...Reintente!!! ” ) ;
} else {
nombre3 =
((nombre3.substring(0, 1)).toUpperCase()).concat(nombre3.substring(1)) ;
}
} while ( nombre3.length( ) == 0 ) ;
if ( nombre1.compareTo(nombre2) < 0 ) {
if ( nombre1.compareTo(nombre3) < 0 ) {
nom01 = nombre1 ;
if ( nombre2.compareTo(nombre3) < 0 ) {
nom02 = nombre2 ;
nom03 = nombre3 ;
} else {
nom02 = nombre3 ;
nom03 = nombre2 ;
}
} else {
nom01 = nombre3 ;
nom02 = nombre1 ;
nom03 = nombre2 ;
}
} else {
if ( nombre2.compareTo(nombre3) < 0 ) {
nom01 = nombre2 ;
if ( nombre1.compareTo(nombre3) < 0 ) {
nom02 = nombre1 ;
nom03 = nombre3 ;
} else {
nom02 = nombre3 ;
nom03 = nombre1 ;
}
} else {
nom01 = nombre3 ;
nom02 = nombre2 ;
nom03 = nombre1 ;
}
}
System.out.println ( “ Nombres ordenados alfabéticamente ” ) ;
System.out.println (nom01) ;
System.out.println (nom02) ;
System.out.println (nom03) ;
}
}
Mejore la solución desarrollando un programa que permita ingresar tres nombres de alumnos. Asegúrese que
los nombres ingresados empiecen con una letra mayúscula y que el resto de las letras de los nombres estén
en minúscula. Muestre los nombres ordenados alfabéticamente.
Luego, complemente la solución permitiendo el ingreso de los nombres de todos los alumnos de un
determinado salón de clase.
Pag. 380
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
Problema 120
Clase PrgCadenaModifcada
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgCadenaModifcada {
int cant ;
String nom, dato1, dato2, caracter, cadena= “” ;
cant = nom.length( ) ;
nombre1.equals (nombre2) ;
Pag. 381
Ing. Juan José Flores Cueto.
El método equals ( ) devuelve true (verdadero) si la cadena coincide con la cadena colocada como parámetro
del método equals ( ), caso contrario devuelve false (falso).
Por lo que en este caso el método equals ( ) evalúa a la variable dato1 y a la variable caracter. La variable
caracter tuvo que declararse como String para poder ser utilizada por el método equals ( ) de esta forma:
La sentencia if puede evaluar una condición lógica, una variable booleana o el resultado de una operación.
En nuestro caso, el método equals ( ) devuelve true (verdadero) o false (falso), dependiendo del resultado de
la comparación entre las variables dato1 y caracter.
En base a esto, podemos afirmar que las siguientes sentencias en Java son equivalentes:
if ( dato1.equals (caracter) )
Resulta evidente que no es necesario realizar comparaciones booleanas dentro de las condiciones lógicas
utilizadas en la sentencia if (esto se hace extensivo a las sentencias do, while y for).
Pag. 382
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
Problema 121
Desarrollar un programa en Java que permita ingresar un número mayor de tres dígitos.
Convertir el número en cadena, luego intercambiar posiciones, el primer digito pasarlo
al último y el último digito pasarlo al primero. Mostrar el nuevo número.
Clase PrgIntercambioCadena
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgIntercambioCadena {
public static void main(String [ ] args) {
int num, cant;
String dato1, dato2, dato3, cadena = "";
do {
System.out.print(" Ingresar un numero mayor de 3 dígitos: ");
num = Lectura.leerInt();
String.valueOf (num) ;
El método valueOf ( ) se utiliza directamente con la clase String (y no con una variable de tipo
String). Este método permite convertir una variable de cualquier tipo a una variable de tipo String
o cadena. En nuestra solución convertimos la variable num a String con la finalidad de poder
manipular el contenido de la variable con métodos de la clase String. Una vez convertida la
variable num, se utiliza el método substring ( ) para intercambiar las posiciones deseadas.
Pag. 383
Ing. Juan José Flores Cueto.
Problema 122
Clase PrgInvertirCadena
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgInvertirCadena {
int cant, x ;
String nom, caracter, cadena = “” ;
do {
System.out.println ( “ Ingresar el nombre: ” ) ;
nom = Lectura.leerString( ) ;
nom = nom.trim( ) ;
if ( nom.length( ) == 0 ) {
System.out.println ( “ Nombre ingresado no válido… Reintente! ” ) ;
}
} while ( nom.length( ) == 0 ) ;
cant = nom.length( );
En este programa, declaramos la variable caracter como una cadena (String). Cada vez que se ejecuta la
sentencia for, se obtiene de la variable nom un caracter empezando desde el último y terminando en el
primero. Cada vez que se obtiene un caracter este se agrega a la variable cadena, de tal forma que al
finalizar la ejecución de la sentencia for se tiene almacenado en la variable cadena el nombre ingresado con
los caracteres finales al inicio y los caracteres iniciales al final.
Pag. 384
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
Es importante indicar que para esta solución, la variable caracter debe declararse como char. Observe como
se utiliza el método charAt ( ) de la clase String, con la finalidad de obtener caracter por caracter de la
variable nom (empezando desde el último y terminando en el primero), para agregarlos a la variable cadena
utilizando el signo “+” (concatenación).
Pag. 385
Ing. Juan José Flores Cueto.
Problema 123
Clase PrgCuentaLetras1
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgCuentaLetras1 {
Mejore la solución desarrollando un programa que permita ingresar los nombres de todos los alumnos. Utilice
la estructura do… while. Asegúrese que los nombres ingresados empiecen con una letra mayúscula y que el
resto de las letras de los nombres estén en minúscula.
Pag. 386
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
Problema 124
Desarrollar un programa en Java que permita ingresar los nombres de todos los
empleados de una empresa. Mostrar el número de vocales que existen en cada uno de
los nombres ingresados.
Clase PrgTotalVocales2
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgTotalVocales2 {
public static void main(String [ ] args) {
int cant, cont=0, opc, d=0, x ;
String nom ;
char c = ‘ ’ ;
do {
do {
System.out.println ( “ Ingresar el nombre: ” ) ;
nom = Lectura.leerString( ) ;
nom = nom.trim( ) ;
if ( nom.length( ) == 0 ) {
System.out.println ( “ Nombre no válido… Reintente! ” ) ;
}
} while ( nom.length( ) == 0 ) ;
cant = nom.length( ) ;
nom = nom.toLowerCase( ) ;
for ( x=0; x<cant; x++ ) {
c = nom.charAt(x) ;
d = (int) (c) ;
switch(c) {
case 97 : // a
case 101 : // e
case 105 : // i
case 111 : // o
case 117 : cont ++ ; // u
}
}
System.out.println ( “ El Total de Vocales del nombre ingresado es: ” + cont ) ;
System.out.println ( “ Desea ingresar otro nombre (Sí = 1, No = 2): ” ) ;
opc =Lectura.leerInt( ) ;
} while ( opc != 1 ) ;
}
}
Pag. 387
Ing. Juan José Flores Cueto.
Mejore la solución desarrollando un programa que considere el conteo de las vocales acentuadas y las
vocales en letra mayúscula. Como sugerencia investigue los códigos ASCII de las vocales acentuadas y las
vocales en letra mayúscula, y agréguelos en la sentencia switch ( ).
Pag. 388
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
Problema 125
Desarrollar un programa en Java que permita ingresar los nombres de todos los
productos de una determinada tienda. Mostrar como resultado las posiciones pares.
Clase PrgProductosTienda
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgProductosTienda {
do {
System.out.println ( “ Ingresar la cantidad de productos: ” ) ;
cantidad = Lectura.leerInt( ) ;
if ( cantidad < 1 ) {
System.out.println ( “ Cantidad no válida… Reintente! ” ) ;
}
} while ( cantidad < 1 ) ;
do {
if ( x % 2 == 0 ) {
acum = acum + producto.substring(x - 1, x) ;
}
}
System.out.println ( “ Las posiciones pares del producto son: ” + acum ) ;
acum = “” ;
cont ++ ;
}
}
Pag. 389
Ing. Juan José Flores Cueto.
Análisis de la solución
Luego, se utiliza una sentencia do para ingresar el nombre de cada uno de los productos y determinar sus
posiciones pares. Esto último se logra utilizando una sentencia for dentro de la sentencia do.
Observe el uso de los métodos length ( ) y substring ( ) de la clase String, y la forma como se utilizan las
estructuras lógicas para la solución del problema.
Pag. 390
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
Problema 126
Desarrollar un programa en Java que permita ingresar los nombres de todos los
alumnos de un salón de clase. Mostrar la longitud de cada nombre ingresado, el
nombre que tiene la mayor longitud y el nombre que tiene la menor longitud.
Clase PrgLongitudNombre
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgLongitudNombre {
do {
System.out.println ( “ Ingresar la cantidad de alumnos: ” ) ;
cantidad = Lectura.leerInt( ) ;
if ( cantidad < 1 ) {
System.out.println ( “ Cantidad no válida… Reintente! ” ) ;
}
} while ( cantidad < 1 ) ;
do {
System.out.println ( “ Ingresar el nombre del alumno: ” ) ;
alumno = Lectura.leerString( ) ;
System.out.println ( “ La Longitud es: ” + alumno.length( ) ) ;
if ( longMayor < alumno.length( ) ) {
longMayor = alumno.length( ) ;
nomMayor = alumno ;
}
if ( longMenor > alumno.length( ) ) {
longMenor = alumno.length( ) ;
nomMenor = alumno ;
}
cont ++ ;
} while ( cantidad != cont ) ;
Pag. 391
Ing. Juan José Flores Cueto.
Análisis de la solución
Luego, se utiliza una sentencia do para ingresar el nombre de cada uno de los alumnos, y se determina la
longitud de cada nombre ingresado, el nombre con la mayor longitud y el nombre con la menor longitud.
Observe el uso de los métodos length ( ) de la clase String, y la forma como se utilizan las estructuras lógicas
para la solución del problema.
Pag. 392
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
Problema 127
Desarrollar un programa en Java que permita ingresar una fecha con el siguiente
formato “dd-mm-aaaa” y validarla.
Clase PrgFechaFormato
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgFechaFormato {
if ( fecha.length( ) <= 10 ) {
dia = fecha.substring(0, 2) ;
num1 = Integer.parseInt(dia) ;
mes = fecha.substring(3, 5) ;
num2 = Integer.parseInt(mes) ;
anio = fecha.substring(6, 10) ;
if ( ( dia.length() != 2 ) || ( num1 < 31 ) ) {
System.out.println ( “ El dia ingresado es incorrecto ” ) ;
} else {
if ( (mes.length() != 2 ) || ( num2 < 12 ) ) {
System.out.println ( “ El mes ingresado es incorrecto ” ) ;
} else {
if ( anio.length( ) != 4 ) {
System.out.println ( “ El año ingresado esta incorrecto ” ) ;
} else {
System.out.println ( “ La fecha ingresada es correcta ” ) ;
}
}
}
}
}
}
Intente mejorar la solución validando la fecha, de tal forma que el mes ingresado sólo sea válido si es que la
variable dia contiene el número de días válidos para dicho mes. Incluya la posibilidad que el mes de febrero
sea bisiesto.
Pag. 393
Ing. Juan José Flores Cueto.
Problema 128
Ejemplo:
Se ingresa:
Longitud = 10
Cadena = “Danae”
Resultado:
Cadena = “Danae*****”
Clase PrgCompletarCadenaIzq
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgCompletarCadenaIzq {
String cadena ;
int longitud, tamaño, x ;
Pag. 394
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
Problema 129
Ejemplo:
Se ingresa:
Longitud = 10
Cadena = “Danae”
Resultado:
Cadena = “*****Danae”
Clase PrgCompletarCadenaDer
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgCompletarCadenaDer {
String cadena ;
int longitud, tamaño, x ;
Pag. 395
Ing. Juan José Flores Cueto.
Problema 130
Clase PrgArregloCadena
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgArregloCadena {
}
}
El método valueOf ( ) se utiliza directamente con la clase String (y no con una variable de tipo String). Este
método permite convertir un arreglo de caracteres o parte de él, en una variable de tipo String o cadena. En
nuestra solución convertimos parte del arreglo arregloA a un String con la finalidad de mostrar el contenido
de dicha variable.
Observe que en este método, en primer lugar, se especifica el arreglo de tipo char del cual se va ha obtener
la cadena. En segundo lugar, se indica la posición del arreglo desde el cual se van a tomar los datos y
finalmente, se indica la longitud o el número de caracteres que se van a obtener del arreglo. En el ejemplo,
se muestra como resultado la cadena “ana”.
Pag. 396
CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA
Problema 131
Desarrollar un programa en Java que permita ingresar un número por teclado. Mostrar
el número ingresado con un formato determinado. Analizar la solución.
Clase PrgFormatoNumero
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
import java.text.* ;
class PrgFormatoNumero {
Observe que se declara un objeto de la clase DecimalFormat llamado numFormato, Luego este objeto es
creado utilizando el operador new, estableciendo el formato a utilizar en el método constructor. Luego con el
método format ( ) se procede a establecer el formato establecido para el número ingresado.
Pag. 397
Ing. Juan José Flores Cueto.
Pag. 398
Capítulo
4
Estructura de Datos
Arreglos
Temas:
Introducción.
CAPÍTULO IV
INTRODUCCIÓN
Un algoritmo constituye una lista completa de pasos secuenciales y una descripción de datos
necesarios para resolver un determinado problema. Dichos datos deben almacenarse en una
estructura de datos.
Los arreglos permiten almacenar varios valores a la vez y constituyen las estructuras de datos
más sencillas después de la variable.
MARCO DE TRABAJO
ENUNCIADO
DEL
PROBLEMA
Etapa 02
Definición
Solución Etapa 03
Diseño
Solución Etapa 04
Desarrollo
Solución
Pag. 401
Ing. Juan José Flores Cueto.
SE DESARROLLAN UTILIZANDO:
• Estructuras lógicas de secuencia.
• Estructuras lógicas de decisión.
• Estructuras lógicas de repetición.
• Instrucciones de bifucación.
TAMBIÉN:
• Clases incorporadas en el lenguaje
de programación utilizado.
ALMACENADOS EN:
• Estructuras de datos tipo variables.
• Estructuras de datos tipo arreglo.
El presente capítulo, trata sobre las estructuras de datos conocidas como arreglos y los
conceptos más importantes relacionados a éstos; como se utilizan en las herramientas para
diseñar algoritmos y como se emplean en un lenguaje de programación para codificar
programas de computadora.
Al desarrollar soluciones básicas, se utilizan las estructuras lógicas y las estructuras de datos
en forma simultánea. Las estructuras lógicas y las estructuras de datos que se utilicen en una
solución, van a depender en general de la complejidad del problema.
Pag. 402
ESTRUCTURAS DE DATOS – Arreglos.
ESTRUCTURA DE DATOS
ARREGLOS
Definición:
Los arreglos conocidos también como arrays, son estructuras de datos que permiten
almacenar más de un dato del mismo tipo a la vez. Es decir, un arreglo contiene un
conjunto de datos, todos del mismo tipo.
Se dice que un arreglo es una colección de datos relacionados a los que se hace
referencia por medio de un nombre en común (el nombre del arreglo).
Los arreglos o arrays pueden tener de una a varias dimensiones. Aquellas que tienen
una dimensión (llamadas arreglos unidimensionales) se les conoce como registro o
vector y aquellos que tienen dos dimensiones (llamados arreglos bidimensionales) se
les denomina tabla o matriz.
Tipos:
Pag. 403
Ing. Juan José Flores Cueto.
Ventajas:
• Los datos están almacenados en una sola estructura de datos siendo más fácil el
acceso a los mismos.
• Al igual que otras estructuras de datos (como las variables y constantes), los
arreglos tienen un tiempo de vida, por lo que pueden ser considerados como
globales o locales.
Desventajas:
Pag. 404
ESTRUCTURAS DE DATOS – Arreglos.
Representación gráfica
Arreglos Unidimensionales:
Como vector:
nombre = [ X 0, X 1, X 2, X 3,..., X i -1 ] i
Como registro:
nombre
X0 X1 X2 ... X I-1
i
0 1 2 ... i -1
Donde:
Arreglos Bidimensionales
Como matriz:
Como tabla:
Pag. 405
Ing. Juan José Flores Cueto.
nombre
Columnas
0 1 2 j-1
0 X 0,0 X 0,1 X 0,2 … X 0,j -1
1 X 1,0
Filas 2 X 2,0
Donde:
notas
10 15 20 19 14 13 16 11 17 09
i =10
0 1 2 3 4 5 6 7 8 9
Donde:
notas = Nombre del arreglo.
i = Número de alumnos.
10, 15,...,09 = Son las notas finales de cada uno de los alumnos.
Pag. 406
ESTRUCTURAS DE DATOS – Arreglos.
notas[1]
notas
10 15 20 19 14 13 16 11 17 09
i =10
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9
Nota EP 0 10 11 02 05 18 16 17 11 17 09
Nota Tra 1 12 14 12 11 16 17 12 18 10 08
Nota EF 2 03 11 15 05 12 17 02 11 09 11
(i =3, j=10)
Donde:
notas = Nombre del arreglo.
j = Número de alumnos.
i = Número de notas.
10,11,…,09 = Son las notas de Examen Parcial de c/u de los alumnos del salón de clase.
12,14,…,08 = Son las notas de Trabajo de c/u de los alumnos del salón de clase.
03,11,…,11 = Son las notas de Examen Final de c/u de los alumnos del salón de clase.
Pag. 407
Ing. Juan José Flores Cueto.
0 1 2 3 4 5 6 7 8 9
Nota EP 0 10 11 02 05 18 16 17 11 17 09
Nota Tra 1 12 14 12 11 16 17 12 18 10 08
Nota EF 2 03 11 15 05 12 17 02 11 09 11
(i =3, j=10)
Notas[2][1]
Declaración de Arreglos
En segundo lugar, se debe determinar que tipo de dato podrá almacenar un arreglo.
Un arreglo solo puede almacenar datos del mismo tipo. Los tipos de datos válidos
para declarar un arreglo son los mismos tipos de datos válidos definidos para declarar
variables y constantes.
En Java:
TipoDeDato arreglo[ ] ;
TipoDeDato arreglo[ ][ ] ;
Pag. 408
ESTRUCTURAS DE DATOS – Arreglos.
En Java:
TipoDeDato[ ] arreglo ;
TipoDeDato[ ][ ] arreglo ;
EJEMPLOS DESCRIPCIÓN
Creación de Arreglos
Para crear un arreglo, es necesario que el arreglo previamente haya sido declarado,
tal y como se explicó anteriormente.
Antes de crear un arreglo se debe determinar cual va ser el tamaño del mismo. Es
decir, cual va ser la cantidad total de datos que se podrá almacenar en el arreglo.
Pag. 409
Ing. Juan José Flores Cueto.
En Java:
arreglo = new TipoDeDato [tamaño] ;
arreglo = new TipoDeDato [filas][columnas] ;
El operador new nos permite crear un arreglo. Cuando se crea un arreglo con el
operador new, se debe indicar el tamaño del arreglo, es decir cuantos datos podrá
almacenar.
Es importante mencionar que el tipo de dato utilizado para crear un arreglo deberá ser
el mismo tipo de dato con el cual se declaró el arreglo.
En Java, existe también una forma directa para declarar y crear arreglos, utilizando
el siguiente formato:
En Java:
TipoDeDato arreglo[ ] = new TipoDeDato [tamaño];
TipoDeDato arreglo[ ][ ] = new TipoDeDato [filas][columnas];
Utilizando este formato se declara y crea el arreglo en forma directa (esto es conocido
como “Definición de un arreglo”). Las consideraciones tratadas en los temas
“Declaración de arreglo” y “Creación de arreglos” son válidas al utilizar este formato.
Pag. 410
ESTRUCTURAS DE DATOS – Arreglos.
“En Java, no se realiza ninguna clase de comprobación del tamaño de los arreglos en forma
automática. Esto quiere decir que se puede desbordar el final de un arreglo (se lanza una
excepción de tipo ArrayIndexOutOfBoundException). Es necesario recordar y tener presente que
es responsabilidad directa del programador asegurarse que nunca suceda esto, ya que puede
ocasionar resultados no deseados, y que se finalice la ejecución del programa”.
Ejemplo de creación de arreglos válidos en Java (se asume que los arreglos han sido
declarados previamente):
EJEMPLO DESCRIPCION
En el segundo ejemplo se utiliza una variable llamada total de tipo entero para
crear el arreglo unidimensional llamado nombres. En el ejemplo, se asigna
directamente el valor 10 a la variable total. Se podría modificar esta parte
para que el valor se ingrese a través del teclado, tal y como se muestra a
continuación:
EJEMPLOS
int total ;
Pag. 411
Ing. Juan José Flores Cueto.
EJEMPLOS
int total = 10 ;
String nombres [ ] = new String [total] ;
Inicialización de Arreglos
Inicializar todas las posiciones de un arreglo significa asignar un valor a cada posición
con la finalidad de evitar que se produzca un error si se intenta acceder a una
posición del arreglo que todavía no contiene un dato.
Generalmente, los arreglos numéricos (tipo NUMERO) se inicializan con cero (0), los
arreglos lógicos (tipo LOGICO) o booleanos se inicializan con false, los arreglos de
caracteres con ‘\0’ y los arreglos de objetos con null.
Pag. 412
ESTRUCTURAS DE DATOS – Arreglos.
posición del arreglo que no tiene un dato o que no ha sido inicializado, produce un
error que ocasiona que se interrumpa la ejecución del programa.
También se puede utilizar una forma directa que permite declarar, crear e ingresar
datos a un arreglo unidimensional, para esto se encierran los datos que se
almacenarán en el arreglo dentro de llaves, separadas por comas, tal y como se
muestra a continuación.
EJEMPLO
Cada uno de los valores entre las llaves deben ser del mismo tipo de dato y
debe coincidir también con el tipo de dato con el que se declara el arreglo
unidimensional.
EJEMPLO
Pag. 413
Ing. Juan José Flores Cueto.
Una vez que se han ingresado los datos a todas las posiciones del arreglo, se pueden
manipular dichos datos con la finalidad de cumplir con el objetivo del programa o
proyecto de solución de un determinado problema.
1). Procesos que permiten cambiar o modificar el contenido del arreglo. Se pueden
dividir en:
2). Proceso que permite visualizar o consultar el contenido del arreglo. Se pueden
dividir en:
Pag. 414
ESTRUCTURAS DE DATOS – Arreglos.
Pag. 415
Ing. Juan José Flores Cueto.
Pag. 416
ESTRUCTURAS DE DATOS – Arreglos.
Los arreglos pueden ser utilizados como parte de las soluciones a los problemas que se nos
plantean. Inclusive, siempre hemos definido un arreglo como parte de la estructura del
método principal, main( ) en Java, tal y como se muestra a continuación.
Esto significa que se puede incluir algunos parámetros al momento de ejecutar un proyecto
de solución. Dichos parámetros se pasan al método main ( ) y se almacenan en el arreglo arg.
Clase Suma
/* Clase que nos permite sumar varios números enteros , incluidos como parámetros */
package dominioDeLaAplicacion ;
class Suma {
int suma = 0 ;
System.out.println (suma) ;
}
}
Es importante mencionar que cuando se ejecute esta clase, usted deberá asegurarse de incluir una lista de
números, para que estos puedan ser sumados.
En primer lugar, los arreglos en Java poseen un atributo que almacena la cantidad de datos que pueden
contener. Este atributo se denomina length.
Pag. 417
Ing. Juan José Flores Cueto.
En segundo lugar, cuando necesitamos convertir un dato a un número entero, utilizamos el método
parseInt() de la clase Integer. En consecuencia, la lista de números se almacena en el arreglo arg de tipo
String. Utilizando la sentencia for podemos acceder a cada uno de los datos almacenados en el arreglo
arg[], lo convertimos a un dato tipo NUMERO utilizando Integer.parseInt(), y luego lo sumamos a la variable
suma. Al finalizar la sentencia for se tiene la suma de los números incluidos como parámetros en la
variable suma.
Clase PrgAlumno
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgAlumno {
Observe que la solución anterior nos permite realizar el cálculo y la visualización del promedio general de
notas. Pero, al utilizar solo una variable (notas), no podemos almacenar a la vez las notas finales de los 10
alumnos.
(Recuerde que una variable solo nos permite almacenar un dato a la vez).
Pag. 418
ESTRUCTURAS DE DATOS – Arreglos.
A partir de este punto, se modificará el programa anterior, de tal forma que se incorporen
progresivamente los conceptos tratados en este capítulo, para finalmente formalizar el
Método de las 6’D.
Es importante destacar que para trabajar con arreglos se deben seguir los siguientes pasos:
Crear el arreglo o arreglos con el tamaño necesario para poder almacenar todos
los datos.
Estos tres pasos generalmente se desarrollarán en todas las soluciones. A partir de este
punto podemos realizar cualquier proceso con los datos almacenados en el arreglo o arreglos
definidos en la solución. Por lo tanto, el siguiente paso quedaría definido de la siguiente
manera:
Clase PrgAlumnos
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgAlumnos {
Pag. 419
Ing. Juan José Flores Cueto.
Clase PrgAlumnos
En la solución anterior, en primer lugar, se declara un arreglo unidimensional llamado notas[ ] (vector).
Dicho arreglo podrá almacenar datos numéricos (parte entera y decimal). En segundo lugar, se crea el
arreglo notas[ ] utilizando la siguiente sentencia:
Observe que para crear el arreglo notas[ ] se utiliza la variable entera numAlu. La variable numAlu fue
declarada previamente con la sentencia int, y se le asignó un valor igual a 10. Esto nos permite crear un
arreglo llamado notas[ ] con un tamaño igual a 10. Es decir, en el arreglo notas[ ] se podrán almacenar 10
notas finales.
En tercer lugar, se ejecuta el proceso de ingreso de datos al arreglo notas[ ]. Para esto, se utiliza una
sentencia for. El uso de la sentencia for tiene como finalidad repetir 10 veces las sentencias que nos
permitirán el ingreso de los datos, las cuales están ubicadas dentro de la misma sentencia for. Los datos
que se ingresarán serán las notas finales de los 10 alumnos del salón de clase.
La estructura lógica de repetición for permite que se repitan 10 veces las siguientes sentencias:
Cada vez que la estructura lógica de repetición for se ejecuta, la variable i aumenta su valor en 1, siendo
valores válidos de i, desde 0 hasta 9 (es decir, para i=0, i=1, i=2, i=3, i=4, i=5, i=6, i=7, i=8, i=9).
Cuando i = 0 (la primera vez que se ejecuta la sentencia for), la nota ingresada se almacena en la primera
posición del arreglo notas[ ], es decir en notas[0]. Cuando i = 1 (la segunda vez que se ejecuta la sentencia
for), la nota ingresada se almacena en la segunda posición del arreglo notas[ ], es decir en notas[1], y así
sucesivamente hasta cuando i = 9 (la décima y última vez que se ejecuta la sentencia for), almacenando la
nota ingresada en la décima posición del arreglo notas[ ], es decir en notas[9].
Pag. 420
ESTRUCTURAS DE DATOS – Arreglos.
Finalizada la ejecución de la primera sentencia for, el arreglo notas[ ] deberá tener almacenadas las notas
finales de los 10 alumnos del salón de clase. Tal y como se muestra a continuación:
notas
10 15 20 19 14 13 16 11 17 09
i =10
0 1 2 3 4 5 6 7 8 9
Finalmente, se ejecuta el proceso de cálculo del promedio de las 10 notas finales. Para ello, se utiliza una
segunda sentencia for exactamente igual a la primera sentencia for. Cada vez que se ejecuta la segunda
sentencia for, se suma uno de los datos almacenados en el arreglo notas[ ] (empezando desde el primero i
= 0 hasta el último i = 9) a la variable sumaNotas (la variable sumaNotas actúa como acumulador).
Finalizada la ejecución de la sentencia for se muestra el promedio de las 10 notas finales.
Observe que el proceso de ingreso de datos y el proceso de cálculo del promedio de las 10 notas finales se
desarrollan utilizando 2 sentencias for exactamente iguales. Esto es recomendable como buena práctica de
programación ya que posteriormente cada proceso desarrollado se convertirá en un método de una clase
con una función determinada.
Pag. 421
Ing. Juan José Flores Cueto.
Ahora, se modificará la solución anterior de tal forma que permita almacenar las notas finales
de todos los alumnos de un determinado salón de clase.
Clase PrgAlumnos
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgAlumnos {
// Declaración de variables.
int numAlu ;
double sumaNotas = 0 ;
Observe que para crear el arreglo notas[ ] se utiliza la variable entera numAlu. La variable numAlu fue
declarada previamente con la sentencia int, y se le asignó un valor que fue ingresado por el usuario a
través del teclado. Esto nos permite crear un arreglo llamado notas[ ] con un tamaño equivalente al valor
almacenado en la variable numAlu. Es decir, en el arreglo notas[ ] se podrán almacenar las notas finales de
todos los alumnos de un salón de clase.
Pag. 422
ESTRUCTURAS DE DATOS – Arreglos.
Esta sentencia esta ubicada dentro de la sentencia for y nos permite el ingreso de datos al arreglo llamado
notas[ ].
Utilizando dicha sentencia con la variable i (la cual aumenta su valor en 1 cada vez que se ejecuta la
sentencia for), se puede personalizar el mensaje que se le muestra al usuario al momento del ingreso de
las notas finales.
Cuando i = 0 (la primera vez que se ejecuta la sentencia for), se mostrará el siguiente mensaje:
La nota final ingresada se almacenará en la primera posición del arreglo notas[ ], es decir en notas[0].
Cuando i = 1 (la segunda vez que se ejecuta la sentencia for), se mostrará el siguiente mensaje:
La nota final ingresada se almacenará en la segunda posición del arreglo notas[ ], es decir en notas[1], y
así sucesivamente hasta ingresar la nota final del último alumno.
Pag. 423
Ing. Juan José Flores Cueto.
Ahora, se modificará nuevamente la solución anterior, de tal forma que permita consistenciar
la entrada de datos. Se consistenciará el ingreso del número total de alumnos y de la nota
final de cada uno de ellos.
Clase PrgAlumnos
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgAlumnos {
// Declaración de variables.
int numAlu ;
double sumaNotas = 0 ;
Observe el uso de la sentencia do dentro de la sentencia for. Uno de los principales usos de la sentencia
do es la consistencia de datos. La consistencia de datos nos permite asegurarnos que el usuario ingrese
solo datos válidos antes de que estos se almacenen en las variables o en los arreglos.
Pag. 424
ESTRUCTURAS DE DATOS – Arreglos.
Problema 132
Desarrollar una solución que permita ingresar y almacenar las notas finales de todos los
alumnos de un determinado salón de clase. Determinar y mostrar el promedio de las
notas finales. Consistenciar el ingreso de datos.
Pag. 425
Ing. Juan José Flores Cueto.
Diagrama de paquetes
Clases Clases
dominioDeLaAplicacion biblioteca
Pag. 426
ESTRUCTURAS DE DATOS – Arreglos.
INICIO
SI (numAlu <= 0 )
ENTONCES
ESCRIBIR “Número de alumnos no válido... Reintente!”
FINSI
HACER
LEER notas[i]
SI ( notas[i] > 20 || notas[i] < 0 )
ENTONCES
ESCRIBIR “Nota no válida... Reintente!”
FINSI
FINDESDE
ESCRIBIR prom
FIN
Pag. 427
Ing. Juan José Flores Cueto.
Clase PrgAlumnos01
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgAlumnos01 {
// Declaración de variables.
int i, numAlu ;
double sumaNotas = 0, prom ;
if ( numAlu <= 0 ) {
System.out.println ( “ El número de alumnos no es válido… Reintente! ” ) ;
}
} while ( numAlu <= 0 ) ;
}
}
Pag. 428
ESTRUCTURAS DE DATOS – Arreglos.
Problema 133
Desarrollar una solución que permita ingresar y almacenar las notas de todas las
prácticas de un alumno. Determinar el promedio de las prácticas sabiendo que se
elimina la práctica con la nota mas baja. Mostrar el promedio redondeado.
Consistenciar el ingreso de datos.
Pag. 429
Ing. Juan José Flores Cueto.
Diagrama de paquetes
Clases Clases
dominioDeLaAplicacion biblioteca
Pag. 430
ESTRUCTURAS DE DATOS – Arreglos.
INICIO
ESCRIBIR promAlu
FIN
Pag. 431
Ing. Juan José Flores Cueto.
Clase PrgAlumnos02
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgAlumnos02 {
// Declaración de variables.
int i, numPra ;
double sumaNotas = 0, notaMenor = 20, promAlu ;
}
}
Pag. 432
ESTRUCTURAS DE DATOS – Arreglos.
Problema 134
Desarrollar una solución que permita ingresar y almacenar las notas de las tres
prácticas de todos los alumnos de un salón de clase. Determinar el promedio de cada
alumno sabiendo que se duplica su nota más alta. Mostrar el promedio redondeado.
Consistenciar el ingreso de datos.
Pag. 433
Ing. Juan José Flores Cueto.
Diagrama de paquetes
Clases Clases
dominioDeLaAplicacion biblioteca
Pag. 434
ESTRUCTURAS DE DATOS – Arreglos.
INICIO
FIN
Pag. 435
Ing. Juan José Flores Cueto.
Clase PrgAlumnos03
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgAlumnos03 {
// Declaración de variables.
int i, j, numAlu ;
double sumaNotas = 0, notaMayor = 0, promAlu ;
}
}
Pag. 436
ESTRUCTURAS DE DATOS – Arreglos.
Problema 135
Desarrollar una solución que permita ingresar y almacenar las notas de las prácticas de
todos los alumnos de un salón de clase. Determinar el promedio de cada alumno
sabiendo que se duplica su nota más alta y se elimina su práctica con la nota mas baja.
Mostrar el promedio redondeado a dos decimales. Consistenciar el ingreso de datos.
Finalmente; determinar y mostrar el promedio simple de todas las notas de las prácticas
de los alumnos del salón de clase.
Pag. 437
Ing. Juan José Flores Cueto.
Diagrama de paquetes
Clases Clases
dominioDeLaAplicacion biblioteca
Pag. 438
ESTRUCTURAS DE DATOS – Arreglos.
INICIO
SI (numAlu <= 0 )
ENTONCES
ESCRIBIR “Número de alumnos no válido.. Reintente!”
FINSI
HACER
LEER numPra
SI (numPra <= 0 )
ENTONCES
ESCRIBIR “Número de prácticas no válido.. Reintente!”
FINSI
LEER notas[i][j]
Pag. 439
Ing. Juan José Flores Cueto.
FIN
Pag. 440
ESTRUCTURAS DE DATOS – Arreglos.
Clase PrgAlumnos04
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgAlumnos04 {
// Declaración de variables.
int i, j, numAlu, numPra ;
double sumaNotas = 0, notaMayor = 0, notaMenor = 20, promAlu, prom ;
if ( numAlu <= 0 ) {
System.out.println ( “ El número de alumnos no es válido… Reintente! ” ) ;
}
} while ( numAlu <= 0 ) ;
do {
System.out.print ( “ Ingrese el número de prácticas : ” ) ;
numPra = Lectura.leerInt( ) ;
if ( numPra <= 0 ) {
System.out.println ( “ El número de prácticas no es válido… Reintente! ” ) ;
}
Pag. 441
Ing. Juan José Flores Cueto.
Clase PrgAlumnos04
notaMayor = 0 ;
notaMenor = 20 ;
sumaNotas = 0 ;
}
}
Pag. 442
ESTRUCTURAS DE DATOS – Arreglos.
Problema 136
Desarrollar una solución que permita ingresar y almacenar las notas del examen
parcial, promedio de trabajos y examen final de todos los alumnos de un salón de clase.
Consistenciar el ingreso de los datos. Determinar el promedio de cada alumno sabiendo
que se duplica la nota del examen final. Mostrar el promedio redondeado. También,
calcular y mostrar el promedio obtenido por los alumnos en el examen final.
Finalmente; determinar y mostrar el porcentaje de alumnos aprobados y el porcentaje
de alumnos desaprobados.
Pag. 443
Ing. Juan José Flores Cueto.
Diagrama de paquetes
Clases Clases
dominioDeLaAplicacion biblioteca
Pag. 444
ESTRUCTURAS DE DATOS – Arreglos.
INICIO
SI (numAlu <= 0 )
ENTONCES
ESCRIBIR “Número de alumnos no válido… Reintente!”
FINSI
LEER notas[0][i]
SI ( notas[0][i] > 20 || notas[0][i] < 0 )
ENTONCES
ESCRIBIR “Nota no válida... Reintente!”
FINSI
HACER
COMENTARIO “Promedio de trabajos”
LEER notas[1][i]
SI ( notas[1][i] > 20 || notas[1][i] < 0 )
ENTONCES
ESCRIBIR “Nota no válida... Reintente!”
FINSI
Pag. 445
Ing. Juan José Flores Cueto.
HACER
COMENTARIO “Examen Final”
LEER notas[2][i]
SI ( notas[2][i] > 20 || notas[2][i] < 0 )
ENTONCES
ESCRIBIR “Nota no válida... Reintente!”
FINSI
SI ( promAlu < 11 )
ENTONCES
desaprobados = desaprobados + 1
SINO
Aprobados = aprobados + 1
FINSI
FINDESDE
porceAprob = ( aprobados * 100 ) / numAlu
porceAprob = porceAprob REDONDEA 2
porceDesaprob = 100 - porceAprob
ESCRIBIR porceAprob + “ % ”
ESCRIBIR porceDesaprob + “ % ”
FIN
Pag. 446
ESTRUCTURAS DE DATOS – Arreglos.
Clase PrgAlumnos05
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgAlumnos05 {
// Declaración de variables.
int i, numAlu, aprobados = 0, desaprobados = 0 ;
double sumaNotas = 0, sumaEF = 0, promAlu, promEF, porceAprob, porceDesaprob ;
if ( numAlu <= 0 ) {
System.out.println ( “ El número de alumnos no es válido… Reintente! ” ) ;
}
} while ( numAlu <= 0 ) ;
Pag. 447
Ing. Juan José Flores Cueto.
Clase PrgAlumnos05
if ( promAlu < 11 ) {
desaprobados ++ ;
} else {
aprobados ++ ;
}
}
Pag. 448
ESTRUCTURAS DE DATOS – Arreglos.
Problema 137
Desarrollar una solución que permita ingresar y almacenar el sueldo de todos los
trabajadores de una empresa. Calcular y mostrar el aumento de sueldo de cada uno de
los trabajadores (redondeado a dos decimales), de acuerdo a la siguiente tabla.
Consistenciar los datos ingresados.
Condición Aumento
sueldo < 410 20 %
sueldo >= 410 y sueldo <= 1600 10 %
sueldo > 1600 05 %
Pag. 449
Ing. Juan José Flores Cueto.
Diagrama de paquetes
Clases Clases
dominioDeLaAplicacion biblioteca
Pag. 450
ESTRUCTURAS DE DATOS – Arreglos.
INICIO
FIN
Pag. 451
Ing. Juan José Flores Cueto.
Clase PrgTrabajadores01
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgTrabajadores01 {
Pag. 452
ESTRUCTURAS DE DATOS – Arreglos.
Problema 138
Desarrollar una solución que permita ingresar y almacenar el sueldo de todos los
trabajadores de una empresa. A todos los empleados cuyo sueldo sea mayor a
S/.1600.00 nuevos soles se le deberá descontar 15% por impuestos y a todos los
trabajadores cuyo sueldo sea menor a S/.1000.00 nuevos soles se le deberá aumentar
el 10% por concepto de refrigerio y movilidad. Mostrar el sueldo neto a cobrar por cada
trabajador redondeado a dos decimales. Consistenciar los datos ingresados.
Pag. 453
Ing. Juan José Flores Cueto.
Diagrama de paquetes
Clases Clases
dominioDeLaAplicacion biblioteca
Pag. 454
ESTRUCTURAS DE DATOS – Arreglos.
INICIO
FIN
Pag. 455
Ing. Juan José Flores Cueto.
Clase PrgTrabajadores02
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgTrabajadores02 {
if ( numTrab <= 0 ) {
System.out.println ( “ El número de trabajadores no es válido… Reintente! ” ) ;
}
} while ( numTrab <= 0 ) ;
Pag. 456
ESTRUCTURAS DE DATOS – Arreglos.
Problema 139
Desarrollar una solución que permita ingresar y almacenar el sueldo de todos los
trabajadores de una empresa. Calcular y mostrar el sueldo neto de cada trabajador, su
aumento y su respectivo descuento en base a la tabla mostrada (redondear dichas
cantidades a dos decimales). Adicionalmente, mostrar el monto total que paga la
empresa por concepto de sueldos. Consistenciar los datos ingresados.
Pag. 457
Ing. Juan José Flores Cueto.
Diagrama de paquetes
Pag. 458
ESTRUCTURAS DE DATOS – Arreglos.
Clases Clases
dominioDeLaAplicacion biblioteca
INICIO
LEER numTrab
SI (numTrab <= 0 )
ENTONCES
ESCRIBIR “Número de trabajadores no válido… ”
FINSI
Pag. 459
Ing. Juan José Flores Cueto.
HACER
LEER sueldos[i]
SI ( sueldos[i] <= 0 )
ENTONCES
ESCRIBIR “Sueldo ingresado no es válido... ”
FINSI
FINDESDE
FINSI
FINDESDE
ESCRIBIR sueldoTotal
FIN
Pag. 460
ESTRUCTURAS DE DATOS – Arreglos.
Clase PrgTrabajadores03
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgTrabajadores03 {
// Declaración de variables.
int i, numTrab ;
double aumento = 0, descuento = 0, sueldoNeto, sueldoTotal = 0 ;
if ( numTrab <= 0 ) {
System.out.println ( “ El número de trabajadores no es válido… Reintente! ” ) ;
}
do {
if ( sueldos[i] <= 0 ) {
System.out.println ( “ Sueldo ingresado no es válido… Reintente! ” ) ;
}
Pag. 461
Ing. Juan José Flores Cueto.
Clase PrgTrabajadores03
// Cálculo del sueldo neto, aumento y descuento por trabajador, y del total de sueldos.
}
}
Pag. 462
ESTRUCTURAS DE DATOS – Arreglos.
Problema 140
Desarrollar una solución que permita ingresar y almacenar las horas trabajadas y la
tarifa horaria de todos los trabajadores de una empresa. Calcular y mostrar el sueldo
neto de cada trabajador, sabiendo que se tiene que descontar el 10% por impuestos y
el 5% por seguro.
Pag. 463
Ing. Juan José Flores Cueto.
Diagrama de paquetes
Clases Clases
dominioDeLaAplicacion biblioteca
Pag. 464
ESTRUCTURAS DE DATOS – Arreglos.
INICIO
FIN
Pag. 465
Ing. Juan José Flores Cueto.
Clase PrgTrabajadores04
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgTrabajadores04 {
// Declaración de variables.
int i, numTrab ;
double sueldoNeto ;
if ( numTrab <= 0 ) {
System.out.println ( “ El número de trabajadores no es válido… Reintente! ” ) ;
}
do {
System.out.print ( “ Número de horas trabajadas: ” ) ;
sueldos[i][0] = Lectura.leerDouble( ) ;
if ( sueldos[i][0] <= 0 ) {
System.out.println ( “Número de horas trabajadas no válida… ” ) ;
}
} while ( sueldos[i][0] <= 0 ) ;
do {
System.out.print ( “ Tarifa horaria: ” ) ;
sueldos[i][1] = Lectura.leerDouble( ) ;
if ( sueldos[i][1] <= 0 ) {
System.out.println ( “ Tarifa horaria no válida… ” ) ;
}
} while ( sueldos[i][1] <= 0 ) ;
Pag. 466
ESTRUCTURAS DE DATOS – Arreglos.
Clase PrgTrabajadores04
}
}
Pag. 467
Ing. Juan José Flores Cueto.
Problema 141
Desarrollar una solución que permita ingresar y almacenar las horas trabajadas y la
tarifa horaria de todos los trabajadores de una empresa. Calcular y mostrar el sueldo de
cada trabajador, sabiendo que hasta 48 horas trabajadas se paga una tarifa normal y
sobre las 48 horas, se paga la tarifa con un recargo del 25%. Por otro lado, si el sueldo
es superior a S/.1,600.00 nuevos soles, al trabajador se le descuenta el 10% y si el
sueldo es superior a S/.3,500.00 nuevos soles, al trabajador se le descuenta el 15%.
Adicionalmente, se ha establecido un aumento a todos los trabajadores, equivalente al
15% del sueldo. Mostrar el sueldo total (sueldo bruto) y el sueldo a cobrar (sueldo neto)
de cada trabajador redondeado a dos decimales.
Pag. 468
ESTRUCTURAS DE DATOS – Arreglos.
Diagrama de paquetes
Pag. 469
Ing. Juan José Flores Cueto.
Clases Clases
dominioDeLaAplicacion biblioteca
INICIO
SI (numTrab <= 0 )
ENTONCES
ESCRIBIR “Número de trabajadores no válido… ”
FINSI
MIENTRAS (numTrab <= 0 )
Pag. 470
ESTRUCTURAS DE DATOS – Arreglos.
FIN
Pag. 471
Ing. Juan José Flores Cueto.
Clase PrgTrabajadores05
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgTrabajadores05 {
// Declaración de variables.
int i, numTrab ;
double sueldoNeto ;
if ( numTrab <= 0 ) {
System.out.println ( “ El número de trabajadores no es válido… Reintente! ” ) ;
}
do {
System.out.print ( “ Número de horas trabajadas: ” ) ;
sueldos[0][i] = Lectura.leerDouble( ) ;
if ( sueldos[0][i] <= 0 ) {
System.out.println ( “Número de horas trabajadas no válida… ” ) ;
}
} while ( sueldos[0][i] <= 0 ) ;
do {
System.out.print ( “ Tarifa horaria: ” ) ;
sueldos[1][i] = Lectura.leerDouble( ) ;
if ( sueldos[1][i] <= 0 ) {
System.out.println ( “ Tarifa horaria no válida… ” ) ;
}
} while ( sueldos[1][i] <= 0 ) ;
Pag. 472
ESTRUCTURAS DE DATOS – Arreglos.
Clase PrgTrabajadores05
if ( sueldos[0][i] > 48 ) {
sueldoBruto = ( sueldos[0][i] – 48) * (sueldos[1][i] * 1.25) + (48 - sueldos[1][i] ) ;
} else {
sueldoBruto = sueldos[0][i] * sueldos[1][i] ) ;
}
System.out.println ( “ Trabajador [ ” + ( i + 1) + “ ] ” ) ;
System.out.println ( “ Sueldo bruto : ” + sueldoBruto ) ;
System.out.println ( “ Sueldo neto : ” + sueldoNeto ) ;
System.out.println ( ) ;
}
}
Pag. 473
Ing. Juan José Flores Cueto.
Problema 142
Desarrollar una solución que permita ingresar y almacenar el nombre de todos los
artículos de una bodega. Consistenciar la entrada de datos. Mostrar cada uno de los
nombre con su respectiva longitud.
Diagrama de paquetes
Pag. 474
ESTRUCTURAS DE DATOS – Arreglos.
Clases Clases
dominioDeLaAplicacion biblioteca
INICIO
LEER numArt
SI (numArt <= 0 )
ENTONCES
ESCRIBIR “Número de artículos no válido… ”
FINSI
Pag. 475
Ing. Juan José Flores Cueto.
FIN
Clase PrgArticulos01
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgArticulos01 {
// Declaración de variables.
int i, numArt, tamaño ;
String nombre ;
Pag. 476
ESTRUCTURAS DE DATOS – Arreglos.
Clase PrgArticulos01
do {
System.out.print ( “ Ingrese el nombre del artículo [ ” + ( i + 1) + “]: ” ) ;
nombre = Lectura.leerString( ) ;
articulos[i] = nombre.trim( ) ;
if ( articulos[i].length( ) < 3 ) {
System.out.println ( “ El nombre ingresado no es válido… Reintente! ” ) ;
}
} while ( articulos[i].length( ) < 3 ) ;
}
}
Pag. 477
Ing. Juan José Flores Cueto.
Problema 143
Desarrollar una solución que permita ingresar y almacenar el nombre de todos los
artículos de una bodega. Consistenciar la entrada de datos. Mostrar la primera letra de
cada nombre en mayúscula y el resto en minúscula. Adicionalmente, mostrar la longitud
de cada uno de los nombres.
Pag. 478
ESTRUCTURAS DE DATOS – Arreglos.
Diagrama de paquetes
Clases Clases
dominioDeLaAplicacion biblioteca
Pag. 479
Ing. Juan José Flores Cueto.
INICIO
FIN
Pag. 480
ESTRUCTURAS DE DATOS – Arreglos.
Clase PrgArticulos02
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgArticulos02 {
// Declaración de variables.
int i, numArt, tamaño ;
String letra, resto ;
if ( articulos[i].length( ) < 3 ) {
System.out.println ( “ El nombre ingresado no es válido… Reintente! ” ) ;
}
} while ( articulos[i].length( ) < 3 ) ;
}
Pag. 481
Ing. Juan José Flores Cueto.
Problema 144
Desarrollar una solución que permita ingresar y almacenar el nombre de todos los
artículos de una bodega. Consistenciar la entrada de datos. Mostrar la primera letra y la
última letra de cada uno de los nombres en letra mayúscula y minúscula
respectivamente.
Pag. 482
ESTRUCTURAS DE DATOS – Arreglos.
Diagrama de paquetes
Clases Clases
dominioDeLaAplicacion biblioteca
Pag. 483
Ing. Juan José Flores Cueto.
INICIO
FIN
Pag. 484
ESTRUCTURAS DE DATOS – Arreglos.
Clase PrgArticulos03
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgArticulos03 {
// Declaración de variables.
int i, numArt ;
char letraIni, letraFin ;
if ( articulos[i].length( ) < 3 ) {
System.out.println ( “ El nombre ingresado no es válido… Reintente! ” ) ;
}
} while ( articulos[i].length( ) < 3 ) ;
}
Pag. 485
Ing. Juan José Flores Cueto.
Problema 145
Pag. 486
ESTRUCTURAS DE DATOS – Arreglos.
Diagrama de paquetes
Clases Clases
dominioDeLaAplicacion biblioteca
Pag. 487
Ing. Juan José Flores Cueto.
INICIO
HACER
HACER
Pag. 488
ESTRUCTURAS DE DATOS – Arreglos.
HACER
COMENTARIO “ Ingreso siglas de los artículos ”
LEER articulos[i][2]
FINDESDE
FIN
Pag. 489
Ing. Juan José Flores Cueto.
Clase PrgArticulos04
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgArticulos04 {
// Declaración de variables.
int i, numArt ;
String letra, resto, nombre, descrip, siglas ;
if ( numArt <= 0 ) {
System.out.println ( “ El número de artículos no es válido… Reintente! ” ) ;
}
} while ( numArt <= 0 ) ;
if (articulos[i][0].length( ) < 3 ) {
System.out.println ( “ El nombre ingresado no es válido… ” ) ;
}
} while (articulos[i][0].length( ) < 3 ) ;
do {
System.out.print ( “ Ingrese la descripción del artículo [ ” + ( i + 1) + “ ]: ” ) ;
articulos[i][1] = Lectura.leerString( ) ;
articulos[i][1] = articulos[i][1].trim( ) ;
if (articulos[i][1].length( ) < 3 ) {
System.out.println ( “ La descripción ingresada no es válida… ” ) ;
}
} while (articulos[i][1].length( ) < 3 ) ;
Pag. 490
ESTRUCTURAS DE DATOS – Arreglos.
Clase PrgArticulos04
do {
System.out.print ( “ Ingrese la sigla del artículo [ ” + ( i + 1) + “ ]: ” ) ;
articulos[i][2] = Lectura.leerString( ) ;
articulos[i][2] = articulos[i][2].trim( ) ;
if (articulos[i][2].length( ) < 3 ) {
System.out.println ( “ La sigla ingresada no es válida… ” ) ;
}
} while (articulos[i][2].length( ) < 3 ) ;
letra = articulos[i][0].substring(0,1) ;
resto = articulos[i][0].substring(1) ;
nombre = letra.toUpperCase( ) + resto.toLowerCase( ) ;
letra = articulos[i][1].substring(0,1) ;
resto = articulos[i][1].substring(1) ;
descrip = letra.toUpperCase( ) + resto.toLowerCase( ) ;
siglas = articulos[i][2].toUpperCase( ) ;
}
}
}
Pag. 491
Ing. Juan José Flores Cueto.
Pag. 492
ESTRUCTURAS DE DATOS – Arreglos.
Arreglos en paralelos
Cuando en una solución se utiliza más de un arreglo y el orden en que se disponen los datos
entre los arreglos tiene un significado se les denomina vectores paralelos.
En la solución del problema 146 se utilizan algunas variables y dos vectores en forma
simultanea (en paralelo). En una de las variables (numTrab) se almacena el número de
trabajadores y con este valor se crean los dos vectores (los arreglos en paralelo deben tener
el mismo tamaño). En uno de los vectores (nombres[ ]) se almacenan los nombres de todos
los trabajadores y en el otro vector (sueldos[ ]) se almacenan sus respectivos sueldos. Se
puede observar que un dato almacenado en una posición de un vector esta relacionado con
el dato almacenado en la misma posición del otro vector. A continuación, se muestra el
planteamiento de la solución en forma gráfica. Es importante tener presente que los vectores
paralelos se grafican en forma vertical para comprender mejor la relación que existe entre
ellos.
nombres sueldos
Datos del mismo
trabajador.
0 0
1 1
2 2
: : : :
: : : :
numTrab - 1 : numTrab - 1 :
nombre de los sueldo de los
trabajadores trabajadores
La pregunta lógica que se pueden formular sería la siguiente: ¿por qué en vez de crear dos
vectores en paralelo no creamos una matriz con dos columnas?, y la respuesta sería que en
una matriz solo se pueden almacenar datos del mismo tipo, mientras que usando dos
vectores en paralelo se pueden almacenar datos de diferente tipo. En el planteamiento de la
Pag. 493
Ing. Juan José Flores Cueto.
solución anterior en uno de los vectores se almacenan datos de tipo TEXTO mientras que en
el otro vector se almacenan datos de tipo NUMERO.
En la solución del problema 147 se utilizan algunas variables y tres vectores en forma
simultanea (en paralelo). En una de las variables (numSoc) se almacena el número de socios
de un club y con este valor se crean los tres vectores. En uno de los vectores (nombres[ ]) se
almacenan los nombres de los socios, en otro vector (sexos[ ]) se almacena el sexo de cada
uno de los socios y en el tercer vector (edades[ ]) sus respectivas edades. Como ejemplo, se
puede observar, que todos los datos de la socia Danae están almacenados en la posición
cero de los vectores en paralelo. A continuación se muestra el planteamiento de la solución.
0 Danae 0 F 0 10
1 1 1
2 2 2
: : : : : :
: : : : : :
numSoc - 1 : numSoc - 1 : numSoc - 1 :
nombres de sexo de sueldo de
cada socios cada socio cada socio
En la solución del problema 148 se utilizan algunas variables, un vector y una matriz con dos
columnas en forma simultanea (en paralelo). A continuación se muestra el planteamiento de
la solución.
nombres precios
0 1
0 0
1 1
2 2
: : : : :
: : : : :
numArt - 1 : numArt - 1 : :
nombre de precio de compra precio de venta
cada artículos de cada artículos de cada artículos
Pag. 494
ESTRUCTURAS DE DATOS – Arreglos.
Problema 146
Pag. 495
Ing. Juan José Flores Cueto.
Diagrama de paquetes
Clases Clases
dominioDeLaAplicacion biblioteca
Pag. 496
ESTRUCTURAS DE DATOS – Arreglos.
INICIO
HACER
FINDESDE
Pag. 497
Ing. Juan José Flores Cueto.
FIN
Pag. 498
ESTRUCTURAS DE DATOS – Arreglos.
Clase PrgTrabajadores06
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgTrabajadores06 {
// Declaración de variables.
int i, numTrab ;
double sueldoMayor = 0, sumaSueldos = 0, sueldoPromedio ;
if ( numTrab <= 0 ) {
System.out.println ( “ El número de trabajadores no es válido… Reintente! ” ) ;
}
} while ( numTrab <= 0 ) ;
if ( nombres[i].length( ) < 3 ) {
System.out.println ( “ El nombre del trabajador no es válido… ” ) ;
}
} while ( nombres[i].length( ) < 3 ) ;
do {
System.out.print ( “ Ingrese el sueldo del trabajador [ ” + ( i + 1) + “ ]: ” ) ;
sueldos[i] = Lectura.leerString( ) ;
if ( sueldos[i] <= 0 ) {
System.out.println ( “ El sueldo del trabajador no es válido… ” ) ;
}
} while (sueldos[i] <= 0 ) ;
}
Pag. 499
Ing. Juan José Flores Cueto.
Clase PrgTrabajadores06
}
}
Pag. 500
ESTRUCTURAS DE DATOS – Arreglos.
Problema 147
Desarrollar una solución que permita ingresar y almacenar el nombre, el sexo y la edad
de todos los socios de un club. Indicar el número de socios mayores de edad que son
hombres y el número de socios cuyo nombre comienza con la letra “D”.
Pag. 501
Ing. Juan José Flores Cueto.
Diagrama de paquetes
Clases Clases
dominioDeLaAplicacion biblioteca
Pag. 502
ESTRUCTURAS DE DATOS – Arreglos.
INICIO
HACER
Pag. 503
Ing. Juan José Flores Cueto.
HACER
FINDESDE
ESCRIBIR totalMayorHombres
FINDESDE
ESCRIBIR totalNombresD
FIN
Pag. 504
ESTRUCTURAS DE DATOS – Arreglos.
Clase PrgSocios01
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgSocios01 {
// Declaración de variables.
int i, numSoc, totalMayoresHombres = 0, totalNombresD = 0 ;
char letra ;
if ( numSoc <= 0 ) {
System.out.println ( “ El número de socios no es válido… Reintente! ” ) ;
}
} while ( numSoc <= 0 ) ;
if ( nombres[i].length( ) < 3 ) {
System.out.println ( “ El nombre del socio no es válido… ” ) ;
}
} while ( nombres[i].length( ) < 3 ) ;
do {
System.out.print ( “ Ingrese el sexo del trabajador [ ” + ( i + 1) + “ ]: ” ) ;
sexos[i] = Lectura.leerChar( ) ;
sexos[i] = Character.toUpperCase( sexos[i] ) ;
Pag. 505
Ing. Juan José Flores Cueto.
Clase PrgSocios01
do {
System.out.print ( “ Ingrese la edad del socio [ ” + ( i + 1) + “ ]: ” ) ;
edades[i] = Lectura.leerInt( ) ;
if ( edades[i] <= 0 ) {
System.out.println ( “ La edad del socio no es válida… ” ) ;
}
} while ( edades[i] <= 0 ) ;
}
if ( letra == ‘M’ ) {
totalNombresD ++ ;
}
}
}
Pag. 506
ESTRUCTURAS DE DATOS – Arreglos.
Problema 148
Pag. 507
Ing. Juan José Flores Cueto.
Diagrama de paquetes
Clases Clases
dominioDeLaAplicacion biblioteca
Pag. 508
ESTRUCTURAS DE DATOS – Arreglos.
INICIO
HACER
Pag. 509
Ing. Juan José Flores Cueto.
HACER
FINDESDE
FINDESDE
FIN
Pag. 510
ESTRUCTURAS DE DATOS – Arreglos.
Clase PrgArticulos06
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgArticulos06 {
// Declaración de variables.
int i, numArt ;
double utilidad ;
if ( numArt <= 0 ) {
System.out.println ( “ El número de artículos no es válido… Reintente! ” ) ;
}
} while ( numArt <= 0 ) ;
if ( nombres[i].length( ) < 3 ) {
System.out.println ( “ El nombre del artículo no es válido… ” ) ;
}
} while ( nombres[i].length( ) < 3 ) ;
do {
System.out.print ( “ Ingrese su precio de compra : ” ) ;
precios[i][0] = Lectura.leerDouble( ) ;
if ( precios[i][0] <= 0 ) {
System.out.println ( “ Precio de compra no válido… ” ) ;
}
} while ( precios[i][0] <= 0 ) ;
Pag. 511
Ing. Juan José Flores Cueto.
Clase PrgArticulos06
do {
System.out.print ( “ Ingrese su precio de venta : ” ) ;
precios[i][1] = Lectura.leerDouble( ) ;
if ( precios[i][1] <= 0 ) {
System.out.println ( “ Precio de venta no válido… ” ) ;
}
}
}
Pag. 512
ESTRUCTURAS DE DATOS – Arreglos.
Problema 149
Desarrollar una solución que permita ingresar y almacenar el nombre, el código y las
diferentes notas de los alumnos de un salón de clase. Indicar el nombre, el código y el
promedio de notas de cada alumno. Almacenar el promedio de notas de cada alumno.
Adicionalmente, indicar el nombre de los alumnos que obtuvieron el mayor promedio.
Pag. 513
Ing. Juan José Flores Cueto.
Diagrama de paquetes
Clases Clases
dominioDeLaAplicacion biblioteca
Pag. 514
ESTRUCTURAS DE DATOS – Arreglos.
INICIO
HACER
LEER numNot
SI (numNot <= 0 )
ENTONCES
ESCRIBIR “Número de notas no válido… ”
FINSI
MIENTRAS (numNot <= 0 )
HACER
LEER nombres[i]
nombres[i] = nombres[i] ELIMINAESPACIO INICIO,FIN
SI ( LONGITUD nombres[i] < 3 )
ENTONCES
ESCRIBIR “Nombre del alumno no válido...”
FINSI
MIENTRAS ( LONGITUD nombres[i] < 3 )
Pag. 515
Ing. Juan José Flores Cueto.
HACER
LEER codigos[i]
SI ( codigos[i] < 100000 OR codigos[i] > 999999 )
ENTONCES
ESCRIBIR “Código ingresado no válido...”
FINSI
MIENTRAS ( codigos[i] < 100000 OR codigos[i] > 999999 )
DESDE j = 0 HASTA j = numNot - 1 INCREMENTA 1
HACER
LEER notas[i][j]
SI ( notas[i][j] < 0 OR notas[i][j] > 20 )
ENTONCES
ESCRIBIR “Nota ingresada no válida...”
FINSI
MIENTRAS ( notas[i][j] < 0 OR notas[i][j] > 20 )
FINDESDE
FINDESDE
FIN
Pag. 516
ESTRUCTURAS DE DATOS – Arreglos.
Clase PrgAlumnos06
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgAlumnos06 {
// Declaración de variables.
int i, j, numAlu, numNot ;
double sumaNotas = 0, promAlu = 0, promAluMayor = 0 ;
do {
System.out.print ( “ Ingrese el número de notas por alumno : ” ) ;
numNot = Lectura.leerInt( ) ;
if ( numNot <= 0 ) {
System.out.println ( “ El número de notas no es válido… Reintente! ” ) ;
}
} while ( numNot <= 0 ) ;
if ( nombres[i].length( ) < 3 ) {
System.out.println ( “ El nombre del alumno no es válido… ” ) ;
}
} while ( nombres[i].length( ) < 3 ) ;
Pag. 517
Ing. Juan José Flores Cueto.
Clase PrgAlumnos06
do {
System.out.print ( “ Ingrese su código : ” ) ;
codigos[i] = Lectura.leerLong( ) ;
if ( codigos[i] < 100000 || codigos[i] > 999999 ) {
System.out.println ( “ Precio de compra no válido… ” ) ;
}
} while ( codigos[i] < 100000 || codigos[i] > 999999 ) ;
for ( j = 0 ; j < numNot ; j++ ) {
do {
System.out.print ( “ Ingrese su nota ” + ( j + 1) + “ : ” ) ;
notas[i][j] = Lectura.leerDouble( ) ;
if (notas[i][j] < 0 || notas[i][j] > 20 ) {
System.out.println ( “ Nota ingresada no válida… ” ) ;
}
} while (notas[i][j] < 0 || notas[i][j] > 20 ) ;
}
}
Pag. 518
ESTRUCTURAS DE DATOS – Arreglos.
Problema 150
Desarrollar una solución que permita ingresar y almacenar el nombre de todos los
artículos de una bodega. Consistenciar la entrada de datos. Mostrar los nombres
ordenados alfabéticamente, considerando la primera letra de cada nombre en
mayúscula y el resto en minúscula. Adicionalmente, mostrar la longitud de cada uno de
los nombres.
Pag. 519
Ing. Juan José Flores Cueto.
Diagrama de paquetes
Clases Clases
dominioDeLaAplicacion biblioteca
Pag. 520
ESTRUCTURAS DE DATOS – Arreglos.
INICIO
FINDESDE
Pag. 521
Ing. Juan José Flores Cueto.
FINDESDE
FIN
Clase PrgArticulos07
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgArticulos07 {
// Declaración de variables.
int i, j, numArt, tamaño ;
String letra, resto, x ;
Pag. 522
ESTRUCTURAS DE DATOS – Arreglos.
Clase PrgArticulos07
if ( articulos[i].length( ) < 3 ) {
System.out.println ( “ El nombre ingresado no es válido… Reintente! ” ) ;
}
} while ( articulos[i].length( ) < 3 ) ;
}
Pag. 523
Ing. Juan José Flores Cueto.
Pag. 524
Capítulo
Introducción al Desarrollo de
Soluciones Orientadas a Objetos
5
Temas:
Introducción.
Conceptos básicos:
• Clase.
• Objeto.
• Atributo.
• Método.
• Ocultar Atributos de Instancia.
Problema desarrollado.
INTRODUCCIÓN AL DESARROLLO DE SOLUCIONES ORIENTADAS A OBJETOS
CAPÍTULO V
INTRODUCCIÓN
MARCO DE TRABAJO
ENUNCIADO
DEL
PROBLEMA
Etapa 02
Definición
Solución Etapa 03
Diseño
Solución Etapa 04
Desarrollo
Solución
Pag. 527
Ing. Juan José Flores Cueto.
En los capítulos anteriores, se ha utilizado la clase en su forma más simple. Las clases
creadas se utilizaban simplemente para encapsular el método main(), lo que ha permitido
mostrar la base de la sintaxis de Java, las estructuras de datos, las estructuras lógicas, las
instrucciones de bifurcación, el manejo de excepciones y algunas de las clases incorporadas
en Java. Como se verá en el presente capítulo, las clases son mucho más poderosas que las
presentadas hasta ahora.
Datos necesarios: Las notas del alumno (en esta caso tenemos 3
notas).
Pag. 528
INTRODUCCIÓN AL DESARROLLO DE SOLUCIONES ORIENTADAS A OBJETOS
Diagrama de paquetes
Clases Clases
dominioDeLaAplicacion biblioteca
INICIO
FIN
Pag. 529
Ing. Juan José Flores Cueto.
Clase PrgAlumno
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgAlumno {
Como se ha mencionado, las clases son mucho más poderosas que las presentadas hasta
ahora.
A partir de este punto, se ampliará el conocimiento sobre las clases. Para ello, se revisarán
algunos conceptos básicos y se presentarán, en forma progresiva, nuevos conceptos hasta
llegar al concepto de ocultamiento de atributos de instancia. Todos estos nuevos conceptos
presentados se incorporarán progresivamente en el ejemplo planteado. Al final, se formalizará
el método de solución, el Método de las 6D, para incluir los conceptos presentados.
Pag. 530
INTRODUCCIÓN AL DESARROLLO DE SOLUCIONES ORIENTADAS A OBJETOS
Pag. 531
Ing. Juan José Flores Cueto.
Pag. 532
INTRODUCCIÓN AL DESARROLLO DE SOLUCIONES ORIENTADAS A OBJETOS
CONCEPTOS BÁSICOS
CLASE
Una clase es una implantación de un tipo de objeto. Especifica una estructura de datos
(atributos) y los métodos operativos permisibles que se aplican a cada uno de sus objetos. El
mundo real se modela mediante clases. Una clase es una abstracción y no referencia a
ningún objeto en particular. Una clase define un nuevo tipo de objeto.
En Java, una clase se declara utilizando la palabra reservada class. Las clases que se han
utilizado anteriormente son ejemplos muy limitados en los que no aparece su formato general.
class NombreClase {
// ATRIBUTOS
tipo variableInstancia1 ;
tipo variableInstancia2 ;
// ...
tipo variableInstanciaN ;
// METODOS
tipo nombreMetodo1 (listaDeParámetros) {
// cuerpo del método1.
}
//...
Los datos o variables definidos en una clase se llaman atributos. El código está contenido en
los métodos. En conjunto, los métodos y los atributos definidos dentro de una clase son los
miembros de la clase.
Pag. 533
Ing. Juan José Flores Cueto.
Los atributos definidos dentro de una clase, permiten que los objetos o instancias de una
clase puedan almacenar datos.
Todos los métodos tienen el mismo formato que el método main() utilizado en los ejemplos
anteriores. Sin embargo, es importante mencionar, que muchos métodos no se especificarán
como public, static o public static.
class Alumno {
Pag. 534
INTRODUCCIÓN AL DESARROLLO DE SOLUCIONES ORIENTADAS A OBJETOS
OBJETO
Donde;
En dicha sentencia, se define el objeto objAlumno de la clase Alumno. Para definir otros
objetos de la clase Alumno solo se tendría que repetir la sentencia y cambiar el nombre
del objeto.
Es importante recordar que la definición de una clase sólo crea un molde, modelo o patrón a
partir del cual se pueden crear objetos, mientras que la definición de un objeto crea un objeto
real o una instancia de una clase.
Pag. 535
Ing. Juan José Flores Cueto.
ATRIBUTO
Hasta este punto, se ha creado la clase Alumno sin atributos ni métodos. Ahora, es necesario
conocer algunos conceptos básicas sobre los atributos, para luego definirlos dentro de la
clase Alumno.
Los atributos, en principio, sirven para almacenar valores de los objetos que se instancian a
partir de una clase.
Atributos de Instancia.
Los atributos de instancia conocidos también como atributos de objeto, son
variables, arreglos u objetos que almacenan valores distintos para todos los objetos
de una misma clase.
Atributos de Clase.
Los atributos de clase son variables, areglos u objetos que almacenan el mismo
valor para todos los objetos de una misma clase.
En otras palabras, mientras que a partir de un atributo de instancia se crea una copia
por cada objeto que se instancia, a partir de un atributo de clase sólo se crea una copia
de ese atributo para todos los objetos que se instancien. Si no se especifica lo contrario
los atributos son de instancia y no de clase. Para declarar un atributo de clase se utiliza
la palabra reservada static.
Es decir, cada objeto tendrá sus propios valores para cada atributo de instancia
definido en su clase y existirá para todos los objetos un único valor por cada atributo de
clase definido en su clase.
tipo nombreAtributo;
Donde :
• tipo especifica el tipo de dato que el atributo almacenará. Puede ser cualquier tipo
válido, incluido los tipos de Clase.
Pag. 536
INTRODUCCIÓN AL DESARROLLO DE SOLUCIONES ORIENTADAS A OBJETOS
class Alumno {
double nota1 ;
double nota2 ;
}
En la clase Alumno solo se han definido dos atributos, pero todavía no se han definido
método. Se agregarán algunos métodos a la clase Alumno mas adelante.
También, se definirá el objeto objAlumno de la clase Alumno, dentro del método main()
de la clase PrgAlumno, tal y como se especificó anteriormente a través de la siguiente
sentencia:
Cada vez que se define un objeto de una clase, se declara y crea un objeto que
contiene una copia de todos los atributos de instancia definidos para la clase.
objAlumno.nota1 = 15 ;
objAlumno.nota2 = 19 ;
Estas sentencias permiten asignar a las copias de los atributos de instancia nota1 y
nota2 que están contenidas en el objeto objAlumno los valores 15 y 19
respectivamente.
Si se desea mostrar el valor del atributo de instancia nota1 del objeto objAlumno se
utilizaría la siguiente sentencia:
Pag. 537
Ing. Juan José Flores Cueto.
Esta sentencia permite que se muestre el mensaje “La nota del alumno es:” y el valor
del atributo nota1 del objeto objAlumno.
Estás sentencias permiten obtener el valor de los atributos nota1 y nota2 del objeto
objAlumno para calcular el promedio de las notas y almacenarlo en la variable prom,
para luego mostrar el mensaje “El promedio final del alumno es:” y el valor de la
variable prom calculada.
package dominioDeLaAplicacion ;
class Alumno {
double nota1 ;
double nota2 ;
}
package dominioDeLaAplicacion ;
class PrgAlumno {
double prom ;
}
}
Pag. 538
INTRODUCCIÓN AL DESARROLLO DE SOLUCIONES ORIENTADAS A OBJETOS
Es común que en todo proyecto de solución solo exista un método main( ). Dicho
método main( ) inicia la ejecución del proyecto y está definido en una de las clases que
pertenecen al proyecto.
class Alumno {
double nota1, nota2, nota3 ;
}
package dominioDeLaAplicacion ;
class Alumno {
double nota1, nota2, nota3 ;
}
package dominioDeLaAplicacion ;
class PrgAlumno {
double prom ;
}
}
Es importante mencionar que los cambios que se realicen en los atributos de instancia de un
objeto no afectan a los atributos de instancia de los otros objetos ya que cada objeto tiene un
Pag. 539
Ing. Juan José Flores Cueto.
valor distinto para cada atributo de instancia independiente de los valores que pueden tener
los otros objetos. Esto se puede comprobar fácilmente definiendo más de un objeto en el
proyecto de solución ProyAlumno. Para esto, se definirán dos objetos más denominados
objAlumno02 y objAlumno03 en el método main( ) de la clase PrgAlumno. Luego, se les
asignará valores a cada copia de los atributos de instancia nota1, nota2 y nota3, para
finalmente calcular y mostrar el promedio de las notas de cada uno de los objeto de la clase
Alumno. Según lo mencionado anteriormente, el proyecto de solución ProyAlumno se
desarrollaría de la siguiente manera:
package dominioDeLaAplicacion ;
class Alumno {
double nota1, nota2, nota3 ;
}
package dominioDeLaAplicacion ;
class PrgAlumno {
Pag. 540
INTRODUCCIÓN AL DESARROLLO DE SOLUCIONES ORIENTADAS A OBJETOS
Y se puede comprobar que cada objeto de la clase Alumno tiene una copia de los
atributos de instancia nota1, nota2 y nota3, y que los valores de un objeto son
independientes de los otros valores que tienen los otros objetos.
Pag. 541
Ing. Juan José Flores Cueto.
MÉTODO
Hasta este punto se ha creado la clase Alumno con tres variables de instancia y sin ningún
método. Ahora es necesario conocer algunas cosas básicas sobre los métodos para luego
poder definirlos dentro de la clase Alumno.
Métodos de Instancia.
Los métodos de instancia, conocidos también como métodos de objeto, son
métodos que pueden ser llamados a través de un objeto instanciado a partir de una
clase. Un método de instancia se ejecuta utilizando el siguiente formato:
nombreObjeto.nombreMétodoInstancia ( ) ;
Métodos de Clase.
Los métodos de clase son métodos que pueden ser llamados también a través de
un objeto instanciado a partir de una clase o utilizando directamente la clase.
Generalmente, para ejecutar un método de clase se utiliza el siguiente formato:
NombreClase.nombreMétodoClase ( ) ;
En otras palabras, mientras que para ejecutar un método de instancia se requiere crear
primero un objeto de la clase donde está definido el método, para ejecutar un método
de clase no se requiere crear un objeto ya que se puede hacer directamente utilizando
el nombre de la clase donde está definido el método. Para declarar un método de clase
se utiliza la palabra reservada static.
A través de métodos de clase se puede manipular solo atributos de clase. Mientras que
a través de métodos de instancia se puede manipular tanto atributos de clase como
atributos de instancia.
Pag. 542
INTRODUCCIÓN AL DESARROLLO DE SOLUCIONES ORIENTADAS A OBJETOS
Donde :
• tipo especifica el tipo de dato devuelto por el método. Puede ser cualquier tipo
válido, incluido los tipos de clase. Si el método no devuelve ningún valor, el tipo
devuelto debe ser void. Los métodos que devuelven un tipo distinto de void,
devuelven un valor a la sentencia que ejecuta el método utilizando la siguiente
forma de la sentencia return:
return valor ;
Pag. 543
Ing. Juan José Flores Cueto.
Talvez se tengan algunos problemas para comprender los conceptos que rodean a los
métodos, poco a poco conforme se modifique el proyecto de solución ProyAlumno se podrán
comprender mejor.
package dominioDeLaAplicacion ;
class Alumno {
double nota1, nota2, nota3 ;
void promedio ( ) {
System.out.print ( “ El promedio final del alumno es: ” ) ;
System.out.println ( (nota1 + nota2 + nota3 ) / 3 ) ;
}
}
package dominioDeLaAplicacion ;
class PrgAlumno {
public static void main ( String args [ ] ) {
double prom ;
// Primero declaramos y creamos tres objetos de la clase Alumno.
Alumno objAlumno = new Alumno ( ) ;
Alumno objAlumno02 = new Alumno ( ) ;
Alumno objAlumno03 = new Alumno ( ) ;
// Ahora asignamos valores a las variables de instancia del objeto objAlumno.
objAlumno.nota1 = 15 ;
objAlumno.nota2 = 19 ;
objAlumno.nota3 = 11 ;
// También asignamos valores a las variables de instancia del objeto objAlumno02.
objAlumno02.nota1 = 11 ;
objAlumno02.nota2 = 11 ;
objAlumno02.nota3 = 11 ;
// y a las variables de instancia del objeto objAlumno03.
objAlumno03.nota1 = 13 ;
objAlumno03.nota2 = 14 ;
objAlumno03.nota3 = 15 ;
// Calculamos el promedio de notas para cada alumno.
objAlumno.promedio ( ) ;
objAlumno02.promedio ( ) ;
objAlumno03.promedio ( ) ;
}
}
Pag. 544
INTRODUCCIÓN AL DESARROLLO DE SOLUCIONES ORIENTADAS A OBJETOS
Las tres líneas siguientes, ubicadas dentro del método main( ) de la clase PrgAlumno,
permiten ejecutar el método promedio( ) definido en la clase Alumno:
objAlumno.promedio ( ) ;
objAlumno02.promedio ( ) ;
objAlumno03.promedio ( ) ;
Al igual que para acceder a las variables de instancia, para acceder a los métodos se utiliza el
operador punto (.). El operador punto relaciona el nombre del objeto con el nombre de un
método.
objAlumno.promedio ( ) ;
Esta sentencia es parte del método main( ) de la clase PrgAlumno y permite que se
ejecute el método promedio( ) del objeto objAlumno definido en la clase Alumno. Es
decir; se ejecuta el método promedio( ) utilizando el nombre de un objeto de la clase
Alumno seguido por el operador punto. Así, cuando se ejecuta;
Pag. 545
Ing. Juan José Flores Cueto.
void promedio ( ) {
System.out.print ( “ El promedio final del alumno es: ” ) ;
System.out.println ( (nota1 + nota2 + nota3 ) / 3 ) ;
}
El método promedio( ) no devuelve ningún valor ya que tiene definido como tipo de
retorno void. Todos los métodos definidos con void no devuelven valor, por lo que no es
necesario especificar una sentencia return al final de este método.
El método promedio(), tampoco tiene parámetros ya que al final del nombre del método
los paréntesis se encuentran vacíos.
No devuelve No tiene
valor. parámetros.
void promedio ( ) {
System.out.print ( “ El promedio final del alumno es: ” ) ;
System.out.println ( ( nota1 + nota2 + nota3 ) / 3 ) ;
}
La llave de apertura “{”, ubicada después del paréntesis y la llave de cierre “}” ubicada
en la última línea definen el ámbito del método promedio( ). El ámbito de un método
define todas las sentencias que se ejecutarán cuando el método se ejecute. En el caso
anterior, cuando se ejecute el método promedio( ) se ejecutarán las dos sentencia que
están dentro de su ámbito (es decir, entre las llaves).
En el ámbito del método promedio( ) se puede observar que las variables de instancia
nota1, nota2 y nota3 se utilizan directamente sin estar precedidas del nombre del objeto
y el operador punto (.). Cuando un método utiliza una variable de instancia que ha sido
definida en su misma clase, se puede referir a ella en forma directa utilizando solo su
nombre.
Pag. 546
INTRODUCCIÓN AL DESARROLLO DE SOLUCIONES ORIENTADAS A OBJETOS
package dominioDeLaAplicacion ;
class Alumno {
double nota1, nota2, nota3 ;
double promedio ( ) {
return ( nota1 + nota2 + nota3 ) / 3 ;
}
}
package dominioDeLaAplicacion ;
class PrgAlumno {
double prom ;
Pag. 547
Ing. Juan José Flores Cueto.
prom = objAlumno02.promedio ( ) ;
prom = prom + 1 ;
System.out.println ( “ La nota final de María es ” + prom + “.” ) ;
Para ejecutar, un método que devuelve un valor, se utiliza también el nombre del objeto, el
operador punto (.) y el nombre del método, pero debido a que el método devuelve un valor,
éste deberá ser asignado a una variable del mismo tipo que el valor devuelto por el método.
prom = objAlumno.promedio ( ) ;
Esta sentencia es parte del método main( ) de la clase PrgAlumno y permite que se
ejecute el método promedio( ) del objeto objAlumno definido en la clase Alumno. Como
el método promedio( ) devuelve un valor, entonces el valor devuelto será almacenado
en la variable prom. Observe que la variable prom es del mismo tipo que el valor
devuelto por el método promedio( ).
double promedio ( ) {
return ( nota1 + nota2 + nota3 ) / 3 ;
}
prom = objAlumno.promedio ( ) ;
Una vez que prom ya tiene el valor devuelto por el método promedio( ) se puede
procesar dicho valor según sea necesario. En el primer caso, se muestra el valor de
prom, y en el segundo caso, antes de mostrar el valor de prom se le suma 1.
Pag. 548
INTRODUCCIÓN AL DESARROLLO DE SOLUCIONES ORIENTADAS A OBJETOS
Se obtiene el promedio de
notas y se muestra el
resultado:
prom = objAlumno.promedio ( ) ;
System.out.println ( “ La nota final de Luis es ” + prom + “.” ) ;
Se obtiene el promedio de
notas, se aumenta 1 y se
muestra el resultado:
prom = objAlumno02.promedio ( ) ;
prom = prom + 1 ;
System.out.println ( “ La nota final de María es ” + prom + “.” ) ;
Es preciso mencionar, que se puede escribir estas sentencias de una manera más
eficiente. Observe la siguiente sentencia:
Existen dos puntos importantes relacionados con los métodos que devuelven valor:
1. El tipo de dato que un método devuelve (con la sentencia return), debe ser
compatible con el tipo de dato especificado por el método.
Especifica que se
debe devolver un No tiene
valor double. parámetros.
double promedio ( ) {
return (nota1 + nota2 + nota3 ) / 3 ;
}
2. La variable que recibe el valor devuelto por el método debe también ser
compatible con el tipo de dato especificado por el método.
prom = objAlumno.promedio ( ) ;
Pag. 549
Ing. Juan José Flores Cueto.
package dominioDeLaAplicacion ;
class Alumno {
double nota1, nota2, nota3 ;
double promedio ( ) {
return ( nota1 + nota2 + nota3 ) / 3 ;
}
package dominioDeLaAplicacion ;
class PrgAlumno {
double prom ;
Pag. 550
INTRODUCCIÓN AL DESARROLLO DE SOLUCIONES ORIENTADAS A OBJETOS
prom = prom + 1 ;
System.out.println ( “ La nota final de María es ” + prom + “.” ) ;
Para ejecutar un método que tiene parámetros se utiliza el nombre del objeto, el
operado punto(.), el nombre del método a ejecutar y los argumentos necesarios.
objAlumno.setNotas ( 15,19,11 ) ;
Esta sentencia es parte del método main( ) de la clase PrgAlumno( ) y permite ejecutar
el método setNotas( ) del objeto objAlumno definido en la clase Alumno. Como el
método setNotas( ) tiene definido 3 parámetros es necesario que al momento de
ejecutar el método se incluya entre los paréntesis los 3 argumentos que se van ha
enviar al método.
a = 15
objAlumno.setNotas (15,19,11 ) ;
3 ARGUMENTOS 3 PARÁMETROS
Pag. 551
Ing. Juan José Flores Cueto.
Existen dos puntos importantes relacionados con los métodos que tienen parámetros:
1. Un método que tiene parámetros debe recibir un valor por cada parámetro definido.
El valor recibido debe ser compatible con el tipo de dato definido por el parámetro al
cual será asignado:
objAlumno.setNotas(15,19,11);
Pag. 552
INTRODUCCIÓN AL DESARROLLO DE SOLUCIONES ORIENTADAS A OBJETOS
No devuelve No tiene
valor. parámetros.
void promedio ( ) {
System.out.print ( “ El promedio final del alumno es: ” ) ;
System.out.println ( ( nota1 + nota2 + nota3 ) / 3 ) ;
}
Especifica que se
debe devolver un No tiene
valor double. parámetros.
double promedio ( ) {
return (nota1 + nota2 + nota3 ) / 3 ;
}
4. Un método puede; devolver un valor y tener definido uno o más parámetros. (Este
tipo de métodos no han sido tratados en el presente capítulo).
Pag. 553
Ing. Juan José Flores Cueto.
Método constructor
Un constructor es un método especial que sirve para construir o inicializar objetos. Cada vez
que se crea un objeto se ejecuta en forma automática el método constructor. El método
constructor permite que se inicialicen la copia de los atributos de instancia de los objetos
inmediatamente después de su creación. El método constructor tiene el mismo nombre que la
clase en la cual está definido. Los métodos constructores pueden tener parámetros al igual
que otros métodos, pero no devuelven ningún valor, ni siguiera void.
package dominioDeLaAplicacion ;
class Alumno {
double nota1, nota2, nota3 ;
Alumno ( ) {
nota1 = 0 ;
nota2 = 0 ;
nota3 = 0 ;
}
double promedio ( ) {
return ( nota1 + nota2 + nota3 ) / 3 ;
}
package dominioDeLaAplicacion ;
class PrgAlumno {
// Ahora asignamos valores a la copia de las variables de instancia del objeto creado.
objAlumno.setNotas ( 15,19,11 ) ;
Pag. 554
INTRODUCCIÓN AL DESARROLLO DE SOLUCIONES ORIENTADAS A OBJETOS
El método constructor puede tener definido parámetros. En ese caso, podemos enviar al
método constructor Alumno( ), los valores de la copia de los atributos de instancia nota1,
nota2 y nota3 del objeto creado y eliminar el método setNotas( ). Aunque esto es posible y
perfectamente válido, no se eliminará el método setNotas( ). El método constructor Alumno( )
se encargará de inicializar con el valor cero, a todas las copias de los atributos de instancia
de los objetos que se creen, mientras que el método setNotas( ) se encargará de modificar los
valores de las copias de los atributos de instancia de los objetos cuando esto sea necesario.
(Recuerde que el método constructor solo se ejecutará en forma automática inmediatamente
después de crear un objeto y si se requiere cambiar el valor de una copia de los atributos de
instancia del objeto después de haberlo creado, deberá realizarlo empleando otro método.
Para nuestro caso, dicho método es setNotas( ) ).
Pag. 555
Ing. Juan José Flores Cueto.
En Java, no es correcto que dos variables que están dentro del mismo ámbito tengan el
mismo nombre. Es decir, dos variables locales declaradas dentro del mismo método o dos
atributos, no pueden tener nombres iguales. Sin embargo, una variable local (declarada
dentro de un método) puede tener el mismo nombre que un atributo. Cuando una variable
local tiene el mismo nombre que un atributo, la variable local oculta al atributo.
package dominioDeLaAplicacion ;
class Alumno {
double nota1, nota2, nota3 ;
Alumno ( ) {
nota1 = 0 ;
nota2 = 0 ;
nota3 = 0 ;
}
double promedio ( ) {
return ( nota1 + nota2 + nota3 ) / 3 ;
}
Dentro del método setNotas( ), se han declarado 3 variables locales (parámetros) para
recibir las notas cuando se ejecute el método. Dichas variables locales fueron
declaradas con los nombres a, b y c, que no tienen ningún significado especial, ya que
dichos nombres de variables no reflejan el valor que almacenan. Estás variables locales
no fueron declaradas con los nombres nota1, nota2 y nota3 debido a que dichos
nombres ya eran utilizados por los atributos de instancia.
Utilizando el operador this es posible nombrar a las variables locales igual que los atributos de
instancia. Para esto, cada vez que necesite referirse a las variables locales se utilizará el
Pag. 556
INTRODUCCIÓN AL DESARROLLO DE SOLUCIONES ORIENTADAS A OBJETOS
nombre de la variable local y cada vez que necesite referirse a los atributos de instancia se
utilizará el operador this seguido del operador punto (.) y el nombre del atributo.
Cuando se utiliza el operador this se indica que se está refiriendo al atributo de instancia y no
a una variable local.
this.nombreAtributoInstancia ;
package dominioDeLaAplicacion ;
class Alumno {
double nota1, nota2, nota3 ;
Alumno ( ) {
nota1 = 0 ;
nota2 = 0 ;
nota3 = 0 ;
}
double promedio ( ) {
return ( nota1 + nota2 + nota3 ) / 3 ;
}
Ahora, en el método setNotas( ), se utilizan los mismos nombres para las variables locales
(declarados como parámetros) y para los atributos de instancia. Al momento de referirnos a
los atributos de instancia anteponemos al nombre del mismo el operador this y el operador
punto (.)
This.nota1 = nota1;
Pag. 557
Ing. Juan José Flores Cueto.
Algunos programadores procurar no utilizar variables locales que oculten los atributos de
instancia. Por otro lado, otros programadores piensan que es una buena práctica utilizar los
mismos nombres por claridad y utilizar el operador this para referirse a los atributos de
instancia. A partir de ahora, se utilizará el operador this como una buena práctica de
programación.
Pag. 558
INTRODUCCIÓN AL DESARROLLO DE SOLUCIONES ORIENTADAS A OBJETOS
Ahora, se modificará el proyecto de solución ProyAlumno, de tal forma que los datos
sean ingresados a través del teclado de la computadora. Para ello, se utilizará la clase
Lectura presentada en capítulos anteriores. La clase Lectura pertenece al paquete
biblioteca:
package dominioDeLaAplicacion ;
class Alumno {
double nota1, nota2, nota3 ;
Alumno ( ) {
nota1 = 0 ;
nota2 = 0 ;
nota3 = 0 ;
}
double promedio ( ) {
return ( nota1 + nota2+nota3 ) / 3 ;
}
package dominioDeLaAplicacion ;
import biblioteca.* ;
class PrgAlumno {
// Ahora enviamos las notas a la copia de los atributos de instancia del objeto.
objAlumno.setNotas ( n1,n2,n3 ) ;
prom = objAlumno.promedio ( ) ;
System.out.println ( “ La nota final de Luis es ” + prom + “.” ) ;
}
}
package biblioteca ;
public class Lectura {
Pag. 559
Ing. Juan José Flores Cueto.
Pag. 560
INTRODUCCIÓN AL DESARROLLO DE SOLUCIONES ORIENTADAS A OBJETOS
Es un buen momento para ajustar los pasos definidos en las etapas del método de las 6’D y
poder desarrollar un proyecto que permitan al lector familiarizarse con este tipo de soluciones.
En la solución del problema anterior, se utilizó dos paquetes. Los mayores cambios los
desarrollamos en las 2 clases del paquete dominioDeLaAplicacion. En una clase se
desarrollará el método main( ) y se definirán objetos de la otra clase, mientras que en la otra
clase se definirán los atributos de instancia, métodos de instancia y método constructor válido
para los objetos.
ENUNCIADO
DEL
PROBLEMA
Etapa 02 Etapa 03 Etapa 04
Pag. 561
Ing. Juan José Flores Cueto.
Pag. 562
INTRODUCCIÓN AL DESARROLLO DE SOLUCIONES ORIENTADAS A OBJETOS
Con el propósito de describir los pasos definidos de las etapas del método 6’D, se volverá a
solucionar el problema anterior.
PROBLEMA 151
Datos necesarios: Las notas del alumno (en esta caso tenemos 3
notas).
Pag. 563
Ing. Juan José Flores Cueto.
de instancia. Por otro lado, solo podrán ser definidos como atributos de instancia
los datos de entrada.
Clase: Alumno.
La función de la segunda clase será el ingreso de los datos y mostrar los resultados
esperados. Como buena práctica de programación, en los métodos de esta clase,
no se realizará ningún tipo de cálculo y solo podrán ser definidos como atributos de
instancia objetos de la otra clase (para este caso, la clase Alumno).
Clase: PrgAlumno.
En el paquete biblioteca se tendrá la clase Lectura para poder utilizar sus métodos.
Pag. 564
INTRODUCCIÓN AL DESARROLLO DE SOLUCIONES ORIENTADAS A OBJETOS
Diagrama de paquetes
dominioDeLaAplicacion biblioteca
Clase de
Clases de dominioDeLaAplicacion
biblioteca
nota1 : double
nota2 : double leerString( ) : String
nota3 : double leerChar( ) : char
leerInt( ) : int
main( ) Alumno( ) leerLong( ) : long
setNotas(double, double, double) : void leerFloat( ) : float
promedio( ) : double leerDouble( ) : double
Diseño de algoritmos.
Algoritmo PrgAlumno
METODO MAIN( )
INICIO
NUMERO n1, n2, n3, prom
CREAR OBJETO objAlumno CLASE Alumno EJECUTAR Alumno ( )
LEER n1, n2, n3
EJECUTAR objAlumno.setNotas ( n1,n2,n3 )
prom = EJECUTAR objAlumno.promedio ( )
ESCRIBIR prom
FIN
Pag. 565
Ing. Juan José Flores Cueto.
Algoritmo Alumno
ATRIBUTOS
METODO CONSTRUCTOR
PARAMETRO:
INICIO
nota1 = 0
nota2 = 0
nota3 = 0
FIN
METODO SETNOTAS
INICIO
ATRIBUTO.nota1 = nota1
ATRIBUTO.nota2 = nota2
ATRIBUTO.nota3 = nota3
FIN
METODO PROMEDIO
PARAMETRO:
RETORNO: prom
INICIO
NUMERO prom
prom = ( nota1 + nota2 +nota3 ) / 3
RETORNAR prom
FIN
CREAR OBJETO
Pag. 566
INTRODUCCIÓN AL DESARROLLO DE SOLUCIONES ORIENTADAS A OBJETOS
EJECUTAR
Se utiliza para ejecutar un método. Hay que tener presente que si el método
es de clase se deberá anteponer el operador punto (.) y el nombre de la
clase antes de colocar el nombre del método que se desea ejecutar. Si el
método es de instancia se deberá anteponer el operador punto (.) y el
nombre del objeto antes de colocar el nombre del método que se desea
ejecutar.
PARAMETRO
Se utiliza para especificar las variables que utilizamos para recibir los valores
enviados a un determinado método.
Se especifica que se utilizan las variables nota1, nota2 y nota3 para recibir
los valores que se envían al método al cual pertenece la instrucción.
RETORNO
RETORNO: prom
ATRIBUTO
ATRIBUTO.nota1 = nota1
Pag. 567
Ing. Juan José Flores Cueto.
Clase PrgAlumno
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgAlumno {
prom = objAlumno.promedio ( ) ;
System.out.println ( “ La nota final de Luis es ” + prom + “.” ) ;
}
}
Clase Alumno
package dominioDeLaAplicacion ;
class Alumno {
double nota1, nota2, nota3 ;
Alumno ( ) {
nota1 = 0 ;
nota2 = 0 ;
nota3 = 0 ;
}
double promedio ( ) {
return ( nota1 + nota2 + nota3 ) / 3 ;
}
Pag. 568
INTRODUCCIÓN AL DESARROLLO DE SOLUCIONES ORIENTADAS A OBJETOS
OTROS CONCEPTOS
Pag. 569
Ing. Juan José Flores Cueto.
Pag. 570
APÉNDICE
APÉNDICE
Problemas propuestos
Pag. 573
APÉNDICE
10. Desarrollar una solución que permita calcular y mostrar el perímetro y el área
de un círculo. Ingresar el radio del círculo.
11. Desarrollar una solución que permita calcular y visualizar el perímetro y el área
de un rectángulo. Ingresar la base y la altura del rectángulo.
12. Desarrollar una solución que permita calcular el área de un triángulo en función
de las longitudes de sus lados. Mostrar el resultado obtenido.
¾ Area = ((p*(p - a)*(p - b)*(p - c)) RAIZ 2.
¾ Semiperímetro p = (a +b + c) / 2.
13. Desarrollar una solución que permita convertir y mostrar una cantidad de
dinero, expresado en dólares, en su equivalente en nuevos soles. Ingresar la
cantidad en dólares y el tipo de cambio.
14. Desarrollar una solución que permita convertir y mostrar una cantidad de soles
a Dólares y a Euros. Considerar como tipo de cambio; 1 Dólar = 3.352 soles, y
1 Dólar = 1.09 Euros.
15. Desarrollar una solución que permita leer un número y calcular el resto de
dividir el número entre 3. Mostrar el resto de la división.
Pag. 574
APÉNDICE
16. Desarrollar una solución que permita ingresar 2 números a través del teclado.
Calcular la suma, resta, multiplicación y división de dichos números. Mostrar el
resultado de las operaciones.
17. Desarrollar una solución que permita ingresar 2 números a través del teclado.
Calcular la suma, resta, multiplicación y división de dichos números.
Adicionalmente, calcular la potencia de 5 y la raíz cuadrada de cada uno de los
números ingresados. Mostrar el resultado de todas las operaciones.
18. Desarrollar una solución que permita ingresar las notas de un determinado
alumno y visualizar su promedio final. El promedio final se obtiene de la
siguiente fórmula: PF = (PL + EP + EF*2)/4. Donde PL = Promedio de
Laboratorio. EP = Examen Parcial y EF = Examen Final.
19. Desarrollar una solución que permita calcular la nota final que ha obtenido un
alumno en el curso de laboratorio de Programación Avanzada. Utilizar la
siguiente fórmula: nf = (n1 + n2 + n3 + (n4 * 2)) / 5. Ingresar las notas n1, n2,
n3 y n4 a través del teclado.
20. Desarrollar una solución que permita calcular la nota final que ha obtenido un
alumno en el curso de Algoritmo y Estructura de Datos, sabiendo que se
elimina la menor nota y se duplica la mayor nota. Ingresar las notas n1, n2, n3
y n4 a través del teclado.
21. Desarrollar una solución que permita ingresar la hora de ingreso y la hora de
salida de un obrero en la empresa que labora. Calcular el tiempo que
permaneció en la empresa. Ingresar la hora y los minutos de entrada y de
salida.
22. Desarrollar una solución que permita ingresar el sueldo de un obrero. Calcular
el aumento de sueldo del obrero por concepto de escolaridad (17%). Mostrar el
sueldo a cobrar.
Pag. 575
APÉNDICE
24. Desarrollar una solución que permita ingresar una cantidad expresada en
metros, y visualizar su equivalente en pulgadas y en pies (1 metro = 39.37
pulgadas, 1 pie = 12 pulgadas).
25. Desarrollar una solución que permita convertir una cantidad expresada en
metros a sus equivalentes en centímetros, pulgadas, pies y yardas. Considerar
la siguiente información:
¾ 1 metro = 100 cm.
¾ 1 pulgada = 2.54 cm.
¾ 1 pie = 12 pulgadas.
¾ 1 yarda = 3 pies.
26. Desarrollar una solución que permita calcular y visualizar la distancia que
existe entre dos puntos dados. Cada uno de los puntos está expresado en
coordenadas y éstos deben ser ingresados por el usuario: P1(x1, y1), P2(x2,
y2). La distancia entre los dos puntos se calcula a partir de la siguiente fórmula:
Distancia = ((x1-x2) **2 + (y1-y2) ** 2) RAIZ 2.
28. Desarrollar una solución que permita ingresar 2 números enteros positivos de
dos cifras. Intercambie las unidades de los dos números.
Pag. 576
APÉNDICE
30. Desarrollar una solución que permita determinar si un número ingresado por
teclado es capicúa o no. Un número es capicúa si se lee igual de derecha a
izquierda o viceversa. (Ejemplo de número capicúa 4554).
31. Desarrollar una solución que permita invertir un número de cuatro dígitos. El
número deberá ser ingresado por teclado. (Ejemplo: se ingresa el número 3579
se debe visualizar el 9753).
32. Desarrollar una solución que permita convertir una temperatura expresada en
grados Celsius a su equivalente en grados Fahrenheit. Utilizar la siguiente
fórmula: F = (9 / 5) * C + 32.
34. Desarrollar una solución que permita ingresar una cantidad entera de dinero.
Mostrar el número de billetes de S/ 100, S/ 50, S/ 20, S/ 10, S/ 5 y S/ 1, que
existen en la cantidad de dinero ingresada..
35. Desarrollar una solución que permita realizar el cálculo del pago mensual del
sueldo de un empleado de una empresa. Dicho cálculo se realiza de la
siguientes manera: el sueldo básico se calcula en base al número total de
horas trabajadas basada en una tarifa horaria. Al sueldo básico se le aplica una
bonificación del 35% obteniéndose el sueldo bruto. Al sueldo bruto se le aplica
un descuento del 12% obteniéndose el sueldo neto. Mostrar el sueldo básico,
el sueldo bruto y el sueldo neto de un trabajador.
36. Desarrollar una solución que permita calcula el sueldo neto de un vendedor.
Dicho cálculo se realiza en base a un sueldo básico equivalente a S/ 465.00
nuevos soles, más una comisión del 18% por cada venta que el vendedor
realice. Mostrar el sueldo neto del vendedor sabiendo que hizo 5 ventas en el
mes.
Pag. 577
APÉNDICE
38. Desarrollar una solución que permita leer la capacidad de un disco duro en
Gigabytes. Mostrar el equivalente en Megabytes, Kilobytes y Bytes.
¾ 1 Kilobyte= 1024 Bytes.
¾ 1 Megabyte= 1024 Kilobytes.
¾ 1 Gigabyte= 1024 Megabytes.
39. Desarrollar una solución que permita determinar con qué velocidad inicial partió
un automóvil de un determinado punto y qué distancia, conociendo su
velocidad final, su aceleración y el tiempo empleado en el recorrido. Considerar
las siguientes fórmulas:
2
e = Vot + at
Vf = Vo + at. donde:
Vf = Velocidad final.
Vo = Velocidad Inicial.
a = Aceleración.
e = Espacio recorrido.
t = Tiempo empleado en el recorrido.
40. Desarrollar una solución que permita determinar si una persona es o no mayor
de edad. Ingresar el nombre, apellidos, código y edad de la persona.
41. Desarrollar una solución que permita calcular y mostrar el área de un cuadrado.
Si el área del cuadrado resulta menor que 768, se deberá visualizar el mensaje
“Cuadrado pequeño”.
42. Desarrollar una solución que permita determinar cómo se clasifica un ángulo
ingresado por teclado. Los ángulos se clasifican de la siguiente manera:
¾ Ángulo = 0 Nulo.
¾ 0 < ángulo > 90 Agudo.
Pag. 578
APÉNDICE
¾ Ángulo = 90 Recto.
¾ 90 < ángulo > 180 Obtuso.
¾ Ángulo = 180 Llano.
¾ 180 < ángulo > 360 Cóncavo.
¾ Ángulo = 360 Completo.
43. Desarrollar una solución que permita calcular y mostrar la nota final (nf) de un
alumno, sabiendo que se tienen sólo dos notas. Si el alumno obtiene una nota
final mayor a 17 se deberá visualizar un mensaje de felicitaciones.
44. Desarrollar una solución que permita ingresar los votos obtenidos por cada
candidato en una elección democrática. Determinar la votación promedio y
mostrar los códigos de los candidatos que obtuvieron una votación inferior a la
votación promedio. Considerar que han participado 5 candidatos cuyos códigos
son ‘A’, ‘B’, ‘C’, ‘D’ y ‘E’.
47. Desarrollar una solución que permita determinar el sueldo neto, el sueldo bruto
y el descuento de un trabajador de una empresa. La empresa paga a sus
vendedores por horas trabajadas. Hasta 40 horas trabajadas se paga una tarifa
normal y sobre las 48 horas, se paga la tarifa con un recargo del 20%. Por otro
lado, si el sueldo bruto es superior a S/.1650.00 el sueldo del trabajador está
sujeto a un descuento del 15%. Desarrollar una solución que permita
Pag. 579
APÉNDICE
48. Desarrollar una solución que permita calcular y mostrar la nota final de un
alumno. Si la nota final (nf) es menor a 13 se deberá mostrar el mensaje
“Alumno desaprobado”, caso contrario se mostrará el mensaje “Alumno
aprobado”. Fórmula: nf = (n1+n2+n3) / 3.
49. Desarrollar una solución que permita ingresar tres notas de un determinado
alumno. Mostrar las notas ordenadas en forma ascendente (de menor a
mayor).
50. Desarrollar una solución que permita que permita calcular el monto a pagar por
la compra de un producto, considerando un descuento del 27% por la compra
de 150 unidades.
51. Desarrollar una solución que permita calcular y mostrar el monto total a pagar
por la compra de varios artículos. Considerar que deberá agregar el IGV
respectivo. Si el monto total a pagar incluido IGV es mayor a S/. 1800.00
nuevos soles se aplica un descuento del 12%, caso contrario el descuento será
del 3%.
52. Desarrollar una solución que permita determinar que proveedor es más
conveniente para una empresa. La empresa desea adquirir cierta cantidad de
unidades de un producto para lo cual cuenta con una oferta de dos
proveedores, de acuerdo a lo especificado a continuación:
¾ Proveedor A: Costo unitario igual a $25.0 y 15% de
descuento para más de 50 unidades adquiridas.
¾ Proveedor B: Costo unitario igual a $27.5 y 10% de
descuento para mas de 35 unidades adquiridas.
53. Desarrollar una solución que permita determinar si un número es divisor de otro
número. Utilizar la expresión (num1 RESTO num2 > 0) donde “num1” y “num2”
son los números.
Pag. 580
APÉNDICE
54. Desarrollar una solución que permita ingresar un número entero. Mostrar si el
número ingresado es un número par o un número impar.
55. Desarrollar una solución que permita ingresar un número entero. Mostrar si el
número ingresado es un número negativo, un número par o un número múltiplo
de 7.
56. Desarrollar una solución que permita ingresar un número entero. Indicar lo
siguiente en base al número ingresado:
¾ Si el número es positivo o negativo.
¾ Si el número es par o impar.
¾ Si el número es múltiplo de 3 o no.
¾ Si el número es Menor que 500 o no.
57. Desarrollar una solución que permita determinar si un numero (num) es par,
impar o nulo. Utilizar lo siguiente: -1 elevado a la potencia del número
ingresado (-1 ** num). Mostrar un mensaje si el número es par, impar o nulo.
58. Desarrollar una solución que permita ingresar un número entre 1 y 12. Mostrar
el nombre del mes del año correspondiente. (Enero, Febrero,...etc).
Categoría Aumento
1 35 %
2 25 %
3 15 %
Pag. 581
APÉNDICE
4 5%
61. Desarrollar una solución que permita calcular y mostrar el monto total a pagar
por un sándwich, sabiendo que, adicionalmente, hay que pagar el 6% por el
servicio y 7% por propinas. Considerar que se venden 4 tipos de sándwich, de
acuerdo a la siguiente tabla.
Tipo Costo
Moderado S/. 2.00
Mediano S/. 3.00
Extra Grande S/. 4.00
Full S/. 6.00
62. Desarrollar una solución que permita calcular y mostrar el costo total que
representa un paciente para un hospital de acuerdo al tipo de enfermedad,
según los datos de la tabla. Adicionalmente, debe considerar que los pacientes
menores de 18 años implican un costo adicional de 25 %.
63. Desarrollar una solución que permita calcular y mostrar el costo total que
representa un paciente para un hospital de acuerdo al tipo de enfermedad,
según los datos de la tabla. Adicionalmente, debe considerar que las mujeres
tienen un incremento del 19% para el primer tipo de enfermedad y los hombres
tienen un aumento del 4% para el tercer tipo.
Pag. 582
APÉNDICE
3 513
64. Desarrollar una solución que permita determinar y mostrar si una persona que
está a punto de observar un programa de televisión esta apto o no. Considerar
la siguiente tabla:
Edad Categoría
18 -más Contenido para adultos.
11 -17 Mayores de 14.
0 –10 Apta para todos.
65. Desarrollar una solución que permita calcular y mostrar el costo total que
representa un paciente para un hospital de acuerdo al tipo de enfermedad,
según los datos de la tabla. Adicionalmente, debe considerar que los pacientes
de sexo femenino menores de 14 años implican un costo adicional de 8%.
66. Desarrollar una solución que permita ingresar las notas obtenidas por un
alumno del curso de Matemática Básica III. Calcular su nota final (nf), de
acuerdo a la fórmula empleada por su profesor, según los datos de la tabla.
Mostrar la nota final (nf) del alumno y si está aprobado o no, considerando que
la nota mínima aprobatoria es 12 (doce).
Pag. 583
APÉNDICE
68. Desarrollar una solución que permita determinar la categoría de cada alumno.
Considerar que la categorización de los alumnos se realiza en función de la
nota en base a la siguiente tabla:
Promedio Categoría
18 – 20 Excelente
15 – 17 Bueno
11 – 14 Regular
00 – 10 Malo
69. Desarrollar una solución que permita ingresar las ‘n’ notas de un alumno.
Calcular el promedio del alumno sabiendo que se elimina la nota mas baja.
Finalmente, determinar la categoría obtenida por un alumno, considerando que
la categoría del alumno está en función de su promedio, tal y como se muestra
en la siguiente tabla:
Promedio Categoría
Desde 17 a 20 A
Desde 14 a 16 B
Desde 10 a 13 C
Desde cero a 9 D
Pag. 584
APÉNDICE
72. Desarrollar una solución que permita ingresar el nombre del alumno, el tipo de
participante (profesor, alumno, externo) y el nivel del curso (básico, intermedio,
avanzado). En la tabla que se muestra a continuación se detallan los costos de
los cursos:
Mostrar los datos del recibo, tal y como se muestra en el siguiente ejemplo:
Pag. 585
APÉNDICE
Condición Aumento
Sueldo < 2000 23 %
2000 < =Sueldo < =3000 17 %
Sueldo > 3000 12 %
74. Desarrollar una solución que permita ingresar la temperatura promedio (tp) de
un día y permita mostrar el tipo de clima de acuerdo a la siguiente tabla:
75. Desarrollar una solución que permita ingresar una fecha en el siguiente
formato: (dd/mm/aaaa). Calcular el número de días que tiene el mes y si el año
ingresado es bisiesto o no.
76. Desarrollar una solución que permita ingresar una fecha (dd/mm/aaaaa) y la
convierta al siguiente formato de fecha: “dd de NombreMes de aaaa”. Ejemplo:
Ingreso 12/05/2005. Se deberá mostrar: 12 de Mayo del 2005.
77. Desarrollar una solución que permita ingresar un número de 2 cifras. Mostrar el
equivalente del número ingresado en letras.
78. Desarrollar una solución que permita ingresar un número de 3 cifras. Mostrar el
equivalente del número ingresado en letras.
79. Desarrollar una solución que permita calcular el factorial de un número entero
positivo.
Pag. 586
APÉNDICE
80. Desarrollar una solución que permita ingresar tres números enteros. Mostrar el
número mayor.
82. Desarrollar una solución que permita determinar cuáles son los términos de
una progresión aritmética. Solicitar el valor del primer término, el valor de la
razón y el número de términos.
83. Desarrollar una solución que permita determinar cuales son los términos de
una progresión aritmética y la suma de los mismos. Solicitar el valor del primer
término, el valor de la razón y el número de términos.
84. Desarrollar una solución que permita determinar cuales son los términos de
una progresión geométrica y la suma de los mismos. Solicitar el valor del
primer término, el valor de la razón y el número de términos.
85. Desarrollar una solución que permita determinar y mostrar la suma de los
términos de la siguiente serie:
2 2 2 2
1 + 1/3 + 1/5 + 1/7 + 1/9 +...
86. Desarrollar una solución que permita determinar los 3 primeros números
perfectos.
87. Desarrollar una solución que permita determinar la suma de todos los números
cuadrados perfectos existentes entre los 1000 primeros números.
88. Desarrollar una solución que permita calcular la cantidad de dígitos, la suma de
dígitos y la cantidad de dígitos pares e impares de un número entero.
Pag. 587
APÉNDICE
89. Desarrollar una solución que permita calcular y mostrar el producto de los
números pares comprendidos entre los números 20 y 400.
90. Desarrollar una solución que permita calcular y mostrar la suma de los
números pares y la suma de los números impares comprendidos entre los
números 1 y 100 (no incluir los números 1 y 100).
92. Desarrollar una solución que permita ingresar 100 números. Calcular y mostrar
la suma de los números pares, la suma de los números impares y la media de
todos los número ingresados.
93. Desarrollar una solución que permita ingresar un número entero. Determinar y
mostrar si el número ingresado es un número primo o no.
94. Desarrollar una solución que permita ingresar 50 números. Determinar la suma
de todos los números impares y la cantidad de números primos ingresados.
96. Desarrollar un programa que genere cada uno de los siguientes gráficos:
* * * * * * * * * * *
* * * * * * * * * *
* * * * * * * * *
* * * * * * * *
* * * * * * *
97. Desarrollar un programa que genere cada uno de los siguientes gráficos:
Pag. 588
APÉNDICE
* - * - * - * - * * * * * * * * * * *
* - * - * - * * * * * * * * * * *
* - * - * * * * * * * * * * *
* - * * * * * * * * * * *
* * * * * * * * * * *
1
2 3
4 5 6
7 8 9 1
2 3 4 5 6
7 8 9 1
2 3 4
5 6
7
99. Desarrollar un programa que permita leer una cadena. Mostrar la cadena
ingresada en forma triangular. Tal y como se muestra a continuación: Ejemplo;
Se ingresa la cadena “Danae”.
D
DA
DAN
DANA
DANAE
100. Desarrollar un programa que permita leer una cadena. Mostrar la cadena
ingresada en forma triangular. Tal y como se muestra a continuación:
Ejemplo; Se ingresa la cadena “Danae”.
DANAE
DANA
DAN
Pag. 589
APÉNDICE
DA
D
101. Desarrollar una solución que permita invertir un número cualquiera. El número
deberá ser ingresado por teclado.
102. Desarrollar una solución que permita ingresar un texto y permita determinar lo
siguiente:
¾ La cantidad de vocales.
¾ La cantidad de consonantes.
¾ La cantidad de espacios en blanco.
¾ La cantidad de símbolos.
103. Desarrollar una solución que permita calcular y mostrar la nota final de 10
alumno. Utilizar la siguiente fórmula: nf = (n1+n2+n3+(n4*2))/5. Ingresar las
notas a través del teclado.
104. Desarrollar una solución que permita ingresar las edades de 10 alumnos.
Calcular y mostrar lo siguiente:
¾ Suma de todas la edades.
¾ Promedio de edades.
¾ Promedio de edades pares.
¾ Edad máxima.
¾ Edad mínima.
105. Desarrollar una solución que permita calcular la nota final de todos los
alumnos. Utilizar la siguiente fórmula: nf = (n1 + n2 + n3 + (n4 * 2)) / 5.
Ingresar las notas a través del teclado. Se deberá utilizar la estructura lógica
MIENTRAS.
106. Desarrollar una solución que permita calcular la nota final de todos los
alumnos. Utilizar la siguiente fórmula: nf = (n1 + n2 + n3 + (n4 * 2)) / 5.
Pag. 590
APÉNDICE
Ingrese las notas a través del teclado. Se deberá utilizar la estructura lógica
HACER.
108. Desarrollar una solución para el siguiente problema. Se tiene una relación de
100 obreros y su sueldo. Determinar cuántos ganan menos de S/. 800.00,
entre S/. 800.00 y S/. 3,000.00 (Incluidos S/. 800.00 y S/. 3,000.00), y cuántos
más de S/.3,000.00.
109. Desarrollar una solución que permita determinar la suma de sueldos de los
obreros (categoría C), la suma de sueldos de los empleados (categoría B) y la
suma de sueldos de los gerentes (categoría A) de una determinada empresa.
Adicionalmente, determinar cuál es el mayor y el menor sueldo en la
empresa.
110. Desarrollar una solución para el siguiente problema. Se desea hacer una
estadística de las estaturas de los 1000 alumnos de un colegio, de acuerdo a
lo siguiente:
¾ Alturas hasta 1,60 metros.
¾ Alturas entre 1,60 metros y 1,70 metros.
¾ Alturas entre 1,70 metros y 1,80 metros.
¾ Alturas mayores de 1,80 metros.
111. Calcular y mostrar el número de alumnos que tienen promedio final menos de
11; los que tiene promedio final entre 11 y 14; aquellos que tienen promedio
final entre 15 y 17; y los que tienen promedio final mayor de 17. Ingresar 4
notas y calcular el promedio del alumno en base a la siguiente fórmula: nf =
(n1 + n2 + n3 + (n4 * 2)) / 5.
Pag. 591
APÉNDICE
112. Calcular la nota media de los alumnos de una clase considerando “n”
alumnos y “c” notas.
114. En una empresa se decide hacer una colecta de dinero con la finalidad de
ayudar a uno de los empleados de la empresa que ha sufrido un accidente
automovilístico. Se determina que los gerentes contribuirán con S/ 35.00
soles, los profesionales con S/ 25.00 soles y el resto de empleados de
acuerdo a sus posibilidades. Determinar el total recaudado.
116. Desarrollar una solución que permita desarrollar el siguiente menú con las
opciones solicitadas.
¾ [1] Ingreso de datos (base y altura de un rectángulo).
¾ [2] Proceso (determinar área y perímetro del rectángulo).
¾ [3] Resultado (Mostrar el valor de área y perímetro obtenidos).
¾ [4] Terminar.
117. Desarrollar una solución para el siguiente problema. Los empleados de una
fábrica trabajan en tres turnos; mañana, tarde y noche. Se desea calcular el
jornal diario de cada empleado teniendo en cuenta lo siguiente:
Pag. 592
APÉNDICE
Pag. 593
APÉNDICE
120. Desarrollar una solución que permita ingresar los nombres y las edades de ‘n’
alumnos. Determinar la suma de las edades, el nombre del alumno con la
mayor nota y el nombre del alumno con la menor nota.
121. Desarrollar una solución que permita determinar la nota final obtenida por
cada uno de los alumnos del curso de Álgebra del colegio “La Excelencia”
(considere 3 notas). Adicionalmente, deberá indicar el porcentaje de alumnos
aprobados, desaprobados, la nota final más baja y más alta. Ingresar la
cantidad de alumnos y las 3 notas de cada alumno.
122. Desarrollar una solución que permita determinar el costo de cada uno de los
artículos que se venden en la bodega “La China” (considere el precio de
venta y la utilidad obtenida por el artículo). Adicionalmente, deberá indicar el
promedio del costo de todos los artículos, el articulo más caro y el más
barato. Ingresar el nombre, el precio de venta y la utilidad de cada artículo.
124. Desarrollar una solución que permita calcular y mostrar el costo total que
representan los pacientes de un hospital de acuerdo al tipo de enfermedad,
según los datos de la tabla. Adicionalmente, deberá considerar que los
pacientes menores de 18 años implican un costo adicional de 35% y las
mujeres un costo adicional de 12%.
Pag. 594
APÉNDICE
4 450
125. Desarrollar una solución para el siguiente problema. El cine “Pantalla Láser”
cuenta con 3 salas y atiende en horarios de matinée, vermouth y noche.
Calcular el número de personas que ingresaron a cada una de las salas en
cada uno de los horarios en un determinado día. (Ingresar solo los siguientes
datos: Número de sala y el horario al cuál el cliente ingresa).
126. Desarrollar una solución para el siguiente problema. Una empresa cuenta con
cuatro almacenes de productos. ¿Cuál sería la ganancia por cada almacén si
el dueño de la empresa decide vender todos sus productos? (Ingresar solo
los siguientes datos: El precio de compra de cada producto, su precio de
venta, la cantidad existente y el almacén donde están ubicados).
128. Desarrollar una solución que permita determinar cuántos tipos de productos
de cada empresa de apoyo social fueron vendidos por la comunidad “La
buena Venta” durante el presente año (considere solo tres empresas de
apoyo social y asuma que cada empresa fabrica 3 tipos de producto:
chocolate, caramelo y gaseosa). Ingresar el producto vendido y la empresa
que lo fabricó.
129. Desarrollar una solución que permita determinar cuántos tipos de periódicos
de cada empresa fue vendido por José Luis Candado, quien ganó el premio al
mejor canillita 1999 otorgado por un diario de la capital, (considere solo tres
empresas periodísticas, y asuma que cada empresa desarrolla 3 tipos de
diario: popular, normal y especializado). Ingresar el tipo de diario vendido y la
empresa a la cuál pertenece.
Pag. 595
APÉNDICE
130. Desarrollar una solución que permita mostrar un menú con las siguientes
opciones:
¾ Determinar si un número es par o impar.
¾ Determinar si un número es primo o no.
¾ Salida.
131. Desarrollar una solución que permita mostrar un menú con las siguientes
opciones:
¾ Suma, resta y multiplicación de dos números.
¾ Determinar el número inverso de un número.
¾ Determinar el área y perímetro de un círculo.
¾ Salida.
132. Desarrollar una solución que permita ingresar las edades de 10 alumnos.
Determinar lo siguiente:
¾ La suma de todas las edades.
¾ La cantidad de edades impares.
¾ El promedio de edades.
¾ El promedio de edades pares.
¾ La edad mayor.
¾ La edad menor.
¾ El nombre de la alumna que tiene la mayor edad.
133. Desarrollar una solución que permita ingresar los nombres y sueldos de 5
empleados. Determinar lo siguiente:
¾ Sueldo promedio.
¾ Menor sueldo.
¾ Nombre del empleado con mayor sueldo.
¾ Cantidad de nombre que comiencen entre “c y p”.
134. Desarrollar una solución que permita ingresar los valores de una matriz de
4*4. Calcular la suma de la diagonal y la suma de la diagonal inversa.
Pag. 596
APÉNDICE
135. Desarrollar una solución que permita ingresar los valores de una matriz de
5*4. Intercambiar la primera columna por la tercera columna, así como
también intercambiar la segunda fila por la cuarta fila.
137. Desarrollar una solución que permita ingresar un número entero de cualquier
número de cifras. Determinar y mostrar el digito mayor del número ingresado.
Validar el número ingresado.
139. Desarrollar una solución que permita leer 10 apellidos. Determinar cuál es el
apellido mayor (alfabéticamente hablando).
140. Desarrollar una solución que permita leer 10 nombres. Determinar cuantos
nombres comienzan entre las letras ‘z’ y ‘p’. Utilizar un vector.
141. Desarrollar una solución que reciba la fecha con el siguiente formato: 09-30-
2004 (mm-dd-aaaa) y lo convierta a este otro formato: 30 de Septiembre del
2004.
142. Desarrollar una solución que reciba la fecha y hora con el siguiente formato:
“dd/mm/aaaa hh:mm:ss”. Ejemplo; 30/09/2004 18:10:10. Validar que la fecha
y la hora tenga el número de caracteres correctos, así como los símbolos
indicados. Mostrar los datos de la siguiente manera: Hoy es 30 de septiembre
y son las 18 y 10 de la tarde.
Pag. 597
APÉNDICE
143. Desarrollar una solución que permita leer 4 números de 3 cifras. Mostrar su
categoría. Si el número está entre 100 y 300 pertenece a la categoría A. Si el
número está entre 301 y 600 pertenece a la categoría B, y si el número está
entre 601 y 999 pertenece a la categoría C. Utilizar un vector y validar que el
número ingresado sea de 3 cifras.
144. Desarrollar una solución que permita leer los datos de ‘n’ alumnos. Los datos
de los alumnos son; nombre, fecha de nacimiento (dd/mm/aaaa) y nota.
Se solicita:
¾ Ingresar los datos haciendo las validaciones a la fecha (tamaño
de fecha y que contenga los símbolos “/”) y nota.
¾ Calcular y mostrar la edad de cada alumno .
¾ Hallar:
¾ Hallar la nota promedio de todos los alumnos ingresados.
¾ Nombre del alumno con mayor nota.
¾ Cantidad de alumnos cuyo nombre comience entre a y p.
¾ Crear un menú de opciones para acceder al programa.
145. Desarrollar una solución que permita leer los datos de 5 empleados. Los
datos de los empleados son; nombre, fecha de ingreso (dd/mm/aaaa) y
sueldo.
Se solicita:
¾ Ingresar los datos haciendo las validaciones a la fecha (tamaño
de fecha y que contenga los símbolos “/”) y sueldo.
¾ Calcular los años de servicio (que tiene trabajando).
¾ Hallar:
¾ Hallar el sueldo promedio.
¾ Nombre del empleado con menos años de servicio.
¾ Cantidad de empleado que ingresaron entre 1980 y 2004.
¾ Crear un menú de opciones para acceder al programa.
146. Desarrollar una solución que permita leer los datos de 5 alumnos. Los datos
de los alumnos son; nombre, tipo (Ingresantes, Regular o Egresado) y nota.
Pag. 598
APÉNDICE
Se solicita:
¾ Ingresar los datos haciendo las validaciones al tipo y nota.
¾ Por cada alumno mostrar la categoría:
¾ Si es ingresante y tiene entre 17-20 categoría IA.
¾ Si es ingresante y tiene entre 12-16 categoría IB.
¾ Si es regular y tiene entre 17-20 categoría RA.
¾ Si es egresado y tiene entre 17-20 categoría EA.
¾ Por cada alumno mostrar:
¾ Nombre en Mayúscula.
¾ Los 3 primeros caracteres del nombre.
¾ Cálculos:
¾ Hallar el promedio de los ingresantes y regulares.
¾ Nombre del alumno con mayor nota.
¾ Mayor nota de los ingresantes y de los Egresados.
¾ Crear una opción para continuar ejecutando el programa.
147. Desarrollar una solución que permita leer los datos de ‘n’ alumnos. Los datos
de los alumnos son; nombre, edad y sexo.
Se solicita:
¾ Ingresar los datos validando que en el sexo y la edad.
¾ Por cada alumno mostrar:
¾ Nombre al revés.
¾ Ultimo carácter.
¾ Las 3 ultima letras.
¾ Cálculos:
¾ Hallar la edad promedio.
¾ Nombre de la persona con mayor edad.
¾ Nombre de mujer con menos edad.
¾ Crear un menú para acceder al programa.
148. Desarrollar una solución que permita leer los datos de ‘n’ alumnos. Los datos
de los alumnos son; nombre, fecha de nacimiento (dd/mm/aaaa) y nota.
Pag. 599
APÉNDICE
Se solicita:
¾ Ingresar los datos validando la fecha de nacimiento y la nota.
¾ Mostrar por cada alumno la edad exacta (años y meses
cumplidos a la fecha de hoy).
¾ Cálculos:
¾ Hallar la edad promedio.
¾ Nombre y la edad de la persona con mayor nota.
¾ Nombre de mujer con menos edad.
¾ Crear un menú de opciones para acceder al programa.
149. Desarrollar una solución que permita leer los datos de ‘n’ empleados. Los
datos de los empleados son; nombre, AFP (Integra, Unión y ProFuturo),
sueldo Básico y fecha de ingreso (dd-mm-aaaa).
Se solicita:
¾ Ingresar los datos validando AFP, sueldo y fecha de ingreso.
¾ Calcular y mostrar el sueldo Total por cada empleado ( sueldo
Total = sueldo Básico – descuentos):
¾ Si tiene 4 o más años de antigüedad se le descuenta 8%
más el descuento de la AFP.
¾ Si tiene menos de 4 años se le descuenta 10% más el
descuento de la AFP.
¾ El descuento de la AFP se ve en la siguiente tabla:
AFP Descuento
Integra 12%
Unión 13%
ProFuturo 14%
¾ Cálculos:
¾ Mostrar el nombre y el AFP de la persona con mayor
sueldo.
¾ Mostrar el nombre de la persona más nueva es decir con
menos años de ingreso.
¾ Crear un menú de opciones para acceder al programa.
Pag. 600
APÉNDICE
150. Desarrollar una solución que permita leer los datos de ‘n’ alumnos. Los datos
de los alumnos son; sexo (M/F), edad y nombre.
Se solicita:
¾ Ingresar los datos validando que en el sexo solo se ingrese ‘M’ o
‘F’, y la edad sea un número positivo.
¾ Mostrar lo siguiente por cada alumno:
¾ Si es mayor o menor de edad.
¾ Cantidad de vocales del nombre.
¾ Cálculos:
¾ Hallar la edad promedio.
¾ Nombre de la persona con mayor edad.
¾ Nombre de hombre con menos edad.
¾ Crear un menú de opciones para acceder al programa.
Pag. 601
APÉNDICE
Pag. 602
APÉNDICE
Clase Lectura
package biblioteca;
import java.io.*;
/*
* Clase que permite capturar literales desde el teclado.
*
*/
/**
* Retorna el char capturado desde el teclado.
*/
public static char leerChar() {
char c = ' ';
char[] c1 = leerString().toCharArray();
if (c1.length == 1)
c = c1[0];
return c;
}
/**
* Retorna un literal double capturado desde el teclado.
*/
public static double leerDouble() {
try {
return Double.valueOf(leerString()).doubleValue();
} catch (NumberFormatException e) {
System.out.print("ERROR...\n Ingrese de nuevo: ");
return leerDouble();
}
}
/**
* Retorna un literal float capturado desde el teclado.
*/
public static float leerFloat() {
try {
return Float.valueOf(leerString()).floatValue();
} catch (NumberFormatException e) {
System.out.print("ERROR...\n Ingrese de nuevo: ");
return leerFloat();
}
}
Pag. 603
APÉNDICE
/**
* Retorna un literal int capturado desde el teclado.
*/
public static int leerInt() {
try {
return Integer.parseInt(leerString());
} catch (NumberFormatException e) {
System.out.print("ERROR...\n Ingrese de nuevo: ");
return leerInt();
}
}
/**
* Retorna un literal long capturado desde el teclado.
*/
public static long leerLong() {
try {
return Long.valueOf(leerString()).longValue();
} catch (NumberFormatException e) {
System.out.print("ERROR...\n Ingrese de nuevo: ");
return leerLong();
}
}
/**
* Retorna un literal short capturado desde el teclado.
*/
public static short leerShort() {
try {
return Short.valueOf(leerString()).shortValue();
} catch (NumberFormatException e) {
System.out.print("ERROR...\n Ingrese de nuevo: ");
return leerShort();
}
}
/**
* Retorna una cadena capturada desde el teclado.
*/
public static String leerString() {
BufferedReader in = new
BufferedReader(new InputStreamReader(System.in));
String cadena = "";
try {
cadena = in.readLine();
} catch (IOException e) {
System.out.println(e);
}
return cadena;
}
}
Pag. 604
APÉNDICE
Clase DecimalFormat
java.lang.Object
java.text.Format
java.text.NumberFormat
java.text.DecimalFormat
NumberFormat formato ;
DecimalFormat df ;
Pag. 605
APÉNDICE
formato = NumberFormat.getNumberInstance(currentLocale);
formato = NumberFormat.getCurrencyInstance(currentLocale);
Esta clase permite controlar los ceros iniciales y finales, los sufijos y prefijos, separadores
(millares), y el separador decimal. Si se quiere cambiar un símbolo del formateo como el
separador decimal, se puede utilizar DecimalFormatSymbols en conjunción con la clase
DecimalFormat
Ejemplo:
Pag. 606
APÉNDICE
En el ejemplo siguiente usaremos distintos cadenas de texto para dar formato a un número
ingresado por teclado. Debemos tener en cuenta que:
• Para poner completar con ceros la parte decimal debemos poner tantos “0” como
dígitos decimales queremos que tenga nuestro número en la cadena de formato.
• Si queremos que un número que no tiene parte decimal muestre un ‘0’antes del
separador decimal debemos poner un ‘0’ en esa posición en nuestra cadena de
formato.
Pag. 607
APÉNDICE
Pag. 608
APÉNDICE
Clase Calendar
java.lang.Object
java.util.Calendar
Calendar es una clase base abstracta para conversiones entre un objeto Date y una gama de
enteros como YEAR(año), MONTH(mes), DAY(día), HOUR(hora), y así sucesivamente.
Subclases de la clase calendario interpretan una fecha de acuerdo con las reglas específicas
de un calendario determinado. Esta plataforma implementa una subclase concreta:
GregorianCalendar. Futuras subclases podrían representar los diferentes tipos de calendarios
lunares en muchos sitios del mundo.
Para inicializar un objeto Calendar con los valores de fecha y horas actuales utilizaremos el
método getInstance( ):
set()
// cambiamos los campos YEAR, MONTH y DATE del calendario cal
// a los valores dados en año, mes y día.
cal.set (año, mes, día) ;
Pag. 609
APÉNDICE
add()
// agrega cambio al campo f. Esto es equivalente a hacer set (f, get(f) + cambio)
// agrega cambio al valor del campo campo del calendario cal
cal.add(cal.MONTH, 1) //aumenta el mes actual en 1
roll()
// roll (f, cambio) agrega cambio al campo f sin variar campos superiores, esto es,
// si aumentamos por ejemplo 40 minutos a la hora 3:30, la nueva hora sería 3:10 a
// diferencia del método add ( ) que nos daría 4:10..
cal.roll(cal.HOUR, 40)
// si la hora actual fuera 3:30, la nueva hora sería 3:10 a diferencia del
// método add ( ) que nos daría 4:10.
Sumario de campos
static int AM
Constante que representa el campo AM
static int AM_PM
Constante que representa el campo AM_PM
static int DATE
Constante que representa la fecha del calendario actual (día)
static int DAY_OF_MONTH
Constante que representa el campo Día del mes
static int DAY_OF_WEEK
Constante que representa el campo Día de la semana
static int DAY_OF_WEEK_IN_MONTH
Constante que representa el campo Día del mes
static int DAY_OF_YEAR
Constante que representa el campo Día del año
static int ERA
Constante que representa el campo AC/DC
static int FIELD_COUNT
Indica el número de campos que pueden ser usados por la instrucción get o
set
static int HOUR
Constante que representa el campo hora
Pag. 610
APÉNDICE
Estas constantes nos sirven para especificar en los métodos, que se detallan a continuación,
cuales son los campos que queremos manipular, por ejemplo, si queremos agregar un minuto
al calendario actual debemos utilizar el método add, este método tiene como parámetros:
Entonces para agregar un minuto debemos especificarle al método que queremos manipular
el campo minuto y la cantidad que queremos agregar al valor almacenado en este campo
(supongamos ya definido un Calendar cal):
cal.add (cal.MINUTE,1) ;
Pag. 611
APÉNDICE
Sumario de métodos
abstract void add(int Campo, int Cantidad)
Date Arithmetic function.
boolean after(Object cuando)
Compara los tiempos, si la fecha actual de nuestro calendario es
superior a cuando, retorna verdadero
boolean before(Object cuando)
Compara los tiempos,, si la fecha actual de nuestro calendario es
inferior a cuando, retorna verdadero
void clear()
limpia los valores de todos los campos del calendario
void clear(int campo)
Limpia el valor del campo indicado
boolean equals(Object objeto)
Compara este calendario con el objeto dado, y si son iguales retorna
verdadero.
int get(int campo)
Obtiene el valor almacenado en el campo dado.
int getActualMaximum(int campo)
Retorna el valor máximo que puede obtener este campo con la fecha
del calendario actual. Por ejemplo, si campo=Calendar.DAY_OF_MONTH y
el mes actual es Abril, entonces el valor retornado será 30 (el máximo valor
int getActualMinimum(int campo)
Retorna el valor mínimo que puede obtener este campo con la fecha
del calendario actual.
int getFirstDayOfWeek()
Obtiene el primer día de la semana. Por ejemplo SUNDAY (0)
static Calendar getInstance()
Obtiene un calendario utilizando la zona actual y las reglas dadas
static Calendar getInstance(TimeZone zona)
Obtiene un calendario utilizando zona y las reglas dadas
Date getTime()
Obtiene la hora actual del calendario.
long getTimeInMillis()
Obtiene la hora actual del calendario en milisegundos
TimeZone getTimeZone()
Obtiene la zona horaria.
Pag. 612
APÉNDICE
Pag. 613
APÉNDICE
Ejemplo:
Pag. 614
APÉNDICE
Pag. 615
APÉNDICE
Pag. 616
APÉNDICE
Clase GregorianCalendar
java.lang.Object
java.util.Calendar
java.util.GregorianCalendar
Pag. 617
APÉNDICE
noviembre (30) y diciembre (31); y de una semana de siete días: lunes, martes, miércoles,
jueves, viernes, sábado y domingo; que es independiente del mes. Para el cómputo
eclesiástico el primer día de la semana es el domingo. Los días del mes se numeran
correlativamente.
El Calendario gregoriano Standard tiene 2 eras: AC y DC.
Realmente para trabajar con fechas en Java que puedan encontrarse entre ambos
calendarios lo recomendable es rescribir todo el proceso y operaciones necesarias a mano,
pero si las fechas van a estar dentro del calendario gregoriano, lo mejor es usar la clase
GregorianCalendar que trae un buen montón de métodos para operar con fechas en Java.
Ejemplo:
Pag. 618
APÉNDICE
Pag. 619
APÉNDICE
Pag. 620
APÉNDICE
Clase SimpleDateFormat
java.lang.Object
java.text.Format
java.text.DateFormat
Esta clase se utiliza para presentar las fechas como cadenas de texto con formato de acuerdo
a un patrón establecido.
Los patrones que se utilizan son:
Pag. 621
APÉNDICE
Pag. 622
Pag. 623
Pag. 624
BIBLIOGRAFÍA
Metodología de la Programación.
Algoritmos, Diagrama de flujo y programas
2da Edición - 2003. Osvaldo Cairó Battistutti.
Pag. 625
Pag. 626
NOTAS FINALES
jflores@usmp.edu.pe
Pag. 627
Pag. 628