106856901-Metodo-de-las-6D-UML-PSEUDOCODIGO-JAVA-Enfoque-algortimico.pdf



Comments



Description

MÉTODO DE LAS 6’DUML – Pseudocódigo – Java (Enfoque algorítmico) UNIVERSIDAD DE S AN M ARTIN DE PORRES Facultad de Ingeniería y Arquitectura MÉTODO DE LAS 6’D UML – Pseudocódigo - Java (Enfoque algorítmico) Ing. Juan José Flores Cueto. - 2005 - A mi madre adorada, por siempre. “Lo que escucho, lo olvido. Lo que veo, lo recuerdo. Pero lo que hago, lo entiendo” Confucio. “Fallar no te convierte en un fracaso, aceptar el fracaso y no querer volver a intentarlo, si lo hace” Richard Exley. AGRADECIMIENTOS Es importante destacar la participación de mis alumnos del curso de Algoritmo y Estructura de Datos, integrantes del equipo de trabajo, formado para el desarrollo del presente libro. Este libro no se hubiera terminado en tan corto tiempo, con la calidad y cantidad de problemas desarrollados, sino hubiera sido por su valiosa colaboración y aporte. A todos ellos, mi agradecimiento y mis sinceras felicitaciones por el trabajo realizado. Equipo de trabajo: • Isabel Rojas Vidal. • Jorge Condezo Guerra. • Roberto Pérez Huamaní. • Ricky Vilcachagua Mosquera. • Shugeily Pérez Campos. • Boris Ortega Lescano. Un agradecimiento especial a Isabel y a Jorge por participar desde el inicio hasta el final del proyecto, por todo el tiempo y esfuerzo dedicado. Gracias Jorge por verificar todos los programas desarrollados en Java. 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. Finalmente, mi sincero agradecimiento a las autoridades de la Facultad de Ingeniería y Arquitectura (FIA) de la Universidad de San Martín de Porres (USMP), en especial al Ing. Raúl Bao García, Decano de la FIA, por todo el apoyo brindado durante el desarrollo del presente libro. ÍNDICE PRESENTACIÓN. INDICE. PROLOGO. PREFACIO. CAPÍTULO I: Método de las 6’D. Un enfoque algorítmico. 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 CAPÍTULO II: Estructuras fundamentales para la solución de problemas. 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 CAPÍTULO III: Clases básicas incorporadas en el lenguaje Java. Introducción ........................................................................................................ 259 El paquete del lenguaje Java: java.lang ............................................................. 263 Envoltorios de tipos de datos primitivos: wrappers. Introducción ........................................................................................... 267 Métodos ................................................................................................. 269 Problemas resueltos del 61 al 64 ........................................................... 278 Funciones matemáticas: Clase Math. Introducción ........................................................................................... 281 Métodos ................................................................................................. 282 Problemas resueltos del 65 al 99 ........................................................... 287 Manejo de cadenas: Clase String. Introducción ........................................................................................... 339 Métodos ................................................................................................. 340 Problemas resueltos del 100 al 130 ....................................................... 345 Otras clases en Java. Problema resuelto 131 ........................................................................... 397 CAPÍTULO IV: Estructuras de datos arreglos. Introducción ........................................................................................................ 401 Estructuras de datos: Arreglos. Definición ............................................................................................... 403 Tipos ...................................................................................................... 403 Ventajas y desventajas .......................................................................... 404 Representación gráfica .......................................................................... 406 Declaración, creación e inicialización de arreglos ….............................. 408 Ingreso de datos a un arreglo ................................................................ 412 Manejo de datos de un arreglo .............................................................. 414 Desarrollo de soluciones básicas utilizando arreglos. Introducción ........................................................................................... 416 Formalización de la solución utilizando el método de las 6’D ................ 425 Problemas resueltos del 132 al 145 ....................................................... 425 Desarrollo de soluciones utilizando múltiples arreglos. Arreglos paralelos .................................................................................. 493 Problemas resueltos del 146 al 150 ....................................................... 495 ...........................................CAPÍTULO V: Introducción al Desarrollo de Soluciones Orientadas a Objetos.................................. 603 Otras clases Java................................. 550 Método constructor ………………………………………………..................................................................................... 534 Atributo …………………............ Problemas propuestos …………………………………………………….............. Introducción ............................................................... 559 Método de las 6’D.......... SimpleDateFormat ................................. 625 ................................................... 544 Métodos que devuelven valor y no reciben parámetros …........................ 547 Métodos que no devuelven valor y reciben parámetros ……......................................... 561 Problema resuelto 151 ........ GregorianCalendar......... 605 BIBLIOGRAFÍA .......................... DecimalFormat... 532 Objeto ……....... 527 Conceptos básicos....................................... Clase ……..................................................................................... 563 Otros conceptos ……………………………………………………………………… 569 APÉNDICE............................................. 542 Métodos que no devuelven valor y no reciben parámetros ............................................................................... Calendar............... Etapas y pasos ………….................. 535 Método …………………....................... 573 Clase Lectura ........... 554 Ocultar atributos de instancia ……………………………………………… 556 Ingreso de datos a través del teclado …………………………………….. . Se tuvo en cuenta primordialmente al usuario y por ello. reflejada en la aparición de nuevos paradigmas que deben aplicarse rápidamente. 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. lo que hace que estos seis pasos se puedan recordar fácilmente. 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. pero cuya difusión en los textos no tiene la misma celeridad. El rápido avance de la ciencia y de la tecnología. nuestro autor sabía ya cuáles eran las nuevas tendencias que se perfilaban. Flores Cueto: Método para la solución de Problemas utilizando la Programación Orientada a Objetos y. Este novedoso método está conformado por seis etapas y cada una de ellas tiene una denominación que comienza con la letra D. su desempeño profesional y la constante necesidad de estar actualizado. El panorama de la ingeniería de computación y sistemas evoluciona y cambia mientras trabajamos en ella. que la ópera prima de Juan José contenía. problemas y aplicaciones que contiene. acumulaba información y escribía sobre ellas. Escasamente un año atrás la Facultad de Ingeniería y Arquitectura de la USMP publicó el primer libro de J. El mercado exige que los profesionales de Computación y Sistemas conozcan la últimas técnicas de programación e ingeniería de software y este libro responde a esas demandas introduciendo al estudiante en los conceptos de programación estructurada y en el dominio de la programación orientada a objetos. ¿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. como consecuencia. pues. al momento de aparecer su primer libro. las características más importantes del texto se reflejan en su fácil lectura y en su orientación al estudiante. A mi juicio. (Un enfoque algorítmico). poniendo énfasis en la solución de problemas y empleando a fondo las capacidades lógicas para el desarrollo de soluciones utilizando una computadora. entonces. profundizando en el método de las 6 D’s para presentarnos en tan corto plazo una nueva obra. ya el embrión de la segunda y de aquí. resulta estimulante para un espíritu como el de este prolífico docente de la USMP. que para muchos es agobiante. Comprobamos así. he reparado en lo difícil que resulta agregar valor al ya presentado por su contenido.PRÓLOGO 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. 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. el título del libro que hoy motiva estas líneas: Método de las 6’D: UML – Pseudocódigo – Java. pero mejor aun: en el hecho de haber sido probado . el método es llamado ahora método de las 6 D’s. Al reflexionar sobre la tarea que representa escribir un prólogo para este libro. J. acertadamente. . por la amistad que me une a Juan José. José Antonio Chang Escobedo. 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.con los alumnos. Por lo arriba expresado y. una buena documentación y la planificación de soluciones por algoritmos. comprobando su progreso y teniendo en cuenta la definición del problema. RECTOR USMP. Ing. agrupados en seis etapas (Descripción del problema. dependiendo de la forma de solucionar los problemas. diseño de la solución. a través del cual se definen los pasos que se tienen que desarrollar para la solución de un problema utilizando una computadora. la conversión de datos y la forma cómo son utilizados por las herramientas tratadas en el capítulo anterior. hasta la codificación y prueba de la misma utilizando herramientas y lenguajes de programació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). y sobre la programación utilizando el lenguaje de programación orientado a objetos Java. Capítulo II: Se desarrolla la estructura de datos más simple: la variable. Capítulo I: Se desarrolla la parte teórico formal del método de las 6’D. Definición de la solución. En este libro se utiliza y se profundiza en el Método de las 6’D. y se complementa con el estudio de los tipos básicos de datos. necesarios para el desarrollo de soluciones utilizando el Método de las 6’D y el desarrollo de sus capacidades lógicas. Se describen sus etapas. Es importante mencionar que. sobre Algoritmos y las herramientas de diseño conocidas como Diagrama de Flujo y Pseudocódigo. existe una tendencia creciente en el uso de herramientas de desarrollo de software y lenguajes de programación orientados a objetos. Estos pasos generalmente se desarrollan desde el planteamiento del problema. también se tratan los conceptos fundamentales sobre modelado y el lenguaje unificado de modelado UML. y Documentación). son tratados durante el desarrollo de los cinco capítulos que forman parte del presente libro. análisis del problema. se van agregando. El método de las 6’D es interactivo e incremental y se puede utilizar la Ingeniería Reversa para actualizar los modelos a partir del código creado. Depuración y pruebas. así como los pasos y los resultados que se deben esperar de cada una de ellas. . También existen una serie de métodos que permiten definir los pasos que se tienen que desarrollar para solucionar problemas basados en una computadora. En este capítulo. Diseño de la solución.PREFACIO Actualmente. Los conceptos y temas fundamentales. Desarrollo de la solución. eliminando o redefiniendo los pasos de algunas de las etapas del método. las clases wrappers (envoltorios). crear copias de . raíz cuadrada y funciones trigonométricas. con la finalidad de mejorar el desarrollo de sus capacidades lógicas. Las estructuras de datos. también se tratan las estructuras lógicas de secuencia. El manejo de excepciones es un concepto propio de la programación orientada a objetos y ofrece una forma de codificar programas con una mayor claridad y sencillez. sino que se crean objetos de la clase String). tales como la conversión con cadenas de caracteres. Se presentan 5 problemas codificados en Java para mejorar la comprensión del tema. las instrucciones de bifurcación y el manejo de excepciones. extraerlos como subcadenas. Se presentan 31 problemas desarrollados utilizando el método de las 6’D. La clase Math contiene métodos de cálculo básico como exponencial. las estructuras lógicas y las instrucciones de bifurcación son conceptos propios de la programación estructurada y son utilizadas por la programación orientada a objetos para la codificación de los métodos que forman parte de las clases. La clase String contiene métodos que permiten examinar los caracteres de una cadena para compararlos.En este capítulo. problemas que se van complicando conforme se tratan y explican los conceptos fundamentales.lang del lenguaje de programación Java. logaritmo. se intenten mejorarlas y se desarrollen cada uno de los problemas propuestos incluyendo las variaciones planteadas. También se presentan 30 problemas desarrollados sobre diferentes tipos de figuras geométricas. ubicarlos. comprobación. son un complemento de los tipos de datos primitivos y proporcionan métodos para realizar diferentes tareas con los tipos de datos primitivos. proporciona métodos y atributos para implementar diversas funciones matemáticas. La clase Math. Es importante que se analicen cada una de las soluciones.lang. Se presentan 35 problemas codificados en Java para mejorar la comprensión del tema. el paquete java. Se tratan los conceptos fundamentales sobre el paquete del lenguaje. traslación. separando explícitamente el código que maneja los errores del código básico de la aplicación. las estructuras lógicas de repetición. Capítulo III: Se desarrollan los conceptos fundamentales sobre las clases básicas incorporadas en el paquete java. La clase String. entre otras. Las clases Wrappers. las estructuras lógicas de decisión. permite declarar y manipular variables de tipo texto o cadena (en realidad no se declaran variables de tipo texto o cadena. la clase Math y la clase String. Capítulo V: Se desarrolla una introducción al desarrollo de soluciones orientadas a objetos. También se hace una referencia a otras clases en Java que el lector puede explorar. formalizando el método de las 6’D para el adecuado manejo de los mismos. declaración. En base al marco teórico se desarrollan soluciones para el ingreso. objetos. redefiniendo algunos de sus pasos para poder ajustar el método a este tipo de soluciones. En el apéndice se incluyen otras clases Java. entre otras. Conforme se presenta cada uno de los conceptos mencionados. se va modificando un proyecto desarrollado en Java para que se pueda analizar como se utiliza el concepto tratado en un lenguaje de programación orientado a objetos. atributos. visualización y cálculo de datos contenido en los arreglos. su definición. Se presentan 14 problemas desarrollados. tales como las clases DecimalFomat. Finalmente. se formaliza el método de las 6’D. Se presentan 30 problemas codificados en Java para mejorar la comprensión del tema. considero una buena decisión que se incluyera el presente capítulo. Es importante comentar que el presente capítulo. GregorianCalendar y SimpleDateFormat. tipos. . representación gráfica. Calendar. fue el primero en ser desarrollado. pero faltando unos días para la entrega oficial de todo el material que conformaba el presente libro fue incluido. A pesar de ello. Se tratan los conceptos básicos fundamentales sobre las clases. Estoy seguro que el lector estará de acuerdo conmigo.una cadena convirtiendo todos sus caracteres a letra mayúscula o minúscula. Al final de este capítulo. Capítulo IV: Se desarrolla la estructura de datos conocida como arreglos (arrays). utilizando el método de las 6’D para mejorar la comprensión del tema. se consideró no incluirlo en el presente texto. Finalmente. métodos y ocultamiento de atributos de instancia. creación y su inicialización. se presentan los conceptos fundamentales sobre el manejo de arreglos múltiples (arreglos en paralelos) y se desarrollan 5 problemas utilizando el método de las 6’D. se profundiza en el Método de las 6’D. también se tratan conceptos de la programación estructurada y fundamentos de programación orientada a objetos. Ing. .Como se puede apreciar. pueden ser utilizados de diferente manera de acuerdo a la experiencia de cada persona. Por otro lado. necesarias para el desarrollo de soluciones utilizando una computadora. Juan José Flores Cueto. los cuales permiten sentar las bases modernas para la programación. Los temas desarrollados a través de los 5 capítulos que forman parte de esta obra. Es importante comprender que se puede extender el uso del método a otros temas y a problemas con soluciones mucho más complicadas. Sólo se tendrá que redefinir algunos de los pasos de las etapas especificadas en el método. conforme avance con el entendimiento de los problemas resueltos y el desarrollo de los problemas propuestos. 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. . . Algoritmo. Modelamiento. • Resumen del método. Capítulo 1 MÉTODO DE LAS 6’D Un Enfoque Algorítmico Temas: Introducción. • Resultado de las etapas del método. Programación. . Marco de trabajo. Método de las 6’D: • Etapas y pasos. . mientras que otros se complican de tal forma que nos afectan de una manera muy profunda. Con la finalidad de recordar el método. que está compuesto de seis etapas. Es decir. CAPÍTULO I MÉTODO DE LAS 6’D Un Enfoque Algorítmico INTRODUCCIÓN Durante el transcurso de nuestra vida nos enfrentamos a diversos problemas. por su naturaleza. 25 . Algunos de ellos podemos solucionarlos fácilmente. Estos problemas generalmente son de tipo estructurado. el método tiene seis etapas y el nombre de cada una de las etapas comienza con la letra “D”. es decir. de modo que este se pueda recordar como el Método de las 6’D. El método propuesto y utilizado en el presente texto es el Método de las 6’D. tienen una solución determinada y pueden ser desde muy sencillos hasta muy complejos. la letra “D”. pueden ser resueltos utilizando una computadora. Algunos problemas.MÉTODO DE LAS 6’D – Un Enfoque Algorítmico. cada una de las cuales consta de una serie de pasos. se ha definido que el nombre de cada una de las etapas del método comience con la misma letra. Este método debe ser fácil de comprender y nos debe guiar paso a paso hasta la solución del problema. Para resolver problemas estructurados utilizando la computadora es importante utilizar un método. los cuales se van modificando (ajustando) dependiendo del grado de complejidad del problema y las herramientas que se utilicen para su solución. Pag. Ing. Juan José Flores Cueto. Pag. 26 . Pag.MÉTODO DE LAS 6’D – Un Enfoque Algorítmico. 27 . MÉTODO DE LAS 6’D En la siguiente figura se muestra el Método de las 6’D con sus respectivas etapas: 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. concreto y conciso del problema a resolver. Identificarlo es una de las tareas más importante que los analistas deben afrontar. Descripción de la Etapa 01 – “Descripción del Problema”: Etapa 01 En esta etapa. es necesario identificar cual es el problema que se desea resolver. Identificado el problema es necesario poder comprenderlo en su totalidad. muchas veces resulta Descripción una tarea agotadora ya que generalmente existen del Problema muchas opiniones de cual es el problema central. en primer lugar. 28 . Finalmente se deberá escribir un enunciado claro. ƒ Enunciado claro y preciso del problema. ENUNCIADO El resultado obtenido en esta etapa es un enunciado claro del problema que se desea solucionar. Pag. PASOS: ƒ Identificación del problema. Juan José Flores Cueto. Esto que parece algo sumamente sencillo. ETAPAS Y PASOS METODO 6’D. es decir. Ing. comprender qué es exactamente lo que se desea que se resuelva. ƒ Descripción general del problema. Pag. para finalmente. METODO 6’D. ESPECIFICACIONES El resultado obtenido en esta etapa son las especificaciones de lo que se debe hacer para solucionar el problema.MÉTODO DE LAS 6’D – Un Enfoque Algorítmico. Esta es una regla que siempre deberá ser aplicada se utilice o no una computadora en la solución de un problema. se está en condiciones de estudiarlo a fondo y plantear diversas alternativas que permitan solucionar el problema. ƒ Determinar los datos que se deben ingresar o generar para obtener el resultado deseado. 29 . PASOS: ƒ Definir el resultado deseado. seleccionar la alternativa mas adecuada. ƒ Determinar la forma en que los datos serán procesados para transformarlos en información. saber exactamente en qué consiste y poder descomponerlo en cada una Definición de de sus partes para facilitar su comprensión y posterior la Solución solución. Descripción de la Etapa 02 – “Definición de la Solución”: Etapa 02 En esta etapa. es necesario estudiar a fondo el problema para poder solucionarlo. Una vez entendido el problema. se procede a diseñar la lógica modelando y desarrollando algoritmos. el cual es una herramienta usada para describir clases. los cuales son herramientas utilizadas para diseñar los algoritmos de los diferentes métodos de una clase. Para el desarrollo de algoritmos se utiliza Pseudocódigos o Diagramas de Flujo (DF). Descripción de la Etapa 03 – “Diseño de la Solución”: Etapa 03 Definida la solución. UML). objetos y sus relaciones. Ing. A este tipo de prueba se le denomina “Prueba de escritorio”. 30 . ƒ Desarrollo de Algoritmos. PASOS: ƒ Definir un nombre para el proyecto. Pag. Para el modelado de la solución del problema se utiliza Diseño de la el Lenguaje Unificado de Modelado (Unified Modeling Solución Language. 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. Juan José Flores Cueto. ƒ Definición de diagramas. METODO 6’D. Finalizado el desarrollo de los algoritmos es necesario verificar si se ha incluido soluciones para todas las formas en que se presente el problema. relaciones y clases. ƒ Desarrollar comentarios internos en los programas de computadora. las especificaciones de las clases (expresadas en notación UML). PROGRAMAS El resultado obtenido en esta etapa son los programas y/o clases. codificados en un lenguaje de programación. Pag. 31 .MÉTODO DE LAS 6’D – Un Enfoque Algorítmico. que permiten solucionar el problema. y constituyen lo que la computadora podrá ejecutar. Estas sentencias son almacenadas en un proyecto (o archivo) lógico. PASOS: ƒ Codificar el proyecto. y los pasos del algoritmo de cada método (expresado en DF o pseudocódigo). en sentencias de un lenguaje de programación determinado. METODO 6’D. La codificación involucra traducir los diagramas. ƒ Desarrollar copias de seguridad de los programas de computadora. Descripción de la Etapa 04 – “Desarrollo de la Solución”: Etapa 04 Una vez previstas todas las posibilidades y alternativas que puedan presentarse y que pasen sin inconvenientes por la clase y los algoritmos. se podrá Desarrollo de proceder a la codificación del problema en algún la Solución lenguaje de programación. deben ser probados mediante la ejecución de los Depuración mismos (esto es conocido como corrida del programa). PASOS: ƒ Realizar la depuración y verificar la correcta escritura de los programas. ƒ Realizar pruebas de lógica. modificar o crear nuevas sentencias. ƒ Realizar pruebas de sintaxis. PRUEBAS El resultado obtenido en esta etapa son las pruebas que registran el adecuado funcionamiento de la solución del problema. siendo los errores de lógica y sintaxis los más comunes. anular. y Pruebas Al realizarse ésta. pueden surgir diferentes tipos de errores. volver a probar el programa y continuar con la corrección y pruebas hasta conseguir el resultado deseado. Pag. Ing. METODO 6’D. Hay que corregir el programa. Descripción de la Etapa 05 – “Depuración y Pruebas”: Etapa 05 Luego que se codifiquen los programas y/o clases. 32 . Juan José Flores Cueto. El manual técnico debe incluir. Pag. . Listado de programas con comentarios internos. los cuales serán necesarios cuando se desarrolle software en forma profesional. Descripción del problema. la cual va a servir como base para la elaboración del manual técnico. PASOS: ƒ Recopilar el material generado en cada una de las etapas anteriores. DF y/o Pseudocódigo. . . como mínimo: . ƒ Generar el manual del programa. Manuales El resultado obtenido en esta etapa son los manuales que permiten un adecuado manejo de la solución desarrollada.MÉTODO DE LAS 6’D – Un Enfoque Algorítmico. . ƒ Generar el manual del usuario. 33 . Resultados esperados y datos necesarios para generar dichos resultados. METODO 6’D. Descripción de la Etapa 06 – “Documentación”: Etapa 06 En esta etapa se recopila toda la documentación generada en las etapas anteriores. Diagramas UML. Documentación Dedicarle tiempo a esta etapa nos ayudará a desarrollar buenos hábitos. Pruebas desarrolladas. a través de la Ingeniería Reversa es Etapa 03 posible programar o codificar algunas partes (hasta su correcto funcionamiento) que no estén especificadas en la Etapa 03 “Diseño de Diseño la Solución”. 04 y 05: La ingeniería reversa nos permite crear o Ingeniería Reversa actualizar el modelo preliminar realizado en la ETAPA 03 “Diseño de la solución” a partir del código del programa realizado en la ETAPA 04 “Desarrollo de la solución” y corregido en la n veces ETAPA 05 “Depuración y pruebas”. Adicionalmente es posible realizar “Ingeniería Reversa” entre las Etapas 03. Juan José Flores Cueto. Es decir. Ing. A partir de esta solución se Solución Etapa 04 actualizan los diagramas de la Etapa 03 y se continúa con el proceso hasta llegar a la solución deseada. • Organizar el modelo obtenido en la herramienta CASE. METODO 6’D. 34 . DIAGRAMAS ACTUALIZADOS Pag. Desarrollo Solución Etapa 05 PASOS: • Exportar proyecto (archivos class o Depuración java) al disco de la PC. si está Pruebas trabajando con un IDE. • Importar proyecto (archivos class o java) a una herramienta CASE y realizar la ingeniería reversa. ƒ Desarrollar verificar la en cada una de las general del datos que se deben ƒ Definición de comentarios correcta escritura etapas anteriores.MÉTODO DE LAS 6’D – Un Enfoque Algorítmico. del usuario. Pag. deseado. ingresar o generar diagramas. claro y preciso resultado deseado. ƒ Determinar la forma ƒ Desarrollo de ƒ Desarrollar de sintaxis. del programa. en que los datos Algoritmos. computadora. copias de ƒ Realizar pruebas serán procesados seguridad de los de lógica. problema. 35 . internos en los de los ƒ Generar el manual ƒ Enunciado para obtener el relaciones y programas de programas. depuración y material generado ƒ Descripción ƒ Determinar los el proyecto. Problema Solución Solución Solución Pruebas ƒ Identificación ƒ Definir el resultado ƒ Definir un ƒ Codificar el ƒ Realizar la ƒ Recopilar el del problema. RESUMEN DEL MÉTODO METODO 6’D. nombre para proyecto. clases. ƒ Realizar pruebas ƒ Generar el manual del problema. para transformarlos programas de en información. Resumen de las etapas y los pasos del método: Etapa 01 Etapa 02 Etapa 03 Etapa 04 Etapa 05 Etapa 06 Descripción Definición Diseño Desarrollo Depuración Document. computadora. Resultado de las etapas del Método: Etapa 01 Etapa 02 Etapa 03 Etapa 04 Etapa 05 Etapa 06 Descripción Definición Diseño Desarrollo Depuración Document. Ing. 36 . Juan José Flores Cueto. RESULTADO DE LAS ETAPAS DEL MÉTODO METODO 6’D. Problema Solución Solución Solución Pruebas DIAGRAMAS Y ENUNCIADO ESPECIFICACIONES PROGRAMAS PRUEBAS ALGORITMOS Manuales Pag. es decir. La etapa 05 (“Depuración y pruebas”) se desarrolla directamente en un lenguaje de programación y la etapa 06 (“Documentación”) es la recopilación del material y la elaboración de los manuales respectivos. MARCO DE TRABAJO En el presente texto se solucionarán problemas sencillos utilizando el Método de las 6’D.MÉTODO DE LAS 6’D – Un Enfoque Algorítmico. La solución de los problemas comenzará con el enunciado del problema y luego se desarrollará la etapa 02 (“Definición de la solución”). 37 . etapa 03 (“Diseño de la solución”) y etapa 04 (“Desarrollo de la solución”). solo se desarrollarán las tres etapas del método que son posibles especificar en el presente texto. 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. solo se desarrolla la etapa 04 (“Desarrollo de la solución”). instrucciones o sentencias de bifurcación y las estructuras de datos. Para ello se tendría que dominar otros conceptos. con la finalidad de resolver una mayor cantidad de problemas y profundizar en la codificación utilizando el lenguaje de programación Java. Conexión a Base de Datos. Polimorfismo. Encapsulamiento. También es posible plantear soluciones más complejas utilizando el Método de las 6’D. algoritmo y programación. Herencia. Servlets entre otros. Es importante mencionar. Es importante precisar que en la primera parte del capítulo II. tales como. los pasos especificados en cada una de las etapas del método se pueden redefinir (modificar). Interfaces Gráficas. Ing. se solucionan los problemas utilizando el marco de trabajo especificado. Este tipo de soluciones son el objetivo del presente texto. que dependiendo de la complejidad del problema. en el capítulo IV y en el capítulo V del presente texto. Métodos. Pag. que dependiendo de la complejidad del problema y de su solución. es necesario conocer los conceptos fundamentales de modelamiento. Juan José Flores Cueto. 38 . Esto significa. Para poder solucionar problemas sencillos utilizando el Método de las 6’D. mientras que en la segunda parte del capítulo II y el capítulo III. se puede plantear nuevos pasos y eliminar pasos ya existentes en las diferentes etapas del método. Objetos. y dominar el uso de las estructuras lógicas. ƒ Clase. • Construir un modelo en un lenguaje de programación (se establecen correspondencias con lenguajes Orientados a Objetos. un paquete se representa de la siguiente forma: NombrePaquete Nombre del paquete. Para representar un modelo se utilizará el UML (Unified Modeling Language). Para desarrollar un modelo y representarlo en UML. que está bajo observación o estudio.. una clase es un conjunto de atributos y métodos. un modelo que se utiliza para describir uno o más objetos del mismo tipo. versiones. Un modelo es una representación gráfica o simbólica de algún aspecto del mundo real.Los paquetes nos permiten organizar las clases de un modelo. En su forma más sencilla. ƒ Paquete. • Describir el ciclo de vida completo del desarrollo Orientado a Objetos. se detallarán algunos conceptos básicos que serán utilizados en las soluciones planteadas en el presente texto. como Java.. pruebas.). MODELAMIENTO El modelamiento se refiere a la forma como se representa la solución de un problema del mundo real en términos de un modelo. planificación. 39 . • Documentar los componentes de un sistema de software (arquitectura. El Lenguaje Unificado de Modelado (UML) es un lenguaje gráfico que nos permite: • Visualizar un modelo. C++. Visual Basic.Una clase.MÉTODO DE LAS 6’D – Un Enfoque Algorítmico. requisitos. • Especificar un modelo (construir modelos precisos..).. En UML. Una clase es una abstracción y no Pag.. es simplemente.. Un paquete contiene clases que tienen funciones similares. diseño. Para nuestro propósito. no ambiguos). es necesario conocer todos los conceptos relacionados con el desarrollo de Software Orientado a Objetos. real o abstracta. una clase se representa de la siguiente forma: NombreClase Nombre de la clase y (NombrePaquete del paquete al cual al que pertenece) pertenece la clase. los cuales se muestran a continuación: 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. Ing. UML incorpora nueve diagramas que permiten representar un modelo desde diferentes perspectivas.. representa a ningún objeto en particular. Atributos Lista de atributos de la clase. acerca de la cual almacenamos datos y los métodos que controlan y manipulan dichos datos.Un objeto es cualquier cosa. Métodos Lista de métodos de la clase. ƒ Objeto. un objeto se representa de la siguiente forma: NombreClase : Nombre de la clase a la cual nombreObjeto pertenece el objeto y el nombre del objeto. Juan José Flores Cueto. Un objeto se crea o instancia a partir de una clase. Ambos nombres deben estar separados por dos puntos. En UML. En UML. 40 . 41 . En UML. una relación de dependencia unidireccional entre dos paquetes se gráfica de la siguiente manera: Relación de dependencia unidireccional.MÉTODO DE LAS 6’D – Un Enfoque Algorítmico. Para nuestro propósito. Pag. Una relación de dependencia entre dos o más paquetes se establece cuando las clases que pertenecen a un paquete pueden tener acceso a todas o a algunas de las clases que pertenecen a otro paquete (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). se detallará el diagrama de paquetes que será utilizado en las soluciones planteadas en el presente texto.Un diagrama de paquetes permite especificar y visualizar las relaciones de dependencia que existe entre los paquetes que forman parte de una solución. ƒ Diagrama de paquetes.. También se puede establecer una relación de dependencia bidireccional cuando las clases que pertenecen a un paquete pueden tener acceso a todas o a algunas de las clases que pertenecen a otro paquete y viceversa. 42 . Este nombre debe ser seleccionado adecuadamente. seguido de un nombre que identifique al proyecto. Juan José Flores Cueto. En el paquete “dominioDeLaAplicacion”. En el Método de las 6’D. Este nombre debe ser seleccionado adecuadamente. seguido de un nombre que identifique a la clase. ƒ Definición de diagramas. y se establecerá una relación de dependencia unidireccional del primero hacia el segundo. el modelamiento de una solución se desarrolla durante la Etapa 03 . Para nuestros fines se crearán dos paquetes en las soluciones. Dicha clase no tendrá ningún atributo definido y solo se definirá un método (el método principal).“Diseño de la solución”: Etapa 03 Diseño Solución Se desarrollan los siguientes pasos: ƒ Definir un nombre para el proyecto. El nombre del proyecto comenzará con las letras “Proy” (abreviatura de proyecto). Uno de ellos lo se llamará “dominioDeLaAplicación” y el otro “biblioteca”. La definición del nombre del proyecto. permite agrupar a todos los elementos que serán parte de la solución del problema utilizando el método planteado. En este paso se desarrollará el diagrama de paquetes y se especificará la relación de dependencia entre los paquetes utilizando UML. Ing. relaciones y clases. Pag. se definirá la clase que permitirá solucionar el problema planteado utilizando UML. El nombre de la clase comenzará con las letras “Prg” (abreviatura de programa). 1 La clase Lectura se trata en el Capítulo II y se especifica en el Apéndice. 43 . atributos y métodos: El nombre de la clase y el nombre del paquete deben comenzar con una letra mayúscula y el resto en minú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. se tendrá clase Lectura1 que facilitará el ingreso de los datos a la computadora. todas las primeras letras de los nombres simples que forman el nombre de la clase o paquete deberán comenzar con mayúscula. clases. En caso que el nombre sea compuesto. En el paquete “biblioteca”. Los nombres de los atributos se escriben en minúscula. Regla general para especificar los nombres de los paquetes. a partir de la segunda palabra se escribe la primera letra en mayúscula.MÉTODO DE LAS 6’D – Un Enfoque Algorítmico. Pag. Si el nombre es compuesto. Juan José Flores Cueto. 44 . Pag. Ing. ƒ Un algoritmo debe estar definido. se deriva que un algoritmo se desarrolla para un determinado método y que su definición tiene dos partes esenciales: ƒ Una lista de pasos que deben ser ejecutados. ƒ Un algoritmo producirá uno o más datos de salida. Pag. ƒ Todo algoritmo debe ser finito. indicando el orden de realización de cada paso. ƒ Un algoritmo puede o no tener datos de entrada.MÉTODO DE LAS 6’D – Un Enfoque Algorítmico. se debe obtener el mismo resultado. ƒ Un algoritmo debe ser preciso. en su forma más simple. Un algoritmo constituye una lista completa de los pasos y una descripción de los datos que son necesarios para resolver un determinado problema en el ámbito de un método. ƒ Una descripción de los datos que son manipulados por estos pasos. ALGORITMO Una clase. Si se sigue un algoritmo. Si se sigue un algoritmo dos veces. CARACTERÍSTICAS ƒ Descripción de los pasos que deben ser ejecutados (estructuras lógicas). De esto. 45 . ƒ Descripción de los datos que son manipulados por estos pasos (estructuras de datos). 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. éste debe terminar en algún momento. Para especificar cuáles son los pasos desarrollados en un determinado método y cuáles son los datos que manejan dichos pasos se desarrollan los algoritmos. los algoritmos permiten especificar la lógica de desarrollo de los métodos que conforman una clase. Por ejemplo. si se desea asignar 5 a la variable “x” se realizará de la siguiente manera: x = 5. Por ejemplo. En conclusión. 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. ‰ Es necesario que se determinen los datos de entrada y la información de salida. Se dispone de diversas herramientas para desarrollar los algoritmos para los métodos de las clases. debe ser fácil de leer. el cual deberá comenzar con una letra mayúscula. ‰ Para asignar un valor a una variable “x” se utiliza el signo igual. ƒ El resultado que se obtenga debe satisfacer los requerimientos de la persona interesada (efectividad). Entre dichas herramientas se puede mencionar al pseudocódigo y al diagrama de flujo. 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). Si es un nombre compuesto. Juan José Flores Cueto. Si se desea declarar una variable de tipo texto se realizaría de la siguiente manera: TEXTO x. Es decir. la primera letra de cada palabra simple deberá estar en mayúscula. entender. Por lo tanto. ƒ Los datos de entrada y salida deben almacenarse en estructuras de datos. Pautas básicas: ‰ Todo algoritmo debe tener un nombre. 46 . se debe entender la importancia de estudiar los “algoritmos” para comprender como se está solucionando un determinado problema. Pag. usar y cambiar si es preciso. ‰ Para declarar una variable “x” se deberá determinar qué tipo de dato se almacenará. ƒ Debe ser estructurado. Ing. ‰ Para escribir el valor de una variable (observe que la variable no está entre comillas) se utiliza: ESCRIBIR x. FLUJO Porque muestra la secuencia de lo que se tiene que realizar. FIN. 47 . ‰ Para escribir el resultado de una expresión (observe que la expresión no está entre comillas) se utiliza: ESCRIBIR x + 2. Estructura básica de un pseudocódigo: Algoritmo NombreClase – nombreMetodo() ENTRADA: SALIDA: En ENTRADA y SALIDA se especifican las variables que se usarán en el INICIO desarrollo del algoritmo. se puede afirmar que el Diagrama de Flujo es la representación gráfica de un algoritmo.MÉTODO DE LAS 6’D – Un Enfoque Algorítmico. … … Este es el cuerpo del … algoritmo expresado en pseudocódigo. se utiliza: LEER z.. Pag. La combinación de símbolos especializados y líneas de flujo describe la lógica para la solución del problema (algoritmo). ‰ Para indicar que la computadora lea un valor desde un dispositivo externo y lo almacene en la variable “z”. ‰ Para indicar que la computadora escriba hacia un dispositivo externo: ‰ Para escribir un mensaje (observe que el mensaje está entre comillas) se utiliza: ESCRIBIR “hola”. DIAGRAMA Por el hecho de ser un dibujo que no requiere estar a escala.. Las … instrucciones se colocan FIN entre INICIO. Entonces. ƒ DIAGRAMA DE FLUJO Un Diagrama de Flujo permite ilustrar la secuencia de pasos de un algoritmo por medio de símbolos especializados y líneas de flujo. Elementos o símbolos básicos: PROCESO Utilizado para asignar valores a variables y resultados de operaciones matemáticas. Ing. INICIO / FIN Este símbolo permite marcar el inicio y el final del algoritmo. Juan José Flores Cueto. Pag. ENTRADA / SALIDA Utilizado para ingresar datos y visualizar la información que resulta del procesamiento. FLUJOS (LINEAS) Líneas que permiten unir los diagramas y mostrar la secuencia lógica a la solución del problema. CONECTOR Este símbolo permite que no se crucen los flujos (líneas) en un diagrama. 48 . Permite declarar a una variable de tipo CARACTER CARACTER letra texto o cadena de una sola letra. Permite asignar el valor VERDADERO a VERDADERO aprobado = VERDADERO una variable lógica. Utilizada para realizar comentarios COMENTARIO COMENTARIO “Variables” internos en la codificación de las soluciones.. Pag. Permite declarar una variable de tipo TEXTO TEXTO mensaje texto o cadena.MÉTODO DE LAS 6’D – Un Enfoque Algorítmico. Utilizada para la salida de información.. estructuras lógicas serán tratadas en el FINSI capítulo II. El dato LEER LEER x ingresado se almacena en la variable especificada. desarrollados en pseudocódigo y diagrama de flujo. FINSI”. Permite asignar el valor FALSO a una FALSO aprobado = FALSO variable lógica. 49 .. se han clasificado en 6 grupos las reglas definidas. Permite declarar una variable de tipo LÓGICO LÓGICO aprobado lógico. GRUPO 2 SI (condición) Permite especificar una estructura de ENTONCES decisión simple “SI. ƒ REGLAS UTILIZADAS POR LAS HERRAMIENTAS Con la finalidad de comprender mejor el diseño de los algoritmos. Las SI instrucciones. Permite declarar una variable de tipo NUMERO NUMERO x numérico. el ESCRIBIR ESCRIBIR x contenido de una variable o el resultado ESCRIBIR x + z de una operación matemática. REGLA FORMATO DESCRIPCIÓN GRUPO 1 Utilizada para el ingreso de datos. ESCRIBIR “Hola” Se puede visualizar una cadena.. instrucción n FINDESDE MIENTRAS (condición) instrucción 1 Permite especificar una estructura de . Ing.FINMIENTRAS”. capítulo II.. FINSI”.. 50 ... repetición “MIENTRAS... repetición “DESDE.. estructuras lógicas serán tratadas en el .... MIENTRAS .. capítulo II. el capítulo II. Las DESDE .. FINDESDE”. instrucción n MIENTRAS (condición) Permite terminar la ejecución de una TERMINAR TERMINAR estructura lógica de repetición.. instrucción n FINMIENTRAS HACER instrucción 1 Permite especificar una estructura de . Las HACER . SINO. estructuras lógicas serán tratadas en el . capítulo II. CASO (valor 2) : Las estructuras lógicas serán tratadas en CUANDO instrucciones. repetición “HACER.FINHACER”. Las SI / SINO SINO estructuras lógicas serán tratadas en el instrucciones.... FINCUANDO DESDE i = valorInicial HASTA valorFinal instrucción 1 Permite especificar una estructura de . Pag. FINCUANDO”. Permite volver a ejecutar una estructura lógica de repetición sin finalizar todas las CONTINUAR CONTINUAR instrucciones que forman parte de la misma. REGLA FORMATO DESCRIPCIÓN SI (condición) ENTONCES Permite especificar una estructura de instrucciones. instrucciones... CASO (valor n) : instrucciones. Las estructuras lógicas serán tratadas en .. OTROS instrucciones. FINSI CUANDO (variable) SEA Permite especificar una estructura de CASO (valor 1) : decisión múltiple “CUANDO..... el capítulo II. Juan José Flores Cueto. decisión doble “SI. Ver capítulo III. El resultado se almacena en la variable “x”. Permite obtener la parte entera de la DIVIDIR x = z DIVIDIR n división de las variables “z” y “n”. El resultado se almacena en la variable “x”. Ver capítulo III. El resultado se almacena en la variable “x”. Ver capítulo III. REGLA FORMATO DESCRIPCIÓN GRUPO 3 Permite obtener el coseno del valor almacenado en la variable “n”. Permite cambiar a minúscula la cadena almacenada en la variable “n”. El resultado se almacena en la variable “x”. 51 . Pag. GRUPO 4 Permite obtener el resto de la división RESTO x = z RESTO n entre las variables “z” y “n”. Permite cambiar a mayúscula la cadena MAYÚSCULA x = MAYÚSCULA n almacenada en la variable “n”. Permite obtener el seno del valor SENO x = SENO n almacenado en la variable “n”. Permite obtener el número de columnas COLUMNA x = COLUMNA n de una matriz “n”. Ver capítulo III. El resultado se almacena en la variable “x”. El COSENO x = COSENO n resultado se almacena en la variable “x”. El resultado se almacena en la variable “x”. Ver capítulo III y capítulo IV. El resultado se almacena en la variable “x”. Permite obtener la raíz “n” del número RAIZ x = z RAIZ n “z”. El MINUSCULA x = MINUSCULA n resultado se almacena en la variable “x”. El resultado se almacena en la variable “x”. Permite obtener el número de filas de FILA x = FILA n una matriz “n”.MÉTODO DE LAS 6’D – Un Enfoque Algorítmico. Permite obtener la longitud de la cadena almacenada en la variable “n” o la LONGITUD x = LONGITUD n longitud del vector “n”. El resultado se almacena en la variable “x”. n2 especificadas por “n1” y “n2” de la cadena “z”. Permite crear un objeto de una CREAR CREAR objeto determinada clase EJECUTAR EJECUTAR algoritmo Permite ejecutar otro algoritmo. ALEATORIO x = z ALEATORIO n El resultado se almacena en la variable “x”. GRUPO 5 Permite obtener una subcadena comprendida entre las posiciones SUBCADENA x = z SUBCADENA n1. Un arreglo permite CREAR almacenar más de un dato del mismo CREAR matriz[n1][n2] tipo. Juan José Flores Cueto. 52 . El resultado se almacena en la variable “x”. El resultado se almacena en la variable “x”. El resultado se almacena en la variable “x”. Permite obtener un número cualquiera (aleatorio) entre los valores de “n” y “z”. REGLA FORMATO DESCRIPCIÓN Permite obtener la potencia “n” del POTENCIA x = z POTENCIA n número “z”. El resultado se almacena en la variable “x”. Pag. Permite eliminar los espacios existentes ELIMINAESPACIO x = z ELIMINAESPACIO n1. Ing. n2 en una cadena entre las posiciones especificadas por “n1” y “n2”. Permite obtener el carácter ubicado en la CARACTER x = z CARACTER n posición “n” de la cadena “z”. Permite obtener el número menor entre el valor almacenado en la variable “n” y la MINIMO x = z MINIMO n variable “z”. GRUPO 6 Utilizada para crear arreglos previamente CREAR vector[n] declarados. Permite obtener el número mayor entre el valor almacenado en la variable “n” y la MAXIMO x = z MAXIMO n variable “z”. Los arreglos serán tratados en el capítulo IV. El resultado se almacena en la variable “x”. durante la Etapa 03 .“Diseño de la solución”: Etapa 03 Diseño Solución Se desarrollará el siguiente paso: ƒ Desarrollo de algoritmos. Pag. En el Método de las 6’D. REGLA FORMATO DESCRIPCIÓN Permite especificar si un algoritmo recibe PARAMETRO PARAMETRO listaVariables datos o valores. Permite especificar si un algoritmo RETORNAR RETORNAR variable retorna una respuesta. 53 . Para el desarrollo del algoritmo se utilizará pseudocódigo.MÉTODO DE LAS 6’D – Un Enfoque Algorítmico. se desarrollará el algoritmo para el método especificado en la clase. la cual forma parte del paquete “dominioDeLaAplicación”. el algoritmo de una solución se desarrolla después del modelamiento. En este paso. Se puede decir. utilizando alguno de los lenguajes de programación existentes. se desarrolló la programación lineal. Al inicio. los cuales están divididos en categorías según su experiencia y dominio de diferentes lenguajes de programación. En términos sencillos. la mayor parte de los cuales tienen un conjunto de reglas o sentencias muy especializadas. luego la programación modular. La forma de programación ha variado con el paso de los años. un lenguaje de programación es un lenguaje que los programadores utilizan para escribir programas que son comprendidos y ejecutados en una computadora. después la programación estructurada y ahora la programación orientada a objetos. 54 . Entre los lenguajes de programación orientados a objetos podemos destacar a Java. Entonces. PROGRAMACIÓN La programación es la traducción del modelamiento y los algoritmos en sentencias que la computadora puede comprender y ejecutar. La acción de escribir programas para una computadora se conoce como codificación. una compañía reconocida por sus estaciones de trabajo UNIX de alta calidad. Pag. LENGUAJES DE PROGRAMACIÓN ƒ JAVA Java es un lenguaje de programación orientado a objetos desarrollado por Sun MicroSystems. Existen diferentes lenguajes de programación. Las personas que escriben los programas son conocidas como programadores. Ing. Nos “comunicamos” con las computadoras a través de los programas desarrollados en un lenguaje de programación en particular. que la programación es la acción de escribir programas para una computadora. Juan José Flores Cueto. lo que significa que los programas Java (applets. A pesar que Java es un lenguaje de programación orientado a objetos. programa en Java. class NombreClase { public static void main ( String arg[ ] ) { … Este es el cuerpo del sentencias. } } En el lenguaje de programación Java. tanto a nivel de código fuente como binario. aplicaciones y servlets). el lenguaje Java se diseñó para ser pequeño. Estructura básica de un programa desarrollado en Java: package NombrePaquete. Fundamentado en el lenguaje de programación C++. 55 . Las … sentencias se colocan dentro de los corchetes del método main ( ). pueden ejecutarse en cualquier computadora que tenga instalada una máquina virtual de Java.MÉTODO DE LAS 6’D – Un Enfoque Algorítmico. lo cual se hace necesario para poder iniciar el estudio de los conceptos fundamentales de programación. también puede ser utilizado como un lenguaje estructurado. sencillo y portátil a través de plataformas y sistemas operativos. para definir que una clase forma parte de un paquete determinado. se utiliza la siguiente palabra reservada: package En el lenguaje de programación Java para definir una clase se utiliza la siguiente palabra reservada: class Pag. es aquella que tiene un significado especial para un lenguaje de programación. No existe código que no esté contenido dentro de un método (a excepción de los bloques estáticos). 56 . Es importante comprender que una clase está constituida por atributos y métodos. son clases que pueden ejecutarse. En el lenguaje de programación Java. en el lenguaje de programación Java. Existen clases que tienen un método especial conocido como “método principal”. el método principal es conocido como método main ( ). para especificar que una clase tiene un “método principal”. se utiliza las siguientes sentencias: public static void main (String arg[]) Por lo tanto. Todo el código ejecutable reside dentro de los métodos de la clase. Todos los lenguajes tienen palabras claves. En el caso de Java tenemos las siguientes: Palabras reservadas en Java abstract boolean catch byte case do char class extends continue default float double else if final finally instanceof for import long implements interface null int new protected native private short package return super public strictfp this static synchronized transient switch throws volatile throw void try widefp while break Pag. Palabras reservadas en Java: Una palabra reservada o palabra clave. Ing. Todas las clases que tienen especificado un “método principal”. Juan José Flores Cueto. Una característica importante de la POO es que utiliza los mejores conceptos de la PE y de las otras formas de programación. En el Método de las 6’D. utilizando el lenguaje de programación Java. se desarrollará la codificación del proyecto. Es decir. Pag.MÉTODO DE LAS 6’D – Un Enfoque Algorítmico. En la actualidad.“Desarrollo de la solución”: Etapa 04 Desarrollo Solución Se desarrollará solo el primer paso: ƒ Codificar el proyecto. se traducirá lo especificado en el modelamiento y en los algoritmos. En este paso. 57 . en sentencias que la computadora pueda comprender y ejecutar. la programación de una solución se desarrolla durante la Etapa 04 . siendo la POO la más reciente y la que promete solucionar muchos de los problemas de la PE. incorporando nuevas características y nuevos conceptos. la Programación Estructurada (PE) y la Programación Orientada a Objetos (POO) son las formas de programación utilizadas por la mayoría de los programadores. Pag. Ing. Juan José Flores Cueto. 58 . • Estructuras lógicas de repetición. • Instrucciones de bifurcación. Capítulo 2 Estructuras Fundamentales para la Solución de Problemas Temas: Introducción. Etapas y pasos. Problemas resueltos en general y sobre figuras. . • Conversión de datos. Estructuras de Datos: Variables • Tipos de datos. Método de las 6´D. • Mapa de estructuras lógicas detallado. Estructuras Lógicas: • Estructuras lógicas de secuencia. • Estructuras lógicas de decisión. . La lista completa de los pasos se desarrolla utilizando las estructuras lógicas y las instrucciones de bifurcación.ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS CAPÍTULO II ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCION DE PROBLEMAS INTRODUCCIÓN El modelamiento se refiere a la forma como representamos la solución de un problema del mundo real en términos de un modelo. Un algoritmo constituye una lista completa de los pasos y una descripción de los datos que son necesarios para resolver un determinado problema en el ámbito de un método. 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 . La programación es la traducción del modelamiento y los algoritmos en sentencias que una computadora puede comprender y ejecutar. mientras que los datos se almacenan en las estructuras de datos. La acción de escribir un programa para computadoras se conoce como codificación. trata sobre las estructuras fundamentales para la solución de problemas. El presente capítulo. La técnica que se emplea en el presente texto para el ingreso de datos y visualización de la información. instrucciones de bifurcación y las estructuras de datos conocidas como variables). ALMACENADOS EN: • Estructuras de datos tipo variables. LISTA DE PASOS SENTENCIAS DESCRIPCIÓN DECLARACIÓN Y DE DATOS DEFINICIÓN DE DATOS SE DESARROLLAN UTILIZANDO: • Estructuras lógicas de secuencia. colores y otros objetos que permiten una interface visual con el usuario. 62 . Pag. para luego ser codificados en un lenguaje de programación. En su lugar. cada día se utiliza con menos frecuencia (técnica tradicional basada en el ingreso de datos y visualización de información utilizando solo caracteres). El lenguaje de programación Java incorpora un paquete denominado AWT (Abstract Windows Toolking) que contiene clases que permiten crear cualquier tipo de interfaces gráficas de usuarios o GUI (interfaces visuales). • Estructuras lógicas de repetición. Ing. Es importante mencionar que utilizando las estructuras fundamentales para la solución de problemas (estructuras lógicas. • Instrucciones de bifucación. También incorpora un paquete llamado SWING (a partir de la versión 2 de Java). gráficos. se utilizan las interfaces gráficas de usuario o GUI (por sus siglas en inglés). se pueden desarrollar algoritmos de tal forma que estos puedan ser diseñados en pseudocódigo o diagrama de flujo. • Estructuras lógicas de decisión. que incorporan ventanas. Juan José Flores Cueto. que facilita el ingreso y visualización de datos utilizando cuadros de dialogo visuales. se deberá escribir con mayúscula la primera letra de cada palabra. Si se necesita almacenar dos o tres datos. La declaración de una variable se debe realizar antes de que ésta pueda ser utilizada. Nombre de variable: Siempre es necesario que las variables tengan un nombre para poder referirse a ellas en cualquier parte de un programa. se requerirán dos o tres variables según sea el caso. y Java no es la excepción. En pseudocódigo y diagrama de flujo: TipoDeDato ListaDeVariables En Java: TipoDeDato ListaDeVariables . Donde TipoDeDato debe ser un tipo de variable o tipo de dato válido y ListaDeVariables puede tener uno o más nombres de variables separadas por comas. 63 . Generalmente se realiza al inicio de un programa. El nombre de una variable deberá comenzar con una letra minúscula. Declaración de una variable: Declarar una variable significa definir el nombre de la variable y el tipo de dato que podrá almacenar. 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. esto es necesario en los diferentes lenguajes de programación. En Java: Pag.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. Si el nombre de la variable está formado por varias palabras. Una variable sólo puede almacenar un dato a la vez. (ejemplo: ESCRIBIR). a partir de la segunda palabra que forme parte del nombre. Inicialización de una variable: Es posible que una variable sea definida con un valor inicial y que este valor posteriormente sea modificado. Aquí TipoDeDato es opcional y se utiliza sólo si la variable no ha sido declarada anteriormente. Es posible almacenar un valor en una variable en cualquier parte del programa. seguido del valor que se desea almacenar. a continuación el signo igual. Juan José Flores Cueto. perderá el valor que anteriormente tenía esta. Por ejemplo: En pseudocódigo y diagrama de flujo: suma = 7 + 5 Pag. (Ejemplo: String). Donde valor debe ser un valor equivalente al tipo de variable o tipo de dato definido. Almacenamiento de datos en variables: Para almacenar un valor en una variable se utiliza el nombre con el que esta fue declarada. guarde relación con el valor que estas almacenan. En pseudocódigo y diagrama de flujo: variable = valor En Java: variable = valor . En pseudocódigo y diagrama de flujo: TipoDeDato variable = valor En Java: TipoDeDato variable = valor . El valor de una variable puede también ser sustituido por el resultado de una operación aritmética o de cálculo. Se recomienda que el nombre a utilizar en las variables que se empleen. El único requisito es que la variable donde se almacene el valor esté previamente declarada. Una variable no puede tener el nombre de una palabra reservada. 64 . 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. Ing. Es bueno definir con un valor inicial a todas las variables declaradas en el programa. Cada vez que almacena un valor en la variable. 65 . Dependiendo del valor que tome el interruptor se ejecutarán ciertos pasos. Un acumulador realiza la misma función que un contador con la diferencia que el incremento o decremento no es una cantidad fija sino una cantidad variable. Otros usos de las variables: Muchas veces. Cabe mencionar que en una solución se puede utilizar una o varias variables que pueden asumir las funciones de contador. obtenidos cada vez que se ejecuta una estructura lógica de repetición (las estructuras lógicas se repetición se estudian más adelante en este mismo capítulo). Pag. La función que pueda asumir una variable dependerá de la forma como se plantee la solución para un determinado problema. Acumuladores: Un acumulador o totalizador es una variable cuya función es almacenar un valor como resultado de sumas o restas sucesivas. encendido/apagado) dentro de una determinada solución. se observará que el valor obtenido será 12. En ambos casos. Dichas variables pueden asumir la función de contador.ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS En Java: suma = 7 + 5 . Contadores: Un contador es una variable cuyo valor se incrementa o decrementa en una cantidad fija cada vez que se ejecutan los pasos que forman parte de una estructura de repetición. Un contador puede ser creciente o decreciente. es necesario utilizar variables que permitan almacenar resultados parciales. acumulador o interruptor. bandera o flag) es una variable que puede tomar dos posibles valores (1/0. si/no. acumulador o interruptor. Interruptores: Un interruptor o conmutador (denominado también centinela. cuando se desee visualizar el contenido de la variable suma. verdadero/falso. byte. LOGICO Referido a los dos posibles valores lógicos (VERDADERO y/o FALSO). multiplicación. etc. resta. En este contexto. Los lenguajes de programación permiten trabajar con una amplia diversidad de tipos de datos que se extienden desde los más básicos hasta los más complejos. CARACTER. ENTERO y REAL). división. short. A pesar que en el pseudocódigo y diagrama de flujo sólo se reconocen tres tipos de datos. Juan José Flores Cueto. TEXTO y LOGICO son reglas utilizadas en el pseudocódigo y diagrama de flujo. todos los datos son derivados de ocho tipos de datos básicos. En Java. Hay que tener presente que las palabras NUMERO. por lo que no podrán ser usadas como nombre de variable. Los tipos de datos básicos se tratarán en este capítulo y constituyen la base para los tipos de datos compuestos. digito o símbolo encerrado entre comilla simple. char y boolean. TIPOS DE DATOS Definición: Los tipos de datos permiten declarar las variables. TEXTO y LOGICO). REAL. float. ENTERO. En pseudocódigo y diagrama de flujo se utilizan tres tipos (NUMERO. Pag. CARACTER Referidos a cualquier letra. int. 66 . Estos datos nos permiten definir los tres tipos de variables utilizadas: Variables numéricas: Permiten almacenar sólo tipos de datos numéricos (NUMERO.en dos categorías: básicos o simples y compuestos.). en los lenguajes de programación se tiene una gran variedad de tipos de datos. Con una variable numérica se puede realizar operaciones matemáticas (suma. se debe tener presente que las operaciones matemáticas se resuelven siguiendo las mismas reglas que se aplican en la aritmética tradicional. Tipos de datos en Pseudocódigo: Reglas definidas para los tipos de datos: NUMERO Referidos a cualquier número. Existen diferentes tipos de datos. los cuales están divididos –generalmente. TEXTO Referidos a cualquier texto encerrado entre comillas dobles. double. long. Se puede subdividir en ENTERO y REAL. Ing. Primero se resuelven las multiplicaciones y divisiones. direcciones. luego las sumas y restas. Variables lógicas: Permiten almacenar sólo tipo de datos lógicos. tales como nombres de personas. Ejemplos: edad = 15 resultado = 5 + 8 * ( 6 – 2) Donde edad y resultado son variables que previamente han sido declaradas como variables de tipo numéricas. 67 . Variables de texto: Permiten almacenar datos de tipo texto y datos de tipo caracter (TEXTO y CARACTER). Para alterar esta prioridad se podrá utilizar los paréntesis. número de AFP. por lo que no está permitido que se usen como nombres de variables. Existen sólo dos valores que se pueden almacenar en este tipo de variable: verdadero y falso. Ejemplos: nombre = “Pedro” letra = ‘J’ Donde nombre y siglas son variables que previamente han sido declaradas como variables de tipo texto. Ejemplos: masculino = VERDADERO estudiante = FALSO Donde masculino y estudiante son variables que previamente han sido declaradas como variables de tipo lógico. Pag. Las palabras VERDADERO y FALSO constituyen reglas en pseudocódigo y diagrama de flujo. Las variables tipo texto son útiles para almacenar cualquier cadena de texto.ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS Por ejemplo: Una serie de operaciones. etc. 372. Los valores de los datos de tipo String van entre comillas dobles (ejemplo. Juan José Flores Cueto. int.854. ‘K’) y sólo permiten almacenar un solo caracter. Un entero de tipo int siempre tendrá 4 bytes.768 y no se producirá ningún error de ejecución. short.648 int Entero 4 bytes 2. se utiliza la clase String.808 long Entero largo 8 bytes 9. Pag. float. pero entre ellos se pueden agrupar como datos de tipo NUMERO (byte. Las palabras reservadas que permiten declarar variables son byte. int. double).036.647 -9. sino un tipo de dato compuesto (a pesar de ello.147. Los datos tipo NUMERO (datos numéricos) se pueden dividir en valores de tipo ENTERO (byte. Es importante destacar que estos ocho tipos de datos simples son diferentes. Para representar una cadena de caracteres en Java. Por ejemplo: si a una variable de tipo short con el valor 32.7*10308 de doble precisión. Tipo Descripción Longitud Rango byte Tipo byte 1 byte -128 … 127 short Entero corto 2 bytes -32768 … 32767 -2.854.7*10-308 … ±1.036. long. en Java los tipos de datos simples no dependen de la plataforma ni del sistema operativo.535 boolean Lógico 1 byte true / flase A diferencia de otros lenguajes de programación.767 se le suma 1.223. char y boolean. “Hola”) y permite almacenar cadenas de texto. Ing. Tipos de datos en Java: Los tipos de datos básicos o simples de Java son utilizados para declarar las variables que serán utilizadas en los programas. Las palabras reservadas de Java no pueden ser utilizadas como nombre de variable.147. Los String en Java no son un tipo de dato básico (simple). short. 68 . tipo CARACTER (char) y tipo LOGICO (boolean). mientras que los de tipo char van entre comillas simples (ejemplo. y forman parte de las palabras reservadas del lenguaje.483.807 Real en coma flotante float 4 bytes ±3. int. el resultado será -32. long) y valores de tipo REAL (float. double). char Caracter 2 bytes 0 … 65. por lo que no habrá sorpresas al migrar un programa de un sistema operativo a otro.4*10-38 … ±3. Es importante mencionar que Java no realiza una comprobación de rangos.4*1038 de simple precisión Real con coma flotante double 8 bytes ±1.483. double. short.223.775.372. se puede utilizar como un tipo de dato simple para definir datos de tipo TEXTO en Java). long.775. float. solo podrá almacenar valores de dicho tipo de dato. int numEntero . Pag. si se declara una variable con un tipo de dato específico.out. Ejemplos: Clase PrgTipoDato01 package dominioDeLaAplicacion . si se declara una variable con un tipo de dato específico y se intenta almacenar un valor de distinto tipo.ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS Como regla general.println ( numEntero ) . class PrgTipoDato02 { public static void main ( String arg [ ] ) { double numRealDouble = 2. En base a esto. numRealFloat = numRealDouble .out.3 . float numRealFloat . Clase PrgTipoDato02 package dominioDeLaAplicacion . class PrgTipoDato01 { public static void main ( String arg [ ] ) { double numReal = 4. } } Observación: No se puede almacenar un número real grande (double) en una variable real (float). // La siguiente línea genera error. 69 . numEntero = numReal .println ( numRealFloat ) . Es decir. System.3 . // La siguiente línea genera error. al momento de compilar. una variable solo puede almacenar valores de acuerdo al tipo de dato con el que fue declarado. el programa indicará un error. System. } } Observación: No se puede almacenar un número real grande (double) en una variable entera (int). out. class PrgTipoDato03 { public static void main ( String arg [ ] ) { boolean estado = true . Pag. // La siguiente línea genera error. Clase PrgTipoDato03 package dominioDeLaAplicacion . Juan José Flores Cueto. 70 . caracter = estado .println ( caracter ) . char caracter . Ing. System. } } Observación: No se puede almacenar un valor lógico (boolean) en una variable caracter (char). La conversión de datos se aplica generalmente sobre los tipos de datos numéricos.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. long. Pag. float y double Ejemplos. A través de la conversión de datos se puede almacenar en una variable valores de tipo diferente al tipo de dato con el que se declaró la variable. 71 .out. float y double. short. short. Conversión implícita de datos en Java: La conversión implícita de datos se da entre un tipo de dato de menor precisión a un tipo de dato de mayor precisión (mas amplio. y la excepción para estos casos se denomina conversión de datos. int. // La siguiente línea no genera error. Pero como toda regla. A continuación se muestra los tipos de datos numéricos ubicados desde el tipo de dato de menor precisión al tipo de dato de mayor precisión: byte. class PrgTipoDato04 { public static void main ( String arg [ ] ) { int numEntero = 5 . } } Observación: Al ejecutar esta aplicación el compilador utiliza la conversión implícita y convierte un número entero (int) en un número entero largo (long). long. Clase PrgTipoDato04 package dominioDeLaAplicacion . mas grande) y son generadas automáticamente por el compilador Java. long numEnteroGrande . esta también tiene su excepción. int. Esto es válido ya que el tipo de dato long en Java es de mayor precisión que el tipo de dato int. También se puede aplicar sobre el tipo de dato char. es decir entre datos de tipo byte. numEnteroGrande = numEntero .println ( numEnteroGrande ) . // Se visualiza 5 System. El cast se realiza colocando entre paréntesis Pag.println ( numReal ) . Estás conversiones son inseguras y puedan dar lugar a errores. 72 . Ing. En ambos casos. } } Observación: Al ejecutar esta aplicación el compilador utiliza la conversión implícita y convierte la letra ‘a’ en un valor real (double) equivalente a su código ASCII. al momento de compilar. La conversión implícita de datos en Java. el programa indicará un error. Conversión explicita de datos en Java (casting): Las conversiones de un tipo de dato de mayor precisón a otro tipo de dato de menor precisión requieren que se coloque en forma explicita en los programas. si el lado derecho de la expresión tiene un tipo de dato más amplio que el lado izquierdo. numReal = caracter . double numReal . por lo que se visualiza 97.out. es necesario que el lado izquierdo de la expresión tenga un tipo de dato más amplio que el resultado de evaluar el lado derecho: numReal = numEntero + 5 .0 (la letra a en código ASCII es 97). Este tipo de conversión de datos se le denomina también cast (casting). Clase PrgTipoDato05 package dominioDeLaAplicacion . Lado izquierdo de la expresión En caso contrario. Juan José Flores Cueto. class PrgTipoDato05 { public static void main ( String arg [ ] ) { char caracter = ‘a’ .0 System. // La siguiente línea no genera error. se da de un tipo de dato de menor precisión a uno de mayor precisión. // Se visualiza 97. La conversión implícita de datos se realiza al mezclar variables de distinto tipo en expresiones matemáticas o al ejecutar instrucciones o sentencias de asignación. // La siguiente línea no genera error. Pag. num2 = 3 . System. Ejemplo.out. class PrgTipoDato06 { public static void main ( String arg [ ] ) { double num1 = 20. // La siguiente línea genera error. 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. Finalmente. int div . } } Clase PrgTipoDato07 package dominioDeLaAplicacion . div = ( int ) ( num1 / num2 ) . entre otras.println ( div ) . } } Observación: Al ejecutar esta aplicación el compilador utiliza la conversión explícita (casting) para poder almacenar el resultado de una división de numeros reales (double) en una variable entera (int). 73 .out. System. div = num1 / num2 . Clase PrgTipoDato06 package dominioDeLaAplicacion . // Se visualiza 6.ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS el tipo de dato al que se desea convertir el resultado de una expresión. int div . class PrgTipoDato07 { public static void main ( String arg [ ] ) { double num1 = 20.println ( div ) . num2 = 3 . Pag. 74 . Ing. Juan José Flores Cueto. Representación: Para representar la salida o visualización de la información se utiliza: . System En Java. 75 . 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.ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS ESTRUCTURAS LÓGICAS ESTRUCTURAS LÓGICAS DE SECUENCIA Definición: Las Estructuras Lógicas de Secuencia son aquellas en las que una instrucción sigue a otra en secuencia. En diagrama de flujo. Pag.La regla.El símbolo. Tipos: 1. Las instrucciones se ejecutan una a una de tal modo que. se inicia la ejecución de la siguiente hasta completar la ejecución de todas las instrucciones que forman parte de la secuencia.La clase. Este tipo de estructura permite mostrar información a través de un dispositivo de salida de una computadora. Estructura para la salida de información Definición: La salida de información se refiere a la forma o mecanismos que se emplean para poder conocer el resultado de un determinado algoritmo. . ESCRIBIR En pseudocódigo. finalizada la ejecución de una instrucción. . out. Ing. 2. 76 . Se puede utilizar la palabra “print” o “println”. Juan José Flores Cueto.println (“Hola Mundo”).La regla. Representación: Para representar la entrada de datos se utiliza: . Este tipo de estructura permite ingresar datos a través de un dispositivo de entrada de una computadora. y cuando se utiliza la palabra “println” se mostrará la cadena de texto y el cursor se colocará en la siguiente línea. Si desea visualizar la cadena de texto “Hola Mundo” utilizando pseudocódigo y diagrama de flujo. Es importante mencionar que se puede visualizar una cadena de texto. Pag. Estructura para la entrada de datos Definición: La entrada de datos se refiere a la forma o mecanismos que se emplean para ingresar los datos que necesita un algoritmo para procesarlos y obtener. Por ejemplo. LEER En pseudocódigo. la información necesaria. el contenido de una variable o el resultado de una operación matemática. Cuando se utiliza la palabra “print” se mostrará la cadena de texto y el cursor permanecerá al final de la cadena de texto mostrada. En diagrama de flujo.El símbolo.print (“Hola Mundo”). . posteriormente. System.out. deberá realizarlo de la siguiente manera: System. lo realizará de la siguiente manera: ESCRIBIR “Hola Mundo” “Hola Mundo” Si desea codificarlo en el lenguaje de programación Java. Pag. CLASE MÉTODO DESCRIPCIÓN Permite ingresar una leerString() cadena de texto. titulado “Método para la solución de problemas utilizando la programación orientada a objetos – Aspectos básicos”. Lectura. se utilizará una clase en Java desarrollada especialmente para que cumpla dicha finalidad. 77 . La clase Lectura fue desarrollada por la Srta. que esta clase permitirá ingresar datos en forma tradicional y será usada para la codificación de algoritmos en Java. En el Apéndice. se trata en detalle la clase Lectura.La clase. En consecuencia. La clase Lectura va a facilitar el ingreso de datos en forma tradicional. Permite ingresar un leerFloat() número con parte decimal. 1 Esta clase es una implementación mejorada de la clase Math2 Es importante mencionar. Permite ingresar un leerChar() caracter (una sola letra o número) Permite ingresar un leerInt() número entero.class Permite ingresar un leerLong() número entero largo. Lectura En Java. 1 Se puede revisar el uso de la clase Math2 en el primer libro del autor. Permite ingresar un leerDouble() número con parte decimal. Gisella Guzmán.ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS . Es importante mencionar que el lenguaje de programación Java no proporciona una clase que facilite el ingreso de datos en forma tradicional. Representación: Para representar las operaciones aritméticas se utilizan los mismos signos que se emplean en la aritmética tradicional (+. /). aparecer entre las reglas INICIO y FIN. Estructura para operaciones aritméticas y de cálculo Definición: Las operaciones aritméticas y de cálculo se refieren a la forma o mecanismos que se emplean para poder procesar los datos ingresados y obtener la información necesaria. Juan José Flores Cueto. *. 78 . Estas instrucciones se ejecutarán FIN una tras otra... -. Ing. Pag. 3. Suma: + Resta: - Multiplicación: * División: / Las operaciones lógicas se representan de la siguiente manera: En pseudocódigo y diagrama de flujo: Y lógico: Y (AND) O lógico: O (OR) Negación: N (NOT) En Java: Y lógico: && O lógico: || Negación: ~ Formatos: Formato para diseñar algoritmos: Pseudocódigo EXPLICACIÓN: INICIO Todas las instrucciones que son parte de la solución del problema deberán Instrucciones . . y es desde donde se } inicia la ejecución de las } sentencias. principal. Pag.ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS Diagrama de Flujo EXPLICACIÓN: INICIO Todas las instrucciones que son parte de la solución del problema aparecerán entre el siguiente símbolo: Instrucciones . 79 . métodos.... Al conjunto de pasos que forman parte de un algoritmo se les denomina instrucciones. Al conjunto de pasos que forman parte de un programa de computadora se les denomina sentencias.. se puede afirmar class NombreClase { que todas las sentencias que son parte de la solución public static void main (String a[]) { aparecerán dentro de los .. El método main ( ) // sentencias es conocido como el método .. Formato para codificar algoritmos: Lenguaje de Programación Java EXPLICACIÓN: Inicialmente.. Dentro del símbolo se indicará si es el FIN inicio o el fin de la solución con las reglas INICIO o FIN. Las Estructuras Lógicas de Decisión son conocidas también como Estructuras de Selección.. 80 .. Ing. de tal forma que en función de una condición o el valor de una variable. Este tipo de estructura es útil cuando se tiene la posibilidad de escoger una determinada opción. ESTRUCTURAS LÓGICAS DE DECISIÓN Definición: Las Estructuras Lógicas de Decisión son construcciones que permiten alterar el flujo secuencial de una solución. Formato para diseñar algoritmos: Pseudocódigo EXPLICACIÓN: Si la condición resulta verdadera... se pueda desviar la secuencia de la solución entre diferentes alternativas. Juan José Flores Cueto. Tipos: 1. instrucciones. Pag. se ejecutan las instrucciones que se SI (condición) encuentran entre las reglas ENTONCES ENTONCES y FINSI. FINSI” permite alterar el flujo secuencial (o pasos secuenciales) de una solución ejecutando un conjunto de pasos adicionales si el resultado de una condición lógica es verdadera. no se ejecutan las instrucciones que se encuentran entre las reglas ENTONCES y FINSI. FINSI Si la condición resulta falsa. Estructuras lógicas de decisión simple Definición: Una estructura de decisión simple “SI. . Si la condición resulta falsa... no se ejecutan las sentencias que se } encuentran entre las llaves { }. FALSO instrucciones. . se . Si la condición resulta falsa. Formato para codificar algoritmos: Lenguaje de Programación Java EXPLICACIÓN: Si la condición resulta verdadera.... se ejecutan las sentencias que se if (condición) { encuentra entre las llaves { }. sentencias. se ejecutan las VERDADERO instrucciones que se condición ? encuentran en el flujo etiquetado con la regla “VERDADERO”. 81 . Pag. 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”.ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS Diagrama de Flujo EXPLICACIÓN: Si la condición resulta verdadera... . encuentran entre las reglas SINO y FINSI FINSI. en ningún caso se podrá ejecutar ambos grupos. Juan José Flores Cueto. Este tipo de estructura es útil cuando se tiene la necesidad de escoger entre dos posibles opciones. SINO. ejecutando un conjunto de pasos dependiendo del resultado de una condición lógica. Formato para diseñar algoritmos: Pseudocódigo EXPLICACIÓN: Si la condición resulta verdadera.. se ejecuta otro conjunto de pasos. En ningún caso se podrá ejecutar ambos conjuntos de pasos a la vez. Si la condición resulta verdadera. Pag. Estructuras lógicas de decisión doble Definición: Una estructura de decisión doble “SI. 82 .. FINSI” permite alterar el flujo secuencial (o pasos secuenciales) de una solución. Sólo se ejecuta uno de los grupos de instrucción... se ejecutan las instrucciones que se encuentran entre las reglas SI (condición) ENTONCES y SINO.. 2. ENTONCES instrucciones.. Si la condición resulta falsa se SINO ejecutan las instrucciones que se instrucciones. Ing.. se ejecuta un conjunto de pasos. y si la condición resulta falsa. else { sentencias.. se ejecutan las instrucciones que se encuentran en el flujo etiquetado con la regla “FALSO”... . 83 .. instrucciones instrucciones Si la condición resulta falsa. Pag. se } ejecutan las sentencias que se encuentran entre las llaves { } ubicadas después de la palabra reservada else... .. .ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS Diagrama de Flujo EXPLICACIÓN: Si la condición resulta VERDADERO FALSO verdadera.. .. Formato para codificar algoritmos: Lenguaje de Programación Java EXPLICACIÓN: Si la condición resulta verdadera.. se ejecutan las sentencias que se if (condición) { encuentran entre las llaves { } sentencias. se ejecutan las condición ? instrucciones que se encuentran en el flujo etiquetado con la regla “VERDADERO”. ubicadas después de la palabra } reservada if.. Si la condición resulta falsa.. puede FINCUANDO aparecer como no)... Ing. Si el valor de la variable no es igual a CASO (valor n) : ninguno de los valores colocados instrucciones.. se ejecutan las instrucciones que están OTROS instrucciones. También se define un conjunto de pasos a ejecutar en caso que uno de los valores de la variable no tenga asociado un conjunto de pasos a ejecutar. Formato para diseñar algoritmos: Pseudocódigo EXPLICACIÓN: Si el valor de la variable es igual a uno de los valores colocados después de CUANDO (variable) SEA una de las reglas CASO. 84 . La regla OTROS es opcional (es decir. FINCUANDO” permite alterar el flujo secuencial de una solución ejecutando un conjunto de pasos dependiendo del valor de una variable. mismo. Juan José Flores Cueto.. Estructuras lógicas de decisión múltiple Definición: Una estructura de decisión múltiple “CUANDO. 3. Pag. se ejecutan CASO (valor 1) : las instrucciones que están dentro del instrucciones...... Generalmente.. para cada posible valor que pueda tener la variable se define un conjunto de pasos a ejecutar. Este tipo de estructura es útil cuando se tiene la necesidad de escoger entre más de dos opciones. CASO (valor 2) : instrucciones. dentro de la regla OTROS. después de una de las reglas CASO. Si el valor de la variable no es igual a uno de los valores de las etiquetas de los flujos. El flujo con la regla OTROS es opcional.ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS Diagrama de Flujo variable ? valor 1 valor 2 valor n OTROS instrucciones instrucciones instrucciones instrucciones EXPLICACIÓN: Si el valor de la variable es igual a uno de los valores que tiene como etiqueta el flujo. Pag. se ejecutan las instrucciones que están seguidas del flujo (las que indica la flecha). se ejecuta el flujo que tiene como regla OTROS. 85 . caso contrario. 86 . Cuando se codifique un algoritmo recuerde que se tiene que seguir las reglas del lenguaje de programación que usará. se debe emplear correctamente los formatos establecidos. Es importante tener presente que en Java se deberá usar la palabra reservada break al final de cada bloque de sentencias si se desea que cada alternativa (case) ejecute un grupo de sentencias sin que ejecute el grupo de sentencias de las alternativas (case) que están a continuación. etc). al momento de ejecutar un programa. Juan José Flores Cueto.. después de una de las palabras } reservadas case.. ya que estos constituyen lo que denominamos un “estándar” o acuerdo.. valor switch (variable) { 2. También es importante mencionar que en Java la variable utilizada junto a la palabra reservada switch sólo puede ser de tipo entero o de tipo caracter. break entre las sentencias que se case valor n : ejecutan. se deberá utilizar números enteros después de la palabra reservada case. En caso que la variable sea de tipo caracter (definida con la palabra reservada char)... Cuando se diseñe un algoritmo que necesite utilizar estructuras de decisión. Si la variable es de tipo entero (definida con la palabra reservada int). se deberá utilizar un caracter encerrado entre comillas simples después de la palabra reservada case. se dará con la sorpresa que tendrá errores de sintaxis. Formato para codificar algoritmos: Lenguaje de Programación Java EXPLICACIÓN: Si el valor de la variable es igual a uno de los valores colocados después de la palabra reservada case (valor 1.. final (es decir hasta la llave) a no ser case valor 2 : que encuentre una palabra reservada sentencias. se ejecutan las sentencias que están dentro de la palabra reservada default. Pag.. sentencias. se ejecutan las sentencias que case valor 1 : están dentro del mismo hasta llegar al sentencias.. Ing. La palabra reservada default es opcional (es decir puede aparecer como no). Si el valor de la variable no es igual a ninguno de los valores colocados default : sentencias. Estructura lógica de repetición “DESDE” Definición: Una estructura de repetición “DESDE. Formato para diseñar algoritmos: Pseudocódigo DESDE i = valorInicial HASTA valorFinal INCREMENTA valor instrucción 1 . Una estructura lógica de repetición “DESDE.ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS ESTRUCTURAS LÓGICAS DE REPETICIÓN Definición: Las Estructuras Lógicas de Repetición son construcciones que permiten repetir determinadas partes de una solución. Tipos: 1. instrucción n FINDESDE Pag. en función de una condición o el valor de una variable.. un número determinado de veces o hasta que una condición se cumpla. se pueda repetir un conjunto de pasos un determinado número de veces. . Las Estructuras Lógicas de Repetición son conocidas también como estructuras de iteración o bucles. .. FINDESDE” permite repetir una instrucción.. Este tipo de estructura es útil cuando se necesita repetir una instrucción o bloque de instrucciones un cierto número de veces.. o un bloque de instrucciones. FINDESDE” con frecuencia se utiliza para iteraciones sencillas en donde se repite un bloque de instrucciones un cierto número de veces y después se detiene. de tal forma que. 87 . Juan José Flores Cueto. se ejecuta esta parte y se INCREMENTA (aumenta) el valor de la variable índice “i” según se indique en valor. en este caso. 88 .. Ing. se procede a ejecutar esta parte. EXPLICACIÓN: Esta estructura tiene tres partes: 1. Si la variable índice no es igual a valorFinal.. También existe la posibilidad de reducir el valor de la variable índice “i”. se finaliza la ejecución del DESDE y se continúa con la ejecución de la instrucción ubicada después de la regla FINDESDE. 3. se volverá a ejecutar las instrucciones o bloque de instrucciones ubicadas entre las reglas DESDE y FINDESDE. 2. Incremento: INCREMENTA valor Cada vez que finaliza la ejecución de las instrucciones o bloque de instrucciones ubicadas entre las reglas DESDE y FINDESDE. Inicialización: DESDE i = valorInicial Esta parte se ejecuta una sola vez al momento de iniciar la ejecución de la estructura lógica de repetición DESDE. FINDESDE y permite asignar un valor inicial a la variable “i” o la que se utilice en vez de ésta. El equivalente de esta estructura en diagrama de flujo se muestra a continuación: Pag. Prueba: HASTA valorFinal Una vez que se termina de INCREMENTAR o DECREMENTAR la variable índice. En caso que la variable índice sea igual a valorFinal. es decir si ya llegó HASTA valorFinal. Esta variable funciona como un índice que permite mantener el control sobre el número de veces que se repiten las instrucciones ubicadas entre las reglas DESDE y FINDESDE. Aquí se evalúa si la variable índice es igual a valorFinal. se utiliza la regla DECREMENTA en lugar de la regla INCREMENTA. Ambas reglas se encuentran dentro del símbolo que representa la regla o pauta DESDE. Pag.ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS Diagrama de Flujo DESDE i HASTA z FALSO INCREMENTA x VERDADERO .... la cual se muestra a continuación: El fin de las instrucciones o bloque de instrucciones que forman parte de la regla DESDE.. instrucciones. 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. 89 .. EXPLICACIÓN: Las tres partes de esta estructura se representan en el diagrama de flujo a través de las siguientes reglas: 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. se representa por el siguiente símbolo: Este último símbolo es equivalente a la regla FINDESDE utilizada en pseudocódigo.. . se finaliza la ejecución continuando con la siguiente sentencia. Ing. Es importante indicar que el inicio y fin de la sentencia for se representan con llaves ({ }). Pag. Formato para codificar algoritmos: Lenguaje de Programación Java for ( i = valorInicial .. Al igual que en pseudocódigo y diagrama de flujo. FINMIENTRAS”... En pseudocódigo y diagrama de flujo se utiliza la regla HASTA valorFinal. en el caso que sea falso. al igual que una estructura lógica de repetición “DESDE. permite repetir una instrucción o un bloque de instrucción mientras que una condición se cumpla o ésta sea verdadera. mientras que en Java se utiliza una condición lógica (ejemplo: i >10). } EXPLICACIÓN: En Java. condición . 2.. Si la condición es verdadera. se continúa con la ejecución de las sentencias o bloque de sentencias que pertenecen a la estructura de repetición.. la regla DESDE está representada por la sentencia for. Esta parte constituye la prueba en Java. en Java esta estructura está constituida por tres partes. Juan José Flores Cueto. Estructura lógica de repetición “MIENTRAS” Definición: Una estructura de repetición “MIENTRAS. FINDESDE”. Este tipo de estructura es útil cuando se necesita repetir una instrucción o bloque de instrucciones un número de veces no determinado. 90 .. incremento) { sentencias. nuevamente. FINMIENTRAS y se evalúa. Pag. la condición lógica. FINMIENTRAS y que sólo finalizará cuando la evaluación de la condición lógica resulte falsa.. instrucción n FINMIENTRAS EXPLICACIÓN: Cuando se ejecuta la estructura lógica de repetición MIENTRAS. FINMIENTRAS lo primero que se realiza es la evaluación de la condición lógica ubicada junto a la regla MIENTRAS.. El equivalente de esta estructura en diagrama de flujo se muestra a continuación. FINMIENTRAS y se continúa con la ejecución del algoritmo... se observa donde se ubica la condición lógica y los flujos etiquetados con las reglas “VERDADERO” y “FALSO”. Una vez evaluada la condición lógica. En la figura. .... podemos obtener dos posibles resultados: Si el resultado de evaluar la condición lógica es verdadera. no se ejecutan las instrucciones que están dentro de la estructura lógica de repetición MIENTRAS. se procede a ejecutar las instrucciones que están dentro de la estructura lógica de repetición MIENTRAS. . se ejecutará la estructura lógica de repetición MIENTRAS. Esto significa que mientras la evaluación de la condición lógica resulte verdadera.. Si el resultado de evaluar la condición lógica es falsa.ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS Formato para diseñar algoritmos: Pseudocódigo MIENTRAS (condición) instrucción 1 . 91 . . Ing.. Juan José Flores Cueto. 92 .. } Pag.. .. Diagrama de Flujo FALSO condición ? VERDADERO .... instrucciones. Formato para codificar algoritmos: Lenguaje de Programación Java while (condición) { sentencias. se utiliza una condición lógica (ejemplo: i >10) para verificar si se ejecuta la estructura o no. 3. En la sentencia while.. Este tipo de estructura es útil cuando se necesita repetir una instrucción o bloque de instrucciones un número de veces no determinado. se continúa con la ejecución de las sentencias o bloque de sentencias que pertenecen a la estructura de repetición.. MIENTRAS” ejecuta al menos una vez las instrucciones o bloque de instrucciones antes de probar la condición... Estructura lógica de repetición “HACER” Definición: Una estructura lógica de repetición “HACER.. al igual que en pseudocódigo y diagrama de flujo. la regla MIENTRAS está representada por la sentencia while. FINMIENTRAS” prueba la condición antes de ejecutar la instrucción o bloque de instrucciones.. Es importante indicar que el inicio y fin de la sentencia while se representan con llaves ({ }). permite repetir una instrucción o un bloque de instrucciones mientras que una condición se cumpla o sea verdadera. FINMIENTRAS”. se finaliza la ejecución continuando con la siguiente sentencia. FINDESDE” y una estructura lógica de repetición “MIENTRAS. 93 ... en el caso que sea falso. al igual que una estructura lógica de repetición “DESDE.. La estructura lógica de repetición “HACER. Esta condición lógica constituye la prueba en Java. siendo necesario ejecutar la instrucción o bloque de instrucciones por lo menos una vez.ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS EXPLICACIÓN: En Java. Si la condición es verdadera. lo que hace posible que dichas instrucciones no se ejecuten si la condición es falsa la primera vez que se prueba la condición.. La principal diferencia entre ambos consiste en que la estructura lógica de repetición “MIENTRAS. MIENTRAS”. Pag. MIENTRAS se procede a ejecutar las instrucciones que están dentro de la misma. .. Esto significa que la estructura lógica de repetición HACER. Si al evaluar la condición lógica ésta resulta verdadera. finaliza la ejecución de la estructura. se continúa con la ejecución del algoritmo. instrucción n MIENTRAS (condición) EXPLICACIÓN: Cuando se ejecuta la estructura lógica de repetición HACER. se procede a ejecutar. nuevamente. Formato para diseñar algoritmos: Pseudocódigo HACER instrucción 1 . se realiza la evaluación de la condición lógica ubicada junto a la regla MIENTRAS. Pag. continuando con la siguiente instrucción del algoritmo. MIENTRAS y se evalúa. Ing. MIENTRAS se ejecuta por lo menos una vez antes de ser evaluada la condición lógica... Juan José Flores Cueto.. . caso contrario. Al final. 94 .. las instrucciones que están dentro de la estructura lógica de repetición HACER. Si el resultado de evaluar la condición lógica es falso. se vuelve a ejecutar la estructura. Una vez evaluada la condición lógica se puede obtener dos posibles resultados: Si el resultado de evaluar la condición lógica es verdadero. nuevamente la condición lógica.. Diagrama de Flujo . Pag.. se observa donde se ubica la condición lógica y los flujos etiquetados con las reglas “VERDADERO” y “FALSO”... VERDADERO condición ? FALSO Formato para codificar algoritmos: Lenguaje de Programación Java do { sentencias. instrucciones . .ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS El equivalente de está estructura en diagrama de flujo se muestra a continuación.. } while (condición) . En la figura..... 95 . Es importante indicar que el inicio y fin de la sentencia do se representan con llaves ({ }). 96 . Pag. en el caso que sea falso. EXPLICACIÓN: En Java. En la sentencia do. Ing. se finaliza la ejecución. se vuelve a ejecutar las sentencias o bloque de sentencias que pertenecen a la estructura de repetición. para verificar si se vuelve a ejecuta la estructura o no. Si la condición es verdadera. continuando con la siguiente sentencia. Esta condición lógica constituye la prueba en Java. se utiliza una condición lógica (ejemplo: i >10) al final de la estructura. Juan José Flores Cueto. la regla HACER está representada por la sentencia do. al igual que en pseudocódigo y diagrama de flujo. Esta sentencia permite salir anticipadamente de una iteracción de un bucle. es decir. Pag. En Java. 97 . sin analizar la condición y sin ejecutar el resto de código del cuerpo del bucle. 1. esta sentencia permite que el control de la ejecución de la solución vuelva al método llamante. esta instrucción de bifurcación es conocida como la sentencia continue. cuando se encuentra la sentencia continue se ejecuta la siguiente iteracción del bucle sin procesar el resto del código. esta instrucción de bifurcación es conocida como la sentencia break y tiene tres usos: ƒ Permite finalizar una secuencia de sentencias en un switch (específicamente en el case).ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS Instrucciones de bifurcación: Muchas veces es necesario cambiar o alterar el flujo normal de ejecución de una solución a otra parte de la misma. 3. esta instrucción de bifurcación es conocida como la sentencia return. Esta sentencia se utiliza para volver explícitamente de un método. Es decir. se utilizan las instrucciones de bifurcación o salto. Instrucción “CONTINUAR” En Java. ƒ Se utiliza para salir de un bucle. ƒ Se emplea para proporcionar un mecanismo que permita cambiar el flujo de ejecución a otra parte de la solución (equivalente a un goto en otros lenguajes de programación). 2. Instrucción “RETORNAR” En Java. Para esto. Instrucción “TERMINAR”. 98 . “LEER” “SI” “DESDE” “TERMINAR” “ESCRIBIR” “SI / SINO” “MIENTRAS” “CONTINUAR” “PROCESAR” “CUANDO” “HACER” “RETORNAR” Pag. Las estructuras lógicas fundamentales y las instrucciones de bifurcación se resumen a continuación: Estructuras Lógicas. Estructuras Lógicas Estructuras Lógicas Estructuras Lógicas Instrucciones de Secuencia. para luego ser codificados en un lenguaje de programación. de Repetición. de Decisión. Ing. se pueden desarrollar algoritmos de tal forma que estos puedan ser diseñados en pseudocódigo o diagrama de flujo. de Bifurcación. Juan José Flores Cueto. Mapa de Estructuras Lógicas detallado: Utilizando las estructuras lógicas fundamentales y las instrucciones de bifurcación. 2 y 3) y algoritmo (paso 4). solucionará el paquetes respectivo. solución del problema. Sin embargo. (Utilice UML). • Definir las clases que serán parte de la solución del problema. 99 . Se de entrada (entrada). En forma general. (Utilice UML). se presentan las etapas del Método de las 6’D con sus respectivos pasos. Esto permite presentar una mayor cantidad de problemas con sus respectivas codificaciones. la Etapa 03 .ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS MÉTODO DE LAS 6´D – ETAPAS Y PASOS A continuación. para los siguientes problemas hasta el final del presente capítulo (capítulo II). solo se ha incluido la Etapa 04 – “Desarrollo de la solución”. ENUNCIADO DEL PROBLEMA Etapa 02 Etapa 03 Etapa 04 Definición Diseño Desarrollo Solución Solución Solución • Determinar la información deseada (salida). mientras que en la Etapa 04 - “Desarrollo de la solución” se tiene la parte de codificación (paso 1). Establecer la dependencia. • Determinar el nombre del • Codificar el diseño de la • Determinar los datos proyecto. • Diseñar el algoritmo para el método principal. Pag. y para los problemas del siguiente capítulo (capítulo III). problema (proceso). Se utiliza pseudocódigo. Dichas etapas y pasos han sido desarrollados en su totalidad en los primeros 22 problemas. • Definir los paquetes y utiliza el lenguaje de • Establecer como se desarrollar el diagrama de programación Java. También se puede utilizar esta división en el desarrollo de las soluciones.“Diseño de la lógica” se divide en dos partes: modelamiento (paso 1. Ing. Juan José Flores Cueto. Pag. 100 . 1.Diseño de la lógica. ‰ Resultado deseado: Mostrar mensaje “Hola bienvenidos”. El mensaje a mostrar será “Hola bienvenidos”. ‰ Datos necesarios: Ninguno. Nombre del Proyecto: ProyMensaje 2.Descripción del problema. Etapa 03 . Etapa 02 – Definición de la solución. Paquete y clase DominioDeLaAplicacion PrgMensaje main() Pag. Definición de Paquete y Clase. ‰ Procesamiento: El mensaje será almacenado en una variable (mensaje) y posteriormente mostrado. Desarrollar un proyecto que permita mostrar un mensaje por la pantalla. 101 . Para solucionar el problema se desarrollarán las especificaciones del proyecto en UML y el algoritmo en pseudocódigo.ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Problema 01 Etapas para la solución de un problema: Etapa 01 . Aunque es sencillo. mensaje = “ Hola bienvenido ” .método main() ENTRADA: SALIDA: mensaje INICIO Algoritmo para el método main ( ) diseñado en TEXTO mensaje mensaje = “ Hola bienvenido ” pseudocódigo. 102 . Ing. Diseño de algoritmo para el método principal Algoritmo PrgMensaje . System. podemos apreciar los elementos básicos de un programa en Java. se visualiza en la pantalla el mensaje “Hola Bienvenido”. */ package dominioDeLaAplicacion . Una vez que se ejecute este programa. 3. Clase PrgMensaje /* Este es el primer programa.out. class PrgMensaje { // La ejecución empieza en el método main. Juan José Flores Cueto. La codificación se desarrolla utilizando el lenguaje de programación Java.print (mensaje) . ESCRIBIR mensaje FIN Etapa 04 – Desarrollo de la Codificación. public static void main ( String arg [ ] ) { String mensaje . } } Pag. 103 . se utiliza el símbolo igual (=). el nombre es PrgMensaje. Observe que se ha definido la variable mensaje como una variable de salida. A continuación: SALIDA: En esta parte se hace referencia a todas las variables. el nombre de la clase y el método main ( ). A continuación. Observe que la primera letra se escribe con mayúscula. La primera línea: ALGORTIMO PrgMensaje Está referida al nombre del algoritmo. A continuación: ESCRIBIR mensaje Pag. Luego tenemos: ENTRADA: En esta parte se hace referencia a todas las variables. En este caso. A continuación: TEXTO mensaje Esta línea está referida al paso 1 del algoritmo diseñado en pseudocódigo.ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Análisis de la solución: En primer lugar. en el cual se codifica la solución. se definió el nombre del proyecto. Recuerde que. SALIDA: mensaje Luego tenemos: INICIO Esta palabra permite indicar el inicio de los pasos que constituyen la solución al problema planteado. analizaremos el algoritmo del método main ( ) diseñado en pseudocódigo para la solución del problema anterior. para asignar un valor a una variable. cuya función en el algoritmo es almacenar datos de salida. se estableció el nombre del paquete. Aquí se declara que se utilizará una variable de nombre mensaje cuyo tipo de dato es TEXTO o cadena. Luego tenemos: mensaje = “ Hola bienvenidos ” Esta línea está referida al paso 2 del algoritmo diseñado en pseudocódigo. Aquí se asigna el valor “ Hola bienvenidos ” a la variable mensaje. cuya función en el algoritmo es almacenar datos de entrada. Observe que no se ha definido ninguna variable de entrada. Es decir. Juan José Flores Cueto. Ahora. Ing. analicemos cada línea de la codificación del algoritmo en el lenguaje de programación Java: En primer lugar. Finalmente: FIN Esta palabra permite indicar el fin de los pasos que constituyen la solución al problema planteado. Esta línea está referida al paso 3 del algoritmo diseñado en pseudocódigo. Aunque es sencillo podemos apreciar los elementos básicos de un programa en Java. En nuestro caso. En problemas grandes se utilizan los comentarios para explicar para qué sirve cada característica del programa y cómo éstas se ejecutan. */ Este es un comentario. Es decir. Los comentarios no son ejecutados. Pag. el comentario nos permite identificar el programa. y su propósito es describir o explicar el objetivo de un programa a cualquiera que lea el código fuente. 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”. se muestra “ Hola bienvenidos ” . valor que fue asignado a la variable en el paso 2. Todo aquello que se escribe entre los dos símbolos de comentario de múltiples líneas /*………. En Java existen tres tipos de comentarios. A través de la palabra ESCRIBIR se muestra el contenido de la variable mensaje. Java le permite colocar comentarios en el código fuente de los programas. Tal como la mayoría de lenguajes de programación. se puede utilizar los comentarios para describir paso a paso lo que hace el programa. Este tipo de comentario comienza con una barra seguida de un asterisco (/*) y termina donde aparece un asterisco seguido de una barra (*/). */ es ignorado al momento de ejecutar el programa. Es decir. El que se acaba de mostrar se llama comentario de múltiples líneas. Los comentarios de múltiples líneas pueden tener una o varias líneas de longitud. observamos que el programa empieza con las siguientes líneas: /* Este es el primer programa. 104 . el final del algoritmo. 105 . la cual indica el inicio del cuerpo de la misma. A continuación encontramos el nombre de la clase PrgMensaje. lo cual nos indica que se declara una clase. el nombre del paquete es “dominioDeLaAplicacion”. La siguiente línea del programa es: public static void main ( String arg [ ] ) { Pag. La siguiente línea del programa es: // La ejecución empieza en el método main.ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Observemos la siguiente línea de código: package dominioDeLaAplicacion . En la siguiente línea de código: class PrgMensaje { Observe que en la línea de código anterior se utiliza la palabra reservada class. Finalmente. seguido del nombre se coloca una llave de apertura ( { ). Esta línea especifica el paquete al cual pertenecerá la clase que se creará con la palabra reservada class. El nombre del paquete está a continuación de la palabra reservada package. Los comentarios de una sola línea comienzan con dos barras ( // ) y terminan al final de la línea. Usa el segundo tipo de comentario disponible en Java y se llama comentario de una sola línea. En este caso. Este también es un comentario. se debe de anteponer al nombre de la variable la palabra String. para declarar una variable de tipo TEXTO o cadena. De hecho. Además. class PrgMensaje { public static void main ( String arg [ ] ) { } } La siguiente línea del programa es: String mensaje . A través de esta sentencia se asigna un valor a la variable. Toda clase en Java. ). podemos decir que para desarrollar un programa básico en Java necesitamos definir un paquete. En resumen. a la variable mensaje se le asigna el valor “ Hola bienvenido ”. deberá tener un método main ( ) exactamente como ha sido escrito. Recuerde que esto se realizó con las siguientes líneas de código: package dominioDeLaAplicacion . Esta línea de código es conocida como la firma del método main ( ) o método principal. también se debe especificar el tipo de dato que la variable puede almacenar. todas las variables deben ser declaradas antes de ser utilizadas (lo que no es necesario realizar en las herramientas utilizadas para diseñar algoritmos). Para asignar valor a una Pag. que deseamos tenga la posibilidad de ejecutarse. Ing. debe tener un valor asignado. antes de ser utilizada. La siguiente línea del programa es: mensaje = “ Hola bienvenido ” . Juan José Flores Cueto. todas las sentencias en Java terminan en punto y coma. En este caso. el tipo de la variable mensaje es TEXTO o cadena. En este caso. A través de esta línea se declara el uso de la variable mensaje de tipo TEXTO o cadena. una clase y un método principal o método main ( ). En Java. Es importante mencionar que esta línea de código termina en punto y coma ( . 106 . En Java. Es importante mencionar que una variable. debido a que Java diferencia las letras mayúsculas de las letras minúsculas. La siguiente línea del programa es: System. se utiliza el signo igual ( = ).ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS variable. De esto se deduce. De hecho. Esta es una sentencia de salida por la consola. Las dos últimas líneas del programa son: } } La primera indica que el método main ( ) ha terminado y la segunda indica el final de la clase. “ Hola bienvenido ” es una cadena.out. que las siguientes líneas de código se utilizarán en todos los programas que se desarrollen. En Java se crea una cadena cuando se encierra una secuencia de caracteres entre comillas. es dominioDeLaAplicacion y PrgMensaje respectivamente. también uno puede visualizar cadenas y los resultados de operaciones matemáticas. class PrgMensaje { public static void main ( String arg [ ] ) { } } Pag. Sólo variará el nombre del paquete y el nombre de la clase que. 107 . Hace que el valor de la variable mensaje se visualice por la pantalla. package dominioDeLaAplicacion .print (mensaje) . De esta manera. en este caso. Nombre del Proyecto: ProyOperaciones. Paquete y clase DominioDeLaAplicacion PrgOperaciones main() Pag. finalmente. ‰ Resultado deseado: Mostrar el resultado de las operaciones matemáticas básicas. resta y división de los números 9121236 y 735. restar y dividir los números 9121236 y 735. Para solucionar el problema se desarrollarán las especificaciones del proyecto en UML y el algoritmo en pseudocódigo. Se requiere mostrar el resultado de sumar. ‰ Procesamiento: Los números serán almacenados en variables. Definición de Paquete y Clase. luego se realizarán las operaciones matemáticas y. Etapa 03 . 2.Diseño de la lógica. Juan José Flores Cueto. 108 .Descripción del problema. Problema 02 Etapas para la solución de un problema: Etapa 01 . multiplicar. multiplicación. Ing. 1. ‰ Datos necesarios: Ninguno.Definición de la solución. se mostrarán los resultados de dichas operaciones. Etapa 02 . suma. System.método main() ENTRADA: SALIDA: suma.divi INICIO NUMERO num1=9121236. multi. La codificación se desarrolla utilizando el lenguaje de programación Java.out. System.out.num2 divi = num1 / num2 ESCRIBIR “La suma es ” + suma ESCRIBIR “La multiplicación es ” + multi ESCRIBIR “La resta es ” + resta ESCRIBIR “La división es ” + divi FIN Etapa 04 .out. 109 .println (“La multiplicación es: ” + multi). divi suma = num1 + num2 multi = num1 * num2 resta = num1 . num2=735 NUMERO suma. multi = num1 * num2. num2=735. class PrgOperaciones { // la ejecución empieza en main. suma = num1 + num2. Clase PrgOperaciones package dominioDeLaAplicacion. resta. double divi. System.out.println (“La resta es: ” + resta). resta. System. } } Pag.println (“La suma es: ” + suma).Desarrollo de la Codificación.ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS 3.println (“La división es: ” + divi). multi. resta = num1 – num2. public static void main ( String arg[ ] ) { long num1=9121236. suma. Diseño de algoritmo para el método principal. resta. Algoritmo PrgOperaciones . multi. divi = (double) (num1) / num2. 1. Ing.Descripción del problema. de una cantidad expresada en dólares. 2. expresado en dólares. Diagrama de paquetes Pag. en nuevos soles. ‰ Datos necesarios: El monto en dólares y el tipo de cambio. Ingresar la cantidad en dólares y el tipo de cambio. Convertir y mostrar una cantidad de dinero. en su equivalente en nuevos soles. Para solucionar el problema se desarrollarán las especificaciones del proyecto en UML y el algoritmo en pseudocódigo.Diseño de la lógica. Problema 03 Etapa 01 . se calculará el equivalente en nuevos soles utilizando la siguiente operación: soles = dolares * tipo El resultado se almacenará en una variable (soles) para luego ser mostrada por pantalla. Definición de Paquetes y desarrollo de Diagrama de Paquetes. Nombre del Proyecto: ProyDolaresSoles. ‰ Procesamiento: El monto en dólares y el tipo de cambio serán ingresados por teclado y almacenados en dos variables (dolares y tipo respectivamente).Definición de la solución. ‰ Resultado deseado: Mostrar el equivalente. 110 . Luego. Etapa 02 . Juan José Flores Cueto. Etapa 03 . Definición de las Clases. tipo SALIDA: soles INICIO NUMERO dolares. 111 . tipo soles = dolares * tipo ESCRIBIR soles FIN Pag. Clases Clases dominioDeLaAplicacion biblioteca 4. Algoritmo PrgDolaresSoles . Diseño de algoritmo para el método principal. soles LEER dolares. tipo.método main ( ) ENTRADA: dolares.ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS 3. print ( “ Ingrese una cantidad de dólares: ” ) .Lectura . System.out. Etapa 04 . soles = dolares * tipo .Desarrollo de la Codificación. Juan José Flores Cueto. import biblioteca. System. 112 . tipo. La codificación se desarrolla utilizando el lenguaje de programación Java. Ing. } } Pag.println ( “ Cantidad equivalente en soles es: ” + soles) .leerDouble ( ) . class PrgDolaresSoles { public static void main (String arg[]) { double dolares. soles . dolares = Lectura. Clase PrgDolaresSoles package dominioDeLaAplicacion . System.leerDouble ( ) .print ( “ Ingrese tipo de cambio del dólar: ” ) . tipo = Lectura.out.out. Para solucionar el problema se desarrollarán las especificaciones del proyecto en UML y el algoritmo en pseudocódigo.Descripción del problema. 113 . Definición de Paquetes y desarrollo de Diagrama de Paquetes. Etapa 02 . n3 y n4 respectivamente). Ingresar las notas n1. ‰ Datos necesarios: Las notas del alumno (en este caso tenemos 4 notas). Diagrama de paquetes Pag. n2. ‰ Resultado deseado: Mostrar la nota final de un determinado alumno. Luego. 2.Definición de la solución. ‰ Procesamiento: Las notas serán ingresadas por teclado y almacenadas en variables (n1. Etapa 03 . n2. Utilizar la siguiente fórmula: nf = (n1 + n2 + n3 + (n4 * 2)) / 5. Nombre del Proyecto: ProyNotaFinal. 1.Diseño de la lógica.ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Problema 04 Etapa 01 . se realizará el cálculo de la nota final sobre la base de la siguiente fórmula: nf = ( n1 + n2 + n3 + ( n4 * 2) ) / 5 El resultado se almacenará en una variable (nf) para luego ser mostrada por pantalla. n3 y n4 a través del teclado. Calcular la nota final que ha obtenido un alumno en el curso de programación avanzada. Juan José Flores Cueto. n4 nf = ( n1 + n2 + n3 + ( n4 * 2 ) ) / 5 ESCRIBIR nf FIN Pag. n2 = 0. Ing. n3 = 0. n4 = 0 LEER n1. Algoritmo PrgNotaFinal . n3. n3. n2. 114 . Definición de las Clases. Diseño de algoritmo para el método principal. n2. 3. Clases Clases dominioDeLaAplicacion biblioteca 4. n4 SALIDA: nf INICIO NUMERO n1 = 0.método main ( ) ENTRADA: n1. Lectura .print ( “ Ingrese la nota 4 del alumno: ” ) . 115 .out.print ( “ Ingrese la nota 2 del alumno: ” ) .leerDouble ( ) . n3 = Lectura.out. n2 = Lectura. n4 = 0. n2 = 0. n4 = Lectura. System. System.out. System.print ( “ El promedio obtenido por el alumno es : ” ) . System.leerDouble ( ) . La codificación se desarrolla utilizando el lenguaje de programación Java. System. n1 = Lectura.out. class PrgNotaFinal { public static void main (String arg[]) { double n1 = 0. import biblioteca. Clase PrgNotaFinal package dominioDeLaAplicacion . System.leerDouble ( ) . n3 = 0.print ( “ Ingrese la nota 1 del alumno: ” ) .println ( nf ) .Desarrollo de la Codificación.ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Etapa 04 .print ( “ Ingrese la nota 3 del alumno: ” ) . nf = 0 .leerDouble ( ) . nf = ( n1 + n2 + n3 + ( n4 * 2)) / 5 .out.out. } } Pag. Luego. Etapa 03 . utilizando las siguientes operaciones: desc = sueldo * 0. Diagrama de paquetes Pag. Definición de Paquetes y desarrollo de Diagrama de Paquetes. Ingresar el sueldo de un obrero de la empresa “La Poderosa S. ‰ Resultado deseado: Mostrar el total de descuento y el sueldo a cobrar de un obrero de la empresa. ‰ Datos necesarios: El sueldo total del obrero.2 pago = sueldo – desc Los resultados se almacenarán en las variables (desc y pago respectivamente) para luego ser mostradas por pantalla. 1. Nombre del Proyecto: ProySueldoObrero. Juan José Flores Cueto.Diseño de la lógica.” y calcular su respectivo descuento del 15% por concepto de impuestos y el 5% por concepto de cafetería. Se deberá visualizar por pantalla el total de descuentos y el sueldo a cobrar.Definición de la solución. Problema 05 Etapa 01 . 2. Ing.A. 116 . se realizarán los cálculos del descuento y del sueldo a cobrar del obrero. ‰ Procesamiento: El sueldo total será ingresado por teclado y almacenado en una variable (sueldo).Descripción del problema. Etapa 02 . Para solucionar el problema se desarrollarán las especificaciones del proyecto en UML y el algoritmo en pseudocódigo. desc ESCRIBIR desc.2 pago = sueldo . Algoritmo PrgSueldoObrero . 117 . Clases Clases dominioDeLaAplicacion biblioteca 4.método main ( ) ENTRADA: sueldo SALIDA: desc. Definición de las Clases. pago INICIO NUMERO sueldo = 0.ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS 3. desc = 0. Diseño de algoritmo para el método principal. pago = 0 LEER sueldo desc = sueldo * 0. pago FIN Pag. System.out. System. Ing. sueldo = Lectura. } } Pag. 118 . pago = 0 .out. import biblioteca. Clase PrgSueldoObrero package dominioDeLaAplicacion .Desarrollo de la Codificación.out.println ( desc + “ soles ” ) . System. // calculando el monto a pagar pago = sueldo – desc . La codificación se desarrolla utilizando el lenguaje de programación Java. Etapa 04 .out.leerDouble ( ) . System.2 . class PrgSueldoObrero { public static void main (String arg[]) { double sueldo = 0.println ( “ El sueldo a pagar es: ” + pago + “ soles ” ) . desc = 0.print ( “ Ingrese el sueldo de un obrero: ” ) . Juan José Flores Cueto. // Calculando el descuento ( 20% ) desc = sueldo * 0.print ( “ El total de descuento es: ” ) .Lectura . Para solucionar el problema se desarrollarán las especificaciones del proyecto en UML y el algoritmo en pseudocódigo. Diagrama de paquetes Pag. Etapa 03 . 2. ‰ Datos necesarios: La temperatura en grados Celsius. de acuerdo a la siguiente fórmula: F = (9/5) * C + 32.Descripción del problema. 1.Diseño de la lógica. Nombre del Proyecto: ProyTemperatura.ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Problema 06 Etapa 01 . ‰ Resultado deseado: Calcular y mostrar la temperatura en grados Fahrenheit. ‰ Procesamiento: La temperatura en grados Celsius será ingresada y almacenada en una variable (gradosCel). Convertir la temperatura de grados Celsius a grados Fahrenheit. El resultado será almacenado en una variable (gradosFar) para luego ser mostrado por pantalla. Definición de Paquetes y desarrollo de Diagrama de Paquetes.Definición de la solución. 119 . Etapa 02 . luego se realizará el cálculo de la temperatura en grados Fahrenheit de acuerdo a la siguiente fórmula: gradosFar = (9/5) * gradosCel + 32. gradosFar = 0 LEER gradosCel gradosFar = ( 9 / 5 ) * gradosCel + 32 ESCRIBIR gradosFar FIN Pag. Diseño de algoritmo para el método principal. Juan José Flores Cueto. Algoritmo PrgTemperatura . 3. Definición de las Clases.método main ( ) ENTRADA: gradosCel SALIDA: gradosFar INICIO NUMERO gradosCel = 0. Ing. Clases Clases dominioDeLaAplicacion biblioteca 4. 120 . ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Etapa 04 .out.Desarrollo de la Codificación.println ( “ La temperatura en grados Fahrenheit es: " + gradosFar) .Lectura . Clase PrgTemperatura package dominioDeLaAplicacion .leerDouble ( ) .out. class PrgTemperatura { public static void main ( String arg[] ) { double gradosCel = 0. System. import biblioteca.print ( “ Ingrese la temperatura en grados Celsius: " ) . gradosFar = 0 . } } Pag. gradosCel = Lectura. gradosFar = ( 9 / 5 ) * gradosCel + 32 . 121 . La codificación se desarrolla utilizando el lenguaje de programación Java. System. Etapa 03 . Nombre del Proyecto: ProyUtilidad. Etapa 02 . Problema 07 Etapa 01 . Leer el costo de un artículo y su precio de venta. precioVta).Descripción del problema. Juan José Flores Cueto. luego se realizará el cálculo de la utilidad del artículo de acuerdo a la siguiente fórmula: utilidad = precioVta . Definición de Paquetes y desarrollo de Diagrama de Paquetes.Definición de la solución. Calcular y mostrar su utilidad.costo El resultado será almacenado en una variable (utilidad) para luego ser mostrado por pantalla. Ing. 2. Para solucionar el problema se desarrollarán las especificaciones del proyecto en UML y el algoritmo en pseudocódigo. ‰ Resultado deseado: Calcular y mostrar la utilidad de un artículo.Diseño de la lógica. 122 . ‰ Procesamiento: El costo y el precio de venta del artículo serán ingresados y almacenados en variables (costo. 1. ‰ Datos necesarios: El costo y el precio de venta del artículo. Diagrama de paquetes Pag. Diseño de algoritmo para el método principal. Definición de las Clases. Algoritmo PrgUtilidad .costo ESCRIBIR utilidad FIN Pag.ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS 3. Clases Clases dominioDeLaAplicacion biblioteca 4. precioVta = 0. precioVta SALIDA: utilidad INICIO NUMERO costo = 0. 123 .método main ( ) ENTRADA: costo. precioVta utilidad = precioVta . utilidad = 0 LEER costo. precioVta = 0.out.out. } } Pag.Lectura .costo . System. Etapa 04 . precioVta = Lectura.leerDouble ( ) . Juan José Flores Cueto. 124 . Ing. Clase PrgUtilidad package dominioDeLaAplicacion .print ( “ Ingrese el precio de venta del artículo: ” ) . System. System. import biblioteca. utilidad = 0 . class PrgUtilidad { public static void main ( String arg[] ) { double costo = 0.println ( “ La utilidad del artículo es: s/.print ( “ Ingrese el costo del artículo: ” ) . utilidad = precioVta . La codificación se desarrolla utilizando el lenguaje de programación Java. costo = Lectura.Desarrollo de la Codificación.leerDouble ( ) .out. ” + utilidad + “ soles ” ) . Etapa 03 . Si la nota final resulta mayor que 13 entonces se almacenará el mensaje “Felicitaciones” en una variable (mensaje).Definición de la solución. Etapa 02 . Para solucionar el problema se desarrollarán las especificaciones del proyecto en UML y el algoritmo en pseudocódigo. Diagrama de paquetes Pag. Finalmente. 2. Nombre del Proyecto: ProyNotaFinal2. Definición de Paquetes y desarrollo de Diagrama de Paquetes. 125 . sabiendo que se tienen sólo dos notas. ‰ Datos necesarios: Las dos notas del alumno. se muestra la nota final y el mensaje. ‰ Resultado deseado: Mostrar nota final y un mensaje de felicitaciones si la nota final es mayor a 13. 1. ‰ Procesamiento: Las notas se ingresarán por el teclado y serán almacenadas en variables (nota1 y nota2). Calcular y mostrar la nota final (nf) de un alumno.Diseño de la lógica. Si el alumno obtiene una nota final mayor a 13 se deberá visualizar un mensaje de felicitaciones.Descripción del problema. luego se realizará el cálculo de la nota final: nf = ((nota1 + nota2) / 2) El resultado se almacena en una variable (nf).ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Problema 08 Etapa 01 . Algoritmo PrgNotaFinal2 . Diseño de algoritmo para el método principal.método main ( ) ENTRADA: nota1. Clases Clases dominioDeLaAplicacion biblioteca 4. nf = 0 TEXTO mensaje = “ ” LEER nota1. Ing. nota2 = 0. mensaje INICIO NUMERO nota1 = 0. mensaje FIN Pag. 3. nota2 SALIDA: nf. Juan José Flores Cueto. 126 . Definición de las Clases. nota2 nf = (nota1 + nota2) / 2 SI ( nf > 13 ) ENTONCES mensaje = “Felicitaciones” FINSI ESCRIBIR nf. Clase PrgNotaFinal2 package dominioDeLaAplicacion . class PrgNotaFinal2 { public static void main ( String arg[] ) { double nota1 = 0. nota2 = Lectura. La codificación se desarrolla utilizando el lenguaje de programación Java.Desarrollo de la Codificación. nf = (nota1 + nota2) / 2 .print ( “ Ingrese la segunda nota: ” ) .out.out. import biblioteca. } } Pag.print ( “ Ingrese la primera nota: ” ) . System. nota2 = 0.ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Etapa 04 .println ( “ La nota final es: ” + nf + “ ” + mensaje ) . nota1 = Lectura. if (nf > 13) { mensaje = “ Felicitaciones ” .leerDouble ( ) . } System. nf = 0 . String mensaje = “ ” . 127 .leerDouble ( ) .out. System.Lectura . Diagrama de paquetes Pag. Nombre del Proyecto: ProySueldoTrabajador. Juan José Flores Cueto. Etapa 02 . ‰ Datos necesarios: El total de horas trabajadas y la tarifa horaria. ‰ Resultado deseado: Mostrar el sueldo de un trabajador. sabiendo que se debe descontar un 10% del sueldo por concepto de impuestos si este es mayor de S/. Etapa 03 .3000 entonces se calcula el sueldo a cobrar restando el 10% del sueldo. luego se realizará el cálculo del sueldo utilizando la siguiente operación: sueldo = horas * tarifa El resultado se almacenará en una variable (sueldo).Descripción del problema.Diseño de la lógica. Ing. 2. El resultado se almacena en la variable sueldo y se muestra a través de la pantala. ‰ Procesamiento: El total de horas trabajadas y la tarifa horaria se ingresarán por teclado y se almacenarán en variables (horas y tarifa).Definición de la solución. 128 . 3000. 1. Calcular y mostrar el sueldo de un trabajador conociendo el número de horas trabajadas y su tarifa horaria. Para solucionar el problema se desarrollarán las especificaciones del proyecto en UML y el algoritmo en pseudocódigo. Definición de Paquetes y desarrollo de Diagrama de Paquetes. Si el sueldo resulta mayor que S/. Problema 09 Etapa 01 . Clases Clases dominioDeLaAplicacion biblioteca 4. tarifa = 0. tarifa SALIDA: sueldo INICIO NUMERO horas = 0.ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS 3. 129 . Algoritmo PrgSueldoTrabajador . Definición de las Clases.método main ( ) ENTRADA: horas. sueldo = 0 LEER horas. tarifa sueldo = horas * tarifa SI ( sueldo > 3000 ) ENTONCES sueldo = sueldo * 0.9 FINSI ESCRIBIR sueldo FIN Pag. Diseño de algoritmo para el método principal. out. double tarifa = 0. 130 . sueldo = 0 . Juan José Flores Cueto. System.Lectura .leerInt ( ) . La codificación se desarrolla utilizando el lenguaje de programación Java.print ( “ Ingrese el total de horas trabajadas: ” ) . sueldo = horas * tarifa . tarifa = Lectura. horas = Lectura.out. class PrgSueldoTrabajador { public static void main ( String arg[] ) { int horas = 0 .Desarrollo de la Codificación. import biblioteca.print ( “ Ingrese la tarifa del trabajador: ” ) . Clase PrgSueldoTrabajador package dominioDeLaAplicacion . Ing.9 .leerDouble ( ) . System.out.println ( “ El sueldo es: ” + sueldo ) . if (sueldo > 3000) { sueldo = sueldo * 0. Etapa 04 . } System. } } Pag. 500 nuevos soles se aplica un descuento de 8%.Diseño de la lógica. Si el monto total resulta mayor a S/. Luego se realizará el cálculo del monto total a pagar (monto total * 1. Diagrama de paquetes Pag. 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). Etapa 02 . Nombre del Proyecto: ProyArticulos.18) y se almacena en una variable (montoPago).500 nuevos soles. Se asume que el IGV es 18%. caso contrario el descuento será de 2%. Etapa 03 . 131 .Definición de la solución. se descuenta el 8%. ‰ Datos necesarios: Monto total. ‰ Resultado deseado: Mostrar monto total a pagar.Descripción del problema. ‰ Procesamiento: El monto total será almacenado en una variable (montoTotal).ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Problema 10 Etapa 01 . Definición de Paquetes y desarrollo de Diagrama de Paquetes. 2. Para solucionar el problema se desarrollarán las especificaciones del proyecto en UML y el algoritmo en pseudocódigo. En caso que el monto total a pagar incluido IGV sea mayor a S/. 1. sino sólo se descontará el 2%. 132 . Clases Clases dominioDeLaAplicacion biblioteca 4. montoPago = 0 LEER montoTotal montoPago = montoTotal * 1. Algoritmo PrgArticulos . Juan José Flores Cueto. Diseño de algoritmo para el método principal.98 FINSI ESCRIBIR montoPago FIN Pag.92 SINO montoPago = montoPago * 0. Definición de las Clases. 3.método main ( ) ENTRADA: montoTotal SALIDA: montoPago INICIO NUMERO montoTotal = 0. Ing.18 SI ( montoPago > 500 ) ENTONCES montoPago = montoPago * 0. System.92 .ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Etapa 04 . 133 . class PrgArticulos { public static void main ( String arg[] ) { double montoTotal = 0. montoPago = montoTotal * 1.Lectura .98 . } System.out. Clase PrgArticulos package dominioDeLaAplicacion . montoTotal = Lectura.leerDouble ( ) .out.Desarrollo de la Codificación. La codificación se desarrolla utilizando el lenguaje de programación Java.println ( montoPago + “ soles ” ) .out. } } Pag.18 . import biblioteca. System. if (montoPago > 500) { montoPago = montoPago * 0.print ( “ Ingrese el monto total: ” ) . } else { montoPago = montoPago * 0.print ( “ El monto total a pagar incluido IGV y descuentos es: ” ) . montoPago = 0 . 2. teniendo como base la tabla mostrada. se mostrará el nuevo sueldo del trabajador.Diseño de la lógica. Problema 11 Etapa 01 . ‰ Procesamiento: La categoría y el sueldo del trabajador serán almacenados en variables (categoria y sueldo). 134 . Leer la categoría y el sueldo de un trabajador. Juan José Flores Cueto. se procederá a calcular el nuevo sueldo del trabajador (nuevoSueldo). Definición de Paquetes y desarrollo de Diagrama de Paquetes. Dependiendo la categoría ingresada. Etapa 03 . Finalmente.Descripción del problema. Para solucionar el problema se desarrollarán las especificaciones del proyecto en UML y el algoritmo en pseudocódigo. ‰ Datos necesarios: La categoría y el sueldo del trabajador. Categoría Aumento 1 25 % 2 15 % 3 10 % 4 05 % Etapa 02 . Muestrar el nuevo sueldo del trabajador. y calcular el aumento correspondiente teniendo en cuenta la siguiente tabla. Nombre del Proyecto: ProyAumentoSueldo. 1. ‰ Resultado deseado: Mostrar nuevo sueldo del trabajador. Diagrama de paquetes Pag. Ing.Definición de la solución. 25 TERMINAR CASO 2 : nuevoSueldo = sueldo * 1. Diseño de algoritmo para el método principal. nuevoSueldo = 0 LEER sueldo. Clases Clases dominioDeLaAplicacion biblioteca 4. 135 . categoria CUANDO categoria SEA CASO 1 : nuevoSueldo = sueldo * 1. sueldo SALIDA: nuevoSueldo INICIO NUMERO categoria = 0.método main ( ) ENTRADA: categoria.10 TERMINAR CASO 4 : nuevoSueldo = sueldo * 1. sueldo = 0. Algoritmo PrgAumentoSueldo .05 TERMINAR OTROS : nuevoSueldo = sueldo FINCUANDO ESCRIBIR nuevoSueldo FIN Pag.ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS 3. Definición de las Clases.15 TERMINAR CASO 3 : nuevoSueldo = sueldo * 1. 15 . break .Lectura . class PrgAumentoSueldo { public static void main ( String arg[] ) { double sueldo = 0. break . nuevoSueldo = 0 .print ( “ Ingrese la categoría del trabajador: ” ) .10 . sueldo = Lectura.out. La codificación se desarrolla utilizando el lenguaje de programación Java.05 . Etapa 04 . Clase PrgAumentoSueldo package dominioDeLaAplicacion .println ( “ El nuevo sueldo del trabajador es: ” + nuevoSueldo ) . import biblioteca. System. switch (categoria) { case 1: nuevoSueldo = sueldo * 1. } } Pag. Juan José Flores Cueto. case 3: nuevoSueldo = sueldo * 1. 136 . case 2: nuevoSueldo = sueldo * 1.Desarrollo de la Codificación.25 . int categoria = 0. Ing. break .print ( “ Ingrese el sueldo del trabajador: ” ) . break . categoria = Lectura. case 4: nuevoSueldo = sueldo * 1. } System. default: nuevoSueldo = sueldo . System.leerDouble ( ) .out.leerInt ( ) .out. Pag.ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Problema 12 Etapa 01 .Definición de la solución. El resultado se almacena en una variable (costoTotal) para luego ser mostrado. Dependiendo del tipo de enfermedad. dias y sexo). si se trata del tercer tipo de enfermedad y el paciente es hombre se procederá a incrementar el 5%. ‰ Procesamiento: El tipo de enfermedad. según los datos de la tabla. de acuerdo a la siguiente operación costoTotal = ( costo * número de días). ‰ Resultado deseado: Mostrar el costo total de un paciente para un hospital. Enfermedad Tipo Costo / Paciente / Día 1 200 2 350 3 420 Etapa 02 . Calcular y mostrar el costo total que representa un paciente para un hospital de acuerdo al tipo de enfermedad. Si se trata del primer tipo de enfermedad y el paciente es mujer se le incrementará el 10%. el número de días y el sexo (1 si es hombre y 2 si es mujer) del paciente se almacenarán en variables (tipoEnfermedad. Adicionalmente deberá considerarse que las mujeres tienen un incremento del 10% para el primer tipo de enfermedad y los hombres tienen un aumento del 5% para el tercer tipo de enfermedad. el número de días de permanencia del paciente y su sexo. ‰ Datos necesarios: El tipo de enfermedad. 137 . se procederá hacer el cálculo del costo que representa para el hospital el paciente.Descripción del problema. Por otro lado. 138 .Diseño de la lógica. Definición de Paquetes y desarrollo de Diagrama de Paquetes. Nombre del Proyecto: ProyHospital. Para solucionar el problema se desarrollarán las especificaciones del proyecto en UML y el algoritmo en pseudocódigo. Definición de las Clases. Ing. Clases Clases dominioDeLaAplicacion biblioteca Pag. Etapa 03 . Diagrama de paquetes 3. 1. 2. Juan José Flores Cueto. 10 FINSI TERMINAR CASO 2 : costoTotal = 350 * dias TERMINAR CASO 3 : costoTotal = 420 * dias SI ( sexo = 1 ) ENTONCES costoTotal = costoTotal * 1. dias. Algoritmo PrgHospital . costoTotal = 0 LEER tipoEnfermedad.ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS 4. 139 . dias. sexo = 0. dias = 0. sexo SALIDA: costoTotal INICIO NUMERO tipoEnfermedad = 0. Diseño de algoritmo para el método principal.método main ( ) ENTRADA: tipoEnfermedad. sexo CUANDO tipoEnfermedad SEA CASO 1 : costoTotal = 200 * dias SI (sexo = 2 ) ENTONCES costoTotal = costoTotal * 1.05 FINSI FINCUANDO ESCRIBIR costoTotal FIN Pag. Lectura .print ( “ Ingrese el número de días que ha estado el paciente: ” ) .out. double costoTotal = 0 . if ( sexo == 2 ) { costoTotal = costoTotal * 1. case 2 : costoTotal = 350 * dias . System. Juan José Flores Cueto. 2= Mujer]: ” ) . import biblioteca.println ( “ El costo total es: ” + costoTotal ) .out. 140 . La codificación se desarrolla utilizando el lenguaje de programación Java.Desarrollo de la Codificación. } } Pag.leerInt ( ) . break . tipoEnfermedad = Lectura. Clase PrgHospital package dominioDeLaAplicacion .leerInt ( ) .10 . dias = Lectura.out. switch ( tipoEnfermedad) { case 1 : costoTotal = 200 * dias . Etapa 04 .out. sexo = 0 . } } System.print ( “ Ingrese el tipo de enfermedad: ” ) . dias = 0.leerInt ( ) . Ing. if ( sexo == 1 ) { costoTotal = costoTotal * 1. System. System. class PrgHospital { public static void main ( String arg[] ) { int tipoEnfermedad = 0. sexo = Lectura.05 . } break . case 3 : costoTotal = 420 * dias .print ( “ Ingrese el sexo del paciente [1=hombre. ‰ Procesamiento: Las tres notas del alumno serán almacenadas en variables (n1.Definición de la solución. Etapa 02 . Diagrama de paquetes 3. las variables auxiliares mayor. 2. Definición de las Clases.ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Problema 13 Etapa 01 . Ingresar tres notas de un alumno. Muestrar las notas ordenadas en forma ascendente. ‰ Datos necesarios: Las tres notas del alumno en cualquier orden. 141 .Descripción del problema. Finalmente. n2 y n3). Clases Clases dominioDeLaAplicacion biblioteca Pag. 1. intermedio y mayor). Nombre del Proyecto: ProyOrdena. Definición de Paquetes y desarrollo del Diagrama de Paquetes. intemedio y menor almacenarán las notas y se mostrarán en orden ascendente. Se utilizarán tres variables auxiliares para almacenar el orden de las notas (menor.Diseño de la lógica. ‰ Resultado deseado: Mostrar las tres notas en forma ascendente. Etapa 03 . intermedio = 0 NUMERO mayor = 0 LEER n1.método main ( ) ENTRADA: n1. Diseño de algoritmo para el método principal. n2 = 0. mayor INICIO NUMERO n1 = 0. n2. n3 SI (n1 > n2) ENTONCES SI (n1 > n3) ENTONCES mayor = n1 SI (n2 > n3) ENTONCES intermedio = n2 menor = n3 SINO intermedio = n3 menor = n2 FINSI SINO mayor = n3 intermedio = n1 menor = n2 FINSI SINO SI (n2 > n3) ENTONCES mayor = n2 SI (n1 > n3) ENTONCES intermedio = n1 menor = n3 SINO intermedio = n3 menor = n1 FINSI SINO mayor = n3 intermedio = n2 menor = n1 FINSI FINSI ESCRIBIR menor. Algoritmo PrgOrdena . n3 SALIDA: menor. Ing. intermedio. Juan José Flores Cueto. intermedio. mayor FIN Pag. 4. n3 = 0. menor = 0. 142 . n2. intermedio = n2 . if (n1 > n2) { if (n1 > n3) { mayor = n1 . menor = n2 . n1 = Lectura.print ( “ Ingrese la tercera nota: ” ) . n3 = 0.Lectura . } else { intermedio = n3 . } } else { mayor = n3 . menor = n1 . n3 = Lectura. System. intermedio = n1 . n2 = Lectura. } } Pag.out. System.out. menor = n1 .print ( “ Ingrese la segunda nota: ” ) .println ( menor + “ ” + intermedio + “ ” + mayor ) . } } else { if (n2 > n3) { mayor = n2 .ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Etapa 04 . n2 = 0. menor = n3 . if (n2 > n3) { intermedio = n2 . import biblioteca. menor = n3 . if ( n1 > n3) { intermedio = n1 .out. class PrgOrdena { public static void main ( String arg[] ) { int n1 = 0.Desarrollo de la Codificación.leerInt ( ) . menor = 0. Clase PrgOrdena package dominioDeLaAplicacion . 143 .leerInt ( ) . } } else { mayor = n3 . } else { intermedio = n3 . intermedio = 0. System.out. menor = n2 .print ( “ Ingrese la primera nota: ” ) .leerInt ( ) . mayor = 0 . } } System. Etapa 02 . La menor de estas notas se guardará en una variable (notaMenor). La suma de las cinco notas se guardará en una variable (sumaNotas). este resultado nos permitirá obtener la categoría del alumno (categoria). n4 y n5). C o D. Juan José Flores Cueto. Según la siguiente tabla: Rango Categoria Desde 17 a 20 A Desde 14 a 16 B Desde 10 a 13 C Desde 00 a 09 D Determinar la categoría del alumno. Problema 14 Etapa 01 . B. n2.Definición de la solución. Ing. ‰ Procesamiento: Las cinco notas del estudiante se ingresan a través del teclado y se almacenan en variables (n1. ‰ Datos necesarios: Las cinco notas del estudiante. para luego ser mostrada por pantalla. n3. ‰ Resultado deseado: Mostrar la categoría del alumno. Un curso se evalúa de la siguiente forma: se toma cinco prácticas calificadas.Descripción del problema. El resultado es almacenado en la variable (promedio). 144 . se determina el promedio de las cuatro notas más altas y se le da al estudiante una categoría que puede ser A. Pag. Se realizará el cálculo del promedio del alumno de la siguiente forma: promedio = ( sumaNotas – notaMenor ) / 4 ). Definición de las Clases. 145 . Clases Clases dominioDeLaAplicacion biblioteca Pag.ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Etapa 03 . 2. Definición de Paquetes y desarrollo del Diagrama de Paquetes.Diseño de la lógica. Nombre del Proyecto: ProyCategoriaAlumno. 1. Diagrama de paquetes 3. 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. Algoritmo PrgCategoriaAlumno . 4. sumaNotas = 0 NUMERO notaMenor = 0. n5 SALIDA: categoria INICIO NUMERO n1 = 0. promedio = 0 TEXTO categoria = ‘ ’ LEER n1. 146 . n4 = 0. n3 = 0. n4. n5 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 . n5 = 0. n2. n3. n2 = 0. n3. Ing. Diseño de algoritmo para el método principal. n4. n2.método main ( ) ENTRADA: n1. Juan José Flores Cueto. 147 . n1 = Lectura.leerDouble ( ) .out.out.leerDouble ( ) . n2 = 0. } else { if (promedio <= 16 && promedio >= 14) { categoria = ‘B’ . promedio = (sumaNotas . n4 = 0. System.out. if (notaMenor > n3) notaMenor = n3 . double notaMenor = 0. import biblioteca. notaMenor = n1 . nota: ” ) . } else { if (promedio <= 13 && promedio >= 10) { categoria = ‘C’ . sumaNotas = n1 + n2 + n3 + n4 + n5 . nota: ” ) . } } } } System. } else { if (promedio <= 10 && promedio >= 0) { categoria = ‘D’ . if (notaMenor > n5) notaMenor = n5 . n3 = 0. System. promedio = 0 . sumaNotas = 0 . Clase PrgCategoriaAlumno package dominioDeLaAplicacion . n4 = Lectura.print ( “ Ingrese la 3ra.out.Desarrollo de la Codificación. } } Pag. if (promedio <= 20 && promedio >= 17) { categoria = ‘A’ . class PrgCategoriaAlumno { public static void main ( String arg[] ) { double n1 = 0.print ( “ Ingrese la 4ta. nota: ” ) . nota: ” ) .Lectura .ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Etapa 04 . System.notaMenor) / 4 .out. System.leerDouble ( ) .out.print ( “ Ingrese la 5ta. if (notaMenor > n4) notaMenor = n4 . n5 = Lectura.leerDouble ( ) .print ( “ Ingrese la 2da.println ( “ La categoría del alumno es: ” + categoria ) . if (notaMenor > n2) notaMenor = n2 . nota: ” ) .print ( “ Ingrese la 1ra. n5 = 0. n2 = Lectura. System.leerDouble ( ) . char categoria = ‘ ’ . n3 = Lectura. Nombre del Proyecto: ProyCategoriaPostulante. El resultado es almacenado en una variable (categoria) para luego ser mostrada por pantalla. .Descripción del problema. 148 . Si es hombre o mujer asignaremos su respectiva categoría dependiendo de la edad del postulante. Ing.Diseño de la lógica. o Categoría FB en caso contrario. Juan José Flores Cueto. categorizan a los postulantes en función del sexo y de la edad. 1. Definición de Paquetes y desarrollo del Diagrama de Paquetes.Si la persona es de sexo masculino: o Categoría MA si tiene menos de 25 años.Si la persona es de sexo femenino: o Categoría FA si tienen menos de 23 años. Diagrama de paquetes Pag. En una oficina de empleados. 2. Etapa 02 . Problema 15 Etapa 01 . ‰ Datos necesarios: El sexo y la edad del postulante.Definición de la solución. Etapa 03 . ‰ Resultado deseado: Mostrar la categoría del postulante. de acuerdo a lo siguiente: . o Categoría MB en caso contrario. ‰ Procesamiento: El sexo y la edad del postulante se ingresan a través del teclado y se almacenan en variables (sexo y edad). edad CUANDO sexo SEA 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. categoria = 0 LEER sexo. Definición de las Clases. edad SALIDA: categoria INICIO NUMERO edad = 0 TEXTO sexo = ‘F’. 149 . Clases Clases dominioDeLaAplicacion biblioteca 4.ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS 3.método main ( ) ENTRADA: sexo. Diseño de algoritmo para el método principal. Algoritmo PrgCategoriaPostulante . Desarrollo de la Codificación. System. } } Pag. break . Juan José Flores Cueto. 150 . } System. import biblioteca. System.out. else categoria = “FB” . Clase PrgCategoriaPostulante package dominioDeLaAplicacion .leerChar ( ) . else categoria = “MB” .Lectura . char sexo = ‘F’ . case ‘m’ : case ‘M’ : if (edad < 25) categoria = “MA” . String categoria = “ ” . Ing.out.print ( “ Ingrese sexo del postulante [ F/M ]: ” ) .leerInt ( ) .print ( “ Ingrese la edad del postulante: ” ) .out. switch (sexo) { case ‘f’ : case ‘F’ : if (edad < 23) categoria = “FA” . class PrgCategoriaPostulante { public static void main ( String arg[] ) { int edad = 0 .println ( “ La categoría del postulante es: ” + categoria ) . Etapa 04 . edad = Lectura. sexo = Lectura. 151 . ‰ Resultado deseado: Mostrar la nota final de todos los alumnos de un curso. Etapa 02 .ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Problema 16 Etapa 01 .Definición de la solución. 2.Descripción del problema. Definición de Paquetes y desarrollo del Diagrama de Paquetes. n3 y n4). Utilizar la estructura lógica MIENTRAS. Esto se repite para todos los alumnos del curso. 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. Etapa 03 . ‰ Procesamiento: Las cuatro notas del alumno se ingresan a través del teclado y se almacenan en variables (n1. Se realizará el cálculo de la nota final en base a la fórmula: nf = ( n1 + n2 + n3 + ( n4 * 2 ) ) / 5. ‰ Datos necesarios: Las cuatro notas de cada uno de los alumnos del curso. Diagrama de paquetes Pag. Nombre del Proyecto: ProyNotasAlumnos. 1. con la finalidad de poder mostrar la nota final de cada uno de ellos.Diseño de la lógica. El resultado es almacenado en la variable (nf) para luego ser mostrada. n2. método main ( ) ENTRADA: numAlumnos. 152 . n1 = 0. n2 = 0. n4 nf = ( n1 + n2 + n3 + ( n4 * 2 ) ) / 5 ESCRIBIR nf i=i+1 FINMIENTRAS FIN Pag. n4 SALIDA: nf INICIO NUMERO i = 1. n3. Clases Clases dominioDeLaAplicacion biblioteca 4. n2. Ing. n3 = 0. Algoritmo PrgNotasAlumnos . Definición de las Clases. 3. Juan José Flores Cueto. Diseño de algoritmo para el método principal. n1. n3. n2. nf = 0 NUMERO numAlumnos = 1 LEER numAlumnos MIENTRAS ( i <= numAlumnos ) LEER n1. n4 = 0. n2 = Lectura. numAlumnos = 0 . n2 = 0.leerDouble ( ) .println ( “Ingrese el número de alumnos: ” ) . } } } Pag.println ( “ Ingrese nota 4 del alumno [” + i + “]: ” ) .out. n4 = 0. i ++ .leerDouble ( ) . numAlumnos = Lectura. n1 = Lectura. n3 = 0. System.out.leerDouble ( ) . nf = 0 . 153 .Lectura . import biblioteca. System.println ( “ Ingrese nota 2 del alumno [” + i + “]: ” ) . System. nf = ( n1 + n2 + n3 + ( n4 * 2 ) ) / 5 .ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Etapa 04 .leerInt ( ) .println ( “ Ingrese nota 1 del alumno [” + i + “]: ” ) .println ( “ Ingrese nota 3 del alumno [” + i + “]: ” ) . n3 = Lectura.Desarrollo de la Codificación.leerDouble ( ) . n4 = Lectura. double n1= 0.out.out. Clase PrgNotasAlumnos package dominioDeLaAplicacion .out.out. while ( i <= numAlumnos ) { System. System. System. class PrgNotasAlumnos { public static void main ( String arg[] ) { int i = 1.println ( “ Nota final del alumno [” + i + “]: ” + nf ) . El resultado es almacenado en la variable (nf) para luego ser mostrada. Definición de Paquetes y desarrollo del Diagrama de Paquetes. Etapa 02 . ‰ Datos necesarios: Las cuatro notas de cada uno de los alumnos del curso. Ingresar las notas a través del teclado. Esto se repite para todos los alumnos del curso con la finalidad de poder mostrar la nota final de cada uno de ellos. ‰ Procesamiento: Las cuatro notas del alumno se ingresan a través del teclado y se almacenan en variables (n1. 154 . 2. Nombre del Proyecto: ProyNotasAlumnos2. ‰ Resultado deseado: Mostrar la nota final de todos los alumnos de un curso.Descripción del problema. Problema 17 Etapa 01 . Ing.Diseño de la lógica. Calcular la nota final de todos los alumnos del curso utilizando la siguiente fórmula: nf = ( n1 + n2 + n3 + ( n4 * 2 ) ) / 5. n3 y n4). Diagrama de paquetes Pag. n2. Utilizar la estructura lógica HACER. 1.Definición de la solución. Se realizará el cálculo de la nota final sobre la base de la fórmula: nf = ( n1 + n2 + n3 + ( n4 * 2 ) ) / 5. Etapa 03 . Juan José Flores Cueto. n4 nf = ( n1 + n2 + n3 + ( n4 * 2 ) ) / 5 ESCRIBIR nf LEER continua i=i+1 MIENTRAS ( continua = ‘s’ OR continua = ‘S’ ) FIN Pag. Clases Clases dominioDeLaAplicacion biblioteca 4. n4. n4 = 0. Diseño de algoritmo para el método principal.ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS 3. n3. Definición de las Clases. n1 = 0. n2 = 0. n2. nf = 0 TEXTO continua = ‘ ’ HACER LEER n1. Algoritmo PrgNotasAlumnos2 . continua SALIDA: nf INICIO NUMERO i = 1. n2. n3.método main ( ) ENTRADA: n1. 155 . n3 = 0. n2 = Lectura.out. double n1 = 0. n1 = Lectura.leerDouble ( ) .println ( “ Desea continuar (s/n): ” ) .Lectura .out. continua = Lectura. n3 = 0. System.out. n4 = Lectura.println ( “ Ingrese nota 1 del alumno [” + i + “]: ” ) . System. System. nf = ( n1 + n2 + n3 + ( n4 * 2 ) ) / 5 . 156 .leerDouble ( ) .out. n2 = 0.Desarrollo de la Codificación. System. } } Pag.out. Clase PrgNotasAlumnos2 package dominioDeLaAplicacion . do { System. char continua = ‘ ’ .leerChar ( ) .println ( “ Ingrese nota 2 del alumno [” + i + “]: ” ) . nf = 0 .println ( “ Nota final del alumno [” + i + “]: ” + nf ) . System. Etapa 04 .leerDouble ( ) . n4 = 0. Ing. import biblioteca.out. n3 = Lectura.println ( “ Ingrese nota 4 del alumno [” + i + “]: ” ) .leerDouble ( ) . class PrgNotasAlumnos2 { public static void main ( String arg[] ) { int i = 1 .println ( “ Ingrese nota 3 del alumno [” + i + “]: ” ) . i++ . } while ( continua == ‘s’ || continua == ‘S’ ) . Juan José Flores Cueto. Si el sueldo ingresado resulta ser el sueldo menor. Etapa 02 . si resulta ser un empleado se suma su sueldo a la variable sueldo2 y si resulta ser un gerente se suma su sueldo a la varaiable sueldo3. se almacenará en la variable menorSueldo. Si el sueldo ingresado resulta ser el sueldo mayor. 157 . Adicionalmente el sueldo mayor y el sueldo menor.Definición de la solución. se almacenará en la variable mayorSueldo. Pag. Al finalizar el ingreso de los datos de todos los trabajadores de la empresa. la suma de sueldos de los obreros (sueldo1). Si resulta ser un obrero se suma su sueldo a la variable sueldo1. la suma de sueldo de los empleados (sueldo2) y la suma de los sueldos de los gerentes (sueldo3).ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Problema 18 Etapa 01 . ‰ Procesamiento: El sueldo y la categoría de cada trabajador de la empresa se ingresarán a través del teclado y se almacenarán en las variables sueldo y categoria. se mostrará por pantalla el sueldo mayor (mayorSueldo). se verificará si es el sueldo menor.Descripción del problema. ‰ Datos necesarios: El sueldo y la categoría de cada uno de los trabajadores de la empresa. Determinar la suma de sueldos de los obreros (categoría 1). el sueldo menor (menorSueldo). Adicionalmente. Cada vez que se ingrese el sueldo de un trabajador se deberá verificar si es el sueldo mayor. ‰ Resultado deseado: La suma de sueldos de los obreros. También se evaluará la categoría del trabajador. 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. la suma de sueldos de los empleados y la suma de sueldos de los gerentes. De igual forma. determinar cuál es el mayor y el menor sueldo en la empresa. 1. Ing. Definición de Paquetes y desarrollo del Diagrama de Paquetes.Diseño de la lógica. Nombre del Proyecto: ProySueldoCategoria. Etapa 03 . Clases Clases dominioDeLaAplicacion biblioteca Pag. Juan José Flores Cueto. 158 . Diagrama de paquetes 3. 2. Definición de las Clases. i = 1 HACER LEER categoria SI (categoria <> 0) ENTONCES LEER sueldo SI (i = 1) ENTONCES i=0 mayorSueldo = sueldo menorSueldo = sueldo SINO SI ( sueldo < menorSueldo ) ENTONCES menorSueldo = sueldo FINSI SI (sueldo > mayorSueldo) ENTONCES mayorSueldo = sueldo FINSI FINSI CUANDO categoria SEA CASO 1: sueldo1 = sueldo1 + sueldo TERMINAR CASO 2: sueldo2 = sueldo2 + sueldo TERMINAR CASO 3: sueldo3 = sueldo3 + sueldo FINCUANDO FINSI MIENTRAS ( categoria <> 0 ) ESCRIBIR sueldo1. categoria SALIDA: sueldo1. sueldo2 = 0 NUMERO sueldo3 = 0. mayorSueldo FIN Pag.método main ( ) ENTRADA: sueldo. sueldo1 = 0. Diseño de algoritmo para el método principal. sueldo2. sueldo3. sueldo3 ESCRIBIR menorSueldo. categoria = 0. menorSueldo INICIO NUMERO sueldo = 0. mayorSueldo = 0 NUMERO menorSueldo = 0. Algoritmo PrgSueldoCategoria . 159 .ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS 4. sueldo2. mayorSueldo. Juan José Flores Cueto. do { System. menorSueldo = 0 . mayorSueldo = 0. mayorSueldo = sueldo . System.out. 160 .println ( “ El sueldo más alto es: ” + mayorSueldo ) . case 3: sueldo3 = sueldo3 + sueldo .println ( “ Ingrese el sueldo del trabajador : ” ) .Desarrollo de la Codificación. } } Pag. Etapa 04 . } if (sueldo > mayorSueldo ) { mayorSueldo = sueldo . Clase PrgSueldoCategoria package dominioDeLaAplicacion . double sueldo1 = 0. categoria = Lectura. sueldo = Lectura. import biblioteca.out. menorSueldo = sueldo . System.out. System.out. if ( categoria != 0 ) { System. break .println ( “ Suma de sueldos de gerentes: ” + sueldo3 ) .println ( “ Ingrese la categoría del trabajador : ” ) . System. System. sueldo3 = 0 . } } } while (categoria != 0 ) .leerDouble ( ) .leerInt ( ) . categoria = 0 .println ( “ El sueldo más bajo es: ” +menorSueldo ) . } else { if (sueldo < menorSueldo ) { menorSueldo = sueldo . if ( i == 1) { i=0.out. Ing. double sueldo = 0.out. } } switch (categoria) { case 1: sueldo1 = sueldo1 + sueldo .println ( “ Suma de sueldos de obreros: ” + sueldo1 ) .Lectura .println ( “ Suma de sueldos de empleados: ” + sueldo2 ) .out. sueldo2 = 0. break . case 2: sueldo2 = sueldo2 + sueldo . class PrgSueldoCategoria { public static void main ( String arg[] ) { int i = 1. ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Problema 19 Etapa 01 . Si el promedio final (nf) está entre 15 y 18 se aumenta 1 a la variable total3 y si el promedio final (nf) es mayor que 18 se aumenta 1 a la variable total4. Si el promedio final (nf) es menor que 10 se aumenta 1 a la variable total1.Definición de la solución. Etapa 02 . El resultado es almacenado en la variable nf. n2. 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. ‰ Procesamiento: Las cuatro notas del alumno se ingresan y se almacenan en las variables n1. ‰ Resultado deseado: Mostrar el número de alumnos con promedio final menor que 10. los alumnos que tiene promedio final entre 10 y 14. Se realiza el cálculo del promedio final en base a la fomula: nf = ( n1 + n2 + n3 + ( n4 * 2 ) ) / 5. ‰ Datos necesarios: Las cuatro notas de cada uno de los alumnos del curso. los alumnos que tienen promedio final entre 15 y 18. para ser evaluada. Si el promedio final (nf) está entre 10 y 14 se aumenta 1 a la variable total2. el número de alumnos con promedio final entre 15 y 18. el número de alumnos con promedio final entre 10 y 14.Descripción del problema. Calcular y mostrar el número de alumnos que tienen promedio final menor que 10. y el número de alumnos con promedio final mayor que 18. Este proceso se repite para todos los alumnos del curso con la finalidad de determinar su promedio final (nf) y evaluar su rango. Pag. n3 y n4. y los alumnos que tienen promedio final mayor que 18. 161 . Definición de las Clases. Juan José Flores Cueto. Etapa 03 .Diseño de la lógica. Ing. 162 . 2. Definición de Paquetes y desarrollo del Diagrama de Paquetes. 1. Clases Clases dominioDeLaAplicacion biblioteca Pag. Diagrama de paquetes 3. Nombre del Proyecto: ProyNotasRango. n1. total3.método main ( ) ENTRADA: numAlumnos.5 AND nf < 14. total3 = 0 . n4 = 0. total2 = 0 . total2. n2. n2 = 0. total4 FIN Pag. n3.5) ENTONCES total1 = total1 + 1 FINSI SI (nf >= 10. numAlumnos = 0 NUMERO i = 1.5 AND nf < 17.5) ENTONCES total4 = total4 + 1 FINSI i=i+1 FINMIENTRAS ESCRIBIR total1. total2. nf = 0. total4 = 0 LEER numAlumnos MIENTRAS ( i <= 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 SI (nf < 10. total4 INICIO NUMERO n1 = 0. Diseño de algoritmo para el método principal.ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS 3. Algoritmo PrgNotasRango . total1 = 0 . n4 SALIDA: total1.5) ENTONCES total3 = total3 + 1 FINSI SI (nf >= 17. n3 = 0. 163 . total3.5) ENTONCES total2 = total2 + 1 FINSI SI (nf >= 14. println ( “ Ingrese nota 3 del alumno [” + i + “]: ”). System. } while ((n2 < 0 || n2 > 20) .out.out. } while ((n1 < 0 || n1 > 20) .Desarrollo de la Codificación.leerDouble ( ) . n2= 0. total2 = 0. total1 = 0. n1 = Lectura.out. Clase PrgNotasRango package dominioDeLaAplicacion . numAlumnos = Lectura. n4= 0.out. double n1= 0. Ing. do { System. if (nf >= 17. n3= 0. import biblioteca.out. nf = (n1 + n2 + n3 + ( n4 * 2) ) / 5 . if (nf >= 10. } while (( n4 < 0 || n4 > 20 ) .5) total2++ . n3 = Lectura.out.out.out. while (i <= numAlumnos) { do { System. } while (( n3 < 0 || n3 > 20 ) . } System. if (nf < 10.leerDouble ( ) . i ++ . Etapa 04 . System. numAlumnos = 0 . if (nf >= 15.5) total4++ .println ( “ Ingrese el número de alumnos: ” ) . n4 = Lectura.out. System.println ( “ Ingrese nota 4 del alumno [” + i + “]: ”).println ( “ Total alumnos con promedio entre 10 y 14: ” + total2 ) . total4 = 0 . nf= 0.println ( “ Ingrese nota 1 del alumno [” + i + “]: ”).leerInt ( ) . do { System.leerDouble ( ) .5) total3++ . System. do { System.5 && nf < 15.5 && nf < 17. Juan José Flores Cueto. class PrgNotasRango { public static void main ( String arg[] ) { int i = 1.println ( “ Ingrese nota 2 del alumno [” + i + “]: ”). total3 = 0.println ( “ Total alumnos con promedio entre 15 y 18: ” + total3 ) .5) total1++ .println ( “ Total alumnos con promedio mayor a 18: ” + total4 ) . 164 .Lectura .leerDouble ( ) .println ( “ Total alumnos con promedio menor a 10: ” + total1 ) . n2 = Lectura. } } Pag. De igual forma. • Por cada entrada vendida se leerá los siguientes datos: número de boleto y lugar (puede ser platea. • Número de entradas vendidas para platea. cada variable (totalPla. palco y mezanine en el día. se deberá proporcionar la siguiente información: • Número total de entradas vendidas durante el día. • El programa terminará cuando el número de boleto sea igual a cero. Elaborar una solución que permita controlar la venta de boletos en un determinado día en un teatro de la capital. platea y mezanine. palco y mezanine en un determinado día.Descripción del problema. ‰ Procesamiento: El costo del boleto para platea. palco o mezanine). costoPal y costoMez respectivamente. ‰ Datos necesarios: El costo del boleto para platea. palco y mezanine en general.Definición de la solución. totalPal y totalMez) se multiplica por el costo del boleto (costoPla. Cada vez que se venda un boleto se ingresará el número y tipo de boleto. • Antes de finalizar. y se almacenarán en las variables numBoleto y tipo respectivamente. palco o mezanine). se leerá una sola vez el precio de entrada para palco. ‰ Resultado deseado: El número total de entradas vendidas. Si es un boleto para platea se aumenta 1 a la variable totalPla. si es para platea.ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Problema 20 Etapa 01 . el monto total recaudado y el número de entradas vendidas para platea. totalPal y totalMez para obtener el total de boletos vendidos (totalVendidas). Al finalizar la venta de boletos se suma el valor de las variables totalPla. y por cada venta. 165 . Luego se evaluará el tipo de boleto. costoPal y costoMez) según corresponda. Etapa 02 . • El total de soles recaudados en el día. en base a la siguiente información: • Al comenzar. palco y mezanine se ingresarán a través del teclado y se almacenarán en las variables costoPla. si es un boleto para palco se aumenta 1 a la variable totalPal y si es un boleto para mezanine se aumenta 1 a la variable totalMez. el número de boleto y el tipo de boleto (es decir. para obtener la ganancia en Pag. platea (gananciaPla). palco (gananciaPal) y mezanine (gananciaMez). La ganancia total (totalGanancia) se obtiene al sumar el valor de las variables ganaciaPla. Etapa 03 . 2. Juan José Flores Cueto. Diagrama de paquetes 3. gananciaPal y gananciaMez. Clases Clases dominioDeLaAplicacion biblioteca Pag. 1. 166 . Definición de Paquetes y desarrollo del Diagrama de Paquetes. Nombre del Proyecto: ProyTeatro. Ing. Definición de las Clases.Diseño de la lógica. costoMez HACER HACER LEER numBoleto MIENTRAS ( numBoleto < 0) SI ( numBoleto <> 0 ) ENTONCES HACER LEER tipo MIENTRAS (tipo < 1 OR tipo >3) CUANDO tipo SEA CASO 1 : totalPla = totalPla + 1 TERMINAR CASO 2 totalPal = totalPal + 1 TERMINAR CASO 3 totalMez = totalMez + 1 FINCUANDO MIENTRAS (numBoleto <> 0) totalVendidas = totalPla + totalPal + totalMez ganaciaPla = totalPla * costoPla ganaciaPal = totalPal * costoPal ganaciaMez = totalMez * costoMez totalGanancia = gananciaPla + gananciaPal + gananciaMez ESCRIBIR totalVendidas ESCRIBIR totalGanancia ESCRIBIR totalPla. costoPal. 167 . totalMez = 0 NUMERO costoPla = 0. gananciaPal = 0 NUMERO ganaciaMez = 0 LEER costoPla. totalPal. costoPal = 0. totaMez INICIO NUMERO numBoleto = 0. tipo = 0. Algoritmo PrgTeatro . costoMez = 0 NUMERO totalGanancia =0. totalPal = 0. costoMez SALIDA: totalVendidas. totalPal.ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS 4. Diseño de algoritmo para el método principal. totalVendidas = 0 NUMERO totalPla = 0.método main ( ) ENTRADA: costoPla. gananciaPla = 0. costoPal. totalPla. totalGanancia. totalMez FIN Pag. tipo = Lectura.leerDouble ( ) . gananciaPal = 0.out. costoPla = Lectura. } } } while ( numBoleto != 0 ) .leerInt ( ) . costoMez = Lectura. costoPal = Lectura. ” + totalGanancia ) . double gananciaPla = 0. } } Pag.println ( “ Total vendidas palco: ” + totalPal ) . ganaciaPal = totalPal * costoPal . } while (numBoleto < 0) . Clase PrgTeatro package dominioDeLaAplicacion . System. ganaciaMez = 0 .out.Lectura .println ( “ Ingrese el lugar ” ) .leerDouble ( ) . [2] Palco [3] Mezanine ” ) .leerDouble ( ) .out. costoPla = 0.Desarrollo de la Codificación.println ( “ Número total de entradas: ” + totalVendidas ) . totalMez=0 . Ing. ganaciaPla = totalPla * costoPla .println ( “ Total recaudado S/. totalVendidas = 0.println ( “ [1] Platea. do { do { System. break . ganaciaMez = totalMez * costoMez . System. totalPla=0. case 3 : totalMez ++ .out. numBoleto = Lectura. 168 .out. totalGanancia = gananciaPla + gananciaPal + gananciaMez . Juan José Flores Cueto. switch ( tipo) { case 1 : totalPla ++ .out. if ( numBoleto != 0) { do { System.out. case 2 : totalPal ++ .out.println ( “ Ingrese el costo de la entrada para palco: ” ) .println ( “ Ingrese el número de boleto: ” ) .println ( “ Ingrese el costo de la entrada para mezanine: ” ) . System. System.out. costoPal = 0. double totalGanancia=0. System.leerInt ( ) . System. } while (tipo < 1 || tipo > 3) . break . System. totalVendidas = totalPla + totalPal + totalMez . tipo = 0.println ( “ Total vendidas mezanine: ” + totalMez ) .println ( “ Total vendidas platea: ” + totalPla ) . class PrgTeatro { public static void main ( String arg[] ) { int numBoleto = 0. costoMez = 0 . import biblioteca.out.out. System.println ( “ Ingrese el costo de la entrada para platea: ” ) . System. totalPal=0. Etapa 04 . el turno y el día del empleado se ingresan a través del teclado y se almacenan en variables (horas. Dependiendo del turno se obtiene la tarifa para luego hacer el cálculo del jornal de la siguiente forma: jornal = horas * tarifa . tarde y noche. ‰ Resultado deseado: Calcular y mostrar el jornal diario de cada empleado. 169 .Definición de la solución. Pag. Para el turno tarde se incrementa S/ 10. El resultado es almacenado en una variable (jornal) para luego ser mostrada por pantalla. ‰ Procesamiento: El número de horas.00 soles por hora. . turno y dia). Los empleados de una fábrica trabajan en tres turnos. .00 soles por hora. Etapa 02 . La tarifa del turno noche es de S/ 10. la tarifa se incrementa en 50% para los turnos mañana y tarde y en 60% para el turno noche.ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Problema 21 Etapa 01 . ‰ Datos necesarios: El número de horas. En caso de ser un día domingo. el turno y el día que trabajó el empleado.Descripción del problema. Este proceso se repite para cada uno de los empleados de la fábrica. La tarifa del turno mañana y tarde es de S/ 8. Se desea calcular el jornal diario de cada empleado teniendo en cuenta lo siguiente: .00 soles por concepto de movilidad. mañana. . Etapa 03 . 1. Juan José Flores Cueto.Diseño de la lógica. 2. Nombre del Proyecto: ProyJornal. Ing. Definición de Paquetes y desarrollo del Diagrama de Paquetes. Clases Clases dominioDeLaAplicacion biblioteca Pag. 170 . Diagrama de paquetes 3. Definición de las Clases. horas = 0. dia SALIDA: jornal INICIO NUMERO numEmpleados = 0. 171 .ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS 4. ” FINSI MIENTRAS (numEmpleados <= 0) MIENTRAS (i < numEmpleados) i=i+1 HACER LEER horas SI (horas <= 0) ENTONCES ESCRIBIR “ Número horas mayor a 0. Diseño de algoritmo para el método principal.5 * 8 SINO tarifa = 8 FINSI TERMINAR CASO 3: SI (dia = 7) ENTONCES tarifa = 1. jornal = 0 HACER LEER numEmpleados SI (numEmpleados <= 0) ENTONCES ESCRIBIR “ Número empleados mayor a 0.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. horas. i = 0. Algoritmo PrgJornal . turno. ” FINSI MIENTRAS (dia < 1 OR dia > 7) HACER LEER turno CUANDO turno SEA: CASO 1: CASO 2: SI (dia = 7) ENTONCES tarifa = 1. dia = 0. ” FINSI MIENTRAS (horas <= 0) HACER LEER dia SI (dia < 1 OR dia > 7) ENTONCES ESCRIBIR “ La opción no es válida. turno = 0 NUMERO tarifa = 0.método main ( ) ENTRADA: numEmpleados. Continúa… 4. class PrgJornal { public static void main ( String arg[] ) { int numEmpleados = 0.println ( “ El número de empleados debe ser mayor a 0 ” ) . Clase PrgJornal package dominioDeLaAplicacion .Lectura . if (numEmpleados <= 0) System.método main ( ) SI (turno = 2) ENTONCES jornal = horas * tarifa + 10 SINO jornal = horas * tarifa FINSI ESCRIBIR jornal FINMIENTRAS FIN Etapa 04 . dia = 0.Desarrollo de la Codificación.out. turno = 0 .out. 172 . Juan José Flores Cueto. do { System. Algoritmo PrgJornal .out. while ( i < numEmpleados ) { i++ . Pag. Ing.print ( “ Ingrese el número de empleados: ”) . Diseño de algoritmo para el método principal. horas = 0. } while (horas <= 0) .println ( “ Número de horas mayor a 0 ” ) . numEmpleados = Lectura. i = 0.out.leerInt ( ) . } while (numEmpleados <= 0) . import biblioteca. double tarifa = 0.print ( “ Ingrese horas trabajadas empleado [” + i + “]: ” ) . do { System. jornal = 0 . if (horas <= 0 ) System.leerInt ( ) . horas = Lectura. dia = Lectura.out.out. System. else tarifa = 8 .leerInt ( ) . turno = Lectura. System. System.print ( “ Opción: ”) .out. System. System.out.println ( “ [5] Viernes ” ) .out.println ( “ [1] Mañana ”) . break .5 * 8 . } } while (turno != 1 && turno != 2 && turno != 3) . else jornal = horas * tarifa . System.println ( “ La opción no es válida ”) . System.println ( “ [3] Noche ”) . 173 .println ( “ La opción no es válida ”) .println ( “ [4] Jueves ” ) . System. System. switch (turno) { case 1 : case 2 : if (dia == 7) tarifa = 1.out. do { System.out.out.Desarrollo de la Codificación.println ( “ El jornal del día del empleado [” + i + “] es: ” + jornal ) .out. } while (dia < 1 || dia > 7) . break .println ( “ [7] Domingo ” ) .println ( “ Seleccione día trabajado empleado [“ + i + ”]: ” ) .out.println ( “ [2] Martes ” ) .leerInt ( ) .6 * 10 . } } } Pag.println ( “ [3] Miércoles ” ) . System. if (turno == 2) jornal = horas * tarifa + 10 .println ( “ [6] Sábado ” ) . System. System.out.out.out.println ( “ Seleccione el turno del empleado: ”) .println ( “ [2] Tarde ”) .print( “ Opción: ” ) . if (dia < 1 || dia > 7) System.ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Continúa… Etapa 04 .out. else tarifa = 10 .out. case 3 : if (dia == 7) tarifa = 1.out.out. default : System.println ( “ [1] Lunes ” ) . Clase PrgJornal do { System. System. ‰ Procesamiento: El sexo. Problema 22 Etapa 01 . menores de 20 años y desaprobadas. mayores de 18 años y aprobados. así como una variable que determine si se continúa o no con el ingreso de los datos de un nuevo alumno. por cada alumna menor de 20 años o cada alumno mayor de 18 años incrementaremos las variables correspondientes (menores y mayores) y por cada alumna desaprobada o cada alumno aprobado incrementaremos las variables correspondientes (desaprobadas y aprobados) para luego mostrarlos por pantalla. Si es una alumna o es un alumno incrementaremos las variables correspondientes (matriculadas y matriculados). Ing. ‰ Resultado deseado: Número de alumnas matriculadas. además número de alumnos matriculados. Dicha respuesta será almacenada en una variable (rpta). Pag.Definición de la solución. Este proceso se repetirá mientras el usuario confirme su deseo de ingresar los datos de otro alumno. Juan José Flores Cueto. 174 . edad y nota de cada uno de los alumnos del curso. edad y nota).Descripción del problema. Desarrollar una solución que permita obtener la siguiente información en un salón de clase: ¿Cuántas alumnas están matriculadas en el curso? ¿Cuántos alumnos están matriculados en el curso? ¿Cuántas alumnas son menores de 20 años? ¿Cuántos alumnos son mayores de 18 años? ¿Cuántos alumnos están aprobados? ¿Cuántas alumnas están desaprobadas? Etapa 02 . la edad y la nota de cada alumno se ingresarán a través del teclado y se almacenarán en variables (sexo. ‰ Datos necesarios: Sexo. Diseño de la lógica. Clases Clases dominioDeLaAplicacion biblioteca Pag. Definición de las Clases. 2. Diagrama de paquetes 3. 1. 175 .ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Etapa 03 . Nombre del Proyecto: ProyClase. Definición de Paquetes y desarrollo del Diagrama de Paquetes. edad = 0. nota. 176 . mayores = 0. menores. rpta = ‘ ’ 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. Algoritmo PrgClase . desaprobadas = 0. ” FINSI MIENTRAS (edad <= 0) HACER LEER nota SI (nota < 0 OR nota > 20) ENTONCES ESCRIBIR “ La nota no es válida. Ing. mayores. ” 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. Juan José Flores Cueto. edad. aprobados INICIO NUMERO i = 0.método main ( ) ENTRADA: sexo. ” 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. rpta SALIDA: matriculadas. nota = 0. aprobados = 0 TEXTO sexo = ‘F’. Diseño de algoritmo para el método principal. matriculados = 0 NUMERO menores = 0. matriculados. desaprobadas. 4. matriculadas = 0. ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Continúa… 4.método main ( ) CASO ‘m’: CASO ‘M’: matriculados = matriculados + 1 SI (edad > 18) ENTONCES mayores = mayores + 1 FINSI SI (nota > 10) ENTONCES aprobados = aprobados + 1 FINSI FINCUANDO HACER ESCRIBIR “¿Desea continuar[S/N]? ” 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’ ) MIENTRAS ( rpta <> ‘s’ OR rpta <> ‘S’ ) ESCRIBIR matriculadas ESCRIBIR matriculados ESCRIBIR menores ESCRIBIR mayores ESCRIBIR aprobados ESCRIBIR desaprobadas FIN Pag. Diseño de algoritmo para el método principal. 177 . Algoritmo PrgClase . out. edad = Lectura.println ( “ Sexo no válido.out.Desarrollo de la Codificación. Pag.out. switch (sexo) { case ‘f’ : case ‘F’ : matriculadas += 1 . if ( sexo != ‘f’ && sexo != ‘F’ && sexo != ‘m’ && sexo != ‘M’ ) System. } while (nota < 0 || nota > 20) . sexo = Lectura. class PrgClase { public static void main ( String arg[] ) { int i = 0. matriculados = 0. do { i ++ . Etapa 04 . ” ) . break . rpta = ‘ ’ . Juan José Flores Cueto. char sexo = ‘F’. if (edad <= 0) System. Ing.println ( “ Ingrese la nota del alumno [” + i + “]: ” ) . desaprobadas = 0. Clase PrgClase package dominioDeLaAplicacion . 178 . do { System. matriculadas = 0. aprobados = 0 . if (nota < 11) desaprobadas += 1 . ”) . edad = 0.println( “ Nota no válida ” ) .out.out.leerChar ( ) .println ( “ Ingrese sexo alumno [” + i + “] matriculado [F/M]: ” ) . } while (edad <= 0) . if (nota < 0 || nota > 20) System. nota = Lectura. import biblioteca. menores = 0 . do { System.Lectura .out.println ( “ Ingrese la edad del alumno [” + i + “]: ” ) .println ( “ Edad no válida. do { System. nota = 0.leerInt ( ) . int mayores = 0.leerInt ( ) . if (edad < 20) menores += 1 . } while ( sexo != ‘f’ && sexo != ‘F’ && sexo != ‘m’ && sexo != ‘M’ ) . ”) .out.out. ” ) .out. ” ) . rpta = Lectura.println ( “Hay ” + matriculadas + “ alumna(s) matriculada(s).println ( “Hay ” + menores + “ alumna(s) menor(es) de 20 años. if (nota > 10) aprobados += 1 .println ( “Hay ” + aprobados + “ alumno(s) aprobado(s).println ( “Hay ” + mayores + “ alumno(s) mayor(es) de 18 años. System. System. ”) .println ( “ ¿Desea ingresar un nuevo alumno [S/N]?: ” ) . } while ( rpta != ‘s’ && rpta != ‘S’ && rpta != ‘n’ && rpta != ‘N’ ) .out. if (edad > 18) mayores += 1 . ” ) .leerChar ( ) .println ( “Hay ” + desaprobadas + “ alumna(s) desaprobada(s).Desarrollo de la Codificación. } do { System.println ( “Hay ” + matriculados + “ alumno(s) matriculado(s).out.println ( “Respuesta no válida.out. System. } } Pag. System. ” ) . if ( rpta != ‘s’ && rpta != ‘S’ && rpta != ‘n’ && rpta != ‘N ’ ) System. Clase PrgClase case ‘m’ : case ‘M’ : matriculados += 1 . 179 . System.out.ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Continúa… Etapa 04 . } while ( rpta == ‘s’ || rpta == ‘S’ ) . System.out.” ) . 180 . Pag. Juan José Flores Cueto. Ing. while ( n != 0 ) { res = n % 10 .out. System. Desarrollar una solución que permita ingresar un número por teclado. y si el número es capicua o no. } } En base al análisis de la codificación desarrolle la Etapa 02 y la Etapa 03 del método. if ( num == numInv ) System. else System. System.Desarrollo de la Codificación.leerInt ( ) . System.println ( “ El número de cifras impares es : ” + contImp ) . numInv = numInv * 10 + res .println ( “ Ingrese un número entero: ” ) .ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Problema 23 Etapa 01 . if ( res % 2 == 0 ) contPar ++ . Mostrar el número con las cifras invertidas. 181 .out.out. contPar = 0. suma = suma + res . numInv = 0. cont ++ .out. class PrgNumCifras { public static void main ( String arg [ ] ) { int num = 0. n . import biblioteca.println ( “ El número invertido es : ” + numInv ) .println ( “ El número de cifras pares es : ” + contPar ) .println ( “ El número no es capicua ” ) . contImp = 0.println ( “ El número es capicua ” ) .Descripción del problema. } System. Etapa 04 . n = num . Clase PrgNumCifras package dominioDeLaAplicacion . num = Lectura.out. cont = 0.Lectura . System. else contImp ++ . System. Pag.out.println ( “ La suma de las cifras es : ” + suma ) . n = n / 10 . el número de cifras pares e impares. suma = 0. res = 0.out.out. la suma de las cifras. el número de cifras que tiene el número.println ( “ El número de cifras es : ” + cont ) . out. System. Determinar si la fecha ingresada es correcta y si el año es bisiesto o no. Ing.println ( “ Ingrese el número del mes: ” ) . bisiesto = false . mientras que 2000 si lo es.out. String mess = “ ” .println ( “ Ingrese el número del día: ” ) . año . mes y año se determina si esta correcta la fecha y si * es año bisiesto * Un año es bisiesto si es múltiplo de 4. * por ejemplo 1800 no es bisiesto. por ejemplo 1984. Etapa 04 .java * Dada una fecha en dia.leerInt ( ) .Descripción del problema. */ import biblioteca. año = Lectura. /** Clase: PrgVerificaFecha.leerInt ( ) . mes.Desarrollo de la Codificación. // verifica año bisiesto if ( año % 4 == 0 && año % 100 != 0 || año % 400 == 0 ) { bisiesto = true .println ( “ Ingrese el año: ” ) . Desarrollar un programa que permita ingresar el día. boolean verifdia = false. System. } //verifica el dia switch (mes) { case 1 : case 3 : case 5 : case 7 : case 8 : case 10 : case 12 : Pag.Lectura. dia = Lectura. Problema 24 Etapa 01 . el mes y el año de una determina fecha.leerInt ( ) . Juan José Flores Cueto. Clase PrgVerificaFecha package dominioDeLaAplicacion. class PrgVerificaFecha { public static void main ( String arg[] ) { int dia. pero los años * múltiplos de 100 sólo son bisiestos cuando a su vez son múltiplos de 400.out. System. 182 . mes = Lectura. Pag. break . case 3 : mess = “Marzo” . case 2 : mess = “Febrero” . 183 . break . break . case 7 : mess = “Julio” . } } break . } else { if ( ( dia > 0 ) && ( dia <= 28 ) ) verifdia = true . case 8 : mess = “Agosto” . } //selecciona el nombre del mes if ( verifdia && ( mes > 0 ) && ( mes <= 12 ) && ( año > 0 ) ) { switch (mes) { case 1 : mess = “Enero” . case 4 : mess = “Abril” . break .ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Clase PrgVerificaFecha If ( dia > 0 && dia <= 31 ) { verifdia = true . break . break . break . case 4 : case 6 : case 9 : case 11 : if ( ( dia > 0) && ( dia <= 30 ) ) verifdia = true . break . case 2 : if ( bisiesto ) { if ( ( dia > 0 ) && ( dia <= 29 ) ) { verifdia = true . break . case 6 : mess = “Junio” . } break . case 5 : mess = “Mayo” . case 12 : mess = “Diciembre” .println ( “ No es año bisiesto ” ) . 184 . } else { System. Juan José Flores Cueto.out. case 11 : mess = “Noviembre” . } System. } } else { System.println ( “ Es año bisiesto ” ) . } } } Pag.out.out.println ( dia + “ de ” + mess + “ de ” + año ) . Clase PrgVerificaFecha case 10 : mess = “Octubre” . if ( bisiesto ) { System. break .out. break.println ( “ error en fecha ” ) . break . Ing. break .Desarrollo de la Codificación. break . if ( arabigo >= 1000 && arabigo <= 3000 ) { miles = arabigo / 1000 .println ( “ Ingrese un número entre 1000 y 3000: ” ) . //formar el número romano. unidad = resto % 10 . case 3 : romano = romano + “MMM” . Etapa 04 .ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Problema 25 Etapa 01 .out. Obtener miles switch ( miles ) { case 1 : romano = romano + “M” . String romano = “ ” . Determinar y mostrar el equivalente del número ingresado en número romano. Desarrollar un programa que permita ingresar un número arábico entre 1000 y 3000.java * Dado un año en números arábigos. System. centena. resto = resto % 100 . } Pag. /** Clase: PrgNumRomano. case 2 : romano = romano + “MM” . unidad. centena = resto / 100 . resto. arabigo = Lectura. resto = arabigo % 1000 . decena. miles .Descripción del problema. decena = resto / 10 . break . imprimirlo en números romanos dentro de * rango de 1000 a 3000 * Programación Básica */ import biblioteca. 185 .leerInt ( ) . Clase PrgNumRomano package dominioDeLaAplicacion . class PrgNumRomano { public static void main ( String arg [ ] ) { int arabigo.Lectura . break . case 8 : romano = romano + “DCCC” . } //obtener decenas switch ( decena ) { case 1 : romano = romano + “X” . 186 . break . break . case 2 : romano = romano + “CC” . break . break . Ing. case 5 : romano = romano + “D” . break . break . case 6 : romano = romano + “DC” . break . Juan José Flores Cueto. case 3 : romano = romano + “CCC” . case 4 : romano = romano + “CD” . case 2 : romano = romano + “XX” . case 4 : romano = romano + “XL” . break . case 9 : romano = romano + “CM” . break . Pag. break . break . case 7 : romano = romano + “DCC” . Clase PrgNumRomano //obtener centenas switch ( centena ) { case 1 : romano = romano + “C” . break . case 5 : romano = romano + “L” . break . break . case 3 : romano = romano + “XXX” . case 6 : romano = romano + “LX” . case 9 : romano = romano + “IX” . } } } Pag. break . } //obtener unidades switch ( unidad ) { case 1 : romano = romano + “I” . break . break . case 7 : romano = romano + “VII” . case 9 : romano = romano + “XC” .out.println ( Arábigo + “ = ” + romano ) . case 8 : romano = romano + “LXXX” . case 5 : romano = romano + “V” . break . break . case 4 : romano = romano + “IV” . } else { System. break . break . case 3 : romano = romano + “III” . case 6 : romano = romano + “VI” . } // Mostrar número romano System. break . break .ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Clase PrgNumRomano case 7 : romano = romano + “LXX” . case 8 : romano = romano + “VIII” .out.println ( " Número ingresado no válido " ) . break . case 2 : romano = romano + “II” . break . break . 187 . num = Lectura. String veinte = “veinte”. String setenta = “setenta”. uni = num % 10 . do { System.Descripción del problema. Problema 26 Etapa 01 . treinta = “treinta” . Pag. tres = “tres” . trece = “trece”. String dieci = “dieci” . String cuatro = “cuatro”. Desarrollar un programa que permita ingresar un número entero menor que 100 y permita mostrar su equivalente en letras... int num. noventa = “noventa” . switch ( uni ) { case 0 : letra = cero . dec. case 1 : letra = uno . once = “once” . Reintente!!! ” ) . class PrgNumALetras01 { public static void main ( String arg [ ] ) { String letra = “”. Clase PrgNumALetras01 package dominioDeLaAplicacion . cinco = “cinco”. 188 . siete = “siete” . catorce = “catorce”. } while ( num < 0 || num > 99 ) . String doce = “doce”. quince = “quince” .Lectura . dec = num / 10 .out. seis = “seis”. import biblioteca. break . String cuarenta = “cuarenta”. nueve = “nueve”. y = “ y ”. Ing.leerInt ( ) .out. if ( num < 0 || num > 99 ) System. uni . cincuenta = “cincuenta”. dos = “dos”. ochenta = “ochenta”. String ocho = “ocho”. break . Etapa 04 .println ( “Ingrese un número entero menor que 100: ” ) . cero = “cero”. Juan José Flores Cueto.println ( “Número ingresado no válido. uno = “uno”. sesenta = “sesenta” . veinti = “veinti”. diez = “diez”.Desarrollo de la Codificación. break . case 6 : letra = seis . break . break . case 5 : letra = quince . case 9 : letra = nueve . } switch ( dec ) { case 1 : switch ( uni ) { case 0 : letra = diez . Pag. 189 .ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Clase PrgNumALetras01 case 2 : letra = dos . case 4 : letra = cuatro . case 8 : letra = ocho . break . case 4 : letra = catorce . } break . break . break . case 3 : letra = tres . case 5 : letra = cinco . break . default : letra = dieci + letra . break . case 7 : letra = siete . break . break . break . case 3 : letra = trece . break . break . break . case 2 : letra = doce . case 1 : letra = once . } } Pag. else letra = cincuenta + y + letra . case 8 : if ( uni == 0 ) letra = ochenta . else letra = noventa + y + letra . break . else letra = sesenta + y + letra . case 3 : if ( uni == 0 ) letra = treinta .out. break . break . else letra = treinta + y + letra . break . Juan José Flores Cueto. case 6 : if ( uni == 0 ) letra = sesenta . break . 190 . case 4 : if ( uni == 0 ) letra = cuarenta . case 5 : if ( uni == 0 ) letra = cincuenta . case 9 : if ( uni == 0 ) letra = noventa . Clase PrgNumALetras01 case 2 : if ( uni == 0 ) letra = veinte . else letra = veinti + letra .print ( “El número ” + num + “ en letras es ” + letra ) . break . break . case 7 : if ( uni == 0 ) letra = setenta . } System. else letra = cuarenta + y + letra . else letra = ochenta + y + letra . else letra = setenta + y + letra . Ing. nueve = “nueve”. En base al programa anterior. nove = “nove”. diez = “diez”. String cuarenta = “cuarenta”. String doce = “doce”. import biblioteca.out. dec = resto / 10 . uni = resto % 10 . uno = “uno”. class PrgNumALetras02 { public static void main ( String arg [ ] ) { String letra = “”. tres = “tres”. siete = “siete”. String veinte = “veinte”. Clase PrgNumALetras02 package dominioDeLaAplicacion .. } while ( num < 0 || num > 999 ) . veinti = “veinti”.println ( “ Ingrese un número entero menor que 1000: ” ) . resto = num % 100 . ochenta = “ochenta”. do { System. treinta = “treinta”. resto. trece = “trece”. String quinientos = “quinientos ”. desarrollar otro programa que permita ingresar un número entero menor que 1000 y permita mostrar su equivalente en letras.. cientos = “cientos ”. dos = “dos”. break . noventa = “noventa”.Lectura . ciento = “ciento ”.ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Problema 27 Etapa 01 . uni. num = Lectura. int num. case 1 : letra = uno . cero = “cero”. cen. seis = “seis”. dec. sete = “sete”. Pag.println ( “ Número ingresado no válido. cen = num / 100 . cinco = “cinco”. switch ( uni ) { case 0 : letra = cero . String setenta = “setenta”. if ( num < 0 || num > 999 ) System. Etapa 04 . 191 .out. catorce = “catorce”. String cuatro = “cuatro”. String cien = “cien”. String dieci = “dieci”.leerInt ( ) . y = “ y ”. Reintente!!! ” ) . sesenta = “sesenta”. once = “once”. cincuenta = “cincuenta”.Descripción del problema.Desarrollo de la Codificación. quince = “quince”. String ocho = “ocho”. break . Juan José Flores Cueto. break . case 4 : letra = catorce . Clase PrgNumALetras02 case 2 : letra = dos . case 1 : letra = once . case 4 : letra = cuatro . break . break . case 7 : letra = siete . case 6 : letra = seis . break . break . break . default : letra = dieci + letra . 192 . case 3 : letra = trece . break . break . break . case 3 : letra = tres . break . break . case 5 : letra = cinco . case 5 : letra = quince . break . } switch (dec) { case 1 : switch (uni) { case 0 : letra = diez . break . Ing. } break . case 8 : letra = ocho . case 9 : letra = nueve . case 2 : Pag. case 2 : letra = doce . break . else letra = veinti + letra . break . case 5 : if ( uni == 0 ) letra = cincuenta . else letra = cincuenta + y + letra . case 9 : if ( uni == 0 ) letra = noventa . case 3 : if ( uni == 0 ) letra = treinta . break . case 6 : if ( uni == 0 ) letra = sesenta . else letra = ochenta + y + letra . else letra = sesenta + y + letra . else letra = setenta + y + letra . } switch ( cen ) { case 1 : if ( dec == 0 && uni == 0 ) letra = cien . case 8 : if ( uni == 0 ) letra = ochenta . else letra = noventa + y + letra . break . break . else Pag. case 4 : if (uni == 0) letra = cuarenta . case 7 : if ( uni == 0 ) letra = setenta . break . break . break . else letra = treinta + y + letra . 193 . else letra = cuarenta + y + letra .ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Clase PrgNumALetras02 if ( uni == 0 ) letra = veinte . case 8 : if ( dec == 0 && uni == 0 ) letra = ocho + cientos .print ( “El número ” + num + “ en letras es ” + letra ) . else letra = tres + cientos + letra . Clase PrgNumALetras02 letra = ciento + letra . else letra = nove + cientos + letra . } } Pag. case 7 : if ( dec == 0 && uni == 0 ) letra = sete + cientos . break .out. case 4 : if ( dec == 0 && uni == 0 ) letra = cuatro + cientos . 194 . else letra = sete + cientos + letra . else letra = seis + cientos + letra . break . case 5 : if ( dec == 0 && uni == 0 ) letra = quinientos . break . } System. Juan José Flores Cueto. break . else letra = cuatro + cientos + letra . break . break . break . case 6 : if ( dec == 0 && uni == 0 ) letra = seis + cientos . else letra = quinientos + letra . break . case 3 : if ( dec == 0 && uni == 0 ) letra = tres + cientos . case 2 : if ( dec == 0 && uni == 0 ) letra = dos + cientos . break . else letra = ocho + cientos + letra . else letra = dos + cientos + letra . Ing. case 9 : if ( dec == 0 && uni == 0 ) letra = nove + cientos . … … … … … } Significa: “Intentar ejecutar las sentencias ubicadas entre las llaves del try y si ocurre un error y se lanza una excepción capturarla con la sentencia catch y manejarla con las sentencias ubicadas entre las llaves del catch”. se deberá capturar la excepción lanzada y manejarla. 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. una división por cero (ArithmeticException) o una conversión de datos no válida (NumberFormatException). y utilizar la sentencia catch para capturar y manejar cada una de las excepciones que se puedan lanzar. 195 . si se desea que la ejecución del programa no se detenga.ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS MANEJO DE EXCEPCIONES Cuando se está ejecutando un programa y ocurre un error. Existen diversos errores que pueden ocasionar que se lance una excepción en un programa. … … … … … } catch ( ) { // Código de tratamiento de la excepción. Ahora. Para evitar que la ejecución de un programa se detenga debido a un error que lanza una excepción. no ocurren). se debe utilizar la sentencia try para alertar al programa acerca del código que puede ocasionar un error. manejarla. Pag. una entrada incorrecta de datos (IOException). por ejemplo. Las excepciones en Java son objetos de subclases de la clase Throwable. El formato de la sentencia try y catch es el siguiente: Tipo de excepción try { capturada por la sentencia catch con la finalidad de // Código de la aplicación. no se lanzará ninguna excepción. Cada sentencia catch capturará y manejara un excepción. se lanzará una excepción. lo que significa que las sentencias que están entre las llaves de la sentencia catch no se ejecutarán. Juan José Flores Cueto. Esto significa que durante la ejecución del programa normalmente se ejecutarán las sentencias que están dentro de las llaves de la sentencia try: try { // Código de la aplicación. Ing. */ … … } En el ejemplo anterior. Como se ha indicado. try { /* Código de la aplicación que se prevee que puedan lanzar una excepción. Pag. 196 . interrumpiéndose la ejecución de las sentencias que están entre las llaves de la sentencia try y se ejecutarán las sentencias que están entre las llaves de la sentencia catch. … … } Si no ocurre un error. existen diferentes tipos de excepciones por lo que es común observar en un programa una sentencia try con varias sentencias catch. se ha especificado capturar dos excepciones en caso de que estás se lancen (ArithmeticException y NumberFormatException). siempre y cuando se haya especificado capturar la excepción lanzada. */ … … } catch ( NumberFormatException e ) { /* Código de tratamiento de la excepción NumberFormatException. Si ocurre un error.*/ … … } catch ( ArithmeticException e ) { /* Código de tratamiento de la excepción ArithmeticException. En la actualidad. Pag. Se intentó utilizar null donde se NullPointerException requería un objeto. Se intentó convertir una cadena NumberFormatException con un formato inapropiado a un número. 197 . Problemas al realizar operaciones IOException de entrada y salida de datos. Como ejemplo de excepciones se puede mencionar: Excepción Descripción Una condición aritmética ArithmeticException excepcional ocurrio. se considera como “buen estilo de programación” el uso de las excepciones en los programas.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. Un arreglo fué accedido con un ArrayIndexOutOfBoundException índice ilegal (fuera de los límites permitidos). separando explícitamente el código que maneja los errores del código básico de una aplicación. Desarrollar una solución que permita ingresar dos números enteros. System. finalizando la ejecución del programa. dividendo = Lectura. Ing. Clase PrgDivisionSinExcepcion package dominioDeLaAplicacion .Lectura . } } Ejecute el siguiente programa e ingrese cero al divisor. class PrgDivisionSinExcepcion { public static void main ( String arg [ ] ) { int dividendo. Etapa 04 . Mostrar el resultado de dividir ambos números. 198 . Para evitar que el programa finalice es necesario manejar dicha excepción.out. divisor = Lectura. Problema 28 Etapa 01 .Desarrollo de la Codificación. rpta = dividendo / divisor .println ( “ Ingrese el divisor: ” ) . Pag. Juan José Flores Cueto. System.println ( “ El resultado de la división es: ” + rpta ) .leerInt ( ) . Analice el siguiente programa y anote sus conclusiones.Descripción del problema. import biblioteca.leerInt ( ) .println ( “ Ingrese el dividendo: ” ) .out. rpta . Al momento de realizar la división se lanzará la excepcion llamada ArithmeticException debido a que no se puede dividir un número entero entre cero. Se debe tener en cuenta que existe la posibilidad que el divisor sea igual a cero. Intente incluir en el programa anterior el manejo de la excepción lanzada. divisor. System.out. dividendo = Lectura.out. divisor = Lectura.out.leerInt ( ) . divisor.println ( “ Ingrese el divisor: ” ) .out. 199 .println ( “ El resultado de la división es: ” + rpta ) . class PrgDivisionConExcepcion { public static void main ( String arg [ ] ) { int dividendo.out. System.println ( “ No se puede dividir un número entre cero ” ) . } } } Pag.Lectura. } catch ( ArithmeticException e ) { System. rpta .ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Clase PrgDivisionConExcepcion package dominioDeLaAplicacion. System.println ( “ Ingrese el dividendo: ” ) . System.leerInt ( ) . import biblioteca. try { rpta = dividendo / divisor . out. tmp . 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). if ( hh < 0 || hh > 23 ) { System. } else { tmp = hora. Manejar excepciones.substring ( 6 ) . ss = Integer. if (mm < 0 || mm > 59) { System. import biblioteca. Mostrar un mensaje cuando la hora ingresada sea válida. ss . int hh. } } } Pag.println ( “ minuto ingresado no válido ” ) .Lectura . mm = Integer.Desarrollo de la Codificación. Juan José Flores Cueto. String hora. Problema 29 Etapa 01 .out. 2 ) . class PrgHoraConExcepcion { public static void main ( String arg [ ] ) { boolean valido . valido = true . do { System.Descripción del problema. mm. hh = Integer. “mm” es igual a los minutos (de 00 a 59 minutos) y “ss” es igual a los segundos (de 00 a 59 segundos).println ( “ Ingrese la hora en el siguiente formato: hh:mm:ss ” ) .parseInt ( tmp ) .substring ( 0. 5 ) .parseInt ( tmp ) . valido = true . Etapa 04 .println ( “ segundo ingresado no válido ” ) .substring ( 3. Clase PrgHoraConExcepcion package dominioDeLaAplicacion . hora = Lectura.parseInt ( tmp ) .leerString ( ) .println ( “ Hora ingresada no válida ” ) . } else { tmp = hora. if (ss < 0 || ss > 59) { System. valido = true . } else { valido = false . try { tmp = hora. 200 .out.out. Ing. valido = true . 201 . Puede probar el programa ingresando como hora lo siguiente: 23:10:xx Es decir. en cualquier parte del formato indicado.println ( “Error. 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..out.println ( “ La hora se ingresó correctamente. } } En este programa se captura la excepción NumberFormatException para prevenir que no se intente convertir una cadena con un formato inapropiado a un número. Pag... } } while ( valido ) . ingrese letras en lugar de números. ” ) .ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Clase PrgHoraConExcepcion } catch ( NumberFormatException error ) { System.out. System.. ” ) . 202 .equals (“/”) ) valido = false . puntos1 = fecha. Clase PrgFechaConExcepcion package dominioDeLaAplicacion . } Pag. 5 ) . fecha = fecha.substring ( 3. Validar que la fecha ingresada tenga el formato especificado.parseInt ( tmp ) . do { System. Etapa 04 . 3 ) . fecha = Lectura. 2 ) . puntos2 .Lectura .Descripción del problema.out. tmp = fecha. Manejar excepciones. import biblioteca.substring ( 2.length ( ) == 10 ) { try { tmp = fecha. Problema 30 Etapa 01 . String fecha. } catch (NumberFormatException error ) { valido = true . mes = Integer. mes.leerString ( ) . Juan José Flores Cueto.substring ( 0. dia = Integer. Ing. class PrgFechaConExcepcion { public static void main ( String arg [ ] ) { boolean valido = true . tmp.substring ( 5. 6 ) . tmp = fecha.equals (“/”) && puntos2. if ( fecha. else valido = true . puntos1.parseInt ( tmp ) .trim ( ) .println ( “ Ingrese la fecha en el formato: dd/mm/aaaa ” ) .substring ( 6 ) .Desarrollo de la Codificación. año . Desarrollar una solución que permita ingresar la fecha en una variable de tipo texto o cadena con el siguiente formato: dd/mm/aaaa. año = Integer. puntos2 = fecha. int dia.parseInt ( tmp ) . if (puntos1. println ( “ de las variable dia. continue el programa validando el valor ” ) . ” ) . mes y año ” ) . System.println ( “ Error.ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Clase PrgFechaConExcepcion } else valido = true ... if ( valido ) System. System. } } En este programa se captura la excepción NumberFormatException para prevenir que no se intente convertir una cadena con un formato inapropiado a un número.. ingrese letras en lugar de números (inclusive en el lugar del / ).println ( “ El formato esta correcto. 203 .. } while ( valido ) .out. ver problema 24 y 127. Ingrese la fecha según formato!!! ” ) ..out. System. 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. Puede probar el programa ingresando como fecha lo siguiente: 23/xx/2005 Es decir.out..out.print ( “ Ahora Ud. Pag. en cualquier parte del formato indicado. // Continúa la validación de la fecha. println ( “ Ingrese dos números con el formato: nnn//nnn ” ) .substring ( 0.Lectura . Ing. do { System. 3 ) . import biblioteca. resultado = num1 / num2 . numeros = numeros. Juan José Flores Cueto. class PrgNumeroConExcepcion { public static void main ( String arg [ ] ) { boolean valido = true . Problema 31 Etapa 01 .parseInt ( tmp ) . num1 = Integer. puntos1 .parseInt ( tmp ) . Clase PrgNumeroConExcepcion package dominioDeLaAplicacion . int num1. 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.println ( “ La división es: ” + resultado ) . puntos1 = numeros.length ( ) == 8 ) { try { tmp = numeros.out. if ( puntos1. tmp = numeros.substring ( 5 ) . numeros = Lectura.trim ( ) .leerString ( ) . tmp. } else { valido = true . Validar que los números sean de tres cifras y mostrar la división de los mismos. Manejar excepciones. num2 = Integer. double resultado . num2 . } Pag.out.Desarrollo de la Codificación. 204 .Descripción del problema. String numeros.substring ( 3.equals ( “//” ) ) { valido = false . System. if ( numeros. Etapa 04 . 5 ) . 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. Ingrese en el formato indicado!!! ” ) ..out. valido = true . } if ( valido ) { System. } } while ( valido ) .println ( “ No se puede dividir un número entre cero ” ) . } } else { valido = true . 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.println ( “ Formato no válido ” ) .. ingrese letras en lugar de números (inclusive en el lugar de las // ). 205 . } } En este programa se captura la excepción NumberFormatException para prevenir que no se intente convertir una cadena con un formato inapropiado a un número.out. } catch ( ArithmeticException error ) { System.out.ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Clase PrgNumeroConExcepcion } catch ( NumberFormatException error ) { System. Pag. en cualquier parte del formato indicado.println ( “ Error. valido = false . Puede probar el programa ingresando como números lo siguiente: aaa//123 Es decir. Ing. Pag. 206 . Juan José Flores Cueto. es necesario que comprenda los conceptos fundamentales relacionados a las estructuras lógicas y las estructuras de datos elementales. desarrollando soluciones y codificándolas en un lenguaje de programación determinado. lenguaje de programación utilizado en el presente texto. El desarrollo de las capacidades lógicas se logra con la práctica. Pag. Existen problemas que por su naturaleza contribuyen de manera significativa a lograr este objetivo. Es decir.ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS DESARROLLO DE LAS CAPACIDADES LÓGICAS Cuando un estudiante se inicia en el estudio de la programación. como por ejemplo el lenguaje de programación Java. 207 . los cuales se desarrollan en esta última parte del presente capítulo. con la finalidad de utilizarlas en forma conjunta y lograr desarrollar sus capacidades lógicas. 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. Ing. 208 . Juan José Flores Cueto. leerInt ( ) . System.out. for ( i = 1 .println ( ) .out. do { System. totalFilas = Lectura. * * * * * Etapa 04 – Desarrollo de la codificación. } } } Pag. if (totalFilas < 2 || totalFilas > 20 ) { System. j = 0 . Asuma * * * * * que el número de filas puede variar desde 2 hasta 20 y que * * * * * entre los asteriscos no existen espacios en blanco. public class PrgCuadrado01 { public static void main (String[] args) { int totalFilas = 0. 209 .print ( “ Valor de fila no válido… Reintente!.out. System. j <= totalFilas. i++ ) { for ( j = 1 . i <= totalFilas. import biblioteca. Desarrollar la codificación de una solución que permita mostrar la siguiente figura: * * * * * * * * * * Nota: En la figura mostrada el número de filas = 5.println ( “ Ingresar el número de filas de la figura ” ) .out. System. } // Se realiza un salto de línea. i = 0. j++ ) { // Se muestra un asterisco.* .ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS Problema 32 Etapa 01 – Descripción del problema.out. Clase PrgCuadrado01 package dominioDeLaAplicacion . ” ) .print ( “*”) .print ( “ Valores válidos desde 2 hasta 20: ” ) . } } while (totalFilas < 2 || totalFilas > 20 ) . i++ ) { 3ra fila ( i=3 ) * * * * * 4ta fila ( i=4 ) * * * * * } 5ta fila ( i=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). Los siguientes 2 problemas son una variación de este problema. 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. para i=1. i=2. Esta situación determina la existencia de la segunda sentencia for dentro de la primera sentencia for (for interno). Analice sus respectivas soluciones y desarrolle sus propias observaciones. Los valores válidos de i coinciden con el número de filas que nuestra figura va ha tener. la cual puede variar desde 2 hasta 20. los valores válidos para i son i=1. i <= totalFilas. 210 . Para nuestra explicación asumiremos que el valor de totalFilas=5. Para fila=5: 1ra fila ( i=1 ) * * * * * 2da fila ( i=2 ) * * * * * for ( i = 1 . Juan José Flores Cueto. Ing. por lo cual podemos afirmar que para cada valor de i. i=3. i <= totalFilas. la sentencia System. i=2. Cada vez que finaliza el for interno. i=4 e i=5). Análisis de la solución: Se ingresa el número de filas que va ha tener la figura y se almacena en la variable totalFilas. i=4 e i=5).out. j <= totalFilas. j++ ) { … } … } Para cada una de las filas (en el caso de totalFilas=5. corresponde una fila de la figura. 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. for ( i = 1 . 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.println ( ). i=3. Entonces. el for interno se ejecuta 5 veces y mostrará en total 5 asteriscos en cada una de las filas). i++ ) { for ( j = 1 . Pag. 1 2 3 4 5 Etapa 04 – Desarrollo de la codificación. i = 0. System. Desarrollar la codificación de una solución que permita mostrar la siguiente figura: 1 2 3 4 5 1 2 3 4 5 Nota: En la figura mostrada el número de filas = 5. System.println ( ) . System.out. j = 0 . i <= totalFilas. 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.leerInt ( ) . Clase PrgCuadrado02 package dominioDeLaAplicacion . do { System.print ( j ) .out.out. } } } Pag. if (totalFilas < 2 || totalFilas > 9 ) { System. for ( i = 1 .* .out.println ( “ Ingresar el número de filas de la figura ” ) .print ( “ Valores válidos desde 2 hasta 9: ” ) . ” ) . } // Se realiza un salto de línea. totalFilas = Lectura. i++ ) { for ( j = 1 .out.println ( “ Valor de fila no válido… Reintente!.ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS Problema 33 Etapa 01 – Descripción del problema. j <= totalFilas. import biblioteca. } } while (totalFilas < 2 || totalFilas > 9 ) . public class PrgCuadrado02 { public static void main (String[] args) { int totalFilas = 0. 211 . j++ ) { // Se muestra el valor de la variable j. totalFilas = Lectura. if (totalFilas < 2 || totalFilas > 9 ) { System.out. import biblioteca. Problema 34 Etapa 01 – Descripción del problema.print ( “ Valores válidos desde 2 hasta 9: ” ) .leerInt ( ) . } } while (totalFilas < 2 || totalFilas > 9 ) .out. } // Se realiza un salto de línea. i++ ) { for ( j = 1 . Ing. for ( i = 1 . 212 . Juan José Flores Cueto. 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 Etapa 04 – Desarrollo de la codificación. } } } Pag. System. Desarrollar la codificación de una solución que permita mostrar la siguiente figura: 1 1 1 1 1 2 2 2 2 2 Nota: En la figura mostrada el número de filas = 5.println ( “ Valor de fila no válido… Reintente!.out.print ( i ) . Clase PrgCuadrado03 package dominioDeLaAplicacion .* .out.println ( ) .out. i <= totalFilas.println ( “ Ingresar el número de filas de la figura ” ) . i = 0. j <= totalFilas. System. ” ) . public class PrgCuadrado03 { public static void main (String[] args) { int totalFilas = 0. j = 0 . j++ ) { // Se muestra el valor de la variable i. do { System. System. 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. } } } Pag.println ( ) .print ( “*”) . ” ) . do { System.out. j <= i .out. * * * * * Etapa 04 – Desarrollo de la codificación. if (totalFilas < 2 || totalFilas > 20 ) { System.out. j = 0 .out. Problema 35 Etapa 01 – Descripción del problema.println ( “ Ingresar el número de filas de la figura ” ) . import biblioteca.println ( “ Valor de fila no válido… Reintente!. j++ ) { // Se muestra un asterisco. 214 . Desarrollar la codificación de una solución que permita mostrar la siguiente figura: * * * Nota: En la figura mostrada el número de filas = 5.*. for ( i = 1 . } // Se realiza un salto de línea. Clase PrgTriangulo01 package dominioDeLaAplicacion. System. } } while (totalFilas < 2 || totalFilas > 20 ) . Juan José Flores Cueto. public class PrgTriangulo01 { public static void main(String[] args) { int totalFilas = 0. i <= totalFilas.print ( “ Valores válidos desde 2 hasta 20: ” ) . System. i++ ) { for ( j = 1 .leerInt ( ) . totalFilas = Lectura. System.out. i = 0. Asuma * * * que el número de filas puede variar desde 2 hasta 20 y que * * * * entre los asteriscos no existen espacios en blanco. los valores válidos para i son i=1. j++ ) { … } … } En la primera fila (i=1) se necesita mostrar un asterisco. 215 . la cual puede variar desde 2 hasta 20. Es decir.out. la sentencia System. Entonces. i <= totalFilas. nos permite hacer un salto de línea. 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).println ( ). Finalizada la ejecución del for interno. por lo que el for interno Pag. i++ ) { for ( j = 1 . j=2. Esta situación determina la existencia de la segunda sentencia for dentro de la primera sentencia for (for interno). la sentencia System. Finalizada la ejecución del for interno.Esto se cumple ya que para i=5. En la segunda fila (i=2) se necesita mostrar dos asterisco.println ( ). j=4 y j=5. j <= i . i++ ) { 3ra fila ( i=3 ) * * * 4ta fila ( i=4 ) * * * * } 5ta fila ( i=5 ) * * * * * Ahora necesitamos mostrar un asterisco en la primera fila (i=1). i=4 e i=5). 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 j serían j=1. 2 asteriscos en la segunda fila (i=2) y asi sucesivamente hasta llegar a la última fila (para nuestro caso hasta la quinta fila Æ i=5). corresponde una fila de la figura. Y así sucesivamente hasta llegar a la última fila. nos permite hacer un salto de línea. Para fila=5: 1ra fila ( i=1 ) * 2da fila ( i=2 ) * * for ( i = 1 . i <= totalFilas. 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. pasar a la segunda fila. i=2. j=3. Para nuestra explicación asumiremos que el valor de totalFilas=5. En nuestro caso la última fila es 5 (i=5) y se necesita mostrar 5 asteriscos.ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS Análisis de la solución: Se ingresa el número de filas que va ha tener la figura y se almacena en la variable totalFilas. Los valores válidos de i coinciden con el número de filas que nuestra figura va ha tener. i=3. Es decir. for ( i = 1 . Esto se cumple ya que para i=2 los valores válidos para j serían j=1 y j=2. pasar a la tercera fila.out. por lo cual podemos afirmar que para cada valor de i. 216 . Ing. Los siguientes 7 problemas son una variación de este problema. 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). Pag. Juan José Flores Cueto. Analice sus respectivas soluciones y desarrolle sus propias observaciones. Luego se hace un salto de linea y se finaliza la ejecución. public class PrgTriangulo02 { public static void main(String[] args) { int totalFilas = 0. } } } Pag. for ( i = 1 .out. Clase PrgTriangulo02 package dominioDeLaAplicacion. 217 . i = 0. System.ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS Problema 36 Etapa 01 – Descripción del problema.print ( j ) .out. j = 0 .println ( ) . totalFilas = Lectura.print ( “ Valores válidos desde 2 hasta 9: ” ) . } // Se realiza un salto de línea. j <= i . System. j++ ) { // Se muestra el valor de la variable j. do { System.*.println ( “ Ingresar el número de filas de la figura ” ) .out. 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. Desarrollar la codificación de una solución que permita mostrar la siguiente figura: 1 1 2 Nota: En la figura mostrada el número de filas = 5. if (totalFilas < 2 || totalFilas > 9 ) { System. i <= totalFilas.out. import biblioteca.println ( “ Valor de fila no válido… Reintente!. ” ) . System.leerInt ( ) . i++ ) { for ( j = 1 . 1 2 3 4 5 Etapa 04 – Desarrollo de la codificación.out. } } while (totalFilas < 2 || totalFilas > 9 ) . out. Juan José Flores Cueto. Ing. j = 0 . Problema 37 Etapa 01 – Descripción del problema.out.print ( “ Valores válidos desde 2 hasta 9: ” ) . i++ ) { for ( j = 1 . i <= totalFilas. 218 . System. } // Se realiza un salto de línea.out. for ( i = 1 .print ( i ) .println ( “ Valor de fila no válido… Reintente!. import biblioteca. j <= i . Clase PrgTriangulo03 package dominioDeLaAplicacion.println ( ) .println ( “ Ingresar el número de filas de la figura ” ) . System. Desarrollar la codificación de una solución que permita mostrar la siguiente figura: 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 Etapa 04 – Desarrollo de la codificación.out. do { System. } } } Pag. j++ ) { // Se muestra el valor de la variable i.*.leerInt ( ) . ” ) . System. totalFilas = Lectura. } } while (totalFilas < 2 || totalFilas > 9 ) . public class PrgTriangulo03 { public static void main(String[] args) { int totalFilas = 0.out. if (totalFilas < 2 || totalFilas > 9 ) { System. i = 0. } // Se realiza un salto de línea. totalFilas = Lectura. Clase PrgTriangulo04 package dominioDeLaAplicacion. } } while (totalFilas < 2 || totalFilas > 9 ) . for ( i = totalFilas.out. System. 219 .out. Desarrollar la codificación de una solución que permita mostrar la siguiente figura: 5 5 4 Nota: En la figura mostrada el número de filas = 5.out. j >= i . i >= 1 . System.print ( j ) . do { System. ” ) .) { // Se muestra el valor de la variable j.println ( “ Ingresar el número de filas de la figura ” ) .*. i .println ( ) . j . i = 0. import biblioteca.out.println ( “ Valor de fila no válido… Reintente!. } } } Pag..) { for ( j = totalFilas. if (totalFilas < 2 || totalFilas > 9 ) { System. public class PrgTriangulo04 { public static void main(String[] args) { int totalFilas = 0. 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 Etapa 04 – Desarrollo de la codificación.ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS Problema 38 Etapa 01 – Descripción del problema.out.print ( “ Valores válidos desde 2 hasta 9: ” ) ..leerInt ( ) . System. j = 0 . *.out. i .) { // Se muestra el valor de la variable i. if (totalFilas < 2 || totalFilas > 9 ) { System.leerInt ( ) . totalFilas = Lectura. j = 0 .) { for ( j = totalFilas. j . j >= i .out.out. } } } Pag. System.println ( “ Valor de fila no válido… Reintente!. Desarrollar la codificación de una solución que permita mostrar la siguiente figura: 5 4 4 Nota: En la figura mostrada el número de filas = 5. i >= 1 . do { System. public class PrgTriangulo05 { public static void main(String[] args) { int totalFilas = 0. 1 1 1 1 1 Etapa 04 – Desarrollo de la codificación. Juan José Flores Cueto.out. Clase PrgTriangulo05 package dominioDeLaAplicacion. i = 0.println ( ) . Ing..out. 220 . 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. ” ) .print ( “ Valores válidos desde 2 hasta 9: ” ) . for ( i = totalFilas.print ( i ) . } // Se realiza un salto de línea.println ( “ Ingresar el número de filas de la figura ” ) . System. System. } } while (totalFilas < 2 || totalFilas > 9 ) .. import biblioteca. Problema 39 Etapa 01 – Descripción del problema. } else { k ++ . j <= i . ” ) .ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS Problema 40 Etapa 01 – Descripción del problema.out. } } } Pag. 221 .out. } System.println ( “ Ingresar el número de filas de la figura ” ) . Clase PrgTriangulo06 package dominioDeLaAplicacion. i <= totalFilas.println ( “ Valor de fila no válido… Reintente!. i = 0. 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.out. i++ ) { for ( j = 1 . } } while (totalFilas < 2 || totalFilas > 9 ) . for ( i = 1 .print ( “ Valores válidos desde 2 hasta 9: ” ) . Desarrollar la codificación de una solución que permita mostrar la siguiente figura: 1 2 3 Nota: En la figura mostrada el número de filas = 5. do { System.out. if (totalFilas < 2 || totalFilas > 9 ) { System.println ( ) . public class PrgTriangulo06 { public static void main(String[] args) { int totalFilas = 0. import biblioteca. j = 0.out. k=0 . System. totalFilas = Lectura. j++ ) { if ( k == totalFilas) { k=1. 1 2 3 4 5 Etapa 04 – Desarrollo de la codificación.leerInt ( ) .print ( k ) . } System.*. 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. } System. Ing.out. } } } Pag. totalFilas = Lectura.print ( “ Valores válidos desde 2 hasta 20: ” ) .*. System. i++ ) { for ( j = 1 . j = 0 . 222 . i = 0.println ( ) .out.out. Problema 41 Etapa 01 – Descripción del problema.leerInt ( ) . for ( i = 1 . } System. i <= totalFilas.println ( “ Valor de fila no válido… Reintente!. 1 2 3 4 5 Etapa 04 – Desarrollo de la codificación.out. Clase PrgTriangulo07 package dominioDeLaAplicacion. } } while (totalFilas < 2 || totalFilas > 20 ) . ” ) .println ( “ Ingresar el número de filas de la figura ” ) . if (totalFilas < 2 || totalFilas > 20 ) { System.out.print ( k ) . public class PrgTriangulo07 { public static void main(String[] args) { int totalFilas = 0. Desarrollar la codificación de una solución que permita mostrar la siguiente figura: 1 2 3 Nota: En la figura mostrada el número de filas = 5. do { System. Juan José Flores Cueto. import biblioteca. j++ ) { if ( k == 9 ) { k=0. j <= i . } else { k ++ . out.*.println ( “ Valor de fila no válido… Reintente!. j++ ) { if ( k == 1 ) { k = totalFilas . 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. } System. } } while (totalFilas < 2 || totalFilas > 9 ) . if (totalFilas < 2 || totalFilas > 9 ) { System. i <= totalFilas. public class PrgTriangulo08 { public static void main(String[] args) { int totalFilas = 0. do { System.print ( “ Valores válidos desde 2 hasta 9: ” ) .out. k=0 . } } } Pag.print ( k ) . 5 4 3 2 1 Etapa 04 – Desarrollo de la codificación.leerInt ( ) . } else { k--. ” ) . } System. System. totalFilas = Lectura. Desarrollar la codificación de una solución que permita mostrar la siguiente figura: 5 4 3 Nota: En la figura mostrada el número de filas = 5. Clase PrgTriangulo08 package dominioDeLaAplicacion.ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS Problema 42 Etapa 01 – Descripción del problema. j = 0.out.println ( ) . j <= i . i++ ) { for ( j = 1 . k=totalFilas+1.println ( “ Ingresar el número de filas de la figura ” ) . for ( i = 1 . import biblioteca. i = 0.out. 223 .out. 224 . Los últimos siete problemas son una variación del problema 35. Juan José Flores Cueto. 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. Ing. ” ) . if (totalFilas < 2 || totalFilas > 20 ) { System. Clase PrgTriangulo09 package dominioDeLaAplicacion . import biblioteca. j ++ ) { System.println ( “ Ingresar el número de filas de la figura ” ) . System. sino lo consigue analice la siguiente solución.* .out.print ( “ Valores válidos desde 2 hasta 20: ” ) .leerInt ( ) . } for ( j = i . Asuma * * * que el número de filas puede variar desde 2 hasta 20 y que * * entre los asteriscos no existen espacios en blanco. public class PrgTriangulo09 { public static void main (String[] args) { int totalFilas = 0.print ( “ ” ) . j ++ ) { System.out. j = 0 . Pag. } } while (totalFilas < 2 || totalFilas > 20 ) .out.out. j <= totalFilas . i ++ ) { for ( j = 1 . } } } Intente mejorar la solución anterior (en lugar de usar tres sentencias for utilice solo dos). i = 0.print ( “*” ) .println ( “ Valor de fila no válido… Reintente!. Desarrollar la codificación de una solución que permita mostrar la siguiente figura: * * * * * * * * * Nota: En la figura mostrada el número de filas = 5. * Etapa 04 – Desarrollo de la codificación.out. j < i .println ( ) . for ( i = 1 .out. 225 . i <= totalFilas. } System. totalFilas = Lectura. do { System.ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS Problema 43 Etapa 01 – Descripción del problema. } else { System. Clase PrgTriangulo09Mejorado package dominioDeLaAplicacion . if (totalFilas < 2 || totalFilas > 20 ) { System. do { System.out.out.print ( “ ” ) .out. public class PrgTriangulo09Mejorado { public static void main (String[] args) { int totalFilas = 0. i <= totalFilas. 226 .* .println ( “ Ingresar el número de filas de la figura ” ) . } } while (totalFilas < 2 || totalFilas > 20 ) . } } System.print ( “*” ) . System.println ( ) . j ++ ) { if ( i < = j ) { System. i = 0. i ++ ) { for ( j = 1 . Juan José Flores Cueto. } } } Pag. import biblioteca. j = 0 . j < = totalFilas .out.print ( “ Valores válidos desde 2 hasta 20: ” ) .leerInt ( ) . for ( i = 1 .out. totalFilas = Lectura.out. Ing. ” ) .println ( “ Valor de fila no válido… Reintente!. out.* .out. j . No existen * * * * espacios en blanco entre los asteriscos. i = 0. Desarrollar la codificación de una solución que permita mostrar la siguiente figura: * Nota: la cantidad de asteriscos que tiene la figura al lado * * derecho es el dato que se debe ingresar. * * * * * Etapa 04 . j = 0 .print ( “ Valores válidos desde 2 hasta 20: ” ) . i ++ ) { for ( j = totalFilas .println ( ) . ” ) . En la figura el lado = 5. public class PrgTriangulo10 { public static void main (String[] args) { int totalFilas = 0. } } System. Dicho dato debe tener * * * un valor entre 2 y 20.leerInt ( ) . Clase PrgTriangulo10 package dominioDeLaAplicacion . if (totalFilas < 2 || totalFilas > 20 ) { System.out.) { if ( i < j ) { System. for ( i = 1 . } } while (totalFilas < 2 || totalFilas > 20 ) .out.println ( “ Valor de fila no válido… Reintente!.Desarrollo de la Codificación. } } } Pag.print ( “ ” ) .println ( “ Ingresar el número de filas de la figura ” ) .ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS Problema 44 Etapa 01 – Descripción del problema.out.print ( “*” ) . } else { System.out. import biblioteca. System. 227 . totalFilas = Lectura. j > = 1 . i <= totalFilas. do { System.. out.print ( “ ” ) . i = 0. if (totalFilas < 2 || totalFilas > 20 ) { System.print ( “ Valores válidos desde 2 hasta 20: ” ) . i ++ ) { for ( j = 1 . import biblioteca. } } } Es importante indicar que un mismo problema puede ser solucionado de diferentes maneras. j < = totalFilas .leerInt ( ) . j++ ) … … … } Sino lo consigue analice la siguiente solución: Clase PrgTriangulo10Mejorado package dominioDeLaAplicacion .println ( ) . for ( i = 1 .out.i ) { System. Pag. j < = totalFilas . do { System. j = 0 . Ing. i <= totalFilas.* . } else { System.print ( “ Valor de fila no válido… Reintente!. } } while (totalFilas < 2 || totalFilas > 20 ) .out. j++ ) { if ( j <= totalFilas .println ( “ Ingresar el número de filas de la figura ” ) .out.out. totalFilas = Lectura. public class PrgTriangulo10Mejorado { public static void main (String[] args) { int totalFilas = 0. Intente mejorar la solución anterior de tal forma que cambie el for interno por el siguiente for: for ( j = 1 . 228 .out.print ( “*” ) . Juan José Flores Cueto. ” ) . } } System. System. i = 0. } for ( j = 1 . Asuma * * * que el número de filas puede variar desde 2 hasta 20 y que * * * * entre los asteriscos existe un espacio en blanco.print ( “* ”) .out. j++ ) { // Se muestra un asterisco y un espacio en blanco.out.println ( ) . j < totalFilas .println ( “ Ingresar el número de filas de la figura ” ) . Desarrollar la codificación de una solución que permita mostrar la siguiente figura: * * * Nota: En la figura mostrada el número de filas = 5. } } while (totalFilas < 2 || totalFilas > 20 ) .leerInt() . } // Se realiza un salto de linea. } } } Pag.*. totalFilas = Lectura.ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS Problema 45 Etapa 01 – Descripción del problema. do { System. for ( i = 1 . j = 0 . public class PrgTriangulo11 { public static void main(String[] args) { int totalFilas = 0. System. System. j <= i . j++ ) { // Se muestra un espacio en blanco.out.println ( “ Valor de fila no válido… Reintente!. if (totalFilas < 2 || totalFilas > 20 ) { System. Clase PrgTriangulo11 package dominioDeLaAplicacion.out. ” ) . System.out.out. 229 . import biblioteca. System.print ( “ ”) . i <= totalFilas . i++ ) { for ( j = i . * * * * * Etapa 04 – Desarrollo de la codificación.print ( “ Valores válidos desde 2 hasta 20: ” ) . * . lo cual nos complica la lógica de nuestra solución. 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): .* ningún espacio en blanco. un asterisco. . * . 230 . Pero si observamos bien la figura tenemos que tener en cuenta la ubicación de los asteriscos en cada fila.. i <= totalFilas . .* . i++ ) { 3ra fila ( i=3 ) * * * 4ta fila ( i=4 ) * * * * } 5ta fila ( i=5 ) * * * * * Es necesario entonces mostrar un asterisco en la primera fila (i=1). * . * . . . * . Ahora. un espacio en blanco y otro asterisco en la segundo fila (i=2) y asi sucesivamente hasta llegar a la última fila (para nuestro caso hasta la quinta fila Æ i=5).* .* menos cada vez que se muestra una nueva fila. .1 espacio en . hasta llegar a la última fila donde no se muestra * . * . 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. * . Para nuestra explicación asumiremos que el valor de totalFilas=5. Ing. Para fila=5: 1ra fila ( i=1 ) * 2da fila ( i=2 ) * * for ( i = 1 . Cada vez que se ejecuta el primer for debemos asegurarnos de mostrar los asteriscos necesarios.* . * . * . Juan José Flores Cueto. Pag. .* .* .* . la cual puede variar desde 2 hasta 20..* blanco y luego se muestra un espacio en blanco . * . * ...* Ahora realizaremos una división imaginaria en la figura y separaremos los espacios en blanco que están a la izquierda del primer asterisco de cada fila: . * Nota: Se determina que existe una relación en la parte donde están los espacios en blanco. * . * primera fila (i=1) se muestran fila .* . En la . * Nota: Los guiones representan espacios en blanco.* Entre un guión y un asterisco no hay ningún . Es necesario encontrar algunos parámetros para establecer una constante matemática (una relación matemática) que nos permita mostrar adecuadamente la figura. Análisis de la solución: Se ingresa el número de filas que va ha tener la figura y se almacena en la variable totalFilas... .* símbolo. * . (una pareja “*-”). 3ra fila ( i=3 ) ..out. * . } 4ta fila ( i=4 ) - 5ta fila ( i=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: 1ra fila ( i=1 ) * - 2da fila ( i=2 ) * .* . * . * .* . Nota: Se determina que existe una relación en la . for ( j = 1 .ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS En la parte que tiene los asteriscos y espacios en blanco entre los asteriscos. j <= i . Al analizar la figura determinamos que hay dos partes las cuales son independientes. En la primera fila (i=1) se muestran un asterisco y un espacio en blanco .. sucesivamente hasta llegar a la última fila donde se muestran cinco parejas. * . j < totalFilas .. sino lo consigue analice la siguiente solución. Una pareja (formada por un asterisco y un espacio en blanco). * . * .print ( “ ”) .* - 5ta fila ( i=5 ) * .. 3ra fila ( i=3 ) * . * .print ( “* ”) .* . * . en la segunda fila 2 parejas y así * .* . parte donde están los asteriscos y espacios en . Pag.. j++ ) { System. * . for ( j = 1 . } 4ta fila ( i=4 ) * . por lo cual determinamos la necesidad de emplear dos for internos.* ... * .* - Intente mejorar la solución anterior (en lugar de usar tres sentencias for utilice solo dos).* . blanco entre los asteriscos.* . 231 . Para esto. * .* .* .out. 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: 1ra fila ( i=1 ) . j++ ) { System... * . incluiremos un espacio en blanco al final de cada una de las filas de la figura: ... * .- 2da fila ( i=2 ) . es necesario buscar una relación matemática. out. * . La variable i va ha representar cada una de las filas. i = 0.print ( “ ”) .out. . i++ ) { for ( j = 1 . * . public class PrgTriangulo11Mejorado { public static void main(String[] args) { int totalFilas = 0. } } cont ++ . ” ) .print ( “ Valores válidos desde 2 hasta 20: ” ) .out. } } } 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). . * . 232 ..out. . símbolo. i <= totalFilas . cont = 0 . . * . . j ++ .out. mientras que la variable j va ha representar cada una de las columnas. * . * . . } else { // Se muestra un espacio en blanco. * . .print ( “* ”) . * . * . . System. do { System. Entre un guión y un asterisco no hay ningún . j < totalFilas * 2 . . * . } } while (totalFilas < 2 || totalFilas > 20 ) . . * .leerInt() . System.println ( ) .*. System. Clase PrgTriangulo11Mejorado package dominioDeLaAplicacion.out. Ing.println ( “ Ingresar el número de filas de la figura ” ) . j++ ) { if ( ( j >= totalFilas – cont ) && ( j <= totalFilas + cont ) ) { // Se muestra unasterisco y un espacio en blanco.. . for ( i = 1 . * . import biblioteca.println ( “ Valor de fila no válido… Reintente!. if (totalFilas < 2 || totalFilas > 20 ) { System. . j = 0. System. Juan José Flores Cueto. Nota: Los guiones representan espacios en blanco.* Pag. * - * . totalFilas = Lectura. System. j ++ .i ) { // Se muestra un espacio en blanco.println ( ) . Utilice el primer planteamiento desarrollado. } else { // Se muestra un espacio en blanco. * - .out.print ( “ ”) .out. i <= totalFilas .print ( “ ”) . if ( ( j >= totalFilas – cont ) && ( j <= totalFilas + cont ) ) { // Se muestra un asterisco y un espacio en blanco. . System. * - . } También: for ( i = 1 . j++ ) { if ( j <= totalFilas . * .print ( “* ”) .out.i ) { // Se muestra un asterisco y un espacio en blanco.out.out. 233 . } Pag. System. * . * . } else { // Se muestra un espacio en blanco. j <= totalFilas . * . .print ( “* ”) . 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). System. .out.* - for ( i = 1 . * . * - . } } System. . * . j++ ) { if ( j > totalFilas . * . .out. i++ ) { for ( j = 1 .* - * . i++ ) { for ( j = 1 .print ( “ ”) . } Ahora. System. nuevamente intente mejorar la solución.out. Analice nuevamente el siguiente gráfico: . } } System. En el for interno hay una sentencia if que nos permite determinar el símbolo que se va ha mostrar.print ( “* ”) . System. i <= totalFilas . } else { // Se muestra un asterisco y un espacio en blanco. * . j <= totalFilas .println ( ) . .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). * . out. j < totalFilas * 2 . 234 .print ( “*”) . System. * . 7… y así suceivamente (no hay espacios en blanco entre los asteriscos). * * * * * * * * * * * * .out. * . * * * * * * * * * * * * .out. Ing. i <= totalFilas . } else { // Se muestra un espacio en blanco. * * * * * * * * * * * * * * * * * * * * * * Nota: Recuerde que los Nota: Observe que en la guiones representan primera fila se desea espacios en blanco. i++ ) { for ( j = 1 .println ( ) . System. Relación: el número de asteriscos a mostrar en cada fila esta dado por la fórmula: totalFilas * 2 . * . Adicionalmente desarrolle las siguientes figuras y sus posibles variaciones: * .print ( “ ”) . 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. mostrar un asterisco y en las siguientes filas 3. Juan José Flores Cueto. // Se muestra la última parte de la solución: for ( i = 1 . 5. * * * * * * * * * * * * . } } cont ++ . * . * . System. } Pag. * . j++ ) { if ( ( j >= totalFilas – cont ) && ( j <= totalFilas + cont ) ) { // Se muestra un asterisco. out.1 . System. diagonal = totalFilas * 2 . System. import biblioteca.10]: ” ) . public class PrgRombo01 { public static void main (String args[]) { int totalFilas = 0. Clase PrgRombo01 package dominioDeLaAplicacion .println ( “\nValor fuera de rango. En la figura el lado = 4. Ingrese entero entre [2.Desarrollo de la Codificación.out.ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS Problema 46 Etapa 01 – Descripción del problema. cont = 0. System. Pag. diagonal = 0.10]: ” ) .println ( ) . Desarrollar la codificación de una solución que permita mostrar la siguiente figura: * * * * * * Nota: desarrollar la figura con la estructura de repetición * * * * MIENTRAS (while). if (totalFilas < 2 || totalFilas > 10 ) { System. j = 1 . do { totalFilas = Lectura. 235 .leerInt ( ). } } while (totalFilas < 2 || totalFilas > 10 ) .print ( “ Ingrese el lado del rombo entre [2. i = 1. El lado del rombo debe tener un valor entre 2 y 10.out.out.println ( “ Programa que realiza un rombo de *s con la estructura \“WHILE\” \n” ) . * * * * * * Etapa 04 .* . i ++ . } if ( i < totalFilas ) cont ++ ..print ( “ ” ) . Pag.println ( ) . Intente resolverlo utilizando la sentencia for de Java. System. Ing. System. Juan José Flores Cueto.out.out.cont || j > totalFilas + cont ) // Se muestra un espacio en blanco. while ( i <= diagonal ) { j=1. else { // Se muestra un asterisco y un espacio en blanco. 236 . while ( j <= diagonal ) { if ( j < totalFilas . } j ++ . j ++ .out. else cont .print ( “* ” ) . } } } Analice la solución del problema y anote sus conclusiones.. System. * . diagonal = 0. i = 1.out. Ingrese enteros entre [2.1 .. } } while ( num < 2 || num > 9 ) . j = 1 . if ( num < 2 || num > 9 ) { System. 2 2 1 Etapa 04 . En la figura el dato = 4.Desarrollo de la Codificación. import biblioteca. n = 0. public class PrgRombo02 { public static void main (String args[]) { int num = 0.ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS Problema 47 Etapa 01 – Descripción del problema.out. Pag.println ( “ Programa que realiza un rombo de números ” ) .9]: ” ) . System. 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. Desarrollar la codificación de una solución que permita mostrar la siguiente figura: 1 2 2 3 3 3 Nota: la figura mostrada es un rombo de número. diagonal = 2 * num . 237 .leerInt ( ) .out.println ( “\nValor fuera de rango. Clase PrgRombo02 package dominioDeLaAplicacion . System.9]: ” ) . do { num = Lectura.println ( ) .print ( “ Ingrese el número máximo de la figura entre [2. cont = 0.out.. System. Con la finalidad de mejorar sus capacidades lógicas sugiero que desarrolle todas las variaciones posibles o que se pueda imaginar del presente problema. System. 238 . j ++ ) { if ( j >= num . else cont . for ( j = 1 . i ++ ) { n = cont + 1 . Analice cada una de las soluciones en forma detallada.. Pag. Ing.out. j <= diagonal .print ( n + “ ” ) . Juan José Flores Cueto. i <= diagonal . Tenga en cuenta que se han cambiado los nombres de las variables utilizadas en las soluciones anteriores. System. j ++ . System. } if ( i < num ) cont ++ . for ( i = 1 .cont && j <= num + cont ) { // Se muestra el contenido de la variable n y un espacio en blanco.. } } } Modifique está solución utilizando la estructura de repetición while en lugar de la estructura for.print ( “ ” ) .out.println ( ) . } else // Se muestra un espacio en blanco. Adicionalmente desarrolle la siguiente figura y sus posibles variaciones: 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 A continuación se presentan diversas soluciones que permitirán contribuir con el desarrollo de sus capacidades lógicas.out. Clase PrgFiguraA package dominioDeLaAplicacion .out. public class PrgFiguraA { public static void main(String args[]) { int lado = 0. for( int fil = 1 . do { lado = Lectura.* . System. col <= lado . System. } } System.out. fil ++ ) { for( int col = 1 .print ( “ ” ) . } } while ( lado < 2 || lado > 15 ) .out. } } } Pag.Desarrollo de la Codificación.println ( “\nValor fuera de rango.print ( “ Ingrese lado del cuadrado entre [2. import biblioteca. } else { // Se muestra un asterisco y un espacio en blanco.ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS Problema 48 Etapa 01 – Descripción del problema.15]: ” ) .println ( “ Programa que realiza un cuadrado hueco\n ” ) .out.print ( “* ” ) . System. Ingrese entero entre [2. fil <= lado . if ( lado < 2 || lado > 15 ) { System. * * * * * * * Etapa 04 .println ( ) . Desarrollar la codificación de una solución que permita mostrar la siguiente figura: * * * * * * * Nota: En la figura mostrada el número de filas = 5.println ( ) .15]: ” ) . System.out.out. Asuma * * que el número de filas puede variar desde 2 hasta 15. System.out.leerInt ( ). col ++ ) { if ( ( 1 < fil && fil < lado ) && ( 1 < col && col < lado ) ) { // Se muestran dos espacios en blanco. 239 . col <= fil . System.out.print ( “* ” ) .print ( “ Ingrese el lado del triángulo entre [2.out. fil ++ ) { for ( int col = 1 . Ingrese entero entre [2. public class PrgFiguraB { public static void main(String args[]) { int lado = 0 .out. } } while ( lado < 2 || lado > 20 ) . if ( lado < 2 || lado > 20 ) { System.leerInt ( ) . Desarrollar la codificación de una solución que permita mostrar la siguiente figura: * * * Nota: la cantidad de asteriscos que tiene la figura al lado izquierdo es el dato que se debe ingresar.println ( “\nValor fuera de rango.out. Clase PrgFiguraB package dominioDeLaAplicacion .println ( ) . // Un asterisco y un espacio.Desarrollo de la Codificación.20]: ” ) . Juan José Flores Cueto.* . // Dos espacios. } } } Pag. col ++ ) { if ( ( col == 1 ) || ( fil == col ) || ( fil == lado ) ) System. do { lado = Lectura. System.print ( “ ” ) .println ( ) .20]: ” ) . En la figura el lado = 5. Dicho dato debe * * tener un valor entre 2 y 20.out. fil <= lado . import biblioteca. } System. Problema 49 Etapa 01 – Descripción del problema. Ing. * * * * * * * Etapa 04 . 240 .out.println ( “ Programa que realiza un triángulo de asteriscos: ” ) .out. System. else System. for ( int fil = 1 . ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS Problema 50 Etapa 01 – Descripción del problema.print ( “ Ingrese la base impar del triángulo entre [3. } } } Pag. else System. do { base = Lectura.out. Clase PrgFiguraC package dominioDeLaAplicacion .print ( “ ” ) . 241 . import biblioteca. // Un asterisco y un espacio.print ( “* ” ) . fil < medio . System.out.fil || fil + 1 == medio ) System. medio = 0 . * * * * * * * * * * * Etapa 04 . fil++ ) { for ( int col = 1 . } System.out.leerInt ( ) .out. if ( base < 3 || base > 25 || base % 2 == 0 ) { System.25]: ” ) . public class PrgFiguraC { public static void main(String args[]) { int base = 0.* . medio = base / 2 + 1 .println ( “ Programa que realiza un triángulo hueco de base impar \n ” ) . for ( int fil = 0 . * * En la figura la base = 9. // Dos espacios.println ( “\nValor fuera de rango. col <= base . System.Desarrollo de la Codificación.out. Ingrese impar entre [3. System.out.out. Desarrollar la codificación de una solución que permita mostrar la siguiente figura: * * * 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.25]: ” ) . } } while ( base < 3 || base > 25 || base % 2 == 0 ) .println ( ) .println ( ) . col++ ) { if ( col == medio + fil || col == medio . System. System. System.Desarrollo de la Codificación.print ( “ ” ) .print ( “* ” ) . Clase PrgFiguraD package dominioDeLaAplicacion . do { lado = Lectura.println ( ) . else System. * * * * * * * * Etapa 04 .leerInt ( ) .out. if ( lado < 5 || lado > 15 || lado % 2 ==0 ) { System. import biblioteca.out.println ( ) .15]: ” ) . fil <= lado . Desarrollar la codificación de una solución que permita mostrar la siguiente figura: * * * * * * * * Nota: el lado de la figura debe tener un valor impar entre 5 y 15.out. } System.15]: ” ) . } } while ( lado < 5 || lado > 15 || lado % 2 == 0 ) . for ( int fil = 1 . * * * * * En la figura el lado = 5. Ing.out. public class PrgFiguraD { public static void main ( String args[] ) { int lado = 0 .* .out. 242 . Problema 51 Etapa 01 – Descripción del problema. Juan José Flores Cueto. Ingrese entero impar entre [5. col ++ ) { if ( fil == 1 || fil == lado || fil == lado/2+1 || col == 1 || col == lado || col == lado / 2+1) System.out. fil ++ ) { for ( int col = 1 .println ( “\nValor fuera de rango.print ( “ Ingrese el lado impar de la ventana entre [5.println ( “ Programa que realiza una ventana \n” ) .out. } } } Pag. col <= lado . print ( “ Ingrese el lado impar del cuadrado entre[5.println ( “\nValor fuera de rango.println ( “ Programa que realiza un cuadrado de asteriscos.print ( “ ” ) . 243 . fil ++ ) { for ( int col = 1 .print ( “ sus diagonales \n ” ) . if ( lado < 5 || lado > 15 || lado % 2 == 0 ) { System.out. Desarrollar la codificación de una solución que permita mostrar la siguiente figura: * * * * * * * * * Nota: el lado de la figura debe tener un valor impar entre 5 y 15.println ( ) . Clase PrgFiguraE package dominioDeLaAplicacion . * * * En la figura el lado = 5. fil <= lado . public class PrgFiguraE { public static void main (String args[]) { int lado = 0 . col ++ ) { if ( fil == 1 || fil == lado || fil == col || col == 1 || col == lado || col == (lado –fil +1) ) System. System. System.15]: ” ) . System.out. import biblioteca. else System.ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS Problema 52 Etapa 01 – Descripción del problema. } System.out.leerInt ( ) .Desarrollo de la Codificación. for ( int fil = 1 .print ( “* ” ) . * * * * * * * * * Etapa 04 . do { lado = Lectura.out.out. System.15]: ” ) . } } } Pag. col <= lado .out. Ingrese impar entre [5. } } while ( lado < 5 || lado > 15 || lado % 2 == 0 ) .out.* . mostrando ” ) .println ( ) .out. Ingrese un número par entre [4.out. } System. System. public class PrgFiguraF { public static void main (String args[]) { int alto = 0 . Juan José Flores Cueto.prinlnt ( “\nValor fuera de rango.out.18]: ” ) . System. col ++ ) { if ( fil <= ( alto / 2 ) ) if ( col == 1 || col == alto ) System. Desarrollar la codificación de una solución que permita mostrar la siguiente figura: * * Nota: el lado de la figura debe ser un número par con un valor * * desde 4 hasta 18.out.println ( “ Programa que realiza una figura similar a la letra U \n ” ) .leerInt ( ) . } } while ( ( alto < 4 ) || ( alto > 18 ) || ( alto % 2 == 0 ) ) .println ( ) . Clase PrgFiguraF package dominioDeLaAplicacion .out. Problema 53 Etapa 01 – Descripción del problema.print ( “* ” ) . 244 . do { alto = Lectura. * * * * * * * * Etapa 04 .println ( ) . col <= alto .print ( “ ” ) . else System. fil ++ ) { for ( int col = 1 .18]: ” ) .out.print ( “ Ingrese el alto (número par) de la figura entre [4.out.out. import biblioteca. En la figura el lado = 4. else System.print ( “* ” ) .Desarrollo de la Codificación.out. Ing. fil <= alto . for ( int fil = 1 .* . if ( ( alto < 4 ) || ( alto > 18 ) || ( alto % 2 == 0 ) ) { System. System. } } } Pag. mayor = 0. } } while ( lado < 2 || lado > 15 ) .println ( ) .println ( “\nValor fuera de rango. En la * * * * * * figura el lado = 5. 245 .out. if ( lado < 2 || lado > 15 ) { System. fil ++ ) { col = 1 .15]: ” ) .leerInt ( ) . mayor = (2 * lado ) + 1 . Ingrese entero entre [2. Desarrollar la codificación de una solución que permita mostrar la siguiente figura: * * * * * * Nota: el lado de la figura debe tener un valor entre 2 y 15. System.println ( “ Programa que realiza dos triángulos de asteriscos ”). * * * * * * * * * * * * * * * * * * Etapa 04 .fil < col ) System. System.print ( “ Ingrese el lado del triángulo entre [2. for ( int fil = 1 . System. Clase PrgFiguraG package dominioDeLaAplicacion . col ++ .println ( ) .out.Desarrollo de la Codificación.out.out.15]: ” ) . System.out.out.print ( “ frente a frente a sus hipotenusas \n ” ) . fil <= lado .ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS Problema 54 Etapa 01 – Descripción del problema.print ( “ ” ) . import biblioteca. do { lado = Lectura. } System.out. else System.out. public class PrgFiguraG { public static void main (String args[]) { int lado = 0. while ( col <= mayor ) { if ( col <= fil || mayor . col = 0 .* .print ( “* ” ) . } } } Pag. Juan José Flores Cueto.out.println ( “\nValor fuera de rango. col ++ . } } } Pag. else System. System. import biblioteca. for ( int fil = 1 .println ( ) .out.15]: ” ) .out. Ingrese entero entre [2. } System.leerInt ( ) .print ( “ Ingrese la base del triángulo entre [2. if ( base < 2 || base > 15 ) { System. } } while ( base < 2 || base > 15 ) . fil <= base .out.out.print ( ‘*’ ) . Ing.15]: ” ) . fil ++ ) { col = 1 . En la * * * * * * figura el lado = 5. Problema 55 Etapa 01 – Descripción del problema. System.out. ” ) . Desarrollar la codificación de una solución que permita mostrar la siguiente figura: * * * * * * Nota: el lado de la figura debe tener un valor entre 2 y 15. mayor = ( 2 * base ) + 1 . while ( col <= mayor ) { if ( (( base-fil ) < col && col <= base) || (( base+1) < col && col <= base+1+fil ) ) System. System. 246 . Clase PrgFiguraH package dominioDeLaAplicacion .println ( “ Programa que realiza dos triángulos de asteriscos.print ( ‘ ’ ) .print ( “ frente a frente a sus catetos \n ” ) . * * * * * * * * * * * * * * * * * * Etapa 04 . col = 0. mayor = 0.out.out. public class PrgFiguraH { public static void main (String args[]) { int base = 0. do { base = Lectura.Desarrollo de la Codificación.println ( ) .* . System. Ingrese entero mayor a 1 y menor ” ) .print ( “ menor a base [“ + base + ”]: ” ) . do { base = Lectura. Desarrollar la codificación de una solución que permita mostrar la siguiente figura: * * * * * * * * * * * Nota: la base y la altura del cuadrado se ingresarán por teclado.out.leerInt ( ) . * * * * * * * * * * * Etapa 04 . En la figura la base=10 * * y altura=5.Debe ser menor a la base [“ + base + ”]: ” ) . System. 247 . System.out. System.out. Ingrese entero mayor a 1 y ” ) ..ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS Problema 56 Etapa 01 – Descripción del problema. } } } while ( ! ( alto >1 && alto < base ) ) .out..out.println ( “ Para generar el rectángulo hueco en pantalla la base ” ) . Clase PrgfiguraI package dominioDeLaAplicacion . System.print ( “ debe ser >2 y el alto>1 \n ” ) .* . public class PrgFiguraI { public static void main (String args[]) { int base = 0.print ( “ Ingrese el alto del rectángulo.print ( “\nValor fuera de rango.Desarrollo de la Codificación. La base deberá ser mayor que la altura.out.print ( “\nEs un cuadrado. do { alto = Lectura. if ( alto < 1 || alto >= base ) { if ( alto == base ) { System. alto = 0.out.out. Pag. System.print ( “ Ingrese la base del rectángulo: ” ) . System.println ( “\nValor fuera de rango. } else { System. Ingrese entero mayor a 2: ” ) .out. import biblioteca. } } while ( base < 2 ) . System. if ( base < 2 ) { System.leerInt ( ) .println ( “ Programa que genera un rectángulo hueco de base > alto \n ” ) .out.print ( “ a base [“ + base + ”]: ” ) . 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 Etapa 01 – Descripción del problema. 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: Etapa 04 – Desarrollo de la codificación. Clase PrgFiguraJ package dominioDeLaAplicacion ; public class PrgFiguraJ { public static void main (String[] args) { for ( int i = -1 ; i <= 12 ; i ++ ) { for ( int j = -1 ; j <= 12 ; j++) { if ( i >= 1 && j >= 1 ) { if ( i * j < 10 ) // condiciones para dar el correcto. System.out.print ( “ ” + ( i * j ) + “ ” ) ; // espaciado en los productos. else { if ( i * j < 100 ) System.out.print ( “ ” + ( i * j ) + “ ” ) ; else System.out.print ( ( i * j ) + “ ” ) ; } } else { if ( j == -1 && i == -1 ) // condiciones para dar el correcto System.out.print ( “ * ” ) ; // espaciado en la prim. Fila y la else { // prim. Columna 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 Etapa 01 – Descripción del problema. Desarrollar la codificación de una solución que permita mostrar la siguiente figura: Etapa 04 – Desarrollo de la codificación. Clase PrgFiguraK package dominioDeLaAplicacion ; public class PrgFiguraK { public static void main ( String[] args ) { int fil = 10, col = 10 ; for ( int i = 1 ; i <= fil ; i ++ ) { for ( int j = 1 ; j <= col ; j ++ ) { 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 Etapa 01 – Descripción del problema. Desarrollar la codificación de una solución que permita mostrar la siguiente figura: Etapa 04 – Desarrollo de la codificación. Clase PrgFiguraL package dominioDeLaAplicacion; public class PrgFiguraL { public static void main ( String[] args ) { int fil = 10, col = 10 ; for ( int i = 1 ; i <= fil ; i ++ ) { for ( int j = 1 ; j <= col ; j ++ ) { if ( i == 1 || j == 1 || j == col || i == fil ) System.out.print ( “* ” ) ; else { if ( (( i==3 || i==8 ) && j>=3 && j<=8 ) || (( j==3 || j==8 ) && i>=3 && i<=8 ) ) System.out.print ( “* ” ) ; else { if ( ( i >=5 && i<=6 ) && ( j>=5 && j<=6 ) ) 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 cuadrados que debe tener la figura. Asegúrese de establecer los valores válidos para dicho dato. Pag. 252 ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS Problema 60 Etapa 01 – Descripción del problema. Desarrollar la codificación de una solución que permita mostrar la siguiente figura: Etapa 04 – Desarrollo de la codificación. Clase PrgFiguraM package dominioDeLaAplicacion ; public class PrgFiguraM { public static void main (String args[]) { int fil = 27, col = 24 ; for ( int i = 1 ; i <= fil ; i ++ ) { for ( int j = 1 ; j <= col ; j ++ ) { if ( ( ( j == 4 || j == 21 ) && ( i >= 4 && i <= 24 ) ) || ( ( i == 4 || i==24 ) && ( j >= 4 && j <=20 ) ) || ( i >= 8 && i <= 20 ) && ( j >= 8 && j <= 17 ) ) 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. 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. Funciones matemáticas: Clase Math • Introducción. • Métodos. • Problemas resueltos. Manejo de cadenas: Clase String • Introducción. • Métodos. • Problemas resueltos. Otras clases en Java CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA CAPÍTULO III CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE POGRAMACION JAVA 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 Los algoritmos son desarrollados dentro de los métodos. Ing. • Estructuras lógicas de repetición. LISTA DE PASOS SENTENCIAS DESCRIPCIÓN DECLARACIÓN Y DE DATOS DEFINICIÓN DE DATOS SE DESARROLLAN UTILIZANDO: • Estructuras lógicas de secuencia. 260 . • Estructuras lógicas de decisión. Es decir. Juan José Flores Cueto. Pag. TAMBIÉN: • Clases incorporadas en el lenguaje de programación utilizado. • Instrucciones de bifucación. contiene una gran variedad de clases. ALMACENADOS EN: • Estructuras de datos tipo variables. que tienen diferentes funciones y están agrupadas por medio de paquetes. siendo el método main( ). es decir. todo programa en Java está contenido en uno o mas métodos. El lenguaje de programación Java contiene diversas clases preprogramadas. el método principal que tiene como función iniciar la ejecución de una aplicación desarrollada en Java. con métodos y atributos. 261 . construyendo fácilmente aplicaciones profesionales.lang. agrupadas en el paquete java.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA El presente capítulo. Pag. Un paquete contiene clases que tienen funciones similares. trata sobre las clases básicas incorporadas en el lenguaje de 1 programación Java. 2 Clase: Colección de objetos del mismo tipo. 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). 1 Paquete: Conjunto de clases similares. El mundo real se modela mediante clases. Una clase es una implantación de un “tipo de objeto”. Un paquete permiten organizar las clases. Una clase es una abstracción y no referencia a ningún objeto en particular. 2 Es importante mencionar que utilizando las clases preprogramadas de Java se puede ahorrar mucho tiempo y esfuerzo de programación. Juan José Flores Cueto. 262 . Ing. Pag. El paquete java. El paquete Java. en los métodos se desarrollan o codifican los algoritmos. conocido también como java. En palabras sencillas.lang debido a su importancia no requiere ser importado por las aplicaciones para usar las clases que contiene. etc. 5 Métodos: Desarrollo de algoritmos. clases para 5 manipular cadenas de caracteres. está automáticamente importado para todos los programas. 263 .lang. por lo que la siguiente sentencia no será necesaria: import java. 4 Objetos: Modelos de entes del mundo. real o abstracta. Los métodos especifican la forma en que se controlan los datos de un objeto y es donde se define el comportamiento del mismo.* . es uno de los paquetes más 3 importantes de la API de Java. Pag. y contiene las clases que constituyen el corazón del lenguaje de programación Java.lang. 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. una clase 4 que proporciona los objetos para manipular la entrada y la salida estándar.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA EL PAQUETE DEL LENGUAJE JAVA El paquete del lenguaje Java. una clase que proporciona métodos correpondientes a las funciones matemáticas. Un objeto de software es cualquier cosa.lang contiene clases que encapsulan los tipos primitivos de datos. acerca del cual almacenamos datos y los métodos que controlan dichos datos. Entre las clases más importantes están las siguientes: Boolean Double Object StringBuffer Byte Float Package System Character Integer Process Thread Class Long Runtime Trowable ClassLoader Math Short Compiler Number String 3 API: Aplication Program Interface. es decir. Entre las clases a tratar en el presente capítulo se tienen: 1. • Long. • Character. Clase que proporciona métodos correspondientes a las funciones matemáticas básicas. conocidas como las clases 6 wrappers (envoltorios). 7 Clase Abstracta: Clase tratada como SuperClase. Pag. La Herencia es uno de los conceptos más importantes de la Programación Orientada a Objetos (POO). Ing. • String. donde la nueva clase derivada heredará todos los atributos y métodos de la clase existente. codificar los métodos que son declarados como abstractos en la clase abstracta y crear o instanciar objetos a partir de la clase derivada. Cada una de estas clases (consideradas subclases ). 3. Clase que proporciona los objetos necesarios para manipular y tratar cadenas de caracteres. • Double. 264 . Juan José Flores Cueto. Las clases abstractas se utilizan para forzar a los programadores a desarrollar algunos o todos los métodos de una clase. En su lugar. La nueva clase se llama Clase Derivada (o subclase) y la clase original se llama Clase Base (o superclase). 2. Clases que envuelven los tipos de datos primitivos. se debe derivar una nueva clase a partir de la clase abstracta. • Float. 6 Herencia: Subclase y Superclase. • Boolean. • Math. a 7 excepción de la clase Character. Una Clase Abstracta es un tipo de clase de la cual no se pueden crear o instanciar objetos. • Integer. Utilizando la herencia se puede derivar una nueva clase a partir de otra clase existente. se derivan de la clase abstracta Number (considerada superclase). • Byte. • Short. Una Instancia viene a ser lo mismo que un objeto. otros métodos son invocados o ejecutados utilizando un objeto o instancia de la clase en la cual están definidos. 8 Instancia: Representación concreta de una clase. tal es el caso de los métodos de la clase Math de Java. Crear un objeto o instanciar una clase se refiere a poder tener una representación real de una clase. 265 . los métodos siempre están dentro de una clase.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA En Java. tal es el caso de los métodos de la clase String de Java. Algunos métodos pueden ser invocados o ejecutados utilizando directamente el nombre de la clase en la cual están definidos. 8 Por otro lado. Pag. Estos métodos son conocidos como métodos de instancia o de objeto. Estos métodos son conocidos como métodos estáticos o de clase. Pag. Ing. Juan José Flores Cueto. 266 . byte. long. Los wrappers son clases diseñadas para ser un complemento de los tipos de datos primitivos y proporcionan métodos para realizar diferentes tareas con los tipos de datos primitivos. tales como la conversión con cadenas de caracteres. 267 . comprobación. tal y como se representan en un lenguaje de programación convencional. Dichas clases se muestran a continuación: TIPO DE DATO CLASES PRIMITIVO WRAPPERS boolean Boolean byte Byte char Character double Double float Float int Integer Long Long 9 Jerarquía de clases: Forma de ordenar las clases. por lo que en Java se han creado clases que permiten integrar los tipos de datos primitivos o simples dentro de la jerarquía de clases. char. En ocasiones. estando en la parte superior de la jerarquía. entre otras. 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.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA ENVOLTORIOS DE LOS TIPOS DE DATOS PRIMITIVOS: CLASES WRAPPERS INTRODUCCIÓN Los tipos de datos primitivos (boolean. conocidos también como tipos de datos simples. Esto tiene algunas ventajas desde el punto de vista de la eficiencia. Java tiene su propia jerarquía de clases. interesa sacrificar parte de la eficiencia por flexibilidad. Dichas clases son conocidas como las clases wrappers (envoltorios). 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. Existe una clase wrapper para cada uno de los tipos de datos primitivos. La jerarquía de clases es una forma de ordenar las clases existentes en un lenguaje de Programación Orientado a Objetos (POO). double. short). float.lang). la clase Object (esta clase pertenece al paquete java. que permiten tratarlos como objetos. son los únicos elementos del lenguaje de programación Java que se representan internamente a través de valores. Pag. traslación. int. Integer I = new Integer ( i ). para crear un objeto de la clase Integer utilizamos: int i = 5. Simplemente hay que ejecutar el método de la clase wrappers adecuada y el String se convierte al tipo de dato primitivo asociado. Ing. como los objetos de la clase String que no necesariamente se crean con dicha sentencia). tienen un método que permite convertir desde una cadena (String) al tipo primitivo. Donde el objeto I. JERARQUÍA DE CLASES Y HERENCIA java.lang. en general. Pag. que tiene un valor igual a 5 y métodos para manipular dicho valor. Para ejecutar un método de instancia es necesario crear un objeto de la clase donde está definido dicho método. tienen métodos estáticos y métodos de instancia. 268 .lang. TIPO DE DATO CLASES PRIMITIVO WRAPPERS Short Short Cada uno de estas clases wrappers (a excepción de Character).Character java. Juan José Flores Cueto.Number Byte Double Float Integer Long Short Las clases Java. Por ejemplo.Boolean java. Para crear un objeto en Java se usa la sentencia new (a excepción de los objetos de algunas clases.Object java.lang. es un objeto de la clase Integer.lang. comprobación y traslación de datos. 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. para referirnos a las variables se utilizará una letra minúscula. Se asume que los objetos han sido creados previamente. Pag. se utilizarán algunos objetos de dichas clases.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. 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. 269 . 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.toString ( l ) . A pesar que el método toString ( ) es un método estático o de clase. también puede ejecutarse utilizando un objeto. S = Double. Conversión de tipo de dato primitivo a objeto String Se puede convertir el valor de un tipo de dato primitivo o simple. a un valor de tipo cadena contenido en un objeto String.toString ( ) .toString ( ) . Esto depende si se tiene disponible la variable (con el tipo de dato primitivo) o el objeto de la clase wrapper (que contiene el valor). S = D. S = Float. o utilizar objetos de las clases wrappers.toString (i ) .toString ( f ) . Pag. Ing. Juan José Flores Cueto. se puede utilizar clases wrappers y variables. S = F. Observe que se utiliza el método toString ( ) para convertir el valor contenido en el objeto wrappers a un valor de tipo cadena contenido en un objeto String.toString ( ) . 270 .toString ( ) . Para realizar esta conversión. S = L.toString ( d ) . Conversión de tipo de dato primitivo a objeto String utilizando clases wrappers y variables: CLASES WRAPPERS Y OBJETO STRING VARIABLES S = Integer. Conversión de tipo de dato primitivo a objeto String utilizando objetos wrappers: OBJETO STRING OBJETOS WRAPPERS S = I. S = Long. siempre y cuando el objeto String contenga un dato equivalente al tipo de dato primitivo que se desea convertir. | Conversión de objetos String a tipo de dato primitivo Se puede convertir un objeto String a un tipo de dato primitivo.parseInt (S) . Observe que se utiliza el método valueOf ( ) para convertir el valor contenido en el objeto String S.parseFloat (S) . Este método es un método estático o de clase.valueOf (S) . d = Double. Float.parseDouble (S) . La clase Object es la clase principal en la Jerarquía de Clases de Java (se puede decir que es la clase padre de todas las clases). 271 . como ya se ha mencionado. Long. l = Long. es el método toString ( ). Pag. i = Integer.parseLong (S) .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 ( ). a que este método no pertenece a dichas clases. f = Float. utilizando clases wrappers y objeto String: VARIABLE WRAPPERS Y OBJETO STRING Integer.valueOf (S) . Conversión de objetos String a tipos de dato primitivo. Float y Double respectivamente. Double. parseFloat ( ) y parseDouble ( ) para los wrappers Integer.valueOf (S) . parseLong ( ). Esto se debe. y uno de los métodos definidos en esta clase. a un dato de tipo primitivo o valor de una variable.valueOf (S) . Todas las clases en Java pueden utilizar los métodos definidos en la clase Object (debido fundamentalmente a la herencia). Long. sino que pertenece a la clase Object. También se tiene la posibilidad de utilizar los métodos parseInt ( ). Estas clases pueden utilizar los métodos definidos en la clase Number a través de la herencia. Conversión de objetos wrappers a tipos de dato primitivo. d = F.longValue ( ) . l = F. D. I. longValue ( ). Ing.floatValue ( ) .intValue ( ) . L. Todas las clases wrappers tienen en común los métodos de instancia intValue( ). La clase Number es la superclase de las clases wrappers (a excepción de la clase wrapper Character). L.longValue ( ) . Estos métodos pertenecen en realidad a la clase Number.floatValue ( ) . f = F. floatValue ( ) y doubleValue ( ). Pag.intValue ( ) .longValue ( ) . utilizando clases wrappers: VARIABLE CLASES WRAPPERS I. D.doubleValue ( ) .floatValue ( ) . Conversión de objetos wrappers a tipos de datos primitivos Se puede convertir un valor de tipo cadena contenido en un objeto String a un valor de un tipo de dato primitivo o simple.doubleValue ( ) .floatValue ( ) . I. siempre y cuando el objeto String contenga un valor equivalente al valor del tipo de dato primitivo que se desea convertir. Observe que todas las clases wrappers tienen en común los métodos de instancia intValue ( ). L. I. floatValue( ) y doubleValue( ). L. D. longValue( ). 272 . i = F.longValue ( ) .intValue ( ) . D.doubleValue ( ) .doubleValue ( ) . Juan José Flores Cueto.intValue ( ) . 273 . Observe que se utiliza el método isNaN ( ) para determinar si la variable es o no un número.isNaN ( ).0 / 0. Comprobación del valor Not-a-Number utilizando clases wrappers y variables: VARIABLE OBJETOS WRAPPERS F. b = D.isInfinite ( d ).isNaN ( f ) . b = Double.isNaN ( d ). Comprobaciones del valor infinito Comprobación del valor infinito utilizando clases wrappers y variables: CLASES WRAPPERS Y VARIABLE VARIABLES Float. El método devuelve true si el valor de la variable no es un número. Pag. b = Double.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Comprobaciones del valor Not-a-Number Comprobación del valor Not-a-Number utilizando clases wrappers y variables: CLASES WRAPPERS Y VARIABLE VARIABLES Float.isInfinite ( f ) . Los valores Not-a-Number proceden de indeterminaciones tales como por ejemplo el resultado de la siguiente operación: 0.0.isNaN ( ) . “Devuelve true si el Character. 274 . Pag. caracter es un dígito decimal”.isSpace (c) .0.isInfinite ( ) . caracter es un espacio en blanco”. Los valores Infinite proceden normalmente de la división por cero de un valor finito. “Devuelve true si el Character.isInfinite ( ). b = D. caracter es una letra mayúscula”. El método devuelve true si el valor de la variable es un número infinito. Comprobaciones de caracteres Comprobación de caracteres utilizando la clase Character y variable tipo char: VARIABLE CLASE Character Y VARIABLE char “Devuelve true si el Character.isLowerCase (c) .5 / 0.isDigit (c) .isUpperCase (c) . Por ejemplo el resultado de la siguiente operación: 10. Ing. caracter es una letra minúscula”. b = “Devuelve true si el Character. Juan José Flores Cueto. Comprobación del valor infinito utilizando objetos wrappers: VARIABLE OBJETOS WRAPPERS F. Observe que se utiliza el método isInfinite ( ) para determinar si la variable es o no un número infinito. Pag. caracter a una letra mayúscula”. caracter a una letra minúscula”.toUpperCase (c).toLowerCase (c). c = “Convierte el Character. 275 .CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Traslación de caracteres Traslación de caracteres utilizando la clase Character y variable tipo char: VARIABLE CLASE Character y VARIABLE char “Convierte el Character. valueOf ( numEnteroLargo ) . cadena = String.valueOf ( numReal ) . int numEntero = 10. En ciertas ocasiones esto es necesario ya que las cadenas pueden ser manipuladas. System. Desarrollar un programa en Java que permita convertir valores de diferentes tipos de datos en valores de tipo cadena. Juan José Flores Cueto. 276 . Etapa 04 . String cadena = “ ”. System. long numEnteroLargo = 100000000. Analice como se pueden manipular las variables de tipo cadena (String) más adelante en este mismo capítulo. cadena = String.println ( “ Tipo float en String: ” + cadena ) .println ( “ Tipo double en String: ” + cadena ) . float numReal = 15.Desarrollo de la Codificación. Ing.println ( “ Tipo boolean en String: ” + cadena ) .println( “ Tipo long en String: ” + cadena ) .out. System. double numRealDoble = 10000. Problema 61 Etapa 01 .Descripción del problema. System. System. char letra = ‘z’.println ( “ Tipo char en String: ” + cadena ) . cadena = String.valueOf ( numEntero ) .5f.valueOf ( letra ) .println ( “ Tipo int en String: ” + cadena ) .out. cadena = String.out. Clase PrgConvertirAString package dominioDeLaAplicacion .out.valueOf ( estado ) . Pag.valueOf ( numRealDoble ) .98.out. System. cadena = String. } } Observe que es posible convertir cualquier tipo de dato a cadena (String) utilizando el método valueOf ( ) de la clase String. cadena = String. class PrgConvertirAString { public static void main ( String arg [ ] ) { boolean estado = true.out. class PrgConvertirFecha { public static void main ( String arg [ ] ) { Date hoy = new Date() .Date . 277 . 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. System. cadena = hoy.println ( “ Fecha: ” + cadena ) . Pag. Esta cadena de texto podrá ser manipulada para obtener otros datos.Descripción del problema. Etapa 04 . En este paquete podrá encontrar clases de utilidad para sus aplicaciones. el mes. el año actual o la hora del sistema.out. Desarrollar un programa en Java que permita obtener la fecha del sistema y la convierta en un valor de tipo cadena. } } La clase Date. import java. Este paquete está fuera del alcance del presente texto (sugiero que investigue las clases que forman parte de este paquete).util. El ejecutar esta aplicación se visualizará algo parecido a lo siguiente: Fecha: Sat Mar 20 11:38:46 GMT-05:00 2004. Clase PrgConvertirFecha package dominioDeLaAplicacion .toString ( ) . es una clase propia de Java y está incluida en el paquete java. Analice como se pueden manipular las variables de tipo cadena (String) más adelante en este mismo capítulo.Desarrollo de la Codificación. tales como. String cadena = “ ”.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 62 Etapa 01 . el día.util. Calcular y mostrar la suma de ambos valores. String cadena = “10" . Pag. System. Etapa 04 . System. Como sugerencia desarrolle un programa en Java que realice lo mismo que este programa pero utilice una variable long y la clase Long. 278 .out. Desarrollar un programa en Java que permita convertir una cadena en un número entero y en un objeto de tipo Integer.valueOf ( cadena ) .Descripción del problema.Desarrollo de la Codificación. Integer objInteger = Integer.println ( “ Valores enteros: ” + numEntero + “ " + objInteger ) . class PrgCadenaAEntero { public static void main ( String arg [ ] ) { int numEntero = 0 . Clase PrgCadenaAEntero package dominioDeLaAplicacion . Problema 63 Etapa 01 . Juan José Flores Cueto.intValue ( ) ) ) . Ing. El método intValue ( ) nos permite obtener el valor entero del objeto (objInteger) de la clase Integer. numEntero = Integer. que deberá asegurarse que la cadena contenga un valor válido para que pueda ser almacenado en un tipo de dato determinado.println ( “ La suma es: ” + (numEntero + objInteger. } } Observe que es posible convertir una cadena (String) en un valor entero (int) o en un objeto de la clase Integer. 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.parseInt ( cadena ) . Recuerde.out. System.Desarrollo de la Codificación. Etapa 04 . Pag.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 64 Etapa 01 .parseDouble ( cadena ) .out. que deberá asegurarse que la cadena contenga un valor válido para que pueda ser almacenado en un tipo de dato determinado. El método doubleValue ( ) nos permite obtener el valor real del objeto (objDouble) de la clase Double.out. Clase PrgCadenaAReal package dominioDeLaAplicacion . 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.Descripción del problema.print ( “ La suma es: ” ) . String cadena = “10.5” .valueOf ( cadena ) .out. Como sugerencia desarrolle un programa en Java que realice lo mismo que este programa pero utilice una variable float y la clase Float. } } Observe que es posible convertir una cadena (String) en un valor entero (double) o en un objeto de la clase Double.println ( numRealDoble + objDouble. Calcular y mostrar la suma de ambos valores. System. System. Desarrollar un programa en Java que permita convertir una cadena en un número real y en un objeto de tipo Double. Recuerde. 279 .println ( “ Valores enteros: ” + numRealDoble + “ ” + objDouble ) .doubleValue ( ) ) . Double objDouble = Double. class PrgCadenaAReal { public static void main ( String arg [ ] ) { double numRealDoble = 0 . numRealDoble = Double. Juan José Flores Cueto. Ing. Pag. 280 . las clases finales no pueden heredarse.lang. 10 Clase Final: No puede ser una superclase.lang.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA FUNCIONES MATEMÁTICAS: CLASE MATH INTRODUCCIÓN La clase Math. En consecuencia.Math El paquete java.lang es el paquete principal del lenguaje Java por lo cual no se necesita importar ninguna clase incluida en dicho paquete.pow (a.Object java. logaritmo. 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. no se pueden crear objetos de la clase Math).lang cada vez que se necesite utilizar la clase Math de Java. Esto significa que no puede ser instanciada (es decir. no será necesario importar el paquete java. para implementar diversas funciones mátemáticas. Pag. la cual nos proporciona métodos y atributos. raiz cuadrada y funciones trigonométricas. incluida en el paquete java. Todos los métodos de una clase final son implícitamente finales. Es decir. como exponencial.lang. JERARQUÍA DE CLASES Y HERENCIA java. es una clase que viene incorporada en el lenguaje de programación Java. b) . Ejemplo: Math. 281 . La clase Math contiene métodos de cálculo básico. Una clase final o declarada como final es una clase que no puede ser una superclase. La clase Math a diferencia de otras clases es 10 una clase final . el operador punto y el nombre del método a utilizar. 7. 6. 2. 16. A continuación se presenta una breve descripción del uso de cada uno de los métodos de la clase Math: Pag. 2. Para trabajar con los métodos de clase. cos( ). el método necesita algunos datos. 14. es necesario colocar la palabra Math (que es el nombre de la clase). Para ejecutar un método de clase. 8. E. min( ). 18. ceil( ). 11. Juan José Flores Cueto. para ejecutar un método de la clase Math debemos tener en cuenta que si. 5. acos( ). 9. asin( ). 19. MÉTODOS La clase Math presenta los siguientes atributos y métodos de clase: Atributos de clase: 1. 17. Asimismo. 12.) y el nombre del método de clase que desea ejecutar. floor( ). de la clase Math. abs( ). toDegrees( ). toRadians( ). sin( ). 282 . 13. atan( ). pow( ). 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. sqrt( ). 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). tan( ). 4. exp( ). 10. round( ). 3. random( ). el operador punto (. log( ). 15. estos deben ser necesariamente proporcionados en la cantidad y tipos requeridos. PI. max( ). Ing. Métodos de clase: 1. El ángulo expresado en radianes debe ser un valor double Resultado : enviado al método como parámetro. abs (long) double angulo = 45.out. El ángulo expresado en radianes debe ser un valor double Resultado : enviado al método como parámetro. asin (double) radianes. System. Resultado: pi = 3. result = 0.print( result ) .9033391107665127 Retorna un valor double con el arcotangente de un ángulo expresado double angulo = 45.print( result ) . e = 2.6674572160283838 double angulo = 45.0 * Math. double. atan (double) en radianes.PI/180.acos( angulo ) . System. Resultado: abs (int) x = 5.out. MÉTODOS DE DESCRIPCIÓN USO CLASE abs (float) int x = -5 .print( result ) .141592653589793. result = 0.0 * Math.atan( angulo ) . Retorna un valor double con el result = Math.0 . radianes debe ser un valor double System.out. El valor es equivalente a Resultado: 2. Almacena el valor de PI.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA CLASE Math ATRIBUTOS DE DESCRIPCIÓN USO CLASE double e = Math. 283 .abs( x)) .0 . Retorna un valor double con el double result . El ángulo expresado en result = Math.asin( angulo ) . Es decir. double result .PI/180.print( e) . int. acos (double) en radianes. proporciona la base de un logaritmo E natural. enviado al método como parámetro.718281828459045. PI almacena el valor equivalente a 3.0 * Math. número (que puede ser float.E .out. abs (double) Retorna el valor absoluto de un System. arcocoseno de un ángulo expresado System. double pi = Math. nos System.718281828459045.PI/180.out. Pag. arcoseno de un ángulo expresado en result = Math.141592653589793. Almacena el valor de E. long) dado como parámetro.print( Math. double result .print( pi) .PI .0. Es decir.out. 0 .cos( angulo ) .6657737500283538 double n = 0. logaritmo natural (base e) de un System. result . result = 2. double) Resultado: Pag.print( result ) .println( result ) .println(result) . exponencial de Euler del parámetro exp (double) dado.PI/180.7182818284590455 double n = 5.exp(exponente) . El parámetro dado Resultado: sebe ser double.print ( mayor ) . El parámetro dado debe ser double.max( x .out. más corto no menor que el parámetro System. double x = 10 .0 * Math.65 . long) de dos números dados como max (float. Resultado: result = 1. y ) . Retorna un valor double con el valor System. log (double) parámetro dado. resutl = 5. Retorna un valor double con el valor result = Math.0 double logaritmo = 3. result = Math. result = 1.8660254037844387 double exponente=1.out. MÉTODOS DE DESCRIPCIÓN USO CLASE Resultado : result = 0. de un ángulo expresado en radianes. ceil (double) dado. Retorna un valor double con el valor System.65 . El parámetro dado Resultado: debe ser double.out. floor (double) más grande no mayor que el parámetro dado. result . max (double.0986122886681096 Retorna el valor del número mayor (que puede ser float.out.0 . y = 15 . 284 . mayor . Juan José Flores Cueto. ser un valor double enviado al método Resultado : como parámetro. Ing. System.log(logaritmo) .print(result) . mayor = Math. result . Retorna un valor double con el coseno double result . double. int.out. result = Math. El parámetro dado sebe ser Resultado: double. float) parámetros.out.0 double angulo = 30. cos (double) El ángulo expresado en radianes debe System.0 .println( result ) . Retorna un valor double con el result = Math. result . result = Math.ceil( n ) . result = 0.floor(n) . que 1.0 y menor System. primer parámetro) elevado a otro pow (double. int) parámetros.print ( num ) .print ( result ) . long) de dos números dados como Resultado: min (int.out. y = 4 .out. long) min (float. 285 .round( x ) . result = 16.min( x . double) Retorna el valor del número menor System. y = 15 . y ) .println(result) . int) mayor = 15. y ) .sin(angulo) .random( ) . min (double. menor = 10.0. Retorna un valor double con un double num . float) double x = 10 . double result . número generado aleatoriamente (al num = Math. result .53 .pow( x . round (float) double x = 10. long) double x = 2 . max (long. double. (que puede ser float. El parámetro dado puede ser un valor float o double. potencia de un número (dado como System. parámetro dado. o double) con el valor redondeado del System.print ( menor ) . Retorna un valor double con el seno de un ángulo expresado en radianes. min (long. como parámetro.PI/180. System.0. Retorna un valor double con la result = Math.out. menor .print ( result ) . Resultado: Pag.out. double angulo = 37. Resultado: round (double) result = 11. int.out.0 * El ángulo expresado en radianes debe Math. result . sin (double) ser un valor double enviado al método result = Math.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA MÉTODOS DE DESCRIPCIÓN USO CLASE max (int. Retorna un valor (que puede ser float result = Math. Los dos parámetros dados deben ser double. menor = Math. random () azar) mayor o igual que 0. double) número (dado como segundo Resultado: parámetro). out.0471975511965976 A continuación. Pag.toRadians(angulo) .sqrt( x ) . Permite result = Math.println( result ) . toDegrees (double) radianes (enviado como parámetro double) en un ángulo expresado en Resultado: sexagesimal. MÉTODOS DE DESCRIPCIÓN USO CLASE result = 0.toDegrees(angulo) . double angulo = 53. Retorna un valor double con la raiz result = Math. radianes debe ser un valor double Resultado: enviado al método como parámetro.3270448216204098 double angulo = Math.99999999999999 double angulo = 60. Juan José Flores Cueto. result = 1. Ing.out. tangente de un ángulo expresado en result = Math. result . result .PI/3. result = 59.println(result) . toRadians (double) sexadecimal (enviado como parámetro double) en un ángulo expresado en Resultado: radianes.tan(angulo). se presentan algunas soluciones a problemas planteados utilizando algunos de los métodos de la clase Math.out. 286 . System. result = 1.0 * Math.println( result ) .0 . convertir un ángulo expresado en System.print ( result ) . El ángulo expresado en System. Retorna un valor double. Resultado: result = 4. Retorna un valor double. El sqrt (double) parámetro dado debe ser un valor double. Analice cada una de las siguientes soluciones. cuadrada del parámetro dado. result . tan (double) radianes.PI/180. convertir un ángulo expresado en System. Retorna un valor double con la double result .out. con la finalidad de mejorar la comprensión del tema tratado.6018150231520483 double x = 16 . Permite result = Math. Lectura . System. num3 = Lectura. } } ¿Que hay de nuevo en la codificación? Observe el uso del método max ( ) de la clase Math: Math.Descripción del problema. resultado .out.leerInt( ) .max ( num1. Nombre de la Clase.leerInt( ) . Etapa 04 . num3 ) Parámetros. num3. Clase PrgNumeroMayor package dominioDeLaAplicacion . resultado = Math. import biblioteca. num2. System.println ( “ Ingresar el tercer número: ” ) . Operador punto. Math. num1 = Lectura. 287 . Pag.Desarrollo de la Codificación.out. System.out. class PrgNumeroMayor { public static void main ( String arg [ ] ) { int num1.out.println ( “ Ingresar el primer número: ” ) . num2 = Lectura. Desarrollar un programa en Java que permita ingresar 3 números enteros a través del teclado. Nombre del método.max ( num2.leerInt( ) .println ( “ Ingresar el segundo número: ” ) . Determinar y mostrar cuál de ellos es el número mayor.println ( “ El número mayor es: ” + resultado ) . System. num3 ) ) .max ( num2.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 65 Etapa 01 . Juan José Flores Cueto. double. Observe que en esta solución se emplea una estrategia mas simple para determinar el número mayor entre tres números.max ( num2. Ing. 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. 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). num3 ) ) . Pag.max ( num1. El método max ( ) de la clase Math. 288 . 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. Math. retorna el valor del número mayor (puede ser un número float. tal y como se muestra a continuación: resultado = Math. out. tal y como se muestra a continuación: resultado = Math.println ( “ El número menor es: " + resultado ) . num2 = Lectura.min ( num1. System. Math.min ( num2.leerInt( ) . int. System.println ( “Ingresar el segundo número: ” ) . resultado = Math.leerInt( ) . System.out. import biblioteca.out.out. num1 = Lectura. 289 . En nuestro ejemplo hallamos el menor de los dos últimos números ingresados. Observe que Math. Determinar y mostrar cuál de ellos es el número menor. num3 ) ) . } } ¿Que hay de nuevo en la codificación? 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).leerInt( ) .min ( num2.println ( “Ingresar el tercer número: ” ) . long) de dos números dados como parámetros. Desarrollar un programa en Java que permita ingresar 3 números enteros a través del teclado.println ( “ Ingresar el primer número: ” ) .min ( ) retorna el valor del número menor (que puede ser float.Descripción del problema. Clase PrgNumeroMenor package dominioDeLaAplicacion . resultado . class PrgNumeroMenor { public static void main ( String arg [ ] ) { int num1.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 66 Etapa 01 . Etapa 04 .Desarrollo de la Codificación. num3. Pag.Lectura . num3 ) ) . double.min ( num1. y en la misma línea evaluamos el menor de estos dos números con el primer número ingresado. num2. num3 = Lectura. System. Math. random( ) * 6 ) . cant.leerInt( ) . import biblioteca.out. x++) { num = 1 + (int) ( Math. Cada vez que se ejecuta la sentencia for.println ( “La suma de los números aleatorios es: ” + suma ) . se genera y muestra un número aleatorio (un número entre 1 y 6). System.println ( “El número aleatorio generado es: ” + num ) . Desarrollar un programa en Java que permita generar una cantidad determinada de números aleatorios. } } ¿Que hay de nuevo en la codificación? Observe el uso del método random ( ) de la clase Math: num = 1 + (int) (Math. Clase PrgNumerosAleatorios package dominioDeLaAplicacion .out. se emplea la siguiente fórmula: Pag. cant = Lectura.Lectura . Finalizada la ejecución de la sentencia for se muestra el contenido de dicha variable (es decir. suma = suma + num . 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.Descripción del problema. Etapa 04 . class PrgNumerosAleatorios { public static void main ( String arg [ ] ) { int x. for ( x = 1. utilizando el método random ( ) de la clase Math. Juan José Flores Cueto. Ing. num. Recuerde que para generar números aleatorios entre dos números (entre un intervalo o rango). } System. Mostrar el número generado aleatoriamente y la suma de dichos números. suma=0 .out. 290 . Problema 67 Etapa 01 . x <= cant.Desarrollo de la Codificación.print ( “Ingresar la cantidad de números aleatorios a generar: ” ) . el cual es acumulado en la variable suma.random ( ) * 6 ) . System. se muestra la suma de los números aleatorios generados). Los números aleatorios generados deberán estar entre 1 y 6. random( ) * ( 6 – 1 + 1 ) ) .CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA min + (int) ( Math. 291 . Pag. 1 + (int) ( Math. Para nuestro ejemplo tenemos: 1 + (int) ( Math.random( ) * (max – min + 1 ) ) .random( ) * ( 6 ) ) . Desarrollar un programa en Java que permita generar una cantidad determinada de números aleatorios.out. 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. Ing.random( ) * 10 ) . 292 .Descripción del problema. Juan José Flores Cueto. Clase PrgNumAleatoriosPares package dominioDeLaAplicacion . } } ¿Que hay de nuevo en la codificación? En la codificación de esta solución se utiliza una sentencia do con la finalidad de generar números aleatorios.out. cant = Lectura. Los números aleatorios generados deberán estar entre 1 y 10. Pag. do { num = 1 + (int) ( Math. System. Problema 68 Etapa 01 . import biblioteca. class PrgNumAleatoriosPares { public static void main ( String arg [ ] ) { int x. } } while (cant != cont) . cant. Etapa 04 . num. cont = 0 . if (num % 2 == 0) { cont++.Lectura .print ( num + “ \t ” ) . System.print ( “Ingresar la cantidad de números aleatorios a generar: ” ) . Mostrar los números aleatorios que son números pares.Desarrollo de la Codificación.leerInt( ) . do { num = 1 + (int) ( Math. import biblioteca.Desarrollo de la Codificación.Descripción del problema. cont = 0 . Desarrollar un programa en Java que permita generar una cantidad determinada de números aleatorios. Etapa 04 . Pag.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 69 Etapa 01 . 293 . cant = Lectura. num.out.print ( num + “ \t ” ) .out.random( ) * 10 ) . if ( num % 2 == 1 ) { cont ++.leerInt( ) . } } ¿Que hay de nuevo en la codificación? En la codificación de esta solución se utiliza una sentencia do con la finalidad de generar números aleatorios. System. Los números aleatorios generados deberán estar entre 1 y 10. System. Clase PrgNumAleatoriosImpares package dominioDeLaAplicacion . class PrgNumAleatoriosImpares { public static void main ( String arg [ ] ) { int x.Lectura . 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. } } while ( cant != cont ) . Mostrar los números aleatorios que son números impares. cant.print ( “Ingresar la cantidad de números aleatorios a generar: ” ) . System.PI). 3 ) . System. volume = (4 / 3) * Math. 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. volume .println ( “Ingresar el radio de la esfera: ” ) . 3 ) . Ing. import biblioteca.println ( “El volumen de la esfera es: ” + volume ) .Lectura .Desarrollo de la Codificación.Descripción del problema. Calcular y mostrar el volumen de dicha esfera.pow ( radio. Clase PrgRadioEsfera package dominioDeLaAplicacion . 294 . La clase Math define un atributo (constante) muy útil. 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). Desarrollar un programa en Java que permita ingresar por teclado el radio de una esfera.out. Etapa 04 .out. que contiene en valor del número PI (Math.PI * Math. class PrgRadioEsfera { public static void main ( String arg [ ] ) { double radio.leerDouble(). radio = Lectura.pow ( radio. Pag. } } ¿Que hay de nuevo en la codificación? Observe el uso del método pow ( ) y del atributo PI de la clase Math: volume = (4 / 3) * Math. Problema 70 Etapa 01 .PI * Math. Juan José Flores Cueto. Lectura . En esta solución se ingresa un número y se almacena en la variable num. Luego.out. resultado = Math. dicho número es redondeado utilizando el método round ( ) y se almacena en la variable resultado. num = Lectura. Desarrollar un programa en Java que permita ingresar un número decimal. 295 .round(num) .Descripción del problema. class PrgNumRedondeado { public static void main ( String arg [ ] ) { double num. System.round(num) . El método round ( ) permite redondear un número dado como parámetro. Pag.leerDouble( ) .out. System.Desarrollo de la Codificación.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 71 Etapa 01 . resultado . Mostrar el número ingresado redondeado. import biblioteca. Clase PrgNumRedondeado package dominioDeLaAplicacion . } } ¿Que hay de nuevo en la codificación? Observe el uso del método round ( ) de la clase Math: resultado = Math.println ( “El número redondeado es: ” + resultado ) .println ( “Ingrese un número decimal: ” ) . Etapa 04 . for ( int x = 1. Juan José Flores Cueto.leerInt( ) . cant = Lectura. Ing. import biblioteca.out. x++) { rpta = Math. expo = Lectura.Lectura .Descripción del problema. Clase PrgNumPotencia package dominioDeLaAplicacion . expo . 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.out.println ( “Ingresar el exponente: ” ) . Problema 72 Etapa 01 . Desarrollar un programa en Java que permita ingresar un número entero y un exponente. Recuerde y siempre tenga presente que el método pow ( ) de la clase Math. System.out.println ( “Ingresar un número entero: ” ) . System. 296 . } } } ¿Que hay de nuevo en la codificación? Observe el uso del método pow ( ) de la clase Math: rpta = Math. x < cant. Pag.leerInt( ) . Mostrar el resultado de calcular la potencia de todos los números menores que el número ingresado elevado al exponente ingresado. double rpta .println ( “El Exponencial de ” + x + “ es: ” + rpta ) . La variable cant y el exponente expo se ingresan por el teclado. El método pow ( ) permite elevar a la potencia un número determinado.pow ( x. expo ) . Etapa 04 . expo ) . System.Desarrollo de la Codificación. class PrgNumPotencia { public static void main ( String arg [ ] ) { int cant. retorna un valor double. por lo que dicho valor deberá ser almacenado en una variable del mismo tipo o deberá mostrarse por la pantalla.pow ( x. Lectura .sqrt ( x ) . x < cant.Descripción del problema. 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. Mostrar el resultado de calcular la raíz cuadrada de todos los números menores que el número ingresado.println ( “Ingrese un número entero: ” ) . cant = Lectura. System.leerInt( ) . Etapa 04 .CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 73 Etapa 01 . Pag. double rpta . } } } ¿Que hay de nuevo en la codificación? Observe el uso del método sqrt ( ) de la clase Math: rpta = Math. Recuerde y siempre tenga presente que el método sqrt ( ) de la clase Math. Desarrollar un programa en Java que permita ingresar un número entero. x++ ) { rpta = Math.out.out. import biblioteca.println ( “La raíz cuadrada de ” + x + “ es: ” + rpta ) . El método sqrt ( ) permite obtener la raíz cuadrada de un número determinado. for ( int x = 1. 297 . class PrgNumRaiz { public static void main ( String arg [ ] ) { int cant . retorno un valor double.Desarrollo de la Codificación.sqrt (x) . Clase PrgNumRaiz package dominioDeLaAplicacion . por lo que dicho valor deberá ser almacenado en una variable del mismo tipo o deberá mostrarse por la pantalla. La variable cant se ingresa por el teclado. System. Desarrollar un programa en Java que permita generar una cantidad determinada de números aleatorios. Mostrar los números generados aleatoriamente elevados al cuadrado.println ( num + “ elevado al cuadrado es: ” + rpta ) .random() * 10 ) ) . rpta = Math.Descripción del problema.out. } } } ¿Que hay de nuevo en la codificación? Observe el uso de los métodos random ( ) y sqrt ( ) de la clase Math: num = (int) ( 1 + ( Math. x++ ) { num = (int) ( 1 + ( Math.Lectura . Clase PrgNumAleatorioCuad package dominioDeLaAplicacion . System. Etapa 04 . 298 .pow (num. Problema 74 Etapa 01 . Pag. elevarlos al cuadrado y mostrarlos por pantalla.random() * 10 ) ) . En la presente solución se utiliza una sentencia for con la finalidad de obtener números aleatorios. Los números aleatorios generados deberán estar entre 1 y 10. for ( int x = 1. Juan José Flores Cueto. cant = Lectura.pow (num. x <= cant.Desarrollo de la Codificación. double rpta .out. 2) . 2) . System. Ing. import biblioteca.print ( “Ingresar la cantidad de números aleatorios a generar: ” ) . La variable cant se ingresa por el teclado.leerInt( ) . rpta = Math. num . class PrgNumAleatorioCuad { public static void main ( String arg [ ] ) { int cant. Descripción del problema. import biblioteca. System. tmp. p = (a+b+c) / 2. b.out. Clase PrgTriangulo package dominioDeLaAplicacion . Donde: p = Semiperímetro. c = Lectura.Desarrollo de la Codificación. System.abs(p .Lectura .println ( “Ingrese el valor del segundo lado del triángulo (b): ” ) . 299 . Etapa 04 .println ( “Ingrese el valor del primer lado del triángulo (a): ” ) . b = Lectura. Desarrollar un programa en Java que permita determinar y mostrar el área de un tríangulo en base a las longitudes de sus lados.out. System. Considerar el valor absoluto de la diferencia entre el semiperimetro y cada uno de los lados.println ( “El área del triángulo es: ” + area ) . area . class PrgTriangulo { public static void main ( String arg [ ] ) { double a.out.leerDouble( ) .b) ) ) . tmp = ( p * (Math.abs(p . p = (a + b + c) / 2 . a.leerDouble( ) . Utilizar las siguientes fórmulas: area = ( p * (|p-a|)*(|p-b|)*(|p-c|)) RAIZ (2).CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 75 Etapa 01 . b.sqrt ( tmp ) . a = Lectura. } } Pag.leerDouble( ) . p. area = Math. c. c = Lados del triángulo. System.abs(p .c)) * (Math.println ( “Ingrese el valor del terecr lado del triángulo (c): ” ) .out.a)) * (Math. 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.sqrt ( tmp ) .a)) * (Math.abs(p .b) ) ) . ¿Que hay de nuevo en la codificación? Observe el uso de los métodos abs ( ) y sqrt ( ) de la clase Math: tmp = ( p * (Math. area = Math.c)) * (Math. 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. 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. Luego. 300 . Juan José Flores Cueto.abs(p . Luego.abs(p . Ing. Pag. se procede a calcular el área del triángulo en base a la siguiente fórmula: area = ( p * (|p-a|)*(|p-b|)*(|p-c|)) RAIZ (2) Primero. System. area = PI * radio * radio. 301 .println ( “ El perímetro del círculo es : ” + perimetroCirculo ) . areaCirculo = Math. radioCirculo = Lectura. Utilizar las siguientes fórmulas: perimetro = 2 * PI * radio. System. Desarrollar un programa en Java que permita determinar y mostrar el perímetro y el área de un círculo.PI * Math. } } Pag.Desarrollo de la Codificación.pow (radioCirculo. perimetroCirculo = 2 * Math.leerDouble( ) . areaCirculo.out. Etapa 04 . 2) .Descripción del problema.PI * radioCirculo .out.println ( “ El área del círculo es: ” + areaCirculo ) .out.Lectura . perimetroCirculo .CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 76 Etapa 01 . Clase PrgCirculo package dominioDeLaAplicacion . System. class PrgCirculo { public static void main ( String arg [ ] ) { double radioCirculo.println ( “ Ingrese el valor del radio del círculo: ” ) . import biblioteca. if (anguloGrados > 90 && anguloGrados < 180) tipoAngulo = “Obtuso” .println ( “ Ángulo expresado en radianes: ” + anguloRadianes ) . = Cóncavo. if (anguloGrados > 180 && anguloGrados < 360) tipoAngulo = “Concavo” . Entre 0 y 90 grados. = Agudo. anguloGrados = Lectura. 360 grados. System. if (anguloGrados > 0 && anguloGrados < 90) tipoAngulo = “Agudo” . Entre 180 grados y 360 grados.toRadians (anguloGrados) .println ( “ Ingrese un ángulo en grados (entre 0 y 360): ” ) . anguloRadianes = Math. Clase PrgConversionAngulo package dominioDeLaAplicacion . anguloRadianes . 90 grados. class PrgConversionAngulo { public static void main ( String arg [ ] ) { double anguloGrados.println ( “ Tipo de ángulo: ” + tipoAngulo ) . Problema 77 Etapa 01 . if (anguloGrados == 180) tipoAngulo = “Llano” . 302 . = Completo. Juan José Flores Cueto.Descripción del problema. Entre 90 y 180 grados. String tipoAngulo = “” . } } Pag. if (anguloGrados == 90) tipoAngulo = “Recto” .Lectura . Los ángulos expresados en grados se clasifican de la siguiente manera: 0 grados. = Recto. 180 grados. Desarrollar un programa en Java que permita ingresar un ángulo expresado en grados. import biblioteca.out. System. = Obtuso. Etapa 04 . Ing. Deeterminar el tipo de ángulo ingresado y su equivalente en radianes. if (anguloGrados == 360) tipoAngulo = “Completo” .leerDouble( ) . System.out. = Nulo. = Llano.out.Desarrollo de la Codificación. if (anguloGrados == 0) tipoAngulo = “Nulo” . 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.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA ¿Que hay de nuevo en la codificación? Observe el uso del método toRadians ( ) de la clase Math: anguloRadianes = Math. 303 . 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.toRadians (anguloGrados) . El tipo de ángulo es almacenado en una variable String (tipoAngulo) y mostrado por pantalla. println ( “ El primer valor para x es: ” + x1 ) . System.b .leerInt( ) . Problema 78 Etapa 01 .out. Utilizar la siguiente fórmula: x = ( .println ( “ La ecuación tiene raices imaginarias ” ) . b.( ( B ** 2 – 4 * A * C ) RAIZ ( 2 ) ) ) / 2 * A.out.B + .b + Math. Juan José Flores Cueto.println ( “ El valor para x es: ” + x ) .out. Clase PrgEcuacion2Grado package dominioDeLaAplicacion .Math. if (tmp < 0) { System.println ( “ La ecuación no tiene solución ” ) . } } } } } Pag. if (a == 0 && b == 0) { System. c = Lectura.println ( “ El segundo valor para x es: ” + x2 ) . Ing. x. x2 . System. x1. Etapa 04 . class PrgEcuacion2Grado { public static void main ( String arg [ ] ) { int a.sqrt (tmp)) / (2 * a) . 2) . 304 . System.out. Tipo: 2 Ax + Bx + C = 0 Considerar que la solución puede tener raíces imaginarias.leerInt( ) .println ( “ Ingrese el coeficiente B: ” ) . c . System.out. x2 = ( . } else { tmp = Math.Lectura .println ( “ Ingrese el coeficiente C: ” ) .leerInt( ) .Descripción del problema.Desarrollo de la Codificación.sqrt (tmp)) / (2 * a) .out. a = Lectura.println ( “ Ingrese el coeficiente A: ” ) .pow (b. System. b = Lectura. Desarrollar un programa en Java que permita determinar y mostrar las raíces de una ecuación de segundo grado.(4 * a * c) . } else { if (a == 0) { x = c / b * (-1) . System. import biblioteca. double tmp.out.out. } else { x1 = ( . pow (b. b y c). si el coeficiente a es igual a cero la ecuación tendría una sola solución. 305 . se muestra el siguiente mensaje por pantalla. Pag.(4 * a * c) .sqrt (tmp)) / (2 * a) . Caso contrario.b . “La ecuación tiene raices imaginarias”.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA ¿Que hay de nuevo en la codificación? Observe el uso de los métodos pow ( ) y sqrt ( ) de la clase Math: En esta solución se ingresan los coeficientes de una ecuación de segundo grado (a.Math. las cuales se calcularían utilizando: x1 = ( . Si los coeficientes a y b son iguales a cero. la cual se calcularía utilizando: x = c / b * (-1) .sqrt (tmp)) / (2 * a) . se muestra un mensaje por la pantalla. el cual se almacena en la variable tmp utilizando la siguiente formula: tmp = Math. Si el coeficiente a es diferente de cero la ecuación tendría dos soluciones. x2 = ( . En caso que el valor de tmp sea igual a cero. 2) . “La ecuación no tiene solución”. Caso contrario.b + Math. se determina el valor de la discriminante. Trate de adivinar el número en -” ) . } System. while (num != numAzar) { inten++ . } while (num < 0 || num > 100) . System. inten = 1 ..out. Clase PrgJuego package dominioDeLaAplicacion .numero aleatorio y ud. num = Lectura. y cada vez que intente adivinar le indicará si el número buscado es menor o es mayor. System. do { System.round(tmp) . tratara -” ) .out.el menor número de intentos -” ) . do { System.out.. El rango de números válidos en el juego es de 1 a 100. num.Desarrollo de la Codificación.Lectura .out.println ( “ . Problema 79 Etapa 01 .leerInt( ) .leerInt( ) .out.100: ” ) .println ( “ El número buscado es menor ” ) . num = Lectura. System.println ( “ Ingrese un número entre 0. } } Pag. numAzar. } while (num < 0 || num > 100 ) .La computadora genera un -” ) .println ( “ ----------------------------------------------------” ) .out.random( ) . if (num < numAzar) System.100: ” ) .println ( “ .out. class PrgJuego { public static void main ( String arg [ ] ) { int maximo = 100.println ( “ .println ( “ El número buscado es mayor ” ) . Ing.out. 306 . Se debe intentar adivinar que número es el que generó la computadora.out. System. Etapa 04 .out.println ( “ Ud. Juan José Flores Cueto.Descripción del problema. System.println ( “ Bienvenido al juego: ¿Que número es? ” ) . Desarrollar un juego en Java que permita generar un número aleatorio. encontró el número en: ” + inten + “ intento(s) ” ) . import biblioteca. System. System.println ( “ .de adivinar que número es -” ) .println ( “ Ingrese otro número entre 0. tmp = maximo * Math.println ( “ . numAzar = (int) Math.out. double tmp.out. else System. Si no son iguales.round(tmp) . Este número generado al azar. 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. utilizando la siguiente fórmula: tmp = maximo * Math. 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. Luego es redondeado utilizando el método round ( ) y convertido a un número entero utilizando la siguiente sentencia: numAzar = (int) Math.random( ) . se mostrará un mensaje. Utilice la sentencia do y optimice el código. Intente modificar la codificación de la solución. El número generado aleatoriamente es almacenado en la varable tmp. se mostrará un mensaje indicando que el número numAzar fue encontrado.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA ¿Qué hay de nuevo en la codificación? Observe el uso de los métodos random ( ) y round ( ) de la clase Math: Utilizando el método random ( ) generamos un número aleatorio (al azar) entre el número 0 y el número 100. 307 . Pag. import biblioteca. } } Modificar la codificación de la solución de tal forma que pueda optimizar el código.n3) .min (menor. mayor = Math.leerInt( ) .max (mayor.out.n3) .min (menor.println ( “ Ingrese el tercer número: ” ) .min (menor. Etapa 04 .leerInt( ) .n5) .out.n2) . n6 = Lectura. n5. System.max (n1. n1 = Lectura. menor = Math. n6 . menor = Math.println ( “ El mayor número es: " + mayor ) . System.println ( “ Ingrese el segundo número: ” ) .println ( “ Ingrese el primer número: ” ) .min (menor.out.println ( “ Ingrese el cuarto número: ” ) . mayor = Math. menor = Math. Ing.n6) .n2) .Desarrollo de la Codificación.min (n1.out.max (mayor.leerInt( ) . mayor = Math.println ( “ Ingrese el quinto número: ” ) .out.n4) . System.println ( “ Ingrese el sexto número: ” ) . n5 = Lectura. 308 . class PrgNumeroMayorMenor { public static void main ( String arg [ ] ) { int n1. Desarrollar un programa en Java que permita ingresar 6 números a traves del teclado. n2 = Lectura. Pag. Juan José Flores Cueto. n3. n4. System.max (mayor.Lectura . n2.n4) . Determinar y mostrar cuál de ellos es el número mayor y cuál es el número menor. n4 = Lectura. Problema 80 Etapa 01 .max (mayor. double mayor. System. menor = Math. mayor = Math.leerInt( ) .out. meno r.Descripción del problema. mayor = Math.leerInt( ) .println ( “ El menor número es: " + menor ) .leerInt().n5) . System. System.n6) . n3 = Lectura.out. Utilice una sentencia for.out. menor = Math. Clase PrgNumeroMayorMenor package dominioDeLaAplicacion . System. min (notaMenor. p3 = Lectura.println ( “ Ingrese la nota de la práctica 3: ” ) .leerDouble( ) . p4 = Lectura.leerDouble( ) . System.println ( “ Ingrese la nota del examen parcial: ” ) . Desarrollar un programa en Java que permita ingresar las notas de todos los alumnos de un determinado salon de clase. p2. System. notaMenor = Math. do { System. pp.p3) . Clase PrgPromedioNotas package dominioDeLaAplicacion .println ( “ Ingrese la nota de la práctica 2: ” ) .println ( “ Ingrese la nota de la práctica 4: ” ) . ep = Lectura. System. notaMenor = Math.Lectura . p1 = Lectura. p3. p4.leerDouble( ) . Calcular y mostrar el promedio final de cada alumno en base a la siguiente fórmula: pf = ( pp + ep + ( ef * 2 ) ) / 4.p2) .println ( “ Ingrese la nota del examen final: ” ) .p4) .out. Donde: pf = Promedio final. p1.min (notaMenor. Pag.out.leerDouble( ) .Desarrollo de la Codificación. class PrgPromedioNotas { public static void main ( String arg [ ] ) { double pf. notaMenor = Math. Son 4 prácticas de las cuales se elimina la más baja pp = ( p1 + p2 + p3 + p4 – notaMenor ) / 3 ep = Examen parcial.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 81 Etapa 01 . pp = Promedio de prácticas.out.min (p1. notaMenor . ef.println ( “ Ingrese la nota de la práctica 1: ” ) .leerDouble( ) .leerDouble( ) .out.out. ef = Examen final. System.Descripción del problema. import biblioteca. ep. ef = Lectura. char opc . Etapa 04 .out. 309 . p2 = Lectura. System. System.Desarrollo de la Codificación.out. Muestre el promedio de las notas redondeado a dos decimales. Juan José Flores Cueto. pf = ( pp + ep + ef ) / 3 .round (pf) . System. Clase PrgPromedioNotas pp = ( p1 + p2 + p3 + p4 – notaMenor ) / 3 .leerChar( ) .println ( “ El promedio final del alumno es: ” + pf ) . Ing. Pag. pf = Math. } } 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. } while ( opc=='s' || opc=='S' ) .out. Continúa… Etapa 04 . 310 . opc=Lectura.println ( “ Desea continuar (si=s/ no=n)?: ” ) . System.floor (numero * 10 + 0.out.out.println ( Math.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 82 Etapa 01 .Lectura .out. Etapa 04 .5 para que en el segundo cálculo tenga efecto de redondeo perfecto. System.5 ) / 100 ) .5 ) / 10 ) . 311 .println ( “ El número redondeado a dos decimales es: ” ) .out. dos y tres decimales utilizando el método floor ( ).floor (numero) ) . System.out.println ( “ La parte entera del número es: ” ) .println ( “ El número redondeado a tres decimales es: ” ) . el número redondeado sin decimales.println ( “ El número redondeado a un decimal es: ” ) . 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.leerDouble( ) .out. System. numero=Lectura. y el número redondeado a uno.out.5) ) . Clase PrgRedondearNumero package dominioDeLaAplicacion .Desarrollo de la Codificación.floor (numero+0.out. } } ¿Qué hay de nuevo en la codificación? Observe el uso del método floor ( ) de la clase Math: El método floor ( ) retorna un valor double con el valor más grande no mayor que el parámetro dado.println ( Math. System.out. import biblioteca.out. System.out. System. System.Descripción del problema.out. El parámetro dado debe ser double.floor (numero * 1000 + 0. Observe como se redondea un número con uno.println ( Math. class PrgRedondearNumero { public static void main ( String arg [ ] ) { double numero . dos y tres decimales. Pag.5 ) / 1000 ) .println ( Math.println ( “ Ingrese un número con decimales: ” ) . System.println ( “ El número redondeado es: ” ) . System. System.println ( Math.floor (numero * 100 + 0.println ( “ -----------------------------------” ) . Desarrollar un programa en Java que permita ingresar un número cualquiera con parte decimal y muestre la parte entera del número. System. Problema 83 Etapa 01 .Descripción del problema.println ( “ Ingrese el total de boletos: ” ) . import biblioteca.out. Desarrollar un programa en Java que permite realizar un sorteo en base a un número determinado de boletos. ganador . } } Pag.Desarrollo de la Codificación. } } while ( boletos < 0 ) . if (boletos > 0) { do { num = boletos * Math. int boletos.random( ) .leerInt( ) . do { System. Clase PrgSorteo package dominioDeLaAplicacion .println ( “ El número ganador es: ” + ganador ) . class PrgSorteo { public static void main ( String arg [ ] ) { double num . 312 . Etapa 04 . ganador = (int) Math.Lectura . Sugerencia: Utilice el método random ( ) de la clase Math para generar el número del boleto ganador. boletos = Lectura. Ing. Juan José Flores Cueto. } while (ganador == 0) . System.out.round(num) . Etapa 04 .Descripción del problema.println ( sumaCubos ) . class PrgSumaCuadradosCubos { public static void main ( String arg [ ] ) { long num. sumaCubos = 0 . sumaCubos += Math.3) . System. } System.out.out. System. System.print ( “ La suma de cubos de 1 hasta ” + num + “ es: ” ) . System. i++ ) { sumaCuad += Math.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 84 Etapa 01 .2) .out.pow (i.println ( “ Ingrese un numero cualquiera: ” ) .out. num = Lectura. for ( int i=1.Lectura . Desarrollar un programa en Java que permita calcular la suma de cuadrados y la suma de cubos de los “n” primeros números. import biblioteca.println ( sumaCuad ) .leerLong( ) .print ( “ La suma de cuadrados de 1 hasta ” + num + “ es: ” ) . 313 . } } Pag. Clase PrgSumaCuadradosCubos package dominioDeLaAplicacion . sumaCuad = 0.out. Se deberá ingresar un número por teclado y mostrar los resultados.Desarrollo de la Codificación.pow (i. i <= num. do{ System.out. Clase PrgSenCos package dominioDeLaAplicacion .cos( anguloRadianes ) .Desarrollo de la Codificación. utilizamos el método toRadians ( ) de la clase Math.println ( “ El sen [” + anguloGrados + “ ] = ” + seno ) .Descripción del problema. anguloRadianes. Juan José Flores Cueto. seno y coseno. } } ¿Qué hay de nuevo en la codificación? Observe el uso de los métodos toRadians ( ).out. de un ángulo ingresado por teclado hay que convertirlo primero al sistema radial.println ( “ y el cos [” + anguloGrados + “ ] = ” + coseno ) . Desarrollar un programa en Java que permita ingresar un ángulo no mayor de 360 grados ni menor de 0 grados. if (anguloGrados < 0 || anguloGrados > 360 ){ System. anguloRadianes = Math.println ( “ Ingrese un ángulo en grados entre 0 y 360: ” ) . intente otra vez: ” ). System. coseno = 0 . Mostrar como resultado el seno y el coseno del ángulo ingresado.Lectura .println ( “El dato ingresado es incorrecto. seno = 0.toRadians( anguloGrados ) . coseno = Math. Etapa 04 . 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. } }while(anguloGrados < 0 || anguloGrados > 360) . System. Para esto.out. class PrgSenCos { public static void main ( String arg [ ] ) { double anguloGrados. sin ( ) y cos ( ) de la clase Math: Es importante mencionar que Java trabaja con el sistema radial y para obtener las razones trigonométricas. anguloGrados = Lectura.sin( anguloRadianes ) . import biblioteca. Ing. Problema 85 Etapa 01 . 314 .leerDouble( ) .out. seno = Math. CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA en radianes. 315 . 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. System. tangente = Math. tangente = 0 .tan(anguloRadianes) .out. Etapa 04 . Desarrollar un programa en Java que permita ingresar un ángulo de inclinación de la recta con respecto al eje x. utiliza el ángulo de inclinación de la recta. anguloGrados = Lectura.println ( “ Ingrese el ángulo de inclinación de la recta: ” ) . import biblioteca. expresado en el sistema radial.Lectura . anguloRadianes.Desarrollo de la Codificación.out. } } ¿Qué hay de nuevo en la codificación? Observe el uso del método tan ( ) de la clase Math: El método tan ( ) permite hallar la pendiente de una recta con respecto al eje X.tan(anguloRadianes) .leerDouble( ) . Pag. Problema 86 Etapa 01 . anguloRadianes = Math. Mostrar como resultado la pendiente de la recta. Clase PrgTangente package dominioDeLaAplicacion . Ing.println ( “ La pendiente de la resta es = ” + tangente ) . System. Para ello.Descripción del problema. Juan José Flores Cueto.toRadians(anguloGrados) . class PrgTangente { public static void main ( String arg [ ] ) { double anguloGrados. tal y como se muestra: tangente = Math. 316 . El resultado obtenido. Calcular y mostrar la hipotenusa del tríangulo. Ejemplo: Ingrese el primer cateto: 2 Ingrese el segundo cateto: 3 La hipotenusa del triángulo es: 3. Luego se obtiene la raíz cuadrada con Math.pow (cateto2.Desarrollo de la Codificación. hipotenusa .leerDouble( ) . 317 . 2) ) .Lectura . System. Se ingresan los catetos por el teclado y son elevados al cuadrado con Math. import biblioteca.sqrt ( Math. hipotenusa = Math.println ( “ Ingrese el primer cateto: ” ) .pow ( ). class PrgHipotenusa { public static void main ( String arg [ ] ) { double cateto1.println ( “ La hipotenusa del triángulo es: ” + hipotenusa) . al elevar al cuadrado cada uno de los catetos.println ( “ Ingrese el segundo cateto: ”) .leerDouble( ) . System. Desarrollar un programa en Java que permita ingresar los catetos de un triángulo perpendicular. System.out. } } La fórmula para este caso sería: (hipotenusa)2 = (cateto1)2 + (cateto2)2 .Descripción del problema.out.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 87 Etapa 01 . cateto2 = Lectura.pow (cateto1.sqrt ( ) y finalmente se muestra el resultado almacenado en la variable hipotenusa.out.605551275463989 Pag. Etapa 04 . cateto2. cateto1 = Lectura. 2) + Math. Clase PrgHipotenusa package dominioDeLaAplicacion . se suman. atan ( ) retorna un valor double con el arcotangente de un ángulo expresado en radianes. System.out. System. anguloGrados. abscisa) .leerDouble( ) . Ing.print ( “ El ángulo en grados de [” + ordenada + “. ordenada = Lectura.println ( abscisa + “] es: ” + anguloGrados) .atan2(ordenada. 318 .out. anguloRadianes = Math. abscisa) . Dicho ángulo expresado en radianes debe ser un valor double enviado al método como parámetro.toDegrees(anguloRadianes) .Descripción del problema. import biblioteca. class PrgPunto { public static void main ( String arg [ ] ) { double ordenada. Problema 88 Etapa 01 .println ( “ Ingrese la ordenada(y) del punto: ” ) . Calcular y mostrar el ángulo de las coordenadas del punto en grados. System. Etapa 04 .” ) . System. anguloGrados = Math. Sabemos que Math.println ( “ Ingrese la abscisa(x) del punto: ” ) .out. anguloGrados = Math. } } ¿Qué hay de nuevo en la codificación? Observe el uso de los métodos atan2 ( ) y toDegress ( ) de la clase Math: anguloRadianes = Math.atan2(ordenada. Clase PrgPunto package dominioDeLaAplicacion . Juan José Flores Cueto. abscisa.Desarrollo de la Codificación.Lectura .out. abscisa = Lectura. anguloRadianes .leerDouble( ) . Pag. Desarrollar un programa en Java que permita ingresar la ordenada y la abscisa de un punto.toDegrees(anguloRadianes) . 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). se utiliza el método atan2 ( ) de la clase Math. utilizando el método toDegrees ( ) de la clase Math. Pag. 319 . 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. Este método nos permite obtener el valor del arcotangente de un par ordenado. se ingresan por teclado la ordenada y la abcisa de un punto cualquiera en el sistema de coordenadas.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Pero en este caso. En este caso. Etapa 04 .out.print ( “ El valor del número [e] elevado a [” + num ) . import biblioteca. Clase PrgExpLog package dominioDeLaAplicacion . System. System.log(num) . Desarrollar un programa en Java que permita ingresar un número cualquiera.println ( “] es: ” + exponencial ) . } } ¿Qué hay de nuevo en la codificación? Observe el uso de los métodos exp ( ) y log ( ) de la clase Math: exponencial = Math. Ing.out.exp(num) . exponencial = Math. class PrgExpLog { public static void main ( String arg [ ] ) { double num.out.Desarrollo de la Codificación.print ( “ El valor del logaritmo [en base e] del número [” ) . logaritmo = Math. System.println ( “ Ingrese un número: ” ) . Calcular y mostrar el número e elevado al número ingresado y el logaritmo natural (de base e) del número ingresado.out. 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.log(num) . System. Juan José Flores Cueto. exponencial. logaritmo .println ( num + “] es: ” + logaritmo) . Problema 89 Etapa 01 . 320 .out.Descripción del problema. num=Lectura.leerDouble(). logaritmo = Math. System.Lectura .exp(num) . desarrollados con la finalidad de mejorar su comprensión del tema y sus capacidades lógicas. Analizar cada uno de las soluciones y desarrolle sus propias conclusiones. 321 . Pag. A continuación se presentan algunas soluciones a problemas utilizando básicamente el método random ( ) de la clase Math.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. dado2 = 0. se suman los puntos de las dos caras que quedan hacia arriba. n2. suma1 = dado1 + dado2 .Descripción del problema. 3. 322 .out.println ( “Lanzar dados” ) . opc2 = “ ” . System. 5. Ing. cada uno de los cuales tiene 6 caras. las caras contienen 1. System.5 y 6 puntos.random ( ) * 6 ) ) . estado = 1 .Desarrollo de la Codificación. dado1 = ( int ) (1 + ( Math. 3 o 12 en el primer lanzamiento (resultado que en los casinos reciben el nombre de “craps”).println ( “Dado2 : ” + dado2 ) . Juan José Flores Cueto. Pag. suma2 = 0. el jugador debe seguir tirando los dados hasta “lograr su punto”. Problema 90 Etapa 01 . Para ganar. String opc1 = “ ”. el jugador gana. suma1 = 0. Clase PrgLanzarDados1 package dominioDeLaAplicacion . 2. Una vez que los dados quedan en reposo. 9.* . 6. n3.random ( ) * 6 ) ) . if ( suma1 == 7 || suma1 == 11 ) { opc1 = “s” . Si la suma es 4. Etapa 04 . estado = 0 . 10 en el primer lanzamiento. Un jugador lanza dos dados. 8.println ( “Dado1 : ” + dado1 ) . Si la suma es 7 o 11 en el primer lanzamiento. Lectura. import biblioteca.out. El jugador perderá si tira un 7 antes de lograr su punto. 4 . int dado1 = 0. dado2 = ( int ) (1 + ( Math. class PrgLanzarDados1 { public static void main ( String arg [ ] ) { double n1.leerString ( ) . nf . Si la suma es 2. do { System. la casa gana). esto suma se convierte en el punto del jugador.out. el jugador pierde (es decir. println ( “El jugador gana” ) . System.out. } else { do { System.out.leerString ( ) .println ( “Dado2 : ” + dado2 ) . 323 .CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Continúa… Etapa 04 . dado2 = ( int ) (1 + ( Math.Desarrollo de la Codificación.println ( “Lanzar dados” ) . suma2 = dado1 + dado2 .random ( ) * 6 ) ) . if ( suma1 == suma2 ) { estado = 1 . opc1 = “s” .println ( “Dado1 : ” + dado1 ) .out. estado = 0 . System. } }while ( opc1 != “s” ) . Lectura.out. } } while ( opc2 != “s” ) . } } Pag. else System. opc1 = “s” .random ( ) * 6 ) ) . } else if ( suma2 == 7 ) { estado = 0 . if ( estado == 1 ) System.out.println ( “El jugador pierde ” ) . opc2 = “s” . dado1 = ( int ) (1 + ( Math. opc2 = “s” . Clase PrgLanzarDados1 } else if ( suma1 == 2 || suma1 == 3 || suma1 == 12 ) { opc1 = “s” . dado1 = ( int ) (1 + ( Math.out. de tal forma que se muestre un mensaje preguntando si desea volver a tirar los dados. String opc1 = “ ”.println ( “Dado2 : ” + dado2 ) .* . } else { Pag. Problema 91 Etapa 01 . estado = 0 .out.Desarrollo de la Codificación. char opc3 = ‘n’ . do { System. estado = 0 . opc2 = “ ” . Etapa 04 . Clase PrgLanzarDados2 package dominioDeLaAplicacion . Ing. System.println ( “Lanzar dados” ) . import biblioteca. if ( suma1 == 7 || suma1 == 11 ) { opc1 = “s” . } else if (suma1 == 2 || suma1 == 3 || suma1 == 12) { opc1 = “s” .println ( “Dado1 : ” + dado1 ) . estado = 1 . opc2 = “ ” . 324 . Lectura. dado2 = 0. System. suma1 = dado1 + dado2 . Modificar el programa del problema anterior.out.random ( ) * 6 ) ) .random ( ) * 6 ) ) . dado2 = ( int ) (1 + ( Math.leerString ( ) . do { opc1 = “ ” .Descripción del problema. Juan José Flores Cueto. class PrgLanzarDados2 { public static void main ( String arg [ ] ) { int dado1 = 0. suma2 = 0. suma1 = 0. out.out.println ( “ El jugador pierde ” ) .leerChar ( ) .println ( “ El jugador gana ” ) . } } Pag. opc1 = “s” . opc2 = “s” .println ( “Dado2 : ” + dado2 ) . if ( estado == 1 ) System.out. dado2 = ( int ) (1 + ( Math.println ( “Desea volver a jugar [s/n] ” ) . Clase PrgLanzarDados2 do { System. } } while ( opc2 != “s” ) .out. opc1 = “s” .random ( ) * 6 ) ) .CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Continúa… Etapa 04 .Desarrollo de la Codificación. suma2 = dado1 + dado2 . if ( suma1 == suma2 ) { estado = 1 .println ( “Dado1 : ” + dado1 ) . } else if ( suma2 == 7 ) { estado = 0 . } } while ( opc1 != “s” ) .println ( “Lanzar dados” ) . System. } while ( opc3 != ‘n’ ) .out. dado1 = ( int ) (1 + ( Math. opc3 = Lectura. Lectura. opc2 = “s” . else System. System. System. 325 .random ( ) * 6 ) ) .out.leerString ( ) . println ( “La cantidad de veces que a salido el sello es : ” + cont2 ) .println ( “Cuántas veces desea Lanzar moneda ? ” ) .out. if (moneda == 1) cont1 ++ . Mostrar los resultados. import biblioteca. cont2 = 0. x <= cant. cont1 = 0. Problema 92 Etapa 01 . else cont2 ++ .* . class PrgLanzarMoneda { public static void main ( String arg [ ] ) { int moneda. Elaborar un programa que simule el lanzamiento de una moneda. Solicitar el número de veces que se lanzará la moneda.Descripción del problema. Juan José Flores Cueto.Desarrollo de la Codificación. cant .println ( “La cantidad de veces que a salido la cara es : ” + cont1 ) . Ing. Clase PrgLanzarMoneda package dominioDeLaAplicacion . x++ ) { moneda = ( int ) (1 + ( Math. } } Pag.out. System.leerInt ( ) .out. for ( int x = 1. Cuentar el número de veces que aparece cada lado de la moneda. System. Etapa 04 . 326 .random ( ) * 2 ) ) . } System. cant = Lectura. valor2 = ( int ) (1 + ( Math. break . import biblioteca. case 2 : monto = 200 .CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 93 Etapa 01 . if ( valor1 == valor2 && valor1 == valor3 ) { s = (char) valor1 . valor3 = 0. 3. 2. case 3 : monto = 300 .Desarrollo de la Codificación.out.random ( ) * 7 ) ) . valor3 = ( int ) (1 + ( Math. Lectura. do { System. valor2 = 0. class PrgTragamoneda1 { public static void main ( String arg [ ] ) { int valor1 = 0. valor1 = ( int ) (1 + ( Math.println ( valor1 + “ ” + valor2 + “ ” + valor3 ) . 4. Pag. System. Los números deberán ser generados aleatoriamente. opc1 .random ( ) * 7 ) ) . El jugador gana cuando el número se repita tres veces. char s.Descripción del problema. los números son: 1. Etapa 04 . break . 327 .println( “Presionar enter para empezar” ) .6 y 7 opciones de ganar. El premio mayor se obtiene con el número 7. Clase PrgTragamoneda1 package dominioDeLaAplicacion .out. switch (s) { case 1 : monto = 100 . Elaborar un programa que simule el juego de tragamonedas. break . 5 .leerString ( ) .random ( ) * 7 ) ) .* . monto = 0 . Clase PrgTragamoneda1 case 4 : monto = 400 . break .out. } while ( opc1 != ‘n’ ) . case 5 : monto = 500 .Desarrollo de la Codificación. Ing. } } Pag.out. break .println ( “Usted gana : ” + monto + “Soles ” ) .println ( “Desea volver a jugador [s/n] : ” ) . } System.println ( “La casa gana” ) . break . Juan José Flores Cueto. case 7 : monto = 1000 .leerChar ( ) . opc1 = Lectura. } else System. System. Continúa… Etapa 04 .out. break . monto = 0 . 328 . case 6 : monto = 600 . System. do { System.* .out.random ( ) * 7 ) ) . valor2 = 0. class PrgTragamoneda2 { public static void main ( String arg [ ] ) { int valor1 = 0. char s. de tal forma que se muestre la cantidad acumulada del dinero ganado en el tragamoneda. case 2 : monto=200 .leerString ( ) .opc1 . import biblioteca.random ( ) * 7 ) ) . valor3 = 0. Pag.random ( ) * 7 ) ) .out. monto = 0. Clase PrgTragamoneda2 package dominioDeLaAplicacion .Desarrollo de la Codificación. Lectura. valor1=( int ) (1 + ( Math. acumonto = 0 . Modificar el programa del problema anterior.println ( “Presionar enter para empezar” ) .CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 94 Etapa 01 .Descripción del problema. break . valor2=( int ) (1 + ( Math. break . valor3=( int ) (1 + ( Math. 329 . switch ( s ) { case 1 : monto=100 . if ( valor1 == valor2 && valor1 == valor3 ) { s= (char) valor1 . Etapa 04 .println ( valor1 + “ ” + valor2 + “ ” + valor3 ) . out.out. break . case 5 : monto=500 . System. break .println ( “Usted gana : ” + monto ) . System. Juan José Flores Cueto. } else System.out. break .println ( “El dinero acumulado ganado es : ” + acumonto ) . } acumonto = acumonto + monto . Ing.println ( “Desea volver a jugador [s/n] : ” ) . } while ( opc1! = ‘n’ ) . } } Pag. System.leerChar ( ) . monto = 0 . break . opc1=Lectura.Desarrollo de la Codificación. Clase PrgTragamoneda2 case 3 : monto=300 . case 4 : monto=400 .println ( “La casa gana” ) . case 7 : monto=1000 . break . Continúa… Etapa 04 .out. case 6 : monto=600 . 330 . out.println ( “No es la respuesta correcta… Vuelva a intentarlo” ) . 331 .random() * 9 ) ) .leerString ( ) . if ( resul1 == resul2 ) System.out.Desarrollo de la Codificación.* . System. valor2 = ( int ) (1 + ( Math. import biblioteca.leerInt ( ) . valor2 = 0.random() * 9 ) ) . El programa deberá preguntar ¿Cuánto es 6 por 7?. Lectura. } while ( opc1 != ‘n’ ) . Si es correcta mostrará un mensaje ¡Muy bien! y si es incorrecto mostrará el mensaje ¡No es correcto. El estudiante deberá ingresar la respuesta. char s. System.out. Desarrolle un programa que ayude a un estudiante de primaria a aprender a multiplicar. valor1 = ( int ) (1 + ( Math. do { System. resul1 = 0. opc1 = Lectura.println ( “¿Cuánto es ” + valor1 + “ por ” + valor2 + “ ?” ) .Descripción del problema.out.out. El programa verificara si la respuesta es correcta.out. por favor intente otra vez!.leerChar ( ) . Las computadoras están desempeñando un papel cada vez más importante en la educación. opc1 . Utilice números aleatorios para producir dos enteros positivos de un solo digito.println ( “Aprendiendo a Multiplicar” ) .println ( “Respuesta correcta… Muy bien” ) . System.println ( “Ingresar resultado de la multiplicación : ” ) . resul2 = Lectura. resul1 = valor1 * valor2 . } } Pag. else System. class PrgMultiplicacion { public static void main ( String arg [ ] ) { int valor1 = 0.println ( “Desea volver a intentarlo [s/n] : ” ) . Etapa 04 .CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 95 Etapa 01 . Clase PrgMultiplicacion package dominioDeLaAplicacion . resul2 = 0 . String operacion = “ ” . multiplicar y dividir dos números generados al azar.println ( “[5] Salir ”). Clase PrgMenuOperaciones1 package dominioDeLaAplicacion . System. valor1=( int ) (1 + ( Math. Pag. Ing. System. signo = ‘ ’ . do { System. System.out. class PrgMenuOperaciones1 { public static void main ( String arg [ ] ) { int valor1 = 0. char opc.out.println ( “[1] Sumar ”). de tal forma que se muestre un menú de opciones donde permita sumar. break .println ( “Elegir opcion : ” ) .* . import biblioteca.Descripción del problema.out. Se permitirá al estudiante contestar la misma pregunta una y otra vez hasta que responda correctamente. operacion = “Suma” .Desarrollo de la Codificación.println ( “-----------------------------” ) . signo = ‘+’ .println ( “Menú de operaciones” ) . op=Lectura. Juan José Flores Cueto.random ( ) * 9 ) ) . Modificar el programa del problema anterior.out. Etapa 04 .out. resul2 = 0. System.println ( “[3] Multiplicar ” ) . System.out.println ( “[4] Dividir ”). System.out. switch ( op ) { case 1 : resul1 = valor1 + valor2 . restar. resul1 = 0. op . 332 .random ( ) * 9 ) ) .println ( “[2] Restar ”).leerInt ( ) . valor2 = 0.out. System. Problema 96 Etapa 01 . valor2=( int ) (1 + ( Math. case 4 : resul1 = valor1 / valor2 . operacion = “Resta” .println ( “¿Cuánto es ” + valor1 + “ ” + signo + “ ” + valor2 + “ ?” ) . signo = ‘-’ . signo = ‘*’ . case 3 : resul1 = valor1 * valor2 . case 5 : System. operacion = “División” . break . } } Pag. System. signo = ‘/’ . } System.out. do { System. break .leerInt ( ) .out.println ( “No es. operacion = “Multiplicación” .valor2 .Desarrollo de la Codificación. break . 333 . Clase PrgMenuOperaciones1 case 2 : resul1 = valor1 . } while ( resul1 != resul2 ) .exit (0) .CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Continúa… Etapa 04 . resul2 = Lectura.out. if ( resul1 != resul2 ) System.out.println ( “Ingresar resultado de la ” + operacion + “ :” ) . por favor trata otra vez” ) .println ( “Muy bien” ) . } while ( op != 5 ) . break . Pag.println ( “Elegir opcion : ” ) . valor2 = 0. signo = ‘ ’ . Clase PrgMenuOperaciones2 package dominioDeLaAplicacion . signo = ‘+’ .random ( ) * 9 ) ) .println ( “[3] Multiplicar ” ) .out. import biblioteca. System.out.leerInt ( ) . System. resul2 = 0 . cont1 = 0. System. Juan José Flores Cueto. Etapa 04 .out.println ( “[5] Salir ”).println ( “Menú de operaciones” ) . char opc.* . switch ( op ) { case 1 : resul1 = valor1 + valor2 . Mostrar la cantidad de preguntas correctas y la cantidad de preguntas incorrectas. Problema 97 Etapa 01 .out. System.out.out.out. String operacion = “ ” . restar.random ( ) * 9 ) ) .println ( “[4] Dividir ”). Modificar el programa del problema anterior. multiplicar y dividir dos números al azar. op = Lectura.println ( “[2] Restar ”). resul1 = 0.println ( “-----------------------------” ) . de tal forma que se muestre un menú de opciones donde permita sumar. cont2 = 0 . operacion = “Suma” . class PrgMenuOperaciones2 { public static void main ( String arg [ ] ) { int valor1 = 0.Descripción del problema.out. valor2 = ( int ) (1 + ( Math. Ing. int op. 334 .Desarrollo de la Codificación. do { System. System.println ( “[1] Sumar ”). break . System. valor1 = ( int ) (1 + ( Math. System. operacion = “Multiplicación” . break . } System.Desarrollo de la Codificación. break . break . signo = ‘-’ .println ( “La cantidad de respuestas incorrectas fueron : ” + cont2 ) .println ( “Ingresar resultado de la ” + operacion + “: ” ) .out. } } while ( op != 5 ) .println ( “¿Cuánto es ” + valor1 + “ ” + signo + “ ” + valor2 + “ ?” ) . break . } } Pag.out. 335 .out.out. case 4 : resul1 = valor1 / valor2 . } else { System. case 3 : resul1 = valor1 * valor2 .out.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Continúa… Etapa 04 . if ( resul1 != resul2 ) { System.println ( “La cantidad de respuesta correctas fueron : ” + cont1 ) .println ( “Muy bien” ) .valor2 .exit (0) .leerInt ( ) . System. resul2 = Lectura. case 5 : System. por favor trata otra vez” ) . System. Clase PrgMenuOperaciones2 case 2 : resul1 = valor1 .println ( “No es. System.out. operacion = “Resta” . signo = ‘/’ . cont1 ++ . signo = ‘*’ . operacion = “División” . cont2 ++ . out. Juan José Flores Cueto. do { System.random ( ) * 1000 ) ) . class PrgAdivinarNumero1 { public static void main ( String arg [ ] ) { int valor = 0. char opc = ‘ ’ . num = Lectura.leerChar ( ) .out.println ( “El número es demasiado chico. 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.out.println ( “Adivine el número” ) . Clase PrgAdivinarNumero1 package dominioDeLaAplicacion . Ing. Problema 98 Etapa 01 . do { System. } while (num != valor ) . System.leerInt ( ) . if ( num < valor ) System.* .Desarrollo de la Codificación.println ( “Desea Continuar [s/n]: ” ) .out. Elaborar un programa que permita adivinar cuál es el número entero generado al azar entre 1 y 1000. Cuando la respuesta sea correcta se mostrará un mensaje de felicitaciones. 336 . Etapa 04 . si la estimación del jugador es incorrecta.println ( “Ingresar número : ” ) . num = 0 . El jugador ingresará una primera estimación.out. } while ( opc != ‘n’ ) . opc = Lectura.out. } } Pag.println ( “Felicidades adivinaste el número ” ) .Descripción del problema. import biblioteca. Pruebe otra vez” ) . else if ( num > valor ) System. else System. Pruebe otra vez” ) . valor = ( int ) (1 + ( Math.println ( “El número es demasiado grande. do { System.println ( “Ingresar número : ” ) . } while ( num != valor ) . Clase PrgAdivinarNumero2 package dominioDeLaAplicacion . valor = num .Descripción del problema.out.leerInt ( ) .println ( “Desea Continuar [s/n]: ” ) . class PrgAdivinarNumero2 { public static void main ( String arg [ ] ) { int valor = 0. cont ++ .random ( ) * 1000 ) ) .out.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 99 Etapa 01 . Pruebe otra vez ” ) .out.println ( “Deberías haberlo hecho mejor” ) .* . char opc = ‘ ’ . do { System. System. de tal forma que se pueda ingresar la cantidad de intentos que se tiene para adivinar el número. else if ( num > valor ) System. if (cont >= intentos ) { System.out. Pruebe otra vez” ) .leerInt ( ) . opc=Lectura. num = Lectura.leerChar ( ) . intentos=Lectura. valor = ( int ) (1 + ( Math.out.println ( “El número es demasiado grande.println ( “Adivine el número” ) .println ( “Ingrese la cantidad de intentos : ” ) . num = 0. Modificar el programa del problema anterior. } while ( opc != ‘n’ ) . else System.out. cont = 0 . } } Pag.println ( “Felicidades adivinaste el número” ) . System.println ( “El número es demasiado chico. Import biblioteca. } else if ( num < valor ) System. Etapa 04 .out. intentos.Desarrollo de la Codificación.out. 337 . Pag. Ing. 338 . Juan José Flores Cueto. Las conversiones son realizadas a través del método toString ( ). es una clase que viene incorporada en el lenguaje de programación Java.lang es el paquete principal del lenguaje Java por lo cual no se necesita importar ninguna clase incluida en dicho paquete. sino que se crean objetos de la clase String).lang.lang cada vez que se necesite utilizar la clase String de Java. 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). Ejemplo: String nom = “Danae” . y para crear copias de una cadena convirtiendo todos sus caracteres a letra mayúscula o minúscula.String El paquete java. no será necesario importar el paquete java.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA MANEJO DE CADENAS: CLASE STRING INTRODUCCIÓN Una cadena es un conjunto de caracteres.lang. JERARQUÍA DE CLASES Y HERENCIA java. 339 . En consecuencia. la cual permite declarar y manipular variables de tipo texto o cadena (en realidad no se declaran variables de tipo texto o cadena.lang. La clase String incluye métodos que permiten examinar los caracteres individuales de una cadena para compararlos. La clase String. para ubicarlos. números y símbolos especiales almacenados en una variable de tipo texto o cadena. Pag. para extraerlos como subcadenas.Object java. incluida en el paquete java. el cual puede ser utilizado por todas las clases Java a través de la herencia. método definido en la clase Object. el operador punto (. 11. valueOf( ). startsWith( ). endsWith( ). 4. toLowerCase( ). 16. Métodos de clase: 17. Para el caso de los métodos de clase deberá colocar la palabra String. concat( ). 9. trim( ). que el método devuelva un resultado. 2.) y el nombre del método de clase que se desea ejecutar. length( ). charAt( ). equalsIgnoreCase( ). 7. 6. Para trabajar con los métodos de instancia de la clase String es necesario previamente haber declarado y asignado un valor a una variable de tipo texto o cadena. toUpperCase( ). 340 . substring( ). éste deberá almacenarse en una variable del mismo tipo o mostrarse a través de la pantalla. Para ejecutar un método de instancia de la clase String es necesario colocar el nombre de la variable (que debe ser de tipo texto o cadena).) y el nombre del método de instancia que se desea ejecutar. 8. lastIndexOf( ). 5. el operador punto (. se debe tener en cuenta que si. Juan José Flores Cueto. Para el caso de los métodos de clase esto no será necesario. En caso. MÉTODOS La clase String presenta los siguientes métodos: Métodos de instancia: 1. 14. para ejecutar cualquiera de los método de la clase String. 15. Ing. toCharArray( ). 10. compareTo( ). éstos deben ser necesariamente proporcionados en la cantidad y tipos requeridos. A continuación se presenta una breve descripción del uso de cada uno de los métodos de la clase String: Pag. 12. indexOf( ). 13. replace( ). el método necesita algunos datos. equals( ). Asimismo. 3. charAt(5).CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA CLASE String MÉTODOS DE DESCRIPCIÓN USO INSTANCIA Devuelve el caracter que encuentre en la posición indicada String cad1 = “Hola Danae”. Si las dos cadenas son int x = cad1. concat(String) cadena = cad1. charAt(int) Es importante mencionar que en resultado: Java. cad2. cadenas en una sola cadena. String cad1 = “Danae”. devuelve un número entero menor String cad2 = “Hola Pedro”. Resultado : cadena = "Hola a todos” String cad1 = “Hola Danae”. el primer caracter de una x = ‘D’. String cad1. que cero. endsWith(String) cadena colocada como parámetro. Si la cadena es alfabéticamente menor que la cadena colocada como parámetro. Devuelve true (verdadero) si la String cad2 = “Danae”. final de la cadena coincide con la boolean x = cad1. x = true. cadena colocada como parámetro.compareTo(cad2). cad1 = "Hola". el método devuelve un entero mayor que cero. cadena se encuentra ubicado en la posición 0 (cero). el método String cad1 = “Hola Danae”.equals(cad2). por la variable entera o número char x = cad1. Resultado: Pag.endsWith(cad2). función que el método equals ( ) String cad2 = “Danae”. entero colocado como parámetro. Caso contrario devuelve false (falso). 341 . cadena coincide con la cadena boolean x = cad1.equalsIgnoreCase(cad2). equals(String) colocada como parámetro. Este método permite juntar dos cad2 = " a todos". minúscula y mayúscula. equalsIgnoreCase(String) pero la comparación la realiza sin boolean x. Devuelve true (verdadero) si el String cad2 = “Danae”. cadena. 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). Caso contrario devuelve false Resultado: (falso).concat (cad2). Este método realiza la misma String cad1 = “DANAE”. tener en cuenta las letras x = cad1. Resultado: x = true. x = 3. indexOf(char) Resultado: x = 5.6). indexOf(char. MÉTODOS DE DESCRIPCIÓN USO INSTANCIA x = true. lastIndexOf(char. indexOf(String) delante. Resultado: x = 6. lastIndexOf(char) Resultado: x = 8. String cad1 = “Hola Danae”. cual se empieza a buscar hacia int x = cad1.5 ). String cad1 = “Hola Danae”. String cad1 = “Hola Danae”. String cad1 = “Hola Danae”. indexOf(String. También se puede especificar un segundo parámetro a partir del String cad1 = “Hola Danae”.lastIndexOf( “ana” ).int) Devuelve la posición de la cadena en la que aparece por última vez el Resultado: caracter colocado como parámetro. int x = cad1. lastIndexOf(String) atrás.int) Devuelve la posición de la cadena en la que aparece por primera vez Resultado: el caracter colocado como x = 8. cual se empieza a buscar hacia int x = cad1.lastIndexOf(‘a’. int x = cad1. Juan José Flores Cueto. int x = cad1.lastIndexOf(‘a’).5). Ing. int) Resultado: x = 5.indexOf( “ana” ). lastIndexOf(String. Pag.3 ). String cad1 = “Hola Danae”. parámetro.int) Resultado: x = 2. También se puede especificar un segundo parámetro a partir del String cad1 = “Hola Danae”.indexOf( “Dan”. Resultado: x = 8. 342 .indexOf(‘a’.lastIndexOf( “lo”. int x = cad1. int x = cad1. String cad1 = “Hola Danae”. int x = cad1.indexOf(‘D’). ‘ ’.trim(). replace(char.toCharArray().substring(6. 343 . Convierte una cadena específica char[ ] x = cad1. x = {‘H’.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA MÉTODOS DE DESCRIPCIÓN USO INSTANCIA String cad1 = “Hola Danae”. String cad1 = “Hola Danae”. Permite eliminar los espacios en String x = cad1. Resultado: x = “hola danae”. ‘n’. ‘a’. Pag.int) Resultado: x = “ana”. String x = cad1. en un vector de caracteres. segundo parámetro del método. como parámetro.startsWith(cad2). String cad1 = “Hola Danae”. si el comienzo de la cadena boolean x. trim() blanco del inicio y del final de una cadena. caracteres iguales al caracter String x = cad1.‘a’. ‘o’). String cad1 = “Hola Danae”. x = “Holo Donoe”. el número de caracteres que tiene la cadena. substring(int. Devuelve un valor true (verdadero) String cad2 = “Hola”. startsWith(String) coincide con la cadena colocada x = cad1. String cad1 = “ Hola Danae ”.‘l’. String x = cad1. indicada en el primer parámetro hasta el final o hasta una posición anterior a la indicada en el String cad1 = “Hola Danae”. Resultado: empezando desde la posición x = “Danae”. length() cadena.9). Convierte las letras de una cadena toLowerCase() en letras minúsculas.‘o’. Resultado: x = 10. Permite reemplazar todos los String cad1 = “Hola Danae”.length().toLowerCase(). ‘a’.substring(5). Resultado: x = true.‘e’}. ‘D’. String cad1 = “Hola Danae”.char) colocado como primer parámetro con el caracter colocado como Resultado: segundo parámetro. caso contrario devuelve false (falso). String x = cad1.replace(‘a’. Resultado: x = “Hola Danae”. substring(int) Devuelve una subcadena a partir de la cadena especificada. (Los toCharArray() vectores serán tratados en el Resultado: capítulo IV). Es decir. Devuelve la longitud de una int x = cad1. 1416”.valueOf(float) convertir los valores de otros tipos String.valueOf(Object) resultado: String.valueOf(long) Método de clase que permite String x = String. MÉTODOS DE DESCRIPCIÓN USO INSTANCIA String cad1 = “Hola Danae”. Analice cada una de las siguientes soluciones.valueOf(boolean) String. String. String. con la finalidad de mejorar la comprensión del tema tratado. Juan José Flores Cueto.valueOf(double) de datos o variables a una cadena. se presentan algunas soluciones a problemas planteados utilizando algunos de los métodos de la clase String. Resultado: x = “HOLA DANAE”.1416. String.valueOf(int) double pi = 3.valueOf(char[ ]. Ing.int) A continuación. MÉTODO DE CLASE DESCRIPCIÓN USO String. Pag. String. String x = cad1.valueOf(char[ ]) x = “3.valueOf(pi).toUpperCase(). 344 . int. Convierte las letras de una cadena toUpperCase() en letras mayúsculas. Etapa 04 – Desarrollo de la codificación.println ( “ El nombre en Mayúscula es: ” + nom ) .* .out. Clase PrgConvertirMayuscula package dominioDeLaAplicacion .toUpperCase ( ) . System. public class PrgConvertirMayuscula { public static void main(String [ ] args) { String nom . nom = nom. podemos mostrar el resultado utilizando System. System.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 100 Etapa 01 – Descripción del problema. Mostrar el nombre del alumno en letras mayúscula. Nombre de la variable (objeto). nom = Lectura. Operador punto. Como el método toUpperCase ( ) nos devuelve un valor de tipo String (el contenido de la variable en letra mayúscula).println o almacenarlo en una variable (que puede ser la variable que contenía la cadena original).leerString( ) . } } ¿Qué hay de nuevo en la codificación? Observe el uso del método toUpperCase ( ) de la clase String: nom. tal y como lo hemos realizado en nuestro ejemplo: Pag. import biblioteca.print ( “ Ingresar el nombre: ” ) . Desarrollar un programa en Java que permita ingresar el nombre de un alumno. 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). 345 . Nombre del método.out.out.toUpperCase( ) . 346 . Juan José Flores Cueto.toUpperCase ( ) . nom = nom. 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. Ing. Nombre de la variable (objeto). Operador punto.print ( “ Ingresar el nombre: ” ) . Nombre del método. Clase PrgConvertirMinuscula package dominioDeLaAplicacion . 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).leerString( ) . nom = nom. 347 .out. System.out. System.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 101 Etapa 01 – Descripción del problema.toLowerCase ( ) .toLowerCase( ) . Como el método toLowerCase ( ) nos devuelve un valor de tipo String (el contenido de la variable en letra minúscula). Desarrollar un programa en Java que permita ingresar el nombre de un alumno. tal y como lo hemos realizado en nuestro ejemplo: Pag.println ( “ El nombre en Minúscula es: ” + nom ) . nom = Lectura. public class PrgConvertirMinuscula { public static void main(String [ ] args) { String nom . } } ¿Qué hay de nuevo en la codificación? Observe el uso del método toLowerCase ( ) de la clase String: nom.out.* .println o almacenarlo en una variable (que puede ser la variable que contenía la cadena original). Mostrar el nombre del alumno en letras minúsculas. import biblioteca. podemos mostrar el resultado utilizando System. Etapa 04 – Desarrollo de la codificación. 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. nom = nom. Pag. 348 . Juan José Flores Cueto. Ing.toLowerCase ( ) . Etapa 04 – Desarrollo de la codificación.* .concat (espacio) .out. 349 . nom2.concat (espacio) .out.concat(espacio) . espacio = “ ” .out.out.println ( “ El nombre en Mayúscula es: ”" + nombre. nombre.concat(nom2) .println ( “ El nombre en Minúscula es: ” + nombre. nom1 = Lectura. public class PrgConcatenarNombres { public static void main(String [ ] args) { String nom1. System.leerString( ) . Es decir. nom2 = Lectura. 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. System.println ( “ Ingresar el segundo nombre del alumno: ” ) . System. Desarrollar un programa en Java que permita ingresar el primer nombre y el segundo nombre de un alumno. nom1 = nom1. Pag. import biblioteca. Clase PrgConcatenarNombres package dominioDeLaAplicacion . Concatenar y Mostrar los nombres del alumno en letras mayúsculas y letra minúsculas. nom1 = nom1.toLowerCase() ) .leerString( ) .println ( “ Ingresar el primer nombre del alumno: ” ) . 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). 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). System.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 102 Etapa 01 – Descripción del problema. } } ¿Qué hay de nuevo en la codificación? Observe el uso del método concat ( ) de la clase String: nom = nom. nombre = nom1.concat(nom2) . nombre = nom1.toUpperCase() ) . println para mostrar el nombre del alumno en letra minúscula y en letra mayúscula. Ing.println.println (nom1. explicados en los problemas anteriores.concat (nom2) ) . Esto permite juntar o concatenar los nombres del alumno con un espacio en blanco entre ellos en una única variable de tipo String. Juan José Flores Cueto. Pag. directamente con System. como se muestra a continuación: System.out.out. 350 .out. se utilizan los métodos toUpperCase ( ) y toLowerCase ( ). Finalmente. También podría visualizarse directamente el resultado de juntar o concatenar dos variables de tipo String (cadenas) utilizando System. Consistenciar el nombre del alumno al momento de ingresarlo. nom = Lectura.println ( “ Ingresar el nombre: ” ) . 351 . 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).out.* .trim( ) . Desarrollar un programa en Java que permita ingresar el nombre de un alumno.length( ) < 2 ) . System. String nom . if ( nom.length( ) < 2 ) { System. do { System. 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. public class PrgLongitudCadena { public static void main(String [ ] args) { int cant .length( ) . Mostrar el número de caracteres del nombre ingresado por teclado. Clase PrgLongitudCadena package dominioDeLaAplicacion .out. cant = nom. import biblioteca.out.println ( “ La cantidad de caracteres del nombre es: ” + cant ) . Esto se realiza como precaución. También observe el uso del método length ( ) de la clase String: Pag. } } while (nom. nom = nom.println ( “ Nombre ingresado no válido… Reintente! ” ) .trim ( ) . } } ¿Qué hay de nuevo en la codificación? Observe el uso del método trim ( ) de la clase String: nom = nom. Etapa 04 – Desarrollo de la codificación.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 103 Etapa 01 – Descripción del problema.leerString( ) . cant = nom. José. if ( nom. nom = Lectura. En la líneas de código mostradas a continuación. Ing. Juan José Flores Cueto. 3. 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. que tienen 2.trim ( ) . podemos mostrar el resultado utilizando System. } } while (nom. como por ejemplo. utilizarlo en una condición lógica o almacenarlo en una variable. Pedro.println ( “Nombre ingresado no válido… Reintente! ” ) .out. Lu.out. 352 . Como el método length ( ) devuelve la cantidad de caracteres que tiene una variable (incluido los espacios en blanco). do { System.println ( “ Ingresar el nombre: ” ) . y 5 caracteres respectivamente). Ana.length ( ) < 2) . Pag. En nuestro ejemplo lo utilizamos como condición lógica y para almacenarlo en una variable.out. la cantidad de caracteres que almacena la variable nom).length ( ) < 2 ) { System. 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. 4.length ( ) .println(). nom = nom.leerString( ) . out. System. length ( ) y toUpperCase ( ) de la clase String. nom = nom. import biblioteca. Pag. } } while ( nom. Mostrar el nombre del alumno en letras mayúscula. public class PrgConvertirMayuscula2 { public static void main(String [ ] args) { String nom .toUpperCase( ) . se puede afirmar que esta solución es más óptima que la solución presentada en el problema 100.length( ) < 2 ) .leerString( ) .println ( “ El nombre en Mayúscula es: ” + nom ) . Desarrollar un programa en Java que permita ingresar el nombre de un alumno. Etapa 04 – Desarrollo de la codificación.out. para finalmente mostrar su contenido por pantalla. } } Observe el uso de los métodos trim ( ). nom = nom. En la codificación de este programa.trim( ) . Clase PrgConvertirMayuscula2 package dominioDeLaAplicacion .println ( “ Ingresar el nombre: ” ) . 353 .out. nom = Lectura. do { System.length( ) < 2 ) { System. luego se consistencia que tenga por lo menos 2 caracteres y luego se convierte el contenido de la variable nom en letra mayúscula. if ( nom. Consistenciar el nombre del alumno al momento de ingresarlo.* .println ( “ Nombre ingresado no válido… Reintente! ” ) . se debe eliminar los espacios en blanco que la variable nom pueda tener al inicio y al final del dato que contiene. En consecuencia.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 104 Etapa 01 – Descripción del problema. substring(0. Desarrollar un programa en Java que permita ingresar el nombre de un alumno.1) . } } while (nom. Mostrar el primer caracter del nombre ingresado en mayúsculas. El método substring ( ) se utiliza de dos formas. import biblioteca.substring(1) . public class PrgPrimeroMayuscula { public static void main(String [ ] args) { String nom.out.println ( “ Ingresar el nombre: ” ) . Imagínese que la variable nom contiene el nombre “danae”.length( ) < 2 ) { System. cadena2 = nom.substring(1) .out. nom = Lectura. cadena2= “” . Etapa 04 – Desarrollo de la codificación. cadena2 = nom.out. Juan José Flores Cueto. La primera forma nos permite obtener una subcadena desde una posición inicial hasta un caracter antes de la posición final indicada.* .length( ) < 2 ) . 354 .println ( “ Nombre ingresado no válido… Reintente! ” ) .1) . Problema 105 Etapa 01 – Descripción del problema. if ( nom. System. cadena1 = nom. La segunda forma nos permite obtener una subcadena desde una posición determinada hasta el final de la cadena. cadena1 = cadena1.println ( “ El nombre del alumno es: ” + nom ) . do { System. tal y como se muestra a continuación: Pag. nom = nom. Clase PrgPrimeroMayuscula package dominioDeLaAplicacion .substring(0.trim( ) .toUpperCase( ) . nom = cadena1. } } ¿Qué hay de nuevo en la codificación? Observe el uso del método substring ( ) de la clase String: cadena1 = nom.leerString( ) .concat(cadena2) . Ing. cadena1= “”. utilizaríamos la siguiente sentencia: cadena1 = nom. Continuando con nuestro ejemplo.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. 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). Donde.1) .concat (cadena2) . 355 . si deseamos obtener la primera letra de la cadena utilizamos la siguiente sentencia: cadena1 = nom. Ahora en la variable cadena1 tenemos almacenada la letra “D” y en la variable cadena2 tenemos almacenadas las letras “anae”. utilizando el método concat ( ).substring (1) . Pag.substring (1. donde el número (en nuestro caso el número 1). Para finalizar solo será necesario juntar o concatenar ambas variables en la variable original nom. Esta es la segunda forma de utilizar el método substring ( ). Esto lo realizamos utilizando: cadena2 = nom. Suponiendo que se desee obtener la subcadena “ana” de la cadena “danae” contenida en la variable nom. indica la posición de la cadena nom donde va a comenzar la subcadena (la primera letra “a”) hasta el final de la cadena.substring(0.toUpperCase ( ) . empezando por la posición cero (0). Esto nos permite solo obtener el primer caracter de nom (la letra “d”). una vez obtenida la primera letra del nombre se convierte a mayúscula utilizando: cadena1 = cadena1. posición 0 Entonces. nom = cadena1. Ahora es necesario obtener el resto del contenido de la variable nom. nom = “danae”.4) . El resultado que se obtiene es el nombre ingresado con la primera letra en mayúscula. Clase PrgMayusculaMinuscula package dominioDeLaAplicacion . cadena2 = cadena2.out.leerString( ) . Desarrollar un programa en Java que permita ingresar el nombre de un alumno.substring(0. toLowerCase ( ) y concat ( ) de la clase String.out. import biblioteca. cadena1 = “” . public class PrgMayusculaMinuscula { public static void main(String [ ] args) { int cant . cadena2 = nom. cadena1 = cadena1.* . cadena2 = “” . toUpperCase ( ). length ( ). se convierte en mayúscula la primera letra del nombre y el resto se convierte en minúscula. } } while (nom. if ( nom. System. Ing. cadena1 = nom. se puede afirmar que esta solución es más óptima que la solución presentada en el problema 104. Finalmente siempre el nombre tendrá la primera letra en mayúscula y el resto en letra minúscula. } } Observe el uso de los métodos trim ( ). nom = Lectura.println ( “ Ingresar el nombre: ” ) .println ( “ El nombre del alumno es: ” + nom ) .out.length( ) < 2) { System. En consecuencia. Problema 106 Etapa 01 – Descripción del problema. En la codificación de este programa.length( ) < 2 ) . do { System. String nom.substring(1) . Etapa 04 – Desarrollo de la codificación. nom = cadena1.toLowerCase( ) . substring ( ) en sus dos formas.1) . Juan José Flores Cueto. nom = nom. 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.println ( “ Nombre ingresado no válido… Reintente! ” ) . Pag. 356 . Mostrar el primer caracter del nombre ingresado en mayúsculas y el resto en minúscula.trim( ) .concat(cadena2) .toUpperCase( ) . leerString( ) . import biblioteca.substring(0.out. x++) { if ( x==0) { cadena1 = nom. caracter = nom. caracter .length( ) < 2) . nom = nom.trim( ) . nom = cadena1. x<cant.toUpperCase( ) .toLowerCase( ) .* . x+2) . cadena2 = nom. x+1) .substring(0.length( ) < 2) { System. } } while (nom. } } } System. Etapa 04 – Desarrollo de la codificación. cadena2 = nom.concat(cadena2) . Desarrollar un programa en Java que permita ingresar el nombre completo de un alumno (nombres y apellidos en una sola variable). if ( nom. caracter = caracter. Mostrar el primer caracter de cada palabra del nombre en mayúsculas y el resto de cada palabra en minúscula.substring(1) .equals ( “ ” ) ) { cadena1 = nom. } } ¿Qué hay de nuevo en la codificación? Pag.cadena2 = “”.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 107 Etapa 01 – Descripción del problema. cadena1 = cadena1.println ( “ Nombre ingresado no válido… Reintente! ” ) . nom = cadena1 + caracter + cadena2 .out. cadena1 = “”.substring(x+2) .println ( “ El nombre del alumno es: ” + nom ) .x+1) .out.length( ) .1) .substring(x. String nom. public class PrgNombreCompleto { public static void main(String [ ] args) { int cant .toUpperCase( ). cadena2 = cadena2. for (int x=0.println ( “ Ingresar el nombre: ” ) . nom = Lectura. Clase PrgNombreCompleto package dominioDeLaAplicacion .substring(x+1. } else { caracter = nom. 357 . do { System. cant = nom. if (caracter. Ahora considere si entre los nombres existe más de un espacio en blanco. } else { caracter = nom. mientras que el resto de las letras estén en letra minúscula. Si al comparar el contenido de las dos cadenas resulta que ambas variables son iguales. El siguiente esquema muestra como se debe almacenar parcialmente el nombre del ejemplo en la variable nom.equals( “ ” ) ) { sw = true .concat(cadena2) . Observe el uso del método equals ( ) de la clase String: if (caracter.1) . cadena2 = nom. cadena2 = cadena2.length( ) . Al inicio utilizamos parte de la solución del problema 105. if (caracter. Juan José Flores Cueto. El proceso se repite hasta llegar al final de la cadena. 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. Imagínese que la variable nom contiene el siguiente nombre: nom = “danae alessandra flores bertolotti” . for (int x=0. sw = false . x+1) . en caso contrario nos devuelve un valor falso (false).substring(1) .toUpperCase( ) . Después obtenemos caracter por caracter y evaluamos si el caracter obtenido es un espacio en blanco. cadena1 = cadena1.toLowerCase( ) . nom = cadena1. } else { if (sw) { Pag.substring(0. Este valor devuelto se evalúa en la estructura de decisión if. 358 .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). ¿Qué sucede? Modificando la solución anterior para poder considerar la problemática anterior tendríamos la siguiente variación: cant = nom. Danae a lessandra flores bertolotti.substring(x. x<cant. Nosotros desearíamos que la primera letra de cada nombre y de cada apellido de un alumno este en letra mayúscula. Ing. x++) { if (x==0) { cadena1 = nom. A cadena1 caracter cadena2 Después se concatenan las tres variables y se almacenan en la variable nom. el método equals ( ) nos devuelve un valor verdadero (true). caracter = nom. sw = false . caracter = caracter. Pag. cadena2 = nom.substring(0. 359 . } } } } 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.x) .toUpperCase( ). sin preocuparnos de la cantidad de espacios en blanco que pueda existir entre dos nombres.substring(x.substring(x+1) .CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA cadena1 = nom. x+1) . nom = cadena1 + caracter + cadena2 . out. if ( nom.out. Mostrar el número de caracteres blancos o espacios en blanco que existan.equals ( “ ” ) ) { cont ++ .cont=0 .caracter .x<cant. nom = nom. } } while (nom.x+1) .substring(x.length( ) < 2 ) { System. Etapa 04 – Desarrollo de la codificación. for (x=0. do { System. Ing.println ( “ La cantidad de espacios: ” + cont ) . Pag. import biblioteca.leerString( ) . Problema 108 Etapa 01 – Descripción del problema.x++) { caracter = nom. Desarrollar un programa en Java que permita ingresar los apellidos y nombres de un obrero (en una sola variable). Si el caracter es igual a un espacio en blanco (“ “). se evalúa caracter por caracter (de la variable nom). } } System. 360 . se le aumenta uno a la variable cont (que esta trabajando como contador de espacios encontrados en la variable nom). } } Observe el uso de los métodos trim ( ). Clase PrgLongitudCadenaBlanco package dominioDeLaAplicacion .cant.println ( “ Nombre ingresado no válido… Reintente! ” ) .trim( ) . public class PrgLongitudCadenaBlanco { public static void main(String [ ] args) { int x.out. Juan José Flores Cueto. substring ( ) y equals ( ) de la clase String.length( ) < 2 ) . String nom.* . if (caracter. cant = nom.length( ) .println ( “ Ingresar el nombre: ” ) . nom = Lectura. En la codificación de este programa. length ( ). 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). } } cant = cadena. nom = Lectura. substring ( ) y equals ( ) de la clase String. que equivale a la cantidad de caracteres de la variable nom diferentes a espacios en blanco. Desarrollar un programa en Java que permita ingresar los apellidos y nombres de un obrero (en una sola variable).x+1) . if ( nom.length( ) < 2 ) { System. nom = nom.out. cadena = “”. if ( !caracter. cant = nom.out. En la codificación de este programa.println ( “ Nombre ingresado no válido… Reintente! ” ) .concat(caracter) .trim( ) . caracter . 361 . x++) { caracter = nom.length( ) .* .length( ) . x<cant. public class PrgLongitudCadenaNoBlanco { public static void main(String [ ] args) { int cant. do { System. Mostrar el número de caracteres del nombre ingresado por teclado que no sean espacios en blanco.println ( “ Ingresar el nombre: ” ) . Clase PrgLongitudCadenaNoBlanco package dominioDeLaAplicacion . for (x=0.equals ( “ ” ) ) { cadena = cadena. System. String nom. Pag.x.substring(x.out.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 109 Etapa 01 – Descripción del problema.leerString( ) . import biblioteca.length( ) < 2 ) . } } Observe el uso de los métodos trim ( ).println ( “ La cantidad de caracteres sin contar espacios: ” + cant ) . Etapa 04 – Desarrollo de la codificación. Al final se obtiene la longitud de la variable cadena. se evalúa caracter por caracter (de la variable nom). } } while (nom. length ( ). Desarrollar una solución que permita ingresar los apellidos y nombres de un obrero (en una sola variable).x+1) . } } while (nom.* .println ( “ Nombre ingresado no válido… Reintente! ” ) . caracter . } } En la codificación de este programa. Problema 110 Etapa 01 – Descripción del problema.substring(x. se emplea la misma estrategia que la utilizada en la solución del problema 108. cant.cont ) ) .out.equals ( “ ” ) ) { cont ++ . do { System. public class PrgLongitudCadenaBlancoNoBlanco { public static void main(String [ ] args) { int x. System. Etapa 04 – Desarrollo de la codificación. nom = nom.out. x++) { caracter = nom. cant = nom. x<cant.out. import biblioteca.length( ) < 2 ) { System.println ( “ Ingresar el nombre: ” ) . 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.length( ) < 2 ) . } } System.trim( ) .println ( “ La cantidad de caracteres sin contar espacios: ” + ( cant . Mostrar el número de caracteres que no son espacios en blanco y el número de caracteres que son espacios en blanco. Ing. nom = Lectura. Juan José Flores Cueto. Clase PrgLongitudCadenaBlancoNoBlanco package dominioDeLaAplicacion .length( ) . 362 . String nom. fo r(x=0. para obtener el número de espacios en blanco contenidos en la variable nom. cont = 0 .println ( “ La cantidad de espacios: ” + cont ) . if (caracter.out. if ( nom.leerString( ) . Pag. out. public class PrgTotalVocales1 { public static void main(String [ ] args) { int cant.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 111 Etapa 01 – Descripción del problema. Etapa 04 – Desarrollo de la codificación.out.length( ) . Clase PrgTotalVocales1 package dominioDeLaAplicacion . x++) { c = nom.println ( “ El Total de Vocales es: ” + cont ) .length( ) == 0 ) .toLowerCase( ) . cont = 0. Mostrar el número de vocales que hay en el nombre ingresado. nom = nom. for (x=0. d = (int) (c) . cant = nom.trim( ) . x .length( ) == 0 ) { System. 363 . x<cant. } } while (nom. do { System. Desarrollar una solución que permita ingresar el nombre de un alumno. import biblioteca. char c = ‘ ’ .leerString( ) . String nom .out. // u } } System.* . if ( nom.charAt(x) .println ( “ Nombre ingresado no válido… Reintente! ” ) . nom = nom. } } Pag.println ( “ Ingresar el nombre: ” ) . switch (c) { case 97 : // a case 101 : // e case 105 : // i case 111 : // o case 117 : cont ++ . nom = Lectura. d = 0. e. o y u (en forma independiente). 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. obtenemos un caracter de la variable nom y lo almacenamos en una variable de tipo char (el método charAt ( ) devuelve un caracter). El método charAt ( ) se utiliza con variables de tipo String y nos permite obtener un caracter de una cadena. letras y números). El caracter obtenido es evaluado para determinar si es o no una vocal. Modifique la solución anterior de tal forma que pueda determinar cuantas vocales almacenadas en la variable son a. En nuestro caso.charAt (x) . Ing. ¿Qué hay de nuevo en la codificación? Observe el uso del método charAt ( ) de la clase String: nom. 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. Pag. 364 . i.charAt (x) . Juan José Flores Cueto. c = nom. out. nom = nom. switch (c) { case 97 : // a case 101 : // e case 105 : // i case 111 : // o case 117 : cont ++ .out. // u } } System.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 112 Etapa 01 – Descripción del problema. nom = nom. } } Pag.out.trim( ) . for (x=0. 365 . do { System. cant = nom.leerString( ) . Etapa 04 – Desarrollo de la codificación. x . char c = ‘ ’ . cont = 0 .* .println ( “ Ingresar el nombre: ” ) . public class PrgTotalVocalesNoVocales { public static void main(String [ ] args) { int cant. x++) { c = nom.println ( “ Nombre ingresado no válido… Reintente! ” ) . Mostrar el número de vocales y el número de caracteres que no son vocales que hay en el nombre ingresado. String nom . System. Clase PrgTotalVocalesNoVocales package dominioDeLaAplicacion . d = (int) (c) . import biblioteca.out. } } while (nom.length( ) .println ( “ El Total de Vocales es: ” + cont ) . if ( nom. x<cant. nom = Lectura.toLowerCase( ) .println ( “ El Total de caracteres que no son vocales es: ” + (cant – cont) ) .charAt(x) .length( ) == 0 ) { System. Desarrollar un programa en Java que permita ingresar el nombre de un alumno.length( ) == 0 ) . d = 0 . También puede modificar la solución de tal forma que permita determinar cuántas consonantes contiene la variable nom. Este programa es similar al programa desarrolado en el problema 111. 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. Ing. Recuerde utilizar los equivalentes en código ASC de las consonantes en letra minúscula o en letra mayúscula. Pag. para poder obtener el total de caracteres que no son vocales. 366 . La diferencia es que se obtiene el total de caracteres que tiene la variable y se resta del total de vocales que tiene. Juan José Flores Cueto. println ( “ Ingresar una subcadena de la primera cadena: ” ) . import biblioteca.length( ) ) { total = cad1. do { System. subcad .out. if (cad1. if (cad2.length( ) == 0 ) .println ( “ Cadena ingresada no válida. do { System. } } while (cad2.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 113 Etapa 01 – Descripción del problema.out. Reintente! ” ) . if (cad1.println ( “ Ingresar una cadena: ” ) . } } System. i <= total. cad2 = Lectura. cad2.leerString( ) .length( ) == 0) { System.cad2.length( ) == 0 ) { System. } } while (cad1. cad2 = cad2. for (i = 0. Clase PrgCadenaSubcadena package dominioDeLaAplicacion ..trim( ) . cont = 0 .length( ) . i++) { subcad = cad1.out.length( ) == 0 ) .out. int total. Etapa 04 – Desarrollo de la codificación. System.equals(subcad) ) { cont ++ . Contar y mostrar cuantas veces se repite la segunda cadena en la primera cadena ingresada.* .leerString( ) . 367 .out. i + cad2.out. i.length( ) .trim( ) ..length( ) ) . if (cad2.substring (i. Reintente! ” ) .println ( “ la subcadena en la cadena es: ” + cont ) . Desarrollar un programa en Java que permita ingresar dos cadenas. cad1 = cad1..length( ) > cad2. Pag.println ( “ Cadena ingresada no válido.println ( “ El número de veces que se repite ” ) . public class PrgCadenaSubcadena { public static void main(String [ ] args) { String cad1. cad1 = Lectura.. System. i <= total. Ing..println ( “ las cadenas son iguales ” ) . Este proceso se repite utilizando el siguiente caracter de cad1. } else { System. } else { System. Como ejemplo utilizaremos las siguientes cadenas: cad1 = “Danae” cad2 = “ana” En primer lugar determinamos que cad1 tiene una longitud mayor que cad2.length( ) > cad2. } } System. Después. Etapa 04 . Pag. El límite para la evaluación del número de veces que se repite cad2 en cad1.equals (cad2) ) { System.out.equals (subcad)) { cont ++ .out. } } } } Observe el uso de los métodos trim ( )..println ( “ las cadenas son iguales ” ) . calculamos el valor de la variable total (total = 5-3 = 2).out.println ( “ la segunda cadena no debe tener una longitud ” ) .out. substring ( ) y equals ( ) de la clase String. Luego.out. i + cad2.println ( “ mayor que la primera cadena ” ) . i++) { subcad = cad1. Juan José Flores Cueto.length( ) ) .println ( “ mayor que la primera cadena ” ) . es el caracter ubicado en la posición total de cad2. Continúa. Clase PrgCadenaSubcadena } else { if (cad1. if (cad2. Si son iguales el contador cont aumenta en 1.substring(i.length( ) ) { total = cad1.length( ) .println ( “ la segunda cadena no debe tener una longitud ” ) . Luego.length( ) . se obtiene la diferencia entre las longitudes de cad1 y cad2. length ( ).equals (cad2) ) { System. y se almacena en la variable total.println ( “ El número de veces que se repite ” ).out. } } En primer lugar.out. System. 368 . for (i = 0.out.Desarrollo de la codificación. 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 ( ). La parte central de la solución radica en las siguientes líneas de código: if (cad1.cad2. se verifica que la primera cadena (cad1) tenga una longitud mayor que la segunda cadena (cad2).println ( “ la subcadena en la cadena es: ” + cont ) . } else { if (cad1. System. 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 Observe que cad2 tiene una Límite para la longitud=3 por lo que la última evaluación evaluación será: cad2 = “ana” y subcad= “nae” Primera evaluación: cad2 = “ana” y subcad = “Dan” Resultado: falso. Finalmente. Segunda evaluación: cad2 = “ana” y subcad = “ana” Resultado: verdadero (cont =1). Primera evaluación: cad2 = “ana” y subcad = “nae” Resultado: falso. se concluye que cad2 se repite una vez en cad1. Pag. 369 . Ing. } } while ( nom1.out. if ( nom2. do { System. nom2 .out. nom1 = nom1.length( ) < 2 ) . } } } Observe el uso de los métodos trim ( ). Problema 114 Etapa 01 – Descripción del problema. nom2 = nom2.println ( “ Los nombres ingresados son iguales ” ) . Juan José Flores Cueto. nom1 = Lectura. 370 .trim( ) .equals (nom2) ) { System.println ( “ Ingresar el nombre del segundo alumno: ” ) . Etapa 04 – Desarrollo de la codificación. public class PrgNombresIguales { public static void main(String [ ] args) { String nom1.leerString( ) . Se comparan dos variables de tipo cadena (nom1 y nom2 respectivamente) y se determinan si ambas cadenas son iguales o no.println("Nombre ingresado no válido… Reintente! "). do { System.leerString( ) .* . Desarrollar un programa en Java que permita ingresar el nombre de dos alumnos.out.println ( “ Nombre ingresado no válido… Reintente! ” ) .length( ) < 2 ) { System.length( ) < 2 ) .println ( “ Los nombres ingresados son diferentes ” ) . Mostrar si los nombres ingresados son iguales o no.println ( “ Ingresar el nombre del primer alumno: ” ) . if ( nom1.trim( ) . Clase PrgNombresIguales package dominioDeLaAplicacion . nom2 = Lectura. if ( nom1.out. } } while ( nom2.out. import biblioteca. } else { System.length( ) < 2 ) { System.out. length ( ) y equals ( ) de la clase String. Pag. nombreMayor = nombre1 .” ) . Clase PrgOrdenados1 package dominioDeLaAplicacion .out. entonces las cadenas son iguales.out. 371 . nombreMayor.compareTo (nombre2) . si el valor devuelto es menor que cero. System. } } ¿Qué hay de nuevo en la codificación? Observe el uso del método compareTo ( ) de la clase String: nombre1.out. Si el valor devuelto es igual a cero (0). Desarrollar un programa en Java que permita ingresar los nombres de dos alumnos. Mostrar los nombres ordenados alfabéticamente. las variables nombre1 y nombre2 contiene cadenas iguales. System.println ( “ Ingrese el nombre de una persona: ” ) . if (nombre1.leerString( ) .* . } else { nombreMenor = nombre2 . System.compareTo(nombre2) < 0 ) { nombreMenor = nombre1 .out. El método compareTo ( ) permite comparar dos variables de tipo String. nombreMenor. El método permite compareTo ( ) nos devuelve un valor entero. public class PrgOrdenados1 { public static void main(String [ ] args) { String nombre1. nombreMayor = nombre2 . System. System. System.println ( “ ------------------------------------------------.out.” ) . Si el valor devuelto es mayor que cero (0). entonces la variable nombre1 es mayor que la variable nombre2.leerString( ) . nombre2 = Lectura.println (nombreMayor) . es decir. nombre2. } System.out.println ( “ ------------------------------------------------. nombre1 = Lectura.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 115 Etapa 01 – Descripción del problema. Pag.out.println ( “ Nombres ordenados alfabéticamente ” ) . entonces la variable nombre1 es menor que la variable nombre2. Etapa 04 – Desarrollo de la codificación. Finalmente.println (nombreMenor) . import biblioteca.println ( “ Ingrese el nombre de otra persona: ” ) . Por ejemplo. 2. las letras minúsculas. nombre1 < nombre2 En base a esto. 372 . nombre1 = “Carmen” y nombre2 = “Juan”. nombre1 = nombre2 3. Juan José Flores Cueto. Cuando se comparan dos cadenas. comparemos las siguientes cadenas: nombre1 > nombre2 1. los caracteres especiales y los espacios en blanco. nombre1 = “Pedro” y nombre2 = “Luis”. mejore la solución de tal forma que se pueda realizar la consistencia de los nombres ingresados. Pag. nombre1 = “Danae” y nombre2 = “Danae”. se realiza una comparación alfabética en la cual tienen significado las letras mayúsculas. Ing. length( ) < 2 ) .println ( “ Nombre ingresado no válido.out..CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 116 Etapa 01 – Descripción del problema.Reintente!!! ” ) .Reintente!!! ” ) . Clase PrgOrdenados2 package dominioDeLaAplicacion . 373 .length( ) < 2 ) { System.out. public class PrgOrdenados2 { public static void main(String [ ] args) { String nombre1. nombre1 = Lectura.trim( ) . if ( nombre1. nombreMayor = nombre1 . nombre2. do { System..length( ) < 2 ) .out.println ( “ Ingrese el nombre de la segunda persona: ” ) .compareTo(nombre2) < 0 ) { nombreMenor = nombre1 . nombre2 = nombre2.out. } } while (nombre1..leerString( ) . } else { nombreMenor = nombre2 . nombre2 = Lectura. Desarrollar un programa en Java que permita ingresar los nombres de dos alumnos (no permite el ingreso de solo espacios en blanco). import biblioteca..length( ) < 2 ) { System. nombreMenor .* . Mostrar los nombres ordenados alfabéticamente.println ( “ Ingrese el nombre de la primera persona: ” ) .println ( “ Nombre ingresado no válido. nombre1 = nombre1. if ( nombre2. Etapa 04 – Desarrollo de la codificación. nombreMayor. nombreMayor = nombre2 . if (nombre1. } Pag. do { System. } } while ( nombre2.trim( ) .leerString( ). Desarrollo de la codificación.. Clase PrgOrdenados2 System. de tal forma que se contemple la posibilidad que los nombres ingresados sean iguales. Etapa 04 .out.println (nombreMayor) .out. System.” ) . System.out.println ( “------------------------------------------------. 374 . } } Mejore la codificación del programa. Juan José Flores Cueto.println ( “Nombres ordenados alfabéticamente ” ) ..” ) . Pag.out. Continúa.println ( “------------------------------------------------. System. Ing.out.println (nombreMenor) . System. out. do { System. Clase PrgOrdenados3 package dominioDeLaAplicacion .. } } while (nombre2. nombre2. public class PrgOrdenados3 { public static void main(String [ ] args) { String nombre1. nombre3 = Lectura. nom02 = “”. nombre2 = Lectura..CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 117 Etapa 01 – Descripción del problema.length( ) == 0 ) .length( ) == 0 ) .out. nombre3 = nombre3.. import biblioteca.trim( ) . nombre3 . nom03 = “” .trim( ) ..length( ) == 0 ) { System.println ( “ Ingrese el nombre de la primera persona: ” ) .println ( “ Ingrese el nombre de la tercera persona: ” ) .Reintente!!! ” ) . } } while ( nombre3.length( ) == 0 ) { System.println ( “ Nombre ingresado no válido..out. nombre1 = nombre1.println ( “ Nombre ingresado no válido. if ( nombre2. Etapa 04 – Desarrollo de la codificación.trim( ) .Reintente!!! ” ) ..leerString( ) . if ( nombre1.println ( “ Nombre ingresado no válido.leerString( ) . do { System.length( ) == 0 ) { System. nombre2 = nombre2.println ( “ Ingrese el nombre de la segunda persona: ” ) . 375 .out. Desarrollar un programa en Java que permita ingresar los nombres de tres alumnos (los nombres no deben ser iguales).out. do { System. if ( nombre3. Pag.leerString( ) . Mostrar los nombres ordenados alfabéticamente.length( ) == 0 ) . String nom01 = “ ”.Reintente!!! ” ) . nombre1 = Lectura. } } while ( nombre1.out.* . nom03 = nombre1 . System. nom03 = nombre2 . nombre3 = “Beto”. 3.println (nom03) . Ing.compareTo(nombre1) < 0 && nombre3. Juan José Flores Cueto. nom03 = nombre1 .compareTo(nombre3) < 0 ) { nom01 = nombre1 .. } else { nom02 = nombre3 . nom03 = nombre3 . } } if (nombre3.out.out. nombre2 = “Armando”. } } if (nombre2. if (nombre1. Ejecute el programa. if (nombre1. Clase PrgOrdenados3 if (nombre1.” ) .out.compareTo(nombre2) < 0 && nombre1.out. if (nombre2.println ( “ ------------------------------------------------. ingrese los siguientes datos y compruebe lo que sucede: nombre1 = “Armando”.. Etapa 04 . 376 . 2.println ( “ Nombres ordenados alfabéticamente ” ) . nom03 = nombre2 .compareTo(nombre2) < 0 ) { nom02 = nombre1 . System. } else { nom02 = nombre2 . Modifique la codificación de la solución de tal forma que pueda mejorarla. System.compareTo(nombre1) < 0 && nombre2. Pag. } else { nom02 = nombre3 . } } Desarrolle la siguiente prueba: 1.Desarrollo de la codificación. nombre2 = “Armando”.compareTo(nombre2) < 0 ) { nom01 = nombre3 . } } System.compareTo(nombre3) < 0) { nom01 = nombre2 .” ) .println ( “ ------------------------------------------------. Finalmente ingrese los siguientes datos. nombre3 = “Beto”. nom03 = nombre3 . Compruebe lo que sucede: nombre1 = “Armando”.out.compareTo(nombre3) < 0 ) { nom02 = nombre1 .println (nom01) . System. System. Continúa.println (nom02) .out. nombre2 = “Beto”. Luego ingrese los siguientes datos y compruebe nuevamente lo que sucede: nombre1 = “Armando”. nombre3 = “Armando”.compareTo(nombre3) < 0 ) { nom02 = nombre2 . trim( ) .out.println ( “ Nombre ingresado no válido. nom02 = “”..trim( ) .length( ) == 0 ) { System.println ( “ Nombre ingresado no válido.out.. Etapa 04 – Desarrollo de la codificación.. nombre2.length( ) == 0 ) .println ( “ Nombre ingresado no válido. String nom01 = “”.Reintente!!! ” ) ..Reintente!!! ” ) . nombre3 .CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 118 Etapa 01 – Descripción del problema. if (nombre1. Desarrollar un programa en Java que permita ingresar los nombres de tres alumnos (los nombres pueden ser iguales). } } while ( nombre2.trim( ) . nombre1 = nombre1. nombre1 = Lectura.length( ) == 0) { System..out.println ( “ Ingrese el nombre de la primera persona: ” ) . do { System.Reintente!!! ” ) . import biblioteca.println ( “ Ingrese el nombre de la segunda persona: ” ) . Pag. nombre2 = Lectura.* .out. do { System.leerString( ) .length( ) == 0 ) . Mostrar los nombres ordenados alfabéticamente. nombre3 = Lectura.println ( “ Ingrese el nombre de la tercera persona: ” ) . nom03 = “”. do { System.length( ) == 0 ) { System.out. if (nombre2.leerString( ) . Clase PrgOrdenados4 package dominioDeLaAplicacion . if ( nombre3.length( ) == 0 ) .out.. nombre3 = nombre3. 377 . } } while ( nombre1. } } while (nombre3.leerString( ) . public class PrgOrdenados4 { public static void main(String [ ] args) { String nombre1. nombre2 = nombre2. out. } } System. Modifique el programa de tal forma que se cambie la primera letra del nombre ingresado a mayúscula. System.out.compareTo(nombre3) < 0 ) { nom02 = nombre1 . if (nombre2. nom03 = nombre1 . nom02 = nombre1 . nombre3 = “Armando”. Se ordenarán primero los nombres que comiencen con mayúscula y luego los nombres que comiencen con minúscula. Etapa 04 .println ( “ Nombres ordenados alfabéticamente ” ) .println (nom03) . nom03 = nombre1 .compareTo(nombre3) < 0 ) { nom02 = nombre2 . } else { nom02 = nombre3 .. System.Desarrollo de la codificación. Pag. nom03 = nombre3 .out.out..println ( “ ------------------------------------------------. Compruebe lo que sucede. nombre2 = “Beto”.out. } } else { nom01 = nombre3 .println ( “ ------------------------------------------------. Juan José Flores Cueto. System.println (nom02) . if ( nombre1. System. } else { nom02 = nombre3 . } } else { if ( nombre2. nom02 = nombre2 . Continúa.” ) . Clase PrgOrdenados4 if ( nombre1. Ing. 378 .compareTo(nombre3) < 0 ) { nom01 = nombre2 . } } Desarrolle la siguiente prueba: Ingrese los nombres con letras mayúsculas y minúsculas. nom03 = nombre2 . } } else { nom01 = nombre3 .” ) . nom03 = nombre2 . nom03 = nombre3 .compareTo(nombre2) < 0 ) { if ( nombre1. System. por ejemplo: nombre1 = “armando”.println (nom01) .out.compareTo(nombre3) < 0 ) { nom01 = nombre1 . .. nombre1 = Lectura.length( ) == 0 ) { System. nom02 = “”.trim( ) .out. Desarrollar un programa en Java que permita ingresar los nombres de tres alumnos.* . nom03 = “” .println ( “ Ingrese el nombre de la primera persona: ” ) . nombre1 = nombre1. Pag. do { System.substring(0. Mostrar los nombres ordenados alfabéticamente. } else { nombre2 = ((nombre2.length( ) == 0 ) { System.length( ) == 0 ) . 1)).concat(nombre2.println ( “ Ingrese el nombre de la segunda persona: ” ) . 1)). nombre2 = nombre2.substring(0. nombre3 = Lectura.leerString( ) . if ( nombre2. Clase PrgOrdenados5 package dominioDeLaAplicacion . } else { nombre1 = ((nombre1.Reintente!!! ” ) .leerString( ) .out. String nom01 = “”. nombre3..println ( “ Nombre ingresado no válido.leerString( ) . 379 . import biblioteca.toUpperCase()). letra. Etapa 04 – Desarrollo de la codificación. nombre2.trim( ) .concat(nombre1.println ( “ Nombre ingresado no válido.substring(1)) . } } while ( nombre2. do { System. do { System. nombre3 = nombre3.out.toUpperCase()). } } while ( nombre1.substring(1)) . resto . nombre2 = Lectura.trim( ) ..length( ) == 0 ) . Asegúrese que los nombres ingresados empiecen con una letra mayúscula.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 119 Etapa 01 – Descripción del problema.Reintente!!! ” ) . public class PrgOrdenados5 { public static void main(String [ ] args) { String nombre1.out. if ( nombre1.out.println ( “ Ingrese el nombre de la tercera persona: ” ) . length( ) == 0 ) { System.println ( “ Nombres ordenados alfabéticamente ” ) .compareTo(nombre3) < 0 ) { nom02 = nombre1 .out.toUpperCase()). } else { nom02 = nombre3 . Ing. Pag. nom02 = nombre1 . Etapa 04 .compareTo(nombre3) < 0 ) { nom01 = nombre1 . if ( nombre1.println (nom01) . System. System. if ( nombre2. nom03 = nombre3 . System.substring(1)) . nom03 = nombre1 . complemente la solución permitiendo el ingreso de los nombres de todos los alumnos de un determinado salón de clase. Juan José Flores Cueto. } } else { nom01 = nombre3 .compareTo(nombre2) < 0 ) { if ( nombre1. nom03 = nombre3 . } else { nom02 = nombre3 . } } Mejore la solución desarrollando un programa que permita ingresar tres nombres de alumnos. Muestre los nombres ordenados alfabéticamente. Clase PrgOrdenados5 if ( nombre3. 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.. } } else { if ( nombre2..out. Continúa. nom02 = nombre2 . } else { nombre3 = ((nombre3. nom03 = nombre1 .length( ) == 0 ) .concat(nombre3.Desarrollo de la codificación.out.compareTo(nombre3) < 0 ) { nom01 = nombre2 .println (nom03) . 1)). } } System. } } while ( nombre3. if ( nombre1. 380 . Luego. } } else { nom01 = nombre3 ...out.substring(0.println (nom02) .println ( “ Nombre ingresado no válido. nom03 = nombre2 .compareTo(nombre3) < 0 ) { nom02 = nombre2 .out. nom03 = nombre2 .Reintente!!! ” ) . out. cant = nom. dato2 = Lectura.x+1) . x++ ) { caracter = nom.out. } System. System. dato2. } } ¿Qué hay de nuevo en la codificación? Observe el uso del método equals ( ) de la clase String: nombre1. un caracter que este contenido en el nombre ingresado y otro caracter por el cual se reemplazará el primer caracter ingresado. Desarrollar un programa en Java que permita ingresar el nombre de una persona. public class PrgCadenaModifcada { public static void main(String [ ] args) { int cant .print ( “ Ingresar el nombre de una persona: ” ) . caracter. nom = Lectura. Mostrar el nombre modificado.out.leerString( ) .equals (nombre2) .println ( “ El resultado es: ” + cadena ) . String nom. dato1 = Lectura.leerString( ) .print ( “ Ingrese el caracter que se va buscar: ” ) . cadena= “” .* .out. Etapa 04 – Desarrollo de la codificación. dato1.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 120 Etapa 01 – Descripción del problema.print ( “ Ingrese el caracter por el cual se va reemplazar: ” ) . Clase PrgCadenaModifcada package dominioDeLaAplicacion .leerString( ) . for (x=0. Pag. System. import biblioteca. x<cant. else cadena = cadena + caracter .length( ) . System.substring(x.equals(caracter) == true ) cadena = cadena + dato2 . 381 . if ( dato1. x+1) .equals (caracter) == true ) La sentencia if puede evaluar una condición lógica.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. una variable booleana o el resultado de una operación. Por lo que en este caso el método equals ( ) evalúa a la variable dato1 y a la variable caracter. caso contrario devuelve false (falso). En nuestro caso. 382 . while y for).equals (caracter) == true ) if ( dato1. Un punto muy importante es el análisis de la siguiente línea de código: if ( dato1. En base a esto.substring (x . Juan José Flores Cueto. Pag. podemos afirmar que las siguientes sentencias en Java son equivalentes: if ( dato1. La variable caracter tuvo que declararse como String para poder ser utilizada por el método equals ( ) de esta forma: caracter = nom. el método equals ( ) devuelve true (verdadero) o false (falso). dependiendo del resultado de la comparación entre las variables dato1 y caracter. El método equals ( ) devuelve true (verdadero) si la cadena coincide con la cadena colocada como parámetro del método equals ( ). Ing. } } ¿Qué hay de nuevo en la codificación? Observe el uso del método valueOf ( ) de la clase String: String. Pag. El método valueOf ( ) se utiliza directamente con la clase String (y no con una variable de tipo String). Clase PrgIntercambioCadena package dominioDeLaAplicacion .leerInt(). } } while (num < 100).substring(0.valueOf (num) . public class PrgIntercambioCadena { public static void main(String [ ] args) { int num. cadena = dato3 + dato2 + dato1.1). Este método permite convertir una variable de cualquier tipo a una variable de tipo String o cadena. Etapa 04 – Desarrollo de la codificación.valueOf(num). dato2. num = Lectura.substring(cant-1). se utiliza el método substring ( ) para intercambiar las posiciones deseadas. luego intercambiar posiciones. 1). cant. String dato1.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 121 Etapa 01 – Descripción del problema. Una vez convertida la variable num. Mostrar el nuevo número.out.println(" Número ingresado no válido… Reintente! "). cant = cadena.substring(1.println(" El resultado es: " + cadena). Desarrollar un programa en Java que permita ingresar un número mayor de tres dígitos. dato3 = cadena. dato1 = cadena.* . el primer digito pasarlo al último y el último digito pasarlo al primero. if (num < 100) { System.length(). dato3. 383 . cant . import biblioteca.out. dato2 = cadena. Convertir el número en cadena.out. do { System. System. 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. cadena = "".print(" Ingresar un numero mayor de 3 dígitos: "). cadena = String. nom = nom.length( ). Cada vez que se ejecuta la sentencia for. if ( nom.length( ) == 0 ) .substring(x. x .trim( ) .length( ) == 0 ) { System.println ( “ El nombre al revés es: ” + cadena ) . String nom.concat(caracter) . Problema 122 Etapa 01 – Descripción del problema. } } ¿Qué hay de nuevo en la codificación? Observe el uso del método concat ( ) de la clase String: En este programa. public class PrgInvertirCadena { public static void main(String [ ] args) { int cant. import biblioteca. x-. cadena = cadena. Cada vez que se obtiene un caracter este se agrega a la variable cadena. de tal forma que se lea de izquierda a derecha (nombre mostrado al revés). Etapa 04 – Desarrollo de la codificación. Desarrollar un programa en Java que permita ingresar el nombre de un alumno.leerString( ) . } System.out. se obtiene de la variable nom un caracter empezando desde el último y terminando en el primero. Mostrar el nombre ingresado. Clase PrgInvertirCadena package dominioDeLaAplicacion . Ing. cadena = “” .out.println ( “ Nombre ingresado no válido… Reintente! ” ) . Juan José Flores Cueto. 384 . for (x=cant-1.out.* . do { System. 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. caracter. } } while ( nom. Pag.x+1) . x>=0. declaramos la variable caracter como una cadena (String). nom = Lectura. cant = nom.) { caracter = nom.println ( “ Ingresar el nombre: ” ) . para agregarlos a la variable cadena utilizando el signo “+” (concatenación). con la finalidad de obtener caracter por caracter de la variable nom (empezando desde el último y terminando en el primero).1. Pag. la variable caracter debe declararse como char.. x >= 0.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Otra manera de solucionar este problema es la siguiente: for ( x = cant . } Es importante indicar que para esta solución. Observe como se utiliza el método charAt ( ) de la clase String. 385 .charAt (x) .) { caracter = nom. x . cadena += caracter . Juan José Flores Cueto.out. Desarrollar un programa en Java que permita ingresar los nombres de 10 alumnos y permita visualizar la cantidad de nombres que empiezan con la letra “P” y la cantidad de nombres que terminan con la letra “a”. } } while (nombre. i <11. } } Mejore la solución desarrollando un programa que permita ingresar los nombres de todos los alumnos.trim( ) . for (i = 0.equals( “P” ) ) { contP++. contP= 0. letraIni = nombre.length( )-1.leerString( ) . letraFin = nombre.substring ( nombre.nombre. 386 . Ing.out. Problema 123 Etapa 01 – Descripción del problema.println ( “ Nombres que terminan con la letra a: ” + contA). Reintente! ” ) . Clase PrgCuentaLetras1 package dominioDeLaAplicacion . System. contA = 0 ..println ( “ Nombres que comienzas con la letra P: ” + contP). 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.. import biblioteca. Etapa 04 – Desarrollo de la codificación. Pag. nombre = nombre. Utilice la estructura do… while.length( ) == 0 ) { System. if ( nombre. if ( letraIni. letraFin = “” . i++) { do { System.1) . } if ( letraFin. } } System.out. public class PrgCuentaLetras1 { public static void main(String [ ] args) { String nombre.out.length( ) == 0 ) .substring(0.length( ) ) . nombre = Lectura. int i. letraIni = “”.println ( “ Ingresar el nombre del alumno: ” ) .equals( “a” ) ) { contA++.* .println ( “ Nombre ingresado no válido. char c = ‘ ’ . x . if ( nom. nom = nom. System.* .println ( “ Ingresar el nombre: ” ) . opc. public class PrgTotalVocales2 { public static void main(String [ ] args) { int cant. // u } } System. x++ ) { c = nom.println ( “ El Total de Vocales del nombre ingresado es: ” + cont ) . import biblioteca.out. No = 2): ” ) . for ( x=0. cant = nom. } } while ( nom. Etapa 04 – Desarrollo de la codificación.length( ) .out. d = (int) (c) .length( ) == 0 ) { System.toLowerCase( ) .println ( “ Nombre no válido… Reintente! ” ) .leerString( ) . Mostrar el número de vocales que existen en cada uno de los nombres ingresados. } } Pag. 387 . Desarrollar un programa en Java que permita ingresar los nombres de todos los empleados de una empresa.charAt(x) .println ( “ Desea ingresar otro nombre (Sí = 1. nom = nom.out.trim( ) .CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 124 Etapa 01 – Descripción del problema.out. } while ( opc != 1 ) . d=0. Clase PrgTotalVocales2 package dominioDeLaAplicacion . cont=0.leerInt( ) . do { do { System. x<cant. nom = Lectura.length( ) == 0 ) . switch(c) { case 97 : // a case 101 : // e case 105 : // i case 111 : // o case 117 : cont ++ . opc =Lectura. String nom . Pag. 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. Juan José Flores Cueto. Ing. 388 . y agréguelos en la sentencia switch ( ). x <= producto. do { System.1.println ( “ Ingresar el nombre del producto: ” ) . x) . for ( x = 1.Lectura .Desarrollo de la Codificación. import biblioteca. Desarrollar un programa en Java que permita ingresar los nombres de todos los productos de una determinada tienda. acum = “” . } } System. Etapa 04 . producto = Lectura. } while ( cantidad != cont ) .println ( “ Cantidad no válida… Reintente! ” ) .CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 125 Etapa 01 . cantidad = Lectura. acum = “” .out. } } Pag.out.println ( “ Ingresar la cantidad de productos: ” ) .length(). cont ++ .leerInt( ) . Clase PrgProductosTienda package dominioDeLaAplicacion .substring(x . class PrgProductosTienda { public static void main ( String arg [ ] ) { int x. } } while ( cantidad < 1 ) .out.out. Mostrar como resultado las posiciones pares. x++ ) { if ( x % 2 == 0 ) { acum = acum + producto.Descripción del problema. 389 .println ( “ Las posiciones pares del producto son: ” + acum ) .leerString( ) . String producto. cantidad. if ( cantidad < 1 ) { System. do { System. cont = 0 . Juan José Flores Cueto. Luego. Esto último se logra utilizando una sentencia for dentro de la sentencia do. y la forma como se utilizan las estructuras lógicas para la solución del problema. Observe el uso de los métodos length ( ) y substring ( ) de la clase String. se utiliza una sentencia do para ingresar el nombre de cada uno de los productos y determinar sus posiciones pares. Ing. Pag. Análisis de la solución Ingresamos la cantidad de alumnos y la almacenamos en la variable cantidad. se valida el número de alumnos ingresado. de tal forma que sea mayor a cero. 390 . println ( “ La Longitud es: ” + alumno. nomMayor = “”. nomMayor = alumno .leerInt( ) . nomMenor = alumno .println ( “ Cantidad no válida… Reintente! ” ) . if ( longMayor < alumno.println ( nomMayor + “ tiene de longitud ” + longMayor ) . el nombre que tiene la mayor longitud y el nombre que tiene la menor longitud.println ( “ Ingresar la cantidad de alumnos: ” ) .out. cont = 0. Etapa 04 . System.println ( nomMenor + “ tiene de longitud ” + longMenor ) . longMayor = 0. cantidad = Lectura.length( ) . nomMenor = “” .length( ) ) { longMenor = alumno.length( ) ) { longMayor = alumno. Desarrollar un programa en Java que permita ingresar los nombres de todos los alumnos de un salón de clase. if ( cantidad < 1 ) { System. String alumno. } while ( cantidad != cont ) .Desarrollo de la Codificación.println ( “ Ingresar el nombre del alumno: ” ) .out. System.length( ) .out. } cont ++ . System.Descripción del problema.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 126 Etapa 01 .leerString( ) . } } Pag.length( ) ) .Lectura . 391 . Mostrar la longitud de cada nombre ingresado. } if ( longMenor > alumno.out. do { System. do { System. class PrgLongitudNombre { public static void main ( String arg [ ] ) { int cantidad.out.out. import biblioteca. } } while ( cantidad < 1 ) . alumno = Lectura. Clase PrgLongitudNombre package dominioDeLaAplicacion . longMenor = 100 . 392 . de tal forma que sea mayor a cero. Ing. 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. Análisis de la solución Ingresamos la cantidad de alumnos y la almacenamos en la variable cantidad. Juan José Flores Cueto. y se determina la longitud de cada nombre ingresado. se valida el número de alumnos ingresado. y la forma como se utilizan las estructuras lógicas para la solución del problema. Pag. se utiliza una sentencia do para ingresar el nombre de cada uno de los alumnos. Luego. Desarrollar un programa en Java que permita ingresar una fecha con el siguiente formato “dd-mm-aaaa” y validarla.Desarrollo de la Codificación. 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. System. anio . mes = fecha.println ( “ Formato de la fecha es : dd-mm-aaaa ” ) .println ( “ El año ingresado esta incorrecto ” ) . System. if ( fecha.Lectura . 393 . if ( ( dia. Clase PrgFechaFormato package dominioDeLaAplicacion .length( ) <= 10 ) { dia = fecha. fecha = Lectura.out.println ( “ Ingresar la fecha actual: ” ) .out. Pag. 2) .println ( “ La fecha ingresada es correcta ” ) .length() != 2 ) || ( num1 < 31 ) ) { System. mes. } else { if ( anio.substring(3. 10) .CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 127 Etapa 01 .length( ) != 4 ) { System. } } } } } } Intente mejorar la solución validando la fecha. 5) . Etapa 04 .out.Descripción del problema. anio = fecha. num1 = Integer.out. Incluya la posibilidad que el mes de febrero sea bisiesto.parseInt(dia) . int num1 = 0.out.substring(0.out. num2 = 0 . } else { if ( (mes.parseInt(mes) .leerString( ) . class PrgFechaFormato { public static void main ( String arg [ ] ) { String fecha. import biblioteca. dia.println ( “ El dia ingresado es incorrecto ” ) . num2 = Integer.length() != 2 ) || ( num2 < 12 ) ) { System.substring(6.println ( “ El mes ingresado es incorrecto ” ) . } else { System. Lectura . 394 . tamaño. Problema 128 Etapa 01 .length( ) ) { tamaño = longitud . System.out.Desarrollo de la Codificación. } } Pag.println ( “ La nueva cadena es: ” + cadena ) . Clase PrgCompletarCadenaIzq package dominioDeLaAplicacion .out. Ejemplo: Se ingresa: Longitud = 10 Cadena = “Danae” Resultado: Cadena = “Danae*****” Etapa 04 . Juan José Flores Cueto. Ing.length( ) . if ( longitud > cadena. class PrgCompletarCadenaIzq { public static void main ( String arg [ ] ) { String cadena .println ( “ La longitud especificada es: ” ) . } } System.out.println ( “ Ingresar cadena: ” ) . import biblioteca. x <= tamaño.Descripción del problema. x++) { cadena = cadena + “*” . int longitud. for ( x = 1. cadena = Lectura. longitud = Lectura. Desarrollar un programa en Java que permita completar por la izquierda (utilizando asteriscos) una determinada cadena en base a una longitud especificada.leerString( ) . x .cadena. System.leerInt( ) . int longitud.Desarrollo de la Codificación. } } Pag. Clase PrgCompletarCadenaDer package dominioDeLaAplicacion .length( ) ) { tamaño = longitud .Lectura . for ( x = 1.out.println ( “ La nueva cadena es: ” + cadena ) . } } System. longitud = Lectura.leerString( ) .leerInt( ) . class PrgCompletarCadenaDer { public static void main ( String arg [ ] ) { String cadena .println ( “ Ingresar cadena: ” ) .Descripción del problema. x <= tamaño.out. import biblioteca.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 129 Etapa 01 .length( ) .cadena. System. x .out. System. Desarrollar un programa en Java que permita completar por la derecha (utilizando asteriscos) una determinada cadena en base a una longitud especificada.println ( “ La longitud especificada es: ” ) . x++ ) { cadena = “*” + cadena . Ejemplo: Se ingresa: Longitud = 10 Cadena = “Danae” Resultado: Cadena = “*****Danae” Etapa 04 . if ( longitud > cadena. tamaño. cadena = Lectura. 395 . En el ejemplo. Juan José Flores Cueto. se especifica el arreglo de tipo char del cual se va ha obtener la cadena. 396 . 3) . } } ¿Qué hay de nuevo en la codificación? Observe el uso del método valueOf ( ) de la clase String: String. en una variable de tipo String o cadena. Clase PrgArregloCadena package dominioDeLaAplicacion . se indica la posición del arreglo desde el cual se van a tomar los datos y finalmente. ‘e’ } . Este método permite convertir un arreglo de caracteres o parte de él. Etapa 04 .Lectura .Desarrollo de la Codificación.out.println ( “ La cadena es: ” + cadena ) . Observe que en este método. Pag. Desarrollar un programa en Java que permita transformar un arreglo de caracteres en una cadena.valueOf (arregloA. ‘a’. se indica la longitud o el número de caracteres que se van a obtener del arreglo. import biblioteca.Descripción del problema. se muestra como resultado la cadena “ana”. 1. Problema 130 Etapa 01 . ‘n’. en primer lugar. En segundo lugar. int. En nuestra solución convertimos parte del arreglo arregloA a un String con la finalidad de mostrar el contenido de dicha variable. El método valueOf ( ) se utiliza directamente con la clase String (y no con una variable de tipo String). Analizar la solución. class PrgArregloCadena { public static void main ( String arg [ ] ) { char arregloA = { ‘D’. ‘a’. especificando la posición del arreglo donde va ha comenzar la cadena y su longitud. int ) .valueOf ( char [ ]. System. Ing. String cadena = String. Los arreglos serán tratados en el siguiente capítulo. DecimalFormat numFormato . System. encontrará más información sobre otras clases de la Jerarquía de Clases de Java. adjunto al presente texto. num = Lectura. import java. Luego este objeto es creado utilizando el operador new. Mostrar el número ingresado con un formato determinado. estableciendo el formato a utilizar en el método constructor. Pag. Es fundamental que se continúe investigando el uso de otras clases incorporadas en esta jerarquía de clases con la finalidad de mejorar la calidad de las soluciones que se desarrollen.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA OTRAS CLASES EN JAVA En general. 397 . class PrgFormatoNumero { public static void main ( String arg [ ] ) { double num .println ( “El número con formato es : ” + df. Clase PrgFormatoNumero package dominioDeLaAplicacion . System. Desarrollar un programa en Java que permita ingresar un número por teclado.leerDouble(). Analizar la solución. } } Observe que se declara un objeto de la clase DecimalFormat llamado numFormato.text.Descripción del problema. el lenguaje de programación Java incorpora una gran cantidad de clases en paquetes organizados en su Jerarquía de Clases.text.* .out.format ( num ) ) .Lectura . numFormato = new DecimalFormat ( “###.println ( “Ingrese numero entero: ” ) . se puede mencionar la clase DecimalFormat del paquete java. En el CD.out. Problema 131 Etapa 01 . import biblioteca. Luego con el método format ( ) se procede a establecer el formato establecido para el número ingresado.Desarrollo de la Codificación. Como ejemplo.000" ) . Etapa 04 . Juan José Flores Cueto. 398 . Pag. Ing. Desarrollo de soluciones utilizando múltiples arreglos: • Arreglos en paralelo. • Manejo básico de datos. • Declaración. Capítulo 4 Estructura de Datos Arreglos Temas: Introducción. • Ingreso y visualización de datos. • Problemas resueltos. • Generalidades. . creación e inicialización. Desarrollo de soluciones utilizando arreglos: • Formalización del método de las 6’D. • Problemas resueltos. Estructura de Datos: Arreglos. . CAPÍTULO IV ESTRUCTURA DE DATOS – ARREGLOS INTRODUCCIÓN Un algoritmo constituye una lista completa de pasos secuenciales y una descripción de datos necesarios para resolver un determinado problema.ESTRUCTURAS DE DATOS – Arreglos. Dichos datos deben almacenarse en una estructura 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. Los arreglos permiten almacenar varios valores a la vez y constituyen las estructuras de datos más sencillas después de la variable. 401 . 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. Las estructuras lógicas y las estructuras de datos que se utilicen en una solución. trata sobre las estructuras de datos conocidas como arreglos y los conceptos más importantes relacionados a éstos. Ing. El presente capítulo. 402 . • Estructuras lógicas de decisión. TAMBIÉN: • Clases incorporadas en el lenguaje de programación utilizado. LISTA DE PASOS SENTENCIAS DESCRIPCIÓN DECLARACIÓN Y DE DATOS DEFINICIÓN DE DATOS SE DESARROLLAN UTILIZANDO: • Estructuras lógicas de secuencia. Pag. se utilizan las estructuras lógicas y las estructuras de datos en forma simultánea. Al desarrollar soluciones básicas. ALMACENADOS EN: • Estructuras de datos tipo variables. van a depender en general de la complejidad del problema. • Estructuras de datos tipo arreglo. • Estructuras lógicas de repetición. • Instrucciones de bifucación. Juan José Flores Cueto. por consiguiente una estructura de datos que permite almacenar un conjunto de datos. Tipos: Existen dos tipos de arreglos: Arreglos Unidimensionales (registro o vector) Estructuras de datos que permiten almacenar un conjunto de datos de un mismo tipo (técnicamente dichos valores se almacenan en celdas de memoria que están consecutivas). ESTRUCTURA DE DATOS ARREGLOS Definición: Los arreglos conocidos también como arrays. un arreglo contiene un conjunto de datos. Los arreglos o arrays pueden tener de una a varias dimensiones. Un arreglo puede almacenar un conjunto limitado de datos. Arreglos bidimensionales (tabla o matriz) El arreglo bidimensional se considera como un vector de vectores. Pag. El acceso a uno de los datos del arrreglo unidimensional se realiza mediante un índice. 403 . en el cual el orden de cada uno de los datos es significativo. todos del mismo tipo. Es. Es decir. Cada dato perteneciente al arreglo se almacena en una posición y puede ser mostrado. todos del mismo tipo. 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. modificado o eliminado. 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). son estructuras de datos que permiten almacenar más de un dato del mismo tipo a la vez.ESTRUCTURAS DE DATOS – Arreglos. y en el que se necesita especificar dos índices para poder acceder a cada uno de ellos. por lo que pueden ser considerados como globales o locales. Juan José Flores Cueto. • Al igual que otras estructuras de datos (como las variables y constantes). Pag. 404 . Ing. unidimensional o bidimensional. que pertenece al paquete java. los arreglos tienen un tiempo de vida. Ventajas: • Los datos están almacenados en una sola estructura de datos siendo más fácil el acceso a los mismos. denominada Vector. Se puede tener un arreglo de números enteros. Desventajas: • Un arreglo no puede almacenar datos de diferente tipo. • Antes de crear un arreglo es necesario conocer el número exacto de datos que se necesitan almacenar (esto no es tan cierto ya que existe una clase en Java. se necesitará uno o dos índices para acceder a los datos almacenados en el arreglo. que tiene métodos que permiten crear un vector y redefinir su tamaño cada vez que sea necesario). • Se utiliza un único nombre (nombre del arreglo) para referirse al conjunto de datos almacenados en el arreglo. o un arreglo de cadenas. pero no se puede tener un arreglo que contenga por ejemplo: cadenas y números enteros a la vez. Esto nos permite reducir el uso de variables y constantes. • Dependiendo del tipo de arreglo. • Los arreglos permiten almacenar datos de entrada y datos utilizados durante el procesamiento.util. Arreglos Bidimensionales Un arreglo bidimensional puede ser representado como una matriz o como una tabla..0 X 2.. X i -1 ] i Como registro: nombre X0 X1 X2 . A continuación se muestra la representación gráfica de un arreglo bidimensional llamado nombre: Como matriz: X 0.. .X i -1 = Datos almacenados en el vector. i -1 Donde: nombre = Nombre del vector. A continuación se muestra la representación gráfica de un arreglo unidimensional llamado nombre: Como vector: nombre = [ X 0.. .. i = Tamaño del vector. X 2.0 X i-1..j -1 X 1. X I-1 i 0 1 2 . X i-1. j) Como tabla: Pag..j -1 (i. X0.ESTRUCTURAS DE DATOS – Arreglos... 405 .0 X 0.1 X 0.. X 3. Representación gráfica Arreglos Unidimensionales: Un arreglo unidimensional puede ser representado como un vector o como un registro.2 … X 0. X 1.0 nombre = . Así. Por ejemplo.1 X 0.j -1 1 X 1. i = Número de alumnos. para referirnos a los arreglos unidimensionales se utilizará la representación del arreglo como registro y para referirnos a los arreglos bidimensionales se utilizará la representación del arreglo como tabla. en el vector anterior. Juan José Flores Cueto. según se muestre a continuación: Pag.0 Filas 2 X 2....0 X i-1. 406 . se realizaría de la siguiente manera: 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.0 i-1 X i-1. 15. nombre Columnas 0 1 2 j-1 0 X 0.0 X 0. para poder acceder a la nota final del alumno 2 se utilizaría el nombre del vector (notas). si se desea representar el almacenamiento de las notas finales de 10 alumnos de un salón de clase en un arreglo unidimensional (representado como un vector).09 = Son las notas finales de cada uno de los alumnos. j -1 = Datos almacenados en la matriz. En el presente texto. j) Donde: nombre = Nombre de la matriz. seguido de un índice igual a 1 entre corchetes ([1]).2 … X 0.j -1 (i.. Ing. i*j = Tamaño de la matriz. Para poder acceder a los datos almacenados en un arreglo unidimensional se necesita un índice que indique a cual de todos los datos del arreglo se desea acceder.Xi-1. X0. 10...0. se realizaría de la siguiente manera: notas Alumno 1 Alumno 2 … … … … … … … Alumno10 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 = Número de alumnos.14. en la tabla anterior. i = Número de notas. según se muestra a continuación: Pag. del trabajo y del examen final de 10 alumnos de un salón de clase en un arreglo bidimensional (representado como una tabla). 10.11 = Son las notas de Examen Final de c/u de los alumnos del salón de clase. 407 .11. seguido de dos índices iguales a 2 y 1.ESTRUCTURAS DE DATOS – Arreglos. 12. entre corchetes ( [2] [1] ). si se desea representar el almacenamiento de las notas del examen parcial.09 = Son las notas de Examen Parcial de c/u de los alumnos del salón de clase.08 = Son las notas de Trabajo de c/u de los alumnos del salón de clase. j=10) Donde: notas = Nombre del arreglo. 03. por ejemplo. para poder acceder a la nota del examen final (Nota EF) del alumno 2 se utilizaría el nombre de la tabla (notas). Así.…. 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 También.11. Para poder acceder a los datos almacenados en un arreglo bidimensional se necesitan dos índices que indiquen a cual de todos los datos del arreglo se desea acceder.…. Un arreglo solo puede almacenar datos del mismo tipo. los cuales serán separados por comas). se debe determinar que tipo de dato podrá almacenar un arreglo. Ing. definir un nombre para referirnos al arreglo. j=10) Notas[2][1] Declaración de Arreglos Para declarar un arreglo es necesario. Pag. Para declarar un arreglo unidimensional se utiliza solo un corchete de apertura y cierre “[ ]” al final del nombre del arreglo. TipoDeDato arreglo[ ][ ] . Para definir un nombre de un arreglo se siguen las mismas reglas utilizadas para la definición de nombres de variables y constantes. En general. mientras que para declarar un arreglo bidimensional se utilizan dos corchetes de apertura y cierre “[ ][ ]” al final del nombre del arreglo. notas Alumno 1 Alumno 2 … … … … … … … Alumno10 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. Los tipos de datos válidos para declarar un arreglo son los mismos tipos de datos válidos definidos para declarar variables y constantes. Donde TipoDeDato debe ser un tipo de arreglo o tipo de dato válido y arreglo es el nombre del arreglo (puede existir más de un arreglo. para declarar un arreglo se utiliza el siguiente formato: En pseudocódigo y diagrama de flujo: TipoDeDato arreglo[ ] TipoDeDato arreglo[ ][ ] En Java: TipoDeDato arreglo[ ] . 408 . En segundo lugar. en primer lugar. Juan José Flores Cueto. Para crear un arreglo se utiliza el siguiente formato: En pseudocódigo y diagrama de flujo: CREAR arreglo[tamaño] Pag. Antes de crear un arreglo se debe determinar cual va ser el tamaño del mismo. se podrá almacenar datos de tipo NUMERO. es necesario que el arreglo previamente haya sido declarado. Es decir. Como ejemplo de declaración de arreglos válidos en Java podemos utilizar: EJEMPLOS DESCRIPCIÓN Se declara un arreglo unidimensional llamado edades en el int edades[ ] . Se declara un arreglo unidimensional llamado nombres en el String nombres[ ] .ESTRUCTURAS DE DATOS – Arreglos. el tamaño del arreglo siempre deberá especificarse como un número entero. El tamaño de un arreglo puede especificarse en forma directa utilizando un número entero o en forma indirecta utilizando una variable entera. También se puede declarar un arreglo colocando los corchetes de apertura y cierre después del tipo de dato y no después del nombre del arreglo. en el cual double notas[ ][ ] . cual va ser la cantidad total de datos que se podrá almacenar en el arreglo. Se declara un arreglo bidimensional llamado notas. parte entera y parte decimal (double). Creación de Arreglos Para crear un arreglo. En ambos casos. TipoDeDato[ ][ ] arreglo . según se muestra a continuación: En pseudocódigo y diagrama de flujo: TipoDeDato[ ] arreglo TipoDeDato[ ][ ] arreglo En Java: TipoDeDato[ ] arreglo . solo parte entera (int). cual se podrá almacenar datos de tipo TEXTO (String). 409 . cual se podrá almacenar datos de tipo NUMERO. tal y como se explicó anteriormente. Las consideraciones tratadas en los temas “Declaración de arreglo” y “Creación de arreglos” son válidas al utilizar este formato. Donde TipoDeDato debe ser un tipo de arreglo o tipo de dato válido y arreglo es el nombre del arreglo. Cuando se crea un arreglo con el operador new. Utilizando este formato se declara y crea el arreglo en forma directa (esto es conocido como “Definición de un arreglo”). Donde TipoDeDato debe ser un tipo de arreglo o tipo de dato válido y arreglo es el nombre del arreglo. TipoDeDato arreglo[ ][ ] = new TipoDeDato [filas][columnas]. Para crear un arreglo unidimensional es necesario especificar solo un índice. existe también una forma directa para declarar y crear arreglos. utilizando el siguiente formato: En Java: TipoDeDato arreglo[ ] = new TipoDeDato [tamaño]. es decir cuantos datos podrá almacenar. CREAR arreglo[filas ][columnas] En Java: arreglo = new TipoDeDato [tamaño] . Pag. 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. se debe indicar el tamaño del arreglo. uno para referirnos al número total de filas y el otro para referirnos al número total de columnas que va a tener el arreglo. 410 . En Java. mientras que para crear un arreglo bidimensional es necesario especificar dos índices. Juan José Flores Cueto. El operador new nos permite crear un arreglo. Ing. arreglo = new TipoDeDato [filas][columnas] . en el cual se podrá almacenar 30 datos notas = new double [numNot][numAlu] . declarado. y que se finalice la ejecución del programa”. Es necesario recordar y tener presente que es responsabilidad directa del programador asegurarse que nunca suceda esto.out. ya que puede ocasionar resultados no deseados. previamente declarado. previamente edades = new int [10] . tal y como se muestra a continuación: EJEMPLOS int total . 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.ESTRUCTURAS DE DATOS – Arreglos. total = Lectura. numNot = 3 . Se crea un arreglo bidimensional numAlu = 10 . En el ejemplo. Ejemplo de creación de arreglos válidos en Java (se asume que los arreglos han sido declarados previamente): EJEMPLO DESCRIPCION Se crea un arreglo unidimensional llamado edades. Se crea un arreglo unidimensional llamado nombres. En el segundo ejemplo se utiliza una variable llamada total de tipo entero para crear el arreglo unidimensional llamado nombres. Esto quiere decir que se puede desbordar el final de un arreglo (se lanza una excepción de tipo ArrayIndexOutOfBoundException). numNot . 411 . en el cual se podrá nombres = new String [total] .leerInt( ) . nombres = new String[total] . almacenar 10 datos de tipo TEXTO (String). de tipo NUMERO (double). no se realiza ninguna clase de comprobación del tamaño de los arreglos en forma automática.print ( “Ingrese el numero total de alumno: ” ). int numAlu. declarado. llamado notas. en el cual se podrá almacenar 10 datos de tipo NUMERO (int). Una consideración importante antes de utilizar un arreglo en Java: “En Java. Pag. System. previamente int total = 10 . También se podría haber declarado y creado los arreglos del ejemplo anterior. tal y como se muestra a continuación. en el cual se podrá almacenar 30 datos de tipo NUMERO. int total = 10 . Ingreso de datos a un Arreglo Después de crear un arreglo. los arreglos numéricos (tipo NUMERO) se inicializan con cero (0). En el tercer ejemplo se crea un arreglo bidimensional llamado notas previamente declarado. numNot = 3 . Ing. los arreglos de caracteres con ‘\0’ y los arreglos de objetos con null. numAlu =10 . Inicialización de Arreglos Cuando se crea un arreglo utilizando el operador new es recomendable. se deberán ingresar datos. los arreglos lógicos (tipo LOGICO) o booleanos se inicializan con false. numNot . Recuerde que tratar de acceder a una Pag. Dichos datos estarán organizados en 3 filas y 10 columnas. inicializar todas las posiciones del mismo. double notas[ ][ ] = new double [numNota[numAlu] . String nombres [ ] = new String [total] . Si no se ingresan datos a todas las posiciones del arreglo deberá asegurarse de inicializar el arreglo o en su defecto de mantener un adecuado control de las posiciones que tienen datos almacenados y aquellas que no. EJEMPLOS int edades [ ] = new int [10] . int numAlu. 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. aunque no necesario. Generalmente. inicialice o no el arreglo. en forma directa. Es necesario que se ingresen datos a todas las posiciones del arreglo. Juan José Flores Cueto. 412 . parte entera y parte decimal (double en Java). 59 } .20. se declara y crea un arreglo unidimensional llamado edades de tipo NUMERO (solo números enteros) con 10 valores.23. ‘C’. También se puede utilizar una forma directa que permite declarar. tal y como se muestra a continuación. produce un error que ocasiona que se interrumpa la ejecución del programa. ‘D’ } .28.35. para esto se encierran los datos que se almacenarán en el arreglo dentro de llaves. Pag. posición del arreglo que no tiene un dato o que no ha sido inicializado. No se ha utilizado el operador new (para crear el arreglo) y tampoco se ha especificado el tamaño con el cual se ha creado el arreglo. se utilizaría la siguiente sentencia: EJEMPLO char letras[ ] = { ‘A’.ESTRUCTURAS DE DATOS – Arreglos.32. 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.15.51. 413 . Para ingresar datos a todas las posiciones de un arreglo generalmente se utiliza la estructura lógica de repetición DESDE (for en Java).42. En el ejemplo anterior. ‘B’. separadas por comas. EJEMPLO int edades[ ] = { 10. crear e ingresar datos a un arreglo unidimensional. Para declarar y crear un arreglo unidimensional llamado letras de tipo TEXTO (de solo una letra) con 4 valores. Procesos que permiten cambiar o modificar el contenido del arreglo. utilizando para ello un proceso de búsqueda de datos. Se pueden dividir en: • Proceso de modificación de datos. • Proceso de ordenación de datos. Pag. Es importante tener en cuenta que antes de modificar un dato se debe verificar que este existe dentro del arreglo. Proceso de Modificación de Datos: Permite modificar uno o más datos de un arreglo. Proceso de Eliminación de Datos: Permite eliminar uno o más datos de un arreglo que se ingresaron a través de un proceso de ingreso de datos. Juan José Flores Cueto. Es importante tener en cuenta que antes de eliminar un dato se debe verificar que este existe dentro 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. Manejo de datos de un Arreglo Una vez que se han ingresado los datos a todas las posiciones del arreglo. utilizando para ello un proceso de búsqueda de datos y previniendo al usuario que si se elimina el dato no podrá ser recuperado posteriormente. • Proceso de búsqueda datos. La ordenación puede ser en forma alfabética o numérica de mayor a menor o viceversa. Ing. el manejo de arreglos se puede agrupar en dos grandes grupos: 1). • Proceso de eliminación de datos. Dicho criterio establece la forma de ordenar los datos de un arreglo. Proceso que permite visualizar o consultar el contenido del arreglo. que se ingresaron a través de un proceso de ingreso de datos. En términos generales. 414 . 2). • Proceso de cálculo basado en datos del arreglo. Se pueden dividir en: • Proceso de visualización de datos. Proceso de Ordenación de Datos: Permite ordenar todos los datos de un arreglo en función de un criterio. Es importante mencionar que para poder visualizar los datos de un arreglo. Si el dato buscado es encontrado. 415 . Proceso de cálculo basado en datos del arreglo: Nos permite realizar diferentes tipos de cálculo con los datos de un arreglo. tales como suma de datos. dichos datos deben haber sido ingresados previamente. etc. Proceso de visualización de Datos: Permite visualizar los datos que contiene un arreglo. indicará la posición del arreglo en donde está almacenado el dato buscado.ESTRUCTURAS DE DATOS – Arreglos. Dependiendo lo que se necesite visualizar se podrá mostrar todos los datos del arreglo o solo una parte de ellos. promedio. se considera que la búsqueda fue exitosa. En este caso. Pag. Proceso de búsqueda datos: Permite buscar uno o más datos dentro de un arreglo. Juan José Flores Cueto. Pag. 416 . Ing. length . } } Es importante mencionar que cuando se ejecute esta clase. Pag.ESTRUCTURAS DE DATOS – Arreglos. for ( int i = 0.parseInt (arg [ i ] ) . Inclusive. Dichos parámetros se pasan al método main ( ) y se almacenan en el arreglo arg. i++ ) { suma += Integer. i < a. Analizando las siguientes sentencias: for ( int i = 0 . DESARROLLO DE SOLUCIONES BÁSICAS UTILIZANDO ARREGLOS Los arreglos pueden ser utilizados como parte de las soluciones a los problemas que se nos plantean. Este atributo se denomina length. public static void main ( String arg[ ] ) { } Arreglo de tipo String denominado “arg” Esto significa que se puede incluir algunos parámetros al momento de ejecutar un proyecto de solución.out.println (suma) . tal y como se muestra a continuación. 417 . main( ) en Java. siempre hemos definido un arreglo como parte de la estructura del método principal. i ++ ) { suma += Integer. } En primer lugar. i < a. usted deberá asegurarse de incluir una lista de números. para que estos puedan ser sumados.parseInt ( arg [ i ] ) . } System. Analizar las siguientes sentencias: Clase Suma /* Clase que nos permite sumar varios números enteros .length . incluidos como parámetros */ package dominioDeLaAplicacion . class Suma { public static void main ( String arg [ ] ) { int suma = 0 . los arreglos en Java poseen un atributo que almacena la cantidad de datos que pueden contener. System. la lista de números se almacena en el arreglo arg de tipo String.leerInt ( ) . i < 10 . 418 .print ( “ El promedio general de notas es ” + promedio ) .print ( “ Ingrese la Nota Final del Alumno ” + ( i + 1 ) ) . suma = suma + nota . utilizamos el método parseInt() de la clase Integer. (Recuerde que una variable solo nos permite almacenar un dato a la vez). Ing. En segundo lugar. for ( int i = 0. double promedio . Pero. Utilizando la sentencia for podemos acceder a cada uno de los datos almacenados en el arreglo arg[]. Pag. Juan José Flores Cueto. Al finalizar la sentencia for se tiene la suma de los números incluidos como parámetros en la variable suma. i ++ ) { System.out. } promedio = suma / 10 . y luego lo sumamos a la variable suma. public class PrgAlumno { public static void main ( String arg [ ] ) { int suma = 0. lo convertimos a un dato tipo NUMERO utilizando Integer. Clase PrgAlumno package dominioDeLaAplicacion . no podemos almacenar a la vez las notas finales de los 10 alumnos.* . import biblioteca. al utilizar solo una variable (notas).out. cuando necesitamos convertir un dato a un número entero. nota = lectura. nota . y calcula el promedio general de notas del salón de clase. En consecuencia. } } Observe que la solución anterior nos permite realizar el cálculo y la visualización del promedio general de notas. A continuación se presenta la codificación en Java de una solución que permite ingresar la nota final de 10 alumnos.parseInt(). Por lo tanto. int numAlu =10 . // Creación del arreglo notas. public class PrgAlumnos { public static void main ( String [ ] args ) { // Declaración de variables y arreglos. 419 . ingresar los datos necesarios al arreglo o arreglos utilizados en la solución. ƒ Crear el arreglo o arreglos con el tamaño necesario para poder almacenar todos los datos. Pag. notas[ ] .* . A partir de este punto. el siguiente paso quedaría definido de la siguiente manera: ƒ Manejar los datos almacenados en el arreglo o arreglos utilizados en la solución con la finalidad de proporcionar la información solicitada. para finalmente formalizar el Método de las 6’D. o en su defecto. ƒ Inicializar el arreglo o arreglos. de tal forma que se incorporen progresivamente los conceptos tratados en este capítulo. A partir de este punto podemos realizar cualquier proceso con los datos almacenados en el arreglo o arreglos definidos en la solución. notas = new double [numAlu] . import biblioteca.ESTRUCTURAS DE DATOS – Arreglos. Clase PrgAlumnos package dominioDeLaAplicacion . El arreglo notas almacenará datos de tipo NUMERO (número entero con parte decimal). Una vez almacenadas las notas finales de los 10 alumnos se calculará y mostrará el promedio de las mismas. En la solución. double sumaNotas=0. Estos tres pasos generalmente se desarrollarán en todas las soluciones. se modificará el programa anterior. Es importante destacar que para trabajar con arreglos se deben seguir los siguientes pasos: ƒ Declarar el arreglo o arreglos que se van ha utilizar en la solución del problema. se utilizará un arreglo unidimensional llamado notas que permitirá almacenar las notas finales de 10 alumnos de un determinado salón de clase. definiendo un nombre adecuado para cada uno de ellos. i=3.print ( “El promedio es : ” + ( sumaNotas / numAlu ) ) .out. es decir en notas[1]. Juan José Flores Cueto. i=6. en el arreglo notas[ ] se podrán almacenar 10 notas finales. para i=0. Esto nos permite crear un arreglo llamado notas[ ] con un tamaño igual a 10. la nota ingresada se almacena en la segunda posición del arreglo notas[ ].out. i=1.leerDouble( ) . se utiliza una sentencia for. i=7. las cuales están ubicadas dentro de la misma sentencia for. for ( int i = 0 .leerDouble( ) . i=4. Es decir.out. // Proceso de ingreso de datos al arreglo notas. i=8. es decir en notas[9]. la nota ingresada se almacena en la primera posición del arreglo notas[ ]. i < numAlu . 420 . y se le asignó un valor igual a 10.print ( “ Ingrese nota : " ) . notas = new double [numAlu] . siendo valores válidos de i. Los datos que se ingresarán serán las notas finales de los 10 alumnos del salón de clase.leerDouble( ) . Dicho arreglo podrá almacenar datos numéricos (parte entera y decimal). almacenando la nota ingresada en la décima posición del arreglo notas[ ]. Pag. Ing. y así sucesivamente hasta cuando i = 9 (la décima y última vez que se ejecuta la sentencia for). Para esto. es decir en notas[0]. i=2. Cada vez que la estructura lógica de repetición for se ejecuta. la variable i aumenta su valor en 1. En tercer lugar. se declara un arreglo unidimensional llamado notas[ ] (vector). i < numAlu . } // Proceso de cálculo del promedio de notas finales. i=5.print ( “ Ingrese nota : ” ) . El uso de la sentencia for tiene como finalidad repetir 10 veces las sentencias que nos permitirán el ingreso de los datos. en primer lugar. i=9). En segundo lugar. Clase PrgAlumnos // Proceso de ingreso de datos al arreglo notas[ ]. notas[i] = Lectura. Observe que para crear el arreglo notas[ ] se utiliza la variable entera numAlu. se ejecuta el proceso de ingreso de datos al arreglo notas[ ]. i++ ) { sumaNotas = sumaNotas + notas[i] . } } En la solución anterior. Cuando i = 1 (la segunda vez que se ejecuta la sentencia for). i++) { System.print ( “ Ingrese nota : " ) . i < numAlu . for ( int i = 0 . Cuando i = 0 (la primera vez que se ejecuta la sentencia for). } La estructura lógica de repetición for permite que se repitan 10 veces las siguientes sentencias: System. se crea el arreglo notas[ ] utilizando la siguiente sentencia: // Creación del arreglo notas. La variable numAlu fue declarada previamente con la sentencia int. for ( int I = 0 . desde 0 hasta 9 (es decir. } System.out. i++) { System. notas[i] = Lectura. notas[i] = Lectura. Para ello. Finalizada la ejecución de la primera sentencia for. 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.ESTRUCTURAS DE DATOS – Arreglos. el arreglo notas[ ] deberá tener almacenadas las notas finales de los 10 alumnos del salón de clase. Finalizada la ejecución de la sentencia for se muestra el promedio de las 10 notas finales. 421 . se ejecuta el proceso de cálculo del promedio de las 10 notas finales. se utiliza una segunda sentencia for exactamente igual a la primera sentencia for. Pag. 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. 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. 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). out. // Proceso de ingreso de datos al arreglo notas[ ]. Ahora. La variable numAlu fue declarada previamente con la sentencia int. System. notas[i] = Lectura. i++ ) { sumaNotas = sumaNotas + notas[i] .print ( “ Ingrese el número de alumnos : ” ) . Pag. 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. i < numAlu .print ( “ Ingrese la nota final del alumno [” + ( i + 1) + “]: ” ) .out. double notas[] = new double [numAlu] . Ing.leerDouble( ) . y se le asignó un valor que fue ingresado por el usuario a través del teclado. i++ ) { System. numAlu = Lectura. 422 . Clase PrgAlumnos package dominioDeLaAplicacion . double sumaNotas = 0 . for ( int i = 0 . i < numAlu .out. } // Proceso de cálculo del promedio de notas finales.print ( “ El promedio es : ” + ( sumaNotas / numAlu ) ) .* . public class PrgAlumnos { public static void main(String[] args) { // Declaración de variables. se declara y crea el arreglo notas[ ] utilizando la siguiente sentencia: // Declaración y creación del arreglo notas. Es decir. Juan José Flores Cueto. en el arreglo notas[ ] se podrán almacenar las notas finales de todos los alumnos de un salón de clase. Observe que para crear el arreglo notas[ ] se utiliza la variable entera numAlu. import biblioteca. // Declaración y creación del arreglo notas. for ( int i = 0 . Esto nos permite crear un arreglo llamado notas[ ] con un tamaño equivalente al valor almacenado en la variable numAlu. } } En la solución anterior. // Determinación del tamaño del arreglo.leerInt( ) . int numAlu . double notas[] = new double [numAlu] . } System. se puede personalizar el mensaje que se le muestra al usuario al momento del ingreso de las notas finales. y así sucesivamente hasta ingresar la nota final del último alumno.leerDouble( ) .ESTRUCTURAS DE DATOS – Arreglos. i < numAlu . 423 . se mostrará el siguiente mensaje: Ingrese la nota final del alumno [1]: La nota final ingresada se almacenará en la primera posición del arreglo notas[ ].print ( “ Ingrese la nota final del alumno [” + ( i + 1) + “]: ” ) . Cuando i = 1 (la segunda vez que se ejecuta la sentencia for). } Utilizando dicha sentencia con la variable i (la cual aumenta su valor en 1 cada vez que se ejecuta la sentencia for).print ( “ Ingrese la nota final del alumno [” + ( i + 1) + “]: ” ) . Otra modificación que vale la pena destacar es la siguiente: System. se mostrará el siguiente mensaje: Ingrese la nota final del alumno [2]: La nota final ingresada se almacenará en la segunda posición del arreglo notas[ ]. Cuando i = 0 (la primera vez que se ejecuta la sentencia for). for ( int i = 0 . notas[i] = Lectura. Esta sentencia esta ubicada dentro de la sentencia for y nos permite el ingreso de datos al arreglo llamado notas[ ]. i++ ) { System. Pag.out. es decir en notas[0]. es decir en notas[1]. // Proceso de ingreso de datos al arreglo notas[ ].out. out. 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.println ( “ El número de alumnos no es valido… Reintente! ” ) .out. import biblioteca.print ( “ Ingrese la nota final del alumno [” + ( i + 1) + “]: ” ) .leerDouble( ) . Se consistenciará el ingreso del número total de alumnos y de la nota final de cada uno de ellos.print ( “ Ingrese el número de alumnos : ” ) . double notas[] = new double [numAlu] .out. i < numAlu . Pag. notas[i] = Lectura. } } Observe el uso de la sentencia do dentro de la sentencia for. int numAlu . } System. if ( notas[i] > 20 || notas[i] < 0 ) { System.print ( “ El promedio es : ” + ( sumaNotas / numAlu ) ) . Ing.out. // Determinación del tamaño del arreglo con consistencia de datos. i++ ) { do { System. if ( numAlu <= 0 ) { System.leerInt( ) . Ahora.out. // Declaración y creación de arreglo. // Proceso de ingreso de datos al arreglo notas[ ] con consistencia de datos. double sumaNotas = 0 . i++ ) { sumaNotas = sumaNotas + notas[i] .println ( “ Nota ingresada no es valida… Reintente! ” ) . Clase PrgAlumnos package dominioDeLaAplicacion . de tal forma que permita consistenciar la entrada de datos.* . Juan José Flores Cueto. i < numAlu . public class PrgAlumnos { public static void main(String[] args) { // Declaración de variables. 424 . } } while ( notas[i] > 20 || notas[i] < 0 ) . se modificará nuevamente la solución anterior. do { System. numAlu = Lectura. } // Proceso de cálculo del promedio de notas finales. for ( int i = 0 . for ( int I = 0 . } } while ( numAlu < 0 ) . Uno de los principales usos de la sentencia do es la consistencia de datos. 425 . Etapa 02 . Pag. se realiza el cálculo del promedio. ‰ Resultado deseado: Mostrar el promedio de las notas finales de los alumnos de un determinado salón de clase.ESTRUCTURAS DE DATOS – Arreglos. Finalmente.Definición de la solución. Desarrollar una solución que permita ingresar y almacenar las notas finales de todos los alumnos de un determinado salón de clase. ‰ Procesamiento: El número de alumnos se ingresa a través del teclado y se almacena en una variable (numAlu). ‰ Datos necesarios: El número de alumnos y las notas finales de cada uno de ellos. Determinar y mostrar el promedio de las notas finales. Después. se almacena el resultado en una variable (prom) y se muestra por pantalla. Luego se procede a ingresar las notas finales de todos los alumnos y se almacenan en el arreglo creado. FORMALIZACIÓN DE LA SOLUCIÓN UTILIZANDO EL MÉTODO DE LAS 6’D Problema 132 Etapa 01 . Con el número de alumnos ingresado se crea un arreglo (notas[ ]). Consistenciar el ingreso de datos.Descripción del problema. se realiza la suma de todas las notas finales y el resultado se almacena en una variable acumulador (sumaNotas). 426 . 1. 2. Definición de Paquetes y desarrollo del Diagrama de Paquetes. Juan José Flores Cueto. Clases Clases dominioDeLaAplicacion biblioteca Pag.Diseño de la lógica. Diagrama de paquetes 3. Ing. Etapa 03 . Nombre del Proyecto: ProyAlumnos. Definición de las Clases. Reintente!” FINSI MIENTRAS ( notas[i] > 20 || notas[i] < 0 ) FINDESDE COMENTARIO “Cálculo del promedio de notas finales” DESDE i = 0 HASTA i = numAlu .. notas[ ].método main ( ) ENTRADA: numAlu.. Diseño de algoritmo para el método principal.1 INCREMENTA 1 HACER LEER notas[i] SI ( notas[i] > 20 || notas[i] < 0 ) ENTONCES ESCRIBIR “Nota no válida. notas[ ] SALIDA: prom INICIO COMENTARIO “Declaración de variables” NUMERO i. Algoritmo PrgAlumnos01 . 4.1 INCREMENTA 1 sumaNotas = sumaNotas + notas[i] FINDESDE prom = sumaNotas / numAlu ESCRIBIR prom FIN Pag. 427 ... prom COMENTARIO “Determinación del tamaño del arreglo” HACER LEER numAlu SI (numAlu <= 0 ) ENTONCES ESCRIBIR “Número de alumnos no válido. sumaNotas = 0. Reintente!” FINSI MIENTRAS (numAlu <= 0 ) COMENTARIO “Creación del arreglo” CREAR notas [numAlu] COMENTARIO “Ingreso de datos al arreglo notas[ ].” DESDE i = 0 HASTA i = numAlu . numAlu.ESTRUCTURAS DE DATOS – Arreglos. 428 . int i. if ( notas[i] > 20 || notas[i] < 0 ) { System. // Declaración y creación del arreglo.out.out. i < numAlu .Desarrollo de la Codificación. i++ ) { do { System. for ( i = 0 . } } while ( numAlu <= 0 ) .out. System. Clase PrgAlumnos01 package dominioDeLaAplicacion . i < numAlu . // Proceso de ingreso de datos al arreglo notas[ ] con consistencia de datos. i++ ) { sumaNotas = sumaNotas + notas[i] . Etapa 04 . double notas[ ] = new double [numAlu] . numAlu = Lectura. notas[i] = Lectura. } prom = sumaNotas / numAlu . import biblioteca.println ( “ El número de alumnos no es válido… Reintente! ” ) .* . for ( i = 0 . Juan José Flores Cueto.leerDouble( ) . } } while ( notas[i] > 20 || notas[i] < 0 ) .println ( “ Nota ingresada no es válida… Reintente! ” ) . } } Pag. double sumaNotas = 0.out. } // Proceso de cálculo del promedio de notas finales.out. if ( numAlu <= 0 ) { System.print ( “ Ingrese el número de alumnos : ” ) . public class PrgAlumnos01 { public static void main(String[] args) { // Declaración de variables.print ( “ Ingrese la nota final del alumno [ ” + ( i + 1) + “]: ” ) .println ( “ El promedio es : ” + prom ) . numAlu . // Determinación del tamaño del arreglo con consistencia de datos. Ing. prom .leerInt( ) . do { System. Etapa 02 . Consistenciar el ingreso de datos. Luego se procede a ingresar las notas de las prácticas del alumno y se almacenan en el arreglo creado. Luego. se determina la nota más baja del alumno y se almacena en una variable (notaMenor).Descripción del problema. se almacena el resultado en una variable (promAlu). ‰ Datos necesarios: El número de prácticas y las notas de las prácticas del alumno.Definición de la solución. Pag. se realiza el cálculo del promedio ((sumaNotas – notaMenor) / (numPra – 1)). se redondea y se muestra por pantalla.ESTRUCTURAS DE DATOS – Arreglos. Finalmente. se realiza la suma de todas las notas de las prácticas y el resultado se almacena en una variable de tipo acumulador (sumaNotas). 429 . Desarrollar una solución que permita ingresar y almacenar las notas de todas las prácticas de un alumno. Problema 133 Etapa 01 . Después. ‰ Procesamiento: El número de prácticas se ingresa a través del teclado y se almacena en una variable (numPra). Determinar el promedio de las prácticas sabiendo que se elimina la práctica con la nota mas baja. Mostrar el promedio redondeado. Con el número de prácticas se crea un arreglo (notas[ ]). ‰ Resultado deseado: Mostrar el promedio redondeado de las notas de las prácticas de un alumno. 1. Nombre del Proyecto: ProyAlumnos. Clases Clases dominioDeLaAplicacion biblioteca Pag. Juan José Flores Cueto. Diagrama de paquetes 3. Ing. 430 .Diseño de la lógica. Definición de las Clases. 2. Etapa 03 . Definición de Paquetes y desarrollo del Diagrama de Paquetes. notaMenor ) / ( numPra . numPra. Diseño de algoritmo para el método principal. Algoritmo PrgAlumnos02 . 4. 431 ..1 INCREMENTA 1 sumaNotas = sumaNotas + notas[i] FINDESDE DESDE i = 0 HASTA i = numPra . notaMenor = 20 NUMERO notas[ ].método main ( ) ENTRADA: numPra. sumaNotas = 0. Reintente!” FINSI MIENTRAS ( notas[i] > 20 || notas[i] < 0 ) FINDESDE COMENTARIO “Cálculo del promedio de notas de las prácticas” DESDE i = 0 HASTA i = numPra .” DESDE i = 0 HASTA i = numPra . promAlu COMENTARIO “Determinación del tamaño del arreglo” HACER LEER numPra SI (numPra <= 0 ) ENTONCES ESCRIBIR “Número de prácticas no válido… Reintente!” FINSI MIENTRAS (numPra <= 0 ) COMENTARIO “Creación del arreglo” CREAR notas [numPra] COMENTARIO “Ingreso de datos al arreglo notas[ ].1 INCREMENTA 1 SI ( notaMenor > notas[i] ) ENTONCES notaMenor = notas[i] FINSI FINDESDE promAlu = ( sumaNotas . notas[ ] SALIDA: promAlu INICIO COMENTARIO “Declaración de variables” NUMERO i.1 INCREMENTA 1 HACER LEER notas[i] SI ( notas[i] > 20 || notas[i] < 0 ) ENTONCES ESCRIBIR “Nota no válida..ESTRUCTURAS DE DATOS – Arreglos.1 ) promAlu = promAlu REDONDEA 0 ESCRIBIR promAlu FIN Pag. i < numPra . numPra = Lectura. promAlu .round (promAlu) .out. i++ ) { do { System.println ( “ Nota ingresada no es válida… Reintente! ” ) . public class PrgAlumnos02 { public static void main(String[] args) { // Declaración de variables. 432 . } } Pag. double sumaNotas = 0. promAlu = Math.* . System.leerInt( ) . i < numPra .Desarrollo de la Codificación.print ( “ Ingrese la nota de la práctica [ ” + ( i + 1) + “]: ” ) .print ( “ Ingrese el número de prácticas del alumno : ” ) . Juan José Flores Cueto. } for ( i = 0 .println ( “ El promedio es : ” + promAlu ) .out.out. if ( notas[i] > 20 || notas[i] < 0 ) { System. numPra . i < numPra . } } while ( notas[i] > 20 || notas[i] < 0 ) . // Declaración y creación del arreglo. // Ingreso de datos al arreglo notas[ ] con consistencia de datos. i++ ) { if ( notaMenor > notas [i] ) notaMenor = notas[i] . Ing. for ( i = 0 . notas[i] = Lectura. i++ ) { sumaNotas = sumaNotas + notas[i] . int i. } } while ( numPra <= 0 ) . } promAlu = sumaNotas / numAlu . // Determinación del tamaño del arreglo con consistencia de datos.leerDouble( ) . do { System. notaMenor = 20. import biblioteca. double notas[ ] = new double [numPra] . Clase PrgAlumnos02 package dominioDeLaAplicacion .println ( “ El número de prácticas no es válido… Reintente! ” ) . if ( numPra <= 0 ) { System. Etapa 04 .out. } // Proceso de cálculo del promedio de notas de las prácticas. for ( i = 0 .out. ‰ Procesamiento: El número de alumnos se ingresa a través del teclado y se almacena en una variable (numAlu).Descripción del problema. Luego. Con el número de alumnos se crea un arreglo (notas[ ][ ]).ESTRUCTURAS DE DATOS – Arreglos. Mostrar el promedio redondeado. Pag. se realiza el cálculo de su promedio ((sumaNotas + notaMayor) / 4). Luego se procede a ingresar las notas de las tres prácticas de cada alumno y se almacenan en el arreglo creado. se redondea y se muestra por pantalla.Definición de la solución. Problema 134 Etapa 01 . ‰ Resultado deseado: Mostrar el promedio redondeado de las notas de las tres prácticas de cada alumno. por cada alumno. ‰ Datos necesarios: El número de alumnos y las notas de las tres prácticas de cada alumno. Etapa 02 . 433 . se almacena el resultado en una variable (promAlu). Consistenciar el ingreso de datos. se realiza la suma de las notas de sus tres prácticas y el resultado se almacena en una variable acumulador (sumaNotas). Después. se determina su nota más alta y se almacena en una variable (notaMayor). 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. Finalmente. 1. 2.Diseño de la lógica. Ing. Definición de las Clases. 434 . Clases Clases dominioDeLaAplicacion biblioteca Pag. Etapa 03 . Nombre del Proyecto: ProyAlumnos. Juan José Flores Cueto. Diagrama de paquetes 3. Definición de Paquetes y desarrollo del Diagrama de Paquetes. .ESTRUCTURAS DE DATOS – Arreglos. j. 4. Diseño de algoritmo para el método principal. notaMayor = 0 NUMERO notas[ ][ ]. notas[ ][ ] SALIDA: promAlu INICIO COMENTARIO “Declaración de variables” NUMERO i.. numAlu.1 INCREMENTA 1 notaMayor = notas[i][0] MAXIMO notas[i][1] notaMayor = notas[i][2] MAXIMO notaMayor sumaNotas = notas[i][0] + notas[i][1] + notas[i][2] promAlu = ( sumaNotas + notaMayor ) / 4 promAlu = promAlu REDONDEA 0 ESCRIBIR promAlu FINDESDE FIN Pag. Algoritmo PrgAlumnos03 .método main ( ) ENTRADA: numAlu. sumaNotas = 0. 435 . Reintente!” FINSI MIENTRAS ( notas[i][j] > 20 || notas[i][j] < 0 ) FINDESDE FINDESDE COMENTARIO “Cálculo del promedio de notas por alumno” DESDE i = 0 HASTA i = numAlu . promAlu COMENTARIO “Determinación del tamaño del arreglo” HACER LEER numAlu SI (numAlu <= 0 ) ENTONCES ESCRIBIR “Número de alumnos no válido… Reintente!” FINSI MIENTRAS (numAlu <= 0 ) COMENTARIO “Creación del arreglo” CREAR notas [numAlu][3] COMENTARIO “Ingreso de datos al arreglo notas[ ][ ]” DESDE i = 0 HASTA i = numAlu .1 INCREMENTA 1 DESDE j = 0 HASTA j = 2 INCREMENTA 1 HACER LEER notas[i][j] SI ( notas[i][j] > 20 || notas[i][j] < 0 ) ENTONCES ESCRIBIR “Nota no válida. } } while ( notas[i][j] > 20 || notas[i][j] < 0 ) . System. promAlu = ( sumaNotas + notaMayor ) / 4 .print ( “ Ingrese el número de alumnos : ” ) . i++ ) { System.out.* . promAlu . numAlu = Lectura.max (notas[i][2]. i < numAlu .leerDouble( ) . // Determinación del tamaño del arreglo con consistencia de datos. for ( i = 0 . 436 . Etapa 04 . public class PrgAlumnos03 { public static void main(String[] args) { // Declaración de variables. j.out. notaMayor ) . int i. notas[i][1] ) . promAlu = Math. notaMayor = 0. if ( numAlu <= 0 ) { System.print ( “ Ingrese la nota de la práctica [ ” + ( j + 1) + “]: ” ) . } } while ( numAlu <= 0 ) . Ing.out.leerInt( ) . double notas[ ][ ] = new double [numAlu][3] .out. // Declaración y creación del arreglo.Desarrollo de la Codificación. double sumaNotas = 0.max (notas[i][0]. numAlu . } } } Pag. for ( i = 0 .round (promAlu) . Clase PrgAlumnos03 package dominioDeLaAplicacion . j++ ) { do { System. i < numAlu .out.println ( “ Alumno [ ” + ( i + 1) + “ ]: ” ) .println ( “ El promedio del alumno [ ” + ( i + 1 ) + “ ] es: ” + promAlu ) .println ( “ El número de alumnos no es válido… Reintente! ” ) . i++ ) { notaMayor = Math. for { i = 0 .println ( “ Nota ingresada no es válida… Reintente! ” ) . } } // Cálculo del promedio de notas por alumno. notas[i][j] = Lectura. do { System. import biblioteca. // Ingreso de datos al arreglo notas[ ][ ] con consistencia de datos. j < 3 . notaMayor = Math. Juan José Flores Cueto. sumaNotas = notas[i][0] + notas[i][1] + notas[i][2] . if ( notas[i][j] > 20 || notas[i][j] < 0 ) { System.out. el número de prácticas y las notas de las prácticas de cada alumno. se redondea y se muestra por pantalla. También se determina su nota mas baja y se almacena en una variable (notaMenor). se realiza la suma de las notas de las prácticas y el resultado se almacenan en una variable de tipo acumulador (sumaNotas). ‰ Resultado deseado: Mostrar el promedio redondeado a dos decimales de las notas de las prácticas de cada alumno y el promedio simple de todas las notas de las prácticas de los alumnos. Mostrar el promedio redondeado a dos decimales. Con los datos ingresados se crea un arreglo (notas[ ][ ]). Consistenciar el ingreso de datos. Etapa 02 . Luego. se determina su nota más alta y se almacena en una variable (notaMayor). Pag. Finalmente. ‰ Procesamiento: El número de alumnos y el número de prácticas se ingresa a través del teclado y se almacenan en variables (numAlu y numPra respectivamente). se almacena el resultado en una variable (promAlu).ESTRUCTURAS DE DATOS – Arreglos.Definición de la solución. determinar y mostrar el promedio simple de todas las notas de las prácticas de los alumnos del salón de clase. Después. 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. 437 .Descripción del problema. ‰ Datos necesarios: El número de alumnos. se realiza el cálculo de su promedio ((sumaNotas + notaMayor . Finalmente. 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. Luego se procede a ingresar las notas de las prácticas de cada alumno y se almacenan en el arreglo creado. Problema 135 Etapa 01 .notaMenor) / numPra). por cada alumno. Adicionalmente. Diagrama de paquetes 3. Etapa 03 .Diseño de la lógica. Juan José Flores Cueto. Se determina el promedio simple. Definición de las Clases. 438 . Nombre del Proyecto: ProyAlumnos. 2. se almacena el resultado en una variable (prom) y se muestra por pantalla. Clases Clases dominioDeLaAplicacion biblioteca Pag. se realiza la suma de las notas de las prácticas de todos los alumnos del salón de clase y el resultado se almacena nuevamente en una variable de tipo acumulador (sumaNotas). 1. Ing. Definición de Paquetes y desarrollo del Diagrama de Paquetes. . notaMayor = 0 NUMERO notaMenor = 20.1 INCREMENTA 1 DESDE j = 0 HASTA j = numPra .1 INCREMENTA 1 HACER LEER notas[i][j] SI ( notas[i][j] > 20 || notas[i][j] < 0 ) ENTONCES ESCRIBIR “Nota no válida.. numAlu. 439 . Algoritmo PrgAlumnos04 . Diseño de algoritmo para el método principal. numPra..ESTRUCTURAS DE DATOS – Arreglos. 4. j. Reintente!” FINSI MIENTRAS ( notas[i][j] > 20 || notas[i][j] < 0 ) FINDESDE FINDESDE Pag. prom COMENTARIO “Determinación del tamaño del arreglo” HACER LEER numAlu SI (numAlu <= 0 ) ENTONCES ESCRIBIR “Número de alumnos no válido. Reintente!” FINSI MIENTRAS (numAlu <= 0 ) HACER LEER numPra SI (numPra <= 0 ) ENTONCES ESCRIBIR “Número de prácticas no válido. numPra. notas[ ][ ] SALIDA: promAlu.método main ( ) ENTRADA: numAlu. notas[ ][ ]. prom INICIO COMENTARIO “Declaración de variables” NUMERO i.. sumaNotas = 0. promAlu. Reintente!” FINSI MIENTRAS (numPra < 0 ) COMENTARIO “Creación del arreglo” CREAR notas [numAlu][numPra] COMENTARIO “Ingreso de datos al arreglo notas[ ][ ]” DESDE i = 0 HASTA i = numAlu . Continúa… 4.1 INCREMENTA 1 notaMayor = notaMayor MAXIMO notas[i][j] notaMenor = notaMenor MAXIMO notas[i][j] sumaNotas = sumaNotas + notas[i][j] FINDESDE promAlu = (sumaNotas+notaMayor-notaMenor) / numPra promAlu = promAlu REDONDEA 2 ESCRIBIR promAlu FINDESDE COMENTARIO “Cálculo del promedio simple de todas las notas” sumaNotas = 0 DESDE i = 0 HASTA i = numAlu . Diseño de algoritmo para el método principal.1 INCREMENTA 1 notaMayor = 0 notaMenor = 20 sumaNotas = 0 DESDE j = 0 HASTA j = numPra . Juan José Flores Cueto.1 INCREMENTA 1 sumaNotas = sumaNotas + notas[i][j] FINDESDE FINDESDE prom = sumaNotas / ( numAlu * numPra ) prom = prom REDONDEA 2 ESCRIBIR prom FIN Pag. 440 .1 INCREMENTA 1 DESDE j = 0 HASTA j = numPra . Ing. Algoritmo PrgAlumnos04 – método main ( ) COMENTARIO “Cálculo del promedio de notas por alumno” DESDE i = 0 HASTA i = numAlu . i++ ) { System. } } while ( numPra < 0 ) .print ( “ Ingrese la nota de la práctica [ ” + ( j + 1) + “]: ” ) . do { System.out. numPra . double notas[ ][ ] = new double [numAlu][numPra] . i < numAlu . Etapa 04 . do { System. if ( numAlu <= 0 ) { System.leerDouble( ) . numPra = Lectura. prom .leerInt( ) . if ( notas[i][j] > 20 || notas[i][j] < 0 ) { System. notas[i][j] = Lectura. } } while ( numAlu <= 0 ) .out. import biblioteca. numAlu = Lectura. for { i = 0 . public class PrgAlumnos04 { public static void main(String[] args) { // Declaración de variables. j < numPra .println ( “ Nota ingresada no es válida… Reintente! ” ) .Desarrollo de la Codificación.print ( “ Ingrese el número de alumnos : ” ) . if ( numPra <= 0 ) { System. promAlu. j++ ) { do { System.out. 441 .* . Clase PrgAlumnos04 package dominioDeLaAplicacion .leerInt( ) .out.out.print ( “ Ingrese el número de prácticas : ” ) . } } Pag. notaMenor = 20. j.out.out. double sumaNotas = 0.println ( “ El número de alumnos no es válido… Reintente! ” ) . for ( i = 0 . int i.println ( “ Alumno [ ” + ( i + 1) + “ ]: ” ) . // Ingreso de datos al arreglo notas[ ][ ] con consistencia de datos. notaMayor = 0. // Declaración y creación del arreglo. } } while ( notas[i][j] > 20 || notas[i][j] < 0 ) .println ( “ El número de prácticas no es válido… Reintente! ” ) . /// Determinación del tamaño del arreglo con consistencia de datos.ESTRUCTURAS DE DATOS – Arreglos. numAlu. notaMenor) / ( numAlu * numPra ) . i < numAlu . sumaNotas = 0 .max (notas[i][j]. } // Cálculo del promedio simple de todas las notas. i++ ) { notaMayor = 0 . 442 . j++ ) { notaMayor = Math.Desarrollo de la Codificación. notaMayor) .round (prom * 100) ) / 100.round (prom * 100) ) / 100.notaMenor) / numPra . j < numPra .out. Continúa… Etapa 04 . Juan José Flores Cueto. for { i = 0 . i++ ) { for { i = 0 .0 . } } Pag. i < numAlu . System.println ( “ El promedio del alumno [ ” + ( i + 1 ) + “ ] es: ” + promAlu ) . System. sumaNotas = 0 .println ( “ El promedio simple de las notas es : ” + prom ) . j++ ) { sumaNotas = sumaNotas + notas[i][j] . notaMenor ) .max (notas[i][j]. for ( i = 0 . } } prom = ( sumaNotas + notaMayor . for ( i = 0 . Clase PrgAlumnos04 // Cálculo del promedio de notas por alumno. promAlu = ( Math. j < numPra . notaMenor = 20 . Ing. notaMenor = Math. sumaNotas = sumaNotas + notas[i][j] .0 . prom = ( Math.out. } promAlu = ( sumaNotas + notaMayor . Determinar el promedio de cada alumno sabiendo que se duplica la nota del examen final. Pag. calcular y mostrar el promedio obtenido por los alumnos en el examen final. Finalmente. promedio de trabajos y examen final de cada alumno. ‰ Datos necesarios: El número de alumnos y las notas del examen parcial. se determina su promedio ((sumaNotas notaMenor) / 4). promedio de trabajos y examen final (multiplicado por 2). Consistenciar el ingreso de los datos. Mostrar el promedio redondeado. Después. se redondea y se muestra por pantalla. promedio de trabajos y examen final de todos los alumnos de un salón de clase. Con el número de alumnos se crea un arreglo (notas[ ][ ]). 443 . promedio de trabajos y examen final de cada alumno y se almacenan en el arreglo creado. Etapa 02 . Desarrollar una solución que permita ingresar y almacenar las notas del examen parcial. Luego. ‰ Procesamiento: El número de alumnos se ingresa a través del teclado y se almacena en una variable (numAlu). el promedio obtenido por los alumnos en el examen final y el porcentaje de alumnos aprobados y desaprobados. por cada alumno. Adicionalmente. se realiza la suma de la nota del examen parcial. Se determina el promedio simple. se almacena el resultado en una variable (promAlu). También. Luego se procede a ingresar las notas del examen parcial. determinar y mostrar el porcentaje de alumnos aprobados y el porcentaje de alumnos desaprobados. Problema 136 Etapa 01 . se realiza la suma de las notas del examen final de todos los alumnos del salón de clase y el resultado se almacena nuevamente en una variable acumulador (sumaEF).Descripción del problema.ESTRUCTURAS DE DATOS – Arreglos. y el resultado se almacena en una variable de tipo acumulador (sumaNotas).Definición de la solución. ‰ Resultado deseado: Mostrar el promedio redondeado de las notas de cada alumno. Diagrama de paquetes 3. se redondea y se muestra por pantalla. Finalmente. Clases Clases dominioDeLaAplicacion biblioteca Pag. Ing. Definición de Paquetes y desarrollo del Diagrama de Paquetes. Definición de las Clases. Juan José Flores Cueto. Etapa 03 . 444 . 1. se almacena el resultado en una variable (promEF). y se muestran por pantalla. se almacena el resultado en variables (porceAprob y porceDesaprob respectivamente).Diseño de la lógica. luego se realiza el calculo del porcentaje de alumno aprobados y desaprobados. se realiza nuevamente el cálculo del promedio de notas de cada alumno (promAlu) y se determina la cantidad de alumnos aprobados y la cantidades de desaprobados. Nombre del Proyecto: ProyAlumnos. 2. almacenando los resultados en variables (aprobados y desaprobados respectivamente). porceDesaprob NUMERO aprobados = 0. porceDesaprob INICIO COMENTARIO “Declaración de variables” NUMERO i. Reintente!” FINSI MIENTRAS ( notas[1][i] > 20 || notas[1][i] < 0 ) Pag.ESTRUCTURAS DE DATOS – Arreglos. 445 .método main ( ) ENTRADA: numAlu. numAlu.. Algoritmo PrgAlumnos05.1 INCREMENTA 1 HACER COMENTARIO “Examen Parcial” LEER notas[0][i] SI ( notas[0][i] > 20 || notas[0][i] < 0 ) ENTONCES ESCRIBIR “Nota no válida. sumaNotas = 0. sumaEF = 0 NUMERO notas[ ][ ]. desaprobados = 0. Reintente!” FINSI MIENTRAS ( notas[0][i] > 20 || notas[0][i] < 0 ) HACER COMENTARIO “Promedio de trabajos” LEER notas[1][i] SI ( notas[1][i] > 20 || notas[1][i] < 0 ) ENTONCES ESCRIBIR “Nota no válida. porceAprob COMENTARIO “Determinación del tamaño del arreglo” HACER LEER numAlu SI (numAlu <= 0 ) ENTONCES ESCRIBIR “Número de alumnos no válido… Reintente!” FINSI MIENTRAS (numAlu <= 0 ) COMENTARIO “Creación del arreglo” CREAR notas [3][numAlu] COMENTARIO “Ingreso de datos al arreglo notas[ ][ ]” DESDE i = 0 HASTA i = numAlu . porceAprob. notas[ ][ ] SALIDA: promAlu. 4. promEF. Diseño de algoritmo para el método principal... promAlu. promEF.. método main ( ) HACER COMENTARIO “Examen Final” LEER notas[2][i] SI ( notas[2][i] > 20 || notas[2][i] < 0 ) ENTONCES ESCRIBIR “Nota no válida. Continúa… 4. 446 .1 INCREMENTA 1 sumaEF = sumaEF + notas[2][i] FINDESDE promEF = sumaEF / numAlu promEF = promEF REDONDEA 2 ESCRIBIR promEF COMENTARIO “Cálculo de alumnos aprobados y desaprobados” DESDE i = 0 HASTA i = numAlu .1 INCREMENTA 1 sumaNotas = notas[0][i] + notas[1][i] + notas[2][i] * 2 promAlu = sumaNotas / 4 promAlu = promAlu REDONDEA 0 SI ( promAlu < 11 ) ENTONCES desaprobados = desaprobados + 1 SINO Aprobados = aprobados + 1 FINSI FINDESDE porceAprob = ( aprobados * 100 ) / numAlu porceAprob = porceAprob REDONDEA 2 porceDesaprob = 100 . Algoritmo PrgAlumnos05..1 INCREMENTA 1 sumaNotas = notas[0][i] + notas[1][i] + notas[2][i] * 2 promAlu = sumaNotas / 4 promAlu = promAlu REDONDEA 0 ESCRIBIR promAlu FINDESDE COMENTARIO “Cálculo del promedio simple de examen final” DESDE i = 0 HASTA i = numAlu . Ing. Diseño de algoritmo para el método principal. Reintente!” FINSI MIENTRAS ( notas[2][i] > 20 || notas[2][i] < 0 ) FINDESDE COMENTARIO “Cálculo del promedio de notas por alumno” DESDE i = 0 HASTA i = numAlu ..porceAprob ESCRIBIR porceAprob + “ % ” ESCRIBIR porceDesaprob + “ % ” FIN Pag. Juan José Flores Cueto. out. do { System. if ( notas[0][i] > 20 || notas[0][i] < 0 ) { System. porceAprob.ESTRUCTURAS DE DATOS – Arreglos.println ( “ El número de alumnos no es válido… Reintente! ” ) .println ( “ Alumno [ ” + ( i + 1) + “ ]: ” ) . i++ ) { System.out. for ( i = 0 .out.println ( “ Nota ingresada no es válida… Reintente! ” ) . i < numAlu .* . } } while ( notas[0][i] > 20 || notas[0][i] < 0 ) . double notas[ ][ ] = new double [3][numAlu] . import biblioteca. // Determinación del tamaño del arreglo con consistencia de datos.out.leerDouble( ) .print ( “ Ingrese la nota del examen final : ” ) . 447 . if ( notas[2][i] > 20 || notas[2][i] < 0 ) { System. public class PrgAlumnos05 { public static void main(String[] args) { // Declaración de variables.print ( “ Ingrese el número de alumnos : ” ) .leerInt( ) . // Ingreso de datos al arreglo notas[ ][ ] con consistencia de datos. promAlu. notas[0][i] = Lectura.out. sumaEF = 0. } Pag.out. } } while ( numAlu <= 0 ) . notas[2][i] = Lectura.out. Etapa 04 . notas[1][i] = Lectura. do { System. do { System. // Declaración y creación del arreglo. aprobados = 0. } } while ( notas[1][i] > 20 || notas[1][i] < 0 ) . desaprobados = 0 . } } while ( notas[2][i] > 20 || notas[2][i] < 0 ) . numAlu. if ( notas[1][i] > 20 || notas[1][i] < 0 ) { System.println ( “ Nota ingresada no es válida… Reintente! ” ) .print ( “ Ingrese la nota del examen parcial : ” ) .print ( “ Ingrese la nota promedio de trabajos : ” ) . double sumaNotas = 0. porceDesaprob .Desarrollo de la Codificación. int i.leerDouble( ) .out. do { System. numAlu = Lectura.println ( “ Nota ingresada no es válida… Reintente! ” ) .out.leerDouble( ) . Clase PrgAlumnos05 package dominioDeLaAplicacion . promEF. if ( numAlu <= 0 ) { System. promAlu = Math.round (promAlu) . // Cálculo de alumnos aprobados y desaprobados. } else { aprobados ++ . i++ ) { sumaNotas = notas[0][i] + notas[1][i] + notas[2][i] * 2 . } // Cálculo del promedio simple del examen final. } promEF = sumaEF / numAlu . promAlu = Math. Juan José Flores Cueto. porceDesaprob = 100 – porceAprob .println ( “ El promedio del alumno [ ” + ( i + 1 ) + “ ] es: ” + promAlu ) .round (promEF * 100) ) / 100. promEF = ( Math. Ing.round (promAlu) .0 .println ( “ El porcentaje de alumnos aprobados es : ” + porceAprob + “ % ” ) .out.out. System. Clase PrgAlumnos05 // Cálculo del promedio de notas por alumno. i < numAlu . for ( i = 0 .println ( “ El promedio de las notas del examen final es : ” + promEF ) . System. System. for ( i = 0 .out.Desarrollo de la Codificación.0 . i < numAlu . for ( i = 0 . if ( promAlu < 11 ) { desaprobados ++ . System. i++ ) { sumaNotas = notas[0][i] + notas[1][i] + notas[2][i] * 2 .print ( “ El porcentaje de alumnos desaprobados es : ” ) . 448 .out. i < numAlu .round (porceAprob * 100) ) / 100. porceAprob = ( Math. promAlu = sumaNotas / 4 . System.println ( porceDesaprob + “ % ” ) . } } porceAprob = ( aprobados * 100 ) / numAlu .out. } } Pag. promAlu = sumaNotas / 4 . Continúa… Etapa 04 . i++ ) { sumaEF = sumaEF + notas[2][i] . de acuerdo a la siguiente tabla.Descripción del problema. en base a su sueldo se determina su aumento de sueldo. Consistenciar los datos ingresados. Después. Problema 137 Etapa 01 .410. se redondea y se muestra por pantalla. Pag. ‰ Datos necesarios: El número de trabajadores de la empresa y el sueldo de cada uno de ellos.ESTRUCTURAS DE DATOS – Arreglos.00 nuevos soles. Condición Aumento sueldo < 410 20 % sueldo >= 410 y sueldo <= 1600 10 % sueldo > 1600 05 % Etapa 02 . Luego se procede a ingresar los sueldos de cada trabajador y se almacenan en el arreglo creado. por cada trabajador.Definición de la solución. El aumento se almacena en una variable (aumento).600.1. Calcular y mostrar el aumento de sueldo de cada uno de los trabajadores (redondeado a dos decimales). Si el trabajador tiene un sueldo menor a S/. ‰ Resultado deseado: Mostrar el aumento de sueldo de cada uno de los trabajadores de una empresa. Con el número de trabajadores se crea un arreglo (sueldos[ ]). Si el trabajador tiene un sueldo mayor a S/. se le aumenta el 5% de su sueldo y en otros casos el aumento es del 10% de su sueldo. 449 .00 nuevos soles se le aumenta el 20% de su sueldo. Desarrollar una solución que permita ingresar y almacenar el sueldo de todos los trabajadores de una empresa. ‰ Procesamiento: El número de trabajadores se ingresa a través del teclado y se almacena en una variable (numTrab). 1.Diseño de la lógica. 2. Definición de Paquetes y desarrollo del Diagrama de Paquetes. Juan José Flores Cueto. Nombre del Proyecto: ProyTrabajadores. Diagrama de paquetes 3. Ing. 450 . Etapa 03 . Clases Clases dominioDeLaAplicacion biblioteca Pag. Definición de las Clases. 1 INCREMENTA 1 SI ( sueldos[i] < 410 ) ENTONCES aumento = sueldos[i] * 0..ESTRUCTURAS DE DATOS – Arreglos. Diseño de algoritmo para el método principal. numTrab.2 SINO SI ( sueldos[i] > 1600 ) aumento = sueldos[i] * 0. 4.1 INCREMENTA 1 HACER LEER sueldos[i] SI ( sueldos[i] <= 0 ) ENTONCES ESCRIBIR “Sueldo ingresado no es válido.05 SINO aumento = sueldos[i] * 0. aumento = 0 COMENTARIO “Determinación del tamaño del arreglo” HACER LEER numTrab SI (numTrab <= 0 ) ENTONCES ESCRIBIR “Número de trabajadores no válido… ” FINSI MIENTRAS (numTrab <= 0 ) COMENTARIO “Creación del arreglo” CREAR sueldos [numTrab] COMENTARIO “Ingreso de datos al arreglo sueldos[ ]” DESDE i = 0 HASTA i = numTrab .10 FINSI FINSI aumento = aumento REDONDEA 2 ESCRIBIR aumento FINDESDE FIN Pag. sueldos[ ] SALIDA: aumento INICIO COMENTARIO “Declaración de variables” NUMERO i.. 451 . Algoritmo PrgTrabajadores01 . ” FINSI MIENTRAS ( sueldos[i] <= 0 ) FINDESDE COMENTARIO “Cálculo del aumento de sueldo por trabajador” DESDE i = 0 HASTA i = numTrab . sueldos[ ].método main ( ) ENTRADA: numTrab. } } while ( sueldos[i] <= 0 ) .println ( “ Sueldo ingresado no es válido… Reintente! ” ) . } } aumento = ( Math. Ing. sueldos[i] = Lectura.out.10 . } else { aumento = sueldos[i] * 0. // Determinación del tamaño del arreglo con consistencia de datos. numTrab . Etapa 04 . public class PrgTrabajadores01 { public static void main(String[] args) { // Declaración de variables. numTrab = Lectura.out. for ( i = 0 .round (aumento * 100) ) / 100.out.print ( “ Ingrese el sueldo del trabajador [ ” + ( i + 1) + “ ]: ” ) . double aumento = 0 .out. if ( sueldos[i] <= 0 ) { System.print ( “ Ingrese el número de trabajadores de la empresa : ” ) . do { System. } } } Pag. } // Cálculo del aumento de sueldo por trabajador. } } while ( numTrab <= 0 ) . double sueldos[ ] = new double [numTrab] . } else { if ( sueldos[i] > 1600 ) { aumento = sueldos[i] * 0. Clase PrgTrabajadores01 package dominioDeLaAplicacion .2 . for ( i = 0 .println ( “ El número de trabajadores no es válido… Reintente! ” ) .0 . i < numTrab . import biblioteca. i < numTrab .leerDouble( ) . // Ingreso de datos al arreglo sueldos[ ] con consistencia de datos. System.leerInt( ) .println ( “ Aumento del trabajador [ ” + ( i + 1) + “ ] es : ” + aumento ) . int i.Desarrollo de la Codificación.05 . // Declaración y creación del arreglo. i++ ) { if ( sueldos[i] < 410 ) { aumento = sueldos[i] * 0. 452 . Juan José Flores Cueto. i++ ) { do { System.* .out. if ( numTrab <= 0 ) { System. Luego. Mostrar el sueldo neto a cobrar por cada trabajador redondeado a dos decimales. 453 . en base a su sueldo se determina su descuento o su aumento. se le aumenta el 10% de su sueldo por concepto de refrigerio y movilidad. A todos los empleados cuyo sueldo sea mayor a S/. y se almacena en una variable (aumento). Etapa 02 . Consistenciar los datos ingresados. ‰ Resultado deseado: Mostrar el sueldo neto a cobrar por cada trabajador de la empresa. por cada trabajador. Si el trabajador tiene un sueldo mayor a S/. se redondea y se muestra por pantalla. Pag.1600.00 nuevos soles. Luego se procede a ingresar los sueldos de cada trabajador y se almacenan en el arreglo creado.600.1. Problema 138 Etapa 01 . Después. ‰ Datos necesarios: El número de trabajadores de la empresa y el sueldo de cada uno de ellos. se determina el sueldo neto ((sueldo – descuento + aumento).00 nuevos soles se le descontará el 15% de su sueldo por impuestos y se almacena en una variable (descuento).00 nuevos soles se le deberá descontar 15% por impuestos y a todos los trabajadores cuyo sueldo sea menor a S/.00 nuevos soles se le deberá aumentar el 10% por concepto de refrigerio y movilidad.Descripción del problema.ESTRUCTURAS DE DATOS – Arreglos.Definición de la solución. se almacena el resultado en una variable (sueldoNeto). ‰ Procesamiento: El número de trabajadores se ingresa a través del teclado y se almacena en una variable (numTrab). Desarrollar una solución que permita ingresar y almacenar el sueldo de todos los trabajadores de una empresa.1000. Si el trabajador tiene un sueldo menor a S/. Con el número de trabajadores se crea un arreglo (sueldos[ ]).1000. Definición de Paquetes y desarrollo del Diagrama de Paquetes. Definición de las Clases.Diseño de la lógica. 454 . 2. Diagrama de paquetes 3. 1. Nombre del Proyecto: ProyTrabajadores. Etapa 03 . Clases Clases dominioDeLaAplicacion biblioteca Pag. Ing. Juan José Flores Cueto. 15 FINSI SI ( sueldos[i] < 1000 ) aumento = sueldos[i] * 0. aumento = 0 NUMERO sueldoNeto COMENTARIO “Determinación del tamaño del arreglo” HACER LEER numTrab SI (numTrab <= 0 ) ENTONCES ESCRIBIR “Número de trabajadores no válido… ” FINSI MIENTRAS (numTrab <= 0 ) COMENTARIO “Creación del arreglo” CREAR sueldos [numTrab] COMENTARIO “Ingreso de datos al arreglo sueldos[ ]” DESDE i = 0 HASTA i = numTrab . 455 .1 INCREMENTA 1 HACER LEER sueldos[i] SI ( sueldos[i] <= 0 ) ENTONCES ESCRIBIR “Sueldo ingresado no es válido. numTrab. sueldos[ ] SALIDA: sueldoNeto INICIO COMENTARIO “Declaración de variables” NUMERO i.ESTRUCTURAS DE DATOS – Arreglos. Algoritmo PrgTrabajadores02 . sueldos[ ].método main ( ) ENTRADA: numTrab.. Diseño de algoritmo para el método principal.1 INCREMENTA 1 descuento = 0 aumento = 0 SI ( sueldos[i] > 1600 ) ENTONCES descuento = sueldos[i] * 0. 4. ” FINSI MIENTRAS ( sueldos[i] <= 0 ) FINDESDE COMENTARIO “Cálculo del sueldo neto de cada trabajador” DESDE i = 0 HASTA i = numTrab .. descuento = 0.10 FINSI sueldoNeto = sueldos[i] – descuento + aumento sueldoNeto = sueldoNeto REDONDEA 2 ESCRIBIR sueldoNeto FINDESDE FIN Pag. i < numTrab .leerDouble( ) . } } while ( sueldos[i] <= 0 ) .round (sueldoNeto * 100) ) / 100.println ( sueldoNeto ) . if ( sueldos[i] < 1000 ) aumento = sueldos[i] * 0. public class PrgTrabajadores02 { public static void main(String[] args) { // Declaración de variables. // Determinación del tamaño del arreglo con consistencia de datos. double sueldos[ ] = new double [numTrab] . } // Cálculo del sueldo neto de cada trabjador. sueldoNeto = ( Math. Etapa 04 . import biblioteca.leerInt( ) . System. i++ ) { do { System. do { System. i++ ) { descuento = 0 .println ( “ El número de trabajadores no es válido… Reintente! ” ) .0 . if ( numTrab <= 0 ) { System. // Ingreso de datos al arreglo sueldos[ ] con consistencia de datos. sueldoNeto = sueldos[i] – descuento + aumento . sueldos[i] = Lectura.Desarrollo de la Codificación. if ( sueldos[i] <= 0 ) { System. numTrab = Lectura.println ( “ Sueldo ingresado no es válido… Reintente! ” ) . int i.out. aumento = 0 .out. if ( sueldos[i] > 1600 ) descuento = sueldos[i] * 0.15 . 456 . numTrab .out.print ( “ El sueldo neto del trabajador [ ” + ( i + 1) + “ ] es : ” ) . double aumento = 0. for ( i = 0 . } } while ( numTrab <= 0 ) .print ( “ Ingrese el sueldo del trabajador [ ” + ( i + 1) + “ ]: ” ) . System. Ing.print ( “ Ingrese el número de trabajadores de la empresa : ” ) .out. i < numTrab .* . for ( i = 0 .out. // Declaración y creación del arreglo. descuento = 0 .10 .out. Clase PrgTrabajadores02 package dominioDeLaAplicacion . } } } Pag. Juan José Flores Cueto. Después. Si el trabajador tiene un sueldo mayor a S/. mostrar el monto total que paga la empresa por concepto de sueldos.00 nuevos soles. Condición Aumento Descuento sueldo < 410 20% 00 % sueldo >= 410 y sueldo <= 1600 10% 08 % sueldo > 1600 05% 15 % Etapa 02 . Calcular y mostrar el sueldo neto de cada trabajador. ‰ Resultado deseado: Mostrar el sueldo neto a cobrar por cada trabajador de la empresa. Luego se procede a ingresar los sueldos de cada trabajador y se almacenan en el arreglo creado. ‰ Datos necesarios: El número de trabajadores de la empresa y el sueldo de cada uno de ellos.600. Desarrollar una solución que permita ingresar y almacenar el sueldo de todos los trabajadores de una empresa. Si el trabajador tiene un sueldo menor a S/.00 nuevos soles se le aumenta el 20% de su sueldo y no se le realiza ningún descuento.Descripción del problema.1. se le aumenta el 5% de su sueldo y se le descuenta 15%. su aumento y su respectivo descuento. en base a su sueldo se determina su respectivo aumento y descuento.ESTRUCTURAS DE DATOS – Arreglos. 457 .410. por cada trabajador. También mostrar el monto total que paga la empresa por concepto de sueldos. Con el número de trabajadores se crea un arreglo (sueldos[ ]). su aumento y su respectivo descuento en base a la tabla mostrada (redondear dichas cantidades a dos decimales).Definición de la solución. Problema 139 Etapa 01 . En otros casos el aumento es del 10% de su sueldo y el descuento es de Pag. Adicionalmente. ‰ Procesamiento: El número de trabajadores se ingresa a través del teclado y se almacena en una variable (numTrab). Consistenciar los datos ingresados. Diagrama de paquetes Pag. Después de finalizar el cálculo del sueldo neto de cada trabajador se muestra por pantalla el contenido de la variable acumulador sueldoTotal. Definición de Paquetes y desarrollo del Diagrama de Paquetes. Juan José Flores Cueto. Nombre del Proyecto: ProyTrabajadores. 458 . También se muestra el aumento y el descuento calculado. El aumento se almacena en una variable (aumento) y el descuento en otra variable (descuento). Luego. 2. 1. se almacena el resultado en una variable (sueldoNeto). se determina el sueldo neto ((sueldo – descuento + aumento).Diseño de la lógica. 8%. Etapa 03 . El sueldo neto obtenido se suma a una variable acumulador (sueldoTotal). Ing. se redondea y se muestra por pantalla. aumento = 0. Clases Clases dominioDeLaAplicacion biblioteca 4. descuento. 459 . Definición de las Clases. sueldos[ ]. numTrab.método main ( ) ENTRADA: numTrab. aumento. sueldoTotal = 0 COMENTARIO “Determinación del tamaño del arreglo” HACER LEER numTrab SI (numTrab <= 0 ) ENTONCES ESCRIBIR “Número de trabajadores no válido… ” FINSI MIENTRAS (numTrab <= 0 ) COMENTARIO “Creación del arreglo” CREAR sueldos [numTrab] Pag. descuento = 0 NUMERO sueldoNeto. 3.ESTRUCTURAS DE DATOS – Arreglos. Algoritmo PrgTrabajadores03 . Diseño de algoritmo para el método principal. sueldoTotal INICIO COMENTARIO “Declaración de variables” NUMERO i. sueldos[ ] SALIDA: sueldoNeto. . aumento.10 descuento = sueldos[i] * 0. descuento sueldoTotal = sueldoTotal + sueldoNeto FINDESDE ESCRIBIR sueldoTotal FIN Pag. aumento y descuento por trabajador. Continúa… 4. ” FINSI MIENTRAS ( sueldos[i] <= 0 ) FINDESDE COMENTARIO “Cálculo del sueldo neto.método main ( ) COMENTARIO “Ingreso de datos al arreglo sueldos[ ]” DESDE i = 0 HASTA i = numTrab . y del total de sueldos ” DESDE i = 0 HASTA i = numTrab . Diseño de algoritmo para el método principal.05 descuento = sueldos[i] * 0. Juan José Flores Cueto.08 FINSI FINSI sueldoNeto = sueldos[i] – descuento + aumento sueldoNeto = sueldoNeto REDONDEA 2 aumento = aumento REDONDEA 2 descuento = descuento REDONDEA 2 ESCRIBIR sueldoNeto. 460 . Algoritmo PrgTrabajadores03 ..1 INCREMENTA 1 SI ( sueldos[i] < 410 ) ENTONCES aumento = sueldos[i] * 0. Ing.15 SINO aumento = sueldos[i] * 0.2 descuento = 0 SINO SI ( sueldos[i] > 1600 ) aumento = sueldos[i] * 0.1 INCREMENTA 1 HACER LEER sueldos[i] SI ( sueldos[i] <= 0 ) ENTONCES ESCRIBIR “Sueldo ingresado no es válido. ESTRUCTURAS DE DATOS – Arreglos. // Declaración y creación del arreglo. import biblioteca. if ( numTrab <= 0 ) { System. } Pag. Clase PrgTrabajadores03 package dominioDeLaAplicacion . descuento = 0.Desarrollo de la Codificación.out. // Determinación del tamaño del arreglo con consistencia de datos. 461 . i < numTrab . if ( sueldos[i] <= 0 ) { System.leerDouble( ) . } } while ( numTrab <= 0 ) . public class PrgTrabajadores03 { public static void main(String[] args) { // Declaración de variables. double aumento = 0. } } while ( sueldos[i] <= 0 ) .print ( “ Ingrese el número de trabajadores de la empresa : ” ) . double sueldos[ ] = new double [numTrab] .println ( “ Sueldo ingresado no es válido… Reintente! ” ) . sueldos[i] = Lectura.println ( “ El número de trabajadores no es válido… Reintente! ” ) . sueldoNeto.leerInt( ) .* . sueldoTotal = 0 . Etapa 04 . i++ ) { do { System. do { System. numTrab .out.out.out. numTrab = Lectura. for ( i = 0 . int i. // Ingreso de datos al arreglo sueldos[ ] con consistencia de datos.print ( “ Ingrese el sueldo del trabajador [ ” + ( i + 1) + “ ]: ” ) . out.0 .out. sueldoTotal = sueldoTotal + sueldoNeto .05 . aumento = ( Math. sueldoNeto = ( Math. descuento = 0 . Clase PrgTrabajadores03 // Cálculo del sueldo neto. aumento y descuento por trabajador. System.out.println ( “ Su descuento es : ” + descuento ) . System.15 . } else { aumento = sueldos[i] * 0.print ( “ El sueldo neto del trabajador [ ” + ( i + 1) + “ ] es : ” ) .Desarrollo de la Codificación.08 . i++ ) { if ( sueldos[i] < 410 ) { aumento = sueldos[i] * 0. descuento = ( Math. } System.println ( “ Monto total pagado por concepto de sueldos : ” + sueldoTotal ) .println ( sueldoNeto ) .println ( “ Su aumento es : ” + aumento ) . y del total de sueldos.out. Juan José Flores Cueto.out.round (aumento * 100) ) / 100. descuento = sueldos[i] * 0. for ( i = 0 . System. } } Pag. } } sueldoNeto = sueldos[i] + aumento – descuento .round (sueldoNeto * 100) ) / 100. System. Continúa… Etapa 04 . 462 .10 . } else { if ( sueldos[i] > 1600 ) { aumento = sueldos[i] * 0. i < numTrab .0 . descuento = sueldos[i] * 0. Ing.2 .0 .round (descuento * 100) ) / 100. 463 .15). Nombre del Proyecto: ProyTrabajadores. Etapa 03 . Calcular y mostrar el sueldo neto de cada trabajador.ESTRUCTURAS DE DATOS – Arreglos. 1. se determina el sueldo neto ((horas trabajadas * tarifa horaria * 1. Con el número de trabajadores se crea un arreglo (sueldos[ ][ ]). Etapa 02 . ‰ Resultado deseado: Mostrar el sueldo de cada trabajador de la empresa. Luego se procede a ingresar las horas trabajadas y la tarifa horaria de cada trabajador y se almacenan en el arreglo creado. Desarrollar una solución que permita ingresar y almacenar las horas trabajadas y la tarifa horaria de todos los trabajadores de una empresa.Diseño de la lógica. por cada trabajador. ‰ Procesamiento: El número de trabajadores se ingresa a través del teclado y se almacena en una variable (numTrab). Problema 140 Etapa 01 . se redondea y se muestra por pantalla. sabiendo que se tiene que descontar el 10% por impuestos y el 5% por seguro.Definición de la solución. se almacena el resultado en una variable (sueldoNeto).Descripción del problema. Después. y las horas trabajadas y la tarifa horaria de cada uno de ellos. Pag. ‰ Datos necesarios: El número de trabajadores de la empresa. Juan José Flores Cueto. Ing. Diagrama de paquetes 3. Definición de las Clases. 464 . Definición de Paquetes y desarrollo del Diagrama de Paquetes. Clases Clases dominioDeLaAplicacion biblioteca Pag. 2. ESTRUCTURAS DE DATOS – Arreglos.85 ESCRIBIR sueldoNeto FINDESDE FIN Pag. Diseño de algoritmo para el método principal. ” FINSI MIENTRAS ( sueldos[i][0] <= 0 ) HACER COMENTARIO “Ingreso de la tarifa horaria” LEER sueldos[i][1] SI ( sueldos[i][1] <= 0 ) ENTONCES ESCRIBIR “Tarifa horaria no válida.. sueldoNeto COMENTARIO “Determinación del tamaño del arreglo” HACER LEER numTrab SI (numTrab <= 0 ) ENTONCES ESCRIBIR “Número de trabajadores no válido… ” FINSI MIENTRAS (numTrab <= 0 ) COMENTARIO “Creación del arreglo” CREAR sueldos [numTrab][2] COMENTARIO “Ingreso de datos al arreglo sueldos[ ][ ]” DESDE i = 0 HASTA i = numTrab .. numTrab. sueldos[ ][ ] SALIDA: sueldoNeto INICIO COMENTARIO “Declaración de variables” NUMERO i. ” FINSI MIENTRAS ( sueldos[i][1] <= 0 ) FINDESDE COMENTARIO “Cálculo del sueldo neto de cada trabajador” DESDE i = 0 HASTA i = numTrab .1 INCREMENTA 1 HACER COMENTARIO “Ingreso de las horas trabajadas” LEER sueldos[i][0] SI ( sueldos[i][0] <= 0 ) ENTONCES ESCRIBIR “Número de horas no válida.método main ( ) ENTRADA: numTrab. 465 . 4..1 INCREMENTA 1 sueldoNeto = sueldo[i][0] * sueldo[i][1] * 0. Algoritmo PrgTrabajadores04 .. sueldos[ ][ ]. println ( “ Ingrese los datos del trabajador [ ” + ( i + 1) + “ ]: ” ) . i++ ) { System.out.out. } Pag. do { System. // Determinación del tamaño del arreglo con consistencia de datos.leerDouble( ) . double sueldos[ ][ ] = new double [numTrab][2] . if ( sueldos[i][0] <= 0 ) { System.print ( “ Ingrese el número de trabajadores de la empresa : ” ) . do { System.Desarrollo de la Codificación. if ( numTrab <= 0 ) { System.out. do { System.println ( “ El número de trabajadores no es válido… Reintente! ” ) .out. Clase PrgTrabajadores04 package dominioDeLaAplicacion . } } while ( sueldos[i][1] <= 0 ) . // Ingreso de datos al arreglo sueldos[ ][ ] con consistencia de datos. } } while ( numTrab <= 0 ) .leerDouble( ) . numTrab . import biblioteca. Juan José Flores Cueto. Etapa 04 . 466 . i < numTrab .out. sueldos[i][1] = Lectura.print ( “ Tarifa horaria: ” ) . numTrab = Lectura.println ( “ Tarifa horaria no válida… ” ) . if ( sueldos[i][1] <= 0 ) { System. public class PrgTrabajadores04 { public static void main(String[] args) { // Declaración de variables. // Declaración y creación del arreglo.out. Ing. for ( i = 0 . double sueldoNeto . sueldos[i][0] = Lectura.* . int i.leerInt( ) .print ( “ Número de horas trabajadas: ” ) .out.println ( “Número de horas trabajadas no válida… ” ) . } } while ( sueldos[i][0] <= 0 ) . 85 .out. i < numTrab . System.out. 467 . for ( i = 0 . Clase PrgTrabajadores04 // Cálculo del sueldo neto de cada trabajador.Desarrollo de la Codificación.println ( sueldoNeto ) .print ( “ El sueldo neto del trabajador [ ” + ( i + 1) + “ ] es : ” ) . System. } } } Pag. Continúa… Etapa 04 .ESTRUCTURAS DE DATOS – Arreglos. i++ ) { sueldoNeto = sueldos[i][0] * sueldos[i][1] * 0. Por otro lado. se determina el sueldo bruto. Adicionalmente. se paga la tarifa con un recargo del 25%. Pag. Luego se procede a ingresar las horas trabajadas y la tarifa horaria de cada trabajador y se almacenan en el arreglo creado.Descripción del problema. al trabajador se le descuenta el 10% y si el sueldo es superior a S/. Con el número de trabajadores se crea un arreglo (sueldos[ ][ ]). por cada trabajador.1.3. Desarrollar una solución que permita ingresar y almacenar las horas trabajadas y la tarifa horaria de todos los trabajadores de una empresa. Si el número de horas trabajadas es mayor a 48 horas. Ing. y las horas trabajadas y la tarifa horaria de cada uno de ellos. si el sueldo es superior a S/.00 nuevos soles. Juan José Flores Cueto. ‰ Datos necesarios: El número de trabajadores de la empresa. Etapa 02 . Mostrar el sueldo total (sueldo bruto) y el sueldo a cobrar (sueldo neto) de cada trabajador redondeado a dos decimales. Después.500. al trabajador se le descuenta el 15%. Problema 141 Etapa 01 . 468 . Calcular y mostrar el sueldo de cada trabajador.00 nuevos soles.25 ) + ( 48 * tarifa horaria) En caso contrario se determina de la siguiente forma: ( horas trabajadas * tarifa horaria ) El sueldo bruto se almacena en una variable (sueldoBruto). sabiendo que hasta 48 horas trabajadas se paga una tarifa normal y sobre las 48 horas. ‰ Procesamiento: El número de trabajadores se ingresa a través del teclado y se almacena en una variable (numTrab). el sueldo bruto se determina de la siguiente forma: ( horas trabajadas – 48 ) * ( tarifa horaria * 1.600. ‰ Resultado deseado: Mostrar el sueldo de cada trabajador de la empresa. equivalente al 15% del sueldo.Definición de la solución. se ha establecido un aumento a todos los trabajadores. Etapa 03 .1600.00 nuevos soles. Caso contrario el descuento es cero. Diagrama de paquetes Pag.3. Finalmente se realiza el calculo del sueldo neto (sueldoBruto + aumento – descuento) y se almacena en una variable (sueldoNeto).00 nuevos soles y si el sueldo bruto es mayor a S/.ESTRUCTURAS DE DATOS – Arreglos. se calcula el descuento del 10%. Después. Definición de Paquetes y desarrollo del Diagrama de Paquetes.500. Luego. Nombre del Proyecto: ProyTrabajadores.00 nuevos soles.Diseño de la lógica. 2. Si el sueldo bruto es menor o igual a S/.3. se calcula el aumento del 15% del sueldo y se almacena en la variable (aumento). se determina el descuento y el aumento de sueldo.500. 1. 469 . se calcula el descuento del 15%. Si el sueldo bruto es mayor a S/. por cada trabajador. El sueldo neto y el sueldo bruto se redondean a dos decimales y se muestran por pantalla. En todos los casos el descuento se almacena en una variable (descuento). sueldoNeto INICIO COMENTARIO “Declaración de variables” NUMERO i. Diseño de algoritmo para el método principal. 470 . Algoritmo PrgTrabajadores05 . 3. sueldoBruto COMENTARIO “Determinación del tamaño del arreglo” HACER LEER numTrab SI (numTrab <= 0 ) ENTONCES ESCRIBIR “Número de trabajadores no válido… ” FINSI MIENTRAS (numTrab <= 0 ) COMENTARIO “Creación del arreglo” CREAR sueldos [2][numTrab] Pag. Clases Clases dominioDeLaAplicacion biblioteca 4. sueldos[ ][ ] SALIDA: sueldoBruto. Ing. descuento NUMERO sueldoNeto. numTrab. Definición de las Clases. Juan José Flores Cueto.método main ( ) ENTRADA: numTrab. sueldos[ ][ ]. 1 INCREMENTA 1 SI ( sueldos[0][i] > 48 ) ENTONCES sueldoBruto = (sueldos[0][i] – 48) * (sueldos[1][i] * 1. Diseño de algoritmo para el método principal. Continúa… 4.ESTRUCTURAS DE DATOS – Arreglos.1 INCREMENTA 1 HACER COMENTARIO “Ingreso de las horas trabajadas” LEER sueldos[0][i] SI ( sueldos[0][i] <= 0 ) ENTONCES ESCRIBIR “Número de horas no válida.15 SINO SI (suesldoBruto > 1600 ) ENTONCES descuento = sueldoBruto * 0.25) + (48 * sueldos[1][i]) SINO sueldoBruto = sueldos[0][i] * sueldos[1][i] FINSI SI ( sueldoBruto > 3500 ) ENTONCES descuento = sueldoBruto * 0..10 SINO descuento = 0 FINSI FINSI aumento = sueldoBruto * 0. sueldoNeto FINDESDE FIN Pag. ” FINSI MIENTRAS ( sueldos[1][i] <= 0 ) FINDESDE COMENTARIO “Cálculo del sueldo bruto y neto por trabajador” DESDE i = 0 HASTA i = numTrab .método main ( ) COMENTARIO “Ingreso de datos al arreglo sueldos[ ][ ]” DESDE i = 0 HASTA i = numTrab . ” FINSI MIENTRAS ( sueldos[0][i] <= 0 ) HACER COMENTARIO “Ingreso de la tarifa horaria” LEER sueldos[1][i] SI ( sueldos[1][i] <= 0 ) ENTONCES ESCRIBIR “Tarifa horaria no válida.. 471 ..15 sueldoNeto = sueldoBruto + aumento – descuento sueldoBruto = sueldoBruto REDONDEA 2 sueldoNeto = sueldoNeto REDONDEA 2 ESCRIBIR sueldoBruto. Algoritmo PrgTrabajadores05 .. public class PrgTrabajadores05 { public static void main(String[] args) { // Declaración de variables.println ( “ Ingrese los datos del trabajador [ ” + ( i + 1) + “ ]: ” ) .out.println ( “ Tarifa horaria no válida… ” ) .out. 472 . // Determinación del tamaño del arreglo con consistencia de datos. if ( numTrab <= 0 ) { System. do { System. double sueldos[ ][ ] = new double[2][numTrab] .println ( “ El número de trabajadores no es válido… Reintente! ” ) . // Ingreso de datos al arreglo sueldos[ ][ ] con consistencia de datos. import biblioteca.println ( “Número de horas trabajadas no válida… ” ) .out. } Pag. // Declaración y creación del arreglo. Juan José Flores Cueto.out.out.out. int i. i++ ) { System. } } while ( sueldos[1][i] <= 0 ) . if ( sueldos[1][i] <= 0 ) { System. Ing. for ( i = 0 . numTrab = Lectura. sueldos[0][i] = Lectura. do { System.print ( “ Ingrese el número de trabajadores de la empresa : ” ) . numTrab . i < numTrab .leerDouble( ) .leerInt( ) . Etapa 04 . } } while ( sueldos[0][i] <= 0 ) . do { System. sueldos[1][i] = Lectura. if ( sueldos[0][i] <= 0 ) { System.print ( “ Número de horas trabajadas: ” ) .out. double sueldoNeto .* .leerDouble( ) . } } while ( numTrab <= 0 ) .Desarrollo de la Codificación. Clase PrgTrabajadores05 package dominioDeLaAplicacion .print ( “ Tarifa horaria: ” ) . System.out. System.15 . } else { descuento = 0 .sueldos[1][i] ) . i < numTrab . System.round (sueldoBruto * 100) ) / 100.println ( “ Sueldo neto : ” + sueldoNeto ) .out. Continúa… Etapa 04 . sueldoNeto = ( Math.ESTRUCTURAS DE DATOS – Arreglos. } else { if ( sueldoBruto > 1600 ) { descuento = sueldoBruto * 0. System. } } aumento = sueldoBruto * 0.0 .round (sueldoNeto * 100) ) / 100.out.println ( ) . } if ( sueldoBruto > 3500 ) { descuento = sueldoBruto * 0.out. sueldoNeto = sueldoBruto + aumento – descuento .println ( “ Trabajador [ ” + ( i + 1) + “ ] ” ) . i++ ) { if ( sueldos[0][i] > 48 ) { sueldoBruto = ( sueldos[0][i] – 48) * (sueldos[1][i] * 1. sueldoBruto = ( Math. } else { sueldoBruto = sueldos[0][i] * sueldos[1][i] ) .15 .Desarrollo de la Codificación.10 . Clase PrgTrabajadores05 // Cálculo del sueldo bruto y neto por trabajador.0 . } } } Pag. for ( i = 0 .println ( “ Sueldo bruto : ” + sueldoBruto ) .25) + (48 . 473 . Etapa 02 . Consistenciar la entrada de datos. Problema 142 Etapa 01 . Etapa 03 . Definición de Paquetes y desarrollo del Diagrama de Paquetes. Nombre del Proyecto: ProyArticulos. para cada uno de los nombres. 1. Ing. Con el número de artículos se crea un arreglo (articulos[ ]). Diagrama de paquetes Pag.Definición de la solución. se almacenan temporalmente en una variable (sueldo). ‰ Resultado deseado: Mostrar el nombre y la longitud del nombre de todos los artículos de una bodega. Después. 474 . se almacena en una variable (tamaño) y se muestra por pantalla. 2.Descripción del problema. ‰ Datos necesarios: El número de artículos y el nombre de cada uno de los artículos.Diseño de la lógica. y se almacenan en el arreglo creado. ‰ Procesamiento: El número de artículos se ingresa a través del teclado y se almacena en una variable (numArt). se determina su longitud. luego se eliminan los espacios del inicio y final del nombre. Mostrar cada uno de los nombre con su respectiva longitud. Desarrollar una solución que permita ingresar y almacenar el nombre de todos los artículos de una bodega. Juan José Flores Cueto. Luego se procede a ingresar el nombre de los artículos de la bodega. nombre COMENTARIO “Determinación del tamaño del arreglo” HACER LEER numArt SI (numArt <= 0 ) ENTONCES ESCRIBIR “Número de artículos no válido… ” FINSI MIENTRAS (numArt <= 0 ) COMENTARIO “Creación del arreglo” CREAR articulos [numArt] Pag.método main ( ) ENTRADA: numArt. Clases Clases dominioDeLaAplicacion biblioteca 4. 475 . numArt. tamaño TEXTO articulos[ ].ESTRUCTURAS DE DATOS – Arreglos. 3. Definición de las Clases. Algoritmo PrgArticulos01 . nombres SALIDA: tamaño INICIO COMENTARIO “Declaración de variables” NUMERO i. Diseño de algoritmo para el método principal. print ( “ Ingrese el número de artículos : ” ) . public class PrgArticulos01 { public static void main(String[] args) { // Declaración de variables. tamaño ..out.1 INCREMENTA 1 HACER LEER nombre articulos[i] = nombre ELIMINAESPACIO INICIO. Ing. int i.out. Juan José Flores Cueto. do { System. Diseño de algoritmo para el método principal.leerInt( ) . Continúa… 4. if ( numArt <= 0 ) { System.* . 476 . String nombre . // Determinación del tamaño del arreglo con consistencia de datos..” FINSI MIENTRAS (LONGITUD articulos[i] < 3 ) FINDESDE COMENTARIO “Cálculo de la longitud de los nombres” DESDE i = 0 HASTA i = numArt .Desarrollo de la Codificación. numArt = Lectura. } } while ( numArt <= 0 ) . Pag.println ( “ El número de artículos no es válido… Reintente! ” ) .método main ( ) COMENTARIO “Ingreso de datos al arreglo articulos [ ]” DESDE i = 0 HASTA i = numArt . tamaño FINDESDE FIN Etapa 04 .1 INCREMENTA 1 tamaño = LONGITUD articulos[i] ESCRIBIR articulos[i]. numArt. Clase PrgArticulos01 package dominioDeLaAplicacion . FIN SI ( LONGITUD articulos[i] < 3 ) ENTONCES ESCRIBIR “Nombre de artículo no válido. Algoritmo PrgArticulos01 . import biblioteca. String articulos[ ] = new String [numArt] . nombre = Lectura. Continúa… Etapa 04 . } // Cálculo de la longitud de los nombres.trim( ) .println ( “ El nombre ingresado no es válido… Reintente! ” ) . } } } Pag. for ( i = 0 .out.out. Clase PrgArticulos01 // Declaración y creación del arreglo. i < numArt .print ( “ Ingrese el nombre del artículo [ ” + ( i + 1) + “]: ” ) . for ( i = 0 .length( ) < 3 ) { System. 477 .leerString( ) . System. i < numArt . if ( articulos[i].println ( “ Artículo ” + articulos[i] + “ tiene una longitud de ” + tamaño ) .out.length( ) < 3 ) . articulos[i] = nombre. i++ ) { do { System. // Ingreso de datos al arreglo artículos[ ] con consistencia de datos.ESTRUCTURAS DE DATOS – Arreglos.Desarrollo de la Codificación. i++ ) { tamaño = articulos[i]. } } while ( articulos[i].length( ) . las demás letras en minúscula y la longitud del nombre por pantalla. Etapa 02 . Ing. Desarrollar una solución que permita ingresar y almacenar el nombre de todos los artículos de una bodega. se eliminan los espacios del inicio y final del nombre. Problema 143 Etapa 01 . Adicionalmente. Adicionalmente mostrar la longitud de cada uno de los nombres de los artículos. mostrar la longitud de cada uno de los nombres. Pag. Con el número de artículos se crea un arreglo (articulos[ ]). Después.Definición de la solución. se obtiene la primera letra. Juan José Flores Cueto.Descripción del problema. Finalmente. Luego. se determina la longitud del nombre y se almacena en una variable (tamaño). ‰ Procesamiento: El número de artículos se ingresa a través del teclado y se almacena en una variable (numArt). se muestra la primera letra del nombre en mayúscula. ‰ Datos necesarios: El número de artículos y el nombre de cada uno de los artículos. se almacena en una variable (letra) y se convierte en mayúscula. 478 . Luego se procede a ingresar el nombre de los artículos de la bodega. Consistenciar la entrada de datos. se almacenan en una variable (resto) y se convierten en minúscula. se obtiene las demás letras. ‰ Resultado deseado: Mostrar la primera letra de todos los nombres en letra mayúscula y el resto en letra minúscula. Mostrar la primera letra de cada nombre en mayúscula y el resto en minúscula. y se almacenan en el arreglo creado. para cada uno de los nombres. También. ESTRUCTURAS DE DATOS – Arreglos. 1. 2. Definición de Paquetes y desarrollo del Diagrama de Paquetes.Diseño de la lógica. Definición de las Clases. Clases Clases dominioDeLaAplicacion biblioteca Pag. Nombre del Proyecto: ProyArticulos. Etapa 03 . 479 . Diagrama de paquetes 3. resto COMENTARIO “Determinación del tamaño del arreglo” HACER LEER numArt SI (numArt <= 0 ) ENTONCES ESCRIBIR “Número de artículos no válido… ” FINSI MIENTRAS (numArt <= 0 ) COMENTARIO “Creación del arreglo” CREAR articulos [numArt] COMENTARIO “Ingreso de datos al arreglo articulos [ ]” DESDE i = 0 HASTA i = numArt . resto. tamaño FINDESDE FIN Pag. Juan José Flores Cueto. letra. Algoritmo PrgArticulos02 .1 INCREMENTA 1 HACER LEER articulos[i] articulos[i] = articulos[i] ELIMINAESPACIO INICIO.” FINSI MIENTRAS (LONGITUD articulos[i] < 3 ) FINDESDE COMENTARIO “ Manipulación del nombre de los artículos ” DESDE i = 0 HASTA i = numArt .1 letra = MAYUSCULA letra resto = articulos[i] SUBCADENA 1 resto = MINUSCULA resto tamaño = LONGITUD articulos[i] ESCRIBIR letra. articulos[ ] SALIDA: letra.1 INCREMENTA 1 letra = articulos[i] SUBCADENA 0. tamaño TEXTO articulos[ ]. Ing. tamaño INICIO COMENTARIO “Declaración de variables” NUMERO i. numArt.método main ( ) ENTRADA: numArt.. 480 . 4. FIN SI ( LONGITUD articulos[i] < 3 ) ENTONCES ESCRIBIR “Nombre de artículo no válido. Diseño de algoritmo para el método principal.. resto. out. i < numArt .substring(1) . int i. tamaño = articulos[i].toUpperCase( ).length( ) .leerString( ) . String articulos[ ] = new String [numArt] . } } } Pag. tamaño .out. // Ingreso de datos al arreglo articulos[ ] con consistencia de datos.print ( “ Ingrese el nombre del artículo [ ” + ( i + 1) + “]: ” ) .println ( “ El nombre ingresado no es válido… Reintente! ” ) . i++ ) { letra = articulos[i].out. resto .substring(0. Clase PrgArticulos02 package dominioDeLaAplicacion . resto = articulos[i]. articulos[i] = articulos[i]. letra = letra. // Determinación del tamaño del arreglo con consistencia de datos. numArt. Etapa 04 .toLowerCase( ) . System. if ( numArt <= 0 ) { System. numArt = Lectura. import biblioteca. i < numArt . do { System. articulos[i] = Lectura. } } while ( numArt <= 0 ) .println ( “ El número de artículos no es válido… Reintente! ” ) .ESTRUCTURAS DE DATOS – Arreglos.println ( “ Artículo ” + letra + resto + “ tiene una longitud de ” + tamaño ) .1) .length( ) < 3 ) . if ( articulos[i].Desarrollo de la Codificación. public class PrgArticulos02 { public static void main(String[] args) { // Declaración de variables. 481 .length( ) < 3 ) { System. } // Manipulación del nombre de los artículos.* . for ( i = 0 .print ( “ Ingrese el número de artículos : ” ) .trim( ) . } } while ( articulos[i].out. // Declaración y creación del arreglo. String letra. for ( i = 0 . resto = resto]. i++ ) { do { System.out.leerInt( ) . ‰ Datos necesarios: El número de artículos y el nombre de cada uno de los artículos. ‰ Procesamiento: El número de artículos se ingresa a través del teclado y se almacena en una variable (numArt). se obtiene la primera letra. Finalmente.Definición de la solución. y se almacenan en el arreglo creado. Después. Desarrollar una solución que permita ingresar y almacenar el nombre de todos los artículos de una bodega. la primera letra del nombre en mayúscula y la última letra del nombre en minúscula. Con el número de artículos se crea un arreglo (articulos[ ]). se almacenan en una variable (letraFin) y se convierten en minúscula. Etapa 02 . se almacena en una variable (letraIni) y se convierte en mayúscula. 482 . se obtiene la última letra. ‰ Resultado deseado: Mostrar la primera letra de todos los nombres en letra mayúscula y el resto en letra minúscula. Consistenciar la entrada de datos. se eliminan los espacios del inicio y final del nombre. Mostrar la primera letra y la última letra de cada uno de los nombres en letra mayúscula y minúscula respectivamente. Luego se procede a ingresar el nombre de los artículos de la bodega. Ing. Adicionalmente mostrar la longitud de cada uno de los nombres de los artículos. Pag. Juan José Flores Cueto. Luego. se muestra por pantalla. para cada uno de los nombres.Descripción del problema. Problema 144 Etapa 01 . 483 .ESTRUCTURAS DE DATOS – Arreglos. Diagrama de paquetes 3. Etapa 03 . Definición de Paquetes y desarrollo del Diagrama de Paquetes. 2. Nombre del Proyecto: ProyArticulos. 1.Diseño de la lógica. Definición de las Clases. Clases Clases dominioDeLaAplicacion biblioteca Pag. . numArt TEXTO articulos[ ]. Ing. articulos[ ] SALIDA: letraIni. FIN SI ( LONGITUD articulos[i] < 3 ) ENTONCES ESCRIBIR “Nombre de artículo no válido. Diseño de algoritmo para el método principal. letraFin INICIO COMENTARIO “Declaración de variables” NUMERO i.1 INCREMENTA 1 HACER LEER articulos[i] articulos[i] = articulos[i] ELIMINAESPACIO INICIO. letraFin FINDESDE FIN Pag. letraIni. Juan José Flores Cueto.” FINSI MIENTRAS (LONGITUD articulos[i] < 3 ) FINDESDE COMENTARIO “ Manipulación del nombre de los artículos ” DESDE i = 0 HASTA i = numArt .método main ( ) ENTRADA: numArt.1 INCREMENTA 1 letraIni = articulos[i] CARACTER INICIO letraIni = MAYUSCULA letraIni letraFin = articulos[i] CARACTER FIN letraFin = MINUSCULA letraFin ESCRIBIR letraIni.. Algoritmo PrgArticulos03 . 4. letraFin COMENTARIO “Determinación del tamaño del arreglo” HACER LEER numArt SI (numArt <= 0 ) ENTONCES ESCRIBIR “Número de artículos no válido… ” FINSI MIENTRAS (numArt <= 0 ) COMENTARIO “Creación del arreglo” CREAR articulos [numArt] COMENTARIO “Ingreso de datos al arreglo articulos [ ]” DESDE i = 0 HASTA i = numArt . 484 . out. import biblioteca. i++ ) { letraIni = articulos[i]. System.toUpperCase(letraIni) . // Determinación del tamaño del arreglo con consistencia de datos. letraFin .println ( ) . int i. i < numArt .toLowerCase(letraFin) .out.charAt (articulos[i]. articulos[i] = Lectura. String articulos[ ] = new String [numArt] . Etapa 04 . public class PrgArticulos03 { public static void main(String[] args) { // Declaración de variables.leerString( ) . letraIni = Character.trim( ) .out.ESTRUCTURAS DE DATOS – Arreglos.charAt(0) .out.out.println ( “ El nombre ingresado no es válido… Reintente! ” ) . Letra final : ” + letraFin + “. // Ingreso de datos al arreglo artículos[ ] con consistencia de datos. } } } Pag. i < numArt .println ( “ El número de artículos no es válido… Reintente! ” ) .print ( “ Ingrese el número de artículos : ” ) . do { System. for ( i = 0 .length( ) < 3 ) . } } while ( articulos[i]. } } while ( numArt <= 0 ) .Desarrollo de la Codificación.” ) . articulos[i] = articulos[i]. numArt .length( ) -1) . // Declaración y creación del arreglo. System. if ( numArt <= 0 ) { System.println ( “ Letra inicial : ” + letraIni + “.println ( “ Artículo ” + articulos[i] ) .print ( “ Ingrese el nombre del artículo [ ” + ( i + 1) + “]: ” ) . } // Manipulación del nombre de los artículos.length( ) < 3 ) { System. numArt = Lectura. for ( i = 0 . char letraIni. if ( articulos[i].out. Clase PrgArticulos03 package dominioDeLaAplicacion .out.leerInt( ) . i++ ) { do { System. LetraFin = Character. System.* . letraFin = articulos[i]. 485 . Ing. Mostrar la primera letra del nombre y la descripción en mayúscula y el resto en minúscula. ‰ Datos necesarios: El número de artículos y. . para cada uno de los nombres. ‰ Resultado deseado: Mostrar la primera letra de todos los nombres y las descripciones en letra mayúscula y el resto en letra minúscula. los resultados se muestran por pantalla. se obtiene la primera letra. para cada una de las descripciones se realiza lo mismo y el resultado se almacenan en una variable (descrip). Luego se convierte a mayúscula la variable letra y a minúscula la variable resto y se almacenan en una variable (nombre).Descripción del problema. ‰ Procesamiento: El número de artículos se ingresa a través del teclado y se almacena en una variable (numArt). Consistenciar la entrada de datos. También mostrar las siglas del artículo en minúscula. Después. la descripción y las siglas de los artículos de la bodega. 486 . la sigla y la descripción de todos los artículos de una bodega. Luego se procede a ingresar el nombre. Problema 145 Etapa 01 . y se almacenan en el arreglo creado. Desarrollar una solución que permita ingresar y almacenar el nombre. También. la descripción y las siglas de cada uno de los artículos. se convierte a mayúscula las siglas de cada artículo y se almacena en una variable (siglas). se obtiene las demás letras y se almacenan en una variable (resto). se almacena en una variable (letra). Juan José Flores Cueto. Etapa 02 .Definición de la solución. mostrar las siglas del artículo en mayúscula. se eliminan los espacios del inicio y final de los mismos. Luego. el nombre. También. Con el número de artículos se crea un arreglo (articulos[ ]). Finalmente. Pag. ESTRUCTURAS DE DATOS – Arreglos. Etapa 03 - Diseño de la lógica. 1. Nombre del Proyecto: ProyArticulos. 2. Definición de Paquetes y desarrollo del Diagrama de Paquetes. Diagrama de paquetes 3. Definición de las Clases. Clases Clases dominioDeLaAplicacion biblioteca Pag. 487 Ing. Juan José Flores Cueto. 4. Diseño de algoritmo para el método principal. Algoritmo PrgArticulos04 - método main ( ) ENTRADA: numArt, articulos[ ][ ] SALIDA: nombre, descrip, siglas INICIO COMENTARIO “Declaración de variables” NUMERO i, numArt TEXTO articulos[ ][ ], nombre, descrip, siglas COMENTARIO “Determinación del tamaño del arreglo” HACER LEER numArt SI (numArt <= 0 ) ENTONCES ESCRIBIR “Número de artículos no válido… ” FINSI MIENTRAS (numArt <= 0 ) COMENTARIO “Creación del arreglo” CREAR articulos [numArt][3] COMENTARIO “Ingreso de datos al arreglo articulos [ ]” DESDE i = 0 HASTA i = numArt - 1 INCREMENTA 1 HACER COMENTARIO “ Ingreso del nombre de los artículos ” LEER articulos[i][0] articulos[i][0] = articulos[i][0] ELIMINAESPACIO INICIO articulos[i][0] = articulos[i][0] ELIMINAESPACIO FIN SI ( LONGITUD articulos[i][0] < 3 ) ENTONCES ESCRIBIR “Nombre de artículo no válido...” FINSI MIENTRAS (LONGITUD articulos[i][0] < 3 ) HACER COMENTARIO “ Ingreso descripción de los artículos ” LEER articulos[i][1] articulos[i][1] = articulos[i][1] ELIMINAESPACIO INICIO articulos[i][1] = articulos[i][1] ELIMINAESPACIO FIN SI ( LONGITUD articulos[i][1] < 3 ) ENTONCES ESCRIBIR “Descripción de artículo no válida...” FINSI MIENTRAS (LONGITUD articulos[i][1] < 3 ) Pag. 488 ESTRUCTURAS DE DATOS – Arreglos. Continúa… 4. Diseño de algoritmo para el método principal. Algoritmo PrgArticulos04 - método main ( ) HACER COMENTARIO “ Ingreso siglas de los artículos ” LEER articulos[i][2] articulos[i][2] = articulos[i][2] ELIMINAESPACIO INICIO articulos[i][2] = articulos[i][2] ELIMINAESPACIO FIN SI ( LONGITUD articulos[i][2] < 3 ) ENTONCES ESCRIBIR “Sigla de artículo no válida...” FINSI MIENTRAS (LONGITUD articulos[i][2] < 3 ) FINDESDE COMENTARIO “Manipulación del nombre de los artículos” DESDE i = 0 HASTA i = numArt - 1 INCREMENTA 1 letra = articulos[i][0] SUBCADENA 0,1 resto = articulos[i][0] SUBCADENA 1 nombre = MAYUSCULA letra + MINUSCULA resto letra = articulos[i][1] SUBCADENA 0,1 resto = articulos[i][1] SUBCADENA 1 descrip = MAYUSCULA letra + MINUSCULA resto siglas = MAYUSCULA articulos[i][2] ESCRIBIR nombre, descrip, siglas FINDESDE FIN Pag. 489 Ing. Juan José Flores Cueto. Etapa 04 - Desarrollo de la Codificación. Clase PrgArticulos04 package dominioDeLaAplicacion ; import biblioteca.* ; public class PrgArticulos04 { public static void main(String[] args) { // Declaración de variables. int i, numArt ; String letra, resto, nombre, descrip, siglas ; // Determinación del tamaño del arreglo con consistencia de datos. do { System.out.print ( “ Ingrese el número de artículos : ” ) ; numArt = Lectura.leerInt( ) ; if ( numArt <= 0 ) { System.out.println ( “ El número de artículos no es válido… Reintente! ” ) ; } } while ( numArt <= 0 ) ; // Declaración y creación del arreglo. String articulos[ ][ ] = new String [numArt][3] ; // Ingreso de datos al arreglo artículos[ ][ ] con consistencia de datos. for ( i = 0 ; i < numArt ; i++ ) { do { System.out.print ( “ Ingrese el nombre del artículo [ ” + ( i + 1) + “ ]: ” ) ; articulos[i][0] = Lectura.leerString( ) ; articulos[i][0] = articulos[i][0].trim( ) ; 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. Continúa… Etapa 04 - Desarrollo de la Codificación. 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 ) ; } // Manipulación del nombres, descripción y sigla de los artículos for ( i = 0 ; i < numArt ; i++ ) { 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( ) ; System.out.println ( “ Artículo ” + ( i+1 ) ) ; System.out.println ( “ ---------------------- ” ) ; System.out.println ( “ Nombre: ” + nombre + “.” ) ; System.out.println ( “ Descripción: ” + descrip + “.” ) ; System.out.println ( “ Siglas: ” + siglas + “.” ) ; System.out.println ( ) ; } } } Pag. 491 Ing. Juan José Flores Cueto. Pag. 492 ESTRUCTURAS DE DATOS – Arreglos. DESARROLLO DE SOLUCIONES UTILIZANDO MÚLTIPLES ARREGLOS Arreglos en paralelos Cuando se plantean soluciones a diversos problemas es necesario utilizar variables, vectores y matrices en forma simultánea para almacenar los datos. Es decir, en una solución se puede utilizar algunas variables, un vector, dos vectores o muchos vectores. También, se puede utilizar variables, un vector y una matriz, o dos vectores y una matriz. En términos generales se puede afirmar que en una solución se utilizan variables, vectores y matrices en forma simultánea y en el número que se necesiten. Esto va a depender de la complejidad y tipo de problema que se necesite resolver. 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 Si en nombres[0] se almacena el nombre “Danae”, resulta lógico y necesario que en sueldos[0] almacenemos su respectivo sueldo. 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. nombres sexos Edades 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 Etapa 01 - Descripción del problema. Desarrollar una solución que permita ingresar y almacenar el nombre y el sueldo de todos los trabajadores de una empresa. Mostrar el nombre del trabajador que tiene el sueldo más alto y el promedio del sueldo de todos los trabajadores redondeado a dos decimales. Etapa 02 - Definición de la solución. ‰ Resultado deseado: Mostrar el nombre del trabajador que tiene el sueldo más alto y el promedio del sueldo de todos los trabajadores. ‰ Datos necesarios: El número de trabajadores y, el nombre y el sueldo de cada trabajador. ‰ Procesamiento: El número de trabajadores se ingresa a través del teclado y se almacena en una variable (numTrab). Con el número de trabajadores se crean dos arreglos (nombres[] y sueldos[]). Luego se procede a ingresar el nombre de los trabajadores, se eliminan los espacios del inicio y final de los mismos, y se almacenan en uno de los arreglos creados (nombres[ ]). También, se procede a ingresar el sueldo de los trabajadores y se almacenan en el otro arreglo creado (sueldos[ ]). Después, se determina el sueldo mas alto entre todos los trabajadores comparando el sueldo de cada trabajador con el contenido de una variable (sueldoMayor), inicializada con cero. Si el contenido de la variable sueldoMayor resulta menor que el sueldo de un trabajador, el sueldo de dicho trabajador pasa a ser el sueldo mayor y se almacena en la variable sueldoMayor. Una vez determinado el sueldo mayor se muestra el nombre de todos los trabajadores cuyo sueldo es igual al sueldoMayor. Luego, se determina el promedio del sueldo de todos los trabajadores sumando el sueldo de cada trabajador a una variable acumulador Pag. 495 Ing. Juan José Flores Cueto. (sumaSueldos) y dividiendo la suma total de los sueldos entre el número de trabajadores. El resultado se almacena en una variable (sueldoPromedo), se redondea a dos decimales y se muestra por pantalla. Etapa 03 - Diseño de la lógica. 1. Nombre del Proyecto: ProyTrabajadores. 2. Definición de Paquetes y desarrollo del Diagrama de Paquetes. Diagrama de paquetes 3. Definición de las Clases. Clases Clases dominioDeLaAplicacion biblioteca Pag. 496 ESTRUCTURAS DE DATOS – Arreglos. 4. Diseño de algoritmo para el método principal. Algoritmo PrgTrabajadores06 - método main ( ) ENTRADA: numTrab, nombres[ ], sueldos[ ] SALIDA: nombres[ ], sueldoPromedio INICIO COMENTARIO “Declaración de variables” NUMERO i, numTrab, sueldos[ ] NUMERO sueldoMayor = 0, sumaSueldos = 0, sueldoPromedio TEXTO nombres[ ] COMENTARIO “Determinación del tamaño del arreglo” HACER LEER numTrab SI (numTrab <= 0 ) ENTONCES ESCRIBIR “Número de trabajadores no válido… ” FINSI MIENTRAS (numTrab <= 0 ) COMENTARIO “Creación de los arreglos” CREAR nombres [numTrab] CREAR sueldos [numTrab] COMENTARIO “Ingreso de nombres y sueldos de trabajadores” DESDE i = 0 HASTA i = numTrab - 1 INCREMENTA 1 HACER COMENTARIO “ Ingreso de nombre de trabajadores ” LEER nombres[i] nombres[i] = nombres[i] ELIMINAESPACIO INICIO,FIN SI ( LONGITUD nombres[i] < 3 ) ENTONCES ESCRIBIR “Nombre del trabajador no válido...” FINSI MIENTRAS ( LONGITUD nombres[i] < 3 ) HACER COMENTARIO “ Ingreso de sueldo de trabajadores ” LEER sueldos[i] SI ( sueldos[i] <= 0 ) ENTONCES ESCRIBIR “Sueldo de trabajador no válido...” FINSI MIENTRAS ( sueldos[i] <= 0 ) FINDESDE Pag. 497 Ing. Juan José Flores Cueto. Continúa… 4. Diseño de algoritmo para el método principal. Algoritmo PrgTrabajadores06 - método main ( ) COMENTARIO “Determinando el nombre de los trabajador con el sueldo mas alto” DESDE i = 0 HASTA i = numArt - 1 INCREMENTA 1 SI ( i = 0 ) ENTONCES sueldoMayor = sueldos[i] SINO SI ( sueldoMayor < sueldo[i] ) ENTONCES sueldoMayor = sueldo[i] FINSI FINSI FINDESDE DESDE i = 0 HASTA i = numArt - 1 INCREMENTA 1 SI (sueldoMayor = sueldo[i] ) ENTONCES ESCRIBIR nombres[i] SINO FINDESDE COMENTARIO “Determinando el promedio del sueldo de todos los trabajadores” DESDE i = 0 HASTA i = numArt - 1 INCREMENTA 1 sumaSueldos = sumaSueldos + sueldos[i] FINDESDE sueldoPromedio = sumaSueldos / numTrab sueldoPromedio = sueldoPromedio REDONDEA 2 ESCRIBIR sueldoPromedio FIN Pag. 498 import biblioteca. public class PrgTrabajadores06 { public static void main(String[] args) { // Declaración de variables. sueldos[i] = Lectura. do { System.Desarrollo de la Codificación.out.out.print ( “ Ingrese el número de trabajadores : ” ) .trim( ) .println ( “ El sueldo del trabajador no es válido… ” ) .length( ) < 3 ) { System. double sueldoMayor = 0. sumaSueldos = 0. nombres[i] = Lectura. if ( nombres[i]. Etapa 04 .out.println ( “ El nombre del trabajador no es válido… ” ) .print ( “ Ingrese el sueldo del trabajador [ ” + ( i + 1) + “ ]: ” ) . if ( sueldos[i] <= 0 ) { System. Clase PrgTrabajadores06 package dominioDeLaAplicacion . } } while (sueldos[i] <= 0 ) .out.out. double sueldos[ ] = new double [numTrab] .length( ) < 3 ) . numTrab .ESTRUCTURAS DE DATOS – Arreglos. int i.leerString( ) . } } while ( nombres[i].* .leerInt( ) . sueldoPromedio . 499 . nombres[i] = nombres[i].println ( “ El número de trabajadores no es válido… Reintente! ” ) .out.leerString( ) . if ( numTrab <= 0 ) { System. for ( i = 0 . // Declaración y creación del arreglo.print ( “ Ingrese el nombre del trabajador [ ” + ( i + 1) + “ ]: ” ) . } } while ( numTrab <= 0 ) . } Pag. // Ingreso de nombres y sueldos de trabajadores con consistencia de datos. do { System. // Determinación del tamaño de los arreglos con consistencia de datos. numTrab = Lectura. i++ ) { do { System. i < numTrab . String nombres[ ] = new String [numTrab] . i++ ) { sumaSueldos = sumaSueldos + sueldos[i] . } else { if ( sueldoMayor < sueldos[i] ) { sueldoMayor = sueldos[i] . } } // Determinando el promedio del sueldo de todos los trabajadores. Ing. sueldoPromedio = ( Math. } sueldoPromedio = sumaSueldos / numTrab .out. for ( i = 0 .println ( “ Nombres de los trabajadores con el sueldo más alto ” ) .println ( “ El sueldo promedio de los trabajadores es: ” + sueldoPromedio ) . } } } System.Desarrollo de la Codificación. for ( i = 0 .round (sueldoPromedio * 100) ) / 100. i < numTrab . i++ ) { if ( sueldoMayor == sueldos[i] ) { System.println ( “ ” + nombres[i] ) .0 . Clase PrgTrabajadores06 // Determinando el nombre de los trabajadores con el sueldo mas alto. } } Pag.out. i < numTrab . Juan José Flores Cueto. i < numTrab . i++ ) { if ( i == 0 ) { sueldoMayor = sueldos[i] . System. 500 .out. Continúa… Etapa 04 . for ( i = 0 . el nombre. se determina el número de socios cuyo nombre comienza con la letra ‘D’. Después. se convierte a mayúscula y se almacenan en otro de los arreglos creado (sexos[]). se procede a ingresar el sexo de los socios (M = Masculino y F = Femenino). Por último. Con el número de socios se crean tres arreglos (nombres[]. el sexo y la edad de todos los socios de un club.Definición de la solución.sexos[] y edades[]). Luego se procede a ingresar el nombre de los socios. ‰ Datos necesarios: El número de socios y. se eliminan los espacios del inicio y final de los mismos. 501 . 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”. sexo y edad de cada socio. se determina el número de socios hombres. ‰ Procesamiento: El número de socios se ingresa a través del teclado y se almacena en una variable (numSoc). ‰ Resultado deseado: Mostrar el número de socios hombres mayores de edad y el número de socios cuyo nombre comienza con la letra “D”. Problema 147 Etapa 01 . Luego. mayores de edad. Para esto se evalúan los datos de cada uno de los socios y si resulta que es hombre (sexo = ‘M’) y es mayor de edad (edad >= 18). entonces se aumenta 1 a una variable de tipo contador (totalMayoresHombres). Luego.ESTRUCTURAS DE DATOS – Arreglos. Etapa 02 . Para esto se obtiene la primera letra del nombre de Pag. Finalizada la evaluación de los datos de todos los socios se muestra el contenido de la variable totalMayoresHombres. y se almacenan en uno de los arreglos creados (nombres[]).Descripción del problema. se ingresan las edades de los socios y se almacenan en el tercer arreglo (edades[]). Desarrollar una solución que permita ingresar y almacenar el nombre. Finalizada la evaluación se muestra el contenido de la variable totalNombresD. 502 . Diagrama de paquetes 3. Definición de las Clases. Nombre del Proyecto: ProySocios. cada socio y se almacena en una variable (letra).Diseño de la lógica. entonces se aumenta 1 a otra variable tipo contador (totalNombresD). Clases Clases dominioDeLaAplicacion biblioteca Pag. Si letra = ‘D’. Ing. 1. Etapa 03 . Juan José Flores Cueto. se convierte a mayúscula y se compara con la letra ‘D’. Definición de Paquetes y desarrollo del Diagrama de Paquetes. 2. sexos[ ]. FIN SI ( LONGITUD nombres[i] < 3 ) ENTONCES ESCRIBIR “Nombre del socio no válido.. edades[ ] SALIDA: totalMayoresHombres. totalNombresD = 0 TEXTO nombres[ ].método main ( ) ENTRADA: numSoc. 4. 503 . nombres[ ].1 INCREMENTA 1 HACER COMENTARIO “ Ingreso de nombre de socios ” LEER nombres[i] nombres[i] = nombres[i] ELIMINAESPACIO INICIO.” FINSI MIENTRAS ( sexos[i] <> ‘M’ OR sexos[i] <> ’F’ ) Pag.. Algoritmo PrgSocios01 ..ESTRUCTURAS DE DATOS – Arreglos. letra COMENTARIO “Determinación del tamaño del arreglo” HACER LEER numSoc SI (numSoc <= 0 ) ENTONCES ESCRIBIR “Número de socios no válido… ” FINSI MIENTRAS (numSoc <= 0 ) COMENTARIO “Creación de los arreglos” CREAR nombres [numSoc] CREAR sexos [numSoc] CREAR edades [numSoc] COMENTARIO “Ingreso de nombres.. edades[ ] NUMERO totalMayoresHombres = 0.” FINSI MIENTRAS ( LONGITUD nombres[i] < 3 ) HACER COMENTARIO “ Ingreso de sexo de socios ” LEER sexos[i] sexos[i] = MAYUSCULA sexos[i] SI ( sexos[i] <> ‘M’ OR sexos[i] <> ’F’ ) ENTONCES ESCRIBIR “Sexo de socio no válido. numSoc. totalNombresD INICIO COMENTARIO “Declaración de variables” NUMERO i. sexos[ ]. sexo y edad de los socios ” DESDE i = 0 HASTA i = numSoc . Diseño de algoritmo para el método principal. Ing..” FINSI MIENTRAS ( edades[i] <= 0 ) FINDESDE COMENTARIO “Determinando número de socios hombres mayores de edad” DESDE i = 0 HASTA i = numSoc .1 INCREMENTA 1 SI ( edades[i] >= 18 AND sexos[i] = ‘M’ ) ENTONCES totalMayorHombres = totalMayorHombres + 1 FINSI FINDESDE ESCRIBIR totalMayorHombres COMENTARIO “Determinando el promedio del sueldo de todos los trabajadores” DESDE i = 0 HASTA i = numSoc . Algoritmo PrgSocios01 .. 504 . Diseño de algoritmo para el método principal. Juan José Flores Cueto.1 INCREMENTA 1 letra = nombres[i] CARACTER 0 letra = MAYUSCULA letra SI ( letra = ‘D’ ) ENTONCES totalNombresD = totalNombresD + 1 FINSI FINDESDE ESCRIBIR totalNombresD FIN Pag. Continúa… 4.método main ( ) HACER COMENTARIO “ Ingreso de edad de socios ” LEER edades[i] SI ( edades[i] <= 0 ) ENTONCES ESCRIBIR “Edad de socio no válida. String nombres[ ] = new String [numSoc] .* . nombres[i] = nombres[i]. sexos[i] = Character. } } while ( numSoc <= 0 ) . int edades[ ] = new int [numSoc] . numSoc.toUpperCase( sexos[i] ) . Clase PrgSocios01 package dominioDeLaAplicacion . // Determinación del tamaño de los arreglos con consistencia de datos. i < numSoc .leerChar( ) . // Ingreso de nombre. for ( i = 0 . if ( numSoc <= 0 ) { System.length( ) < 3 ) . Pag.println ( “ El número de socios no es válido… Reintente! ” ) . totalMayoresHombres = 0.out. sexo y edad de los socios con consistencia de datos. totalNombresD = 0 . char sexos[ ] = new char [numSoc] .println ( “ El sexo del trabajador no es válido… ” ) .trim( ) . 505 .println ( “ El nombre del socio no es válido… ” ) .leerInt( ) .out.print ( “ Ingrese el número de socios : ” ) . } } while ( nombres[i].length( ) < 3 ) { System. if ( sexos[i] != ‘M’ || sexos[i] != ‘F’ ) { System. if ( nombres[i]. i++ ) { do { System.print ( “ Ingrese el nombre del socio [ ” + ( i + 1) + “ ]: ” ) . public class PrgSocios01 { public static void main(String[] args) { // Declaración de variables.leerString( ) . nombres[i] = Lectura.out. sexos[i] = Lectura. do { System.print ( “ Ingrese el sexo del trabajador [ ” + ( i + 1) + “ ]: ” ) . import biblioteca.Desarrollo de la Codificación. char letra .out. int i. numSoc = Lectura.ESTRUCTURAS DE DATOS – Arreglos.out. } } while ( sexos[i] != ‘M’ || sexos[i] != ‘F’ ) . do { System. // Declaración y creación del arreglo. Etapa 04 .out. i++ ) { letra = nombres[i]. System. } } while ( edades[i] <= 0 ) . // Determinando el número de socios cuyo nombre comienza con la letra D. Clase PrgSocios01 do { System.out.out. Continúa… Etapa 04 . i++ ) { if ( edades[i] >= 18 && sexos[i] == ‘M’ ) { totalMayoresHombres ++ . if ( letra == ‘M’ ) { totalNombresD ++ . 506 . letra = carácter.println ( “ La edad del socio no es válida… ” ) . } // Determinando el número de socios hombres mayores de edad.out.out.println ( totalNombresD ) .charAt(0) .leerInt( ) .out.out. Ing.print ( “ El número de socios hombres mayores de edad es : ” ) . edades[i] = Lectura. Juan José Flores Cueto.Desarrollo de la Codificación.println ( totalMayoresHombres ) . i < numSoc .print ( “ Ingrese la edad del socio [ ” + ( i + 1) + “ ]: ” ) . System.toUpperCase(letra) . if ( edades[i] <= 0 ) { System. } } Pag. for ( i = 0 .print ( “ El número de socios cuyo nombre comienza con la letra D es : ” ) . } } System. } } System. i < numSoc . for ( i = 0 . se eliminan los espacios del inicio y final de los mismos.Definición de la solución. El precio de compra se almacena en la primera columna del arreglo y el precio de venta se almacena en la segunda columna. Después.ESTRUCTURAS DE DATOS – Arreglos. Desarrollar una solución que permita ingresar y almacenar el nombre. Problema 148 Etapa 01 . Con el número de artículos se crean dos arreglos. Indicar el nombre de cada artículo y su margen de utilidad. se almacena el resultado en una variable (utilidad) y se muestra el nombre del artículo junto con su utilidad.Descripción del problema. Luego se procede a ingresar el nombre de los artículos. ‰ Resultado deseado: Mostrar el nombre de cada artículo y su margen de utilidad. y se almacenan en el otro arreglo creado (precios[ ][ ]). Pag. Luego. 507 . se procede a ingresar el precio de compra y el precio de venta. un vector y una matriz con dos columnas (nombres[ ] y precios[ ][ ]). el nombre. ‰ Datos necesarios: El número de artículos y. se determina la utilidad de cada artículo. el precio de compra y el precio de venta de todos los artículos de una bodega. el precio de compra y el precio de venta de cada artículo. y se almacenan en uno de los arreglos creados (nombres[ ]). Etapa 02 . ‰ Procesamiento: El número de artículos se ingresa a través del teclado y se almacena en una variable (numArt). el precio de venta del artículo se resta de su precio de compra. Para esto. Nombre del Proyecto: ProyArticulos. Definición de Paquetes y desarrollo del Diagrama de Paquetes. 2. 508 . Juan José Flores Cueto. Clases Clases dominioDeLaAplicacion biblioteca Pag. Etapa 03 . Definición de las Clases.Diseño de la lógica. Diagrama de paquetes 3. Ing. 1. FIN SI ( LONGITUD nombres[i] < 3 ) ENTONCES ESCRIBIR “Nombre del artículo no válido.ESTRUCTURAS DE DATOS – Arreglos. numArt. utilidad INICIO COMENTARIO “Declaración de variables” NUMERO i. Algoritmo PrgArticulos06 . precio de compra y precio de venta de los artículos ” DESDE i = 0 HASTA i = numArt ..1 INCREMENTA 1 HACER COMENTARIO “ Ingreso de nombre de artículo ” LEER nombres[i] nombres[i] = nombres[i] ELIMINAESPACIO INICIO. utilidad TEXTO nombres[ ] COMENTARIO “Determinación del tamaño del arreglo” HACER LEER numArt SI (numArt <= 0 ) ENTONCES ESCRIBIR “Número de artículos no válido… ” FINSI MIENTRAS (numArt <= 0 ) COMENTARIO “Creación de los arreglos” CREAR nombres [numArt] CREAR precios [numArt][2] COMENTARIO “Ingreso de nombre. precios[ ][ ]. 509 . 4.. precios[ ][ ] SALIDA: nombres[ ].” FINSI MIENTRAS ( precios[i][0] <= 0 ) Pag.. Diseño de algoritmo para el método principal.método main ( ) ENTRADA: numArt.” FINSI MIENTRAS ( LONGITUD nombres[i] < 3 ) HACER COMENTARIO “ Ingreso de precio de compra ” LEER precios[i][0] SI ( precios[i][0] <= 0 ) ENTONCES ESCRIBIR “Precio de compra no válido.. nombres[ ]. ” FINSI MIENTRAS ( precios[i][1] <= 0 ) FINDESDE COMENTARIO “Determinando la utilidad de cada artículo ” DESDE i = 0 HASTA i = numArt . 510 . utilidad FINDESDE FIN Pag. Diseño de algoritmo para el método principal..1 INCREMENTA 1 utilidad = precios[i][1] – precios[i][0] ESCRIBIR nombres[i]. Juan José Flores Cueto. Ing. Algoritmo PrgArticulos06 . Continúa… 4.método main ( ) HACER COMENTARIO “ Ingreso de precio de venta ” LEER precios[i][1] SI ( precios[i][1] <= 0 ) ENTONCES ESCRIBIR “Precio de venta no válido.. out. numArt . } } while ( precios[i][0] <= 0 ) . nombres[i] = nombres[i]. import biblioteca. double edades[ ] = new double [numArt][2] .out.out. Etapa 04 . numArt = Lectura.* .Desarrollo de la Codificación. for ( i = 0 . if ( nombres[i].trim( ) . public class PrgArticulos06 { public static void main(String[] args) { // Declaración de variables.out. 511 .println ( “ El nombre del artículo no es válido… ” ) .leerString( ) . if ( numArt <= 0 ) { System.leerDouble( ) .println ( “ Precio de compra no válido… ” ) . i < numArt . double utilidad . do { System. Pag. i++ ) { do { System. // Determinación del tamaño de los arreglos con consistencia de datos.length( ) < 3 ) .leerInt( ) .print ( “ Ingrese el número de artículos : ” ) .out. do { System. // Declaración y creación del arreglo. int i.out. } } while ( numArt <= 0 ) . precios[i][0] = Lectura. nombres[i] = Lectura.print ( “ Ingrese su precio de compra : ” ) .println ( “ El número de artículos no es válido… Reintente! ” ) .ESTRUCTURAS DE DATOS – Arreglos.length( ) < 3 ) { System. precio de compra y precio de venta de los artículos. } } while ( nombres[i].print ( “ Ingrese el nombre del artículo [ ” + ( i + 1) + “ ]: ” ) . Clase PrgArticulos06 package dominioDeLaAplicacion . if ( precios[i][0] <= 0 ) { System. // Ingreso de nombre. String nombres[ ] = new String [numArt] . } } while ( precios[i][1] <= 0 ) . Continúa… Etapa 04 . Ing. i++ ) { utilidad = precios[i][1] – precios[i][0] .println ( “ Precio de venta no válido… ” ) . Clase PrgArticulos06 do { System. } } } Pag. System. for ( i = 0 .leerDouble( ) . precios[i][1] = Lectura.out. i < numArt . Juan José Flores Cueto. System.out. 512 . if ( precios[i][1] <= 0 ) { System.out.print ( “ Ingrese su precio de venta : ” ) .Desarrollo de la Codificación.” ) .println ( “ ” + utilidad + “.print ( “ El artículo : ” + nombres[i] + “ tiene una utilidad de ” ) . } // Determinando la utilidad de cada artículo.out. Problema 149 Etapa 01 . ‰ Resultado deseado: Mostrar el nombre. y se almacenan en uno de los arreglos creados (nombres[]). Luego se determina el promedio mayor y se almacena Pag. Luego.Descripción del problema. Después se muestra el nombre. Con el número de alumnos y el número de notas se crean cuatro arreglos. el código y el promedio de cada alumno. notas[][] y promedios[][]). Adicionalmente. Después. se redondea y esta a su vez se almacena en el arreglo promedios[]. tres vectores y una matriz (nombres[]. se procede a ingresar el código de los alumnos y se almacenan en otro arreglo (codigos[]). el código y las notas de cada alumno. Desarrollar una solución que permita ingresar y almacenar el nombre. Etapa 02 .Definición de la solución. el nombre. ‰ Procesamiento: El número de alumnos y el número de notas se ingresa a través del teclado y se almacena en variables (numAlu y numNot respectivamente). ‰ Datos necesarios: El número de alumnos y. El resultado se almacenada en otra variable (promAlu). indicar el nombre de los alumnos que obtuvieron el mayor promedio. Indicar el nombre. Para esto. el código y las diferentes notas de los alumnos de un salón de clase. Luego se procede a ingresar el nombre de los alumnos. Támbien se ingresan las notas de cada alumno y se almacenan en otro de los arreglos (notas[][]). codigos[]. 513 . Adicionalmente. se suman las notas del alumno y se almacenan en una variable (sumaNotas) y luego se divide entre el número de notas (numNot). el código y el promedio de notas de cada alumno.ESTRUCTURAS DE DATOS – Arreglos. Almacenar el promedio de notas de cada alumno. indicar el nombre de los alumnos que obtuvieron el mayor promedio. se determina el promedio de cada alumno y el promedio mayor. el código y el promedio de notas de cada alumno. en una variable (promAluMayor). 1. 514 . Nombre del Proyecto: ProyAlumnos. Diagrama de paquetes 3. Etapa 03 .Diseño de la lógica. Finalmente. 2. Ing. Definición de las Clases. Clases Clases dominioDeLaAplicacion biblioteca Pag. se muestran los nombres de todos los alumnos que tienen promedio igual a promAluMayor. Juan José Flores Cueto. Definición de Paquetes y desarrollo del Diagrama de Paquetes. método main ( ) ENTRADA: numAlu. codigos[ ]. notas[ ][ ]. 515 . Diseño de algoritmo para el método principal. codigos[ ]. 4. j.” FINSI MIENTRAS ( LONGITUD nombres[i] < 3 ) Pag.ESTRUCTURAS DE DATOS – Arreglos. nomNot. Algoritmo PrgAlumnos06 . notas[ ][ ] SALIDA: nombres[ ]. numAlu. numNot. promAluMayor = 0 TEXTO nombres[ ] COMENTARIO “Determinación del tamaño del arreglo” HACER LEER numAlu SI (numAlu <= 0 ) ENTONCES ESCRIBIR “Número de alumnos no válido… ” FINSI MIENTRAS (numAlu <= 0 ) HACER LEER numNot SI (numNot <= 0 ) ENTONCES ESCRIBIR “Número de notas no válido… ” FINSI MIENTRAS (numNot <= 0 ) COMENTARIO “Creación de los arreglos” CREAR nombres [numAlu] CREAR codigos [numAlu] CREAR notas [numAlu][numNot] CREAR promedios[numAlu] COMENTARIO “Ingreso de nombre. promedios[ ] INICIO COMENTARIO “Declaración de variables” NUMERO i.FIN SI ( LONGITUD nombres[i] < 3 ) ENTONCES ESCRIBIR “Nombre del alumno no válido. promedios[ ] NUMERO sumaNotas = 0.. codigo y notas de todos los alumnos ” DESDE i = 0 HASTA i = numAlu . codigos[ ]. nombre[ ].. promAlu = 0.1 INCREMENTA 1 HACER LEER nombres[i] nombres[i] = nombres[i] ELIMINAESPACIO INICIO. 1 INCREMENTA 1 sumaNotas = sumaNotas + notas[i][j] FINDESDE promAlu = sumaNotas / numNot promAlu = promAlu REDONDEA 2 promedio[i] = promAlu ESCRIBIR nombres[i]. Continúa… 4.1 INCREMENTA 1 sumaNotas = 0 DESDE j = 0 HASTA j = numNot .” FINSI MIENTRAS ( notas[i][j] < 0 OR notas[i][j] > 20 ) FINDESDE FINDESDE COMENTARIO “Determinando el promedio de cada alumno y el promedio mayor ” DESDE i = 0 HASTA i = numAlu . codigos[i].. 516 .. Ing.1 INCREMENTA 1 SI ( promedios[i] = promAluMayor ) ENTONCES ESCRIBIR nombres[i] FINSI FINDESDE FIN Pag.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...método main ( ) HACER LEER codigos[i] SI ( codigos[i] < 100000 OR codigos[i] > 999999 ) ENTONCES ESCRIBIR “Código ingresado no válido. Juan José Flores Cueto. Diseño de algoritmo para el método principal. promedios[i] SI ( i = 0 ) ENTONCES promAluMayor = promAlu SINO SI ( promAluMayor < promAlu ) ENTONCES promAluMayor = promAlu FINSI FINSI FINDESDE COMENTARIO “Mostrando los alumnos con el promedio mayor” DESDE i = 0 HASTA i = numAlu .” FINSI MIENTRAS ( codigos[i] < 100000 OR codigos[i] > 999999 ) DESDE j = 0 HASTA j = numNot . Algoritmo PrgAlumnos06 . ESTRUCTURAS DE DATOS – Arreglos. Etapa 04 - Desarrollo de la Codificación. Clase PrgAlumnos06 package dominioDeLaAplicacion ; import biblioteca.* ; public class PrgAlumnos06 { public static void main(String[] args) { // Declaración de variables. int i, j, numAlu, numNot ; double sumaNotas = 0, promAlu = 0, promAluMayor = 0 ; // Determinación del tamaño de los arreglos con consistencia de datos. do { System.out.print ( “ Ingrese el número de alumnos : ” ) ; numAlu = Lectura.leerInt( ) ; 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 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 ) ; // Declaración y creación del arreglo. String nombres[ ] = new String [numAlu] ; long codigos[ ] = new long [numAlu] ; double notas[ ][ ] = new double [numAlu][numNot] ; double promedios[ ] = new double [numAlu] ; // Ingreso de nombre, precio de compra y precio de venta de los artículos. for ( i = 0 ; i < numAlu ; i++ ) { do { System.out.print ( “ Ingrese el nombre del alumno [ ” + ( i + 1) + “ ]: ” ) ; nombres[i] = Lectura.leerString( ) ; nombres[i] = nombres[i].trim( ) ; 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. Continúa… Etapa 04 - Desarrollo de la Codificación. 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 ) ; } } // Determinando el promedio de cada alumno y el promedio mayor. for ( i = 0 ; i < numAlu ; i++ ) { sumaNotas = 0 ; for ( j = 0 ; j < numNot ; j++ ) { sumaNotas = sumaNotas + notas[i][j] ; } promAlu = sumaNotas / numNot ; promAlu = ( Math.round (promAlu * 100) ) / 100.0 ; promedios[i] = promAlu ; System.out.print ( “ El alumno ” + nombres[i] + “ con código ” + codigos[i] ) ; System.out.println ( “ tiene un promedio de ” + promedios[i] + “.” ) ; System.out.println ( ) ; if ( i == 0 ) { promAluMayor = promAlu ; } else { if ( promAluMayor < promAlu ) { promAluMayor = promAlu ; } } } // Mostrando los alumnos con el promedio mayor. System.out.println ( “ Alumnos que tienen el mayor promedio : ” ) ; for ( i = 0 ; i < numAlu ; i++ ) { if ( promedios[i] == promAluMayor ) { System.out.println ( nombres[i] ; } } } } Pag. 518 ESTRUCTURAS DE DATOS – Arreglos. Problema 150 Etapa 01 - Descripción del problema. 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. Etapa 02 - Definición de la solución. ‰ Resultado deseado: Mostrar los nombres ordenados alfabéticamente, considerando la primera letra de cada nombres en letra mayúscula y el resto en letra minúscula. Adicionalmente mostrar la longitud de cada uno de los nombres de los artículos. ‰ Datos necesarios: El número de artículos y el nombre de cada uno de los artículos. ‰ Procesamiento: El número de artículos se ingresa a través del teclado y se almacena en una variable (numArt). Con el número de artículos se crea un arreglo (articulos[ ]). Luego se procede a ingresar el nombre de los artículos de la bodega, se eliminan los espacios del inicio y final del nombre, y se almacenan en el arreglo creado. Después se ordenan los nombres utilizando el método de ordenación por Intercambio. Finalizado el método de ordenación, para cada uno de los nombres, se obtiene la primera letra, se almacena en una variable (letra) y se convierte en mayúscula. Luego, se obtiene las demás letras, se almacenan en una variable (resto) y se convierten en minúscula. También, se determina la longitud del nombre y se almacena en una variable (tamaño). Finalmente, se muestra la primera letra del nombre en mayúscula, las demás letras en minúscula y la longitud del nombre por pantalla. Pag. 519 Ing. Juan José Flores Cueto. Etapa 03 - Diseño de la lógica. 1. Nombre del Proyecto: ProyArticulos. 2. Definición de Paquetes y desarrollo del Diagrama de Paquetes. Diagrama de paquetes 3. Definición de las Clases. Clases Clases dominioDeLaAplicacion biblioteca Pag. 520 ESTRUCTURAS DE DATOS – Arreglos. 4. Diseño de algoritmo para el método principal. Algoritmo PrgArticulos07 - método main ( ) ENTRADA: numArt, articulos[ ] SALIDA: letra, resto, tamaño INICIO COMENTARIO “Declaración de variables” NUMERO i, j, numArt, tamaño TEXTO articulos[ ], letra, resto, x COMENTARIO “Determinación del tamaño del arreglo” HACER LEER numArt SI (numArt <= 0 ) ENTONCES ESCRIBIR “Número de artículos no válido… ” FINSI MIENTRAS (numArt <= 0 ) COMENTARIO “Creación del arreglo” CREAR articulos [numArt] COMENTARIO “Ingreso de datos al arreglo articulos [ ]” DESDE i = 0 HASTA i = numArt - 1 INCREMENTA 1 HACER LEER articulos[i] articulos[i] = articulos[i] ELIMINAESPACIO INICIO, FIN SI ( LONGITUD articulos[i] < 3 ) ENTONCES ESCRIBIR “Nombre de artículo no válido...” FINSI MIENTRAS (LONGITUD articulos[i] < 3 ) FINDESDE COMENTARIO “Método de Intercambio. Ordenación de datos ” DESDE i = 0 HASTA i = numArt - 2 INCREMENTA 1 DESDE j = i + 1 HASTA i = numArt - 1 INCREMENTA 1 SI ( articulos[i] > articulos[j] ) ENTONCES x = articulos[i] articulos[i] = articulos[j] articulos[i] = x FINSI FINDESDE FINDESDE Pag. 521 Ing. Juan José Flores Cueto. Continúa… 4. Diseño de algoritmo para el método principal. Algoritmo PrgArticulos07 - método main ( ) COMENTARIO “ Manipulación del nombre de los artículos ” DESDE i = 0 HASTA i = numArt - 1 INCREMENTA 1 letra = articulos[i] SUBCADENA 0,1 letra = MAYUSCULA letra resto = articulos[i] SUBCADENA 1 resto = MINUSCULA resto tamaño = LONGITUD articulos[i] ESCRIBIR letra, resto, tamaño FINDESDE FIN Etapa 04 - Desarrollo de la Codificación. Clase PrgArticulos07 package dominioDeLaAplicacion ; import biblioteca.* ; public class PrgArticulos07 { public static void main(String[] args) { // Declaración de variables. int i, j, numArt, tamaño ; String letra, resto, x ; // Determinación del tamaño del arreglo con consistencia de datos. do { System.out.print ( “ Ingrese el número de artículos : ” ) ; numArt = Lectura.leerInt( ) ; if ( numArt <= 0 ) { System.out.println ( “ El número de artículos no es válido… Reintente! ” ) ; } } while ( numArt <= 0 ) ; // Declaración y creación del arreglo. String articulos[ ] = new String [numArt] ; Pag. 522 ESTRUCTURAS DE DATOS – Arreglos. Continúa… Etapa 04 - Desarrollo de la Codificación. Clase PrgArticulos07 // Ingreso de datos al arreglo artículos[ ] con consistencia de datos. for ( i = 0 ; i < numArt ; i++ ) { do { System.out.print ( “ Ingrese el nombre del artículo [ ” + ( i + 1) + “]: ” ) ; articulos[i] = Lectura.leerString( ) ; articulos[i] = articulos[i].trim( ) ; if ( articulos[i].length( ) < 3 ) { System.out.println ( “ El nombre ingresado no es válido… Reintente! ” ) ; } } while ( articulos[i].length( ) < 3 ) ; } // Método de Intercambio. Ordenación de datos. for ( i = 0 ; i < numArt – 1 ; i++ ) { for ( j = i + 1; j < numArt ; j++ ) { if ( articulos[i].compareTo(articulos[j] ) > 0 ) { x = articulos[i] ; articulos[i] = articulos[j] ; articulos[j] = x ; } } } // Manipulación del nombre de los artículos. for ( i = 0 ; i < numArt ; i++ ) { letra = articulos[i].substring(0,1) ; letra = letra.toUpperCase( ); resto = articulos[i].substring(1) ; resto = resto].toLowerCase( ) ; tamaño = articulos[i].length( ) ; System.out.println ( “ Artículo ” + letra + resto + “ tiene una longitud de ” + tamaño ) ; } } } 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. Método de las 6´D. Etapas y pasos. Problema desarrollado. INTRODUCCIÓN AL DESARROLLO DE SOLUCIONES ORIENTADAS A OBJETOS CAPÍTULO V INTRODUCCIÓN AL DESARROLLO DE SOLUCIONES ORIENTADAS A OBJETOS INTRODUCCIÓN La clase constituye la base de la programación orientada a objetos y es el núcleo o unidad fundamental de encapsulación en Java. Cualquier concepto que desee desarrollar en Java debe ser encapsulado en una clase. Una clase se usa para crear objetos. 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. Observe la solución del siguiente problema utilizando el método de las 6’D: Etapa 01 - Descripción del problema. Calcular el promedio final de un alumno. Utilice la siguiente fórmula: prom = (nota1 + nota2 + nota3) / 3. Ingrese las notas nota1, nota2 y nota3 a través del teclado. Etapa 02 - Definición de la solución. ƒ Resultado deseado: Mostrar la nota final de un determinado alumno. ƒ Datos necesarios: Las notas del alumno (en esta caso tenemos 3 notas). ƒ Procesamiento: La 3 notas serán ingresadas por teclado y almacenadas en las variables nota1, nota2, y nota3. Luego, se realizará el cálculo de la nota final sobre la base de la siguiente fórmula: prom = (nota1 + nota2 + nota3) / 3. El resultado se almacenará en una variable (prom) para luego ser mostradas por pantalla. Etapa 03 - Diseño de la lógica. ƒ Nombre del Proyecto: ProyAlumno. Pag. 528 nota2. nota3. 529 . Diagrama de paquetes ƒ Definición de las Clases. prom LEER nota1.INTRODUCCIÓN AL DESARROLLO DE SOLUCIONES ORIENTADAS A OBJETOS ƒ Definición de Paquetes y desarrollo del Diagrama de Paquetes. nota2. nota3 prom = ( nota1 + nota2 + nota3) / 3 ESCRIBIR prom FIN Pag. Algoritmo PrgAlumno . Clases Clases dominioDeLaAplicacion biblioteca ƒ Diseño del algoritmo para el método principal. nota2. nota3 SALIDA: prom INICIO NUMERO nota1.método main() ENTRADA: nota1. println ( “Ingrese la nota 2 del alumno: ” ) . Al final. System. prom = ( nota1 + nota2 + nota3 ) / 3 . el Método de las 6D. System. se formalizará el método de solución.println ( “ El promedio obtenido por el alumno es ” + prom ) . En la clase PrgAlumno se define un método main() y dentro del mismo se codifica toda la solución. en forma progresiva. nota2. Etapa 04 . A partir de este punto. Clase PrgAlumno package dominioDeLaAplicacion . Como se ha mencionado.out.out. se revisarán algunos conceptos básicos y se presentarán. para incluir los conceptos presentados.out.println ( “Ingrese la nota 3 del alumno: ” ) . 530 .leerDouble( ) . class PrgAlumno { public static void main ( String arg [ ] ) { double nota1.println ( “Ingrese la nota 1 del alumno: ” ) . Ing. nota2 = Lectura.out. Todos estos nuevos conceptos presentados se incorporarán progresivamente en el ejemplo planteado. nota3. Para ello.leerDouble( ) . prom . nota1 = Lectura. Pag. } } En este proyecto ProyAlumno se crea un paquete dominioDeLaAplicación con una clase PrgAlumno la cual se utiliza en su forma más simple. System.Lectura .Desarrollo de la Codificación. System. las clases son mucho más poderosas que las presentadas hasta ahora.leerDouble( ) . se ampliará el conocimiento sobre las clases. nuevos conceptos hasta llegar al concepto de ocultamiento de atributos de instancia. import biblioteca. Juan José Flores Cueto. nota3 = Lectura. 531 .INTRODUCCIÓN AL DESARROLLO DE SOLUCIONES ORIENTADAS A OBJETOS Pag. Juan José Flores Cueto. Ing. Pag. 532 . El mundo real se modela mediante clases. } } Los datos o variables definidos en una clase se llaman atributos. los métodos y los atributos definidos dentro de una clase son los miembros de la clase. En conjunto. tipo variableInstanciaN . // METODOS tipo nombreMetodo1 (listaDeParámetros) { // cuerpo del método1. Pag. El formato general de una clase en Java es el siguiente: class NombreClase { // ATRIBUTOS tipo variableInstancia1 . El código está contenido en los métodos.. Una clase define un nuevo tipo de objeto.. } tipo nombreMetodo2 (listaDeParámetros) { // cuerpo del método2. tipo variableInstancia2 . tipo nombreMetodoN (listaDeParámetros) { // cuerpo del métodoN. // . Especifica una estructura de datos (atributos) y los métodos operativos permisibles que se aplican a cada uno de sus objetos. Las clases que se han utilizado anteriormente son ejemplos muy limitados en los que no aparece su formato general. 533 . Una clase es una abstracción y no referencia a ningún objeto en particular. En Java.INTRODUCCIÓN AL DESARROLLO DE SOLUCIONES ORIENTADAS A OBJETOS CONCEPTOS BÁSICOS CLASE Una clase es una implantación de un tipo de objeto. } //... una clase se declara utilizando la palabra reservada class. En el formato general de una clase no se especifica un método main(). Juan José Flores Cueto. Sin embargo. Solo necesitarán tener un método main() aquellas clases que tengan como función principal iniciar la ejecución del proyecto. La declaración de esta clase en Java es la siguiente: class Alumno { } Ahora. static o public static. 534 . Esto debido fundamentalmente a que todas las clases en Java no necesitan tener un método main(). es importante mencionar. Ing. Pag. el proyecto de solución ProyAlumno tiene definidas las clases PrgAlumno y Alumno en el paquete dominioDeLaAplicacion. que muchos métodos no se especificarán como public. En el proyecto de solución ProyAlumno se agregará una clase llamada Alumno. Los atributos definidos dentro de una clase. Todos los métodos tienen el mismo formato que el método main() utilizado en los ejemplos anteriores. permiten que los objetos o instancias de una clase puedan almacenar datos. 535 . • nombreClase es el nombre de la clase que está siendo instanciada. En dicha sentencia. cuando se crea un objeto no ocurre nada).INTRODUCCIÓN AL DESARROLLO DE SOLUCIONES ORIENTADAS A OBJETOS OBJETO Objetos: Modelos de entes del mundo. Es importante recordar que la definición de una clase sólo crea un molde. La definición de un objeto en Java comprende la declaración y la creación del mismo. Donde. En el proyecto de solución ProyAlumno se utilizará la clase Alumno para definir objetos de tipo Alumno a través de la siguiente sentencia: Alumno objAlumno = new Alumno ( ) . mientras que la definición de un objeto crea un objeto real o una instancia de una clase. Un constructor define que ocurre cuando se crea un objeto de una clase. se define el objeto objAlumno de la clase Alumno. Si no se especifica explícitamente el constructor. Pag. • nombreObjeto es el nombre del objeto que se desea crear. es decir se utiliza el constructor por defecto. Más adelante se verá la forma de definir métodos constructores en una clase. En el ejemplo. y se realiza utilizando la siguiente sentencia: NombreClase nombreObjeto = new NombreClase ( ) . Java automáticamente utiliza un constructor por defecto (es decir. modelo o patrón a partir del cual se pueden crear objetos. • new es un operador en Java que permite crear un objeto. la clase Alumno no define explícitamente un constructor. Un objeto de software es cualquier cosa real o abstracta acerca de la cual almacenamos datos y los métodos que controlan dichos datos. La mayoría de las clases del mundo real definen explícitamente sus propios constructores dentro de la definición de la clase. Para definir otros objetos de la clase Alumno solo se tendría que repetir la sentencia y cambiar el nombre del objeto. El nombre de la clase seguida por los paréntesis especifica el método constructor de la clase. tipo nombreAtributo. sirven para almacenar valores de los objetos que se instancian a partir de una clase. Si no se especifica lo contrario los atributos son de instancia y no de clase. • nombreAtributo especifica el nombre del atributo. Juan José Flores Cueto. arreglos u objetos que almacenan valores distintos para todos los objetos de una misma clase. areglos u objetos que almacenan el mismo valor para todos los objetos de una misma clase. Ing. son variables. incluido los tipos de Clase. en principio. Los atributos se clasifican en dos categorías: ƒ Atributos de Instancia. La forma mínima de un atributo es la siguiente. se ha creado la clase Alumno sin atributos ni métodos. es necesario conocer algunos conceptos básicas sobre los atributos. 536 . Para declarar un atributo de clase se utiliza la palabra reservada static. a partir de un atributo de clase sólo se crea una copia de ese atributo para todos los objetos que se instancien. Es decir. Los atributos de instancia conocidos también como atributos de objeto. Los atributos de clase son variables. ATRIBUTO Hasta este punto. ƒ Atributos de Clase. 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. Pag. Los atributos. para luego definirlos dentro de la clase Alumno. Ahora. que puede ser cualquier identificador válido diferente a los que se está utilizando en el mismo ámbito. Puede ser cualquier tipo válido. mientras que a partir de un atributo de instancia se crea una copia por cada objeto que se instancia. En otras palabras. Donde : • tipo especifica el tipo de dato que el atributo almacenará. class Alumno { double nota1 . Por ejemplo. el objeto objAlumno de la clase Alumno tendrá su propia copia de los atributos de instancia nota1 y nota2 con un valor para cada uno de ellos. Pag. objAlumno. En consecuencia. pero todavía no se han definido método.out. dentro del método main() de la clase PrgAlumno. El operador punto relaciona el nombre del objeto con el nombre de un atributo de instancia.INTRODUCCIÓN AL DESARROLLO DE SOLUCIONES ORIENTADAS A OBJETOS En el proyecto de solución ProyAlumno. Cuando se desea acceder a la copia de los atributos de instancia de un objeto se utiliza el operador punto (. Se agregarán algunos métodos a la clase Alumno mas adelante.nota1 = 15 .). se utilizarían las siguientes sentencias: objAlumno.println ( “ La nota del alumno es: ” + objAlumno. se declara y crea un objeto que contiene una copia de todos los atributos de instancia definidos para la clase. } En la clase Alumno solo se han definido dos atributos. si se desea asignar el valor 15 y 19 a los atributos de instancia nota1 y nota2 del objeto objAlumno. double nota2 . 537 . cada objeto que se defina de la clase Alumno tendrá su propia copia de los atributos de instancia nota1 y nota2. En el proyecto de solución ProyAlumno.nota1 ) . se definirá el objeto objAlumno de la clase Alumno. en la clase Alumno se definirá dos atributos de instancia llamados nota1 y nota2. También.nota2 = 19 . Si se desea mostrar el valor del atributo de instancia nota1 del objeto objAlumno se utilizaría la siguiente sentencia: System. tal y como se especificó anteriormente a través de la siguiente sentencia: Alumno objAlumno = new Alumno ( ) . distinto al valor de las copias de los atributos de instancia que otros objetos definidos puedan tener. Cada vez que se define un objeto de una clase. 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. objAlumno. objAlumno. } } Es importante recordar que ambas clases pertenecen al paquete dominioDeLaAplicacion y que el proyecto de solución se denomina ProyAlumno. 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. Juan José Flores Cueto.nota1 + objAlumno. para luego mostrar el mensaje “El promedio final del alumno es:” y el valor de la variable prom calculada.nota1 = 15 . System. double nota2 .nota2 ) / 2 . En el proyecto de solución ProyAlumno. // Primero declaramos y creamos un objeto de la clase Alumno.nota1 + objAlumno. System.out. para lo cual se utilizarían las siguientes sentencias: prom = ( objAlumno. el proyecto de solución ProyAlumno se desarrollaría de la siguiente manera: package dominioDeLaAplicacion . // Finalmente. // Ahora asignamos valores a las variables de instancia del objeto creado. Alumno objAlumno = new Alumno ( ) .println ( “ El promedio final del alumno es: ” + prom ) . Ing.nota2 ) / 2 . Al ejecutar el proyecto. Esta sentencia permite que se muestre el mensaje “La nota del alumno es:” y el valor del atributo nota1 del objeto objAlumno.println ( “El promedio final del alumno es: ” + prom ) .nota2 = 19 . 538 . Según lo mencionado anteriormente.out. class PrgAlumno { public static void main ( String args [ ] ) { double prom . } package dominioDeLaAplicacion . class Alumno { double nota1 . calculamos el promedio de notas del alumno objAlumno. se necesita calcular y mostrar el promedio del alumno. se ejecuta el método main() de la clase PrgAlumno y se obtiene el siguiente resultado: El promedio final del alumno es: 17 Pag. prom = ( objAlumno. se realizarán algunos cambios en el proyecto de solución ProyAlumno. } } Aquí el objeto objAlumno de la clase Alumno creado en el método main( ) de la clase PrgAlumno tiene su propia copia de los atributos de instancia nota1. prom = ( objAlumno. nota2 y nota3. objAlumno. calculamos el promedio de notas del alumno objAlumno. nota2. que se definan los atributos de instancia nota1. se puede separar sus nombres mediante comas (.nota3 = 11 . 539 . // Primero declaramos y creamos un objeto de la clase Alumno. // Finalmente.nota2 y nota3. 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. objAlumno.nota1 + objAlumno. Ahora. objAlumno.nota3 ) / 3 .nota2 + objAlumno. class PrgAlumno { public static void main ( String args [ ] ) { double prom . de tal forma. Se agregará un atributo de instancia en la definición de la clase Alumno. de la siguiente manera: package dominioDeLaAplicacion . } En base a esto.nota1 = 15 .println ( “ El promedio final del alumno es: ” + prom ) .out. nota2. class Alumno { double nota1. se modificará el método main() de la clase PrgAlumno para utilizar el atributo de instancia nota3. Es importante mencionar que si existen varios atributos del mismo tipo en una misma clase.) y declararlos con una solo sentencia.nota2 = 19 . } package dominioDeLaAplicacion . Tal y como se muestra a continuación: class Alumno { double nota1. nota3 . nota3 . // Ahora asignamos valores a las variables de instancia del objeto creado. Dicho método main( ) inicia la ejecución del proyecto y está definido en una de las clases que pertenecen al proyecto. System. Alumno objAlumno = new Alumno ( ) .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( ). nota3 ) / 3 . // Ahora asignamos valores a las variables de instancia del objeto objAlumno.println ( “ El promedio final del alumno es: ” + prom ) . 540 .nota1 + objAlumno. nota3 . se obtiene el siguiente resultado: El promedio final del alumno es: 15 El promedio final del alumno es: 11 El promedio final del alumno es: 14 Pag. Según lo mencionado anteriormente. System.println ( “ El promedio final del alumno es: ” + prom ) .out. objAlumno. Luego. objAlumno03. calculamos el promedio de notas del objeto objAlumno03.nota3 ) / 3 . objAlumno02. objAlumno02. // También asignamos valores a las variables de instancia del objeto objAlumno02. objAlumno.nota2 = 14 . Alumno objAlumno = new Alumno ( ) .nota2 + objAlumno. // También calculamos el promedio de notas del objeto objAlumno02. se les asignará valores a cada copia de los atributos de instancia nota1. prom = ( objAlumno03.out. Alumno objAlumno03 = new Alumno ( ) . objAlumno03. class PrgAlumno { public static void main ( String args [ ] ) { double prom . se definirán dos objetos más denominados objAlumno02 y objAlumno03 en el método main( ) de la clase PrgAlumno. el proyecto de solución ProyAlumno se desarrollaría de la siguiente manera: package dominioDeLaAplicacion . class Alumno { double nota1.nota1 = 11 . Juan José Flores Cueto.nota1 = 15 . valor distinto para cada atributo de instancia independiente de los valores que pueden tener los otros objetos.nota2 + objAlumno03. prom = ( objAlumno. } package dominioDeLaAplicacion .nota2 + objAlumno02. para finalmente calcular y mostrar el promedio de las notas de cada uno de los objeto de la clase Alumno.nota1 + objAlumno02. Ing. nota2 y nota3. // y a las variables de instancia del objeto objAlumno03.out.nota3 = 11 .nota3 = 11 .println ( “ El promedio final del alumno es: ” + prom ) .nota2 = 19 . // Primero declaramos y creamos tres objetos de la clase Alumno.nota3 ) / 3 . System.nota3 = 15 . objAlumno. } } Al ejecutar el proyecto (recuerde que cuando se ejecuta un proyecto en realidad se ejecuta el método main( ) ).nota1 + objAlumno03. // Finalmente. objAlumno03. objAlumno02. Alumno objAlumno02 = new Alumno ( ) .nota1 = 13 . Para esto. System. nota2.nota2 = 11 . prom = ( objAlumno02. // Calculamos el promedio de notas del objeto objAlumno. Esto se puede comprobar fácilmente definiendo más de un objeto en el proyecto de solución ProyAlumno. Pag. nota2 y nota3. 541 . y que los valores de un objeto son independientes de los otros valores que tienen los otros objetos.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. 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. 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. Un método representa un pequeño subprograma encapsulado dentro de una clase y contribuye a definir el comportamiento típico de los objetos. Generalmente. Mientras que a través de métodos de instancia se puede manipular tanto atributos de clase como atributos de instancia.nombreMétodoClase ( ) . La forma mínima de un método es la siguiente. Juan José Flores Cueto. 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. Los métodos especifican la forma en que se controlan los datos (atributos) de un objeto.nombreMétodoInstancia ( ) . Los métodos definen el comportamiento de un objeto. Un método de instancia se ejecuta utilizando el siguiente formato: nombreObjeto. son métodos que pueden ser llamados a través de un objeto instanciado a partir de una clase. mientras que para ejecutar un método de instancia se requiere crear primero un objeto de la clase donde está definido el método. Ing. conocidos también como métodos de objeto. 542 . Para declarar un método de clase se utiliza la palabra reservada static. ] Pag. Los métodos de instancia. tipo nombreMétodo ( listaDeParámetros ) { // Cuerpo del método . A través de métodos de clase se puede manipular solo atributos de clase. para ejecutar un método de clase se utiliza el siguiente formato: NombreClase. Los métodos se clasifican en dos categorías: ƒ Métodos de Instancia. En otras palabras. ƒ Métodos de Clase. • nombreMétodo especifica el nombre del método que puede ser cualquier identificador válido diferente de los que se están utilizando en el mismo ámbito.INTRODUCCIÓN AL DESARROLLO DE SOLUCIONES ORIENTADAS A OBJETOS Donde : • tipo especifica el tipo de dato devuelto por el método. incluido los tipos de clase. Los parámetros son variables que reciben el valor de los argumentos que se pasan al método cuando este es ejecutado. el tipo devuelto debe ser void. Puede ser cualquier tipo válido. Pag. Generalmente la sentencia return se coloca al final del cuerpo del método. • listaDeParámetros es una secuencia de parejas de tipo e identificador separados por comas. Los métodos que devuelven un tipo distinto de void. Si el método no tiene parámetros. Si el método no devuelve ningún valor. entonces la lista de parámetros estará vacía. Aquí valor es el dato que el método devuelve a la sentencia que lo ejecutó. 543 . devuelven un valor a la sentencia que ejecuta el método utilizando la siguiente forma de la sentencia return: return valor . promedio ( ) . // Primero declaramos y creamos tres objetos de la clase Alumno.nota1 = 15 . Juan José Flores Cueto. objAlumno02. objAlumno03. Alumno objAlumno = new Alumno ( ) . // Ahora asignamos valores a las variables de instancia del objeto objAlumno. objAlumno03. objAlumno03. // Calculamos el promedio de notas para cada alumno. nota3 .out. Como el promedio de notas depende de las notas. objAlumno.nota2 = 19 . // y a las variables de instancia del objeto objAlumno03. nota2. objAlumno. y permitirá calcular y mostrar el promedio de notas de un alumno. Ahora. se definirá un método dentro de la clase Alumno.nota1 = 11 .nota1 = 13 .nota3 = 11 . Metodo que no devuelven valor y no reciben parámetros Talvez se tengan algunos problemas para comprender los conceptos que rodean a los métodos. 544 . objAlumno03. Alumno objAlumno02 = new Alumno ( ) . System. objAlumno.println ( (nota1 + nota2 + nota3 ) / 3 ) .print ( “ El promedio final del alumno es: ” ) . void promedio ( ) { System. poco a poco conforme se modifique el proyecto de solución ProyAlumno se podrán comprender mejor. class Alumno { double nota1. } } package dominioDeLaAplicacion . Alumno objAlumno03 = new Alumno ( ) . objAlumno. } } Pag. // También asignamos valores a las variables de instancia del objeto objAlumno02. tiene mucho mas sentido que el cálculo lo realice la clase Alumno a través del método promedio( ). objAlumno02. Aunque. anteriormente.promedio ( ) . Ing. el cual se desarrolla a continuación: package dominioDeLaAplicacion .promedio ( ) .nota3 = 15 . class PrgAlumno { public static void main ( String args [ ] ) { double prom .nota2 = 14 .nota3 = 11 . objAlumno02. objAlumno02. esto ya se había realizado en la clase PrgAlumno es perfectamente válido haber pensado que esto era algo que había que hacer en la clase Alumno y no en la clase PrgAlumno. El método se llamará promedio( ).out.nota2 = 11 . El operador punto relaciona el nombre del objeto con el nombre de un método. nota2 = 14 y nota3 = 15 ).INTRODUCCIÓN AL DESARROLLO DE SOLUCIONES ORIENTADAS A OBJETOS Al ejecutar el proyecto se obtiene el siguiente resultado. 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. 545 . • objAlumno03. Al igual que para acceder a las variables de instancia. Se calcula y visualiza el promedio de notas del objeto objAlumno en base a los valores de su copia de los atributos de instancia ( nota1 = 15. objAlumno03. objAlumno02.promedio ( ) . permiten ejecutar el método promedio( ) definido en la clase Alumno: objAlumno. Es decir. Se calcula y visualiza el promedio de notas del objeto objAlumno03 en base a los valores de su copia de los atributos de instancia ( nota1 = 13. nota2 = 19 y nota3 = 11 ). • objAlumno. objAlumno.). para acceder a los métodos se utiliza el operador punto (. Pag. Se calcula y visualiza el promedio de notas del objeto objAlumno02 en base a los valores de su copia de los atributos de instancia ( nota1 = 11.promedio ( ) . el cual es igual al resultado anterior: El promedio final del alumno es: 15 El promedio final del alumno es: 11 El promedio final del alumno es: 14 Las tres líneas siguientes.promedio ( ) . • objAlumno02.promedio ( ) .promedio ( ) . nota2 = 11 y nota3 = 11 ). Así. se ejecuta el método promedio( ) utilizando el nombre de un objeto de la clase Alumno seguido por el operador punto.promedio ( ) .promedio ( ) . ubicadas dentro del método main( ) de la clase PrgAlumno. Analicemos la siguiente sentencia. cuando se ejecuta. por lo que no es necesario especificar una sentencia return al final de este método. En el caso anterior.println ( ( nota1 + nota2 + nota3 ) / 3 ) . System.print ( “ El promedio final del alumno es: ” ) . Todos los métodos definidos con void no devuelven valor. Cuando un método utiliza una variable de instancia que ha sido definida en su misma clase. se analizará la definición del método promedio( ) de la clase Alumno. ubicada después del paréntesis y la llave de cierre “}” ubicada en la última línea definen el ámbito del método promedio( ).out. Ahora. } La llave de apertura “{”. nota2 y nota3 se utilizan directamente sin estar precedidas del nombre del objeto y el operador punto (. cuando se ejecute el método promedio( ) se ejecutarán las dos sentencia que están dentro de su ámbito (es decir. void promedio ( ) { System. En el ámbito del método promedio( ) se puede observar que las variables de instancia nota1.out. Juan José Flores Cueto. System.out. No devuelve No tiene valor.println ( (nota1 + nota2 + nota3 ) / 3 ) .). void promedio ( ) { System. El ámbito de un método define todas las sentencias que se ejecutarán cuando el método se ejecute. 546 .out. entre las llaves). } El método promedio( ) no devuelve ningún valor ya que tiene definido como tipo de retorno void. Ing. parámetros. se puede referir a ella en forma directa utilizando solo su nombre. Pag. El método promedio(). tampoco tiene parámetros ya que al final del nombre del método los paréntesis se encuentran vacíos.print ( “ El promedio final del alumno es: ” ) . } } package dominioDeLaAplicacion . // y a las variables de instancia del objeto objAlumno03. objAlumno. prom = objAlumno. a que en mucho casos. // Ahora asignamos valores a las variables de instancia del objeto objAlumno.nota3 = 11 .promedio ( ) .nota1 = 15 .nota2 = 14 .nota3 = 11 .nota2 = 19 .nota2 = 11 . objAlumno02. objAlumno. Esto se debe. objAlumno. double promedio ( ) { return ( nota1 + nota2 + nota3 ) / 3 .nota1 = 13 . // Primero declaramos y creamos tres objetos de la clase Alumno. // Calculamos el promedio de notas para cada alumno.println ( “ La nota final de Luis es ” + prom + “. Con la finalidad de mejorar la implementación del método promedio( ). objAlumno03. objAlumno03. class Alumno { double nota1. esto no constituye la mejor forma o alternativa de desarrollar dicho método. se puede realizar solo el cálculo del promedio de notas y devolver dicho valor para que este pueda ser utilizado de diferente forma. A continuación se modificará el proyecto de solución ProyAlumno con la finalidad de mejorar la implementación del método promedio( ): package dominioDeLaAplicacion . Alumno objAlumno03 = new Alumno ( ) . objAlumno02.nota3 = 15 . class PrgAlumno { public static void main ( String args [ ] ) { double prom . nota3 .out. otras partes del método main( ) u otros métodos necesitarán que se ejecute el método promedio( ) para que se realice el cálculo del promedio de notas. Pag. 547 . objAlumno03. Alumno objAlumno02 = new Alumno ( ) . System. // También asignamos valores a las variables de instancia del objeto objAlumno02 objAlumno02. pero no todos necesitarán que una vez calculado el promedio de notas este se visualice.nota1 = 11 .” ) . nota2.INTRODUCCIÓN AL DESARROLLO DE SOLUCIONES ORIENTADAS A OBJETOS Métodos que devuelven valor y no reciben parámetros Aunque en el método promedio( ) se realiza el cálculo y visualización del promedio de notas. Alumno objAlumno = new Alumno ( ) . 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.” ) . el operador punto (. se utiliza también el nombre del objeto.println ( “ La nota final de Pedro es ” + objAlumno03. antes de mostrar el valor de prom se le suma 1.promedio ( ) + “. entonces el valor devuelto será almacenado en la variable prom.promedio ( ) .” ) .println ( “ La nota final de María es ” + prom + “. System. En el ejemplo tenemos la siguiente sentencia: prom = objAlumno. En el primer caso. y en el segundo caso. éste deberá ser asignado a una variable del mismo tipo que el valor devuelto por el método.out. prom = prom + 1 . un método que devuelve un valor. se muestra el valor de prom. Sentencia definida en el método Método definido en la clase Alumno. Observe que la variable prom es del mismo tipo que el valor devuelto por el método promedio( ). main( ) de la clase PrgAlumno. Como el método promedio( ) devuelve un valor.) y el nombre del método.out. } prom = objAlumno. prom = objAlumno02. System. Una vez que prom ya tiene el valor devuelto por el método promedio( ) se puede procesar dicho valor según sea necesario.promedio ( ) . Ing. 548 .promedio ( ) . pero debido a que el método devuelve un valor. double promedio ( ) { return ( nota1 + nota2 + nota3 ) / 3 . Juan José Flores Cueto. Pag. } } Para ejecutar. promedio ( ) + “. Es decir. se ejecuta a su vez el método objAlumno3. Aquí no se hace uso de la variable prom.promedio( ) y el valor devuelto se muestra a través de la pantalla. La ejecución del método promedio( ) se realiza directamente en la sentencia println(). double promedio ( ) { return (nota1 + nota2 + nota3 ) / 3 . debe ser compatible con el tipo de dato especificado por el método.println ( “ La nota final de Luis es ” + prom + “. prom = prom + 1 .” ) . Declarada como double. 549 . Lo cual es compatible con el tipo de dato especificado por el método.promedio ( ) .promedio ( ) .println ( “ La nota final de María es ” + prom + “. } 2. El tipo de dato que un método devuelve (con la sentencia return). parámetros. Se obtiene el promedio de notas. System.out. Existen dos puntos importantes relacionados con los métodos que devuelven valor: 1. se aumenta 1 y se muestra el resultado: prom = objAlumno02. que se puede escribir estas sentencias de una manera más eficiente. Especifica que se debe devolver un No tiene valor double.” ) .out.out.” ) .println ( “ La nota final de Pedro es ” + objAlumno03. System.promedio ( ) . Observe la siguiente sentencia: System. prom = objAlumno. al ejecutar println( ). Es preciso mencionar. 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.INTRODUCCIÓN AL DESARROLLO DE SOLUCIONES ORIENTADAS A OBJETOS Se obtiene el promedio de notas y se muestra el resultado: prom = objAlumno. Pag. fundamentalmente. nota2 y nota3. se definirá un segundo método dentro de la clase Alumno. package dominioDeLaAplicacion . Pag. las notas de un alumno y las asignará a los atributos de instancia. prom = objAlumno02. prom = objAlumno. a través de sus parámetros. Alumno objAlumno = new Alumno ( ) . // Primero declaramos y creamos tres objetos de la clase Alumno.11 ) . double promedio ( ) { return ( nota1 + nota2 + nota3 ) / 3 . nota2 = b .setNotas ( 11.promedio ( ) . objAlumno02. El método se llamará setNotas( ) y permitirá asignar valores a las variables de instancia nota1. // y a los atributos de instancia del objeto objAlumno03. double b. Los parámetros generalizan el uso de un método permitiendo trabajar con diversos datos y utilizarlo en diferentes situaciones. objAlumno03. // Ahora asignamos valores a los atributos de instancia del objeto objAlumno. // Calculamos el promedio de notas para cada alumno. 550 . a que en problemas Java bien diseñados las variables de instancia deberían ser accesibles sólo a través de los métodos definidos por sus clases y no en forma directa. nota3 . class PrgAlumno { public static void main ( String args [ ] ) { double prom .promedio ( ) . } void setNotas ( double a.” ) .19. El método setNotas( ) recibirá.15 ) . nota2. Alumno objAlumno02 = new Alumno ( ) .11 ) .11. System. Métodos que no devuelven valor y reciben parámetros Ahora. class Alumno { double nota1. nota3 = c . Juan José Flores Cueto.setNotas ( 15. Ing. Esto debido.14. objAlumno. } } package dominioDeLaAplicacion . Alumno objAlumno03 = new Alumno ( ) .println ( “ La nota final de Luis es ” + prom + “.setNotas ( 13.out. // También asignamos valores a los atributos de instancia del objeto objAlumno02. double c ) { nota1 = a . que es ejecutado. 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. } } Para ejecutar un método que tiene parámetros se utiliza el nombre del objeto. nota2 = b . nota3 = c . Sentencia definida en el método Método definido en la clase Alumno. el operado punto(.). void setNotas ( double a. recibe un valor cuando se ejecuta dicho método.” ) . a = 15 objAlumno. System. En el ejemplo anterior tenemos: objAlumno.” ).println ( “ La nota final de María es ” + prom + “.11 ) . double b.setNotas ( 15.19. System.setNotas (15. el nombre del método a ejecutar y los argumentos necesarios.out.promedio() + “.INTRODUCCIÓN AL DESARROLLO DE SOLUCIONES ORIENTADAS A OBJETOS prom = prom + 1 . } 3 ARGUMENTOS 3 PARÁMETROS Un argumento es un valor que se Un parámetro es una variable envía a un método cuando este definida por un método. 551 . Pag.out. 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.println ( “ La nota final de Pedro es ” + objAlumno03.19. double c ) { nota1 = a . main() de la clase PrgAlumno.11 ) . nota2 = b . double c ) { nota1 = a . Cuando se ejecuta un método que tiene parámetros. void setNotas ( double a. 552 .19. se deben pasar los argumentos). Cada argumento deberá ser compatible con el tipo de dato definido por el parámetro al cual será asignado: Especifica que se envían 3 valores (argumentos) de tipo double al método setNotas ( ). Pag. 3 parámetros de tipo double. nota3 = c . se debe pasar al método un valor por cada parámetro definido (es decir. Ing. double b. El valor recibido debe ser compatible con el tipo de dato definido por el parámetro al cual será asignado: No devuelve Especifica que se tiene definido valor. Juan José Flores Cueto. Un método que tiene parámetros debe recibir un valor por cada parámetro definido. objAlumno. } 2.setNotas(15.11). Existen dos puntos importantes relacionados con los métodos que tienen parámetros: 1. Un método puede.out. } 4. no devolver un valor y tener definido uno o más parámetros. parámetros. void setNotas ( double a. } 2. 553 . } 3.print ( “ El promedio final del alumno es: ” ) . No devuelve Especifica que se tiene definido valor. Pag. nota2 = b . double b. devolver un valor y no tener definido parámetros. No devuelve No tiene valor. se puede afirmar lo siguiente: 1. Un método puede. parámetros. System.INTRODUCCIÓN AL DESARROLLO DE SOLUCIONES ORIENTADAS A OBJETOS En conclusión. devolver un valor y tener definido uno o más parámetros. Especifica que se debe devolver un No tiene valor double. 3 parámetros de tipo double. Un método puede. nota3 = c .out. no devolver valor y no tener definido parámetros. double c ) { nota1 = a . Un método puede. void promedio ( ) { System. (Este tipo de métodos no han sido tratados en el presente capítulo). double promedio ( ) { return (nota1 + nota2 + nota3 ) / 3 .println ( ( nota1 + nota2 + nota3 ) / 3 ) . class Alumno { double nota1. double b.out. nota2 y nota3 para el objeto objAlumno: package dominioDeLaAplicacion . Ing. Los métodos constructores pueden tener parámetros al igual que otros métodos. } double promedio ( ) { return ( nota1 + nota2 + nota3 ) / 3 . Juan José Flores Cueto.println ( “ La nota final de Luis es ” + prom + “. System.setNotas ( 15. Un constructor es un método especial que sirve para construir o inicializar objetos. El método constructor tiene el mismo nombre que la clase en la cual está definido. nota3 .” ) . pero no devuelven ningún valor. class PrgAlumno { public static void main ( String args [ ] ) { double prom . 554 . nota2 = 0 . } } Pag.promedio ( ) . prom = objAlumno. y se incluirá un método constructor en la clase Alumno que permita inicializar la copia de los atributos de instancia nota1. la inicialización de objetos no se puede realizar en el momento en que estos son definidos. Alumno ( ) { nota1 = 0 . nota2 = b . se tiene la característica de disponer de un método que permite inicializar objetos inmediatamente después que se crean. } void setNotas ( double a. Método constructor En Java.11 ) . ni siguiera void. // Calculamos y mostramos el promedio de notas. // Primero declaramos y creamos un objeto de la clase Alumno.19. Cada vez que se crea un objeto se ejecuta en forma automática el método constructor. Se modificará el proyecto de solución ProyAlumno. Alumno objAlumno = new Alumno ( ) . Este método es conocido como el método constructor. // Ahora asignamos valores a la copia de las variables de instancia del objeto creado. nota2. 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. double c ) { nota1 = a . Por lo cual. de tal forma que se defina solo el objeto objAlumno de la clase Alumno en el método main() de la clase PrgAlumno (esto con la finalidad de implementar nuevos conceptos en un proyecto de solución sencillo y pequeño). nota3 = 0 . nota3 = c . objAlumno. } } package dominioDeLaAplicacion . deberá realizarlo empleando otro método. Aunque esto es posible y perfectamente válido. El método constructor Alumno( ) se encargará de inicializar con el valor cero. Para nuestro caso. En ese caso. El método constructor puede tener definido parámetros. Se declara y crea el objeto objAlumno de la clase Alumno. nota2 y nota3 del objeto creado y eliminar el método setNotas( ). a todas las copias de los atributos de instancia de los objetos que se creen. no se eliminará el método setNotas( ). Después que se crea el objeto objAlumno se ejecuta en forma automática al método constructor Alumno( ). El método constructor Alumno( ) permite inicializar la copia de los atributos de instancia nota1. podemos enviar al método constructor Alumno( ). 555 .INTRODUCCIÓN AL DESARROLLO DE SOLUCIONES ORIENTADAS A OBJETOS Cuando se ejecuta la siguiente sentencia: Alumno objAlumno = new Alumno(). dicho método es setNotas( ) ). nota2 y nota3 del objeto objAlumno con el valor cero. 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. Pag. los valores de la copia de los atributos de instancia nota1. (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. Sin embargo. Alumno ( ) { nota1 = 0 . Cuando una variable local tiene el mismo nombre que un atributo. cada vez que necesite referirse a las variables locales se utilizará el Pag. Cuando sucede esto. Para esto. Ing. nota2 y nota3. double b. b y c. una variable local (declarada dentro de un método) puede tener el mismo nombre que un atributo. nota2 = b . nota2 y nota3. se dice que las variables locales ocultan a los atributos de instancia. y también se utilizan los atributos de instancia nota1. ya que dichos nombres de variables no reflejan el valor que almacenan. no pueden tener nombres iguales. } } Dentro del método setNotas( ). 556 . nota2. Observe la codificación de la clase Alumno: package dominioDeLaAplicacion . nota2 = 0 . OCULTAR ATRIBUTOS DE INSTANCIA En Java. class Alumno { double nota1. Si se hubieran declarado las variables locales con los nombres nota1. double c ) { nota1 = a . nota2 y nota3 debido a que dichos nombres ya eran utilizados por los atributos de instancia. nota3 . } double promedio ( ) { return ( nota1 + nota2 + nota3 ) / 3 . Utilizando el operador this es posible nombrar a las variables locales igual que los atributos de instancia. dos variables locales declaradas dentro del mismo método o dos atributos. Si analiza la implementación del método setNotas( ) podrá observar que en dicho método se utilizan las variables locales a. no es correcto que dos variables que están dentro del mismo ámbito tengan el mismo nombre. Es decir. b y c. se asumiría que se hace referencia a las variables locales y no a los atributos de instancia (ya que ambos tendrían el mismo nombre). nota3 = 0 . } void setNotas ( double a. nota3 = c . Estás variables locales no fueron declaradas con los nombres nota1. Dichas variables locales fueron declaradas con los nombres a. nota2 y nota3. no se podrían utilizar los atributos de instancia ya que siempre que se utilicen los nombres nota1. que no tienen ningún significado especial. la variable local oculta al atributo. se han declarado 3 variables locales (parámetros) para recibir las notas cuando se ejecute el método. Juan José Flores Cueto. double nota3 ) { this.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 (. This. en el método setNotas( ). Pag. 557 . this.nota1 = nota1 . this. class Alumno { double nota1. } void setNotas ( double nota1. double nota2. Nos referimos a la variable local nota1. Analizar la variación en la codificación de la clase Alumno: package dominioDeLaAplicacion .nota2 = nota2 . nota3 . Forma general del operador this: this.nota3 = nota3 . nota3 = 0 . } double promedio ( ) { return ( nota1 + nota2 + nota3 ) / 3 . Cuando se utiliza el operador this se indica que se está refiriendo al atributo de instancia y no a una variable local. } } Ahora. Al momento de referirnos a los atributos de instancia anteponemos al nombre del mismo el operador this y el operador punto (. Alumno ( ) { nota1 = 0 .) y el nombre del atributo.) Nos referimos al atributo de instancia nota1. nota2.nota1 = nota1.nombreAtributoInstancia . nota2 = 0 . se utilizan los mismos nombres para las variables locales (declarados como parámetros) y para los atributos de instancia. Pag. A partir de ahora. se utilizará el operador this como una buena práctica de programación. Juan José Flores Cueto. 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. Algunos programadores procurar no utilizar variables locales que oculten los atributos de instancia. Por otro lado. 558 . Ing. println ( “ Ingrese la nota del examen parcial: ” ) . prom = objAlumno. se utilizará la clase Lectura presentada en capítulos anteriores. } } package biblioteca .println ( “ La nota final de Luis es ” + prom + “. System. public class Lectura { // Cuerpo de la clase Lectura definida en capítulos anteriores. Alumno ( ) { nota1 = 0 .println ( “ Ingrese la nota de prácticas del alumno: ” ) . Para ello.out. import biblioteca. // Ingresamos las notas. nota2 = 0 . se modificará el proyecto de solución ProyAlumno. System.leerInt ( ) . nota3 = 0 .* . class PrgAlumno { public static void main ( String args [ ] ) { double n1. La clase Lectura pertenece al paquete biblioteca: package dominioDeLaAplicacion . nota3 . } Pag. this. 559 .” ) .INTRODUCCIÓN AL DESARROLLO DE SOLUCIONES ORIENTADAS A OBJETOS INGRESO DE DATOS A TRAVÉS DEL TECLADO Ahora. System. double nota3 ) { this. } double promedio ( ) { return ( nota1 + nota2+nota3 ) / 3 .leerInt ( ) .nota1 = nota1 .println ( “ Ingrese la nota de examen final: ” ) . double nota2. n2. de tal forma que los datos sean ingresados a través del teclado de la computadora. System.out. n2 = Lectura. n3 = Lectura. this. prom . n1 = Lectura.nota3 = nota3 .setNotas ( n1. n3. Alumno objAlumno = new Alumno ( ) . // Ahora enviamos las notas a la copia de los atributos de instancia del objeto.n2. } void setNotas ( double noat1.n3 ) .leerInt ( ) .promedio ( ) . nota2. } } package dominioDeLaAplicacion .out. objAlumno.out.nota2 = nota2 . class Alumno { double nota1. Dentro del método main( ). se ingresan las notas del alumno y se muestra el promedio. Clase Alumno: Define los atributos de instancia para almacenar las notas y los métodos que permiten manipular dichos atributos de instancia. Ahora. se crea al objeto objAlumno de la clase Alumno. Ing. Un paquete denominado biblioteca que contiene a la clase Lectura y un paquete denominado dominioDeLaAplicacion que contiene las clases PrgAlumno y Alumno. 560 . Uno de los métodos realiza el cálculo del promedio. Clase PrgAlumno: Tiene el método main( ) que permite que el proyecto se ejecute. Clase Lectura: Define métodos que facilitan el ingreso de datos utilizando el teclado. Cada clase tiene funciones específicas que se detallan a continuación. Pag. el proyecto de solución ProyAlumno tiene dos paquetes. Juan José Flores Cueto. métodos. 561 . métodos de instancia y método constructor válido para los objetos. se utilizó dos paquetes. Pag. el método de solución queda definido según se muestra a continuación: ENUNCIADO DEL PROBLEMA Etapa 02 Etapa 03 Etapa 04 Definición Diseño Desarrollo Solución Solución Solución • Definición del proyecto de • Diseño del diagrama de • Codificar el diseño de solución. (Utilice UML). Con la última solución desarrollada para el proyecto ProyAlumno. lenguaje de Aplicación. o Definición de clases serán parte del paquete con sus atributos y Aplicación. Ajuste de los pasos definidos para las etapas del método En la solución del problema anterior. se ha modificado poco a poco con la finalidad de tratar nuevos conceptos relacionados a la POO utilizando Java. la solución del • Definición del algoritmo. los método definidos. Utilizar pseudocódigo. En base a esto. se pretende dar un paso importante para acercarnos al desarrollo de soluciones orientadas a objetos. Los mayores cambios los desarrollamos en las 2 clases del paquete dominioDeLaAplicacion. • Diseño de las clases que programación Java. o Uso de la clase Lectura con sus • Diseño del algoritmo para métodos definidos. problema utilizando el • Definición del paquete (Utilice UML). • Definición del paquete biblioteca.INTRODUCCIÓN AL DESARROLLO DE SOLUCIONES ORIENTADAS A OBJETOS MÉTODO DE LAS 6’D: Etapas y pasos El proyecto de solución ProyAlumno. 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. Establecer la dependencia. mientras que en la otra clase se definirán los atributos de instancia. paquetes respectivo. En una clase se desarrollará el método main( ) y se definirán objetos de la otra clase. Juan José Flores Cueto. Pag. 562 . Ing. Definición del proyecto de solución. ƒ Datos necesarios: Las notas del alumno (en esta caso tenemos 3 notas).Definición de la solución. dentro del cual se definirá el paquete dominioDeLaAplicacion y se incluirá el paquete biblioteca (el cual incluye la clase Lectura).Descripción del problema. 3. Calcular el promedio final de un alumno. Etapa 02 . ƒ Procesamiento: La 3 notas serán ingresadas por teclado y almacenadas en las variables nota1. Para solucionar el problema se creará un proyecto denominado ProyAlumno. PROBLEMA 151 Etapa 01 . Pero. Luego. Ingrese las notas nota1. 1. Definición del paquete Aplicación. Utilice la siguiente fórmula: prom = ( nota1 + nota2 + nota3 ) / 3. ni se mostrarán mensajes de ningún tipo. La función de la primera clase será de procesamiento y almacenamiento de datos. si se utilizarán los mismos nombres para referirnos a variables locales y a los atributos Pag. ƒ Resultado deseado: Mostrar la nota final de un determinado alumno. En el paquete dominioDeLaAplicacion definiremos dos clases. Definición del algoritmo. no se realizará ingreso de datos. Como buena práctica de programación. en los métodos de esta clase. se realizará el cálculo de la nota final sobre la base de la siguiente fórmula: prom = ( nota1 + nota2 + nota3 ) / 3. El resultado se almacenará en una variable (prom) para luego ser mostradas por pantalla. y nota3.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. nota2 y nota3 a través del teclado. 2. nota2. se volverá a solucionar el problema anterior. 563 . Su definición será la siguiente: Clase: PrgAlumno. la creación del objeto objAlumno. solo podrán ser definidos como atributos de instancia los datos de entrada. devuelve el valor del cálculo del promedio de las notas). 4. Como buena práctica de programación. Pag. Métodos: Necesitamos los siguientes métodos: ƒ Método constructor para inicializar los atributos de instancia (método Alumno()). el ingreso de los datos y mostrar los resultados esperados. Atributos: Como atributos de instancia definiremos las variables de entrada nota1. Atributos: Como atributos de instancia definiremos al objeto objAlumno de la clase Alumno. 564 . En el paquete biblioteca se tendrá la clase Lectura para poder utilizar sus métodos. Ing. 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. Por otro lado. Definición del paquete biblioteca. en los métodos de esta clase. ƒ Método para calcular el promedio de las notas (método promedio(). Métodos: Utilizamos el método main( ) para iniciar la ejecución del proyecto. Su definición será la siguiente: Clase: Alumno. recibe los valores de las notas ). La función de la segunda clase será el ingreso de los datos y mostrar los resultados esperados. la clase Alumno). nota2 y nota3. Juan José Flores Cueto. ƒ Método para modificar los valores de las notas (método setNotas(). de instancia. promedio ( ) ESCRIBIR prom FIN Pag. Diagrama de paquetes dominioDeLaAplicacion biblioteca ƒ Diseño de las clases.setNotas ( n1.INTRODUCCIÓN AL DESARROLLO DE SOLUCIONES ORIENTADAS A OBJETOS Etapa 03 – Diseño de la lógica. 565 . n2.n3 ) prom = EJECUTAR objAlumno. n3 SALIDA: prom INICIO NUMERO n1. n2.n2. double) : void leerFloat( ) : float promedio( ) : double leerDouble( ) : double ƒ Diseño de algoritmos. n3 EJECUTAR objAlumno. n3. Clase de Clases de dominioDeLaAplicacion biblioteca PrgAlumno Alumno Lectura nota1 : double nota2 : double leerString( ) : String nota3 : double leerChar( ) : char leerInt( ) : int main( ) Alumno( ) leerLong( ) : long setNotas(double. Algoritmo PrgAlumno METODO MAIN( ) ENTRADA: n1. double. ƒ Diseño del Diagrama de Paquetes. prom CREAR OBJETO objAlumno CLASE Alumno EJECUTAR Alumno ( ) LEER n1. n2. 566 .nota1 = nota1 ATRIBUTO. nota2. Juan José Flores Cueto.nota2 = nota2 ATRIBUTO. se ha utilizado nuevas reglas de pseudocódigo las cuales describimos a continuación: ƒ CREAR OBJETO Se utiliza para indicar la creación de un determinado objeto. El formato completo se muestra a continuación a través de un ejemplo: CREAR OBJETO objAlumno CLASE Alumno EJECUTA Alumno ( ) A través de esta instrucción se crea un objeto denominado objAlumno de la clase Alumno y se ejecuta el método constructor especificado. Ing. nota3 METODO CONSTRUCTOR PARAMETRO: INICIO nota1 = 0 nota2 = 0 nota3 = 0 FIN METODO SETNOTAS PARAMETRO: nota1. Pag. nota3 RETORNO: INICIO ATRIBUTO. nota2.nota3 = nota3 FIN METODO PROMEDIO PARAMETRO: RETORNO: prom INICIO NUMERO prom prom = ( nota1 + nota2 +nota3 ) / 3 RETORNAR prom FIN Observe que en esta Etapa – Diseño de la lógica. Algoritmo Alumno ATRIBUTOS NUMERO nota1. PARAMETRO: nota1. RETORNO: prom Se especifica que el valor almacenado en la variable prom será devuelto como respuesta cuando se ejecuta el método al cual pertenece la instrucción. el cual se almacena en la variable prom. y se le envían los valores de la variables n1. n2 y n3. nota3 Se especifica que se utilizan las variables nota1. prom = EJECUTAR objAlumno. EJECUTAR objAlumno. Hay que tener presente que si el método es de clase se deberá anteponer el operador punto (. Si el método es de instancia se deberá anteponer el operador punto (. El método promedio devuelve un resultado. 567 . nota2 y nota3 para recibir los valores que se envían al método al cual pertenece la instrucción. ATRIBUTO. nota2. ƒ ATRIBUTO Se utiliza para diferenciar un atributo de una variable local cuando ambos tienen el mismo nombre y se utilizan en un mismo método.) y el nombre del objeto antes de colocar el nombre del método que se desea ejecutar.setNotas ( n1.n2. ƒ PARAMETRO Se utiliza para especificar las variables que utilizamos para recibir los valores enviados a un determinado método. Pag.promedio ( ) Se ejecuta el método promedio del objeto objAlumno.INTRODUCCIÓN AL DESARROLLO DE SOLUCIONES ORIENTADAS A OBJETOS ƒ EJECUTAR Se utiliza para ejecutar un método. la cual antecede al operador punto (. tal y como se muestra en el ejemplo anterior. ƒ RETORNO Se utiliza para especificar la variable que utilizaremos para devolver o retornar una respuesta de un determinado método.) y el nombre de la clase antes de colocar el nombre del método que se desea ejecutar.n3 ) Se ejecuta el método setNotas() del objeto objAlumno.nota1 = nota1 Para referirnos al atributo nota1 utilizamos la regla ATRIBUTO.) y al nombre del atributo. leerInt ( ) .println ( “ Ingrese la nota de prácticas del alumno: ” ) . prom . Alumno ( ) { nota1 = 0 . class Alumno { double nota1.n2.n3 ) .nota3 = nota3 .leerInt ( ) . // Enviamos las notas a la copia de los atributos de instancia del objeto. nota3 . n2. double nota3 ) { this. } void setNotas ( double nota1.println ( “ Ingrese la nota de examen final: ” ) .” ) . n2 = Lectura. n3. Ing. 568 . nota2 = 0 . System.leerInt ( ) . Etapa 04 . prom = objAlumno. } } Clase Alumno package dominioDeLaAplicacion .out. objAlumno. Clase PrgAlumno package dominioDeLaAplicacion .println ( “ La nota final de Luis es ” + prom + “. double nota2. nota2. Juan José Flores Cueto. class PrgAlumno { public static void main ( String args [ ] ) { double n1.out.Desarrollo de la Codificación. System.out.promedio ( ) .nota1 = nota1 . } } Pag. this. } double promedio ( ) { return ( nota1 + nota2 + nota3 ) / 3 . System. n3 = Lectura.nota2 = nota2 .println ( “ Ingrese la nota del examen parcial: ” ) . Alumno objAlumno = new Alumno ( ) . nota3 = 0 . n1 = Lectura. // Ingresamos las notas. this. import biblioteca.Lectura .out.setNotas ( n1. System. es importante mencionar. Servlets. tales como. para luego poder iniciar con una base adecuada su investigación en el desarrollo de soluciones J2EE (Java 2 Enterprise Edition) basadas en tecnología Internet.INTRODUCCIÓN AL DESARROLLO DE SOLUCIONES ORIENTADAS A OBJETOS OTROS CONCEPTOS Finalmente. Pag. entre otros. Dichos conceptos avanzados permitirán elaborar soluciones robustas y profesionales. que deberá continuar investigando otros conceptos importantes de la Programación Orientada a Objetos. 569 . Herencia. Conexiones a BD. Interfaces Gráficas. Polimorfismo. Encapsulamieno. Ing. Pag. Juan José Flores Cueto. 570 . APÉNDICE . . Desarrollar una solución que permita ingresar el precio de un artículo y mostrar el precio total a pagar incluyendo el IGV respectivo (Impuesto General a las Ventas = 19%). Utilizar la siguiente fórmula: Promedio: nf = (nota1 + nota2 + nota3) / 3. 573 . nota2=13 y nota3=15. Desarrollar una solución que permita mostrar el nombre. Desarrollar una solución que permita mostrar un mensaje por la pantalla. 2. Desarrollar una solución que permita ingresar el nombre de dos personas y luego mostrar los nombres junto con un mensaje de bienvenida. Mostrar el precio total a pagar incluyendo el IGV (Impuesto General a las Ventas = 19%). Pag. 7. 6. Desarrollar una solución que permita ingresar el precio de un artículo y su respectivo descuento (expresado en %). apellido y el promedio del alumno Julio César Arias Pimentel que ha obtenido las siguientes notas: nota1=11. 5. 4. multiplicar. Desarrollar una solución que permita leer el costo de un artículo y su precio de venta. Desarrollar una solución que permita mostrar el resultado de sumar.APÉNDICE Problemas propuestos ENUNCIADO DE PROBLEMAS RESUELTOS 1. Calcular y mostrar su utilidad. restar y dividir los números 124 y 35. 3. El mensaje a mostrar será “Hola bienvenidos mi nombre es Danae”. 15. Desarrollar una solución que permita calcular y visualizar el perímetro y el área de un rectángulo. 14. Considerar como tipo de cambio.a)*(p . en su equivalente en nuevos soles. Ingresar la cantidad en dólares y el tipo de cambio. Ingresar la base y la altura del rectángulo. Desarrollar una solución que permita calcular y mostrar el área de un triángulo rectángulo. Ingresar la base y la altura del triángulo rectángulo.APÉNDICE 8. Desarrollar una solución que permita convertir y mostrar una cantidad de dinero. 574 .c)) RAIZ 2. Desarrollar una solución que permita ingresar el lado de un cuadrado. Desarrollar una solución que permita calcular el área de un triángulo en función de las longitudes de sus lados. ¾ Area = ((p*(p . Calcular y mostrar el área del cuadrado. 13. ¾ Semiperímetro p = (a +b + c) / 2. Mostrar el resultado obtenido. Mostrar el resto de la división.b)*(p .09 Euros. expresado en dólares. y 1 Dólar = 1.352 soles. Ingresar el radio del círculo. 1 Dólar = 3. 9. Pag. 11. Desarrollar una solución que permita leer un número y calcular el resto de dividir el número entre 3. Desarrollar una solución que permita calcular y mostrar el perímetro y el área de un círculo. 10. Desarrollar una solución que permita convertir y mostrar una cantidad de soles a Dólares y a Euros. 12. resta. Ingresar la hora y los minutos de entrada y de salida. 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 la suma. Mostrar el resultado de las operaciones. 22. 575 . Donde PL = Promedio de Laboratorio. n2. Desarrollar una solución que permita ingresar 2 números a través del teclado. n3 y n4 a través del teclado. n3 y n4 a través del teclado. Desarrollar una solución que permita ingresar las notas de un determinado alumno y visualizar su promedio final. Utilizar la siguiente fórmula: nf = (n1 + n2 + n3 + (n4 * 2)) / 5. Desarrollar una solución que permita ingresar el sueldo de un obrero. n2. resta. multiplicación y división de dichos números. multiplicación y división de dichos números. Calcular la suma. EP = Examen Parcial y EF = Examen Final. El promedio final se obtiene de la siguiente fórmula: PF = (PL + EP + EF*2)/4. Desarrollar una solución que permita calcular la nota final que ha obtenido un alumno en el curso de laboratorio de Programación Avanzada. sabiendo que se elimina la menor nota y se duplica la mayor nota. 20. calcular la potencia de 5 y la raíz cuadrada de cada uno de los números ingresados. Pag. Desarrollar una solución que permita calcular la nota final que ha obtenido un alumno en el curso de Algoritmo y Estructura de Datos. Adicionalmente. Mostrar el resultado de todas las operaciones. 17. Mostrar el sueldo a cobrar. Calcular el tiempo que permaneció en la empresa. Desarrollar una solución que permita ingresar 2 números a través del teclado. Ingresar las notas n1. 21. 18. Ingresar las notas n1. Calcular el aumento de sueldo del obrero por concepto de escolaridad (17%). 19.APÉNDICE 16. 576 .A. Calcular su respectivo descuento del 14% por concepto de impuestos y el 3% por concepto de cafetería.37 pulgadas. P2(x2. Desarrollar una solución que permita ingresar una cantidad expresada en metros. ¾ 1 pulgada = 2. 29. 25. pulgadas. y2). Desarrollar una solución que permita convertir una cantidad expresada en metros a sus equivalentes en centímetros. Cada uno de los puntos está expresado en coordenadas y éstos deben ser ingresados por el usuario: P1(x1. 24. Determinar la suma de las cifras del número ingresado. Desarrollar una solución que permita ingresar el sueldo de un obrero de la empresa “La Poderosa S.54 cm. P2 y P3. ¾ 1 pie = 12 pulgadas. ¾ 1 yarda = 3 pies. y1). los cuales corresponden a los vértices de un triángulo. Utilizar la fórmula del problema anterior para determinar la distancia entre cada uno de los puntos.APÉNDICE 23. 27. Pag. 26. Desarrollar una solución que permita calcular el perímetro de un triángulo dadas las coordenadas de los puntos P1. 1 pie = 12 pulgadas). La distancia entre los dos puntos se calcula a partir de la siguiente fórmula: Distancia = ((x1-x2) **2 + (y1-y2) ** 2) RAIZ 2. pies y yardas.”. Considerar la siguiente información: ¾ 1 metro = 100 cm. Desarrollar una solución que permita calcular y visualizar la distancia que existe entre dos puntos dados. Desarrollar una solución que permita ingresar 2 números enteros positivos de dos cifras. Mostrar el total de descuentos y el sueldo a cobrar. 28. Intercambie las unidades de los dos números. Desarrollar una solución que permita ingresar un número de 4 cifras. y visualizar su equivalente en pulgadas y en pies (1 metro = 39. 34. 35. que existen en la cantidad de dinero ingresada. Al sueldo bruto se le aplica un descuento del 12% obteniéndose el sueldo neto. Mostrar el número de billetes de S/ 100. S/ 5 y S/ 1. 31.00 nuevos soles. (Ejemplo de número capicúa 4554). 33. más una comisión del 18% por cada venta que el vendedor realice. 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. Desarrollar una solución que permita invertir un número de cuatro dígitos. Desarrollar una solución que permita ingresar una cantidad entera de dinero. Desarrollar una solución que permita calcular y visualizar el número de segundos que hay en un determinado número de días. Mostrar el sueldo neto del vendedor sabiendo que hizo 5 ventas en el mes. Al sueldo básico se le aplica una bonificación del 35% obteniéndose el sueldo bruto. Dicho cálculo se realiza en base a un sueldo básico equivalente a S/ 465. Desarrollar una solución que permita realizar el cálculo del pago mensual del sueldo de un empleado de una empresa.APÉNDICE 30. 577 . 32. 36. S/ 10. Pag. Mostrar el sueldo básico.. Desarrollar una solución que permita calcula el sueldo neto de un vendedor. Un número es capicúa si se lee igual de derecha a izquierda o viceversa. S/ 20. El número deberá ser ingresado por teclado. el sueldo bruto y el sueldo neto de un trabajador. Desarrollar una solución que permita determinar si un número ingresado por teclado es capicúa o no. Desarrollar una solución que permita convertir una temperatura expresada en grados Celsius a su equivalente en grados Fahrenheit. S/ 50. (Ejemplo: se ingresa el número 3579 se debe visualizar el 9753). Utilizar la siguiente fórmula: F = (9 / 5) * C + 32. Considerar las siguientes fórmulas: 2 e = Vot + at Vf = Vo + at. Desarrollar una solución que permita determinar con qué velocidad inicial partió un automóvil de un determinado punto y qué distancia. 41. se deberá visualizar el mensaje “Cuadrado pequeño”. 40. 39. 42. Desarrollar una solución que permita leer la capacidad de un disco duro en Gigabytes. Mostrar el equivalente en Megabytes. código y edad de la persona. Desarrollar una solución que permita determinar si una persona es o no mayor de edad. donde: Vf = Velocidad final. Los ángulos se clasifican de la siguiente manera: ¾ Ángulo = 0 Nulo. Vo = Velocidad Inicial. t = Tiempo empleado en el recorrido. apellidos. conociendo su velocidad final.APÉNDICE 37. Desarrollar una solución que permita calcular y mostrar el área de un cuadrado. a = Aceleración. Pag. 578 . Desarrollar una solución que permita calcular el porcentaje de hombres y el porcentaje de mujeres que están matriculados en un determinado curso. Si el área del cuadrado resulta menor que 768. Ingresar el nombre. su aceleración y el tiempo empleado en el recorrido. ¾ 1 Gigabyte= 1024 Megabytes. e = Espacio recorrido. ¾ 0 < ángulo > 90 Agudo. ¾ 1 Megabyte= 1024 Kilobytes. 38. Kilobytes y Bytes. ¾ 1 Kilobyte= 1024 Bytes. Desarrollar una solución que permita determinar cómo se clasifica un ángulo ingresado por teclado. Hasta 40 horas trabajadas se paga una tarifa normal y sobre las 48 horas. ‘B’. sabiendo que se debe descontar un 10% del sueldo por concepto de impuestos si éste es mayor de S/. ¾ Ángulo = 360 Completo. 46. Desarrollar una solución que permita determinar el sueldo neto. Desarrollar una solución que permita calcular y mostrar la nota final (nf) de un alumno. si el sueldo bruto es superior a S/. Si el alumno obtiene una nota final mayor a 17 se deberá visualizar un mensaje de felicitaciones. ‘C’. 1860. Desarrollar una solución que permita calcular y mostrar el sueldo de un trabajador conociendo el número de horas trabajadas y su tarifa horaria. el sueldo bruto y el descuento de un trabajador de una empresa.1650. La empresa paga a sus vendedores por horas trabajadas. ¾ 180 < ángulo > 360 Cóncavo.APÉNDICE ¾ Ángulo = 90 Recto. 43. sabiendo que se debe descontar un 12% del sueldo por concepto de impuestos si éste es mayor de S/. 45. Determinar la votación promedio y mostrar los códigos de los candidatos que obtuvieron una votación inferior a la votación promedio. se paga la tarifa con un recargo del 20%. 3000. Mostrar el sueldo y el descuento respectivo.00. Considerar que han participado 5 candidatos cuyos códigos son ‘A’.00. 579 . Desarrollar una solución que permita Pag. Por otro lado. 44. ¾ 90 < ángulo > 180 Obtuso. ¾ Ángulo = 180 Llano. Desarrollar una solución que permita ingresar los votos obtenidos por cada candidato en una elección democrática. ‘D’ y ‘E’. sabiendo que se tienen sólo dos notas. Desarrollar una solución que permita calcular el sueldo de un trabajador conociendo el número de horas trabajadas y su tarifa horaria.00 el sueldo del trabajador está sujeto a un descuento del 15%. 47. Desarrollar una solución que permita calcular y mostrar la nota final de un alumno. 52.5 y 10% de descuento para mas de 35 unidades adquiridas.00 nuevos soles se aplica un descuento del 12%. Si la nota final (nf) es menor a 13 se deberá mostrar el mensaje “Alumno desaprobado”. Desarrollar una solución que permita determinar que proveedor es más conveniente para una empresa.APÉNDICE 48. Considerar que deberá agregar el IGV respectivo. La empresa desea adquirir cierta cantidad de unidades de un producto para lo cual cuenta con una oferta de dos proveedores. 53. 49. caso contrario el descuento será del 3%. Desarrollar una solución que permita calcular y mostrar el monto total a pagar por la compra de varios artículos. Si el monto total a pagar incluido IGV es mayor a S/. ¾ Proveedor B: Costo unitario igual a $27. 1800. Mostrar las notas ordenadas en forma ascendente (de menor a mayor).0 y 15% de descuento para más de 50 unidades adquiridas. 580 . Fórmula: nf = (n1+n2+n3) / 3. 50. considerando un descuento del 27% por la compra de 150 unidades. de acuerdo a lo especificado a continuación: ¾ Proveedor A: Costo unitario igual a $25. Utilizar la expresión (num1 RESTO num2 > 0) donde “num1” y “num2” son los números. caso contrario se mostrará el mensaje “Alumno aprobado”. Pag. Desarrollar una solución que permita determinar si un número es divisor de otro número. 51. Desarrollar una solución que permita que permita calcular el monto a pagar por la compra de un producto. Desarrollar una solución que permita ingresar tres notas de un determinado alumno. Indicar lo siguiente en base al número ingresado: ¾ Si el número es positivo o negativo. Mostrar si el número ingresado es un número par o un número impar. Desarrollar una solución que permita ingresar la categoría y el sueldo de un trabajador. Utilizar lo siguiente: -1 elevado a la potencia del número ingresado (-1 ** num). Desarrollar una solución que permita ingresar un número entero.APÉNDICE 54. 59. (Enero. ¾ Si el número es múltiplo de 3 o no. Desarrollar un programa que permita ingresar un número entre 1 y 7. Febrero.. Mostrar si el número ingresado es un número negativo. Mostrar el nombre del día de la semana correspondiente. Categoría Aumento 1 35 % 2 25 % 3 15 % Pag. Mostrar un mensaje si el número es par. 56.. 57. Mostrar el nuevo sueldo del trabajador. impar o nulo. Desarrollar una solución que permita ingresar un número entre 1 y 12. 581 .etc). Desarrollar una solución que permita ingresar un número entero. Desarrollar una solución que permita determinar si un numero (num) es par. Desarrollar una solución que permita ingresar un número entero. un número par o un número múltiplo de 7. (Lunes. 60. Mostrar el nombre del mes del año correspondiente. Calcular el aumento correspondiente teniendo en cuenta la siguiente tabla. ¾ Si el número es par o impar. martes…etc). ¾ Si el número es Menor que 500 o no. 55. impar o nulo. 58.. Desarrollar una solución que permita calcular y mostrar el monto total a pagar por un sándwich. 582 . 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. según los datos de la tabla.00 Extra Grande S/.APÉNDICE 4 5% 61. debe considerar que los pacientes menores de 18 años implican un costo adicional de 25 %.00 Full S/. 3. Adicionalmente. Considerar que se venden 4 tipos de sándwich.00 Mediano S/. Tipo Costo Moderado S/. 2. Adicionalmente. de acuerdo a la siguiente tabla. Enfermedad Tipo Costo diario 1 180 2 420 Pag. hay que pagar el 6% por el servicio y 7% por propinas. adicionalmente. 6. Enfermedad Tipo Costo diario 1 120 2 380 3 620 63.00 62. sabiendo que. 4. 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. 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. APÉNDICE 3 513 64. 583 . 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. 65. debe considerar que los pacientes de sexo femenino menores de 14 años implican un costo adicional de 8%. según los datos de la tabla. Adicionalmente. Desarrollar una solución que permita ingresar las notas obtenidas por un alumno del curso de Matemática Básica III. Enfermedad Tipo Costo diario 1 122 2 234 3 345 4 587 66. de acuerdo a la fórmula empleada por su profesor. Calcular su nota final (nf). Mostrar la nota final (nf) del alumno y si está aprobado o no. 11 -17 Mayores de 14. Considerar la siguiente tabla: Edad Categoría 18 -más Contenido para adultos. considerando que la nota mínima aprobatoria es 12 (doce). 0 –10 Apta para todos. 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. Código Profesor Fórmula 1 nf = (n1 + n2 ) / 2 2 nf = (n1 + n2*2) / 3 3 nf = (n1*2 + n2) / 3 Pag. según los datos de la tabla. 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. Considerar que la categorización de los postulantes se realiza en función de su sexo y edad. considerando que la categoría del alumno está en función de su promedio.APÉNDICE 67. ¾ Categoría MB en caso contrario. ¾ Si la persona es de sexo masculino: ¾ Categoría MA si tiene menos de 40 años. Calcular el promedio del alumno sabiendo que se elimina la nota mas baja. 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. 584 . de acuerdo a lo siguiente: ¾ Si la persona es de sexo femenino: ¾ Categoría FA si tienen menos de 30 años. Desarrollar una solución que permita ingresar las ‘n’ notas de un alumno. determinar la categoría obtenida por un alumno. Finalmente. 68. ¾ Categoría FB en caso contrario. Desarrollar una solución que permita determinar la categoría de cada postulante. si el área es mayor o igual a 100 y menor que 1000. 72. 585 . se deberá visualizar el mensaje “rectángulo pequeño”. se deberá visualizar el mensaje “rectángulo pequeño” y si el área es mayor o igual que 1000 se deberá visualizar el mensaje “rectángulo grande”. se visualizará el mensaje “rectángulo mediano”. intermedio. 71. el mensaje será “rectángulo grande”. Si el área es menor que 100. Si el área es menor que 100. Desarrollar una solución que permita ingresar el sueldo de un trabajador.APÉNDICE 70. Desarrollar una solución que permita ingresar el nombre del alumno. En la tabla que se muestra a continuación se detallan los costos de los cursos: Básico Intermedio Avanzado Profesor 35 40 45 Alumno 40 50 60 Externo 60 80 100 Mostrar los datos del recibo. avanzado). externo) y el nivel del curso (básico. tal y como se muestra en el siguiente ejemplo: ********************* RECIBO ****************** Alumno : Juan Pérez Costo : (de acuerdo a la tabla) Nivel : (de acuerdo al ingresado) *************************************************** 73. el tipo de participante (profesor. y si el área es mayor o igual que 1000. Desarrollar una solución que permita calcular el área de un rectángulo conociendo su base y altura. alumno. Calcular y mostrar su aumento por incremento del costo de vida de acuerdo a la siguiente tabla: Pag. Desarrollar una solución que permita calcular el área de un rectángulo conociendo su base y altura. 78. 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”. Se deberá mostrar: 12 de Mayo del 2005.APÉNDICE Condición Aumento Sueldo < 2000 23 % 2000 < =Sueldo < =3000 17 % Sueldo > 3000 12 % 74. Ejemplo: Ingreso 12/05/2005. 76. 77. Desarrollar una solución que permita ingresar un número de 2 cifras. Calcular el número de días que tiene el mes y si el año ingresado es bisiesto o no. 586 . Mostrar el equivalente del número ingresado en letras. Pag. Desarrollar una solución que permita ingresar un número de 3 cifras. Mostrar el equivalente del número ingresado en letras. 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: Temperatura (tp) Tipo de Clima TP<=9 Frió 9<TP<=17 Nublado 17<TP<=27 Caluroso TP>27 Trópico 75. Desarrollar una solución que permita calcular el factorial de un número entero positivo. 79. Desarrollar una solución que permita ingresar una fecha en el siguiente formato: (dd/mm/aaaa). 85.APÉNDICE 80. Solicitar el valor del primer término. 84. 82. 88. Desarrollar una solución que permita determinar cuales son los términos de una progresión aritmética y la suma de los mismos. 81. 86. Solicitar el valor del primer término. el valor de la razón y el número de términos. el valor de la razón y el número de términos.. 83. Desarrollar una solución que permita ingresar tres números enteros. 587 . Solicitar el valor del primer término. Desarrollar una solución que permita determinar los 3 primeros números perfectos. 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 +. Desarrollar una solución que permita determinar la suma de todos los números cuadrados perfectos existentes entre los 1000 primeros números. 87. Desarrollar una solución que permita mostrar la tabla de multiplicar de un número cualquiera ingresado por teclado. Desarrollar una solución que permita determinar cuáles son los términos de una progresión aritmética. 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. el valor de la razón y el número de términos. Pag. Mostrar el número mayor. Desarrollar una solución que permita determinar cuales son los términos de una progresión geométrica y la suma de los mismos.. la suma de los números impares y la media de todos los número ingresados. 588 . Desarrollar un programa que genere cada uno de los siguientes gráficos: Pag. 95. Determinar cuántos números son negativos. 90. 93. Determinar y mostrar la suma de todos los números pares y la suma de todos los números primos. 91. Desarrollar una solución que permita ingresar 50 números enteros cualesquiera. 96. Desarrollar una solución que permita ingresar 10 números. 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). 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. Calcular y mostrar la suma de los números pares. Desarrollar una solución que permita ingresar 100 números. ceros y positivos. Desarrollar una solución que permita ingresar un número entero. 92. Desarrollar un programa que genere cada uno de los siguientes gráficos: * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 97. Desarrollar una solución que permita calcular y mostrar el producto de los números pares comprendidos entre los números 20 y 400. 94.APÉNDICE 89. Determinar y mostrar si el número ingresado es un número primo o no. D DA DAN DANA DANAE 100. Mostrar la cadena ingresada en forma triangular. Mostrar la cadena ingresada en forma triangular. * * * * * * * * * * * * . Tal y como se muestra a continuación: Ejemplo. * . * * * * * * * * * * * * . * . Desarrollar un programa que permita leer una cadena. * . Se ingresa la cadena “Danae”. Tal y como se muestra a continuación: Ejemplo. Desarrollar un programa que permita leer una cadena. Desarrollar un programa que genere el siguiente gráfico: 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. * .APÉNDICE * . 589 . Se ingresa la cadena “Danae”. * . * * * * * * * * * * * * . DANAE DANA DAN Pag. * . * * * * * * * * * * * * * * * * * * * * * * 98. 104. 590 . Calcular y mostrar lo siguiente: ¾ Suma de todas la edades. Desarrollar una solución que permita calcular la nota final de todos los alumnos. 102. ¾ Promedio de edades pares. ¾ Promedio de edades. Se deberá utilizar la estructura lógica MIENTRAS.APÉNDICE DA D 101. El número deberá ser ingresado por teclado. 105. 106. ¾ La cantidad de espacios en blanco. Ingresar las notas a través del teclado. Utilizar la siguiente fórmula: nf = (n1 + n2 + n3 + (n4 * 2)) / 5. 103. Pag. ¾ La cantidad de símbolos. Desarrollar una solución que permita invertir un número cualquiera. Desarrollar una solución que permita calcular y mostrar la nota final de 10 alumno. 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. Utilizar la siguiente fórmula: nf = (n1 + n2 + n3 + (n4 * 2)) / 5. Desarrollar una solución que permita ingresar las edades de 10 alumnos. ¾ Edad máxima. ¾ La cantidad de consonantes. Ingresar las notas a través del teclado. Desarrollar una solución que permita ingresar un texto y permita determinar lo siguiente: ¾ La cantidad de vocales. ¾ Edad mínima. entre S/.00.3. En un salón de clase se ha realizado un examen con tres pruebas distintas.00). 800.80 metros. 3. los que tiene promedio final entre 11 y 14. 110.00 (Incluidos S/. determinar cuál es el mayor y el menor sueldo en la empresa.00 y S/. y cuántos más de S/.00. 591 . Determinar cuántos ganan menos de S/. 108. Calcular y mostrar el número de alumnos que tienen promedio final menos de 11. aquellos que tienen promedio final entre 15 y 17. 107. Ingresar 4 notas y calcular el promedio del alumno en base a la siguiente fórmula: nf = (n1 + n2 + n3 + (n4 * 2)) / 5.000. 3. Desarrollar una solución que permita determinar la suma de sueldos de los obreros (categoría C). Se desea conocer el promedio obtenido en cada una de las pruebas realizadas. 109. Desarrollar una solución para el siguiente problema. Desarrollar una solución para el siguiente problema. Pag.000. Desarrollar una solución para el siguiente problema. 800. ¾ Alturas mayores de 1. Se desea hacer una estadística de las estaturas de los 1000 alumnos de un colegio.70 metros y 1.00 y S/. ¾ Alturas entre 1. 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.60 metros y 1. Adicionalmente. Se tiene una relación de 100 obreros y su sueldo.70 metros. de acuerdo a lo siguiente: ¾ Alturas hasta 1. 111. Se deberá utilizar la estructura lógica HACER.000. ¾ Alturas entre 1.60 metros.80 metros.APÉNDICE Ingrese las notas a través del teclado. 800. y los que tienen promedio final mayor de 17. es mayor a S/. ¾ [3] Resultado (Mostrar el valor de área y perímetro obtenidos).000. Un canillita vende 4 tipos de loterías según se muestra en el siguiente cuadro. Desarrollar una solución que permita emitir la factura correspondiente a la compra de varios artículos. Se desea calcular el jornal diario de cada empleado teniendo en cuenta lo siguiente: Pag. 3. Desarrollar una solución para el siguiente problema. 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. incluido IGV.00 soles. El IGV a aplicar es el 19% y si el monto total de la factura. 117. 592 . 115. Calcular el total de loterías vendidas de cada tipo. ¾ [2] Proceso (determinar área y perímetro del rectángulo). tarde y noche.00 nuevos soles se aplicará un descuento del 12%.APÉNDICE 112. los profesionales con S/ 25. ¾ [4] Terminar. Tipo lotería Costo 1 2 2 4 3 6 4 8 114. ¾ [1] Ingreso de datos (base y altura de un rectángulo). mañana. 113. Los empleados de una fábrica trabajan en tres turnos. Desarrollar una solución que permita desarrollar el siguiente menú con las opciones solicitadas.00 soles y el resto de empleados de acuerdo a sus posibilidades. Determinar el total recaudado. Calcular la nota media de los alumnos de una clase considerando “n” alumnos y “c” notas. 116. Desarrollar una solución que permita controlar la venta de boletos en un determinado día en un teatro de la capital. 118. ¾ Número de entradas vendidas para platea. platea y mezanine. ¾ El total de soles recaudados en el día. 593 .00 soles por hora. ¾ La tarifa del turno noche es de S/ 10. ¾ El programa terminará cuando el número de boleto sea igual a cero. palco y mezanine en el día. ¾ Para el turno tarde se incrementa S/ 10. ¾ En caso de ser un día domingo.00 soles por concepto de movilidad. se leerá una sola vez el precio de entrada para palco. en base a la siguiente información: ¾ Al comenzar. se deberá proporcionar la siguiente información: ¾ Número total de entradas vendidas durante el día. ¾ Antes de finalizar.00 soles por hora.APÉNDICE ¾ La tarifa del turno mañana y tarde es de S/ 8. 119. palco o mezanine). ¾ Por cada entrada vendida se leerá los siguientes datos: número de boleto y lugar (puede ser platea. la tarifa se incrementa en 50% para los turnos mañana y tarde y en 60% para el turno noche. Desarrollar una solución que permita obtener la siguiente información en un salón de clase: ¾ ¿Cuántas alumnas están matriculadas en el curso? ¾ ¿Cuántos alumnos están matriculados en el curso? ¾ ¿Cuántas alumnas son menores de 20 años? ¾ ¿Cuántos alumnos son mayores de 18 años? ¾ ¿Cuántos alumnos están aprobados? ¾ ¿Cuántas alumnas están desaprobadas? Pag. 122.200. Desarrollar una solución que permita ingresar los nombres y las edades de ‘n’ alumnos. 124. 500. Adicionalmente.200. Ingresar la cantidad de alumnos y las 3 notas de cada alumno. el articulo más caro y el más barato.APÉNDICE 120.00 y S/. 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%. el precio de venta y la utilidad de cada artículo.”. 2. 594 . 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 porcentaje de alumnos aprobados.200.00 y S/. Ingresar el nombre. Enfermedad Tipo Costo diario 1 100 2 150 3 300 Pag. Determinar la suma de las edades. 2. deberá indicar el promedio del costo de todos los artículos. 500. 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).00.00. 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. y cuantos tienen un salario mayor a S/. 2. 500. Desarrollar una solución para el siguiente problema.00 (incluidos S/. según los datos de la tabla. En la fabrica “LA CLONACION S.00). Trabajan miles de obreros y se desea determinar cuantos tienen un salario menor a S/.A. el nombre del alumno con la mayor nota y el nombre del alumno con la menor nota. 121. entre S/. la nota final más baja y más alta. 123. desaprobados. Ingresar el tipo de diario vendido y la empresa a la cuál pertenece.APÉNDICE 4 450 125. El cine “Pantalla Láser” cuenta con 3 salas y atiende en horarios de matinée. 129. caramelo y gaseosa). Desarrollar una solución para el siguiente problema. normal y especializado). ¿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. 128. Pag. (considere solo tres empresas periodísticas. 595 . 127. 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. (Ingresar solo los siguientes datos: Número de sala y el horario al cuál el cliente ingresa). 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. Desarrollar una solución que permita determinar cuántos tipos de periódicos de cada empresa fue vendido por José Luis Candado. 126. Ingresar el producto vendido y la empresa que lo fabricó. vermouth y noche. su precio de venta. Desarrollar una solución para el siguiente problema. Desarrollar una solución que permita determinar cuántas hamburguesas fueron vendidas de cada tipo (considere 3 tipos) en cada uno de los 3 locales de la empresa “El Rápido”. Una empresa cuenta con cuatro almacenes de productos. y asuma que cada empresa desarrolla 3 tipos de diario: popular. Deberá ingresar el tipo de hamburguesa y el local en el que fue vendida. quien ganó el premio al mejor canillita 1999 otorgado por un diario de la capital. la cantidad existente y el almacén donde están ubicados). Determinar lo siguiente: ¾ La suma de todas las edades. ¾ El promedio de edades. ¾ Determinar el número inverso de un número. ¾ Salida. Desarrollar una solución que permita ingresar las edades de 10 alumnos. ¾ Determinar el área y perímetro de un círculo. ¾ Salida. 133. ¾ Cantidad de nombre que comiencen entre “c y p”. 132. Desarrollar una solución que permita ingresar los nombres y sueldos de 5 empleados. ¾ Nombre del empleado con mayor sueldo. ¾ Determinar si un número es primo o no. ¾ El nombre de la alumna que tiene la mayor edad. Desarrollar una solución que permita mostrar un menú con las siguientes opciones: ¾ Suma. ¾ La edad menor. 131. 596 . ¾ El promedio de edades pares. ¾ La cantidad de edades impares. Desarrollar una solución que permita mostrar un menú con las siguientes opciones: ¾ Determinar si un número es par o impar. Desarrollar una solución que permita ingresar los valores de una matriz de 4*4. Determinar lo siguiente: ¾ Sueldo promedio. ¾ La edad mayor. resta y multiplicación de dos números.APÉNDICE 130. Calcular la suma de la diagonal y la suma de la diagonal inversa. Pag. ¾ Menor sueldo. 134. y otro listado con los datos de todo los empleados solteros. Determinar y mostrar el digito mayor del número ingresado. Mostrar los datos de la siguiente manera: Hoy es 30 de septiembre y son las 18 y 10 de la tarde. 140. 141. Validar que la fecha y la hora tenga el número de caracteres correctos. 137. 138. 30/09/2004 18:10:10. 142. Desarrollar una solución que permita ingresar 10 nombres. la edad y el estado civil de 15 empleados. 597 . Validar el número ingresado. Determinar el número de nombres cuya primera letra es una letra ‘c’ o una letra ‘x’. Elaborar un listado con los datos de los empleados cuya edad este ente 18 y 30 años.APÉNDICE 135. Desarrollar una solución que permita almacenar el nombre. Desarrollar una solución que reciba la fecha y hora con el siguiente formato: “dd/mm/aaaa hh:mm:ss”. 139. Intercambiar la primera columna por la tercera columna. así como también intercambiar la segunda fila por la cuarta fila. Desarrollar una solución que permita leer 10 apellidos. Desarrollar una solución que permita ingresar un número entero de cualquier número de cifras. 136. También determine el nombre que tiene el menor número de caracteres. Ejemplo. así como los símbolos indicados. Desarrollar una solución que permita ingresar los valores de una matriz de 5*4. Pag. Determinar cuál es el apellido mayor (alfabéticamente hablando). 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. Desarrollar una solución que permita leer 10 nombres. Utilizar un vector. Determinar cuantos nombres comienzan entre las letras ‘z’ y ‘p’. nombre. Desarrollar una solución que permita leer los datos de 5 empleados. nombre. fecha de ingreso (dd/mm/aaaa) y sueldo. ¾ Cantidad de alumnos cuyo nombre comience entre a y p. ¾ Nombre del alumno con mayor nota. Desarrollar una solución que permita leer 4 números de 3 cifras. ¾ Calcular y mostrar la edad de cada alumno . Mostrar su categoría.APÉNDICE 143. 145. fecha de nacimiento (dd/mm/aaaa) y nota. 598 . Los datos de los empleados son. Los datos de los alumnos son. ¾ Crear un menú de opciones para acceder al programa. nombre. Si el número está entre 301 y 600 pertenece a la categoría B. Regular o Egresado) y nota. ¾ Hallar: ¾ Hallar la nota promedio de todos los alumnos ingresados. Utilizar un vector y validar que el número ingresado sea de 3 cifras. 146. ¾ Crear un menú de opciones para acceder al programa. y si el número está entre 601 y 999 pertenece a la categoría C. Se solicita: ¾ Ingresar los datos haciendo las validaciones a la fecha (tamaño de fecha y que contenga los símbolos “/”) y sueldo. 144. ¾ Hallar: ¾ Hallar el sueldo promedio. ¾ Nombre del empleado con menos años de servicio. ¾ Cantidad de empleado que ingresaron entre 1980 y 2004. tipo (Ingresantes. Pag. Se solicita: ¾ Ingresar los datos haciendo las validaciones a la fecha (tamaño de fecha y que contenga los símbolos “/”) y nota. ¾ Calcular los años de servicio (que tiene trabajando). Si el número está entre 100 y 300 pertenece a la categoría A. Los datos de los alumnos son. Desarrollar una solución que permita leer los datos de ‘n’ alumnos. Desarrollar una solución que permita leer los datos de 5 alumnos. ¾ Cálculos: ¾ Hallar la edad promedio. ¾ Por cada alumno mostrar: ¾ Nombre en Mayúscula. 599 . ¾ Nombre de la persona con mayor edad. ¾ Por cada alumno mostrar la categoría: ¾ Si es ingresante y tiene entre 17-20 categoría IA. Los datos de los alumnos son. ¾ Si es egresado y tiene entre 17-20 categoría EA. edad y sexo. ¾ Nombre de mujer con menos edad. Se solicita: ¾ Ingresar los datos validando que en el sexo y la edad. ¾ Las 3 ultima letras. 148. Pag. 147. ¾ Nombre del alumno con mayor nota. ¾ Los 3 primeros caracteres del nombre. ¾ Si es ingresante y tiene entre 12-16 categoría IB. Desarrollar una solución que permita leer los datos de ‘n’ alumnos. nombre. Desarrollar una solución que permita leer los datos de ‘n’ alumnos. ¾ Mayor nota de los ingresantes y de los Egresados. ¾ Cálculos: ¾ Hallar el promedio de los ingresantes y regulares. ¾ Por cada alumno mostrar: ¾ Nombre al revés. fecha de nacimiento (dd/mm/aaaa) y nota.APÉNDICE Se solicita: ¾ Ingresar los datos haciendo las validaciones al tipo y nota. ¾ Si es regular y tiene entre 17-20 categoría RA. Los datos de los alumnos son. nombre. ¾ Ultimo carácter. ¾ Crear una opción para continuar ejecutando el programa. ¾ Crear un menú para acceder al programa. ¾ 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. Se solicita: ¾ Ingresar los datos validando AFP. ¾ Si tiene menos de 4 años se le descuenta 10% más el descuento de la AFP. Desarrollar una solución que permita leer los datos de ‘n’ empleados. ¾ Crear un menú de opciones para acceder al programa. Unión y ProFuturo). ¾ Mostrar por cada alumno la edad exacta (años y meses cumplidos a la fecha de hoy). ¾ Nombre de mujer con menos edad. sueldo y fecha de ingreso. ¾ Cálculos: ¾ Hallar la edad promedio. Los datos de los empleados son. ¾ Crear un menú de opciones para acceder al programa. ¾ Mostrar el nombre de la persona más nueva es decir con menos años de ingreso. Pag.APÉNDICE Se solicita: ¾ Ingresar los datos validando la fecha de nacimiento y la nota. ¾ Nombre y la edad de la persona con mayor nota. AFP (Integra. 149. nombre. sueldo Básico y fecha de ingreso (dd-mm-aaaa). 600 . ¾ 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. APÉNDICE 150. Pag. 601 . y la edad sea un número positivo. sexo (M/F). Los datos de los alumnos son. Se solicita: ¾ Ingresar los datos validando que en el sexo solo se ingrese ‘M’ o ‘F’. ¾ Cantidad de vocales del nombre. ¾ Nombre de hombre con menos edad. edad y nombre. ¾ Crear un menú de opciones para acceder al programa. ¾ Mostrar lo siguiente por cada alumno: ¾ Si es mayor o menor de edad. Desarrollar una solución que permita leer los datos de ‘n’ alumnos. ¾ Nombre de la persona con mayor edad. ¾ Cálculos: ¾ Hallar la edad promedio. APÉNDICE Pag. 602 . return c. */ public static float leerFloat() { try { return Float.APÉNDICE Clase Lectura package biblioteca.valueOf(leerString()).floatValue().print("ERROR.\n Ingrese de nuevo: "). /* * Clase que permite capturar literales desde el teclado. if (c1.. } catch (NumberFormatException e) { System..\n Ingrese de nuevo: ").doubleValue(). } } /** * Retorna un literal float capturado desde el teclado.*. * */ public class Lectura { /** * Retorna el char capturado desde el teclado.. } catch (NumberFormatException e) { System.out. } } Pag. import java. */ public static char leerChar() { char c = ' '. } /** * Retorna un literal double capturado desde el teclado. */ public static double leerDouble() { try { return Double.. 603 .print("ERROR. return leerDouble().io.length == 1) c = c1[0].valueOf(leerString()). return leerFloat().toCharArray().out. char[] c1 = leerString(). print("ERROR.APÉNDICE /** * Retorna un literal int capturado desde el teclado.valueOf(leerString()).. } catch (NumberFormatException e) { System. 604 . */ public static short leerShort() { try { return Short..out.\n Ingrese de nuevo: "). */ public static long leerLong() { try { return Long. return leerLong(). } } Pag.println(e). } catch (IOException e) { System..out.parseInt(leerString()).\n Ingrese de nuevo: "). return leerInt(). String cadena = "". } catch (NumberFormatException e) { System. } } /** * Retorna una cadena capturada desde el teclado. try { cadena = in.out.readLine().longValue(). */ public static int leerInt() { try { return Integer.print("ERROR.out.\n Ingrese de nuevo: ").valueOf(leerString()). } } /** * Retorna un literal long capturado desde el teclado. */ public static String leerString() { BufferedReader in = new BufferedReader(new InputStreamReader(System..print("ERROR.shortValue().in)).. } catch (NumberFormatException e) { System. return leerShort(). } return cadena. } } /** * Retorna un literal short capturado desde el teclado.. 605 .Object java.text. decimales. Par poner en práctica esto podemos recurrir a 2 métodos: NumberFormat formato . La clase DecimalFormatSymbols permite modificar los símbolos de formato como separadores decimales o el signo negativo entre otros. notación científica. Arábigos e Índicos. Antes de mostrar o imprimir un número el programa debe convertirlo a un String que esté en un formato sensible a la Localidad. y en Alemania debería aparecer como 123.text.78 debería ser formateado como 123 456. Por ejemplo. Tiene una gran variedad de opciones para dar formatos a números en cualquier sistema.NumberFormat java. etc.78. como son: enteros.lang. formato de moneda. Con la clase DecimalFormat se específica un formato de número con patrón.APÉNDICE Clase DecimalFormat java. DecimalFormat df . el número 123456. en Francia.78. Pag.text. incluye soporte para dígitos Occidentales.456.DecimalFormat DecimalFormat es una clase concreta de NumberFormat que da formato a números decimales. También soporta gran variedad de formatos numéricos. Se puede utilizar la clase DecimalFormat para formatear números decimales en cadenas específicas de la Localidad. Los programas almacenan y operan con números de una forma independiente de la Localidad.Format java. y el separador decimal.getCurrencyInstance(currentLocale). Si queremos dar formato a monedas: formato = NumberFormat. 606 .234E3" . se puede utilizar DecimalFormatSymbols en conjunción con la clase DecimalFormat Símbolos usados para formato Símbolo Significado 0 Digito # Digito. Separador decimal . Esta clase permite controlar los ceros iniciales y finales.getNumberInstance(currentLocale). separadores (millares). Para separar formatos positivos y negativos % Multiplica por 100 y lo muestra como porcentaje \u2030 Multiplica por 1000 y muestra como millares ¤ (\u00A4) Utilizado para mostrar símbolos monetarios ' Usado para mostrar caracteres especiales Ejemplo: Pag.APÉNDICE Si queremos dar formato a números: formato = NumberFormat. Separador de agrupación E Para notación científica "0. Signo menos . el cero se muestra como ausente . los sufijos y prefijos. Si se quiere cambiar un símbolo del formateo como el separador decimal. Luego aplicamos las características locales almacenadas en formato a df: DecimalFormat df = (DecimalFormat)nf.###E0" muestra 1234 como "1. out.String[] args) { double n. 607 .out.00").###"). String s. System.##0.format(n).####E0"). System.'###.out. s = f.0000"). f = new DecimalFormat("###.00%"). System. n = Lectura. f = new DecimalFormat("'S/.out.println(s). f = new DecimalFormat("###. System.println(s).lang.00").println(s).println(s). s = f. System. • 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.00 Soles"). } Pag. f = new DecimalFormat("'U$' ###.###. System.out.println(s). DecimalFormat f.println(s).out.print("Ingresa número a dar formato : "). s = f.format(n). 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.##0.format(n).out. f = new DecimalFormat("###.format(n).println(s).APÉNDICE En el ejemplo siguiente usaremos distintos cadenas de texto para dar formato a un número ingresado por teclado.format(n).##0.format(n). System.###.##0. s = f. s = f.format(n).out.leerDouble(). f = new DecimalFormat("#. s = f. s = f. System. public static void main(java. f = new DecimalFormat("###. APÉNDICE En el siguiente ejemplo utilizamos la clase DecimalFormatSymbols. asi como el símbolo usado para especificar un negativo.format(n). simbolosraros.setDecimalSeparator('|').out.println("Alterando los símbolos : " + s). y reemplazamos el símbolo de separación decimal por | y el separador de grupos por ^ asimismo los grupos los hacemos de 4 dígitos (en vez de 3 como es regularmente) y por último. n = Lectura. s = f. String s.00". System. simbolosraros.setGroupingSize(4). reemplazamos el símbolo que representa números negativos (-) por n public static void main(java. //esto lo hacemos utilizando la clase DecimalFormatSymbols DecimalFormatSymbols simbolosraros = new DecimalFormatSymbols(). f = new DecimalFormat("###.lang. DecimalFormat f.out. f.setGroupingSeparator('^').##0. //Ahora modificamos los símbolos usados como separadores decimales //y de millares.print("Ingresa número a dar formato : "). simbolosraros.String[] args) { double n.setMinusSign('n'). 608 . simbolosraros). } Pag.leerDouble(). System. util. DAY(día). mes. Para inicializar un objeto Calendar con los valores de fecha y horas actuales utilizaremos el método getInstance( ): Calendar cal = Calendar.set (año.YEAR. MONTH . y así sucesivamente. mes y día. Subclases de la clase calendario interpretan una fecha de acuerdo con las reglas específicas de un calendario determinado. DATE. Los campos de un objeto calendario pueden ser manipulados usando 3 métodos: set() // cambiamos los campos YEAR. cal.set (año. Futuras subclases podrían representar los diferentes tipos de calendarios lunares en muchos sitios del mundo. 609 . HOUR(hora).APÉNDICE Clase Calendar java.Calendar Calendar es una clase base abstracta para conversiones entre un objeto Date y una gama de enteros como YEAR(año).Object java. MONTH(mes). MONTH y DATE del calendario cal // a los valores dados en año. cal. día) . mes.set (cal.año) . etc…. día. hora. HOUR y MINUTE // del calendario cal a los valores dados en año. Pag. // cambiamos el valor del campo YEAR del calendario cal // al valor guardado en año cal. Esta plataforma implementa una subclase concreta: GregorianCalendar. // cambiamos los campos YEAR.getInstance(). mes. minuto) .lang. cal. 610 . la nueva hora sería 3:10 a // diferencia del método add ( ) que nos daría 4:10..roll(cal.add(cal.APÉNDICE add() // agrega cambio al campo f. 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. 40) // si la hora actual fuera 3:30.HOUR. cambio) agrega cambio al campo f sin variar campos superiores. // si aumentamos por ejemplo 40 minutos a la hora 3:30. esto es. get(f) + cambio) // agrega cambio al valor del campo campo del calendario cal cal. 1) //aumenta el mes actual en 1 roll() // roll (f. Esto es equivalente a hacer set (f. la nueva hora sería 3:10 a diferencia del // método add ( ) que nos daría 4:10.MONTH. APÉNDICE static int HOUR_OF_DAY Constante que representa el campo Hora del día static int JANUARY , FEBRUARY, MARCH , etc… Constantes que representan a los meses que corresponden del año. static int MILLISECOND Constante que representa el campo que indica los milisegundos de la hora actual static int MINUTE Constante que representa el campo que indica los minutos de la hora actual. static int MONDAY, TUESDAY, WEDNESDAY, etc… Constantes que representan a los días que corresponden de la semana. static int MONTH Constante que representa el campo que indica el mes actual static int PM static int SECOND Constante que representa el campo Indica o establece los segundo de la hora actual static int UNDECIMBER indica el 13o mes del mes static int WEEK_OF_MONTH Constante que representa el campo Semana del mes static int WEEK_OF_YEAR Constante que representa el campo Semana del año static int YEAR Constante que representa el campo Año 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: int Campo, int Cantidad ; 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. boolean isSet(int campo) Pag. 612 APÉNDICE Determina si el campo dado tiene un valor almacenado. abstract void roll(int field, boolean up) Time Field Rolling function. void roll(int field, int amount) set(int field, int value) void setFirstDayOfWeek(int value) Establece cual es primer día de la semana para el calendario actual. Ej MONDAY void setTime(Date fecha) Establece la hora del calendario actual a fecha void setTimeInMillis(long milisegundos) Establece la hora del calendario actual utilizando los milisegundos dados void setTimeZone(TimeZone value) Sets the time zone with the given time zone value. String toString() Retorna una representación de cadena del calendario actual 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 GregorianCalendar es una subclase concreta de la Clase Calendar y provee el calendario Standard usado por la mayoría del mundo. ¿Qué es el Calendario Gregoriano? El calendario Gregoriano surgirá de la reforma que el papa Gregorio XIII (1502-1585) ordenó hacer para compensar las desviaciones del calendario juliano (pierde un día cada 128 años, y por lo tanto cada año se hacía más notorio que la fecha de la Pascua de Resurrección se atrasaba con respecto al equinoccio) y hacer coincidir el año civil con el año trópico. La tarea recayó en una comisión, que dirigida por Cristóbal Clavio que basándose en los cálculos Luigi Lilio (el auténtico artífice de la reforma), presentó el nuevo calendario al papa. Los cálculos supusieron un día medio de 24 horas y un año medio de 365 días, 5 horas, 49 minutos y 20 segundos (26 segundos más que el año real). Para ello se alternarían años de 365 días, años de 366 días. El calendario gregoriano intercala un año bisiesto cada cuatro años, pero no cuenta como bisiestos los años seculares (los que terminan en doble cero: 1800, 1900, 2000), excepto cuando las dos primeras cifras son múltiplo de 4, como el 2000. Esta excepción se produce porque con los cálculos de Luigi Lilio se produce un error de un día 134 años, o lo que es lo mismo 3 días cada 402 años. Había, pues, que suprimir tres días cada 402 años. Como esta cifra está relativamente cerca de 400 se acordó que no fuesen bisiestos los años terminados en doble cero (100, 200 y 300) pero sí el 400 y sus múltiplos. De esta manera se produce un error de sólo un día cada 3323 años. No obstante, si se suprimiese un año bisiesto cada 128 años, el error acumulado sería menor a un día cada 100.000 años. El calendario se adoptó en 1582 y como en los 1.257 años de vigencia del calendario juliano se habían acumulado 10 días de retraso, se estableció que el día siguiente al 4 de octubre de 1582 fuese el 15 de octubre de 1582. El año comienza el 1 de enero. El calendario gregoriano consta de doce meses: enero (31 días), febrero (28 ó 29), marzo (31), abril (30), mayo (31), junio (30), julio (31), agosto (31), septiembre (30), octubre (31), 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: Letra Significado Ejemplos G Era AD y Año 1996; 96 M Mes del año Julio; Jul; 07 w Semana del año 27 W Semana del mes 2 D Día del año 189 d Día del mes 10 F Día de la semana en el mes 2 E Día de la semana Jueves; Jue a AM/PM PM H Hora del día (0-23) 0 k Hora del día (1-24) 24 K Hora en AM/PM (0-11) 0 h Hora en AM/PM (1-12) 12 m Minuto de la hora 30 s Segundo del minuto 55 S Milisegundo 978 z Zona horaria GMT -5:00 Z Zona horaria -0500 Pag. 621 APÉNDICE Los pasos a seguir son: 1.- Creación del formateador: SimpleDateFormat s=new SimpleDateFormat("EEEEE,dd 'de' MMMM 'del' yyyy G zz"); 2.- Aplicar el formato a una fecha y asignarlo a una cadena: //asumimos que se tiene un onjeto calendar previamente creado e inicializado String Cad=s.format(calendar.getTime()) ; System.out.println(Cad) ; // jueves,20 de mayo del 2004 AD GMT-05:00 Pag. 622 623 .Pag. 624 .Pag. UML Gota a Gota. 1ra Edición . Jefferson López Goycochea.2003. Algoritmos. 1ra Edición . FIA .BIBLIOGRAFÍA Introducción a las Tecnologías de Información. Martín Fowler / Kendall Scott.USMP. Pag. 625 . 1999. Manual de referencia. Metodología de la Programación. Como Programar en Java. Diagrama de flujo y programas 2da Edición . FIA . Java. Juan José Flores Cueto . Patrick Naughton / Herbert Schildt. Osvaldo Cairó Battistutti.2003. Deitel y Deitel.Aspectos básicos.USMP. Método para la Solución de Problemas Utilizando la Programación Orientada A Objetos . 1998.2004. Pag. 626 . Pag.edu. agradezco cualquier contribución que permita mejorar el material y contenido del presente libro. enviándome un correo electrónico a la siguiente dirección: jflores@usmp. sugerencia o recomendación relacionada al contenido del presente texto podrá realizarla.NOTAS FINALES Cualquier observación. 627 .pe De antemano. 628 .Pag.
Copyright © 2024 DOKUMEN.SITE Inc.