MODELO DE LAS 6D´S



Comments



Description

MÉTODO DE LAS 6’D UML – 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 ........................................................................................................ Método de las 6’D ............................................................................................... Etapas y pasos ...................................................................................... Resumen del método ............................................................................. Resultado de las etapas del método ...................................................... Marco de trabajo ................................................................................................. Modelamiento ..................................................................................................... Algoritmo ............................................................................................................. Programación ..................................................................................................... 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 25 27 28 35 36 37 39 45 54 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 ........................................................................................................ El paquete del lenguaje Java: java.lang ............................................................. Envoltorios de tipos de datos primitivos: wrappers. Introducción ........................................................................................... Métodos ................................................................................................. Problemas resueltos del 61 al 64 ........................................................... Funciones matemáticas: Clase Math. Introducción ........................................................................................... Métodos ................................................................................................. Problemas resueltos del 65 al 99 ........................................................... Manejo de cadenas: Clase String. Introducción ........................................................................................... Métodos ................................................................................................. Problemas resueltos del 100 al 130 ....................................................... Otras clases en Java. Problema resuelto 131 ........................................................................... 259 263 267 269 278 281 282 287 339 340 345 397 CAPÍTULO IV: Estructuras de datos arreglos. Introducción ........................................................................................................ Estructuras de datos: Arreglos. Definición ............................................................................................... Tipos ...................................................................................................... Ventajas y desventajas .......................................................................... Representación gráfica .......................................................................... Declaración, creación e inicialización de arreglos ….............................. Ingreso de datos a un arreglo ................................................................ Manejo de datos de un arreglo .............................................................. Desarrollo de soluciones básicas utilizando arreglos. Introducción ........................................................................................... Formalización de la solución utilizando el método de las 6’D ................ Problemas resueltos del 132 al 145 ....................................................... Desarrollo de soluciones utilizando múltiples arreglos. Arreglos paralelos .................................................................................. Problemas resueltos del 146 al 150 ....................................................... 401 403 403 404 406 408 412 414 416 425 425 493 495 .......................................... Introducción .............. Métodos que no devuelven valor y no reciben parámetros ............... 603 Otras clases Java.................. Métodos que devuelven valor y no reciben parámetros …. Etapas y pasos …………..................... Objeto ……..................................... 573 Clase Lectura ........................ Método constructor ………………………………………………...................................... 625 .................................................................................................................... Métodos que no devuelven valor y reciben parámetros ……...................................................................................CAPÍTULO V: Introducción al Desarrollo de Soluciones Orientadas a Objetos............ Ocultar atributos de instancia ……………………………………………… Ingreso de datos a través del teclado …………………………………….......................... Método de las 6’D. 605 BIBLIOGRAFÍA ........................ Atributo ………………….............. Conceptos básicos........................... Calendar.................................................... GregorianCalendar.......... SimpleDateFormat .............................................................................. Clase …….................. Otros conceptos ……………………………………………………………………… 527 532 534 535 542 544 547 550 554 556 559 561 563 569 APÉNDICE..................... Método …………………............. Problemas propuestos ……………………………………………………......................... Problema resuelto 151 ............................................................... DecimalFormat.................... . pero mejor aun: en el hecho de haber sido probado . A mi juicio. entonces. Este novedoso método está conformado por seis etapas y cada una de ellas tiene una denominación que comienza con la letra D. Al reflexionar sobre la tarea que representa escribir un prólogo para este libro. ya el embrión de la segunda y de aquí. Escasamente un año atrás la Facultad de Ingeniería y Arquitectura de la USMP publicó el primer libro de J. he reparado en lo difícil que resulta agregar valor al ya presentado por su contenido. el título del libro que hoy motiva estas líneas: Método de las 6’D: UML – Pseudocódigo – Java. como consecuencia. 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. ¿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. 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. El panorama de la ingeniería de computación y sistemas evoluciona y cambia mientras trabajamos en ella. resulta estimulante para un espíritu como el de este prolífico docente de la USMP. las características más importantes del texto se reflejan en su fácil lectura y en su orientación al estudiante. J. que la ópera prima de Juan José contenía. 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. acertadamente.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. pero cuya difusión en los textos no tiene la misma celeridad. poniendo énfasis en la solución de problemas y empleando a fondo las capacidades lógicas para el desarrollo de soluciones utilizando una computadora. 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. acumulaba información y escribía sobre ellas. problemas y aplicaciones que contiene. (Un enfoque algorítmico). que para muchos es agobiante. el método es llamado ahora método de las 6 D’s. su desempeño profesional y la constante necesidad de estar actualizado. pues. profundizando en el método de las 6 D’s para presentarnos en tan corto plazo una nueva obra. nuestro autor sabía ya cuáles eran las nuevas tendencias que se perfilaban. Se tuvo en cuenta primordialmente al usuario y por ello. El rápido avance de la ciencia y de la tecnología. Flores Cueto: Método para la solución de Problemas utilizando la Programación Orientada a Objetos y. al momento de aparecer su primer libro. Comprobamos así. reflejada en la aparición de nuevos paradigmas que deben aplicarse rápidamente. 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. RECTOR USMP. una buena documentación y la planificación de soluciones por algoritmos. Por lo arriba expresado y. 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. comprobando su progreso y teniendo en cuenta la definición del problema.con los alumnos. Ing. . por la amistad que me une a Juan José. José Antonio Chang Escobedo. también se tratan los conceptos fundamentales sobre modelado y el lenguaje unificado de modelado UML. 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). Desarrollo de la solución. 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. y Documentación). y sobre la programación utilizando el lenguaje de programación orientado a objetos Java. En este libro se utiliza y se profundiza en el Método de las 6’D. la conversión de datos y la forma cómo son utilizados por las herramientas tratadas en el capítulo anterior. se van agregando. hasta la codificación y prueba de la misma utilizando herramientas y lenguajes de programación. Capítulo I: Se desarrolla la parte teórico formal del método de las 6’D. agrupados en seis etapas (Descripción del problema. análisis del problema. . son tratados durante el desarrollo de los cinco capítulos que forman parte del presente libro. Es importante mencionar que. Los conceptos y temas fundamentales. Diseño de la solución. dependiendo de la forma de solucionar los problemas. 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.PREFACIO Actualmente. Depuración y pruebas. En este capítulo. Se describen sus etapas. Capítulo II: Se desarrolla la estructura de datos más simple: la variable. 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. así como los pasos y los resultados que se deben esperar de cada una de ellas. eliminando o redefiniendo los pasos de algunas de las etapas del método. Definición de la solución. existe una tendencia creciente en el uso de herramientas de desarrollo de software y lenguajes de programación orientados a objetos. diseño de la solución. sobre Algoritmos y las herramientas de diseño conocidas como Diagrama de Flujo y Pseudocódigo. a través del cual se definen los pasos que se tienen que desarrollar para la solución de un problema utilizando una computadora. Estos pasos generalmente se desarrollan desde el planteamiento del problema. lang del lenguaje de programación Java. Es importante que se analicen cada una de las soluciones. La clase String contiene métodos que permiten examinar los caracteres de una cadena para compararlos. el paquete java. son un complemento de los tipos de datos primitivos y proporcionan métodos para realizar diferentes tareas con los tipos de datos primitivos. Las estructuras de datos. tales como la conversión con cadenas de caracteres. las estructuras lógicas de decisión. separando explícitamente el código que maneja los errores del código básico de la aplicación. extraerlos como subcadenas. entre otras. sino que se crean objetos de la clase String).En este capítulo. también se tratan las estructuras lógicas de secuencia.lang. ubicarlos. comprobación. traslación. problemas que se van complicando conforme se tratan y explican los conceptos fundamentales. Se presentan 5 problemas codificados en Java para mejorar la comprensión del tema. crear copias de . Se tratan los conceptos fundamentales sobre el paquete del lenguaje. Se presentan 35 problemas codificados en Java para mejorar la comprensión del tema. raíz cuadrada y funciones trigonométricas. permite declarar y manipular variables de tipo texto o cadena (en realidad no se declaran variables de tipo texto o cadena. las instrucciones de bifurcación y el manejo de excepciones. 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. la clase Math y la clase String. Capítulo III: Se desarrollan los conceptos fundamentales sobre las clases básicas incorporadas en el paquete java. proporciona métodos y atributos para implementar diversas funciones matemáticas. La clase String. con la finalidad de mejorar el desarrollo de sus capacidades lógicas. La clase Math. las clases wrappers (envoltorios). las estructuras lógicas de repetición. se intenten mejorarlas y se desarrollen cada uno de los problemas propuestos incluyendo las variaciones planteadas. Las clases Wrappers. 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. También se presentan 30 problemas desarrollados sobre diferentes tipos de figuras geométricas. 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. logaritmo. considero una buena decisión que se incluyera el presente capítulo. Estoy seguro que el lector estará de acuerdo conmigo. redefiniendo algunos de sus pasos para poder ajustar el método a este tipo de soluciones. fue el primero en ser desarrollado. tales como las clases DecimalFomat. atributos. objetos. tipos. pero faltando unos días para la entrega oficial de todo el material que conformaba el presente libro fue incluido. se formaliza el método de las 6’D. Es importante comentar que el presente capítulo. declaración. métodos y ocultamiento de atributos de instancia. entre otras. Conforme se presenta cada uno de los conceptos mencionados. A pesar de ello. 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 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. Se presentan 30 problemas codificados en Java para mejorar la comprensión del tema. Se tratan los conceptos básicos fundamentales sobre las clases. visualización y cálculo de datos contenido en los arreglos. Finalmente. También se hace una referencia a otras clases en Java que el lector puede explorar. Al final de este capítulo. Se presentan 14 problemas desarrollados. GregorianCalendar y SimpleDateFormat. En base al marco teórico se desarrollan soluciones para el ingreso.una cadena convirtiendo todos sus caracteres a letra mayúscula o minúscula. creación y su inicialización. Capítulo V: Se desarrolla una introducción al desarrollo de soluciones orientadas a objetos. utilizando el método de las 6’D para mejorar la comprensión del tema. se consideró no incluirlo en el presente texto. Capítulo IV: Se desarrolla la estructura de datos conocida como arreglos (arrays). Calendar. representación gráfica. Finalmente. su definición. formalizando el método de las 6’D para el adecuado manejo de los mismos. En el apéndice se incluyen otras clases Java. Por otro lado. pueden ser utilizados de diferente manera de acuerdo a la experiencia de cada persona. Juan José Flores Cueto. Ing. . los cuales permiten sentar las bases modernas para la programación. necesarias para el desarrollo de soluciones utilizando una computadora. 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. 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. Los temas desarrollados a través de los 5 capítulos que forman parte de esta obra.Como se puede apreciar. conforme avance con el entendimiento de los problemas resueltos y el desarrollo de los problemas propuestos. Sólo se tendrá que redefinir algunos de los pasos de las etapas especificadas en el método. Es importante comprender que se puede extender el uso del método a otros temas y a problemas con soluciones mucho más complicadas. . . • Resultado de las etapas del método. Marco de trabajo.Capítulo MÉTODO DE LAS 6’D Un Enfoque Algorítmico 1 Temas: Introducción. • Resumen del método. Método de las 6’D: • Etapas y pasos. Programación. Modelamiento. Algoritmo. . . 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. Estos problemas generalmente son de tipo estructurado. mientras que otros se complican de tal forma que nos afectan de una manera muy profunda. los cuales se van modificando (ajustando) dependiendo del grado de complejidad del problema y las herramientas que se utilicen para su solución. tienen una solución determinada y pueden ser desde muy sencillos hasta muy complejos. es decir. El método propuesto y utilizado en el presente texto es el Método de las 6’D. 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. cada una de las cuales consta de una serie de pasos. Pag. de modo que este se pueda recordar como el Método de las 6’D. se ha definido que el nombre de cada una de las etapas del método comience con la misma letra. que está compuesto de seis etapas. Algunos de ellos podemos solucionarlos fácilmente. el método tiene seis etapas y el nombre de cada una de las etapas comienza con la letra “D”. la letra “D”. por su naturaleza. pueden ser resueltos utilizando una computadora. Con la finalidad de recordar el método.MÉTODO DE LAS 6’D – Un Enfoque Algorítmico. 25 . Es decir. Algunos problemas. Juan José Flores Cueto. 26 .Ing. Pag. 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 Diseño Solución Ingeniería Reversa Etapa 04 Desarrollo Solución Etapa 05 Depuración Pruebas Etapa 06 Document. Pag. 27 .MÉTODO DE LAS 6’D – Un Enfoque Algorítmico. comprender qué es exactamente lo que se desea que se resuelva. Descripción general del problema. es necesario identificar cual es el problema que se desea resolver. concreto y conciso del problema a resolver. 28 . Identificarlo es una de las tareas más importante que los analistas deben afrontar. ENUNCIADO El resultado obtenido en esta etapa es un enunciado claro del problema que se desea solucionar. es decir. Esto que parece algo sumamente sencillo. Pag. Juan José Flores Cueto. Descripción de la Etapa 01 – “Descripción del Problema”: Etapa 01 Descripción del Problema En esta etapa. en primer lugar. ETAPAS Y PASOS METODO 6’D. Identificado el problema es necesario poder comprenderlo en su totalidad. Finalmente se deberá escribir un enunciado claro. muchas veces resulta una tarea agotadora ya que generalmente existen muchas opiniones de cual es el problema central.Ing. PASOS: Identificación del problema. Enunciado claro y preciso del problema. es necesario estudiar a fondo el problema para poder solucionarlo. 29 .MÉTODO DE LAS 6’D – Un Enfoque Algorítmico. Una vez entendido el problema. Esta es una regla que siempre deberá ser aplicada se utilice o no una computadora en la solución de un problema. PASOS: Definir el resultado deseado. ESPECIFICACIONES El resultado obtenido en esta etapa son las especificaciones de lo que se debe hacer para solucionar el problema. Descripción de la Etapa 02 – “Definición de la Solución”: Etapa 02 Definición de la Solución En esta etapa. METODO 6’D. seleccionar la alternativa mas adecuada. para finalmente. Determinar la forma en que los datos serán procesados para transformarlos en información. Determinar los datos que se deben ingresar o generar para obtener el resultado deseado. Pag. saber exactamente en qué consiste y poder descomponerlo en cada una de sus partes para facilitar su comprensión y posterior solución. se está en condiciones de estudiarlo a fondo y plantear diversas alternativas que permitan solucionar el problema. Juan José Flores Cueto. 30 . UML). PASOS: Definir un nombre para el proyecto. Pag. el cual es una herramienta usada para describir clases. Desarrollo de Algoritmos. Descripción de la Etapa 03 – “Diseño de la Solución”: Etapa 03 Diseño de la Solución Definida la solución. objetos y sus relaciones. Para el desarrollo de algoritmos se utiliza Pseudocódigos o Diagramas de Flujo (DF). Para el modelado de la solución del problema se utiliza el Lenguaje Unificado de Modelado (Unified Modeling Language. METODO 6’D. Definición de diagramas. relaciones y clases. los cuales son herramientas utilizadas para diseñar los algoritmos de los diferentes métodos de una clase. Finalizado el desarrollo de los algoritmos es necesario verificar si se ha incluido soluciones para todas las formas en que se presente el problema. 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. A este tipo de prueba se le denomina “Prueba de escritorio”.Ing. se procede a diseñar la lógica modelando y desarrollando algoritmos. Pag. en sentencias de un lenguaje de programación determinado. las especificaciones de las clases (expresadas en notación UML).MÉTODO DE LAS 6’D – Un Enfoque Algorítmico. Estas sentencias son almacenadas en un proyecto (o archivo) lógico. PROGRAMAS El resultado obtenido en esta etapa son los programas y/o clases. 31 . Desarrollar copias de seguridad de los programas de computadora. y los pasos del algoritmo de cada método (expresado en DF o pseudocódigo). METODO 6’D. codificados en un lenguaje de programación. La codificación involucra traducir los diagramas. y constituyen lo que la computadora podrá ejecutar. que permiten solucionar el problema. PASOS: Codificar el proyecto. Descripción de la Etapa 04 – “Desarrollo de la Solución”: Etapa 04 Desarrollo de la Solución Una vez previstas todas las posibilidades y alternativas que puedan presentarse y que pasen sin inconvenientes por la clase y los algoritmos. Desarrollar comentarios internos en los programas de computadora. se podrá proceder a la codificación del problema en algún lenguaje de programación. anular. Descripción de la Etapa 05 – “Depuración y Pruebas”: Etapa 05 Depuración y Pruebas Luego que se codifiquen los programas y/o clases. Realizar pruebas de lógica. Hay que corregir el programa. Al realizarse ésta. PRUEBAS El resultado obtenido en esta etapa son las pruebas que registran el adecuado funcionamiento de la solución del problema. Juan José Flores Cueto. pueden surgir diferentes tipos de errores. PASOS: Realizar la depuración y verificar la correcta escritura de los programas. 32 . siendo los errores de lógica y sintaxis los más comunes. modificar o crear nuevas sentencias.Ing. METODO 6’D. Pag. volver a probar el programa y continuar con la corrección y pruebas hasta conseguir el resultado deseado. deben ser probados mediante la ejecución de los mismos (esto es conocido como corrida del programa). Realizar pruebas de sintaxis. METODO 6’D. 33 . Manuales El resultado obtenido en esta etapa son los manuales que permiten un adecuado manejo de la solución desarrollada. como mínimo: Descripción del problema. Generar el manual del usuario. El manual técnico debe incluir.MÉTODO DE LAS 6’D – Un Enfoque Algorítmico. los cuales serán necesarios cuando se desarrolle software en forma profesional. Pruebas desarrolladas. Pag. Resultados esperados y datos necesarios para generar dichos resultados. Descripción de la Etapa 06 – “Documentación”: Etapa 06 Documentación En esta etapa se recopila toda la documentación generada en las etapas anteriores. DF y/o Pseudocódigo. Dedicarle tiempo a esta etapa nos ayudará a desarrollar buenos hábitos. Diagramas UML. la cual va a servir como base para la elaboración del manual técnico. Generar el manual del programa. Listado de programas con comentarios internos. - PASOS: Recopilar el material generado en cada una de las etapas anteriores. Importar proyecto (archivos class o java) a una herramienta CASE y realizar la ingeniería reversa. DIAGRAMAS ACTUALIZADOS Pag. 34 . METODO 6’D. Ingeniería Reversa n veces Etapa 03 Diseño Solución Etapa 04 Desarrollo Solución Etapa 05 Depuración Pruebas PASOS: • • • Exportar proyecto (archivos class o java) al disco de la PC. Organizar el modelo obtenido en la herramienta CASE.Ing. a través de la Ingeniería Reversa es posible programar o codificar algunas partes (hasta su correcto funcionamiento) que no estén especificadas en la Etapa 03 “Diseño de la Solución”. Es decir. Juan José Flores Cueto. 04 y 05: La ingeniería reversa nos permite crear o 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 ETAPA 05 “Depuración y pruebas”. Adicionalmente es posible realizar “Ingeniería Reversa” entre las Etapas 03. si está trabajando con un IDE. A partir de esta solución se actualizan los diagramas de la Etapa 03 y se continúa con el proceso hasta llegar a la solución deseada. relaciones y clases. los de de los de Definir el resultado deseado. Determinar la forma en que los datos serán procesados para transformarlos en información. Desarrollo de Algoritmos. Definir un nombre para el proyecto. Descripción general del problema. Definición de diagramas. Resumen de las etapas y los pasos del método: Etapa 01 Etapa 03 Diseño Solución Desarrollo Solución Depuración Pruebas Etapa 02 Etapa 04 Etapa 05 Etapa 06 Document. Desarrollar comentarios internos en programas computadora. Pag. Codificar proyecto. Realizar pruebas de lógica. Generar el manual del usuario. Descripción Problema Definición Solución el Identificación del problema. Recopilar el material generado en cada una de las etapas anteriores.MÉTODO DE LAS 6’D – Un Enfoque Algorítmico. Realizar pruebas de sintaxis. Realizar la depuración y verificar la correcta escritura de los programas. 35 . RESUMEN DEL MÉTODO METODO 6’D. Desarrollar copias seguridad de programas computadora. Enunciado claro y preciso del problema. Determinar los datos que se deben ingresar o generar para obtener el resultado deseado. Generar el manual del programa. Ing. Descripción Problema Definición Solución ENUNCIADO ESPECIFICACIONES DIAGRAMAS Y ALGORITMOS PROGRAMAS PRUEBAS Manuales Pag. Resultado de las etapas del Método: Etapa 01 Etapa 03 Diseño Solución Desarrollo Solución Depuración Pruebas Etapa 02 Etapa 04 Etapa 05 Etapa 06 Document. 36 . RESULTADO DE LAS ETAPAS DEL MÉTODO METODO 6’D. Juan José Flores Cueto. 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”). 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. Etapa 01 Descripción Problema ENUNCIADO Etapa 02 Definición Solución MARCO DE TRABAJO Etapa 03 Diseño Solución Etapa 04 Desarrollo Solución Pag. etapa 03 (“Diseño de la solución”) y etapa 04 (“Desarrollo de la solución”). 37 .MÉTODO DE LAS 6’D – Un Enfoque Algorítmico. solo se desarrollarán las tres etapas del método que son posibles especificar en el presente texto. los pasos especificados en cada una de las etapas del método se pueden redefinir (modificar). con la finalidad de resolver una mayor cantidad de problemas y profundizar en la codificación utilizando el lenguaje de programación Java. Herencia. Interfaces Gráficas. y dominar el uso de las estructuras lógicas. algoritmo y programación. es necesario conocer los conceptos fundamentales de modelamiento. instrucciones o sentencias de bifurcación y las estructuras de datos. Conexión a Base de Datos. que dependiendo de la complejidad del problema y de su solución. en el capítulo IV y en el capítulo V del presente texto. También es posible plantear soluciones más complejas utilizando el Método de las 6’D. Este tipo de soluciones son el objetivo del presente texto. Juan José Flores Cueto. Métodos. solo se desarrolla la etapa 04 (“Desarrollo de la solución”). Servlets entre otros. Pag. Es importante mencionar. mientras que en la segunda parte del capítulo II y el capítulo III. 38 .Ing. Para poder solucionar problemas sencillos utilizando el Método de las 6’D. Es importante precisar que en la primera parte del capítulo II. Encapsulamiento. Objetos. Esto significa. Para ello se tendría que dominar otros conceptos. que dependiendo de la complejidad del problema. se solucionan los problemas utilizando el marco de trabajo especificado. Polimorfismo. se puede plantear nuevos pasos y eliminar pasos ya existentes en las diferentes etapas del método. tales como. se detallarán algunos conceptos básicos que serán utilizados en las soluciones planteadas en el presente texto. El Lenguaje Unificado de Modelado (UML) es un lenguaje gráfico que nos permite: • • • • • Visualizar un modelo. 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.. versiones. requisitos..MÉTODO DE LAS 6’D – Un Enfoque Algorítmico. pruebas. planificación. C++. es necesario conocer todos los conceptos relacionados con el desarrollo de Software Orientado a Objetos.. Paquete. un modelo que se utiliza para describir uno o más objetos del mismo tipo. diseño. Construir un modelo en un lenguaje de programación (se establecen correspondencias con lenguajes Orientados a Objetos. Para nuestro propósito. En UML. 39 . Documentar los componentes de un sistema de software (arquitectura.Los paquetes nos permiten organizar las clases de un modelo. En su forma más sencilla.. como Java. que está bajo observación o estudio. Describir el ciclo de vida completo del desarrollo Orientado a Objetos. un paquete se representa de la siguiente forma: NombrePaquete Nombre del paquete. Especificar un modelo (construir modelos precisos.Una clase. Para representar un modelo se utilizará el UML (Unified Modeling Language). Un paquete contiene clases que tienen funciones similares. no ambiguos).. Una clase es una abstracción y no Pag. Clase. Visual Basic..). es simplemente. Un modelo es una representación gráfica o simbólica de algún aspecto del mundo real.). una clase es un conjunto de atributos y métodos. Para desarrollar un modelo y representarlo en UML. real o abstracta. una clase se representa de la siguiente forma: Nombre de la clase y del paquete al cual pertenece la clase.Ing. un objeto se representa de la siguiente forma: NombreClase : nombreObjeto Nombre de la clase a la cual pertenece el objeto y el nombre del objeto. los cuales se muestran a continuación: Diagramas de Clase Paquete Diagramas de Secuencia Diagramas de Casos de Uso Diagramas de Objeto Diagramas de Colaboración Diagramas de Componentes Modelo Diagramas de Estado Diagramas de Distribución Diagramas de Actividad Pag. Un objeto se crea o instancia a partir de una clase. Juan José Flores Cueto. En UML. Ambos nombres deben estar separados por dos puntos. Lista de métodos de la clase. Lista de atributos de la clase.. representa a ningún objeto en particular. UML incorpora nueve diagramas que permiten representar un modelo desde diferentes perspectivas. acerca de la cual almacenamos datos y los métodos que controlan y manipulan dichos datos. NombreClase (NombrePaquete al que pertenece) Atributos Métodos Objeto.Un objeto es cualquier cosa. 40 . En UML. 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. 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).Un diagrama de paquetes permite especificar y visualizar las relaciones de dependencia que existe entre los paquetes que forman parte de una solución. Para nuestro propósito. En UML. una relación de dependencia unidireccional entre dos paquetes se gráfica de la siguiente manera: Relación de dependencia unidireccional. Pag..MÉTODO DE LAS 6’D – Un Enfoque Algorítmico. 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. Diagrama de paquetes. 41 . Dicha clase no tendrá ningún atributo definido y solo se definirá un método (el método principal). relaciones y clases. Este nombre debe ser seleccionado adecuadamente. En el paquete “dominioDeLaAplicacion”. 42 . Uno de ellos lo se llamará “dominioDeLaAplicación” y el otro “biblioteca”. En este paso se desarrollará el diagrama de paquetes y se especificará la relación de dependencia entre los paquetes utilizando UML. seguido de un nombre que identifique a la clase. La definición del nombre del proyecto. En el Método de las 6’D. se definirá la clase que permitirá solucionar el problema planteado utilizando UML.“Diseño de la solución”: Etapa 03 Diseño Solución Se desarrollan los siguientes pasos: Definir un nombre para el proyecto. Para nuestros fines se crearán dos paquetes en las soluciones. Pag. Este nombre debe ser seleccionado adecuadamente. permite agrupar a todos los elementos que serán parte de la solución del problema utilizando el método planteado. y se establecerá una relación de dependencia unidireccional del primero hacia el segundo. El nombre del proyecto comenzará con las letras “Proy” (abreviatura de proyecto). seguido de un nombre que identifique al proyecto. El nombre de la clase comenzará con las letras “Prg” (abreviatura de programa).Ing. Juan José Flores Cueto. el modelamiento de una solución se desarrolla durante la Etapa 03 . Definición de diagramas. MÉTODO DE LAS 6’D – Un Enfoque Algorítmico. Regla general para especificar los nombres de los paquetes. 1 La clase Lectura se trata en el Capítulo II y se especifica en el Apéndice. Si el nombre es compuesto. En el paquete “biblioteca”. se tendrá clase Lectura1 que facilitará el ingreso de los datos a la computadora. Los nombres de los atributos se escriben en minúscula. todas las primeras letras de los nombres simples que forman el nombre de la clase o paquete deberán comenzar con mayúscula. 43 . a partir de la segunda palabra se escribe la primera letra en mayúscula. 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. En caso que el nombre sea compuesto. clases. Los nombres de los métodos cumplen las mismas características que los nombres de atributos a excepción de los métodos constructores. Pag. Juan José Flores Cueto. Pag.Ing. 44 . CARACTERÍSTICAS Descripción de los pasos que deben ser ejecutados (estructuras lógicas). Si se sigue un algoritmo. Descripción de los datos que son manipulados por estos pasos (estructuras de datos). Un algoritmo debe estar definido. Si se sigue un algoritmo dos veces. De esto. en su forma más simple. 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 métodos representan pequeños subprogramas encapsulados dentro de las clases y contribuyen a definir el comportamiento típico de los objetos.MÉTODO DE LAS 6’D – Un Enfoque Algorítmico. indicando el orden de realización de cada paso. Pag. éste debe terminar en algún momento. Un algoritmo producirá uno o más datos de salida. 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. 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. 45 . Un algoritmo puede o no tener datos de entrada. está constituida por atributos y métodos. Todo algoritmo debe ser finito. se debe obtener el mismo resultado. Un algoritmo debe ser preciso. ALGORITMO Una clase. Una descripción de los datos que son manipulados por estos pasos. entender. Pag. En conclusión.Ing. si se desea asignar 5 a la variable “x” se realizará de la siguiente manera: x = 5. Entre dichas herramientas se puede mencionar al pseudocódigo y al diagrama de flujo. Si es un nombre compuesto. 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. se debe entender la importancia de estudiar los “algoritmos” para comprender como se está solucionando un determinado problema. Para asignar un valor a una variable “x” se utiliza el signo igual. Juan José Flores Cueto. Debe ser estructurado. Es necesario que se determinen los datos de entrada y la información de salida. 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). Por lo tanto. Si se desea declarar una variable de tipo texto se realizaría de la siguiente manera: TEXTO x. Para declarar una variable “x” se deberá determinar qué tipo de dato se almacenará. el cual deberá comenzar con una letra mayúscula. Por ejemplo. los algoritmos permiten especificar la lógica de desarrollo de los métodos que conforman una clase. Los datos de entrada y salida deben almacenarse en estructuras de datos. Por ejemplo. Pautas básicas: Todo algoritmo debe tener un nombre. El resultado que se obtenga debe satisfacer los requerimientos de la persona interesada (efectividad). usar y cambiar si es preciso. la primera letra de cada palabra simple deberá estar en mayúscula. 46 . Es decir. Se dispone de diversas herramientas para desarrollar los algoritmos para los métodos de las clases. debe ser fácil de leer. Para indicar que la computadora lea un valor desde un dispositivo externo y lo almacene en la variable “z”. Entonces. Este es el cuerpo del algoritmo expresado en pseudocódigo.MÉTODO DE LAS 6’D – Un Enfoque Algorítmico. Pag. se utiliza: LEER z. La combinación de símbolos especializados y líneas de flujo describe la lógica para la solución del problema (algoritmo). 47 . Las instrucciones se colocan entre INICIO.. 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. 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. se puede afirmar que el Diagrama de Flujo es la representación gráfica de un algoritmo. FLUJO Porque muestra la secuencia de lo que se tiene que realizar.. FIN. 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: INICIO … … … … FIN En ENTRADA y SALIDA se especifican las variables que se usarán en el desarrollo del algoritmo. Para escribir el valor de una variable (observe que la variable no está entre comillas) se utiliza: ESCRIBIR x. ENTRADA / SALIDA Utilizado para ingresar datos y visualizar información que resulta del procesamiento. Juan José Flores Cueto. la INICIO / FIN Este símbolo permite marcar el inicio y el final del algoritmo. 48 . CONECTOR Este símbolo permite que no se crucen los flujos (líneas) en un diagrama. Elementos o símbolos básicos: PROCESO Utilizado para asignar valores a variables y resultados de operaciones matemáticas. FLUJOS (LINEAS) Líneas que permiten unir los diagramas y mostrar la secuencia lógica a la solución del problema.Ing. Pag. . COMENTARIO COMENTARIO “Variables” Utilizada para realizar comentarios internos en la codificación de las soluciones. Permite declarar una variable de tipo texto o cadena. Permite asignar el valor FALSO a una variable lógica. Permite declarar una variable de tipo lógico. NUMERO NUMERO x TEXTO TEXTO mensaje CARACTER CARACTER letra LÓGICO LÓGICO aprobado VERDADERO aprobado = VERDADERO FALSO aprobado = FALSO GRUPO 2 SI (condición) ENTONCES instrucciones.. FINSI”. Permite declarar una variable de tipo numérico. FINSI Permite especificar una estructura de decisión simple “SI.. Se puede visualizar una cadena. ESCRIBIR ESCRIBIR “Hola” ESCRIBIR x ESCRIBIR x + z Utilizada para la salida de información. Permite declarar a una variable de tipo texto o cadena de una sola letra. desarrollados en pseudocódigo y diagrama de flujo. REGLA FORMATO DESCRIPCIÓN GRUPO 1 LEER LEER x Utilizada para el ingreso de datos.MÉTODO DE LAS 6’D – Un Enfoque Algorítmico. El dato ingresado se almacena en la variable especificada. Permite asignar el valor VERDADERO a una variable lógica.. Las estructuras lógicas serán tratadas en el capítulo II. se han clasificado en 6 grupos las reglas definidas. 49 . el contenido de una variable o el resultado de una operación matemática. SI Pag. REGLAS UTILIZADAS POR LAS HERRAMIENTAS Con la finalidad de comprender mejor el diseño de los algoritmos. CUANDO DESDE Permite especificar una estructura de repetición “DESDE. Las estructuras lógicas serán tratadas en el capítulo II.. instrucción n FINMIENTRAS HACER instrucción 1 .. 50 .. .. instrucción n FINDESDE MIENTRAS (condición) instrucción 1 . FINCUANDO”. Las estructuras lógicas serán tratadas en el capítulo II. SINO instrucciones. Las estructuras lógicas serán tratadas en el capítulo II. CASO (valor 2) : instrucciones. instrucción n MIENTRAS (condición) DESCRIPCIÓN Permite especificar una estructura de decisión doble “SI. ...... FINCUANDO DESDE i = valorInicial HASTA valorFinal instrucción 1 . HACER Permite especificar una estructura de repetición “HACER.FINMIENTRAS”.... CONTINUAR CONTINUAR Permite volver a ejecutar una estructura lógica de repetición sin finalizar todas las instrucciones que forman parte de la misma. ..Ing... Las estructuras lógicas serán tratadas en el capítulo II. Las estructuras lógicas serán tratadas en el capítulo II. OTROS instrucciones. REGLA FORMATO SI (condición) ENTONCES instrucciones. Pag. SI / SINO Permite especificar una estructura de decisión múltiple “CUANDO. SINO. TERMINAR TERMINAR Permite terminar la ejecución de una estructura lógica de repetición.FINHACER”... Juan José Flores Cueto. FINSI CUANDO (variable) SEA CASO (valor 1) : instrucciones. FINSI”. . ... MIENTRAS Permite especificar una estructura de repetición “MIENTRAS. ... FINDESDE”.. CASO (valor n) : instrucciones.. El resultado se almacena en la variable “x”. Permite obtener la raíz “n” del número “z”. Permite obtener el número de columnas de una matriz “n”.MÉTODO DE LAS 6’D – Un Enfoque Algorítmico. Permite cambiar a minúscula la cadena almacenada en la variable “n”. Ver capítulo III. El resultado se almacena en la variable “x”. El resultado se almacena en la variable “x”. El resultado se almacena en la variable “x”. LONGITUD x = LONGITUD n FILA x = FILA n COLUMNA x = COLUMNA n MAYÚSCULA x = MAYÚSCULA n MINUSCULA x = MINUSCULA n GRUPO 4 RESTO x = z RESTO n Permite obtener el resto de la división entre las variables “z” y “n”. El resultado se almacena en la variable “x”. El resultado se almacena en la variable “x”. 51 . Ver capítulo III y capítulo IV. DIVIDIR x = z DIVIDIR n Permite obtener la parte entera de la división de las variables “z” y “n”. El resultado se almacena en la variable “x”. RAIZ x = z RAIZ n Pag. El resultado se almacena en la variable “x”. El resultado se almacena en la variable “x”. Permite obtener la longitud de la cadena almacenada en la variable “n” o la longitud del vector “n”. Permite cambiar a mayúscula la cadena almacenada en la variable “n”. El resultado se almacena en la variable “x”. REGLA FORMATO DESCRIPCIÓN GRUPO 3 COSENO x = COSENO n Permite obtener el coseno del valor almacenado en la variable “n”. Ver capítulo III. Ver capítulo III. Permite obtener el número de filas de una matriz “n”. SENO x = SENO n Permite obtener el seno del valor almacenado en la variable “n”. Ver capítulo III. SUBCADENA x = z SUBCADENA n1. El resultado se almacena en la variable “x”. Un arreglo permite almacenar más de un dato del mismo tipo. Permite obtener el número menor entre el valor almacenado en la variable “n” y la variable “z”. n2 ELIMINAESPACIO x = z ELIMINAESPACIO n1. Permite crear un determinada clase objeto de una CREAR CREAR vector[n] CREAR matriz[n1][n2] CREAR CREAR objeto EJECUTAR EJECUTAR algoritmo Permite ejecutar otro algoritmo. 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”. El resultado se almacena en la variable “x”. Pag. Juan José Flores Cueto. GRUPO 6 Utilizada para crear arreglos previamente declarados.Ing. El resultado se almacena en la variable “x”. MAXIMO x = z MAXIMO n MINIMO x = z MINIMO n CARACTER x = z CARACTER n ALEATORIO x = z ALEATORIO n GRUPO 5 Permite obtener una subcadena comprendida entre las posiciones especificadas por “n1” y “n2” de la cadena “z”. n2 Permite eliminar los espacios existentes en una cadena entre las posiciones especificadas por “n1” y “n2”. REGLA POTENCIA FORMATO x = z POTENCIA n DESCRIPCIÓN Permite obtener la potencia “n” del número “z”. El resultado se almacena en la variable “x”. Permite obtener el número mayor entre el valor almacenado en la variable “n” y la variable “z”. 52 . Permite obtener el carácter ubicado en la posición “n” de la cadena “z”. El resultado se almacena en la variable “x”. Los arreglos serán tratados en el capítulo IV. Pag. el algoritmo de una solución se desarrolla después del modelamiento. la cual forma parte del paquete “dominioDeLaAplicación”.“Diseño de la solución”: Etapa 03 Diseño Solución Se desarrollará el siguiente paso: Desarrollo de algoritmos. REGLA PARAMETRO FORMATO PARAMETRO listaVariables DESCRIPCIÓN Permite especificar si un algoritmo recibe datos o valores. En este paso. 53 .MÉTODO DE LAS 6’D – Un Enfoque Algorítmico. Para el desarrollo del algoritmo se utilizará pseudocódigo. se desarrollará el algoritmo para el método especificado en la clase. Permite especificar si retorna una respuesta. un algoritmo RETORNAR RETORNAR variable En el Método de las 6’D. durante la Etapa 03 . una compañía reconocida por sus estaciones de trabajo UNIX de alta calidad. Entonces. un lenguaje de programación es un lenguaje que los programadores utilizan para escribir programas que son comprendidos y ejecutados en una computadora. utilizando alguno de los lenguajes de programación existentes. después la programación estructurada y ahora la programación orientada a objetos. 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.Ing. Juan José Flores Cueto. Entre los lenguajes de programación orientados a objetos podemos destacar a Java. 54 . PROGRAMACIÓN La programación es la traducción del modelamiento y los algoritmos en sentencias que la computadora puede comprender y ejecutar. Existen diferentes lenguajes de programación. luego la programación modular. La acción de escribir programas para una computadora se conoce como codificación. En términos sencillos. se desarrolló la programación lineal. La forma de programación ha variado con el paso de los años. Se puede decir. los cuales están divididos en categorías según su experiencia y dominio de diferentes lenguajes de programación. Al inicio. Las personas que escriben los programas son conocidas como programadores. LENGUAJES DE PROGRAMACIÓN JAVA Java es un lenguaje de programación orientado a objetos desarrollado por Sun MicroSystems. Pag. la mayor parte de los cuales tienen un conjunto de reglas o sentencias muy especializadas. aplicaciones y servlets). el lenguaje Java se diseñó para ser pequeño. Fundamentado en el lenguaje de programación C++.MÉTODO DE LAS 6’D – Un Enfoque Algorítmico. Las sentencias se colocan dentro de los corchetes del método main ( ). también puede ser utilizado como un lenguaje estructurado. … } } Este es el cuerpo del programa en Java. sencillo y portátil a través de plataformas y sistemas operativos. lo cual se hace necesario para poder iniciar el estudio de los conceptos fundamentales de programación. class NombreClase { public static void main ( String arg[ ] ) { … sentencias. lo que significa que los programas Java (applets. En el lenguaje de programación Java. 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. A pesar que Java es un lenguaje de programación orientado a objetos. Estructura básica de un programa desarrollado en Java: package NombrePaquete. pueden ejecutarse en cualquier computadora que tenga instalada una máquina virtual de Java. tanto a nivel de código fuente como binario. para definir que una clase forma parte de un paquete determinado. 55 . 56 . Palabras reservadas en Java: Una palabra reservada o palabra clave. para especificar que una clase tiene un “método principal”. Juan José Flores Cueto. En el caso de Java tenemos las siguientes: abstract byte char continue double final for implements int native package public static switch throw try while Palabras reservadas en Java boolean catch case do class extends default float else if finally instanceof import long interface null new protected private short return super strictfp this synchronized transient throws volatile void widefp break Pag. Todos los lenguajes tienen palabras claves. es aquella que tiene un significado especial para un lenguaje de programación. En el lenguaje de programación Java. No existe código que no esté contenido dentro de un método (a excepción de los bloques estáticos). Todas las clases que tienen especificado un “método principal”. se utiliza las siguientes sentencias: public static void main (String arg[]) Por lo tanto. en el lenguaje de programación Java. Existen clases que tienen un método especial conocido como “método principal”. son clases que pueden ejecutarse. el método principal es conocido como método main ( ). Todo el código ejecutable reside dentro de los métodos de la clase. Es importante comprender que una clase está constituida por atributos y métodos.Ing. Es decir. siendo la POO la más reciente y la que promete solucionar muchos de los problemas de la PE. En el Método de las 6’D. se traducirá lo especificado en el modelamiento y en los algoritmos. 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 este paso. se desarrollará la codificación del proyecto. Pag. En la actualidad. utilizando el lenguaje de programación Java. incorporando nuevas características y nuevos conceptos. 57 .“Desarrollo de la solución”: Etapa 04 Desarrollo Solución Se desarrollará solo el primer paso: Codificar el proyecto.MÉTODO DE LAS 6’D – Un Enfoque Algorítmico. en sentencias que la computadora pueda comprender y ejecutar. la programación de una solución se desarrolla durante la Etapa 04 . 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. Juan José Flores Cueto.Ing. 58 . Pag. Estructuras Lógicas: • • • • • Estructuras lógicas de secuencia. Mapa de estructuras lógicas detallado. Método de las 6´D. • Conversión de datos. Estructuras lógicas de repetición.Capítulo Estructuras Fundamentales para la Solución de Problemas 2 Temas: Introducción. Etapas y pasos. Problemas resueltos en general y sobre figuras. Instrucciones de bifurcación. Estructuras de Datos: Variables • Tipos de datos. . 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. 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. La programación es la traducción del modelamiento y los algoritmos en sentencias que una computadora puede comprender y ejecutar. 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.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. 61 . La técnica que se emplea en el presente texto para el ingreso de datos y visualización de la información. • Estructuras lógicas de repetición. para luego ser codificados en un lenguaje de programación. En su lugar. que facilita el ingreso y visualización de datos utilizando cuadros de dialogo visuales. También incorpora un paquete llamado SWING (a partir de la versión 2 de Java). 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). trata sobre las estructuras fundamentales para la solución de problemas. Pag. que incorporan ventanas. se utilizan las interfaces gráficas de usuario o GUI (por sus siglas en inglés). ALMACENADOS EN: • Estructuras de datos tipo variables. • Estructuras lógicas de decisión. se pueden desarrollar algoritmos de tal forma que estos puedan ser diseñados en pseudocódigo o diagrama de flujo. • Instrucciones de bifucación. Juan José Flores Cueto. Es importante mencionar que utilizando las estructuras fundamentales para la solución de problemas (estructuras lógicas. LISTA DE PASOS DESCRIPCIÓN DE DATOS SENTENCIAS DECLARACIÓN Y DEFINICIÓN DE DATOS SE DESARROLLAN UTILIZANDO: • Estructuras lógicas de secuencia. 62 . instrucciones de bifurcación y las estructuras de datos conocidas como variables). gráficos. colores y otros objetos que permiten una interface visual con el usuario.Ing. El presente capítulo. Una variable sólo puede almacenar un dato a la vez. esto es necesario en los diferentes lenguajes de programación. En Java: Pag. La declaración de una variable se debe realizar antes de que ésta pueda ser utilizada. El nombre de una variable deberá comenzar con una letra minúscula. Generalmente se realiza al inicio de un programa. Si el nombre de la variable está formado por varias palabras. En pseudocódigo: Una variable no puede tener el nombre de una regla o pauta definida. No es válido que el nombre de una variable tenga espacios en blanco ni caracteres especiales (tales como /()=?¨^* etc). se deberá escribir con mayúscula la primera letra de cada palabra.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. 63 . se requerirán dos o tres variables según sea el caso. 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. En pseudocódigo y diagrama de flujo: TipoDeDato ListaDeVariables En Java: TipoDeDato ListaDeVariables . a partir de la segunda palabra que forme parte del nombre. Nombre de variable: Siempre es necesario que las variables tengan un nombre para poder referirse a ellas en cualquier parte de un programa. Si se necesita almacenar dos o tres datos. y Java no es la excepción. Declaración de una variable: Declarar una variable significa definir el nombre de la variable y el tipo de dato que podrá almacenar. (ejemplo: ESCRIBIR). Inicialización de una variable: Es posible que una variable sea definida con un valor inicial y que este valor posteriormente sea modificado. 64 . Almacenamiento de datos en variables: Para almacenar un valor en una variable se utiliza el nombre con el que esta fue declarada. Es bueno definir con un valor inicial a todas las variables declaradas en el programa. seguido del valor que se desea almacenar.Ing. El valor de una variable puede también ser sustituido por el resultado de una operación aritmética o de cálculo. Por ejemplo: En pseudocódigo y diagrama de flujo: suma = 7 + 5 Pag. Juan José Flores Cueto. perderá el valor que anteriormente tenía esta. Es posible almacenar un valor en una variable en cualquier parte del programa. (Ejemplo: String). 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. Se recomienda que el nombre a utilizar en las variables que se empleen. En pseudocódigo y diagrama de flujo: TipoDeDato variable = valor En Java: TipoDeDato variable = valor . guarde relación con el valor que estas almacenan. Donde valor debe ser un valor equivalente al tipo de variable o tipo de dato definido. En pseudocódigo y diagrama de flujo: variable = valor En Java: variable = valor . a continuación el signo igual. 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. Aquí TipoDeDato es opcional y se utiliza sólo si la variable no ha sido declarada anteriormente. Cada vez que almacena un valor en la variable. Dichas variables pueden asumir la función de contador. cuando se desee visualizar el contenido de la variable suma. Acumuladores: Un acumulador o totalizador es una variable cuya función es almacenar un valor como resultado de sumas o restas sucesivas. bandera o flag) es una variable que puede tomar dos posibles valores (1/0. es necesario utilizar variables que permitan almacenar resultados parciales. La función que pueda asumir una variable dependerá de la forma como se plantee la solución para un determinado problema. 65 . acumulador o interruptor. encendido/apagado) dentro de una determinada solución.ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS En Java: suma = 7 + 5 . 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. se observará que el valor obtenido será 12. 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). Interruptores: Un interruptor o conmutador (denominado también centinela. Cabe mencionar que en una solución se puede utilizar una o varias variables que pueden asumir las funciones de contador. En ambos casos. verdadero/falso. acumulador o interruptor. Un contador puede ser creciente o decreciente. 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. si/no. Pag. Otros usos de las variables: Muchas veces. por lo que no podrán ser usadas como nombre de variable.). ENTERO y REAL). multiplicación. Referidos a cualquier letra. Existen diferentes tipos de datos. todos los datos son derivados de ocho tipos de datos básicos. los cuales están divididos –generalmente. char y boolean. A pesar que en el pseudocódigo y diagrama de flujo sólo se reconocen tres tipos de datos.en dos categorías: básicos o simples y compuestos. short. En este contexto. Hay que tener presente que las palabras NUMERO. REAL. Pag. Se puede subdividir en ENTERO y REAL. Los tipos de datos básicos se tratarán en este capítulo y constituyen la base para los tipos de datos compuestos. Referidos a cualquier texto encerrado entre comillas dobles. Referido a los dos posibles valores lógicos (VERDADERO y/o FALSO). etc. 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. double. CARACTER. ENTERO. resta. se debe tener presente que las operaciones matemáticas se resuelven siguiendo las mismas reglas que se aplican en la aritmética tradicional. Con una variable numérica se puede realizar operaciones matemáticas (suma. En Java. TIPOS DE DATOS Definición: Los tipos de datos permiten declarar las variables. TEXTO y LOGICO son reglas utilizadas en el pseudocódigo y diagrama de flujo. digito o símbolo encerrado entre comilla simple. En pseudocódigo y diagrama de flujo se utilizan tres tipos (NUMERO. división. long. int. TEXTO y LOGICO). float. byte. Juan José Flores Cueto.Ing. Tipos de datos en Pseudocódigo: Reglas definidas para los tipos de datos: NUMERO CARACTER TEXTO LOGICO Referidos a cualquier número. 66 . en los lenguajes de programación se tiene una gran variedad de tipos de datos. Estos datos nos permiten definir los tres tipos de variables utilizadas: Variables numéricas: Permiten almacenar sólo tipos de datos numéricos (NUMERO. Para alterar esta prioridad se podrá utilizar los paréntesis. por lo que no está permitido que se usen como nombres de variables. número de AFP. Pag. 67 . Variables de texto: Permiten almacenar datos de tipo texto y datos de tipo caracter (TEXTO y CARACTER). 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. luego las sumas y restas. etc. 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.ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS Por ejemplo: Una serie de operaciones. direcciones. Variables lógicas: Permiten almacenar sólo tipo de datos lógicos. tales como nombres de personas. Primero se resuelven las multiplicaciones y divisiones. Las variables tipo texto son útiles para almacenar cualquier cadena de texto. Existen sólo dos valores que se pueden almacenar en este tipo de variable: verdadero y falso. Las palabras VERDADERO y FALSO constituyen reglas en pseudocódigo y diagrama de flujo. int. double).535 true / flase A diferencia de otros lenguajes de programación.036. Las palabras reservadas que permiten declarar variables son byte.647 -9.372.775. float.147.372. se puede utilizar como un tipo de dato simple para definir datos de tipo TEXTO en Java).036. Las palabras reservadas de Java no pueden ser utilizadas como nombre de variable. long.Ing. Tipo byte short int long float double char boolean Descripción Tipo byte Entero corto Entero Entero largo Real en coma flotante de simple precisión Real con coma flotante de doble precisión. Los datos tipo NUMERO (datos numéricos) se pueden dividir en valores de tipo ENTERO (byte.768 y no se producirá ningún error de ejecución.854. Los String en Java no son un tipo de dato básico (simple). double). por lo que no habrá sorpresas al migrar un programa de un sistema operativo a otro. tipo CARACTER (char) y tipo LOGICO (boolean).483.775. Juan José Flores Cueto. int.223. long) y valores de tipo REAL (float.483. float.807 ±3. mientras que los de tipo char van entre comillas simples (ejemplo. double. 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. short. Para representar una cadena de caracteres en Java. y forman parte de las palabras reservadas del lenguaje. Es importante destacar que estos ocho tipos de datos simples son diferentes.7*10-308 … ±1. 68 .7*10308 0 … 65. short. Los valores de los datos de tipo String van entre comillas dobles (ejemplo. Pag.4*10-38 … ±3. sino un tipo de dato compuesto (a pesar de ello. int. char y boolean.223.767 se le suma 1. Por ejemplo: si a una variable de tipo short con el valor 32. se utiliza la clase String. “Hola”) y permite almacenar cadenas de texto.147. ‘K’) y sólo permiten almacenar un solo caracter.648 2.854.808 9. en Java los tipos de datos simples no dependen de la plataforma ni del sistema operativo.4*1038 ±1. Caracter Lógico Longitud 1 byte 2 bytes 4 bytes 8 bytes 4 bytes 8 bytes 2 bytes 1 byte Rango -128 … 127 -32768 … 32767 -2. Un entero de tipo int siempre tendrá 4 bytes. short. Es importante mencionar que Java no realiza una comprobación de rangos. pero entre ellos se pueden agrupar como datos de tipo NUMERO (byte. long. el resultado será -32. out. } } Observación: No se puede almacenar un número real grande (double) en una variable entera (int). class PrgTipoDato01 { public static void main ( String arg [ ] ) { double numReal = 4.println ( numEntero ) . En base a esto. solo podrá almacenar valores de dicho tipo de dato. si se declara una variable con un tipo de dato específico. Pag. Es decir. el programa indicará un error.out. } } Observación: No se puede almacenar un número real grande (double) en una variable real (float). int numEntero . Clase PrgTipoDato02 package dominioDeLaAplicacion . // La siguiente línea genera error. class PrgTipoDato02 { public static void main ( String arg [ ] ) { double numRealDouble = 2. una variable solo puede almacenar valores de acuerdo al tipo de dato con el que fue declarado. numEntero = numReal . System.3 .ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS Como regla general. float numRealFloat .println ( numRealFloat ) .3 . System. Ejemplos: Clase PrgTipoDato01 package dominioDeLaAplicacion . // La siguiente línea genera error. numRealFloat = numRealDouble . si se declara una variable con un tipo de dato específico y se intenta almacenar un valor de distinto tipo. 69 . al momento de compilar. // La siguiente línea genera error. Juan José Flores Cueto. char caracter .Ing.println ( caracter ) . caracter = estado . } } Observación: No se puede almacenar un valor lógico (boolean) en una variable caracter (char). class PrgTipoDato03 { public static void main ( String arg [ ] ) { boolean estado = true . Pag. System. 70 .out. Clase PrgTipoDato03 package dominioDeLaAplicacion . mas grande) y son generadas automáticamente por el compilador Java. 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. 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.out.println ( numEnteroGrande ) . float y double Ejemplos. y la excepción para estos casos se denomina conversión de datos. También se puede aplicar sobre el tipo de dato char. esta también tiene su excepción. Esto es válido ya que el tipo de dato long en Java es de mayor precisión que el tipo de dato int.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. Clase PrgTipoDato04 package dominioDeLaAplicacion . long. int. long numEnteroGrande . short. La conversión de datos se aplica generalmente sobre los tipos de datos numéricos. 71 . short. es decir entre datos de tipo byte. class PrgTipoDato04 { public static void main ( String arg [ ] ) { int numEntero = 5 . numEnteroGrande = numEntero . // Se visualiza 5 System. Pag. long. Pero como toda regla. int. // La siguiente línea no genera error. } } 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). float y double. 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. // Se visualiza 97.Ing. al momento de compilar. numReal = caracter . Lado izquierdo de la expresión En caso contrario. El cast se realiza colocando entre paréntesis Pag. 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. si el lado derecho de la expresión tiene un tipo de dato más amplio que el lado izquierdo. double numReal .out. } } 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. Estás conversiones son inseguras y puedan dar lugar a errores. // La siguiente línea no genera error. Juan José Flores Cueto. 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. La conversión implícita de datos en Java. En ambos casos. 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 . se da de un tipo de dato de menor precisión a uno de mayor precisión. Clase PrgTipoDato05 package dominioDeLaAplicacion .0 (la letra a en código ASCII es 97). por lo que se visualiza 97. class PrgTipoDato05 { public static void main ( String arg [ ] ) { char caracter = ‘a’ .println ( numReal ) .0 System. 72 . Este tipo de conversión de datos se le denomina también cast (casting). el programa indicará un error. num2 = 3 . Clase PrgTipoDato06 package dominioDeLaAplicacion . Pag. Finalmente. int div .ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS el tipo de dato al que se desea convertir el resultado de una expresión. // 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. } } 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). class PrgTipoDato07 { public static void main ( String arg [ ] ) { double num1 = 20. div = ( int ) ( num1 / num2 ) . System.out. 73 . int div . Ejemplo.println ( div ) . System. entre otras. num2 = 3 .println ( div ) . div = num1 / num2 . class PrgTipoDato06 { public static void main ( String arg [ ] ) { double num1 = 20. // La siguiente línea no genera error. } } Clase PrgTipoDato07 package dominioDeLaAplicacion . // Se visualiza 6.out. Ing. Pag. 74 . Juan José Flores Cueto. 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 .La regla. finalizada la ejecución de una instrucción. .La clase. 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. En diagrama de flujo. Representación: Para representar la salida o visualización de la información se utiliza: .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. se inicia la ejecución de la siguiente hasta completar la ejecución de todas las instrucciones que forman parte de la secuencia. Este tipo de estructura permite mostrar información a través de un dispositivo de salida de una computadora. Las instrucciones se ejecutan una a una de tal modo que. 75 .El símbolo. En pseudocódigo. Tipos: 1. Pag. System En Java. el contenido de una variable o el resultado de una operación matemática. Este tipo de estructura permite ingresar datos a través de un dispositivo de entrada de una computadora. System. Representación: Para representar la entrada de datos se utiliza: . posteriormente. Juan José Flores Cueto. Si desea visualizar la cadena de texto “Hola Mundo” utilizando pseudocódigo y diagrama de flujo. En diagrama de flujo. y cuando se utiliza la palabra “println” se mostrará la cadena de texto y el cursor se colocará en la siguiente línea.La regla. Por ejemplo.out. 76 . deberá realizarlo de la siguiente manera: System. 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. LEER . En pseudocódigo. la información necesaria. 2. Es importante mencionar que se puede visualizar una cadena de texto. Cuando se utiliza la palabra “print” se mostrará la cadena de texto y el cursor permanecerá al final de la cadena de texto mostrada.out. lo realizará de la siguiente manera: ESCRIBIR “Hola Mundo” “Hola Mundo” Si desea codificarlo en el lenguaje de programación Java.Ing.print (“Hola Mundo”).println (“Hola Mundo”). Se puede utilizar la palabra “print” o “println”.El símbolo. 1 Esta clase es una implementación mejorada de la clase Math2 Es importante mencionar. un leerInt() Lectura. titulado “Método para la solución de problemas utilizando la programación orientada a objetos – Aspectos básicos”. Pag.ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS . se trata en detalle la clase Lectura. Permite ingresar número entero largo. Gisella Guzmán. 77 . que esta clase permitirá ingresar datos en forma tradicional y será usada para la codificación de algoritmos en Java. En consecuencia. una leerChar() Permite ingresar un caracter (una sola letra o número) Permite ingresar número entero. Es importante mencionar que el lenguaje de programación Java no proporciona una clase que facilite el ingreso de datos en forma tradicional.class leerLong() un leerFloat() Permite ingresar un número con parte decimal. CLASE MÉTODO leerString() DESCRIPCIÓN Permite ingresar cadena de texto. leerDouble() La clase Lectura fue desarrollada por la Srta.La clase. La clase Lectura va a facilitar el ingreso de datos en forma tradicional. En el Apéndice. se utilizará una clase en Java desarrollada especialmente para que cumpla dicha finalidad. Permite ingresar un número con parte decimal. Lectura En Java. 1 Se puede revisar el uso de la clase Math2 en el primer libro del autor. Juan José Flores Cueto. 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: O lógico: Negación: En Java: Y lógico: O lógico: Negación: && || ~ Y (AND) O (OR) N (NOT) Formatos: Formato para diseñar algoritmos: Pseudocódigo INICIO Instrucciones . 3. 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. Representación: Para representar las operaciones aritméticas se utilizan los mismos signos que se emplean en la aritmética tradicional (+. -. Estas instrucciones se ejecutarán una tras otra. FIN EXPLICACIÓN: Todas las instrucciones que son parte de la solución del problema deberán aparecer entre las reglas INICIO y FIN. Pag. 78 .Ing.. /). *.. Formato para codificar algoritmos: Lenguaje de Programación Java EXPLICACIÓN: Inicialmente... // sentencias ... El método main ( ) es conocido como el método principal. 79 .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 .. } } Al conjunto de pasos que forman parte de un programa de computadora se les denomina sentencias. y es desde donde se inicia la ejecución de las sentencias.. Pag. Dentro del símbolo se indicará si es el inicio o el fin de la solución con las reglas INICIO o FIN. se puede afirmar que todas las sentencias que son parte de la solución aparecerán dentro de los métodos.. class NombreClase { public static void main (String a[]) { . FIN Al conjunto de pasos que forman parte de un algoritmo se les denomina instrucciones.. Juan José Flores Cueto. 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.. de tal forma que en función de una condición o el valor de una variable. FINSI Pag. Si la condición resulta falsa. 80 . se pueda desviar la secuencia de la solución entre diferentes alternativas. no se ejecutan las instrucciones que se encuentran entre las reglas ENTONCES y FINSI..Ing. Tipos: 1. 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. Este tipo de estructura es útil cuando se tiene la posibilidad de escoger una determinada opción. SI (condición) ENTONCES instrucciones.. Formato para diseñar algoritmos: Pseudocódigo EXPLICACIÓN: Si la condición resulta verdadera. se ejecutan las instrucciones que se encuentran entre las reglas ENTONCES y FINSI. Estructuras lógicas de decisión simple Definición: Una estructura de decisión simple “SI. Las Estructuras Lógicas de Decisión son conocidas también como Estructuras de Selección.. VERDADERO condición ? .... instrucciones.ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS Diagrama de Flujo EXPLICACIÓN: Si la condición resulta verdadera. } Pag. Si la condición resulta falsa. se sigue el flujo etiquetado con la regla o pauta “FALSO” y no se ejecutan las instrucciones que se encuentran en el flujo etiquetado con la regla “VERDADERO”. . se ejecutan las sentencias que se encuentra entre las llaves { }.... 81 . if (condición) { sentencias. Si la condición resulta falsa.. FALSO Formato para codificar algoritmos: Lenguaje de Programación Java EXPLICACIÓN: Si la condición resulta verdadera.. no se ejecutan las sentencias que se encuentran entre las llaves { }. se ejecutan las instrucciones que se encuentran en el flujo etiquetado con la regla “VERDADERO”. Si la condición resulta verdadera. 82 . En ningún caso se podrá ejecutar ambos conjuntos de pasos a la vez. 2.. y si la condición resulta falsa.Ing... FINSI Pag. Formato para diseñar algoritmos: Pseudocódigo EXPLICACIÓN: Si la condición resulta verdadera. Sólo se ejecuta uno de los grupos de instrucción. Este tipo de estructura es útil cuando se tiene la necesidad de escoger entre dos posibles opciones. se ejecutan las instrucciones que se encuentran entre las reglas ENTONCES y SINO. en ningún caso se podrá ejecutar ambos grupos. SINO instrucciones.. se ejecuta otro conjunto de pasos. ejecutando un conjunto de pasos dependiendo del resultado de una condición lógica.. SINO.. se ejecuta un conjunto de pasos. Estructuras lógicas de decisión doble Definición: Una estructura de decisión doble “SI. Si la condición resulta falsa se ejecutan las instrucciones que se encuentran entre las reglas SINO y FINSI.. SI (condición) ENTONCES instrucciones. Juan José Flores Cueto.. FINSI” permite alterar el flujo secuencial (o pasos secuenciales) de una solución. Si la condición resulta falsa. se ejecutan las instrucciones que se encuentran en el flujo etiquetado con la regla “VERDADERO”.... se ejecutan las instrucciones que se encuentran en el flujo etiquetado con la regla “FALSO”... Formato para codificar algoritmos: Lenguaje de Programación Java EXPLICACIÓN: Si la condición resulta verdadera. se ejecutan las sentencias que se encuentran entre las llaves { } ubicadas después de la palabra reservada else. } Pag... instrucciones . se ejecutan las sentencias que se encuentran entre las llaves { } ubicadas después de la palabra reservada if.. 83 .ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS Diagrama de Flujo EXPLICACIÓN: VERDADERO condición ? FALSO . } else { sentencias.... Si la condición resulta verdadera. . if (condición) { sentencias. Si la condición resulta falsa. instrucciones .. se ejecutan las instrucciones que están dentro del mismo.. se ejecutan las instrucciones que están dentro de la regla OTROS. Estructuras lógicas de decisión múltiple Definición: Una estructura de decisión múltiple “CUANDO... OTROS instrucciones. Este tipo de estructura es útil cuando se tiene la necesidad de escoger entre más de dos opciones. Juan José Flores Cueto.Ing.. 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 una de las reglas CASO.. CASO (valor n) : instrucciones. 3. Si el valor de la variable no es igual a ninguno de los valores colocados después de una de las reglas CASO. 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.. FINCUANDO Pag. CUANDO (variable) SEA CASO (valor 1) : instrucciones. puede aparecer como no). para cada posible valor que pueda tener la variable se define un conjunto de pasos a ejecutar. 84 .. Generalmente... CASO (valor 2) : instrucciones. se ejecutan las instrucciones que están seguidas del flujo (las que indica la flecha).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. 85 . Pag. Si el valor de la variable no es igual a uno de los valores de las etiquetas de los flujos. se ejecuta el flujo que tiene como regla OTROS. El flujo con la regla OTROS es opcional. Pag. case valor 2 : sentencias. se deberá utilizar un caracter encerrado entre comillas simples después de la palabra reservada case. Si el valor de la variable no es igual a ninguno de los valores colocados después de una de las palabras reservadas case.. 86 . se dará con la sorpresa que tendrá errores de sintaxis. En caso que la variable sea de tipo caracter (definida con la palabra reservada char). al momento de ejecutar un programa. default : sentencias. se ejecutan las sentencias que están dentro del mismo hasta llegar al final (es decir hasta la llave) a no ser que encuentre una palabra reservada break entre las sentencias que se ejecutan. se deberá utilizar números enteros después de la palabra reservada case. etc). valor 2..Ing. se ejecutan las sentencias que están dentro de la palabra reservada default.. 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. 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.. Juan José Flores Cueto. se debe emplear correctamente los formatos establecidos. Cuando se codifique un algoritmo recuerde que se tiene que seguir las reglas del lenguaje de programación que usará.. Cuando se diseñe un algoritmo que necesite utilizar estructuras de decisión. } 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.. ya que estos constituyen lo que denominamos un “estándar” o acuerdo. switch (variable) { case valor 1 : sentencias.. case valor n : sentencias.. caso contrario. Si la variable es de tipo entero (definida con la palabra reservada int). La palabra reservada default es opcional (es decir puede aparecer como no). 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.. . instrucción n FINDESDE Pag. 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. Las Estructuras Lógicas de Repetición son conocidas también como estructuras de iteración o bucles. Tipos: 1. de tal forma que. se pueda repetir un conjunto de pasos un determinado número de veces. FINDESDE” permite repetir una instrucción. Estructura lógica de repetición “DESDE” Definición: Una estructura de repetición “DESDE.. Este tipo de estructura es útil cuando se necesita repetir una instrucción o bloque de instrucciones un cierto número de veces. en función de una condición o el valor de una variable.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. . o un bloque de instrucciones.. 87 .. un número determinado de veces o hasta que una condición se cumpla. El equivalente de esta estructura en diagrama de flujo se muestra a continuación: Pag. 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. 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. es decir si ya llegó HASTA valorFinal. Incremento: INCREMENTA valor Cada vez que finaliza la ejecución de las instrucciones o bloque de instrucciones ubicadas entre las reglas DESDE y FINDESDE. 2. en este caso. EXPLICACIÓN: Esta estructura tiene tres partes: 1. 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. se utiliza la regla DECREMENTA en lugar de la regla INCREMENTA. se procede a ejecutar esta parte.. se ejecuta esta parte y se INCREMENTA (aumenta) el valor de la variable índice “i” según se indique en valor.Ing. 88 . Aquí se evalúa si la variable índice es igual a valorFinal. Prueba: HASTA valorFinal 3.. En caso que la variable índice sea igual a valorFinal. Juan José Flores Cueto. se volverá a ejecutar las instrucciones o bloque de instrucciones ubicadas entre las reglas DESDE y FINDESDE. Si la variable índice no es igual a valorFinal. FINDESDE y permite asignar un valor inicial a la variable “i” o la que se utilice en vez de ésta. Una vez que se termina de INCREMENTAR o DECREMENTAR la variable índice. 89 .. . Pag. la cual se muestra a continuación: El fin de las instrucciones o bloque de instrucciones que forman parte de la regla DESDE. 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.... se representa por el siguiente símbolo: Este último símbolo es equivalente a la regla FINDESDE utilizada en pseudocódigo. 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..ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS Diagrama de Flujo DESDE i HASTA z INCREMENTA x FALSO VERDADERO .. Ambas reglas se encuentran dentro del símbolo que representa la regla o pauta DESDE. instrucciones. En pseudocódigo y diagrama de flujo se utiliza la regla HASTA valorFinal.. Pag.. Es importante indicar que el inicio y fin de la sentencia for se representan con llaves ({ }).Ing. Si la condición es verdadera.. la regla DESDE está representada por la sentencia for. incremento) { sentencias. Formato para codificar algoritmos: Lenguaje de Programación Java for ( i = valorInicial .. 90 . mientras que en Java se utiliza una condición lógica (ejemplo: i >10).. } EXPLICACIÓN: En Java. Estructura lógica de repetición “MIENTRAS” Definición: Una estructura de repetición “MIENTRAS. FINMIENTRAS”. al igual que una estructura lógica de repetición “DESDE. en Java esta estructura está constituida por tres partes. Juan José Flores Cueto. se finaliza la ejecución continuando con la siguiente sentencia. FINDESDE”. Esta parte constituye la prueba en Java. permite repetir una instrucción o un bloque de instrucción mientras que una condición se cumpla o ésta sea verdadera.. condición . Este tipo de estructura es útil cuando se necesita repetir una instrucción o bloque de instrucciones un número de veces no determinado. en el caso que sea falso. se continúa con la ejecución de las sentencias o bloque de sentencias que pertenecen a la estructura de repetición. Al igual que en pseudocódigo y diagrama de flujo. 2. 91 . podemos obtener dos posibles resultados: Si el resultado de evaluar la condición lógica es verdadera..ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS Formato para diseñar algoritmos: Pseudocódigo MIENTRAS (condición) instrucción 1 . Esto significa que mientras la evaluación de la condición lógica resulte verdadera. 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.. . Pag. FINMIENTRAS y se continúa con la ejecución del algoritmo. El equivalente de esta estructura en diagrama de flujo se muestra a continuación.. . Una vez evaluada la condición lógica. se ejecutará la estructura lógica de repetición MIENTRAS. nuevamente.. En la figura. FINMIENTRAS y se evalúa. Si el resultado de evaluar la condición lógica es falsa. 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 observa donde se ubica la condición lógica y los flujos etiquetados con las reglas “VERDADERO” y “FALSO”... la condición lógica. FINMIENTRAS y que sólo finalizará cuando la evaluación de la condición lógica resulte falsa. ... } Pag.... Diagrama de Flujo FALSO condición ? VERDADERO .Ing. 92 .. Juan José Flores Cueto. Formato para codificar algoritmos: Lenguaje de Programación Java while (condición) { sentencias... instrucciones. siendo necesario ejecutar la instrucción o bloque de instrucciones por lo menos una vez. al igual que una estructura lógica de repetición “DESDE. se utiliza una condición lógica (ejemplo: i >10) para verificar si se ejecuta la estructura o no. FINMIENTRAS” prueba la condición antes de ejecutar la instrucción o bloque de instrucciones. Este tipo de estructura es útil cuando se necesita repetir una instrucción o bloque de instrucciones un número de veces no determinado.. 3. La principal diferencia entre ambos consiste en que la estructura lógica de repetición “MIENTRAS... Pag.. Es importante indicar que el inicio y fin de la sentencia while se representan con llaves ({ }). 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.. en el caso que sea falso.. 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. En la sentencia while. La estructura lógica de repetición “HACER. permite repetir una instrucción o un bloque de instrucciones mientras que una condición se cumpla o sea verdadera. MIENTRAS”.ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS EXPLICACIÓN: En Java. FINMIENTRAS”. MIENTRAS” ejecuta al menos una vez las instrucciones o bloque de instrucciones antes de probar la condición. se finaliza la ejecución continuando con la siguiente sentencia. FINDESDE” y una estructura lógica de repetición “MIENTRAS. Esta condición lógica constituye la prueba en Java... 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. 93 . la regla MIENTRAS está representada por la sentencia while. Ing.. se vuelve a ejecutar la estructura. Si al evaluar la condición lógica ésta resulta verdadera. Pag. Formato para diseñar algoritmos: Pseudocódigo HACER instrucción 1 .. se procede a ejecutar. nuevamente. 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.. se realiza la evaluación de la condición lógica ubicada junto a la regla MIENTRAS. Juan José Flores Cueto. MIENTRAS se ejecuta por lo menos una vez antes de ser evaluada la condición lógica. ... . nuevamente la condición lógica. Esto significa que la estructura lógica de repetición HACER. finaliza la ejecución de la estructura. las instrucciones que están dentro de la estructura lógica de repetición HACER. MIENTRAS se procede a ejecutar las instrucciones que están dentro de la misma. se continúa con la ejecución del algoritmo. Al final.. Si el resultado de evaluar la condición lógica es falso. MIENTRAS y se evalúa. 94 . instrucción n MIENTRAS (condición) EXPLICACIÓN: Cuando se ejecuta la estructura lógica de repetición HACER. continuando con la siguiente instrucción del algoritmo. caso contrario. .. Diagrama de Flujo . En la figura. 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.. 95 . Pag. se observa donde se ubica la condición lógica y los flujos etiquetados con las reglas “VERDADERO” y “FALSO”. } while (condición) ... continuando con la siguiente sentencia. En la sentencia do. Si la condición es verdadera. Pag. al igual que en pseudocódigo y diagrama de flujo. se finaliza la ejecución. para verificar si se vuelve a ejecuta la estructura o no. Es importante indicar que el inicio y fin de la sentencia do se representan con llaves ({ }). se utiliza una condición lógica (ejemplo: i >10) al final de la estructura. 96 . Esta condición lógica constituye la prueba en Java. en el caso que sea falso.Ing. EXPLICACIÓN: En Java. Juan José Flores Cueto. se vuelve a ejecutar las sentencias o bloque de sentencias que pertenecen a la estructura de repetición. la regla HACER está representada por la sentencia do. Para esto. En Java. 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). Se utiliza para salir de un bucle.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. Esta sentencia permite salir anticipadamente de una iteracción de un bucle. es decir. esta sentencia permite que el control de la ejecución de la solución vuelva al método llamante. 97 . esta instrucción de bifurcación es conocida como la sentencia return. 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). Pag. Instrucción “TERMINAR”. se utilizan las instrucciones de bifurcación o salto. 1. Es decir. sin analizar la condición y sin ejecutar el resto de código del cuerpo del bucle. 2. cuando se encuentra la sentencia continue se ejecuta la siguiente iteracción del bucle sin procesar el resto del código. Instrucción “CONTINUAR” En Java. Esta sentencia se utiliza para volver explícitamente de un método. 3. esta instrucción de bifurcación es conocida como la sentencia continue. Instrucción “RETORNAR” En Java. Estructuras Lógicas de Repetición. Mapa de Estructuras Lógicas detallado: Utilizando las estructuras lógicas fundamentales y las instrucciones de bifurcación. Juan José Flores Cueto. 98 . Estructuras Lógicas de Secuencia. Las estructuras lógicas fundamentales y las instrucciones de bifurcación se resumen a continuación: Estructuras Lógicas. para luego ser codificados en un lenguaje de programación.Ing. Instrucciones de Bifurcación. Estructuras Lógicas de Decisión. se pueden desarrollar algoritmos de tal forma que estos puedan ser diseñados en pseudocódigo o diagrama de flujo. “LEER” “ESCRIBIR” “PROCESAR” “SI” “SI / SINO” “CUANDO” “DESDE” “MIENTRAS” “HACER” “TERMINAR” “CONTINUAR” “RETORNAR” Pag. Establecer la dependencia. mientras que en la Etapa 04 “Desarrollo de la solución” se tiene la parte de codificación (paso 1). para los siguientes problemas hasta el final del presente capítulo (capítulo II). • Establecer como se solucionará el problema (proceso). Se utiliza el lenguaje de programación Java. Dichas etapas y pasos han sido desarrollados en su totalidad en los primeros 22 problemas. • Definir los paquetes y desarrollar el diagrama de paquetes respectivo. • Determinar los datos de entrada (entrada). 2 y 3) y algoritmo (paso 4). Esto permite presentar una mayor cantidad de problemas con sus respectivas codificaciones. También se puede utilizar esta división en el desarrollo de las soluciones. 99 . Pag. Sin embargo. ENUNCIADO DEL PROBLEMA Etapa 02 Definición Solución Etapa 03 Diseño Solución Etapa 04 Desarrollo Solución • Determinar la información deseada (salida). se presentan las etapas del Método de las 6’D con sus respectivos pasos. • Codificar el diseño de la solución del problema. • Definir las clases que serán parte de la solución del problema. • Determinar el nombre del proyecto. (Utilice UML). En forma general. la Etapa 03 . y para los problemas del siguiente capítulo (capítulo III). Se utiliza pseudocódigo.ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS MÉTODO DE LAS 6´D – ETAPAS Y PASOS A continuación. (Utilice UML). • Diseñar el algoritmo para el método principal.“Diseño de la lógica” se divide en dos partes: modelamiento (paso 1. solo se ha incluido la Etapa 04 – “Desarrollo de la solución”. Juan José Flores Cueto. 100 .Ing. Pag. Para solucionar el problema se desarrollarán las especificaciones del proyecto en UML y el algoritmo en pseudocódigo. Paquete y clase DominioDeLaAplicacion PrgMensaje main() Pag. 1. 101 . Etapa 02 – Definición de la solución. El mensaje a mostrar será “Hola bienvenidos”.Descripción del problema.ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Problema 01 Etapas para la solución de un problema: Etapa 01 . Desarrollar un proyecto que permita mostrar un mensaje por la pantalla. Ninguno. Resultado deseado: Datos necesarios: Procesamiento: Mostrar mensaje “Hola bienvenidos”. Etapa 03 . Definición de Paquete y Clase. Nombre del Proyecto: ProyMensaje 2. El mensaje será almacenado en una variable (mensaje) y posteriormente mostrado.Diseño de la lógica. Juan José Flores Cueto. podemos apreciar los elementos básicos de un programa en Java. se visualiza en la pantalla el mensaje “Hola Bienvenido”. public static void main ( String arg [ ] ) { String mensaje . */ package dominioDeLaAplicacion . Una vez que se ejecute este programa. Etapa 04 – Desarrollo de la Codificación.print (mensaje) . } } Pag. mensaje = “ Hola bienvenido ” .out. Diseño de algoritmo para el método principal Algoritmo PrgMensaje . class PrgMensaje { // La ejecución empieza en el método main.Ing. 102 . La codificación se desarrolla utilizando el lenguaje de programación Java. Clase PrgMensaje /* Este es el primer programa. 3.método main() ENTRADA: SALIDA: INICIO TEXTO mensaje mensaje = “ Hola bienvenido ” ESCRIBIR mensaje FIN mensaje Algoritmo para el método main ( ) diseñado en pseudocódigo. Aunque es sencillo. System. Recuerde que.ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Análisis de la solución: En primer lugar. se estableció el nombre del paquete. cuya función en el algoritmo es almacenar datos de salida. analizaremos el algoritmo del método main ( ) diseñado en pseudocódigo para la solución del problema anterior. A continuación. 103 . Observe que no se ha definido ninguna variable de entrada. SALIDA: Luego tenemos: INICIO Esta palabra permite indicar el inicio de los pasos que constituyen la solución al problema planteado. Aquí se declara que se utilizará una variable de nombre mensaje cuyo tipo de dato es TEXTO o cadena. Observe que se ha definido la variable mensaje como una variable de salida. A continuación: TEXTO mensaje Esta línea está referida al paso 1 del algoritmo diseñado en pseudocódigo. La primera línea: ALGORTIMO PrgMensaje Está referida al nombre del algoritmo. SALIDA: En esta parte se hace referencia a todas las variables. Aquí se asigna el valor “ Hola bienvenidos ” a la variable mensaje. se definió el nombre del proyecto. para asignar un valor a una variable. Luego tenemos: ENTRADA: En esta parte se hace referencia a todas las variables. Luego tenemos: mensaje = “ Hola bienvenidos ” Esta línea está referida al paso 2 del algoritmo diseñado en pseudocódigo. Observe que la primera letra se escribe con mayúscula. en el cual se codifica la solución. En este caso. cuya función en el algoritmo es almacenar datos de entrada. se utiliza el símbolo igual (=). el nombre es PrgMensaje. el nombre de la clase y el método main ( ). A continuación: ESCRIBIR mensaje mensaje A continuación: Pag. Es decir. valor que fue asignado a la variable en el paso 2. En Java existen tres tipos de comentarios. Es decir. se muestra “ Hola bienvenidos ” . Los comentarios de múltiples líneas pueden tener una o varias líneas de longitud.Ing. Tal como la mayoría de lenguajes de programación. analicemos cada línea de la codificación del algoritmo en el lenguaje de programación Java: En primer lugar. Ahora. Es decir. Java le permite colocar comentarios en el código fuente de los programas. */ Este es un comentario. En nuestro caso. Todo aquello que se escribe entre los dos símbolos de comentario de múltiples líneas /*………. Los pasos que están entre las palabras INICIO… FIN constituyen la parte más importante del algoritmo y es conocido como “cuerpo del algoritmo”. En problemas grandes se utilizan los comentarios para explicar para qué sirve cada característica del programa y cómo éstas se ejecutan. Los comentarios no son ejecutados. observamos que el programa empieza con las siguientes líneas: /* Este es el primer programa. */ es ignorado al momento de ejecutar el programa. se puede utilizar los comentarios para describir paso a paso lo que hace el programa. el comentario nos permite identificar el programa. El que se acaba de mostrar se llama comentario de múltiples líneas. A través de la palabra ESCRIBIR se muestra el contenido de la variable mensaje. 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. el final del algoritmo. Pag. 104 . Aunque es sencillo podemos apreciar los elementos básicos de un programa en Java. Este tipo de comentario comienza con una barra seguida de un asterisco (/*) y termina donde aparece un asterisco seguido de una barra (*/). y su propósito es describir o explicar el objetivo de un programa a cualquiera que lea el código fuente. Juan José Flores Cueto. Usa el segundo tipo de comentario disponible en Java y se llama comentario de una sola línea. 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. Este también es un comentario. En este caso.ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Observemos la siguiente línea de código: package dominioDeLaAplicacion . seguido del nombre se coloca una llave de apertura ( { ). lo cual nos indica que se declara una clase. Finalmente. el nombre del paquete es “dominioDeLaAplicacion”. La siguiente línea del programa es: public static void main ( String arg [ ] ) { Pag. 105 . la cual indica el inicio del cuerpo de la misma. Esta línea especifica el paquete al cual pertenecerá la clase que se creará con la palabra reservada class. A continuación encontramos el nombre de la clase PrgMensaje. 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. La siguiente línea del programa es: // La ejecución empieza en el método main. podemos decir que para desarrollar un programa básico en Java necesitamos definir un paquete. 106 . debe tener un valor asignado. todas las variables deben ser declaradas antes de ser utilizadas (lo que no es necesario realizar en las herramientas utilizadas para diseñar algoritmos). 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. En este caso. se debe de anteponer al nombre de la variable la palabra String. A través de esta sentencia se asigna un valor a la variable.Ing. Para asignar valor a una Pag. para declarar una variable de tipo TEXTO o cadena. también se debe especificar el tipo de dato que la variable puede almacenar. antes de ser utilizada. Es importante mencionar que una variable. Además. a la variable mensaje se le asigna el valor “ Hola bienvenido ”. todas las sentencias en Java terminan en punto y coma. deberá tener un método main ( ) exactamente como ha sido escrito. Es importante mencionar que esta línea de código termina en punto y coma ( . La siguiente línea del programa es: mensaje = “ Hola bienvenido ” . En resumen. class PrgMensaje { public static void main ( String arg [ ] ) { } } La siguiente línea del programa es: String mensaje . De hecho. En este caso. que deseamos tenga la posibilidad de ejecutarse. una clase y un método principal o método main ( ). Toda clase en Java. Juan José Flores Cueto. el tipo de la variable mensaje es TEXTO o cadena. A través de esta línea se declara el uso de la variable mensaje de tipo TEXTO o cadena. En Java. ). debido a que Java diferencia las letras mayúsculas de las letras minúsculas. En Java. Esta es una sentencia de salida por la consola. que las siguientes líneas de código se utilizarán en todos los programas que se desarrollen. package dominioDeLaAplicacion . De hecho. en este caso.ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS variable.print (mensaje) . también uno puede visualizar cadenas y los resultados de operaciones matemáticas.out. En Java se crea una cadena cuando se encierra una secuencia de caracteres entre comillas. De esto se deduce. La siguiente línea del programa es: System. “ Hola bienvenido ” es una cadena. Hace que el valor de la variable mensaje se visualice por la pantalla. De esta manera. 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. Sólo variará el nombre del paquete y el nombre de la clase que. class PrgMensaje { public static void main ( String arg [ ] ) { } } Pag. se utiliza el signo igual ( = ). es dominioDeLaAplicacion y PrgMensaje respectivamente. 107 . suma.Diseño de la lógica. luego se realizarán las operaciones matemáticas y.Ing. Etapa 02 . multiplicación. 2. restar y dividir los números 9121236 y 735. Resultado deseado: Mostrar el resultado de las operaciones matemáticas básicas. resta y división de los números 9121236 y 735. Ninguno. Nombre del Proyecto: ProyOperaciones. Paquete y clase DominioDeLaAplicacion PrgOperaciones main() Pag. Juan José Flores Cueto. 108 . Se requiere mostrar el resultado de sumar. Definición de Paquete y Clase. 1.Definición de la solución. Datos necesarios: Procesamiento: Etapa 03 . Problema 02 Etapas para la solución de un problema: Etapa 01 . Para solucionar el problema se desarrollarán las especificaciones del proyecto en UML y el algoritmo en pseudocódigo.Descripción del problema. se mostrarán los resultados de dichas operaciones. finalmente. multiplicar. Los números serán almacenados en variables. multi = num1 * num2. num2=735 NUMERO suma. resta = num1 – num2. public static void main ( String arg[ ] ) { long num1=9121236. Clase PrgOperaciones package dominioDeLaAplicacion. resta. multi.println (“La resta es: ” + resta).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 . } } Pag. Algoritmo PrgOperaciones .println (“La multiplicación es: ” + multi). System. Diseño de algoritmo para el método principal. double divi. class PrgOperaciones { // la ejecución empieza en main. multi.out. System. System.out. resta.out. System. resta.método main() ENTRADA: SALIDA: suma. divi suma = num1 + num2 multi = num1 * num2 resta = num1 . La codificación se desarrolla utilizando el lenguaje de programación Java.divi INICIO NUMERO num1=9121236. suma.println (“La suma es: ” + suma). suma = num1 + num2.ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS 3. 109 .println (“La división es: ” + divi). num2=735.Desarrollo de la Codificación. divi = (double) (num1) / num2. multi. Definición de la solución. en nuevos soles. Definición de Paquetes y desarrollo de Diagrama de Paquetes. Para solucionar el problema se desarrollarán las especificaciones del proyecto en UML y el algoritmo en pseudocódigo. Juan José Flores Cueto. de una cantidad expresada en dólares. Resultado deseado: Datos necesarios: Procesamiento: Mostrar el equivalente. 1. 2. 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.Diseño de la lógica.Descripción del problema. en su equivalente en nuevos soles. Nombre del Proyecto: ProyDolaresSoles. 110 . Problema 03 Etapa 01 . El monto en dólares y el tipo de cambio serán ingresados por teclado y almacenados en dos variables (dolares y tipo respectivamente). expresado en dólares. El monto en dólares y el tipo de cambio. Diagrama de paquetes Pag. Ingresar la cantidad en dólares y el tipo de cambio. Etapa 02 .Ing. Luego. Convertir y mostrar una cantidad de dinero. Etapa 03 . tipo SALIDA: soles INICIO NUMERO dolares. Diseño de algoritmo para el método principal.ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS 3. Definición de las Clases. Clases dominioDeLaAplicacion Clases biblioteca 4.método main ( ) ENTRADA: dolares. tipo soles = dolares * tipo ESCRIBIR soles FIN Pag. tipo. Algoritmo PrgDolaresSoles . 111 . soles LEER dolares. import biblioteca.Ing.out.print ( “ Ingrese tipo de cambio del dólar: ” ) . dolares = Lectura. La codificación se desarrolla utilizando el lenguaje de programación Java. 112 . soles .println ( “ Cantidad equivalente en soles es: ” + soles) .out. soles = dolares * tipo . System. } } Pag.out. Clase PrgDolaresSoles package dominioDeLaAplicacion . tipo. tipo = Lectura. System. class PrgDolaresSoles { public static void main (String arg[]) { double dolares.leerDouble ( ) .Lectura . Etapa 04 .Desarrollo de la Codificación. Juan José Flores Cueto. System.leerDouble ( ) .print ( “ Ingrese una cantidad de dólares: ” ) . Luego. Las notas serán ingresadas por teclado y almacenadas en variables (n1. 113 .Definición de la solución. Definición de Paquetes y desarrollo de Diagrama de Paquetes. Diagrama de paquetes Pag. 2. Nombre del Proyecto: ProyNotaFinal.Diseño de la lógica. Resultado deseado: Datos necesarios: Procesamiento: Mostrar la nota final de un determinado alumno. Para solucionar el problema se desarrollarán las especificaciones del proyecto en UML y el algoritmo en pseudocódigo.Descripción del problema. n3 y n4 a través del teclado. 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. Utilizar la siguiente fórmula: nf = (n1 + n2 + n3 + (n4 * 2)) / 5. Calcular la nota final que ha obtenido un alumno en el curso de programación avanzada. Las notas del alumno (en este caso tenemos 4 notas). n3 y n4 respectivamente).ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Problema 04 Etapa 01 . Etapa 02 . Etapa 03 . n2. Ingresar las notas n1. n2. 1. n4 = 0 LEER n1. n2.Ing. n3 = 0. n3. n2 = 0. 114 . 3. n3. n4 nf INICIO NUMERO n1 = 0. Definición de las Clases. n4 nf = ( n1 + n2 + n3 + ( n4 * 2 ) ) / 5 ESCRIBIR nf FIN Pag. Algoritmo PrgNotaFinal . Juan José Flores Cueto. Diseño de algoritmo para el método principal. Clases dominioDeLaAplicacion Clases biblioteca 4.método main ( ) ENTRADA: SALIDA: n1. n2. out.leerDouble ( ) .print ( “ Ingrese la nota 2 del alumno: ” ) . n4 = 0. La codificación se desarrolla utilizando el lenguaje de programación Java.Desarrollo de la Codificación.out.print ( “ Ingrese la nota 4 del alumno: ” ) . import biblioteca.out.ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Etapa 04 .print ( “ El promedio obtenido por el alumno es : ” ) . System.out. n3 = Lectura.leerDouble ( ) . } } Pag.out. System.leerDouble ( ) . n2 = 0. System. nf = ( n1 + n2 + n3 + ( n4 * 2)) / 5 . n4 = Lectura. n2 = Lectura. n3 = 0. class PrgNotaFinal { public static void main (String arg[]) { double n1 = 0.leerDouble ( ) .println ( nf ) .Lectura .print ( “ Ingrese la nota 3 del alumno: ” ) . 115 . nf = 0 . System. n1 = Lectura.print ( “ Ingrese la nota 1 del alumno: ” ) . System. System.out. Clase PrgNotaFinal package dominioDeLaAplicacion . 1. El sueldo total será ingresado por teclado y almacenado en una variable (sueldo).Ing.” y calcular su respectivo descuento del 15% por concepto de impuestos y el 5% por concepto de cafetería.A. Diagrama de paquetes Pag. 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. se realizarán los cálculos del descuento y del sueldo a cobrar del obrero. Resultado deseado: Datos necesarios: Procesamiento: Mostrar el total de descuento y el sueldo a cobrar de un obrero de la empresa. utilizando las siguientes operaciones: desc = sueldo * 0.Descripción del problema. Ingresar el sueldo de un obrero de la empresa “La Poderosa S. Luego. Problema 05 Etapa 01 .Definición de la solución. Nombre del Proyecto: ProySueldoObrero. 116 . Definición de Paquetes y desarrollo de Diagrama de Paquetes. Etapa 02 . El sueldo total del obrero. Se deberá visualizar por pantalla el total de descuentos y el sueldo a cobrar. 2. Etapa 03 .2 pago = sueldo – desc Los resultados se almacenarán en las variables (desc y pago respectivamente) para luego ser mostradas por pantalla. Juan José Flores Cueto. Clases dominioDeLaAplicacion Clases biblioteca 4. pago INICIO NUMERO sueldo = 0. Diseño de algoritmo para el método principal. Definición de las Clases.2 pago = sueldo . desc = 0. Algoritmo PrgSueldoObrero .método main ( ) ENTRADA: SALIDA: sueldo desc.desc ESCRIBIR desc. pago = 0 LEER sueldo desc = sueldo * 0. pago FIN Pag.ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS 3. 117 . } } Pag. Etapa 04 . class PrgSueldoObrero { public static void main (String arg[]) { double sueldo = 0.leerDouble ( ) .2 . pago = 0 . 118 . desc = 0.print ( “ Ingrese el sueldo de un obrero: ” ) . sueldo = Lectura. System.Ing. System.out.Lectura .println ( desc + “ soles ” ) . Juan José Flores Cueto. System.println ( “ El sueldo a pagar es: ” + pago + “ soles ” ) .print ( “ El total de descuento es: ” ) . System.Desarrollo de la Codificación.out.out. La codificación se desarrolla utilizando el lenguaje de programación Java. Clase PrgSueldoObrero package dominioDeLaAplicacion . import biblioteca.out. // calculando el monto a pagar pago = sueldo – desc . // Calculando el descuento ( 20% ) desc = sueldo * 0. El resultado será almacenado en una variable (gradosFar) para luego ser mostrado por pantalla.Descripción del problema. Etapa 03 . Convertir la temperatura de grados Celsius a grados Fahrenheit. La temperatura en grados Celsius. Nombre del Proyecto: ProyTemperatura. 1. luego se realizará el cálculo de la temperatura en grados Fahrenheit de acuerdo a la siguiente fórmula: gradosFar = (9/5) * gradosCel + 32. Definición de Paquetes y desarrollo de Diagrama de Paquetes. Resultado deseado: Datos necesarios: Procesamiento: Calcular y mostrar la temperatura en grados Fahrenheit.Diseño de la lógica. de acuerdo a la siguiente fórmula: F = (9/5) * C + 32. Para solucionar el problema se desarrollarán las especificaciones del proyecto en UML y el algoritmo en pseudocódigo. La temperatura en grados Celsius será ingresada y almacenada en una variable (gradosCel). 119 .ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Problema 06 Etapa 01 . Diagrama de paquetes Pag. 2. Etapa 02 .Definición de la solución. Juan José Flores Cueto. Algoritmo PrgTemperatura . Clases dominioDeLaAplicacion Clases biblioteca 4.método main ( ) ENTRADA: SALIDA: INICIO NUMERO gradosCel = 0.Ing. 120 . gradosFar = 0 LEER gradosCel gradosFar = ( 9 / 5 ) * gradosCel + 32 ESCRIBIR gradosFar FIN gradosCel gradosFar Pag. Diseño de algoritmo para el método principal. 3. Definición de las Clases. println ( “ La temperatura en grados Fahrenheit es: " + gradosFar) . } } Pag. System. System.out. import biblioteca.Lectura .leerDouble ( ) . gradosFar = 0 . La codificación se desarrolla utilizando el lenguaje de programación Java. class PrgTemperatura { public static void main ( String arg[] ) { double gradosCel = 0.print ( “ Ingrese la temperatura en grados Celsius: " ) . gradosFar = ( 9 / 5 ) * gradosCel + 32 .Desarrollo de la Codificación. gradosCel = Lectura.out. Clase PrgTemperatura package dominioDeLaAplicacion . 121 .ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Etapa 04 . Calcular y mostrar su utilidad. El costo y el precio de venta del artículo. Juan José Flores Cueto. Etapa 03 .Ing. 122 . Problema 07 Etapa 01 . luego se realizará el cálculo de la utilidad del artículo de acuerdo a la siguiente fórmula: utilidad = precioVta . Para solucionar el problema se desarrollarán las especificaciones del proyecto en UML y el algoritmo en pseudocódigo. Diagrama de paquetes Pag. Definición de Paquetes y desarrollo de Diagrama de Paquetes. 1.Definición de la solución. Leer el costo de un artículo y su precio de venta.Descripción del problema.Diseño de la lógica. Etapa 02 .costo El resultado será almacenado en una variable (utilidad) para luego ser mostrado por pantalla. 2. El costo y el precio de venta del artículo serán ingresados y almacenados en variables (costo. precioVta). Resultado deseado: Datos necesarios: Procesamiento: Calcular y mostrar la utilidad de un artículo. Nombre del Proyecto: ProyUtilidad. precioVta = 0.método main ( ) ENTRADA: SALIDA: INICIO NUMERO costo = 0. precioVta utilidad Pag.ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS 3. precioVta utilidad = precioVta . Diseño de algoritmo para el método principal.costo ESCRIBIR utilidad FIN costo. 123 . Algoritmo PrgUtilidad . utilidad = 0 LEER costo. Clases dominioDeLaAplicacion Clases biblioteca 4. Definición de las Clases. } } Pag.out. precioVta = 0.out. System. ” + utilidad + “ soles ” ) . precioVta = Lectura.leerDouble ( ) . Etapa 04 .println ( “ La utilidad del artículo es: s/.leerDouble ( ) .costo . class PrgUtilidad { public static void main ( String arg[] ) { double costo = 0. import biblioteca. costo = Lectura.print ( “ Ingrese el costo del artículo: ” ) . utilidad = 0 . utilidad = precioVta . 124 .Desarrollo de la Codificación. System.print ( “ Ingrese el precio de venta del artículo: ” ) .Lectura . Juan José Flores Cueto.Ing.out. Clase PrgUtilidad package dominioDeLaAplicacion . System. La codificación se desarrolla utilizando el lenguaje de programación Java. Diseño de la lógica. Etapa 02 . Las dos notas del alumno. Resultado deseado: Datos necesarios: Procesamiento: Mostrar nota final y un mensaje de felicitaciones si la nota final es mayor a 13. 1. se muestra la nota final y el mensaje. Finalmente. Definición de Paquetes y desarrollo de Diagrama de Paquetes.ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Problema 08 Etapa 01 . 2. Si el alumno obtiene una nota final mayor a 13 se deberá visualizar un mensaje de felicitaciones. sabiendo que se tienen sólo dos notas. Si la nota final resulta mayor que 13 entonces se almacenará el mensaje “Felicitaciones” en una variable (mensaje).Descripción del problema. 125 . Para solucionar el problema se desarrollarán las especificaciones del proyecto en UML y el algoritmo en pseudocódigo. Calcular y mostrar la nota final (nf) de un alumno. Diagrama de paquetes Pag.Definición de la solución. Nombre del Proyecto: ProyNotaFinal2. Etapa 03 . Las notas se ingresarán por el teclado y serán almacenadas en variables (nota1 y nota2). luego se realizará el cálculo de la nota final: nf = ((nota1 + nota2) / 2) El resultado se almacena en una variable (nf). 3. mensaje FIN Pag. Diseño de algoritmo para el método principal. nf = 0 TEXTO mensaje = “ ” LEER nota1. nota2 = 0. Juan José Flores Cueto. nota2 nf = (nota1 + nota2) / 2 SI ( nf > 13 ) ENTONCES mensaje = “Felicitaciones” FINSI ESCRIBIR nf.Ing. Definición de las Clases. Clases dominioDeLaAplicacion Clases biblioteca 4. nota2 SALIDA: nf. Algoritmo PrgNotaFinal2 . mensaje INICIO NUMERO nota1 = 0. 126 .método main ( ) ENTRADA: nota1. print ( “ Ingrese la segunda nota: ” ) . String mensaje = “ ” .out. System. nota2 = 0.out. class PrgNotaFinal2 { public static void main ( String arg[] ) { double nota1 = 0. if (nf > 13) { mensaje = “ Felicitaciones ” . nota1 = Lectura. import biblioteca.out.leerDouble ( ) . } System. } } Pag.ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Etapa 04 . La codificación se desarrolla utilizando el lenguaje de programación Java.Lectura . 127 .println ( “ La nota final es: ” + nf + “ ” + mensaje ) .Desarrollo de la Codificación. System. nf = 0 . Clase PrgNotaFinal2 package dominioDeLaAplicacion .leerDouble ( ) . nota2 = Lectura.print ( “ Ingrese la primera nota: ” ) . nf = (nota1 + nota2) / 2 . Si el sueldo resulta mayor que S/. Problema 09 Etapa 01 . El total de horas trabajadas y la tarifa horaria se ingresarán por teclado y se almacenarán en variables (horas y tarifa). El resultado se almacena en la variable sueldo y se muestra a través de la pantala. Definición de Paquetes y desarrollo de Diagrama de Paquetes.3000 entonces se calcula el sueldo a cobrar restando el 10% del sueldo. 2. 1.Ing.Descripción del problema.Diseño de la lógica. Etapa 02 . El total de horas trabajadas y la tarifa horaria. 3000. Resultado deseado: Datos necesarios: Procesamiento: Mostrar el sueldo de un trabajador. Para solucionar el problema se desarrollarán las especificaciones del proyecto en UML y el algoritmo en pseudocódigo. Nombre del Proyecto: ProySueldoTrabajador. 128 . Diagrama de paquetes Pag. Calcular y mostrar el sueldo de un trabajador conociendo el número de horas trabajadas y su tarifa horaria. luego se realizará el cálculo del sueldo utilizando la siguiente operación: sueldo = horas * tarifa El resultado se almacenará en una variable (sueldo).Definición de la solución. Etapa 03 . sabiendo que se debe descontar un 10% del sueldo por concepto de impuestos si este es mayor de S/. Juan José Flores Cueto. tarifa sueldo = horas * tarifa SI ( sueldo > 3000 ) ENTONCES sueldo = sueldo * 0. Algoritmo PrgSueldoTrabajador .9 FINSI ESCRIBIR sueldo FIN Pag.ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS 3. tarifa = 0. Definición de las Clases. tarifa sueldo INICIO NUMERO horas = 0. sueldo = 0 LEER horas. 129 . Diseño de algoritmo para el método principal. Clases dominioDeLaAplicacion Clases biblioteca 4.método main ( ) ENTRADA: SALIDA: horas. Ing.out. Clase PrgSueldoTrabajador package dominioDeLaAplicacion .leerInt ( ) . horas = Lectura.print ( “ Ingrese el total de horas trabajadas: ” ) .out. tarifa = Lectura.Lectura .out. 130 . System. } } Pag.9 . La codificación se desarrolla utilizando el lenguaje de programación Java. Juan José Flores Cueto. System. import biblioteca.print ( “ Ingrese la tarifa del trabajador: ” ) .Desarrollo de la Codificación.leerDouble ( ) . double tarifa = 0. sueldo = 0 . Etapa 04 . if (sueldo > 3000) { sueldo = sueldo * 0. sueldo = horas * tarifa . class PrgSueldoTrabajador { public static void main ( String arg[] ) { int horas = 0 . } System.println ( “ El sueldo es: ” + sueldo ) . Definición de Paquetes y desarrollo de Diagrama de Paquetes. El monto total será almacenado en una variable (montoTotal). Se asume que el IGV es 18%. Nombre del Proyecto: ProyArticulos. 2. 1.Descripción del problema. se descuenta el 8%. Etapa 02 .500 nuevos soles.Diseño de la lógica.ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Problema 10 Etapa 01 . 131 . 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).500 nuevos soles se aplica un descuento de 8%. sino sólo se descontará el 2%. Resultado deseado: Datos necesarios: Procesamiento: Mostrar monto total a pagar.Definición de la solución. Si el monto total resulta mayor a S/. Etapa 03 . Monto total. Diagrama de paquetes Pag. 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/. Luego se realizará el cálculo del monto total a pagar (monto total * 1. caso contrario el descuento será de 2%.18) y se almacena en una variable (montoPago). método main ( ) ENTRADA: SALIDA: montoTotal montoPago INICIO NUMERO montoTotal = 0. 3. Definición de las Clases.98 FINSI ESCRIBIR montoPago FIN Pag.Ing.18 SI ( montoPago > 500 ) ENTONCES montoPago = montoPago * 0. Diseño de algoritmo para el método principal. montoPago = 0 LEER montoTotal montoPago = montoTotal * 1.92 SINO montoPago = montoPago * 0. Clases dominioDeLaAplicacion Clases biblioteca 4. 132 . Algoritmo PrgArticulos . Juan José Flores Cueto. System. montoPago = montoTotal * 1. if (montoPago > 500) { montoPago = montoPago * 0.98 . montoPago = 0 . } System.Desarrollo de la Codificación. } } Pag. System. 133 . class PrgArticulos { public static void main ( String arg[] ) { double montoTotal = 0. Clase PrgArticulos package dominioDeLaAplicacion .92 .18 .Lectura .out.out. La codificación se desarrolla utilizando el lenguaje de programación Java.print ( “ El monto total a pagar incluido IGV y descuentos es: ” ) .out.leerDouble ( ) . import biblioteca.println ( montoPago + “ soles ” ) . } else { montoPago = montoPago * 0.print ( “ Ingrese el monto total: ” ) .ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Etapa 04 . montoTotal = Lectura. Categoría 1 2 3 4 Aumento 25 % 15 % 10 % 05 % Etapa 02 . Problema 11 Etapa 01 . 134 . Muestrar el nuevo sueldo del trabajador. Etapa 03 . Para solucionar el problema se desarrollarán las especificaciones del proyecto en UML y el algoritmo en pseudocódigo. Dependiendo la categoría ingresada. Juan José Flores Cueto. Resultado deseado: Datos necesarios: Procesamiento: Mostrar nuevo sueldo del trabajador. Diagrama de paquetes Pag.Definición de la solución. y calcular el aumento correspondiente teniendo en cuenta la siguiente tabla. 2. 1. Leer la categoría y el sueldo de un trabajador.Diseño de la lógica. Finalmente. Definición de Paquetes y desarrollo de Diagrama de Paquetes. La categoría y el sueldo del trabajador. La categoría y el sueldo del trabajador serán almacenados en variables (categoria y sueldo).Ing. se mostrará el nuevo sueldo del trabajador. se procederá a calcular el nuevo sueldo del trabajador (nuevoSueldo). Nombre del Proyecto: ProyAumentoSueldo.Descripción del problema. teniendo como base la tabla mostrada. método main ( ) ENTRADA: SALIDA: categoria.05 TERMINAR OTROS : nuevoSueldo = sueldo FINCUANDO ESCRIBIR nuevoSueldo FIN Pag. Diseño de algoritmo para el método principal.10 TERMINAR CASO 4 : nuevoSueldo = sueldo * 1.25 TERMINAR CASO 2 : nuevoSueldo = sueldo * 1. Algoritmo PrgAumentoSueldo .ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS 3. 135 . Definición de las Clases. Clases dominioDeLaAplicacion Clases biblioteca 4. nuevoSueldo = 0 LEER sueldo. sueldo nuevoSueldo INICIO NUMERO categoria = 0. sueldo = 0. categoria CUANDO categoria SEA CASO 1 : nuevoSueldo = sueldo * 1.15 TERMINAR CASO 3 : nuevoSueldo = sueldo * 1. leerDouble ( ) . sueldo = Lectura.print ( “ Ingrese el sueldo del trabajador: ” ) . break . case 2: nuevoSueldo = sueldo * 1. Juan José Flores Cueto.out. int categoria = 0. default: nuevoSueldo = sueldo .Lectura .out.out. break .10 .25 .leerInt ( ) . Clase PrgAumentoSueldo package dominioDeLaAplicacion . System. case 4: nuevoSueldo = sueldo * 1. } System.Ing. break . class PrgAumentoSueldo { public static void main ( String arg[] ) { double sueldo = 0. nuevoSueldo = 0 . Etapa 04 .print ( “ Ingrese la categoría del trabajador: ” ) . } } Pag. break .println ( “ El nuevo sueldo del trabajador es: ” + nuevoSueldo ) . case 3: nuevoSueldo = sueldo * 1. La codificación se desarrolla utilizando el lenguaje de programación Java. switch (categoria) { case 1: nuevoSueldo = sueldo * 1. System. categoria = Lectura.15 . import biblioteca.05 . 136 .Desarrollo de la Codificación. el número de días de permanencia del paciente y su sexo. según los datos de la tabla. Enfermedad Tipo 1 2 3 Costo / Paciente / Día 200 350 420 Etapa 02 . El resultado se almacena en una variable (costoTotal) para luego ser mostrado. 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.Definición de la solución. si se trata del tercer tipo de enfermedad y el paciente es hombre se procederá a incrementar el 5%. El tipo de enfermedad. se procederá hacer el cálculo del costo que representa para el hospital el paciente. Resultado deseado: Datos necesarios: Procesamiento: Mostrar el costo total de un paciente para un hospital. Dependiendo del tipo de enfermedad.Descripción del problema.ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Problema 12 Etapa 01 . de acuerdo a la siguiente operación costoTotal = ( costo * número de días). Si se trata del primer tipo de enfermedad y el paciente es mujer se le incrementará el 10%. Pag. 137 . dias y sexo). El tipo de enfermedad. 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. Por otro lado. Calcular y mostrar el costo total que representa un paciente para un hospital de acuerdo al tipo de enfermedad. Nombre del Proyecto: ProyHospital. Definición de Paquetes y desarrollo de Diagrama de Paquetes. Etapa 03 . Definición de las Clases. Juan José Flores Cueto. 138 . 1. Para solucionar el problema se desarrollarán las especificaciones del proyecto en UML y el algoritmo en pseudocódigo.Ing. Clases dominioDeLaAplicacion Clases biblioteca Pag. Diagrama de paquetes 3. 2.Diseño de la lógica. sexo = 0.ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS 4. dias. sexo CUANDO tipoEnfermedad SEA CASO 1 : costoTotal = 200 * dias SI (sexo = 2 ) ENTONCES costoTotal = costoTotal * 1. sexo costoTotal INICIO NUMERO tipoEnfermedad = 0.10 FINSI TERMINAR CASO 2 : costoTotal = 350 * dias TERMINAR CASO 3 : costoTotal = 420 * dias SI ( sexo = 1 ) ENTONCES costoTotal = costoTotal * 1. costoTotal = 0 LEER tipoEnfermedad. Algoritmo PrgHospital . dias = 0.método main ( ) ENTRADA: SALIDA: tipoEnfermedad. dias.05 FINSI FINCUANDO ESCRIBIR costoTotal FIN Pag. 139 . Diseño de algoritmo para el método principal. dias = Lectura. if ( sexo == 1 ) { costoTotal = costoTotal * 1.println ( “ El costo total es: ” + costoTotal ) .05 .Ing. System.print ( “ Ingrese el número de días que ha estado el paciente: ” ) . break .out.print ( “ Ingrese el sexo del paciente [1=hombre. class PrgHospital { public static void main ( String arg[] ) { int tipoEnfermedad = 0. if ( sexo == 2 ) { costoTotal = costoTotal * 1. Etapa 04 . case 2 : costoTotal = 350 * dias . sexo = 0 .10 . tipoEnfermedad = Lectura. case 3 : costoTotal = 420 * dias . dias = 0.out.leerInt ( ) .leerInt ( ) . Clase PrgHospital package dominioDeLaAplicacion . sexo = Lectura. double costoTotal = 0 . System.Desarrollo de la Codificación. 2= Mujer]: ” ) . } } Pag. La codificación se desarrolla utilizando el lenguaje de programación Java. import biblioteca.print ( “ Ingrese el tipo de enfermedad: ” ) . } } System. Juan José Flores Cueto.out.Lectura .leerInt ( ) . System. switch ( tipoEnfermedad) { case 1 : costoTotal = 200 * dias . 140 . } break .out. Definición de Paquetes y desarrollo del Diagrama de Paquetes. intermedio y mayor). Ingresar tres notas de un alumno.Definición de la solución. Resultado deseado: Datos necesarios: Procesamiento: Mostrar las tres notas en forma ascendente. n2 y n3). Diagrama de paquetes 3. Nombre del Proyecto: ProyOrdena.Descripción del problema. Definición de las Clases. intemedio y menor almacenarán las notas y se mostrarán en orden ascendente.ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Problema 13 Etapa 01 . Etapa 03 . Finalmente. 2. Las tres notas del alumno serán almacenadas en variables (n1.Diseño de la lógica. 141 . las variables auxiliares mayor. Se utilizarán tres variables auxiliares para almacenar el orden de las notas (menor. 1. Clases dominioDeLaAplicacion Clases biblioteca Pag. Etapa 02 . Muestrar las notas ordenadas en forma ascendente. Las tres notas del alumno en cualquier orden. n2. intermedio = 0 NUMERO mayor = 0 LEER n1. n2 = 0. n2. 4. Algoritmo PrgOrdena . menor = 0. Juan José Flores Cueto. intermedio. mayor FIN n1. n3 = 0.Ing. 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. intermedio. 142 . Diseño de algoritmo para el método principal. n3 menor. mayor Pag.método main ( ) ENTRADA: SALIDA: INICIO NUMERO n1 = 0. n3 = Lectura. System.out. menor = n1 . n1 = Lectura.out. import biblioteca. n3 = 0. } else { intermedio = n3 . intermedio = n2 .print ( “ Ingrese la tercera nota: ” ) . 143 . } } System. menor = n2 . System. } } Pag. n2 = 0. System. class PrgOrdena { public static void main ( String arg[] ) { int n1 = 0. menor = n3 .println ( menor + “ ” + intermedio + “ ” + mayor ) . mayor = 0 . menor = 0.out. intermedio = 0. } } else { mayor = n3 . } } else { if (n2 > n3) { mayor = n2 . menor = n1 . menor = n2 . } } else { mayor = n3 .print ( “ Ingrese la segunda nota: ” ) . if (n2 > n3) { intermedio = n2 . if (n1 > n2) { if (n1 > n3) { mayor = n1 . Clase PrgOrdena package dominioDeLaAplicacion .leerInt ( ) .Desarrollo de la Codificación. n2 = Lectura.print ( “ Ingrese la primera nota: ” ) .out.leerInt ( ) . if ( n1 > n3) { intermedio = n1 .ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Etapa 04 .Lectura . intermedio = n1 . menor = n3 .leerInt ( ) . } else { intermedio = n3 . para luego ser mostrada por pantalla. Según la siguiente tabla: Rango Desde 17 a 20 Desde 14 a 16 Desde 10 a 13 Desde 00 a 09 Categoria A B C D Determinar la categoría del alumno. C o D. 144 . El resultado es almacenado en la variable (promedio). se determina el promedio de las cuatro notas más altas y se le da al estudiante una categoría que puede ser A. Resultado deseado: Datos necesarios: Procesamiento: Mostrar la categoría del alumno. Juan José Flores Cueto. La suma de las cinco notas se guardará en una variable (sumaNotas). La menor de estas notas se guardará en una variable (notaMenor). Las cinco notas del estudiante se ingresan a través del teclado y se almacenan en variables (n1. Pag. n4 y n5). n3. Se realizará el cálculo del promedio del alumno de la siguiente forma: promedio = ( sumaNotas – notaMenor ) / 4 ). este resultado nos permitirá obtener la categoría del alumno (categoria).Descripción del problema. B. Problema 14 Etapa 01 . Etapa 02 . Un curso se evalúa de la siguiente forma: se toma cinco prácticas calificadas. Las cinco notas del estudiante. n2.Ing.Definición de la solución. 145 .Diseño de la lógica. 2. Definición de Paquetes y desarrollo del Diagrama de Paquetes. Nombre del Proyecto: ProyCategoriaAlumno. Diagrama de paquetes 3.ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Etapa 03 . Definición de las Clases. 1. Clases dominioDeLaAplicacion Clases biblioteca Pag. n4. n4 = 0. sumaNotas = 0 NUMERO notaMenor = 0. Juan José Flores Cueto. n4. n3. n3 = 0.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 n1. promedio = 0 TEXTO categoria = ‘ ’ LEER n1. Algoritmo PrgCategoriaAlumno . n3. n5 = 0.método main ( ) ENTRADA: SALIDA: INICIO NUMERO n1 = 0. n2. n2 = 0. 4.Ing. 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 categoria Pag. n2. 146 . Diseño de algoritmo para el método principal. leerDouble ( ) .print ( “ Ingrese la 1ra. n3 = Lectura. double notaMenor = 0.out. System. System.out. if (notaMenor > n2) notaMenor = n2 .Desarrollo de la Codificación.leerDouble ( ) . n5 = Lectura. if (notaMenor > n5) notaMenor = n5 . n2 = Lectura. } else { if (promedio <= 10 && promedio >= 0) { categoria = ‘D’ . promedio = 0 . } else { if (promedio <= 16 && promedio >= 14) { categoria = ‘B’ . import biblioteca. class PrgCategoriaAlumno { public static void main ( String arg[] ) { double n1 = 0.leerDouble ( ) . n4 = Lectura. promedio = (sumaNotas .out. nota: ” ) . System. System. n5 = 0. } } } } System. if (notaMenor > n3) notaMenor = n3 . System. n1 = Lectura.print ( “ Ingrese la 2da. nota: ” ) . n3 = 0. char categoria = ‘ ’ . } else { if (promedio <= 13 && promedio >= 10) { categoria = ‘C’ .leerDouble ( ) . nota: ” ) .Lectura .leerDouble ( ) .ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Etapa 04 .out. Clase PrgCategoriaAlumno package dominioDeLaAplicacion . sumaNotas = n1 + n2 + n3 + n4 + n5 . nota: ” ) . notaMenor = n1 .out.notaMenor) / 4 .print ( “ Ingrese la 3ra. } } Pag. if (notaMenor > n4) notaMenor = n4 .print ( “ Ingrese la 4ta. sumaNotas = 0 .out.print ( “ Ingrese la 5ta. if (promedio <= 20 && promedio >= 17) { categoria = ‘A’ . n2 = 0. nota: ” ) . n4 = 0. 147 .println ( “ La categoría del alumno es: ” + categoria ) . Definición de la solución. El resultado es almacenado en una variable (categoria) para luego ser mostrada por pantalla.Diseño de la lógica. Etapa 03 . Nombre del Proyecto: ProyCategoriaPostulante. El sexo y la edad del postulante se ingresan a través del teclado y se almacenan en variables (sexo y edad). categorizan a los postulantes en función del sexo y de la edad.Si la persona es de sexo masculino: o Categoría MA si tiene menos de 25 años. o Categoría FB en caso contrario.Si la persona es de sexo femenino: o Categoría FA si tienen menos de 23 años. o Categoría MB en caso contrario. Resultado deseado: Datos necesarios: Procesamiento: Mostrar la categoría del postulante. Etapa 02 . En una oficina de empleados.Ing. 2. El sexo y la edad del postulante. Juan José Flores Cueto. 148 . Definición de Paquetes y desarrollo del Diagrama de Paquetes. 1. Si es hombre o mujer asignaremos su respectiva categoría dependiendo de la edad del postulante. . Diagrama de paquetes Pag.Descripción del problema. de acuerdo a lo siguiente: . Problema 15 Etapa 01 . Algoritmo PrgCategoriaPostulante .método main ( ) ENTRADA: SALIDA: INICIO NUMERO edad = 0 TEXTO sexo = ‘F’.ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS 3. Clases dominioDeLaAplicacion Clases biblioteca 4. Diseño de algoritmo para el método principal. Definición de las Clases. 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 sexo. 149 . categoria = 0 LEER sexo. edad categoria Pag. Etapa 04 . System. sexo = Lectura. 150 . case ‘m’ : case ‘M’ : if (edad < 25) categoria = “MA” . switch (sexo) { case ‘f’ : case ‘F’ : if (edad < 23) categoria = “FA” . class PrgCategoriaPostulante { public static void main ( String arg[] ) { int edad = 0 . break .println ( “ La categoría del postulante es: ” + categoria ) . import biblioteca. Clase PrgCategoriaPostulante package dominioDeLaAplicacion .Ing. Juan José Flores Cueto.print ( “ Ingrese sexo del postulante [ F/M ]: ” ) .Lectura . edad = Lectura. else categoria = “FB” . } } Pag. char sexo = ‘F’ .out.Desarrollo de la Codificación.leerChar ( ) .out.leerInt ( ) . else categoria = “MB” . } System.out. String categoria = “ ” .print ( “ Ingrese la edad del postulante: ” ) . System. Diseño de la lógica. Se realizará el cálculo de la nota final en base a la fórmula: nf = ( n1 + n2 + n3 + ( n4 * 2 ) ) / 5. Las cuatro notas del alumno se ingresan a través del teclado y se almacenan en variables (n1. 2. Diagrama de paquetes Pag. Etapa 02 .ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Problema 16 Etapa 01 . n2.Definición de la solución. Nombre del Proyecto: ProyNotasAlumnos. Definición de Paquetes y desarrollo del Diagrama de Paquetes. 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.Descripción del problema. n3 y n4). con la finalidad de poder mostrar la nota final de cada uno de ellos. Etapa 03 . Esto se repite para todos los alumnos del curso. Resultado deseado: Datos necesarios: Procesamiento: Mostrar la nota final de todos los alumnos de un curso. 1. Las cuatro notas de cada uno de los alumnos del curso. 151 . Utilizar la estructura lógica MIENTRAS. El resultado es almacenado en la variable (nf) para luego ser mostrada. n2. n4 nf = ( n1 + n2 + n3 + ( n4 * 2 ) ) / 5 ESCRIBIR nf i=i+1 FINMIENTRAS FIN Pag. Diseño de algoritmo para el método principal. Definición de las Clases. n1. Clases dominioDeLaAplicacion Clases biblioteca 4. n2.método main ( ) ENTRADA: numAlumnos. n3 = 0. nf = 0 NUMERO numAlumnos = 1 LEER numAlumnos MIENTRAS ( i <= numAlumnos ) LEER n1. Juan José Flores Cueto. 3. n4 = 0. n3. n3. n2 = 0.Ing. Algoritmo PrgNotasAlumnos . 152 . n1 = 0. n4 SALIDA: nf INICIO NUMERO i = 1. println ( “ Ingrese nota 1 del alumno [” + i + “]: ” ) .out.leerDouble ( ) . double n1= 0. System.out.println ( “ Ingrese nota 4 del alumno [” + i + “]: ” ) . n3 = 0. class PrgNotasAlumnos { public static void main ( String arg[] ) { int i = 1. Clase PrgNotasAlumnos package dominioDeLaAplicacion . nf = ( n1 + n2 + n3 + ( n4 * 2 ) ) / 5 . n2 = 0. i ++ .out.Lectura . n2 = Lectura.out. while ( i <= numAlumnos ) { System.println ( “ Nota final del alumno [” + i + “]: ” + nf ) .leerInt ( ) . n4 = Lectura.out. numAlumnos = Lectura. System.ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Etapa 04 . System.Desarrollo de la Codificación. n3 = Lectura.leerDouble ( ) .out. System.println ( “ Ingrese nota 2 del alumno [” + i + “]: ” ) .leerDouble ( ) . } } } Pag.println ( “ Ingrese nota 3 del alumno [” + i + “]: ” ) . n4 = 0. n1 = Lectura. 153 . import biblioteca.leerDouble ( ) . numAlumnos = 0 . nf = 0 .println ( “Ingrese el número de alumnos: ” ) . System. Definición de Paquetes y desarrollo del Diagrama de Paquetes. 1.Descripción del problema. Juan José Flores Cueto. Se realizará el cálculo de la nota final sobre la base de la fórmula: nf = ( n1 + n2 + n3 + ( n4 * 2 ) ) / 5.Definición de la solución. Esto se repite para todos los alumnos del curso con la finalidad de poder mostrar la nota final de cada uno de ellos. 2.Ing. Calcular la nota final de todos los alumnos del curso utilizando la siguiente fórmula: nf = ( n1 + n2 + n3 + ( n4 * 2 ) ) / 5. 154 . Las cuatro notas de cada uno de los alumnos del curso. n2. Ingresar las notas a través del teclado. Etapa 02 . n3 y n4). Nombre del Proyecto: ProyNotasAlumnos2. Las cuatro notas del alumno se ingresan a través del teclado y se almacenan en variables (n1.Diseño de la lógica. Etapa 03 . Problema 17 Etapa 01 . El resultado es almacenado en la variable (nf) para luego ser mostrada. Diagrama de paquetes Pag. Resultado deseado: Datos necesarios: Procesamiento: Mostrar la nota final de todos los alumnos de un curso. Utilizar la estructura lógica HACER. método main ( ) ENTRADA: n1. Diseño de algoritmo para el método principal. continua SALIDA: nf INICIO NUMERO i = 1. n3 = 0. n4. Definición de las Clases.ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS 3. n1 = 0. n4 nf = ( n1 + n2 + n3 + ( n4 * 2 ) ) / 5 ESCRIBIR nf LEER continua i=i+1 MIENTRAS ( continua = ‘s’ OR continua = ‘S’ ) FIN Pag. n3. Clases dominioDeLaAplicacion Clases biblioteca 4. nf = 0 TEXTO continua = ‘ ’ HACER LEER n1. n3. n2 = 0. n2. Algoritmo PrgNotasAlumnos2 . n2. n4 = 0. 155 . println ( “ Desea continuar (s/n): ” ) . Juan José Flores Cueto.leerDouble ( ) . System. System. 156 . n2 = Lectura. System. nf = ( n1 + n2 + n3 + ( n4 * 2 ) ) / 5 .out. double n1 = 0.println ( “ Ingrese nota 3 del alumno [” + i + “]: ” ) . Clase PrgNotasAlumnos2 package dominioDeLaAplicacion . n3 = 0.println ( “ Ingrese nota 1 del alumno [” + i + “]: ” ) .out. class PrgNotasAlumnos2 { public static void main ( String arg[] ) { int i = 1 .out. n2 = 0. n4 = Lectura. } } Pag. i++ .out.println ( “ Ingrese nota 4 del alumno [” + i + “]: ” ) . char continua = ‘ ’ . System. Etapa 04 . import biblioteca.out. System.leerDouble ( ) . } while ( continua == ‘s’ || continua == ‘S’ ) .Desarrollo de la Codificación. n4 = 0. nf = 0 .println ( “ Nota final del alumno [” + i + “]: ” + nf ) . n3 = Lectura.out.leerDouble ( ) . do { System.println ( “ Ingrese nota 2 del alumno [” + i + “]: ” ) .leerChar ( ) . n1 = Lectura.Lectura . continua = Lectura.leerDouble ( ) .Ing. 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. Si el sueldo ingresado resulta ser el sueldo menor. Etapa 02 . la suma de sueldos de los empleados y la suma de sueldos de los gerentes. se almacenará en la variable mayorSueldo. se verificará si es el sueldo menor. se mostrará por pantalla el sueldo mayor (mayorSueldo). la suma de sueldos de los obreros (sueldo1). Cada vez que se ingrese el sueldo de un trabajador se deberá verificar si es el sueldo mayor. el sueldo menor (menorSueldo). Si resulta ser un obrero se suma su sueldo a la variable sueldo1.ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Problema 18 Etapa 01 . Datos necesarios: Procesamiento: Pag. El sueldo y la categoría de cada uno de los trabajadores de la empresa. determinar cuál es el mayor y el menor sueldo en la empresa. se almacenará en la variable menorSueldo. De igual forma. la suma de sueldo de los empleados (sueldo2) y la suma de los sueldos de los gerentes (sueldo3). Determinar la suma de sueldos de los obreros (categoría 1). la suma de sueldos de los empleados (categoría 2) y la suma de sueldos de los gerentes (categoría 3) de una determinada empresa. Adicionalmente el sueldo mayor y el sueldo menor. Si el sueldo ingresado resulta ser el sueldo mayor. 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. 157 .Descripción del problema. Adicionalmente. Al finalizar el ingreso de los datos de todos los trabajadores de la empresa.Definición de la solución. Resultado deseado: La suma de sueldos de los obreros. También se evaluará la categoría del trabajador. 1. Etapa 03 . Definición de las Clases. 158 . Juan José Flores Cueto. Diagrama de paquetes 3.Ing. 2. Definición de Paquetes y desarrollo del Diagrama de Paquetes.Diseño de la lógica. Nombre del Proyecto: ProySueldoCategoria. Clases dominioDeLaAplicacion Clases biblioteca Pag. Diseño de algoritmo para el método principal. mayorSueldo. sueldo1 = 0. 159 . mayorSueldo = 0 NUMERO menorSueldo = 0. 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. sueldo2. sueldo3 ESCRIBIR menorSueldo.ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS 4. sueldo3. sueldo2. categoria sueldo1. categoria = 0. menorSueldo Pag.método main ( ) ENTRADA: SALIDA: INICIO NUMERO sueldo = 0. mayorSueldo FIN sueldo. Algoritmo PrgSueldoCategoria . sueldo2 = 0 NUMERO sueldo3 = 0. out.Ing. case 2: sueldo2 = sueldo2 + sueldo .leerInt ( ) . menorSueldo = sueldo . System. break . Juan José Flores Cueto. break .out. double sueldo1 = 0.Desarrollo de la Codificación. System.println ( “ Suma de sueldos de empleados: ” + sueldo2 ) . if ( i == 1) { i=0. menorSueldo = 0 .out. System. System. Clase PrgSueldoCategoria package dominioDeLaAplicacion .out.println ( “ Suma de sueldos de obreros: ” + sueldo1 ) .out. System.println ( “ El sueldo más alto es: ” + mayorSueldo ) .out. } if (sueldo > mayorSueldo ) { mayorSueldo = sueldo .Lectura . sueldo3 = 0 . case 3: sueldo3 = sueldo3 + sueldo .leerDouble ( ) . } } switch (categoria) { case 1: sueldo1 = sueldo1 + sueldo . if ( categoria != 0 ) { System. mayorSueldo = sueldo . 160 . import biblioteca. sueldo2 = 0. sueldo = Lectura.println ( “ Ingrese el sueldo del trabajador : ” ) . } else { if (sueldo < menorSueldo ) { menorSueldo = sueldo . do { System. Etapa 04 . categoria = 0 .println ( “ Ingrese la categoría del trabajador : ” ) . mayorSueldo = 0. categoria = Lectura. } } Pag.out. } } } while (categoria != 0 ) .println ( “ Suma de sueldos de gerentes: ” + sueldo3 ) . class PrgSueldoCategoria { public static void main ( String arg[] ) { int i = 1. double sueldo = 0.println ( “ El sueldo más bajo es: ” +menorSueldo ) . Se realiza el cálculo del promedio final en base a la fomula: nf = ( n1 + n2 + n3 + ( n4 * 2 ) ) / 5. Calcular y mostrar el número de alumnos que tienen promedio final menor que 10. y los alumnos que tienen promedio final mayor que 18. Resultado deseado: Mostrar el número de alumnos con promedio final menor que 10. Las cuatro notas del alumno se ingresan y se almacenan en las variables n1. el número de alumnos con promedio final entre 10 y 14. y el número de alumnos con promedio final mayor que 18.Descripción del problema. Este proceso se repite para todos los alumnos del curso con la finalidad de determinar su promedio final (nf) y evaluar su rango. Si el promedio final (nf) es menor que 10 se aumenta 1 a la variable total1. n3 y n4. Las cuatro notas de cada uno de los alumnos del curso. 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) está entre 10 y 14 se aumenta 1 a la variable total2. los alumnos que tiene promedio final entre 10 y 14. Etapa 02 . Datos necesarios: Procesamiento: Pag.ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Problema 19 Etapa 01 .Definición de la solución. los alumnos que tienen promedio final entre 15 y 18. 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. 161 . para ser evaluada. El resultado es almacenado en la variable nf. el número de alumnos con promedio final entre 15 y 18. 162 . Definición de Paquetes y desarrollo del Diagrama de Paquetes. Nombre del Proyecto: ProyNotasRango. Definición de las Clases. 2. Clases dominioDeLaAplicacion Clases biblioteca Pag. Etapa 03 . 1. Diagrama de paquetes 3.Diseño de la lógica. Juan José Flores Cueto.Ing. 5) ENTONCES total4 = total4 + 1 FINSI i=i+1 FINMIENTRAS ESCRIBIR total1. n2. n4 = 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. Diseño de algoritmo para el método principal. n2 = 0.ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS 3. total2. n1. numAlumnos = 0 NUMERO i = 1. total3. n4 total1.5) ENTONCES total1 = total1 + 1 FINSI SI (nf >= 10.5) ENTONCES total3 = total3 + 1 FINSI SI (nf >= 17. total4 Pag. total2. Algoritmo PrgNotasRango . n3.método main ( ) ENTRADA: SALIDA: INICIO NUMERO n1 = 0. 163 .5 AND nf < 14. n3 = 0. total3 = 0 . nf = 0.5) ENTONCES total2 = total2 + 1 FINSI SI (nf >= 14.5 AND nf < 17. total1 = 0 . total2 = 0 . total4 FIN numAlumnos. total3. Ing. total4 = 0 .out.println ( “ Total alumnos con promedio entre 10 y 14: ” + total2 ) . ”).5) total1++ . Juan José Flores Cueto. System.println ( “ Ingrese el número de alumnos: ” ) .leerDouble ( ) . Clase PrgNotasRango package dominioDeLaAplicacion .out.println ( “ Total alumnos con promedio mayor a 18: ” + total4 ) . } while ((n2 < 0 || n2 > 20) . 164 . n3= 0. do { System.println ( “ Ingrese nota 1 del alumno [” + i + “]: n1 = Lectura.Lectura . nf = (n1 + n2 + n3 + ( n4 * 2) ) / 5 . } while (( n4 < 0 || n4 > 20 ) .out. n2= 0. double n1= 0.leerDouble ( ) . total2 = 0. Pag.println ( “ Total alumnos con promedio entre 15 y 18: ” + total3 ) .println ( “ Ingrese nota 2 del alumno [” + i + “]: n2 = Lectura. nf= 0. do { System.5 && nf < 15. import biblioteca.leerInt ( ) . if (nf < 10. ”). class PrgNotasRango { public static void main ( String arg[] ) { int i = 1. System.out.leerDouble ( ) .println ( “ Ingrese nota 3 del alumno [” + i + “]: n3 = Lectura.5) total3++ .Desarrollo de la Codificación. total3 = 0. } while (( n3 < 0 || n3 > 20 ) . } } ”).out.out. if (nf >= 10. i ++ .println ( “ Total alumnos con promedio menor a 10: ” + total1 ) .out. while (i <= numAlumnos) { do { System. if (nf >= 15.5 && nf < 17.out.leerDouble ( ) . Etapa 04 . numAlumnos = 0 .out. System. n4= 0. total1 = 0.5) total2++ .5) total4++ .println ( “ Ingrese nota 4 del alumno [” + i + “]: n4 = Lectura. ”). do { System. System. } while ((n1 < 0 || n1 > 20) . if (nf >= 17. } System. numAlumnos = Lectura. palco o mezanine). el monto total recaudado y el número de entradas vendidas para platea. De igual forma. para obtener la ganancia en Datos necesarios: Procesamiento: Pag. Etapa 02 . palco y mezanine en el día. 165 . cada variable (totalPla. Si es un boleto para platea se aumenta 1 a la variable totalPla. El costo del boleto para platea. Elaborar una solución que permita controlar la venta de boletos en un determinado día en un teatro de la capital. se leerá una sola vez el precio de entrada para palco. 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. palco o mezanine). costoPal y costoMez) según corresponda. si es para platea. • 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. Resultado deseado: El número total de entradas vendidas. palco y mezanine en un determinado día. se deberá proporcionar la siguiente información: • Número total de entradas vendidas durante el día. platea y mezanine.Descripción del problema. Cada vez que se venda un boleto se ingresará el número y tipo de boleto. • El programa terminará cuando el número de boleto sea igual a cero. palco y mezanine se ingresarán a través del teclado y se almacenarán en las variables costoPla. totalPal y totalMez) se multiplica por el costo del boleto (costoPla.ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Problema 20 Etapa 01 . y se almacenarán en las variables numBoleto y tipo respectivamente. en base a la siguiente información: • Al comenzar. • Antes de finalizar. el número de boleto y el tipo de boleto (es decir. Luego se evaluará el tipo de boleto. • El total de soles recaudados en el día. totalPal y totalMez para obtener el total de boletos vendidos (totalVendidas). y por cada venta.Definición de la solución. palco y mezanine en general. El costo del boleto para platea. Al finalizar la venta de boletos se suma el valor de las variables totalPla. costoPal y costoMez respectivamente. Etapa 03 . 2. palco (gananciaPal) y mezanine (gananciaMez).Diseño de la lógica. La ganancia total (totalGanancia) se obtiene al sumar el valor de las variables ganaciaPla. 1. Diagrama de paquetes 3. gananciaPal y gananciaMez. Clases dominioDeLaAplicacion Clases biblioteca Pag. Nombre del Proyecto: ProyTeatro. Juan José Flores Cueto. 166 . platea (gananciaPla).Ing. Definición de las Clases. Definición de Paquetes y desarrollo del Diagrama de Paquetes. Algoritmo PrgTeatro . 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. gananciaPla = 0. totalMez FIN costoPla.método main ( ) ENTRADA: SALIDA: INICIO NUMERO numBoleto = 0. totalPal = 0.ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS 4. totalPal. totalMez = 0 NUMERO costoPla = 0. tipo = 0. costoMez = 0 NUMERO totalGanancia =0. Diseño de algoritmo para el método principal. gananciaPal = 0 NUMERO ganaciaMez = 0 LEER costoPla. totalVendidas = 0 NUMERO totalPla = 0. totalGanancia. costoMez totalVendidas. totalPal. totalPla. costoPal. 167 . costoPal = 0. costoPal. totaMez Pag. break . 168 . Etapa 04 . ” + totalGanancia ) .leerDouble ( ) . costoMez = 0 . ganaciaMez = totalMez * costoMez .Ing.println ( “ Ingrese el costo de la entrada para mezanine: ” ) . ganaciaPla = totalPla * costoPla . } while (tipo < 1 || tipo > 3) .leerDouble ( ) . System. double gananciaPla = 0.out.out.println ( “ Ingrese el número de boleto: ” ) . class PrgTeatro { public static void main ( String arg[] ) { int numBoleto = 0. totalMez=0 . import biblioteca. System. if ( numBoleto != 0) { do { System. Juan José Flores Cueto.Lectura . totalVendidas = 0.out.out.leerDouble ( ) . break . double totalGanancia=0. numBoleto = Lectura. System. } } Pag.out. costoPla = 0. switch ( tipo) { case 1 : totalPla ++ .println ( “ Ingrese el lugar ” ) . System. totalPla=0. ganaciaMez = 0 .out. tipo = Lectura. tipo = 0. } } } while ( numBoleto != 0 ) .out. gananciaPal = 0.leerInt ( ) .out.out.println ( “ Ingrese el costo de la entrada para palco: ” ) .println ( “ Número total de entradas: ” + totalVendidas ) .leerInt ( ) . Clase PrgTeatro package dominioDeLaAplicacion .Desarrollo de la Codificación. costoMez = Lectura. ganaciaPal = totalPal * costoPal . totalGanancia = gananciaPla + gananciaPal + gananciaMez . System. do { do { System. costoPal = 0.println ( “ Ingrese el costo de la entrada para platea: ” ) .println ( “ Total vendidas palco: ” + totalPal ) . totalVendidas = totalPla + totalPal + totalMez . case 3 : totalMez ++ . costoPla = Lectura. System.out. costoPal = Lectura.println ( “ [1] Platea. } while (numBoleto < 0) . System. System.println ( “ Total vendidas mezanine: ” + totalMez ) . System. case 2 : totalPal ++ . [2] Palco [3] Mezanine ” ) .println ( “ Total vendidas platea: ” + totalPla ) .out.println ( “ Total recaudado S/. totalPal=0. Dependiendo del turno se obtiene la tarifa para luego hacer el cálculo del jornal de la siguiente forma: jornal = horas * tarifa . el turno y el día que trabajó el empleado. Se desea calcular el jornal diario de cada empleado teniendo en cuenta lo siguiente: La tarifa del turno mañana y tarde es de S/ 8. Este proceso se repite para cada uno de los empleados de la fábrica. tarde y noche.Definición de la solución. Para el turno tarde se incrementa S/ 10.00 soles por hora. El número de horas. Los empleados de una fábrica trabajan en tres turnos. 169 . El resultado es almacenado en una variable (jornal) para luego ser mostrada por pantalla. turno y dia). Etapa 02 . mañana.Descripción del problema. Resultado deseado: Datos necesarios: Procesamiento: Calcular y mostrar el jornal diario de cada empleado. la tarifa se incrementa en 50% para los turnos mañana y tarde y en 60% para el turno noche. Pag. El número de horas. La tarifa del turno noche es de S/ 10. En caso de ser un día domingo.00 soles por concepto de movilidad.00 soles por hora.ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Problema 21 Etapa 01 . el turno y el día del empleado se ingresan a través del teclado y se almacenan en variables (horas. 2. Diagrama de paquetes 3.Diseño de la lógica. 170 .Ing. 1. Etapa 03 . Juan José Flores Cueto. Nombre del Proyecto: ProyJornal. Definición de las Clases. Clases dominioDeLaAplicacion Clases biblioteca Pag. Definición de Paquetes y desarrollo del Diagrama de Paquetes. dia jornal Pag.método main ( ) ENTRADA: SALIDA: INICIO NUMERO numEmpleados = 0. ” FINSI MIENTRAS (numEmpleados <= 0) MIENTRAS (i < numEmpleados) i=i+1 HACER LEER horas SI (horas <= 0) ENTONCES ESCRIBIR “ Número horas mayor a 0. horas. jornal = 0 HACER LEER numEmpleados SI (numEmpleados <= 0) ENTONCES ESCRIBIR “ Número empleados mayor a 0. dia = 0. horas = 0.5 * 8 SINO tarifa = 8 FINSI TERMINAR CASO 3: SI (dia = 7) ENTONCES tarifa = 1. ” FINSI MIENTRAS (horas <= 0) HACER LEER dia SI (dia < 1 OR dia > 7) ENTONCES ESCRIBIR “ La opción no es válida.6 * 10 SINO tarifa = 10 FINSI TERMINAR OTROS ESCRIBIR “opción no válida” FINCUANDO MIENTRAS (turno <>1 AND turno <>2 AND turno <>3) numEmpleados. turno = 0 NUMERO tarifa = 0. Algoritmo PrgJornal . 171 . ” FINSI MIENTRAS (dia < 1 OR dia > 7) HACER LEER turno CUANDO turno SEA: CASO 1: CASO 2: SI (dia = 7) ENTONCES tarifa = 1. turno. Diseño de algoritmo para el método principal. i = 0.ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS 4. horas = Lectura. turno = 0 .Ing.leerInt ( ) . } while (numEmpleados <= 0) . horas = 0. do { System. Clase PrgJornal package dominioDeLaAplicacion . numEmpleados = Lectura.print ( “ Ingrese horas trabajadas empleado [” + i + “]: ” ) . while ( i < numEmpleados ) { i++ . import biblioteca.Desarrollo de la Codificación. dia = 0.out. class PrgJornal { public static void main ( String arg[] ) { int numEmpleados = 0.print ( “ Ingrese el número de empleados: ”) .out. i = 0. Continúa… 4. do { System.método main ( ) SI (turno = 2) ENTONCES jornal = horas * tarifa + 10 SINO jornal = horas * tarifa FINSI ESCRIBIR jornal FINMIENTRAS FIN Etapa 04 . Algoritmo PrgJornal .Lectura . Juan José Flores Cueto. Pag. Diseño de algoritmo para el método principal.out.println ( “ El número de empleados debe ser mayor a 0 ” ) .out. if (numEmpleados <= 0) System.leerInt ( ) . if (horas <= 0 ) System. } while (horas <= 0) . 172 . jornal = 0 .println ( “ Número de horas mayor a 0 ” ) . double tarifa = 0. System.out. 173 .out. case 3 : if (dia == 7) tarifa = 1.print ( “ Opción: ”) .println ( “ [7] Domingo ” ) . do { System.println ( “ La opción no es válida ”) .println ( “ La opción no es válida ”) . } while (dia < 1 || dia > 7) .println ( “ [6] Sábado ” ) . } } } Pag.out. System. break . System. System.out. dia = Lectura. System.println ( “ [1] Lunes ” ) . turno = Lectura.println ( “ Seleccione el turno del empleado: ”) . switch (turno) { case 1 : case 2 : if (dia == 7) tarifa = 1.out.out.out.println ( “ El jornal del día del empleado [” + i + “] es: ” + jornal ) . else jornal = horas * tarifa . default : System. System.println ( “ [2] Martes ” ) . else tarifa = 8 . } } while (turno != 1 && turno != 2 && turno != 3) . System.out.out.out.leerInt ( ) .println ( “ [3] Noche ”) . System. System.println ( “ [1] Mañana ”) . if (turno == 2) jornal = horas * tarifa + 10 .5 * 8 . System.ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Continúa… Etapa 04 .println ( “ [5] Viernes ” ) .println ( “ [4] Jueves ” ) . break . else tarifa = 10 .Desarrollo de la Codificación.out.out. System.out. System.out.print( “ Opción: ” ) .out.out.println ( “ Seleccione día trabajado empleado [“ + i + ”]: ” ) . System.println ( “ [3] Miércoles ” ) .out.6 * 10 .leerInt ( ) . Clase PrgJornal do { System. if (dia < 1 || dia > 7) System.println ( “ [2] Tarde ”) . Resultado deseado: Número de alumnas matriculadas. menores de 20 años y desaprobadas. El sexo. además número de alumnos matriculados.Definición de la solución.Ing. Si es una alumna o es un alumno incrementaremos las variables correspondientes (matriculadas y matriculados). Datos necesarios: Procesamiento: Pag. Este proceso se repetirá mientras el usuario confirme su deseo de ingresar los datos de otro alumno. 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 . 174 . Dicha respuesta será almacenada en una variable (rpta). Problema 22 Etapa 01 . Juan José Flores Cueto. la edad y la nota de cada alumno se ingresarán a través del teclado y se almacenarán en variables (sexo. 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. Sexo. edad y nota de cada uno de los alumnos del curso. edad y nota). así como una variable que determine si se continúa o no con el ingreso de los datos de un nuevo alumno.Descripción del problema. mayores de 18 años y aprobados. Diseño de la lógica. Nombre del Proyecto: ProyClase.ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Etapa 03 . 175 . Diagrama de paquetes 3. Clases dominioDeLaAplicacion Clases biblioteca Pag. Definición de las Clases. Definición de Paquetes y desarrollo del Diagrama de Paquetes. 2. 1. nota. ” FINSI MIENTRAS (edad <= 0) HACER LEER nota SI (nota < 0 OR nota > 20) ENTONCES ESCRIBIR “ La nota no es válida. desaprobadas. menores.Ing. matriculados = 0 NUMERO menores = 0. matriculadas = 0. Algoritmo PrgClase . mayores = 0. edad. 176 .método main ( ) ENTRADA: SALIDA: INICIO NUMERO i = 0. Diseño de algoritmo para el método principal. nota = 0. ” 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. matriculados. ” 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 sexo. aprobados Pag. mayores. edad = 0. desaprobadas = 0. 4. Juan José Flores Cueto. 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. aprobados = 0 TEXTO sexo = ‘F’. rpta matriculadas. 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. Diseño de algoritmo para el método principal.ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Continúa… 4. Algoritmo PrgClase . 177 . ” 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. out.out. Etapa 04 .Desarrollo de la Codificación. if (nota < 11) desaprobadas += 1 . ” ) . break . ”) .Ing.leerChar ( ) .out. do { System. edad = Lectura. aprobados = 0 . do { System. import biblioteca. char sexo = ‘F’. matriculadas = 0.println ( “ Sexo no válido. int mayores = 0. rpta = ‘ ’ . Pag. nota = 0. } while (edad <= 0) . edad = 0.Lectura .out. switch (sexo) { case ‘f’ : case ‘F’ : matriculadas += 1 . matriculados = 0. desaprobadas = 0. if (edad < 20) menores += 1 .println( “ Nota no válida ” ) . } while ( sexo != ‘f’ && sexo != ‘F’ && sexo != ‘m’ && sexo != ‘M’ ) .leerInt ( ) . do { i ++ . } while (nota < 0 || nota > 20) . if (edad <= 0) System. Juan José Flores Cueto. sexo = Lectura. Clase PrgClase package dominioDeLaAplicacion .leerInt ( ) . if ( sexo != ‘f’ && sexo != ‘F’ && sexo != ‘m’ && sexo != ‘M’ ) System. class PrgClase { public static void main ( String arg[] ) { int i = 0. nota = Lectura.out. menores = 0 .println ( “ Ingrese sexo alumno [” + i + “] matriculado [F/M]: ” ) .println ( “ Ingrese la nota del alumno [” + i + “]: ” ) .println ( “ Ingrese la edad del alumno [” + i + “]: ” ) .out.println ( “ Edad no válida. if (nota < 0 || nota > 20) System. 178 . do { System. println ( “Hay ” + mayores + “ alumno(s) mayor(es) de 18 años.Desarrollo de la Codificación.println ( “Hay ” + matriculadas + “ alumna(s) matriculada(s).out. rpta = Lectura.println ( “Hay ” + matriculados + “ alumno(s) matriculado(s). } while ( rpta == ‘s’ || rpta == ‘S’ ) .” ) . } } Pag.println ( “Respuesta no válida. } do { System. ” ) . } while ( rpta != ‘s’ && rpta != ‘S’ && rpta != ‘n’ && rpta != ‘N’ ) . ” ) .out. System.out. ” ) .println ( “Hay ” + desaprobadas + “ alumna(s) desaprobada(s).leerChar ( ) . if (edad > 18) mayores += 1 .out. System.out.println ( “Hay ” + aprobados + “ alumno(s) aprobado(s).out. Clase PrgClase case ‘m’ : case ‘M’ : matriculados += 1 .ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Continúa… Etapa 04 . ” ) . System.out. System. 179 . if (nota > 10) aprobados += 1 .println ( “Hay ” + menores + “ alumna(s) menor(es) de 20 años. ”) . ”) .out. System.println ( “ ¿Desea ingresar un nuevo alumno [S/N]?: ” ) . if ( rpta != ‘s’ && rpta != ‘S’ && rpta != ‘n’ && rpta != ‘N ’ ) System. System. Pag. Juan José Flores Cueto. 180 .Ing. la suma de las cifras. Desarrollar una solución que permita ingresar un número por teclado. cont = 0. contImp = 0.println ( “ El número de cifras pares es : ” + contPar ) .out.println ( “ El número no es capicua ” ) . el número de cifras que tiene el número. n = n / 10 . System.println ( “ Ingrese un número entero: ” ) .Desarrollo de la Codificación. n = num . System.out.println ( “ La suma de las cifras es : ” + suma ) . else contImp ++ . y si el número es capicua o no.println ( “ El número invertido es : ” + numInv ) . } } En base al análisis de la codificación desarrolle la Etapa 02 y la Etapa 03 del método.leerInt ( ) . numInv = 0. if ( num == numInv ) System. Etapa 04 . Clase PrgNumCifras package dominioDeLaAplicacion . Pag. System.out.ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Problema 23 Etapa 01 . num = Lectura.Lectura . numInv = numInv * 10 + res . System. } System. n . cont ++ . import biblioteca.out. el número de cifras pares e impares.out. class PrgNumCifras { public static void main ( String arg [ ] ) { int num = 0. 181 . suma = 0.out.println ( “ El número es capicua ” ) . if ( res % 2 == 0 ) contPar ++ . contPar = 0.out.println ( “ El número de cifras es : ” + cont ) .out. while ( n != 0 ) { res = n % 10 .Descripción del problema. Mostrar el número con las cifras invertidas.println ( “ El número de cifras impares es : ” + contImp ) . else System. System. suma = suma + res . res = 0. System.leerInt ( ) . boolean verifdia = false. Desarrollar un programa que permita ingresar el día. mes = Lectura. Problema 24 Etapa 01 . class PrgVerificaFecha { public static void main ( String arg[] ) { int dia. // verifica año bisiesto if ( año % 4 == 0 && año % 100 != 0 || año % 400 == 0 ) { bisiesto = true .out. String mess = “ ” . mes. pero los años * múltiplos de 100 sólo son bisiestos cuando a su vez son múltiplos de 400.leerInt ( ) . */ import biblioteca.java * Dada una fecha en dia. Etapa 04 . System. dia = Lectura. /** Clase: PrgVerificaFecha.leerInt ( ) . año . System.println ( “ Ingrese el número del día: ” ) .Ing. } //verifica el dia switch (mes) { case 1 : case 3 : case 5 : case 7 : case 8 : case 10 : case 12 : Pag. Determinar si la fecha ingresada es correcta y si el año es bisiesto o no.out.println ( “ Ingrese el 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. el mes y el año de una determina fecha. Clase PrgVerificaFecha package dominioDeLaAplicacion.Desarrollo de la Codificación. bisiesto = false .println ( “ Ingrese el número del mes: ” ) . mientras que 2000 si lo es. año = Lectura. * por ejemplo 1800 no es bisiesto.Descripción del problema.Lectura. por ejemplo 1984.out. 182 . Juan José Flores Cueto. case 6 : mess = “Junio” . } } break . break . break . case 2 : mess = “Febrero” .ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Clase PrgVerificaFecha If ( dia > 0 && dia <= 31 ) { verifdia = true . 183 . case 8 : mess = “Agosto” . case 4 : mess = “Abril” . case 4 : case 6 : case 9 : case 11 : if ( ( dia > 0) && ( dia <= 30 ) ) verifdia = true . break . } else { if ( ( dia > 0 ) && ( dia <= 28 ) ) verifdia = true . Pag. break . } break . case 2 : if ( bisiesto ) { if ( ( dia > 0 ) && ( dia <= 29 ) ) { verifdia = true . break . break . break . break . } //selecciona el nombre del mes if ( verifdia && ( mes > 0 ) && ( mes <= 12 ) && ( año > 0 ) ) { switch (mes) { case 1 : mess = “Enero” . case 5 : mess = “Mayo” . case 3 : mess = “Marzo” . break . case 7 : mess = “Julio” . } } } Pag. } } else { System.println ( “ No es año bisiesto ” ) .println ( “ Es año bisiesto ” ) . if ( bisiesto ) { System.println ( dia + “ de ” + mess + “ de ” + año ) .out.out. Juan José Flores Cueto.out. 184 . break . Clase PrgVerificaFecha case 10 : mess = “Octubre” . } System. case 12 : mess = “Diciembre” . } else { System.Ing. break . case 11 : mess = “Noviembre” .out.println ( “ error en fecha ” ) . break. case 2 : romano = romano + “MM” . unidad.leerInt ( ) . /** Clase: PrgNumRomano. Clase PrgNumRomano package dominioDeLaAplicacion . miles .Lectura . } Pag. case 3 : romano = romano + “MMM” . 185 . unidad = resto % 10 .Descripción del problema. resto.ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Problema 25 Etapa 01 . Obtener miles switch ( miles ) { case 1 : romano = romano + “M” . Desarrollar un programa que permita ingresar un número arábico entre 1000 y 3000. decena. arabigo = Lectura. resto = arabigo % 1000 . break . //formar el número romano. resto = resto % 100 . System.println ( “ Ingrese un número entre 1000 y 3000: ” ) . Determinar y mostrar el equivalente del número ingresado en número romano.Desarrollo de la Codificación. Etapa 04 . class PrgNumRomano { public static void main ( String arg [ ] ) { int arabigo. imprimirlo en números romanos dentro de * rango de 1000 a 3000 * Programación Básica */ import biblioteca. break . centena = resto / 100 .java * Dado un año en números arábigos. centena. decena = resto / 10 .out. if ( arabigo >= 1000 && arabigo <= 3000 ) { miles = arabigo / 1000 . String romano = “ ” . break . case 3 : romano = romano + “XXX” . case 4 : romano = romano + “CD” . case 4 : romano = romano + “XL” . break . break . case 9 : romano = romano + “CM” . Clase PrgNumRomano //obtener centenas switch ( centena ) { case 1 : romano = romano + “C” . case 5 : romano = romano + “L” . case 2 : romano = romano + “XX” . Juan José Flores Cueto. } //obtener decenas switch ( decena ) { case 1 : romano = romano + “X” . break . break . case 6 : romano = romano + “LX” . break . break . break . break . break . case 8 : romano = romano + “DCCC” .Ing. break . Pag. case 3 : romano = romano + “CCC” . case 6 : romano = romano + “DC” . case 7 : romano = romano + “DCC” . break . case 5 : romano = romano + “D” . case 2 : romano = romano + “CC” . break . 186 . break . break . break . case 4 : romano = romano + “IV” . case 2 : romano = romano + “II” . case 3 : romano = romano + “III” . 187 . case 6 : romano = romano + “VI” . } // Mostrar número romano System. break . break .out. } //obtener unidades switch ( unidad ) { case 1 : romano = romano + “I” . } else { System.ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Clase PrgNumRomano case 7 : romano = romano + “LXX” . break . case 8 : romano = romano + “VIII” . break . case 9 : romano = romano + “XC” . break .out. break . } } } Pag.println ( " Número ingresado no válido " ) . case 8 : romano = romano + “LXXX” . break . break . break . break .println ( Arábigo + “ = ” + romano ) . case 9 : romano = romano + “IX” . break . case 5 : romano = romano + “V” . break . case 7 : romano = romano + “VII” . Desarrollo de la Codificación. num = Lectura. once = “once” . Reintente!!! ” ) . String ocho = “ocho”.Ing. import biblioteca.Descripción del problema. String cuarenta = “cuarenta”. y = “ y ”. uni = num % 10 .println ( “Número ingresado no válido. noventa = “noventa” . siete = “siete” . 188 . Problema 26 Etapa 01 .Lectura . break . sesenta = “sesenta” . nueve = “nueve”. String veinte = “veinte”. dec. seis = “seis”. Desarrollar un programa que permita ingresar un número entero menor que 100 y permita mostrar su equivalente en letras. switch ( uni ) { case 0 : letra = cero . Juan José Flores Cueto. } while ( num < 0 || num > 99 ) . break .. Etapa 04 . treinta = “treinta” . catorce = “catorce”. ochenta = “ochenta”. Pag. cinco = “cinco”. case 1 : letra = uno .out. quince = “quince” . tres = “tres” . int num.println ( “Ingrese un número entero menor que 100: ” ) . String setenta = “setenta”. Clase PrgNumALetras01 package dominioDeLaAplicacion .leerInt ( ) . String doce = “doce”. diez = “diez”. do { System. trece = “trece”. dec = num / 10 . if ( num < 0 || num > 99 ) System. veinti = “veinti”.out. cero = “cero”. dos = “dos”. class PrgNumALetras01 { public static void main ( String arg [ ] ) { String letra = “”.. String dieci = “dieci” . String cuatro = “cuatro”. uno = “uno”. cincuenta = “cincuenta”. uni . ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Clase PrgNumALetras01 case 2 : letra = dos . break . Pag. break . case 9 : letra = nueve . case 5 : letra = quince . case 8 : letra = ocho . break . break . case 7 : letra = siete . break . 189 . default : letra = dieci + letra . case 4 : letra = catorce . case 5 : letra = cinco . } break . case 2 : letra = doce . break . case 3 : letra = trece . break . break . break . } switch ( dec ) { case 1 : switch ( uni ) { case 0 : letra = diez . break . case 3 : letra = tres . break . case 6 : letra = seis . break . break . case 4 : letra = cuatro . break . case 1 : letra = once . break . else letra = sesenta + y + letra . else letra = veinti + letra . case 6 : if ( uni == 0 ) letra = sesenta . else letra = cuarenta + y + letra . break . case 5 : if ( uni == 0 ) letra = cincuenta . 190 . else letra = noventa + y + letra . break . else letra = cincuenta + y + letra . } } Pag. break .out. Clase PrgNumALetras01 case 2 : if ( uni == 0 ) letra = veinte .Ing.print ( “El número ” + num + “ en letras es ” + letra ) . case 4 : if ( uni == 0 ) letra = cuarenta . case 7 : if ( uni == 0 ) letra = setenta . Juan José Flores Cueto. break . else letra = setenta + y + letra . break . else letra = treinta + y + letra . case 3 : if ( uni == 0 ) letra = treinta . break . else letra = ochenta + y + letra . case 9 : if ( uni == 0 ) letra = noventa . case 8 : if ( uni == 0 ) letra = ochenta . } System. tres = “tres”. ochenta = “ochenta”. int num. String doce = “doce”.leerInt ( ) . diez = “diez”.println ( “ Número ingresado no válido.. import biblioteca. uni. ciento = “ciento ”. cincuenta = “cincuenta”. cero = “cero”.println ( “ Ingrese un número entero menor que 1000: ” ) .out.Lectura . seis = “seis”. cientos = “cientos ”. Pag. treinta = “treinta”. trece = “trece”. String dieci = “dieci”. dec = resto / 10 . 191 . sesenta = “sesenta”. cen = num / 100 .. Reintente!!! ” ) . String cuarenta = “cuarenta”. resto = num % 100 . Clase PrgNumALetras02 package dominioDeLaAplicacion .Descripción del problema.ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Problema 27 Etapa 01 . sete = “sete”. cinco = “cinco”. break . String cien = “cien”. catorce = “catorce”. cen. En base al programa anterior. quince = “quince”. dos = “dos”. veinti = “veinti”. dec. uni = resto % 10 . class PrgNumALetras02 { public static void main ( String arg [ ] ) { String letra = “”. String setenta = “setenta”. desarrollar otro programa que permita ingresar un número entero menor que 1000 y permita mostrar su equivalente en letras. noventa = “noventa”. num = Lectura. } while ( num < 0 || num > 999 ) . String cuatro = “cuatro”. String veinte = “veinte”. Etapa 04 . case 1 : letra = uno . nueve = “nueve”.out. siete = “siete”. break . y = “ y ”. nove = “nove”. String quinientos = “quinientos ”. uno = “uno”.Desarrollo de la Codificación. String ocho = “ocho”. switch ( uni ) { case 0 : letra = cero . if ( num < 0 || num > 999 ) System. do { System. resto. once = “once”. case 5 : letra = quince . case 2 : letra = doce . case 4 : letra = cuatro . case 3 : letra = tres . break . case 4 : letra = catorce . break . break . break . default : letra = dieci + letra . case 1 : letra = once . case 9 : letra = nueve . case 6 : letra = seis . case 7 : letra = siete . break . break . break . break . } switch (dec) { case 1 : switch (uni) { case 0 : letra = diez .Ing. } break . break . case 8 : letra = ocho . case 3 : letra = trece . 192 . break . Clase PrgNumALetras02 case 2 : letra = dos . break . Juan José Flores Cueto. break . break . case 5 : letra = cinco . break . case 2 : Pag. case 9 : if ( uni == 0 ) letra = noventa . break . case 4 : if (uni == 0) letra = cuarenta . else letra = treinta + y + letra . break . case 3 : if ( uni == 0 ) letra = treinta .ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Clase PrgNumALetras02 if ( uni == 0 ) letra = veinte . break . else letra = veinti + letra . case 8 : if ( uni == 0 ) letra = ochenta . else letra = cuarenta + y + letra . break . 193 . } switch ( cen ) { case 1 : if ( dec == 0 && uni == 0 ) letra = cien . case 6 : if ( uni == 0 ) letra = sesenta . else letra = ochenta + y + letra . break . else letra = setenta + y + letra . else letra = sesenta + y + letra . else letra = noventa + y + letra . case 5 : if ( uni == 0 ) letra = cincuenta . else Pag. break . else letra = cincuenta + y + letra . break . case 7 : if ( uni == 0 ) letra = setenta . break .print ( “El número ” + num + “ en letras es ” + letra ) . else letra = seis + cientos + letra . else letra = dos + cientos + letra . case 3 : if ( dec == 0 && uni == 0 ) letra = tres + cientos . break . case 4 : if ( dec == 0 && uni == 0 ) letra = cuatro + cientos .Ing. break . Clase PrgNumALetras02 letra = ciento + letra . else letra = ocho + cientos + letra . } } Pag. case 6 : if ( dec == 0 && uni == 0 ) letra = seis + cientos . case 9 : if ( dec == 0 && uni == 0 ) letra = nove + cientos . break . Juan José Flores Cueto. 194 . break . case 2 : if ( dec == 0 && uni == 0 ) letra = dos + cientos . case 8 : if ( dec == 0 && uni == 0 ) letra = ocho + cientos . break . break . case 7 : if ( dec == 0 && uni == 0 ) letra = sete + cientos . else letra = tres + cientos + letra .out. } System. else letra = cuatro + cientos + letra . else letra = quinientos + letra . else letra = nove + cientos + letra . break . else letra = sete + cientos + letra . case 5 : if ( dec == 0 && uni == 0 ) letra = quinientos . break . una entrada incorrecta de datos (IOException). una división por cero (ArithmeticException) o una conversión de datos no válida (NumberFormatException). 195 . y utilizar la sentencia catch para capturar y manejar cada una de las excepciones que se puedan lanzar. si se desea que la ejecución del programa no se detenga. Ahora. … … … … … } Tipo de excepción capturada por la sentencia catch con la finalidad de manejarla. se deberá capturar la excepción lanzada y manejarla. no ocurren). Existen diversos errores que pueden ocasionar que se lance una excepción en un programa. Pag. Las excepciones en Java son objetos de subclases de la clase Throwable. se debe utilizar la sentencia try para alertar al programa acerca del código que puede ocasionar un error. Para evitar que la ejecución de un programa se detenga debido a un error que lanza una excepción. 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. 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”. El formato de la sentencia try y catch es el siguiente: try { // Código de la aplicación. por ejemplo. … … … … … } catch ( ) { // Código de tratamiento de la excepción.ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS MANEJO DE EXCEPCIONES Cuando se está ejecutando un programa y ocurre un error. Como se ha indicado. se lanzará una excepción.Ing.*/ … … } catch ( ArithmeticException e ) { /* Código de tratamiento de ArithmeticException. no se lanzará ninguna excepción. Cada sentencia catch capturará y manejara un excepción. */ … … } catch ( NumberFormatException e ) { /* Código de tratamiento NumberFormatException. 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. lo que significa que las sentencias que están entre las llaves de la sentencia catch no se ejecutarán. 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. 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. Juan José Flores Cueto. */ … … } de la excepción la excepción En el ejemplo anterior. try { /* Código de la aplicación que se prevee que puedan lanzar una excepción. Pag. existen diferentes tipos de excepciones por lo que es común observar en un programa una sentencia try con varias sentencias catch. … … } Si no ocurre un error. Si ocurre un error. Se intentó utilizar null donde se requería un objeto. NumberFormatException IOException ArrayIndexOutOfBoundException NullPointerException Pag. Un arreglo fué accedido con un índice ilegal (fuera de los límites permitidos). Problemas al realizar operaciones de entrada y salida de datos. se considera como “buen estilo de programación” el uso de las excepciones en los programas. 197 . Se intentó convertir una cadena con un formato inapropiado a un número. Como ejemplo de excepciones se puede mencionar: Excepción ArithmeticException Descripción Una condición aritmética excepcional ocurrio.ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS El manejo de excepciones ofrece una forma de escribir o codificar programas con una mayor claridad y sencillez. separando explícitamente el código que maneja los errores del código básico de una aplicación. En la actualidad. Mostrar el resultado de dividir ambos números. Problema 28 Etapa 01 . Se debe tener en cuenta que existe la posibilidad que el divisor sea igual a cero.out.Ing. Pag.println ( “ Ingrese el divisor: ” ) . } } Ejecute el siguiente programa e ingrese cero al divisor.Desarrollo de la Codificación.Lectura .out.leerInt ( ) . Desarrollar una solución que permita ingresar dos números enteros. Intente incluir en el programa anterior el manejo de la excepción lanzada.Descripción del problema. Para evitar que el programa finalice es necesario manejar dicha excepción. Etapa 04 . Clase PrgDivisionSinExcepcion package dominioDeLaAplicacion . 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. import biblioteca. Analice el siguiente programa y anote sus conclusiones. finalizando la ejecución del programa. divisor. Juan José Flores Cueto. dividendo = Lectura. class PrgDivisionSinExcepcion { public static void main ( String arg [ ] ) { int dividendo.println ( “ Ingrese el dividendo: ” ) . divisor = Lectura.out.println ( “ El resultado de la división es: ” + rpta ) .leerInt ( ) . System. 198 . System. rpta . System. rpta = dividendo / divisor . out. class PrgDivisionConExcepcion { public static void main ( String arg [ ] ) { int dividendo. rpta . divisor.println ( “ Ingrese el dividendo: ” ) .leerInt ( ) .out. System. System.out. divisor = Lectura. 199 . dividendo = Lectura.println ( “ El resultado de la división es: ” + rpta ) . import biblioteca. System.println ( “ Ingrese el divisor: ” ) . } } } Pag.println ( “ No se puede dividir un número entre cero ” ) .Lectura. } catch ( ArithmeticException e ) { System.leerInt ( ) .ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Clase PrgDivisionConExcepcion package dominioDeLaAplicacion.out. try { rpta = dividendo / divisor . parseInt ( tmp ) . ss = Integer. mm.println ( “ minuto ingresado no válido ” ) .substring ( 0. Etapa 04 .println ( “ Ingrese la hora en el siguiente formato: hh:mm:ss ” ) . Juan José Flores Cueto. } else { valido = false .out. ss . } else { tmp = hora. do { System.out. if ( hh < 0 || hh > 23 ) { System.out. valido = true . hora = Lectura. hh = Integer. valido = true . if (mm < 0 || mm > 59) { System. int hh.println ( “ segundo ingresado no válido ” ) .substring ( 3.parseInt ( tmp ) . class PrgHoraConExcepcion { public static void main ( String arg [ ] ) { boolean valido . 5 ) .parseInt ( tmp ) . valido = true . 200 .Descripción del problema.Ing.out.println ( “ Hora ingresada no válida ” ) . if (ss < 0 || ss > 59) { System. tmp .substring ( 6 ) . “mm” es igual a los minutos (de 00 a 59 minutos) y “ss” es igual a los segundos (de 00 a 59 segundos). Clase PrgHoraConExcepcion package dominioDeLaAplicacion . Problema 29 Etapa 01 . Manejar excepciones.Desarrollo de la Codificación. String hora. 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). } } } Pag. 2 ) . import biblioteca.leerString ( ) .Lectura . } else { tmp = hora. try { tmp = hora. mm = Integer. Mostrar un mensaje cuando la hora ingresada sea válida. ingrese letras en lugar de números. ” ) . Puede probar el programa ingresando como hora lo siguiente: 23:10:xx Es decir. Pag. 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. ” ) . valido = true . } } while ( valido ) . System.. en cualquier parte del formato indicado. } } 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.out.. 201 ..println ( “ La hora se ingresó correctamente.ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Clase PrgHoraConExcepcion } catch ( NumberFormatException error ) { System..println ( “Error. 5 ) . tmp = fecha. Problema 30 Etapa 01 .leerString ( ) .Descripción del problema. else valido = true . if ( fecha. import biblioteca. año . String fecha. tmp.println ( “ Ingrese la fecha en el formato: dd/mm/aaaa ” ) .equals (“/”) ) valido = false . dia = Integer. 2 ) . Desarrollar una solución que permita ingresar la fecha en una variable de tipo texto o cadena con el siguiente formato: dd/mm/aaaa. 202 .substring ( 0. puntos1 = fecha. Etapa 04 . mes = Integer. 3 ) .substring ( 5. 6 ) . } catch (NumberFormatException error ) { valido = true . } Pag. año = Integer. puntos1. fecha = Lectura.out. do { System.Desarrollo de la Codificación. Validar que la fecha ingresada tenga el formato especificado. puntos2 .parseInt ( tmp ) .equals (“/”) && puntos2. int dia. class PrgFechaConExcepcion { public static void main ( String arg [ ] ) { boolean valido = true .length ( ) == 10 ) { try { tmp = fecha. puntos2 = fecha.parseInt ( tmp ) .trim ( ) .parseInt ( tmp ) . Manejar excepciones.substring ( 6 ) . fecha = fecha.Ing. Juan José Flores Cueto.substring ( 2.substring ( 3. tmp = fecha. Clase PrgFechaConExcepcion package dominioDeLaAplicacion . mes. if (puntos1.Lectura . System. 203 . } } 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 ) . if ( valido ) System.println ( “ El formato esta correcto. Puede probar el programa ingresando como fecha lo siguiente: 23/xx/2005 Es decir... mes y año ” ) . ver problema 24 y 127. ingrese letras en lugar de números (inclusive en el lugar del / ). ” ) .out.out. // Continúa la validación de la fecha. Ingrese la fecha según formato!!! ” ) ..print ( “ Ahora Ud. en cualquier parte del formato indicado.out. System.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. System.. continue el programa validando el valor ” ) .ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Clase PrgFechaConExcepcion } else valido = true .println ( “ de las variable dia.out.. parseInt ( tmp ) . Validar que los números sean de tres cifras y mostrar la división de los mismos.Ing.equals ( “//” ) ) { valido = false . Manejar excepciones.substring ( 3.Descripción del problema. String numeros. } else { valido = true .trim ( ) . resultado = num1 / num2 . num2 = Integer. tmp. do { System.substring ( 0. num2 . System.leerString ( ) . tmp = numeros.out. if ( puntos1. class PrgNumeroConExcepcion { public static void main ( String arg [ ] ) { boolean valido = true . 5 ) . puntos1 . Problema 31 Etapa 01 .length ( ) == 8 ) { try { tmp = numeros.parseInt ( tmp ) . } Pag. numeros = Lectura. numeros = numeros. import biblioteca.Lectura . Etapa 04 . if ( numeros.substring ( 5 ) .out. 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.Desarrollo de la Codificación.println ( “ Ingrese dos números con el formato: nnn//nnn ” ) . num1 = Integer.println ( “ La división es: ” + resultado ) . Clase PrgNumeroConExcepcion package dominioDeLaAplicacion . 204 . Juan José Flores Cueto. puntos1 = numeros. 3 ) . double resultado . .println ( “ Error. } } while ( valido ) . } } 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. en cualquier parte del formato indicado. 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. valido = false .println ( “ Formato no válido ” ) .out.println ( “ No se puede dividir un número entre cero ” ) . Puede probar el programa ingresando como números lo siguiente: aaa//123 Es decir. } } else { valido = true . 205 . Pag. } catch ( ArithmeticException error ) { System.. ingrese letras en lugar de números (inclusive en el lugar de las // ).ESTRUCTURAS FUNDAMENTALES EN LA SOLUCIÓN DE PROBLEMAS Clase PrgNumeroConExcepcion } catch ( NumberFormatException error ) { System. } if ( valido ) { System. 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.out. Ingrese en el formato indicado!!! ” ) . valido = true .out. Ing. Juan José Flores Cueto. 206 . Pag. como por ejemplo el lenguaje de programación Java. lenguaje de programación utilizado en el presente texto. con la finalidad de utilizarlas en forma conjunta y lograr desarrollar sus capacidades lógicas. Es decir. Pag.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. es necesario que comprenda los conceptos fundamentales relacionados a las estructuras lógicas y las estructuras de datos elementales. 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. El desarrollo de las capacidades lógicas se logra con la práctica. Existen problemas que por su naturaleza contribuyen de manera significativa a lograr este objetivo. los cuales se desarrollan en esta última parte del presente capítulo. 207 . desarrollando soluciones y codificándolas en un lenguaje de programación determinado. Juan José Flores Cueto. 208 .Ing. Pag. System.println ( “ Ingresar el número de filas de la figura ” ) . } } } Pag. ” ) . Etapa 04 – Desarrollo de la codificación.out.leerInt ( ) . Asuma que el número de filas puede variar desde 2 hasta 20 y que entre los asteriscos no existen espacios en blanco. 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 .print ( “ Valores válidos desde 2 hasta 20: ” ) .out. j <= totalFilas. } // Se realiza un salto de línea. System. j = 0 . Clase PrgCuadrado01 package dominioDeLaAplicacion . i <= totalFilas. public class PrgCuadrado01 { public static void main (String[] args) { int totalFilas = 0. i = 0. j++ ) { // Se muestra un asterisco. do { System.out. i++ ) { for ( j = 1 .print ( “*”) . System.print ( “ Valor de fila no válido… Reintente!. totalFilas = Lectura. 209 . } } while (totalFilas < 2 || totalFilas > 20 ) . import biblioteca.ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS Problema 32 Etapa 01 – Descripción del problema.out.println ( ) . if (totalFilas < 2 || totalFilas > 20 ) { System.* .out. i=2. i=4 e i=5). 210 . i=3. i=3. Los siguientes 2 problemas son una variación de este problema.println ( ). Los valores válidos de i coinciden con el número de filas que nuestra figura va ha tener. i=4 e i=5). Juan José Flores Cueto. 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 . por lo cual podemos afirmar que para cada valor de i. Pag. i++ ) { } 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 valores válidos para i son i=1. Cada vez que finaliza el for interno. el for interno se ejecuta 5 veces y mostrará en total 5 asteriscos en cada una de las filas). Para fila=5: 1ra fila ( i=1 ) 2da fila ( i=2 ) 3ra fila ( i=3 ) 4ta fila ( i=4 ) 5ta fila ( i=5 ) * * * * * * * * * * * * * * * * * * * * * * * * * for ( i = 1 . i <= totalFilas. 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. corresponde una fila de la figura. Analice sus respectivas soluciones y desarrolle sus propias observaciones. j++ ) { … } … } Para cada una de las filas (en el caso de totalFilas=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. Entonces. j <= totalFilas. 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. para i=1.Ing. Para nuestra explicación asumiremos que el valor de totalFilas=5.out. la sentencia System. i++ ) { for ( j = 1 . la cual puede variar desde 2 hasta 20. i=2. i <= totalFilas. Esta situación determina la existencia de la segunda sentencia for dentro de la primera sentencia for (for interno). System. System. Etapa 04 – Desarrollo de la codificación.out. } } } Pag.print ( j ) .out.out. i++ ) { for ( j = 1 .println ( “ Valor de fila no válido… Reintente!. totalFilas = Lectura. 211 . Asuma que el número de filas puede variar desde 2 hasta 9 y que entre los números no existen espacios en blanco.out.out.* . do { System. for ( i = 1 . i = 0. public class PrgCuadrado02 { public static void main (String[] args) { int totalFilas = 0. } } while (totalFilas < 2 || totalFilas > 9 ) . System.print ( “ Valores válidos desde 2 hasta 9: ” ) . Clase PrgCuadrado02 package dominioDeLaAplicacion . if (totalFilas < 2 || totalFilas > 9 ) { System.leerInt ( ) .println ( “ Ingresar el número de filas de la figura ” ) .println ( ) . } // Se realiza un salto de línea. j <= totalFilas. ” ) . j++ ) { // Se muestra el valor de la variable j. i <= totalFilas. import biblioteca. j = 0 .ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS Problema 33 Etapa 01 – Descripción del problema. Desarrollar la codificación de una solución que permita mostrar la siguiente figura: 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 Nota: En la figura mostrada el número de filas = 5. } } while (totalFilas < 2 || totalFilas > 9 ) .println ( “ Ingresar el número de filas de la figura ” ) . 212 . System. i++ ) { for ( j = 1 . for ( i = 1 . j = 0 . totalFilas = Lectura. j++ ) { // Se muestra el valor de la variable i.println ( “ Valor de fila no válido… Reintente!. j <= totalFilas.print ( “ Valores válidos desde 2 hasta 9: ” ) . Desarrollar la codificación de una solución que permita mostrar la siguiente figura: 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4 5 5 5 5 5 Nota: En la figura mostrada el número de filas = 5. do { System.leerInt ( ) . } } } Pag.println ( ) . Etapa 04 – Desarrollo de la codificación.out. System. Problema 34 Etapa 01 – Descripción del problema. ” ) .out. System. Asuma que el número de filas puede variar desde 2 hasta 9 y que entre los números no existen espacios en blanco. } // Se realiza un salto de línea.out. import biblioteca.out. Juan José Flores Cueto.out. i <= totalFilas. Clase PrgCuadrado03 package dominioDeLaAplicacion . public class PrgCuadrado03 { public static void main (String[] args) { int totalFilas = 0.* . i = 0.Ing. if (totalFilas < 2 || totalFilas > 9 ) { System.print ( i ) . 213 .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 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 5 4 3 2 1 5 4 3 2 1 5 4 3 2 1 5 4 3 2 1 5 4 3 2 1 5 5 5 5 5 4 4 4 4 4 3 3 3 3 3 2 2 2 2 2 1 1 1 1 1 Pag. ” ) . System. Asuma que el número de filas puede variar desde 2 hasta 20 y que entre los asteriscos no existen espacios en blanco.println ( “ Ingresar el número de filas de la figura ” ) . j++ ) { // Se muestra un asterisco.*. j = 0 .leerInt ( ) . for ( i = 1 . do { System.print ( “ Valores válidos desde 2 hasta 20: ” ) . } // Se realiza un salto de línea. Clase PrgTriangulo01 package dominioDeLaAplicacion.print ( “*”) . public class PrgTriangulo01 { public static void main(String[] args) { int totalFilas = 0. System. 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. if (totalFilas < 2 || totalFilas > 20 ) { System.println ( ) . i <= totalFilas. Juan José Flores Cueto. 214 . } } while (totalFilas < 2 || totalFilas > 20 ) .out. i++ ) { for ( j = 1 .out. Problema 35 Etapa 01 – Descripción del problema.Ing. i = 0. j <= i .out. } } } Pag. Etapa 04 – Desarrollo de la codificación.out. System.println ( “ Valor de fila no válido… Reintente!. totalFilas = Lectura. import biblioteca.out. for ( i = 1 . Esto se cumple ya que para i=1 el único valor válido para j sería j=1. Entonces. Y así sucesivamente hasta llegar a la última fila. i <= totalFilas. i++ ) { for ( j = 1 . j=2. pasar a la tercera fila. 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).println ( ).out. i=3. 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. pasar a la segunda fila. i <= totalFilas. j=3.Esto se cumple ya que para i=5. nos permite hacer un salto de línea. j++ ) { … } … } En la primera fila (i=1) se necesita mostrar un asterisco. Para fila=5: 1ra fila ( i=1 ) 2da fila ( i=2 ) 3ra fila ( i=3 ) 4ta fila ( i=4 ) 5ta fila ( i=5 ) * * * * * * * * * * * * * * * for ( i = 1 . la cual puede variar desde 2 hasta 20. j <= i . Finalizada la ejecución del for interno. por lo que el for interno Pag. i=2. Finalizada la ejecución del for interno. la sentencia System.println ( ). En la segunda fila (i=2) se necesita mostrar dos asterisco. i=4 e i=5). los valores válidos para i son i=1. j=4 y j=5. corresponde una fila de la figura.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. Esta situación determina la existencia de la segunda sentencia for dentro de la primera sentencia for (for interno). 215 . Para nuestra explicación asumiremos que el valor de totalFilas=5. Esto se cumple ya que para i=2 los valores válidos para j serían j=1 y j=2. En nuestro caso la última fila es 5 (i=5) y se necesita mostrar 5 asteriscos. nos permite hacer un salto de línea. i++ ) { } Ahora necesitamos mostrar un asterisco en la primera fila (i=1).out. Los valores válidos de i coinciden con el número de filas que nuestra figura va ha tener. Es decir. la sentencia System. por lo que el for interno se ejecutaría una sola vez y se mostraría solo un asterisco. por lo cual podemos afirmar que para cada valor de i. 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). Es decir. 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). Juan José Flores Cueto. Pag.Ing. Luego se hace un salto de linea y se finaliza la ejecución. Analice sus respectivas soluciones y desarrolle sus propias observaciones. 216 . leerInt ( ) .print ( j ) . totalFilas = Lectura. Etapa 04 – Desarrollo de la codificación. } } while (totalFilas < 2 || totalFilas > 9 ) . j <= i . i = 0.print ( “ Valores válidos desde 2 hasta 9: ” ) .out.out. System. Clase PrgTriangulo02 package dominioDeLaAplicacion. i <= totalFilas. if (totalFilas < 2 || totalFilas > 9 ) { System.println ( “ Valor de fila no válido… Reintente!.println ( “ Ingresar el número de filas de la figura ” ) . j = 0 . } } } Pag. i++ ) { for ( j = 1 .ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS Problema 36 Etapa 01 – Descripción del problema. System.*. import biblioteca. Asuma que el número de filas puede variar desde 2 hasta 9 y que entre los números no existen espacios en blanco. System. } // Se realiza un salto de línea.println ( ) . ” ) .out. for ( i = 1 . 217 . Desarrollar la codificación de una solución que permita mostrar la siguiente figura: 1 1 2 1 2 3 1 2 3 4 1 2 3 4 5 Nota: En la figura mostrada el número de filas = 5.out. public class PrgTriangulo02 { public static void main(String[] args) { int totalFilas = 0. do { System. j++ ) { // Se muestra el valor de la variable j.out. j = 0 . j <= i . Juan José Flores Cueto. do { System.leerInt ( ) . for ( i = 1 . } } while (totalFilas < 2 || totalFilas > 9 ) .println ( “ Valor de fila no válido… Reintente!. Problema 37 Etapa 01 – Descripción del problema.*. Asuma que el número de filas puede variar desde 2 hasta 9 y que entre los números no existen espacios en blanco.println ( ) . Etapa 04 – Desarrollo de la codificación.out.out. i <= totalFilas. i = 0.out.out. } // Se realiza un salto de línea. Desarrollar la codificación de una solución que permita mostrar la siguiente figura: 1 2 2 3 3 3 4 4 4 4 5 5 5 5 5 Nota: En la figura mostrada el número de filas = 5. j++ ) { // Se muestra el valor de la variable i. totalFilas = Lectura. 218 .out. System.println ( “ Ingresar el número de filas de la figura ” ) . if (totalFilas < 2 || totalFilas > 9 ) { System. } } } Pag.print ( i ) .print ( “ Valores válidos desde 2 hasta 9: ” ) .Ing. ” ) . public class PrgTriangulo03 { public static void main(String[] args) { int totalFilas = 0. Clase PrgTriangulo03 package dominioDeLaAplicacion. import biblioteca. System. System. i++ ) { for ( j = 1 . for ( i = totalFilas. } } while (totalFilas < 2 || totalFilas > 9 ) .. Desarrollar la codificación de una solución que permita mostrar la siguiente figura: 5 5 4 5 4 3 5 4 3 2 5 4 3 2 1 Nota: En la figura mostrada el número de filas = 5. j = 0 ..ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS Problema 38 Etapa 01 – Descripción del problema.println ( “ Ingresar el número de filas de la figura ” ) . Etapa 04 – Desarrollo de la codificación. i >= 1 . j >= i .out.*. i = 0. System. Asuma que el número de filas puede variar desde 2 hasta 9 y que entre los números no existen espacios en blanco. do { System. System. ” ) . Clase PrgTriangulo04 package dominioDeLaAplicacion. import biblioteca.print ( j ) .out.out. 219 . } } } Pag.out.leerInt ( ) . public class PrgTriangulo04 { public static void main(String[] args) { int totalFilas = 0. j .println ( “ Valor de fila no válido… Reintente!.print ( “ Valores válidos desde 2 hasta 9: ” ) . System.) { // Se muestra el valor de la variable j.) { for ( j = totalFilas. i . totalFilas = Lectura.out. } // Se realiza un salto de línea.println ( ) . if (totalFilas < 2 || totalFilas > 9 ) { System. Ing. if (totalFilas < 2 || totalFilas > 9 ) { System. ” ) . Etapa 04 – Desarrollo de la codificación. System. 220 .out..leerInt ( ) . Juan José Flores Cueto.) { // Se muestra el valor de la variable i.out. } // Se realiza un salto de línea. System.print ( i ) . totalFilas = Lectura. i = 0. System. } } } Pag.out. for ( i = totalFilas. Asuma que el número de filas puede variar desde 2 hasta 9 y que entre los números no existen espacios en blanco. i >= 1 . } } while (totalFilas < 2 || totalFilas > 9 ) ..) { for ( j = totalFilas.*. Clase PrgTriangulo05 package dominioDeLaAplicacion. j = 0 . j >= i .print ( “ Valores válidos desde 2 hasta 9: ” ) . import biblioteca.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 3 3 3 2 2 2 2 1 1 1 1 1 Nota: En la figura mostrada el número de filas = 5.out. j .println ( “ Ingresar el número de filas de la figura ” ) . public class PrgTriangulo05 { public static void main(String[] args) { int totalFilas = 0.out.println ( ) . Problema 39 Etapa 01 – Descripción del problema. i . do { System. 221 . i++ ) { for ( j = 1 .print ( k ) . Clase PrgTriangulo06 package dominioDeLaAplicacion. totalFilas = Lectura. j++ ) { if ( k == totalFilas) { k=1. } System.*.leerInt ( ) . } } } Pag. } else { k ++ . Asuma que el número de filas puede variar desde 2 hasta 9 y que entre los números no existen espacios en blanco. } } while (totalFilas < 2 || totalFilas > 9 ) . j = 0. j <= i .out. i = 0. System. for ( i = 1 .out. i <= totalFilas.ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS Problema 40 Etapa 01 – Descripción del problema.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 4 5 1 2 3 4 5 1 2 3 4 5 Nota: En la figura mostrada el número de filas = 5. } System. public class PrgTriangulo06 { public static void main(String[] args) { int totalFilas = 0. import biblioteca.out. Etapa 04 – Desarrollo de la codificación.out. if (totalFilas < 2 || totalFilas > 9 ) { System. ” ) .out.println ( “ Valor de fila no válido… Reintente!.println ( “ Ingresar el número de filas de la figura ” ) . do { System.println ( ) . k=0 . out. j++ ) { if ( k == 9 ) { k=0. Asuma que el número de filas puede variar desde 2 hasta 20 y que entre los números no existen espacios en blanco. } System.print ( k ) . do { System.out. } } while (totalFilas < 2 || totalFilas > 20 ) . System.print ( “ Valores válidos desde 2 hasta 20: ” ) . Etapa 04 – Desarrollo de la codificación. ” ) . j <= i . for ( i = 1 . Clase PrgTriangulo07 package dominioDeLaAplicacion.out. i++ ) { for ( j = 1 .leerInt ( ) .out.Ing. Juan José Flores Cueto. } System. 222 .println ( “ Valor de fila no válido… Reintente!. import biblioteca. j = 0 .println ( ) .out. Desarrollar la codificación de una solución que permita mostrar la siguiente figura: 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 Nota: En la figura mostrada el número de filas = 5. public class PrgTriangulo07 { public static void main(String[] args) { int totalFilas = 0. } else { k ++ . Problema 41 Etapa 01 – Descripción del problema. i <= totalFilas.println ( “ Ingresar el número de filas de la figura ” ) . totalFilas = Lectura.*. i = 0. if (totalFilas < 2 || totalFilas > 20 ) { System. } } } Pag. *.out. Clase PrgTriangulo08 package dominioDeLaAplicacion. i = 0.ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS Problema 42 Etapa 01 – Descripción del problema. } System. ” ) . k=totalFilas+1. } else { k--. k=0 . System. i <= totalFilas. public class PrgTriangulo08 { public static void main(String[] args) { int totalFilas = 0.leerInt ( ) .out. Asuma que el número de filas puede variar desde 2 hasta 9 y que entre los números no existen espacios en blanco. j++ ) { if ( k == 1 ) { k = totalFilas .out. i++ ) { for ( j = 1 . } System. totalFilas = Lectura. Etapa 04 – Desarrollo de la codificación.println ( ) .print ( k ) .println ( “ Valor de fila no válido… Reintente!. } } } Pag. j = 0.out.out. for ( i = 1 . if (totalFilas < 2 || totalFilas > 9 ) { System.println ( “ Ingresar el número de filas de la figura ” ) . 223 . } } while (totalFilas < 2 || totalFilas > 9 ) . import biblioteca. do { System. j <= i .print ( “ Valores válidos desde 2 hasta 9: ” ) . Desarrollar la codificación de una solución que permita mostrar la siguiente figura: 5 4 3 2 1 5 4 3 2 1 5 4 3 2 1 Nota: En la figura mostrada el número de filas = 5. 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. Juan José Flores Cueto. Los últimos siete problemas son una variación del problema 35. 224 . sino lo consigue analice la siguiente solución. totalFilas = Lectura.out. i ++ ) { for ( j = 1 . j ++ ) { System. Pag. 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. } } } Intente mejorar la solución anterior (en lugar de usar tres sentencias for utilice solo dos).print ( “ ” ) . j = 0 . if (totalFilas < 2 || totalFilas > 20 ) { System.out.out.ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS Problema 43 Etapa 01 – Descripción del problema. } System. do { System. ” ) .print ( “ Valores válidos desde 2 hasta 20: ” ) .leerInt ( ) .print ( “*” ) .println ( “ Valor de fila no válido… Reintente!. i = 0.out. 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. j <= totalFilas .out. i <= totalFilas. Etapa 04 – Desarrollo de la codificación. } } while (totalFilas < 2 || totalFilas > 20 ) . j ++ ) { System. import biblioteca. for ( i = 1 .println ( ) . 225 . } for ( j = i .println ( “ Ingresar el número de filas de la figura ” ) .* . System. Clase PrgTriangulo09 package dominioDeLaAplicacion . j < i .out. leerInt ( ) .out. i ++ ) { for ( j = 1 .println ( ) .out.println ( “ Valor de fila no válido… Reintente!. totalFilas = Lectura. Juan José Flores Cueto.println ( “ Ingresar el número de filas de la figura ” ) . ” ) . } } while (totalFilas < 2 || totalFilas > 20 ) .* .out.print ( “ Valores válidos desde 2 hasta 20: ” ) . import biblioteca. if (totalFilas < 2 || totalFilas > 20 ) { System. j = 0 .out. do { System.Ing. i <= totalFilas. j < = totalFilas .out.out. } } } Pag.print ( “*” ) . public class PrgTriangulo09Mejorado { public static void main (String[] args) { int totalFilas = 0.print ( “ ” ) . 226 . } } System. System. } else { System. for ( i = 1 . j ++ ) { if ( i < = j ) { System. i = 0. Clase PrgTriangulo09Mejorado package dominioDeLaAplicacion . print ( “ Valores válidos desde 2 hasta 20: ” ) . j = 0 . } } while (totalFilas < 2 || totalFilas > 20 ) . i = 0. import biblioteca.* . totalFilas = Lectura. 227 .out.out. } } } Pag.ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS Problema 44 Etapa 01 – Descripción del problema.out.println ( ) . } } System.print ( “ ” ) .leerInt ( ) . En la figura el lado = 5. Clase PrgTriangulo10 package dominioDeLaAplicacion .Desarrollo de la Codificación.) { if ( i < j ) { System. i <= totalFilas.print ( “*” ) . public class PrgTriangulo10 { public static void main (String[] args) { int totalFilas = 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.out. i ++ ) { for ( j = totalFilas .println ( “ Ingresar el número de filas de la figura ” ) .. do { System.out. System.println ( “ Valor de fila no válido… Reintente!. Etapa 04 . if (totalFilas < 2 || totalFilas > 20 ) { System. j > = 1 . } else { System. for ( i = 1 . j . No existen espacios en blanco entre los asteriscos. Dicho dato debe tener un valor entre 2 y 20.out. ” ) . j++ ) { if ( j <= totalFilas .i ) { System. i <= totalFilas. i ++ ) { for ( j = 1 . for ( i = 1 .print ( “ ” ) . do { System. j < = totalFilas . j = 0 . public class PrgTriangulo10Mejorado { public static void main (String[] args) { int totalFilas = 0. Pag.println ( “ Ingresar el número de filas de la figura ” ) .out. } } } Es importante indicar que un mismo problema puede ser solucionado de diferentes maneras. } } while (totalFilas < 2 || totalFilas > 20 ) .out.out.out.leerInt ( ) .print ( “*” ) .out. } else { System.println ( ) . Intente mejorar la solución anterior de tal forma que cambie el for interno por el siguiente for: for ( j = 1 . 228 .print ( “ Valor de fila no válido… Reintente!. totalFilas = Lectura. j < = totalFilas . ” ) .print ( “ Valores válidos desde 2 hasta 20: ” ) . } } System. if (totalFilas < 2 || totalFilas > 20 ) { System.out.Ing. Juan José Flores Cueto. import biblioteca. System. i = 0. j++ ) … … … } Sino lo consigue analice la siguiente solución: Clase PrgTriangulo10Mejorado package dominioDeLaAplicacion .* . i = 0. j < totalFilas . ” ) . do { System. } // Se realiza un salto de linea. j <= i .out. i++ ) { for ( j = i .out. j = 0 . Asuma que el número de filas puede variar desde 2 hasta 20 y que entre los asteriscos existe un espacio en blanco. } for ( j = 1 .println ( “ Valor de fila no válido… Reintente!. } } while (totalFilas < 2 || totalFilas > 20 ) .out.print ( “ ”) .println ( “ Ingresar el número de filas de la figura ” ) . if (totalFilas < 2 || totalFilas > 20 ) { System. 229 . j++ ) { // Se muestra un espacio en blanco. System. 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. System.leerInt() . } } } Pag.out. for ( i = 1 .out. public class PrgTriangulo11 { public static void main(String[] args) { int totalFilas = 0.*.println ( ) .print ( “ Valores válidos desde 2 hasta 20: ” ) . totalFilas = Lectura. System.print ( “* ”) . Clase PrgTriangulo11 package dominioDeLaAplicacion.ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS Problema 45 Etapa 01 – Descripción del problema. j++ ) { // Se muestra un asterisco y un espacio en blanco. System. Etapa 04 – Desarrollo de la codificación. i <= totalFilas .out. 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. 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. i++ ) { } Es necesario entonces mostrar un asterisco en la primera fila (i=1). Cada vez que se ejecuta el primer for debemos asegurarnos de mostrar los asteriscos necesarios.* - * * * * . Juan José Flores Cueto.* . Para nuestra explicación asumiremos que el valor de totalFilas=5..* * .Ing.. Pero si observamos bien la figura tenemos que tener en cuenta la ubicación de los asteriscos en cada fila. i <= totalFilas .* . un asterisco.* * . Es necesario encontrar algunos parámetros para establecer una constante matemática (una relación matemática) que nos permita mostrar adecuadamente la figura.* Nota: Se determina que existe una relación en la parte donde están los espacios en blanco..1 espacio en blanco y luego se muestra un espacio en blanco menos cada vez que se muestra una nueva fila.* . En la primera fila (i=1) se muestran fila . Pag.... Para fila=5: 1ra fila ( i=1 ) 2da fila ( i=2 ) 3ra fila ( i=3 ) 4ta fila ( i=4 ) 5ta fila ( i=5 ) * * * * * * * * * * * * * * * for ( i = 1 .* .* . 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): * * - * * * * - * * * * . la cual puede variar desde 2 hasta 20. 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). 230 . Ahora. 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: Los guiones representan espacios en blanco.* . hasta llegar a la última fila donde no se muestra ningún espacio en blanco. Entre un guión y un asterisco no hay ningún símbolo. 231 .* * .ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS En la parte que tiene los asteriscos y espacios en blanco entre los asteriscos.* * . En la primera fila (i=1) se muestran un asterisco y un espacio en blanco (una pareja “*-”). j++ ) { System. } Intente mejorar la solución anterior (en lugar de usar tres sentencias for utilice solo dos). Una pareja (formada por un asterisco y un espacio en blanco)..* .* - * * * * * - * ..out. j < totalFilas ...- for ( j = 1 .print ( “* ”) .print ( “ ”) .. incluiremos un espacio en blanco al final de cada una de las filas de la figura: .* - for ( j = 1 . Para fila=5: 1ra fila ( i=1 ) 2da fila ( i=2 ) 3ra fila ( i=3 ) 4ta fila ( i=4 ) 5ta fila ( i=5 ) .* . j <= i . sino lo consigue analice la siguiente solución. } 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 ) 3ra fila ( i=3 ) 4ta fila ( i=4 ) 5ta fila ( i=5 ) * * * .out....* * .* * .* - * * * * * - * .* .* - Nota: Se determina que existe una relación en la parte donde están los asteriscos y espacios en blanco entre los asteriscos. Pag.. por lo cual determinamos la necesidad de emplear dos for internos.. El primer for interno nos permite mostrar los espacios en blanco que están antes del primer asterisco de cada una de las filas. en la segunda fila 2 parejas y así sucesivamente hasta llegar a la última fila donde se muestran cinco parejas.. Para esto. Al analizar la figura determinamos que hay dos partes las cuales son independientes. es necesario buscar una relación matemática. j++ ) { System. La variable i va ha representar cada una de las filas.leerInt() .. j++ ) { if ( ( j >= totalFilas – cont ) && ( j <= totalFilas + cont ) ) { // Se muestra unasterisco y un espacio en blanco.println ( ) . i++ ) { for ( j = 1 .out. Clase PrgTriangulo11Mejorado package dominioDeLaAplicacion. System. mientras que la variable j va ha representar cada una de las columnas. } } while (totalFilas < 2 || totalFilas > 20 ) . totalFilas = Lectura. public class PrgTriangulo11Mejorado { public static void main(String[] args) { int totalFilas = 0.print ( “ ”) . i = 0.print ( “ Valores válidos desde 2 hasta 20: ” ) . 232 .* Nota: Los guiones representan espacios en blanco. j = 0. ” ) . System. import biblioteca. do { System. System.out.Ing.* . } else { // Se muestra un espacio en blanco.println ( “ Ingresar el número de filas de la figura ” ) . j ++ . i <= totalFilas . } } } 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). Entre un guión y un asterisco no hay ningún símbolo.out. System.out.out.print ( “* ”) .*. Juan José Flores Cueto. Pag.println ( “ Valor de fila no válido… Reintente!. j < totalFilas * 2 . if (totalFilas < 2 || totalFilas > 20 ) { System. for ( i = 1 .out. * * - * * * * - * * * * * - * * . } } cont ++ . cont = 0 . out.print ( “* ”) .i ) { // Se muestra un asterisco y un espacio en blanco. if ( ( j >= totalFilas – cont ) && ( j <= totalFilas + cont ) ) { // Se muestra un asterisco y un espacio en blanco.out. } } System. System.out. j++ ) { if ( j > totalFilas . j <= totalFilas . i++ ) { for ( j = 1 .print ( “ ”) . i <= totalFilas .* - for ( i = 1 . j ++ .* * .print ( “* ”) . En el for interno hay una sentencia if que nos permite determinar el símbolo que se va ha mostrar. j++ ) { if ( j <= totalFilas . Analice nuevamente el siguiente gráfico: * * - * * * * - * * * * * - * . System. nuevamente intente mejorar la solución. Utilice el primer planteamiento desarrollado.out. 233 .out. } } System. System. System. } else { // Se muestra un asterisco y un espacio en blanco. } También: for ( i = 1 . } else { // Se muestra un espacio en blanco.println ( ) . j <= totalFilas . } Pag.println ( ) .print ( “ ”) . } Ahora. i <= totalFilas . } else { // Se muestra un espacio en blanco.i ) { // Se muestra un espacio en blanco. 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).out. System.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). i++ ) { for ( j = 1 .print ( “* ”) .out. System.out.print ( “ ”) . j < totalFilas * 2 .out.1.out. j++ ) { if ( ( j >= totalFilas – cont ) && ( j <= totalFilas + cont ) ) { // Se muestra un asterisco. } } cont ++ .println ( ) . Nota: Observe que en la primera fila se desea mostrar un asterisco y en las siguientes filas 3. 234 . Adicionalmente desarrolle las siguientes figuras y sus posibles variaciones: * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Nota: Recuerde que los guiones representan espacios en blanco. System. 5. i++ ) { for ( j = 1 .out. Con la finalidad de mejorar sus capacidades lógicas sugiero que desarrolle todas las variaciones posibles o que se pueda imaginar del presente problema. Juan José Flores Cueto. 7… y así suceivamente (no hay espacios en blanco entre los asteriscos).Ing. i <= totalFilas .print ( “ ”) . Relación: el número de asteriscos a mostrar en cada fila esta dado por la fórmula: totalFilas * 2 .print ( “*”) . // Se muestra la última parte de la solución: for ( i = 1 . } else { // Se muestra un espacio en blanco. System. } Pag. System. 235 . System.out.out. El lado del rombo debe tener un valor entre 2 y 10.println ( “ Programa que realiza un rombo de *s con la estructura \“WHILE\” \n” ) .print ( “ Ingrese el lado del rombo entre [2. 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).Desarrollo de la Codificación. i = 1. Ingrese entero entre [2. if (totalFilas < 2 || totalFilas > 10 ) { System. System.out.ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS Problema 46 Etapa 01 – Descripción del problema. j = 1 . import biblioteca. diagonal = totalFilas * 2 . public class PrgRombo01 { public static void main (String args[]) { int totalFilas = 0.leerInt ( ).10]: ” ) . Etapa 04 .* . diagonal = 0. System. } } while (totalFilas < 2 || totalFilas > 10 ) .println ( “\nValor fuera de rango.println ( ) . do { totalFilas = Lectura. Clase PrgRombo01 package dominioDeLaAplicacion . cont = 0.10]: ” ) . Pag.out. En la figura el lado = 4.1 . i ++ . Pag.println ( ) . } j ++ . 236 . Intente resolverlo utilizando la sentencia for de Java.out. Juan José Flores Cueto.. while ( j <= diagonal ) { if ( j < totalFilas . } if ( i < totalFilas ) cont ++ .out.Ing. else { // Se muestra un asterisco y un espacio en blanco. while ( i <= diagonal ) { j=1. else cont .print ( “ ” ) .cont || j > totalFilas + cont ) // Se muestra un espacio en blanco..print ( “* ” ) .out. System. System. System. } } } Analice la solución del problema y anote sus conclusiones. j ++ . out.9]: ” ) . i = 1.Desarrollo de la Codificación. } } while ( num < 2 || num > 9 ) . System. cont = 0. do { num = Lectura.out. System.println ( “\nValor fuera de rango. Clase PrgRombo02 package dominioDeLaAplicacion . if ( num < 2 || num > 9 ) { System. Etapa 04 . j = 1 . n = 0. System. Ingresar un valor entero desde 2 hasta 9 que representa el número de elementos de la fila central. Ingrese enteros entre [2.leerInt ( ) .println ( ) .println ( “ Programa que realiza un rombo de números ” ) .print ( “ Ingrese el número máximo de la figura entre [2. 237 . public class PrgRombo02 { public static void main (String args[]) { int num = 0.9]: ” ) .ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS Problema 47 Etapa 01 – Descripción del problema. En la figura el dato = 4.out.* . import biblioteca. diagonal = 2 * num .1 . Desarrollar la codificación de una solución que permita mostrar la siguiente figura: 1 2 3 4 3 2 1 4 3 2 3 4 3 2 3 4 Nota: la figura mostrada es un rombo de número. diagonal = 0..out.. Pag. Tenga en cuenta que se han cambiado los nombres de las variables utilizadas en las soluciones anteriores. i <= diagonal . j <= diagonal .out.cont && j <= num + cont ) { // Se muestra el contenido de la variable n y un espacio en blanco. System.out. Pag. Juan José Flores Cueto. } } } Modifique está solución utilizando la estructura de repetición while en lugar de la estructura for. Con la finalidad de mejorar sus capacidades lógicas sugiero que desarrolle todas las variaciones posibles o que se pueda imaginar del presente problema. } if ( i < num ) cont ++ . System. j ++ . Adicionalmente desarrolle la siguiente figura y sus posibles variaciones: 1 2 4 7 2 7 2 5 7 3 8 3 6 8 4 9 4 5 9 5 1 3 6 1 6 A continuación se presentan diversas soluciones que permitirán contribuir con el desarrollo de sus capacidades lógicas. System. j ++ ) { if ( j >= num .print ( n + “ ” ) .. else cont .Ing.. 238 .println ( ) . for ( i = 1 . Analice cada una de las soluciones en forma detallada. for ( j = 1 . i ++ ) { n = cont + 1 .print ( “ ” ) .out. } else // Se muestra un espacio en blanco. public class PrgFiguraA { public static void main(String args[]) { int lado = 0. do { lado = Lectura.println ( ) . System.out.print ( “ ” ) . Etapa 04 . Ingrese entero entre [2.* . } } System.out. fil <= lado . System.Desarrollo de la Codificación. } } while ( lado < 2 || lado > 15 ) . 239 . Clase PrgFiguraA package dominioDeLaAplicacion .15]: ” ) . col ++ ) { if ( ( 1 < fil && fil < lado ) && ( 1 < col && col < lado ) ) { // Se muestran dos espacios en blanco.out. for( int fil = 1 .out.ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS Problema 48 Etapa 01 – Descripción del problema. } } } Pag.15]: ” ) .out.print ( “* ” ) . col <= lado . import biblioteca. System. if ( lado < 2 || lado > 15 ) { System.println ( ) . System.out.out. } else { // Se muestra un asterisco y un espacio en blanco.print ( “ Ingrese lado del cuadrado entre [2. System.println ( “ Programa que realiza un cuadrado hueco\n ” ) . fil ++ ) { for( int col = 1 .println ( “\nValor fuera de rango.leerInt ( ). 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. Asuma que el número de filas puede variar desde 2 hasta 15. if ( lado < 2 || lado > 20 ) { System. Problema 49 Etapa 01 – Descripción del problema.out. Clase PrgFiguraB package dominioDeLaAplicacion . // Dos espacios. Etapa 04 . fil <= lado .println ( ) . else System.out.* . col ++ ) { if ( ( col == 1 ) || ( fil == col ) || ( fil == lado ) ) System. import biblioteca. En la figura el lado = 5. System.out.print ( “ ” ) .out. Dicho dato debe tener un valor entre 2 y 20.println ( ) . // Un asterisco y un espacio. 240 .20]: ” ) .leerInt ( ) . fil ++ ) { for ( int col = 1 . public class PrgFiguraB { public static void main(String args[]) { int lado = 0 .out.Ing.println ( “\nValor fuera de rango.println ( “ Programa que realiza un triángulo de asteriscos: ” ) .Desarrollo de la Codificación. for ( int fil = 1 .out. 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. } System. do { lado = Lectura. col <= fil . } } } Pag.print ( “ Ingrese el lado del triángulo entre [2.out. System. Juan José Flores Cueto.20]: ” ) . Ingrese entero entre [2. System.print ( “* ” ) . } } while ( lado < 2 || lado > 20 ) . 25]: ” ) .25]: ” ) . col++ ) { if ( col == medio + fil || col == medio .* . En la figura la base = 9.out.ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS Problema 50 Etapa 01 – Descripción del problema.out. import biblioteca. System. System. public class PrgFiguraC { public static void main(String args[]) { int base = 0.fil || fil + 1 == medio ) System.println ( “ Programa que realiza un triángulo hueco de base impar \n ” ) .println ( ) .println ( ) . La base debe tener un valor impar entre 3 y 25. Etapa 04 .leerInt ( ) . do { base = Lectura.Desarrollo de la Codificación. 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.out. medio = base / 2 + 1 .out. for ( int fil = 0 . 241 . Clase PrgFiguraC package dominioDeLaAplicacion . } } while ( base < 3 || base > 25 || base % 2 == 0 ) .print ( “* ” ) .out.print ( “ ” ) . medio = 0 . Ingrese impar entre [3. else System. fil < medio .out.out. } } } Pag. // Un asterisco y un espacio. System. } System. if ( base < 3 || base > 25 || base % 2 == 0 ) { System.print ( “ Ingrese la base impar del triángulo entre [3. col <= base . // Dos espacios. fil++ ) { for ( int col = 1 .println ( “\nValor fuera de rango. out.out. fil <= lado . import biblioteca.Desarrollo de la Codificación.* .print ( “ Ingrese el lado impar de la ventana entre [5. En la figura el lado = 5.println ( ) . } } } Pag.println ( “\nValor fuera de rango.println ( ) . Ingrese entero impar entre [5.out. 242 . System. } System.print ( “ ” ) .out.out. col <= lado . if ( lado < 5 || lado > 15 || lado % 2 ==0 ) { System.out.15]: ” ) . do { lado = Lectura. fil ++ ) { for ( int col = 1 .15]: ” ) . System. Etapa 04 . 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. col ++ ) { if ( fil == 1 || fil == lado || fil == lado/2+1 || col == 1 || col == lado || col == lado / 2+1) System.print ( “* ” ) .out. Juan José Flores Cueto.Ing. Problema 51 Etapa 01 – Descripción del problema. public class PrgFiguraD { public static void main ( String args[] ) { int lado = 0 . Clase PrgFiguraD package dominioDeLaAplicacion . else System. System. } } while ( lado < 5 || lado > 15 || lado % 2 == 0 ) .leerInt ( ) . for ( int fil = 1 .println ( “ Programa que realiza una ventana \n” ) . 15]: ” ) . 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. System.print ( “ sus diagonales \n ” ) .out. mostrando ” ) .out.println ( ) . Clase PrgFiguraE package dominioDeLaAplicacion . for ( int fil = 1 .println ( “ Programa que realiza un cuadrado de asteriscos. Etapa 04 . col <= lado . import biblioteca. col ++ ) { if ( fil == 1 || fil == lado || fil == col || col == 1 || col == lado || col == (lado –fil +1) ) System.out.out. En la figura el lado = 5.print ( “ Ingrese el lado impar del cuadrado entre[5.out. } } while ( lado < 5 || lado > 15 || lado % 2 == 0 ) . fil ++ ) { for ( int col = 1 .print ( “* ” ) . if ( lado < 5 || lado > 15 || lado % 2 == 0 ) { System.Desarrollo de la Codificación.println ( ) .* .leerInt ( ) .println ( “\nValor fuera de rango. System. else System. } System.ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS Problema 52 Etapa 01 – Descripción del problema. System.print ( “ ” ) . System. 243 .out.15]: ” ) . fil <= lado . Ingrese impar entre [5.out. public class PrgFiguraE { public static void main (String args[]) { int lado = 0 .out. } } } Pag. do { lado = Lectura. } System.prinlnt ( “\nValor fuera de rango. Juan José Flores Cueto.out.out.leerInt ( ) . En la figura el lado = 4. do { alto = Lectura. fil ++ ) { for ( int col = 1 .println ( ) .Ing.print ( “* ” ) .print ( “ ” ) .out.Ingrese un número par entre [4.out. } } while ( ( alto < 4 ) || ( alto > 18 ) || ( alto % 2 == 0 ) ) . if ( ( alto < 4 ) || ( alto > 18 ) || ( alto % 2 == 0 ) ) { System. } } } Pag. Etapa 04 . 244 .print ( “* ” ) . import biblioteca.out.out.println ( ) .print ( “ Ingrese el alto (número par) de la figura entre [4. fil <= alto . System. col ++ ) { if ( fil <= ( alto / 2 ) ) if ( col == 1 || col == alto ) System.out. for ( int fil = 1 .println ( “ Programa que realiza una figura similar a la letra U \n ” ) . 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. col <= alto . else System.18]: ” ) .Desarrollo de la Codificación. Clase PrgFiguraF package dominioDeLaAplicacion .18]: ” ) . else System. Problema 53 Etapa 01 – Descripción del problema. System.out. public class PrgFiguraF { public static void main (String args[]) { int alto = 0 . out. } System.print ( “* ” ) .leerInt ( ) . mayor = 0.out. Etapa 04 . mayor = (2 * lado ) + 1 .out.out.fil < col ) System.15]: ” ) . System.println ( “ Programa que realiza dos triángulos de asteriscos ”). 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. fil ++ ) { col = 1 . col = 0 . En la figura el lado = 5.* .out.println ( ) .out. for ( int fil = 1 .ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS Problema 54 Etapa 01 – Descripción del problema. import biblioteca.out.Desarrollo de la Codificación. System.15]: ” ) . 245 . System. if ( lado < 2 || lado > 15 ) { System.out. } } } Pag. System.println ( “\nValor fuera de rango.print ( “ Ingrese el lado del triángulo entre [2. } } while ( lado < 2 || lado > 15 ) . while ( col <= mayor ) { if ( col <= fil || mayor .println ( ) . public class PrgFiguraG { public static void main (String args[]) { int lado = 0. col ++ . fil <= lado . do { lado = Lectura.print ( “ frente a frente a sus hipotenusas \n ” ) . else System. Ingrese entero entre [2.print ( “ ” ) . Clase PrgFiguraG package dominioDeLaAplicacion . public class PrgFiguraH { public static void main (String args[]) { int base = 0. for ( int fil = 1 . if ( base < 2 || base > 15 ) { System.15]: ” ) .out.out.println ( “\nValor fuera de rango.Ing. while ( col <= mayor ) { if ( (( base-fil ) < col && col <= base) || (( base+1) < col && col <= base+1+fil ) ) System. import biblioteca. Problema 55 Etapa 01 – Descripción del problema. Etapa 04 . 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. Juan José Flores Cueto. mayor = 0. System. } } } Pag.leerInt ( ) .* . System. ” ) .out.print ( ‘ ’ ) . } System. col = 0.15]: ” ) .println ( ) .out.Desarrollo de la Codificación. fil <= base . 246 .out.print ( “ Ingrese la base del triángulo entre [2. Ingrese entero entre [2.out.print ( “ frente a frente a sus catetos \n ” ) . else System. System. col ++ . do { base = Lectura. System.out. } } while ( base < 2 || base > 15 ) . En la figura el lado = 5. mayor = ( 2 * base ) + 1 .print ( ‘*’ ) .println ( “ Programa que realiza dos triángulos de asteriscos. fil ++ ) { col = 1 .out.println ( ) . Clase PrgFiguraH package dominioDeLaAplicacion . out. do { alto = Lectura.out. } } } while ( ! ( alto >1 && alto < base ) ) .Desarrollo de la Codificación. System. System.println ( “ Para generar el rectángulo hueco en pantalla la base ” ) . alto = 0. System.out.print ( “ a base [“ + base + ”]: ” ) .print ( “ Ingrese el alto del rectángulo. Pag. public class PrgFiguraI { public static void main (String args[]) { int base = 0.out.ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS Problema 56 Etapa 01 – Descripción del problema.println ( “\nValor fuera de rango. System.out.Debe ser menor a la base [“ + base + ”]: ” ) . 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.leerInt ( ) . } else { System. System.. if ( alto < 1 || alto >= base ) { if ( alto == base ) { System.out.leerInt ( ) . import biblioteca.out.print ( “\nEs un cuadrado.. Etapa 04 . do { base = Lectura. Clase PrgfiguraI package dominioDeLaAplicacion . } } while ( base < 2 ) . Ingrese entero mayor a 1 y menor ” ) . System.println ( “ Programa que genera un rectángulo hueco de base > alto \n ” ) . En la figura la base=10 y altura=5. System.print ( “ Ingrese la base del rectángulo: ” ) .out. Ingrese entero mayor a 1 y ” ) .out.print ( “\nValor fuera de rango. Ingrese entero mayor a 2: ” ) .print ( “ debe ser >2 y el alto>1 \n ” ) . if ( base < 2 ) { System. La base deberá ser mayor que la altura.* .print ( “ menor a base [“ + base + ”]: ” ) .out. 247 . Ing. Juan José Flores Cueto. System.out.println ( ) ; for ( int fil = 1 ; fil <= alto ; fil ++ ) { for ( int col = 1 ; col <= base ; col ++ ) { if ( fil == 1 || fil == alto || col == 1 || col == base ) System.out.print ( “* ” ) ; else System.out.print ( “ ” ) ; } System.out.println ( “ ” ) ; } } } Pag. 248 ESTRUCTURAS FUNDAMENTALES PARA LA SOLUCIÓN DE PROBLEMAS Problema 57 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 7 6 4 - 2 0 2 - 8 - 7 3 1 - 3 - 6 - 0 - 5 - 9 - 4 - 2 - 9 - 8 - 4 5 - 5 - 3 - 1 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 Clases Básicas Incorporadas en el Lenguaje de Programación Java Capítulo 3 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 260 . el método principal que tiene como función iniciar la ejecución de una aplicación desarrollada en Java. es decir. contiene una gran variedad de clases. Los algoritmos son desarrollados dentro de los métodos. El lenguaje de programación Java contiene diversas clases preprogramadas. Pag. que tienen diferentes funciones y están agrupadas por medio de paquetes. • Estructuras lógicas de repetición. Juan José Flores Cueto.Ing. • Estructuras lógicas de decisión. con métodos y atributos. Es decir. TAMBIÉN: • Clases incorporadas en el lenguaje de programación utilizado. • Instrucciones de bifucación. ALMACENADOS EN: • Estructuras de datos tipo variables. todo programa en Java está contenido en uno o mas métodos. siendo el método main( ). LISTA DE PASOS DESCRIPCIÓN DE DATOS SENTENCIAS DECLARACIÓN Y DEFINICIÓN DE DATOS SE DESARROLLAN UTILIZANDO: • Estructuras lógicas de secuencia. agrupadas en el paquete java. 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). Una clase es una abstracción y no referencia a ningún objeto en particular. Es importante mencionar que utilizando las clases preprogramadas de Java se puede ahorrar mucho tiempo y esfuerzo de programación. Un paquete permiten organizar las clases. 2 Paquete: Conjunto de clases similares. 261 . El mundo real se modela mediante clases. trata sobre las clases básicas incorporadas en el lenguaje de 1 programación Java.lang.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA El presente capítulo. Una clase es una implantación de un “tipo de objeto”. construyendo fácilmente aplicaciones profesionales. Clase: Colección de objetos del mismo tipo. Un paquete contiene clases que tienen funciones similares. 2 1 Pag. 262 . Juan José Flores Cueto. Pag.Ing. CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA EL PAQUETE DEL LENGUAJE JAVA El paquete del lenguaje Java.lang contiene clases que encapsulan los tipos primitivos de datos.* . El paquete Java. real o abstracta. Un objeto de software es cualquier cosa. El paquete java. una clase 4 que proporciona los objetos para manipular la entrada y la salida estándar.lang. una clase que proporciona métodos correpondientes a las funciones matemáticas. está automáticamente importado para todos los programas. Los métodos especifican la forma en que se controlan los datos de un objeto y es donde se define el comportamiento del mismo. 263 . Métodos: Desarrollo de algoritmos. 5 Pag. por lo que la siguiente sentencia no será necesaria: import java.lang. clases para 5 manipular cadenas de caracteres. acerca del cual almacenamos datos y los métodos que controlan dichos datos. 4 Objetos: Modelos de entes del mundo.lang debido a su importancia no requiere ser importado por las aplicaciones para usar las clases que contiene. es decir. En palabras sencillas. es uno de los paquetes más 3 importantes de la API de Java. 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. Entre las clases más importantes están las siguientes: Boolean Byte Character Class ClassLoader Compiler Double Float Integer Long Math Number Object Package Process Runtime Short String StringBuffer System Thread Trowable 3 API: Aplication Program Interface. conocido también como java. en los métodos se desarrollan o codifican los algoritmos. etc. y contiene las clases que constituyen el corazón del lenguaje de programación Java. En su lugar. 264 . Long. La nueva clase se llama Clase Derivada (o subclase) y la clase original se llama Clase Base (o superclase). Short. La Herencia es uno de los conceptos más importantes de la Programación Orientada a Objetos (POO). 3. Juan José Flores Cueto. Character. Integer. Float. • • • • • • • • Boolean. 7 6 Clase Abstracta: Clase tratada como SuperClase. se debe derivar una nueva clase a partir de la clase abstracta. Entre las clases a tratar en el presente capítulo se tienen: 1. Cada una de estas clases (consideradas subclases ). Clase que proporciona los objetos necesarios para manipular y tratar cadenas de caracteres.Ing. codificar los métodos que son declarados como abstractos en la clase abstracta y crear o instanciar objetos a partir de la clase derivada. Una Clase Abstracta es un tipo de clase de la cual no se pueden crear o instanciar objetos. Pag. Las clases abstractas se utilizan para forzar a los programadores a desarrollar algunos o todos los métodos de una clase. a 7 excepción de la clase Character. • String. se derivan de la clase abstracta Number (considerada superclase). Utilizando la herencia se puede derivar una nueva clase a partir de otra clase existente. 2. conocidas como las clases 6 wrappers (envoltorios). Clase que proporciona métodos correspondientes a las funciones matemáticas básicas. • Math. Double. Byte. Clases que envuelven los tipos de datos primitivos. donde la nueva clase derivada heredará todos los atributos y métodos de la clase existente. Herencia: Subclase y Superclase. Estos métodos son conocidos como métodos de instancia o de objeto. 8 Instancia: Representación concreta de una clase. los métodos siempre están dentro de una clase. otros métodos son invocados o ejecutados utilizando un objeto o instancia de la clase en la cual están definidos. Por otro lado. Estos métodos son conocidos como métodos estáticos o de clase. Una Instancia viene a ser lo mismo que un objeto. 8 Pag. tal es el caso de los métodos de la clase String de Java. Crear un objeto o instanciar una clase se refiere a poder tener una representación real de una clase. 265 . tal es el caso de los métodos de la clase Math de Java.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA En Java. Algunos métodos pueden ser invocados o ejecutados utilizando directamente el nombre de la clase en la cual están definidos. 266 .Ing. Juan José Flores Cueto. Pag. 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. tales como la conversión con cadenas de caracteres. que permiten tratarlos como objetos. La jerarquía de clases es una forma de ordenar las clases existentes en un lenguaje de Programación Orientado a Objetos (POO). traslación. int. comprobación. 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. tal y como se representan en un lenguaje de programación convencional. la clase Object (esta clase pertenece al paquete java. short).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. char. entre otras.lang). Pag. son los únicos elementos del lenguaje de programación Java que se representan internamente a través de valores. double. float. byte. interesa sacrificar parte de la eficiencia por flexibilidad. estando en la parte superior de la jerarquía. Esto tiene algunas ventajas desde el punto de vista de la eficiencia. 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. long. 267 . conocidos también como tipos de datos simples. Dichas clases son conocidas como las clases wrappers (envoltorios). Existe una clase wrapper para cada uno de los tipos de datos primitivos. Dichas clases se muestran a continuación: TIPO DE DATO PRIMITIVO boolean byte char double float int Long CLASES WRAPPERS Boolean Byte Character Double Float Integer 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. Java tiene su propia jerarquía de clases. En ocasiones. Character java.lang. Simplemente hay que ejecutar el método de la clase wrappers adecuada y el String se convierte al tipo de dato primitivo asociado. Pag. Juan José Flores Cueto.lang.lang. tienen un método que permite convertir desde una cadena (String) al tipo primitivo. Para ejecutar un método de instancia es necesario crear un objeto de la clase donde está definido dicho método. Integer I = new Integer ( i ).Object java. en general.Number Byte Double Float Integer Long Short Las clases Java. TIPO DE DATO PRIMITIVO Short CLASES WRAPPERS Short Cada uno de estas clases wrappers (a excepción de Character). Donde el objeto I. que tiene un valor igual a 5 y métodos para manipular dicho valor.lang. Por ejemplo.Ing. para crear un objeto de la clase Integer utilizamos: int i = 5. tienen métodos estáticos y métodos de instancia. como los objetos de la clase String que no necesariamente se crean con dicha sentencia).Boolean java. JERARQUÍA DE CLASES Y HERENCIA java. Para crear un objeto en Java se usa la sentencia new (a excepción de los objetos de algunas clases. es un objeto de la clase Integer. 268 . comprobación y traslación de datos. Las variables son: VARIABLE i l f d b c TIPO DE DATO PRIMITIVO int long float double boolean char Para referirnos a objetos se utilizará una letra en mayúscula. para referirnos a las variables se utilizará una letra minúscula.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. Pag. mientras que. Dichos objetos son: CLASE AL QUE PERTENECE String Integer Long Float Double Character OBJETO S I L F D C También se utilizarán algunas variables para lo cual se deberá asumir que dichas variables han sido declaradas previamente. se utilizarán algunos objetos de dichas clases. 269 . Se asume que los objetos han sido creados previamente. toString ( ) .toString ( ) . se puede utilizar clases wrappers y variables. L. Float. 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.toString ( ) .toString ( ) . Juan José Flores Cueto. F. a un valor de tipo cadena contenido en un objeto String. 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. Conversión de tipo de dato primitivo a objeto String Se puede convertir el valor de un tipo de dato primitivo o simple.toString ( d ) . Conversión de tipo de dato primitivo a objeto String utilizando clases wrappers y variables: OBJETO STRING S S S S = = = = CLASES WRAPPERS Y VARIABLES Integer.toString ( f ) .toString ( l ) . 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. también puede ejecutarse utilizando un objeto. o utilizar objetos de las clases wrappers. D. Pag.Ing. A pesar que el método toString ( ) es un método estático o de clase. 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). Double. Para realizar esta conversión. Long. Conversión de tipo de dato primitivo a objeto String utilizando objetos wrappers: OBJETO STRING S S S S = = = = OBJETOS WRAPPERS I. 270 .toString (i ) . y uno de los métodos definidos en esta clase. Long. Conversión de objetos String a tipos de dato primitivo. como ya se ha mencionado. Double. siempre y cuando el objeto String contenga un dato equivalente al tipo de dato primitivo que se desea convertir. Todas las clases en Java pueden utilizar los métodos definidos en la clase Object (debido fundamentalmente a la herencia). parseLong ( ). parseFloat ( ) y parseDouble ( ) para los wrappers Integer. Observe que se utiliza el método valueOf ( ) para convertir el valor contenido en el objeto String 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 ( ). 271 . Double.parseLong (S) . a que este método no pertenece a dichas clases. 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). Float y Double respectivamente. Integer.parseInt (S) . a un dato de tipo primitivo o valor de una variable. sino que pertenece a la clase Object. | Conversión de objetos String a tipo de dato primitivo Se puede convertir un objeto String a un tipo de dato primitivo. Long. Long.valueOf (S) . También se tiene la posibilidad de utilizar los métodos parseInt ( ). es el método toString ( ). Este método es un método estático o de clase.parseDouble (S) .valueOf (S) . Float. utilizando clases wrappers y objeto String: VARIABLE i l f d = = = = WRAPPERS Y OBJETO STRING Integer.valueOf (S) .valueOf (S) . Float.parseFloat (S) . Esto se debe. Pag. La clase Number es la superclase de las clases wrappers (a excepción de la clase wrapper Character).floatValue ( ) . F. i = l = f = d = Observe que todas las clases wrappers tienen en común los métodos de instancia intValue ( ). D. Pag. 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. L.longValue ( ) . Juan José Flores Cueto. F. D.floatValue ( ) .intValue ( ) . I.intValue ( ) . longValue( ). I. Todas las clases wrappers tienen en común los métodos de instancia intValue( ).longValue ( ) .longValue ( ) . floatValue( ) y doubleValue( ). Conversión de objetos wrappers a tipos de dato primitivo. L.doubleValue ( ) .doubleValue ( ) . F. D. I.longValue ( ) . F. 272 .floatValue ( ) . Estas clases pueden utilizar los métodos definidos en la clase Number a través de la herencia.floatValue ( ) .intValue ( ) . L. utilizando clases wrappers: VARIABLE CLASES WRAPPERS I. Estos métodos pertenecen en realidad a la clase Number. L. floatValue ( ) y doubleValue ( ). longValue ( ).doubleValue ( ) .doubleValue ( ) . siempre y cuando el objeto String contenga un valor equivalente al valor del tipo de dato primitivo que se desea convertir.intValue ( ) .Ing. D. isInfinite ( d ). 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: VARIABLE b = CLASES WRAPPERS Y VARIABLES Float.isInfinite ( f ) .isNaN ( ). 273 . D.0. Comprobación del valor Not-a-Number utilizando clases wrappers y variables: VARIABLE b = OBJETOS WRAPPERS F. El método devuelve true si el valor de la variable no es un número. Pag. Comprobaciones del valor infinito Comprobación del valor infinito utilizando clases wrappers y variables: VARIABLE b = CLASES WRAPPERS Y VARIABLES Float. Los valores Not-a-Number proceden de indeterminaciones tales como por ejemplo el resultado de la siguiente operación: 0.isNaN ( f ) .0 / 0. Observe que se utiliza el método isNaN ( ) para determinar si la variable es o no un número.isNaN ( ) .isNaN ( d ). Double. isDigit (c) . Por ejemplo el resultado de la siguiente operación: 10. El método devuelve true si el valor de la variable es un número infinito. Character. 274 . “Devuelve true si el caracter es un espacio en blanco”. Juan José Flores Cueto. “Devuelve true si el caracter es una letra mayúscula”. “Devuelve true si el caracter es un dígito decimal”. Character. b = Character.isLowerCase (c) .isUpperCase (c) .isInfinite ( ).5 / 0. Los valores Infinite proceden normalmente de la división por cero de un valor finito. Observe que se utiliza el método isInfinite ( ) para determinar si la variable es o no un número infinito. Character. 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 caracter es una letra minúscula”. Comprobación del valor infinito utilizando objetos wrappers: VARIABLE b = OBJETOS WRAPPERS F.isInfinite ( ) .0.Ing. Pag. D.isSpace (c) . c = Character. Character. Pag. 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 caracter a una letra minúscula”.toLowerCase (c). “Convierte el caracter a una letra mayúscula”.toUpperCase (c). Ing. class PrgConvertirAString { public static void main ( String arg [ ] ) { boolean estado = true.Desarrollo de la Codificación.5f. cadena = String.println ( “ Tipo float en String: ” + cadena ) .Descripción del problema.println( “ Tipo long en String: ” + cadena ) . Analice como se pueden manipular las variables de tipo cadena (String) más adelante en este mismo capítulo.valueOf ( numRealDoble ) . En ciertas ocasiones esto es necesario ya que las cadenas pueden ser manipuladas. cadena = String. System.out. cadena = String.println ( “ Tipo double en String: ” + cadena ) . int numEntero = 10. Etapa 04 . System. String cadena = “ ”. Problema 61 Etapa 01 . } } Observe que es posible convertir cualquier tipo de dato a cadena (String) utilizando el método valueOf ( ) de la clase String.valueOf ( estado ) . cadena = String.println ( “ Tipo char en String: ” + cadena ) . System. long numEnteroLargo = 100000000.println ( “ Tipo boolean en String: ” + cadena ) . Clase PrgConvertirAString package dominioDeLaAplicacion . Juan José Flores Cueto. System.valueOf ( numEnteroLargo ) .98.println ( “ Tipo int en String: ” + cadena ) . float numReal = 15.valueOf ( numReal ) . 276 .out.out. char letra = ‘z’. Pag. System.out.out. double numRealDoble = 10000. cadena = String. cadena = String. System.out.valueOf ( letra ) . Desarrollar un programa en Java que permita convertir valores de diferentes tipos de datos en valores de tipo cadena.valueOf ( numEntero ) . util. System. Analice como se pueden manipular las variables de tipo cadena (String) más adelante en este mismo capítulo. Desarrollar un programa en Java que permita obtener la fecha del sistema y la convierta en un valor de tipo cadena. el año actual o la hora del sistema.println ( “ Fecha: ” + cadena ) . Pag. tales como. En este paquete podrá encontrar clases de utilidad para sus aplicaciones. Esta cadena de texto podrá ser manipulada para obtener otros datos.toString ( ) .Desarrollo de la Codificación. El ejecutar esta aplicación se visualizará algo parecido a lo siguiente: Fecha: Sat Mar 20 11:38:46 GMT-05:00 2004. el mes. 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. Clase PrgConvertirFecha package dominioDeLaAplicacion . Etapa 04 .out.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 62 Etapa 01 .util.Descripción del problema. cadena = hoy. es una clase propia de Java y está incluida en el paquete java. el día. import java. class PrgConvertirFecha { public static void main ( String arg [ ] ) { Date hoy = new Date() . Este paquete está fuera del alcance del presente texto (sugiero que investigue las clases que forman parte de este paquete).Date . String cadena = “ ”. } } La clase Date. 277 . intValue ( ) ) ) .Ing. System. Calcular y mostrar la suma de ambos valores. Integer objInteger = Integer. 278 . Problema 63 Etapa 01 . que deberá asegurarse que la cadena contenga un valor válido para que pueda ser almacenado en un tipo de dato determinado.valueOf ( cadena ) . Pag. System. 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.println ( “ Valores enteros: ” + numEntero + “ " + objInteger ) .out.out. El método intValue ( ) nos permite obtener el valor entero del objeto (objInteger) de la clase Integer. Como sugerencia desarrolle un programa en Java que realice lo mismo que este programa pero utilice una variable long y la clase Long. String cadena = “10" . Desarrollar un programa en Java que permita convertir una cadena en un número entero y en un objeto de tipo Integer. Recuerde. class PrgCadenaAEntero { public static void main ( String arg [ ] ) { int numEntero = 0 .Desarrollo de la Codificación. } } Observe que es posible convertir una cadena (String) en un valor entero (int) o en un objeto de la clase Integer.println ( “ La suma es: ” + (numEntero + objInteger. numEntero = Integer. Etapa 04 . Clase PrgCadenaAEntero package dominioDeLaAplicacion .Descripción del problema. Juan José Flores Cueto.parseInt ( cadena ) . valueOf ( cadena ) . System.print ( “ La suma es: ” ) . El método doubleValue ( ) nos permite obtener el valor real del objeto (objDouble) de la clase Double. Pag. System. Calcular y mostrar la suma de ambos valores. System. Como sugerencia desarrolle un programa en Java que realice lo mismo que este programa pero utilice una variable float y la clase Float.println ( numRealDoble + objDouble. Etapa 04 .out. Double objDouble = Double.println ( “ Valores enteros: ” + numRealDoble + “ ” + objDouble ) .Desarrollo de la Codificación. } } Observe que es posible convertir una cadena (String) en un valor entero (double) o en un objeto de la clase Double.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 64 Etapa 01 . Clase PrgCadenaAReal package dominioDeLaAplicacion . Recuerde.parseDouble ( cadena ) . numRealDoble = Double.5” . String cadena = “10. que deberá asegurarse que la cadena contenga un valor válido para que pueda ser almacenado en un tipo de dato determinado. Puede utilizar el método parseDouble ( ) de la clase Double para convertir una cadena en un número real (numRealDoble) y también el método valueOf ( ) de la clase Double para convertir una cadena en un un objeto (objDouble) de la clase Double. 279 .out.out.Descripción del problema.doubleValue ( ) ) . Desarrollar un programa en Java que permita convertir una cadena en un número real y en un objeto de tipo Double. class PrgCadenaAReal { public static void main ( String arg [ ] ) { double numRealDoble = 0 . Ing. Juan José Flores Cueto. Pag. 280 . incluida en el paquete java. el operador punto y el nombre del método a utilizar.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA FUNCIONES MATEMÁTICAS: CLASE MATH INTRODUCCIÓN La clase Math. no se pueden crear objetos de la clase Math). En consecuencia. b) .lang es el paquete principal del lenguaje Java por lo cual no se necesita importar ninguna clase incluida en dicho paquete. no será necesario importar el paquete java. como exponencial. La clase Math contiene métodos de cálculo básico. La clase Math a diferencia de otras clases es 10 una clase final . la cual nos proporciona métodos y atributos.Math El paquete java.Object java. Ejemplo: Math. JERARQUÍA DE CLASES Y HERENCIA java. Todos los métodos de una clase final son implícitamente finales. Es decir. para implementar diversas funciones mátemáticas.lang. Una clase final o declarada como final es una clase que no puede ser una superclase.lang. raiz cuadrada y funciones trigonométricas. 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.lang cada vez que se necesite utilizar la clase Math de Java. las clases finales no pueden heredarse.pow (a.lang. logaritmo. es una clase que viene incorporada en el lenguaje de programación Java. Esto significa que no puede ser instanciada (es decir. Pag. 281 . 10 Clase Final: No puede ser una superclase. exp( ). max( ). E. 5. 13. acos( ). MÉTODOS La clase Math presenta los siguientes atributos y métodos de clase: Atributos de clase: 1. el método necesita algunos datos. PI. 3. abs( ). round( ). Para ejecutar un método de clase. es necesario colocar la palabra Math (que es el nombre de la clase). 14. pow( ). 4. no será necesario crear previamente un objeto de dicha clase (esto se cumple para todas las clases que implementen métodos de clase). random( ). Asimismo. 12. 10. 18. toDegrees( ). toRadians( ). atan( ). Para trabajar con los métodos de clase. 11. de la clase Math. 282 . sqrt( ). floor( ). el operador punto (. 7. asin( ). 17. 6. ceil( ). 19. de la clase Math. tan( ). min( ).) y el nombre del método de clase que desea ejecutar. para ejecutar un método de la clase Math debemos tener en cuenta que si. 9.Ing. sin( ). cos( ). 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. 8. Juan José Flores Cueto. Métodos de clase: 1. log( ). estos deben ser necesariamente proporcionados en la cantidad y tipos requeridos. 16. 2. 2. 15. A continuación se presenta una breve descripción del uso de cada uno de los métodos de la clase Math: Pag. print( e) . Resultado: x = 5.out.print( result ) .0 . double result .out.0. E PI Almacena el valor de PI.141592653589793. acos (double) Retorna un valor double con el arcocoseno de un ángulo expresado en radianes. result = Math. Pag. System. System. MÉTODOS DE CLASE abs (float) abs (double) abs (int) abs (long) DESCRIPCIÓN USO Retorna el valor absoluto de un número (que puede ser float. double result . double pi = Math. System. Es decir.PI/180. System. System.718281828459045.0 .out. El ángulo expresado en radianes debe ser un valor double enviado al método como parámetro.141592653589793. int x = -5 .print( result ) . El valor es equivalente a 2.asin( angulo ) . 283 .print( Math.out. nos proporciona la base de un logaritmo natural. El ángulo expresado en radianes debe ser un valor double enviado al método como parámetro. double.0 * Math. double angulo = 45.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA CLASE Math ATRIBUTOS DE CLASE DESCRIPCIÓN Almacena el valor de E.acos( angulo ) .718281828459045. Resultado : result = 0.out.PI/180.print( pi) . double result .PI/180. System.6674572160283838 asin (double) Retorna un valor double con el arcoseno de un ángulo expresado en radianes. Retorna un valor double con el arcotangente de un ángulo expresado en radianes.E . Es decir.atan( angulo ) . Resultado: e = 2. double angulo = 45.abs( x)) . result = Math. El ángulo expresado en radianes debe ser un valor double enviado al método como parámetro.PI .out. USO double e = Math.0 * Math. almacena el valor equivalente a 3.print( result ) . int.9033391107665127 atan (double) double angulo = 45. result = Math. long) dado como parámetro. Resultado : result = 0. Resultado: pi = 3.0 * Math. result = Math.Ing.print(result) .cos( angulo ) . mayor .65 . result = Math.65 . int.println(result) . y ) .6657737500283538 ceil (double) Retorna un valor double con el valor más corto no menor que el parámetro dado.out. result = Math.floor(n) .8660254037844387 cos (double) Retorna un valor double con el coseno de un ángulo expresado en radianes. Retorna el valor del número mayor (que puede ser float.out.0 double angulo = 30. System. El parámetro dado debe ser double. max (float.out. System.0 . double exponente=1.exp(exponente) . Resultado: result = 1. double) double x = 10 . Juan José Flores Cueto. double n = 0.0 .out.7182818284590455 double n = 5.println( result ) .println( result ) . result = Math.0 double logaritmo = 3. long) de dos números dados como parámetros. result . El parámetro dado sebe ser double.print( result ) . El parámetro dado sebe ser double.max( x . result . result = Math. El ángulo expresado en radianes debe ser un valor double enviado al método como parámetro.0 . result . El parámetro dado debe ser double. log (double) Retorna un valor double con el logaritmo natural (base e) de un parámetro dado. result .PI/180. y = 15 . Resultado: result = 1. 284 . System.ceil( n ) . Resultado : result = 0. System.log(logaritmo) .out. MÉTODOS DE CLASE DESCRIPCIÓN Resultado : USO result = 0.out. exp (double) Retorna un valor double con el valor exponencial de Euler del parámetro dado. Resultado: result = 2.print ( mayor ) . System. Resultado: Pag. double. System. float) max (double.0 * Math. double result . mayor = Math.0986122886681096 floor (double) Retorna un valor double con el valor más grande no mayor que el parámetro dado. Resultado: resutl = 5. double angulo = 37. Los dos parámetros dados deben ser double. double.PI/180. float) min (double. El ángulo expresado en radianes debe ser un valor double enviado al método como parámetro. y ) . y = 4 . Resultado: result = 16.print ( result ) . y = 15 . menor . y ) . round (double) double x = 10. pow (double. Resultado: menor = 10. 285 . int) max (long. double) min (int. int) min (long. result .out. double result .random( ) . result = Math.sin(angulo) . menor = Math.53 . double num .print ( result ) . result = Math. long) DESCRIPCIÓN mayor = 15.print ( menor ) .CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA MÉTODOS DE CLASE max (int. random () Retorna un valor double con un número generado aleatoriamente (al azar) mayor o igual que 0.out.print ( num ) . System.0. result = Math.println(result) .out. Resultado: result = 11. int.0 * Math.round( x ) . System.pow( x . long) double x = 2 . System.0 y menor que 1. result . System. USO min (float. El parámetro dado puede ser un valor float o double. Retorna el valor del número menor (que puede ser float. double x = 10 . long) de dos números dados como parámetros. double) 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).out.min( x . round (float) Retorna un valor (que puede ser float o double) con el valor redondeado del parámetro dado. sin (double) Retorna un valor double con el seno de un ángulo expresado en radianes. num = Math.out. Resultado: Pag. System.0. El ángulo expresado en radianes debe ser un valor double enviado al método como parámetro. result = Math. double result . double x = 16 . Resultado: result = 59. se presentan algunas soluciones a problemas planteados utilizando algunos de los métodos de la clase Math. El parámetro dado debe ser un valor double.print ( result ) . System.99999999999999 double angulo = 60.0 . result = Math.0471975511965976 toRadians (double) Retorna un valor double. System.println(result) . result = Math. Juan José Flores Cueto. result . result .out. Resultado: result = 1. MÉTODOS DE CLASE DESCRIPCIÓN USO result = 0. Permite convertir un ángulo expresado en radianes (enviado como parámetro double) en un ángulo expresado en sexagesimal.println( result ) .Ing.PI/3.out. 286 . Resultado: result = 4.toDegrees(angulo) . result = Math.PI/180. Pag.tan(angulo). System. Resultado: result = 1. Analice cada una de las siguientes soluciones. con la finalidad de mejorar la comprensión del tema tratado. System.out.6018150231520483 sqrt (double) Retorna un valor double con la raiz cuadrada del parámetro dado.3270448216204098 tan (double) Retorna un valor double con la tangente de un ángulo expresado en radianes.println( result ) . Permite convertir un ángulo expresado en sexadecimal (enviado como parámetro double) en un ángulo expresado en radianes.sqrt( x ) . double angulo = Math.toRadians(angulo) . double angulo = 53. result . A continuación. toDegrees (double) Retorna un valor double.0 * Math.out. resultado .out.out. Etapa 04 . num3.out.println ( “ Ingresar el tercer número: ” ) . System. Nombre de la Clase.max ( num2.Lectura . 287 . import biblioteca. num2 = Lectura. System.leerInt( ) .println ( “ Ingresar el segundo número: ” ) . num3 ) ) . num3 = Lectura. System. Operador punto.println ( “ El número mayor es: ” + resultado ) .Desarrollo de la Codificación.leerInt( ) . Clase PrgNumeroMayor package dominioDeLaAplicacion .Descripción del problema. num3 ) Parámetros.println ( “ Ingresar el primer número: ” ) . num1 = Lectura. class PrgNumeroMayor { public static void main ( String arg [ ] ) { int num1.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 65 Etapa 01 . } } ¿Que hay de nuevo en la codificación? Observe el uso del método max ( ) de la clase Math: Math.out. resultado = Math.leerInt( ) .max ( num2. Desarrollar un programa en Java que permita ingresar 3 números enteros a través del teclado.max ( num1. Math. Determinar y mostrar cuál de ellos es el número mayor. Nombre del método. Pag. System. num2. Observe que en esta solución se emplea una estrategia mas simple para determinar el número mayor entre tres números. 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. Juan José Flores Cueto. El método max ( ) de la clase Math.max ( num1. retorna el valor del número mayor (puede ser un número float. 288 . Math. num3 ) ) . double. 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). int o long) de dos números dados como parámetros.Ing.max ( num2. tal y como se muestra a continuación: resultado = Math. Pag. 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. Desarrollo de la Codificación. num3 ) ) . Math.min ( num1. tal y como se muestra a continuación: resultado = Math. Pag. Etapa 04 . class PrgNumeroMenor { public static void main ( String arg [ ] ) { int num1. y en la misma línea evaluamos el menor de estos dos números con el primer número ingresado. num2.Lectura . resultado . double. Observe que Math. } } ¿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). num1 = Lectura. Desarrollar un programa en Java que permita ingresar 3 números enteros a través del teclado. Determinar y mostrar cuál de ellos es el número menor.Descripción del problema. Clase PrgNumeroMenor package dominioDeLaAplicacion . num3 = Lectura. import biblioteca.leerInt( ) .println ( “Ingresar el tercer número: ” ) . resultado = Math.println ( “ El número menor es: " + resultado ) . num2 = Lectura.out.out.println ( “ Ingresar el primer número: ” ) .min ( num2. System.leerInt( ) . System.println ( “Ingresar el segundo número: ” ) . System. En nuestro ejemplo hallamos el menor de los dos últimos números ingresados. int. 289 . System.min ( num2. long) de dos números dados como parámetros.out.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 66 Etapa 01 .leerInt( ) .out. num3. Math.min ( ) retorna el valor del número menor (que puede ser float.min ( num1. num3 ) ) . out.leerInt( ) . class PrgNumerosAleatorios { public static void main ( String arg [ ] ) { int x. for ( x = 1. cant. Cada vez que se ejecuta la sentencia for. x++) { num = 1 + (int) ( Math.Desarrollo de la Codificación. 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. se genera y muestra un número aleatorio (un número entre 1 y 6). se emplea la siguiente fórmula: Pag. import biblioteca. se muestra la suma de los números aleatorios generados). Problema 67 Etapa 01 .out. Desarrollar un programa en Java que permita generar una cantidad determinada de números aleatorios. Juan José Flores Cueto. 290 .random ( ) * 6 ) . System. cant = Lectura.println ( “La suma de los números aleatorios es: ” + suma ) .print ( “Ingresar la cantidad de números aleatorios a generar: ” ) .random( ) * 6 ) . Clase PrgNumerosAleatorios package dominioDeLaAplicacion . Los números aleatorios generados deberán estar entre 1 y 6. utilizando el método random ( ) de la clase Math. el cual es acumulado en la variable suma. Recuerde que para generar números aleatorios entre dos números (entre un intervalo o rango). Mostrar el número generado aleatoriamente y la suma de dichos números. } System.Lectura . System.println ( “El número aleatorio generado es: ” + num ) .Ing. Finalizada la ejecución de la sentencia for se muestra el contenido de dicha variable (es decir. Etapa 04 . suma = suma + num . suma=0 . num. x <= cant. } } ¿Que hay de nuevo en la codificación? Observe el uso del método random ( ) de la clase Math: num = 1 + (int) (Math.out.Descripción del problema. Pag.random( ) * ( 6 ) ) .CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA min + (int) ( Math. Para nuestro ejemplo tenemos: 1 + (int) ( Math. 291 . 1 + (int) ( Math.random( ) * (max – min + 1 ) ) .random( ) * ( 6 – 1 + 1 ) ) . do { num = 1 + (int) ( Math. } } while (cant != cont) . Juan José Flores Cueto.out. System. cont = 0 . } } ¿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.Descripción del problema. System. Problema 68 Etapa 01 .Desarrollo de la Codificación.print ( num + “ \t ” ) .leerInt( ) . Mostrar los números aleatorios que son números pares. cant. 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.random( ) * 10 ) . if (num % 2 == 0) { cont++. Los números aleatorios generados deberán estar entre 1 y 10. Etapa 04 . Pag.print ( “Ingresar la cantidad de números aleatorios a generar: ” ) . import biblioteca. cant = Lectura. num.Lectura .Ing. Desarrollar un programa en Java que permita generar una cantidad determinada de números aleatorios. class PrgNumAleatoriosPares { public static void main ( String arg [ ] ) { int x. Clase PrgNumAleatoriosPares package dominioDeLaAplicacion .out. 292 . print ( num + “ \t ” ) .leerInt( ) . System.random( ) * 10 ) . cant = Lectura. Etapa 04 . Pag.Descripción del problema.out. Los números aleatorios generados deberán estar entre 1 y 10. num. if ( num % 2 == 1 ) { cont ++. import biblioteca.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 69 Etapa 01 . System.out. } } ¿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.print ( “Ingresar la cantidad de números aleatorios a generar: ” ) . class PrgNumAleatoriosImpares { public static void main ( String arg [ ] ) { int x. Clase PrgNumAleatoriosImpares package dominioDeLaAplicacion . } } while ( cant != cont ) . cont = 0 .Desarrollo de la Codificación. do { num = 1 + (int) ( Math. Mostrar los números aleatorios que son números impares. cant.Lectura . Desarrollar un programa en Java que permita generar una cantidad determinada de números aleatorios. 293 . 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. PI * Math. En nuestro caso el método pow ( ) eleva a la potencia 3 el radio del círculo. 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). import biblioteca.Desarrollo de la Codificación. Calcular y mostrar el volumen de dicha esfera.println ( “El volumen de la esfera es: ” + volume ) .Descripción del problema.leerDouble().Lectura .Ing. System. 3 ) . } } ¿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. Para hallar el volumen de la esfera se tendrá que utilizar la fórmula v=4/3*PI*R3. Desarrollar un programa en Java que permita ingresar por teclado el radio de una esfera.pow ( radio. Juan José Flores Cueto. 3 ) .PI).out. que contiene en valor del número PI (Math. class PrgRadioEsfera { public static void main ( String arg [ ] ) { double radio. radio = Lectura. volume . Problema 70 Etapa 01 . System.PI * Math. Clase PrgRadioEsfera package dominioDeLaAplicacion . Etapa 04 .pow ( radio. La clase Math define un atributo (constante) muy útil. 294 .println ( “Ingresar el radio de la esfera: ” ) .out. volume = (4 / 3) * Math. Pag. Luego. Clase PrgNumRedondeado package dominioDeLaAplicacion . En esta solución se ingresa un número y se almacena en la variable num.out.leerDouble( ) . System. Desarrollar un programa en Java que permita ingresar un número decimal. El método round ( ) permite redondear un número dado como parámetro. import biblioteca. resultado = Math. num = Lectura.Descripción del problema.round(num) . Etapa 04 . 295 .println ( “El número redondeado es: ” + resultado ) .Lectura . } } ¿Que hay de nuevo en la codificación? Observe el uso del método round ( ) de la clase Math: resultado = Math. class PrgNumRedondeado { public static void main ( String arg [ ] ) { double num.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 71 Etapa 01 .Desarrollo de la Codificación. Mostrar el número ingresado redondeado. resultado .round(num) . Pag. System.out.println ( “Ingrese un número decimal: ” ) . dicho número es redondeado utilizando el método round ( ) y se almacena en la variable resultado. Desarrollo de la Codificación. Juan José Flores Cueto.out.Ing. x++) { rpta = Math. La variable cant y el exponente expo se ingresan por el teclado. expo ) . El método pow ( ) permite elevar a la potencia un número determinado.pow ( x. expo ) . x < cant. 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.println ( “El Exponencial de ” + x + “ es: ” + rpta ) .leerInt( ) . por lo que dicho valor deberá ser almacenado en una variable del mismo tipo o deberá mostrarse por la pantalla. expo . System.out.Descripción del problema.leerInt( ) . double rpta .pow ( x. System. Desarrollar un programa en Java que permita ingresar un número entero y un exponente. retorna un valor double.println ( “Ingresar el exponente: ” ) . Clase PrgNumPotencia package dominioDeLaAplicacion . class PrgNumPotencia { public static void main ( String arg [ ] ) { int cant.out. 296 . Problema 72 Etapa 01 . } } } ¿Que hay de nuevo en la codificación? Observe el uso del método pow ( ) de la clase Math: rpta = Math. Recuerde y siempre tenga presente que el método pow ( ) de la clase Math.Lectura .println ( “Ingresar un número entero: ” ) . Etapa 04 . import biblioteca. System. expo = Lectura. Mostrar el resultado de calcular la potencia de todos los números menores que el número ingresado elevado al exponente ingresado. for ( int x = 1. Pag. cant = Lectura. System. for ( int x = 1. Desarrollar un programa en Java que permita ingresar un número entero. La variable cant se ingresa por el teclado.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. retorno un valor double. 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. El método sqrt ( ) permite obtener la raíz cuadrada de un número determinado. Mostrar el resultado de calcular la raíz cuadrada de todos los números menores que el número ingresado. } } } ¿Que hay de nuevo en la codificación? Observe el uso del método sqrt ( ) de la clase Math: rpta = Math.out.Desarrollo de la Codificación. x++ ) { rpta = Math.sqrt ( x ) . 297 .out.leerInt( ) .CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 73 Etapa 01 . double rpta . System. import biblioteca.println ( “La raíz cuadrada de ” + x + “ es: ” + rpta ) .Descripción del problema.Lectura . Pag. x < cant. cant = Lectura. class PrgNumRaiz { public static void main ( String arg [ ] ) { int cant . Recuerde y siempre tenga presente que el método sqrt ( ) de la clase Math. Etapa 04 .println ( “Ingrese un número entero: ” ) . pow (num.Desarrollo de la Codificación. elevarlos al cuadrado y mostrarlos por pantalla.out. Mostrar los números generados aleatoriamente elevados al cuadrado.println ( num + “ elevado al cuadrado es: ” + rpta ) . System.random() * 10 ) ) .leerInt( ) . Juan José Flores Cueto. cant = Lectura. x <= cant. num . import biblioteca.out. 298 . Etapa 04 .print ( “Ingresar la cantidad de números aleatorios a generar: ” ) . System. La variable cant se ingresa por el teclado. Problema 74 Etapa 01 .pow (num.random() * 10 ) ) .Ing.Lectura .Descripción del problema. for ( int x = 1. 2) . rpta = Math. En la presente solución se utiliza una sentencia for con la finalidad de obtener números aleatorios. } } } ¿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. 2) . double rpta . Pag. Desarrollar un programa en Java que permita generar una cantidad determinada de números aleatorios. class PrgNumAleatorioCuad { public static void main ( String arg [ ] ) { int cant. Los números aleatorios generados deberán estar entre 1 y 10. Clase PrgNumAleatorioCuad package dominioDeLaAplicacion . rpta = Math. x++ ) { num = (int) ( 1 + ( Math. a. area = Math. System. b. } } Pag.c)) * (Math. b. p = (a + b + c) / 2 .abs(p . c = Lectura.out. b = Lectura.Desarrollo de la Codificación. import biblioteca.println ( “Ingrese el valor del terecr lado del triángulo (c): ” ) . tmp = ( p * (Math.leerDouble( ) . Desarrollar un programa en Java que permita determinar y mostrar el área de un tríangulo en base a las longitudes de sus lados. System.leerDouble( ) . class PrgTriangulo { public static void main ( String arg [ ] ) { double a.abs(p . c = Lados del triángulo. p = (a+b+c) / 2. Considerar el valor absoluto de la diferencia entre el semiperimetro y cada uno de los lados. System. Etapa 04 .sqrt ( tmp ) .println ( “Ingrese el valor del primer lado del triángulo (a): ” ) .abs(p .CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 75 Etapa 01 .leerDouble( ) .a)) * (Math. tmp.println ( “El área del triángulo es: ” + area ) . System. Clase PrgTriangulo package dominioDeLaAplicacion .out.out. Donde: p = Semiperímetro. 299 .println ( “Ingrese el valor del segundo lado del triángulo (b): ” ) .b) ) ) . p.out.Descripción del problema. a = Lectura.Lectura . Utilizar las siguientes fórmulas: area = ( p * (|p-a|)*(|p-b|)*(|p-c|)) RAIZ (2). area . c. 300 . ¿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. 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. Luego. se obtiene la raíz cuadrada del valor resultante utilizando el método sqrt ( ) de la clase Math. area = Math.abs(p . 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. 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.c)) * (Math.sqrt ( tmp ) .a)) * (Math.b) ) ) .abs(p .Ing. se multiplican los valores resultantes con el valor del semiperímetro del triángulo y finalmente. Juan José Flores Cueto.abs(p . Luego. perimetroCirculo .println ( “ Ingrese el valor del radio del círculo: ” ) .Lectura . 301 . Utilizar las siguientes fórmulas: perimetro = 2 * PI * radio. areaCirculo = Math. perimetroCirculo = 2 * Math. System.println ( “ El área del círculo es: ” + areaCirculo ) .out.out. } } Pag. Clase PrgCirculo package dominioDeLaAplicacion .println ( “ El perímetro del círculo es : ” + perimetroCirculo ) . System. import biblioteca.PI * Math. Desarrollar un programa en Java que permita determinar y mostrar el perímetro y el área de un círculo. System.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 76 Etapa 01 .pow (radioCirculo. area = PI * radio * radio.Descripción del problema. radioCirculo = Lectura. 2) . Etapa 04 .PI * radioCirculo . areaCirculo.Desarrollo de la Codificación.out. class PrgCirculo { public static void main ( String arg [ ] ) { double radioCirculo.leerDouble( ) . if (anguloGrados == 180) tipoAngulo = “Llano” . anguloRadianes = Math. anguloRadianes . if (anguloGrados == 90) tipoAngulo = “Recto” . import biblioteca. Etapa 04 . Entre 0 y 90 grados. Desarrollar un programa en Java que permita ingresar un ángulo expresado en grados.Ing. 302 . Los ángulos expresados en grados se clasifican de la siguiente manera: 0 grados.Desarrollo de la Codificación.toRadians (anguloGrados) .Descripción del problema.println ( “ Ángulo expresado en radianes: ” + anguloRadianes ) .leerDouble( ) . = Obtuso. = Llano. = Completo. anguloGrados = Lectura. Entre 90 y 180 grados. if (anguloGrados == 0) tipoAngulo = “Nulo” . = Agudo. if (anguloGrados > 0 && anguloGrados < 90) tipoAngulo = “Agudo” . System.out. = Cóncavo. class PrgConversionAngulo { public static void main ( String arg [ ] ) { double anguloGrados. if (anguloGrados > 180 && anguloGrados < 360) tipoAngulo = “Concavo” . System. String tipoAngulo = “” . System. = Recto. } } Pag. Entre 180 grados y 360 grados. 90 grados.out. 180 grados. = Nulo.println ( “ Ingrese un ángulo en grados (entre 0 y 360): ” ) . if (anguloGrados == 360) tipoAngulo = “Completo” . Clase PrgConversionAngulo package dominioDeLaAplicacion . 360 grados. Problema 77 Etapa 01 .out. Juan José Flores Cueto.println ( “ Tipo de ángulo: ” + tipoAngulo ) . Deeterminar el tipo de ángulo ingresado y su equivalente en radianes.Lectura . if (anguloGrados > 90 && anguloGrados < 180) tipoAngulo = “Obtuso” . Pag. 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.toRadians (anguloGrados) . 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. 303 .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. El tipo de ángulo es almacenado en una variable String (tipoAngulo) y mostrado por pantalla. sqrt (tmp)) / (2 * a) .out.leerInt( ) . System.pow (b.out. System. System. } else { tmp = Math. Tipo: 2 Ax + Bx + C = 0 Considerar que la solución puede tener raíces imaginarias. x.(4 * a * c) . x1.b . System.out. Desarrollar un programa en Java que permita determinar y mostrar las raíces de una ecuación de segundo grado. b = Lectura. } else { x1 = ( .Descripción del problema. import biblioteca. 304 .println ( “ Ingrese el coeficiente B: ” ) . Utilizar la siguiente fórmula: x = ( . Etapa 04 . } else { if (a == 0) { x = c / b * (-1) .out. b.out.println ( “ La ecuación tiene raices imaginarias ” ) . a = Lectura.println ( “ Ingrese el coeficiente A: ” ) . Juan José Flores Cueto. c .out. class PrgEcuacion2Grado { public static void main ( String arg [ ] ) { int a.b + Math. x2 .Lectura .leerInt( ) . Problema 78 Etapa 01 .println ( “ El segundo valor para x es: ” + x2 ) .leerInt( ) .( ( B ** 2 – 4 * A * C ) RAIZ ( 2 ) ) ) / 2 * A.B + . System.Math.println ( “ La ecuación no tiene solución ” ) .out. if (tmp < 0) { System. if (a == 0 && b == 0) { System. 2) . double tmp.Desarrollo de la Codificación. x2 = ( .println ( “ El primer valor para x es: ” + x1 ) .println ( “ El valor para x es: ” + x ) . System. Clase PrgEcuacion2Grado package dominioDeLaAplicacion . c = Lectura. } } } } } Pag.out.sqrt (tmp)) / (2 * a) .Ing.println ( “ Ingrese el coeficiente C: ” ) . la cual se calcularía utilizando: x = c / b * (-1) .Math.pow (b.sqrt (tmp)) / (2 * a) . x2 = ( . se muestra un mensaje por la pantalla. 305 .b + Math. Pag. Si el coeficiente a es diferente de cero la ecuación tendría dos soluciones. si el coeficiente a es igual a cero la ecuación tendría una sola solución. En caso que el valor de tmp sea igual a cero. se determina el valor de la discriminante.sqrt (tmp)) / (2 * a) .(4 * a * c) .b . 2) . “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. b y c). Si los coeficientes a y b son iguales a cero. “La ecuación no tiene solución”. se muestra el siguiente mensaje por pantalla. Caso contrario. Caso contrario. las cuales se calcularían utilizando: x1 = ( . el cual se almacena en la variable tmp utilizando la siguiente formula: tmp = Math. println ( “ Bienvenido al juego: ¿Que número es? ” ) . System.out. else System.println ( “ ----------------------------------------------------” ) .leerInt( ) . tmp = maximo * Math.round(tmp) .println ( “ Ingrese un número entre 0. do { System. System.random( ) .. Se debe intentar adivinar que número es el que generó la computadora.out. } while (num < 0 || num > 100 ) . El rango de números válidos en el juego es de 1 a 100. num = Lectura. Juan José Flores Cueto. num = Lectura. double tmp.100: ” ) .println ( “ El número buscado es mayor ” ) . Problema 79 Etapa 01 .out.println ( “ Ingrese otro número entre 0. import biblioteca. } while (num < 0 || num > 100) .println ( “ . System. y cada vez que intente adivinar le indicará si el número buscado es menor o es mayor.100: ” ) .Trate de adivinar el número en -” ) . 306 .out.out.el menor número de intentos -” ) . inten = 1 . } System.out. System.println ( “ . do { System.out. System.println ( “ .Lectura .out. tratara -” ) .println ( “ . System. num. Clase PrgJuego package dominioDeLaAplicacion . numAzar = (int) Math.Ing.println ( “ . System.println ( “ El número buscado es menor ” ) . Desarrollar un juego en Java que permita generar un número aleatorio. while (num != numAzar) { inten++ . if (num < numAzar) System.out.de adivinar que número es -” ) .numero aleatorio y ud.out.leerInt( ) .out. encontró el número en: ” + inten + “ intento(s) ” ) . Etapa 04 . class PrgJuego { public static void main ( String arg [ ] ) { int maximo = 100. numAzar.Desarrollo de la Codificación..out.Descripción del problema. } } Pag.println ( “ Ud.La computadora genera un -” ) . 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. Este número generado al azar. Si no son iguales. Pag. almacenado en la variable numAzar. se mostrará un mensaje. Intente modificar la codificación de la solución. 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. utilizando la siguiente fórmula: tmp = maximo * Math. Utilice la sentencia do y optimice el código. es comparado con un número previamente ingresado por teclado y almacenado en la variable num.random( ) . se mostrará un mensaje indicando que el número numAzar fue encontrado. 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. 307 .round(tmp) . El número generado aleatoriamente es almacenado en la varable tmp. out.println ( “ Ingrese el tercer número: ” ) .min (menor.println ( “ Ingrese el sexto número: ” ) . import biblioteca.println ( “ Ingrese el quinto número: ” ) .println ( “ Ingrese el primer número: ” ) .out. Desarrollar un programa en Java que permita ingresar 6 números a traves del teclado.leerInt( ) . n1 = Lectura.n4) .n2) . n2 = Lectura. double mayor.Ing.out.Desarrollo de la Codificación.max (n1. Utilice una sentencia for. n6 = Lectura.min (n1.out.leerInt( ) . mayor = Math. mayor = Math.n3) .min (menor.n6) . mayor = Math.Descripción del problema. menor = Math. System.Lectura .leerInt( ) .n4) .max (mayor.leerInt( ) . n3 = Lectura. meno r. n5. Clase PrgNumeroMayorMenor package dominioDeLaAplicacion . class PrgNumeroMayorMenor { public static void main ( String arg [ ] ) { int n1. menor = Math.println ( “ El mayor número es: " + mayor ) . mayor = Math.println ( “ El menor número es: " + menor ) . n2. System.out. n3.n6) .n2) .leerInt( ) . } } Modificar la codificación de la solución de tal forma que pueda optimizar el código. menor = Math.leerInt(). menor = Math.out.out.out. 308 . n6 . mayor = Math.max (mayor. Problema 80 Etapa 01 . System. System. menor = Math. System.n3) .println ( “ Ingrese el cuarto número: ” ) . Determinar y mostrar cuál de ellos es el número mayor y cuál es el número menor. System.println ( “ Ingrese el segundo número: ” ) . System. Etapa 04 . n4 = Lectura. System. Pag. n5 = Lectura.n5) . n4.max (mayor.n5) .min (menor.min (menor. Juan José Flores Cueto.max (mayor. println ( “ Ingrese la nota de la práctica 3: ” ) .leerDouble( ) . p2 = Lectura.p2) .println ( “ Ingrese la nota de la práctica 2: ” ) . p3 = Lectura. notaMenor .leerDouble( ) . class PrgPromedioNotas { public static void main ( String arg [ ] ) { double pf. p1 = Lectura. pp = Promedio de prácticas.Desarrollo de la Codificación.p3) . Clase PrgPromedioNotas package dominioDeLaAplicacion . 309 .p4) . ef = Examen final. p2. p3.out.min (p1.out. Donde: pf = Promedio final.println ( “ Ingrese la nota de la práctica 1: ” ) . p4 = Lectura. System. Etapa 04 .leerDouble( ) . notaMenor = Math. ep = Lectura. ep.out.println ( “ Ingrese la nota del examen final: ” ) . Desarrollar un programa en Java que permita ingresar las notas de todos los alumnos de un determinado salon de clase.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 81 Etapa 01 . Calcular y mostrar el promedio final de cada alumno en base a la siguiente fórmula: pf = ( pp + ep + ( ef * 2 ) ) / 4. notaMenor = Math. System.out.println ( “ Ingrese la nota del examen parcial: ” ) .Lectura .leerDouble( ) . import biblioteca. System. char opc . Son 4 prácticas de las cuales se elimina la más baja pp = ( p1 + p2 + p3 + p4 – notaMenor ) / 3 ep = Examen parcial.out. ef = Lectura. ef. Pag.Descripción del problema.leerDouble( ) .out.min (notaMenor. notaMenor = Math. pp.min (notaMenor. p4.leerDouble( ) . System.println ( “ Ingrese la nota de la práctica 4: ” ) . do { System. System. p1. Pag. Clase PrgPromedioNotas pp = ( p1 + p2 + p3 + p4 – notaMenor ) / 3 . System.out. pf = Math. Muestre el promedio de las notas redondeado a dos decimales.leerChar( ) . 310 . } while ( opc=='s' || opc=='S' ) . System.out.Desarrollo de la Codificación.println ( “ El promedio final del alumno es: ” + pf ) . Juan José Flores Cueto.round (pf) . pf = ( pp + ep + ef ) / 3 . Continúa… Etapa 04 .Ing.println ( “ Desea continuar (si=s/ no=n)?: ” ) . opc=Lectura. } } 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. System.println ( “ La parte entera del número es: ” ) . Desarrollar un programa en Java que permita ingresar un número cualquiera con parte decimal y muestre la parte entera del número.floor (numero * 1000 + 0.println ( Math. Clase PrgRedondearNumero package dominioDeLaAplicacion .out.println ( Math. dos y tres decimales utilizando el método floor ( ). el número redondeado sin decimales. System. System.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 82 Etapa 01 .out. numero=Lectura.5 ) / 1000 ) .out.println ( “ -----------------------------------” ) . Observe como se redondea un número con uno.Descripción del problema.5 ) / 100 ) . class PrgRedondearNumero { public static void main ( String arg [ ] ) { double numero .out.out.5 ) / 10 ) .println ( “ El número redondeado a tres decimales es: ” ) . dos y tres decimales. El parámetro dado debe ser double.println ( Math. System.println ( “ El número redondeado es: ” ) .leerDouble( ) . System. System.out.println ( “ El número redondeado a un decimal es: ” ) .Lectura .out. import biblioteca.println ( “ Ingrese un número con decimales: ” ) .floor (numero) ) . Etapa 04 .5 para que en el segundo cálculo tenga efecto de redondeo perfecto. System. System.out. System.out.Desarrollo de la Codificación.5) ) . 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.floor (numero * 100 + 0. System.floor (numero+0.println ( Math. 311 .out. Pag.out.out.println ( “ El número redondeado a dos decimales es: ” ) . System. System.floor (numero * 10 + 0. } } ¿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. y el número redondeado a uno. } } Pag. boletos = Lectura.Lectura . class PrgSorteo { public static void main ( String arg [ ] ) { double num . do { System. import biblioteca.println ( “ Ingrese el total de boletos: ” ) . Desarrollar un programa en Java que permite realizar un sorteo en base a un número determinado de boletos.out.Desarrollo de la Codificación. int boletos. } while (ganador == 0) .round(num) . 312 . ganador .Ing.random( ) .Descripción del problema. System. Sugerencia: Utilice el método random ( ) de la clase Math para generar el número del boleto ganador.println ( “ El número ganador es: ” + ganador ) . Problema 83 Etapa 01 . ganador = (int) Math. Juan José Flores Cueto. if (boletos > 0) { do { num = boletos * Math.out.leerInt( ) . Clase PrgSorteo package dominioDeLaAplicacion . } } while ( boletos < 0 ) . Etapa 04 . } } Pag.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 84 Etapa 01 .leerLong( ) . i <= num. 313 .Descripción del problema.Lectura .println ( sumaCubos ) .Desarrollo de la Codificación.out. System.out.println ( “ Ingrese un numero cualquiera: ” ) . System. num = Lectura.3) .out. class PrgSumaCuadradosCubos { public static void main ( String arg [ ] ) { long num. for ( int i=1.pow (i.2) .out.print ( “ La suma de cubos de 1 hasta ” + num + “ es: ” ) . Etapa 04 . i++ ) { sumaCuad += Math. Se deberá ingresar un número por teclado y mostrar los resultados. System. } System.pow (i.println ( sumaCuad ) . Desarrollar un programa en Java que permita calcular la suma de cuadrados y la suma de cubos de los “n” primeros números. Clase PrgSumaCuadradosCubos package dominioDeLaAplicacion . sumaCubos = 0 . System.out.print ( “ La suma de cuadrados de 1 hasta ” + num + “ es: ” ) . sumaCubos += Math. import biblioteca. sumaCuad = 0. seno = Math.out. if (anguloGrados < 0 || anguloGrados > 360 ){ System. class PrgSenCos { public static void main ( String arg [ ] ) { double anguloGrados. import biblioteca.println ( “ Ingrese un ángulo en grados entre 0 y 360: ” ) .out. Problema 85 Etapa 01 . do{ System.out. Desarrollar un programa en Java que permita ingresar un ángulo no mayor de 360 grados ni menor de 0 grados. Para esto. de un ángulo ingresado por teclado hay que convertirlo primero al sistema radial.cos( anguloRadianes ) . } } ¿Qué hay de nuevo en la codificación? Observe el uso de los métodos toRadians ( ). coseno = Math.Descripción del problema. anguloRadianes = Math. Etapa 04 . coseno = 0 . } }while(anguloGrados < 0 || anguloGrados > 360) . sin ( ) y cos ( ) de la clase Math: Es importante mencionar que Java trabaja con el sistema radial y para obtener las razones trigonométricas.Lectura . 314 . 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. Juan José Flores Cueto. System. intente otra vez: ” ). Clase PrgSenCos package dominioDeLaAplicacion .Ing.Desarrollo de la Codificación.out. anguloRadianes. seno y coseno.println ( “El dato ingresado es incorrecto.toRadians( anguloGrados ) .println ( “ y el cos [” + anguloGrados + “ ] = ” + coseno ) . System.sin( anguloRadianes ) .leerDouble( ) . seno = 0. utilizamos el método toRadians ( ) de la clase Math. Mostrar como resultado el seno y el coseno del ángulo ingresado. anguloGrados = Lectura.println ( “ El sen [” + anguloGrados + “ ] = ” + seno ) . Pag.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. Para ello. Etapa 04 . 316 .Desarrollo de la Codificación. } } ¿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.println ( “ La pendiente de la resta es = ” + tangente ) . anguloGrados = Lectura. Desarrollar un programa en Java que permita ingresar un ángulo de inclinación de la recta con respecto al eje x. System. tangente = Math. class PrgTangente { public static void main ( String arg [ ] ) { double anguloGrados.toRadians(anguloGrados) . anguloRadianes. Mostrar como resultado la pendiente de la recta.out. Pag. import biblioteca.Lectura .Descripción del problema.out. utiliza el ángulo de inclinación de la recta. Problema 86 Etapa 01 .tan(anguloRadianes) .leerDouble( ) . tal y como se muestra: tangente = Math. expresado en el sistema radial.println ( “ Ingrese el ángulo de inclinación de la recta: ” ) . System.Ing. anguloRadianes = Math. Clase PrgTangente package dominioDeLaAplicacion . tangente = 0 .tan(anguloRadianes) . Juan José Flores Cueto. System. Desarrollar un programa en Java que permita ingresar los catetos de un triángulo perpendicular. 2) + Math. 317 .Desarrollo de la Codificación.605551275463989 Pag. 2) ) .pow ( ). Luego se obtiene la raíz cuadrada con Math.println ( “ Ingrese el segundo cateto: ”) . } } La fórmula para este caso sería: (hipotenusa)2 = (cateto1)2 + (cateto2)2 .pow (cateto2.out.println ( “ La hipotenusa del triángulo es: ” + hipotenusa) . El resultado obtenido. se suman.Lectura . class PrgHipotenusa { public static void main ( String arg [ ] ) { double cateto1. al elevar al cuadrado cada uno de los catetos.leerDouble( ) .pow (cateto1.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 87 Etapa 01 . Se ingresan los catetos por el teclado y son elevados al cuadrado con Math. Clase PrgHipotenusa package dominioDeLaAplicacion . Calcular y mostrar la hipotenusa del tríangulo.out. Etapa 04 .Descripción del problema. cateto2 = Lectura.sqrt ( ) y finalmente se muestra el resultado almacenado en la variable hipotenusa. System.out. import biblioteca. cateto1 = Lectura. Ejemplo: Ingrese el primer cateto: 2 Ingrese el segundo cateto: 3 La hipotenusa del triángulo es: 3. hipotenusa .println ( “ Ingrese el primer cateto: ” ) . cateto2. hipotenusa = Math.sqrt ( Math. System.leerDouble( ) . System.Descripción del problema. anguloGrados = Math. Sabemos que Math. Calcular y mostrar el ángulo de las coordenadas del punto en grados.out. 318 .println ( “ Ingrese la abscisa(x) del punto: ” ) .Desarrollo de la Codificación. Clase PrgPunto package dominioDeLaAplicacion .println ( “ Ingrese la ordenada(y) del punto: ” ) .atan2(ordenada. abscisa = Lectura. anguloRadianes .leerDouble( ) . anguloRadianes = Math.atan ( ) retorna un valor double con el arcotangente de un ángulo expresado en radianes.print ( “ El ángulo en grados de [” + ordenada + “.out. abscisa. Juan José Flores Cueto.toDegrees(anguloRadianes) .Lectura .println ( abscisa + “] es: ” + anguloGrados) . Etapa 04 . } } ¿Qué hay de nuevo en la codificación? Observe el uso de los métodos atan2 ( ) y toDegress ( ) de la clase Math: anguloRadianes = Math.out. Dicho ángulo expresado en radianes debe ser un valor double enviado al método como parámetro. class PrgPunto { public static void main ( String arg [ ] ) { double ordenada. System. Pag. abscisa) . anguloGrados. System. System.out. ordenada = Lectura.” ) .leerDouble( ) . Desarrollar un programa en Java que permita ingresar la ordenada y la abscisa de un punto.toDegrees(anguloRadianes) . anguloGrados = Math.atan2(ordenada. import biblioteca.Ing. abscisa) . Problema 88 Etapa 01 . Este método nos permite obtener el valor del arcotangente de un par ordenado. Pag. 319 .CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Pero en este caso. 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). utilizando el método toDegrees ( ) de la clase Math. se ingresan por teclado la ordenada y la abcisa de un punto cualquiera en el sistema de coordenadas. se utiliza el método atan2 ( ) de la clase Math. En este caso. 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. Ing. System.Desarrollo de la Codificación.exp(num) .print ( “ El valor del número [e] elevado a [” + num ) .out. 320 .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. logaritmo . Problema 89 Etapa 01 .println ( “] es: ” + exponencial ) . Etapa 04 . System.log(num) . Juan José Flores Cueto.Lectura . } } ¿Qué hay de nuevo en la codificación? Observe el uso de los métodos exp ( ) y log ( ) de la clase Math: exponencial = Math. System. logaritmo = Math. Clase PrgExpLog package dominioDeLaAplicacion . System.out.Descripción del problema. logaritmo = Math. exponencial. class PrgExpLog { public static void main ( String arg [ ] ) { double num. Desarrollar un programa en Java que permita ingresar un número cualquiera.leerDouble().log(num) .out.exp(num) .println ( num + “] es: ” + logaritmo) . num=Lectura.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. System. import biblioteca. exponencial = Math.print ( “ El valor del logaritmo [en base e] del número [” ) . A continuación se presentan algunas soluciones a problemas utilizando básicamente el método random ( ) de la clase Math. 321 .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. desarrollados con la finalidad de mejorar su comprensión del tema y sus capacidades lógicas. Pag. Analizar cada uno de las soluciones y desarrolle sus propias conclusiones. Descripción del problema. estado = 1 . 5. se suman los puntos de las dos caras que quedan hacia arriba.leerString ( ) . 3 o 12 en el primer lanzamiento (resultado que en los casinos reciben el nombre de “craps”). Problema 90 Etapa 01 . dado1 = ( int ) (1 + ( Math. el jugador debe seguir tirando los dados hasta “lograr su punto”. Si la suma es 4. Lectura.println ( “Lanzar dados” ) . el jugador gana. dado2 = ( int ) (1 + ( Math. suma1 = 0.println ( “Dado2 : ” + dado2 ) . System. dado2 = 0.println ( “Dado1 : ” + dado1 ) .random ( ) * 6 ) ) . Si la suma es 2. estado = 0 .out. la casa gana).out.Desarrollo de la Codificación. El jugador perderá si tira un 7 antes de lograr su punto.5 y 6 puntos. Para ganar. cada uno de los cuales tiene 6 caras. 9. opc2 = “ ” . 322 . 4 . nf . Etapa 04 . import biblioteca. las caras contienen 1. class PrgLanzarDados1 { public static void main ( String arg [ ] ) { double n1. 8. System.Ing. suma2 = 0. int dado1 = 0. Si la suma es 7 o 11 en el primer lanzamiento. 2.* . el jugador pierde (es decir. 10 en el primer lanzamiento. 6. Clase PrgLanzarDados1 package dominioDeLaAplicacion . suma1 = dado1 + dado2 . n2. 3. n3. Pag. esto suma se convierte en el punto del jugador. Una vez que los dados quedan en reposo. if ( suma1 == 7 || suma1 == 11 ) { opc1 = “s” .out. String opc1 = “ ”. Juan José Flores Cueto. do { System. Un jugador lanza dos dados.random ( ) * 6 ) ) . random ( ) * 6 ) ) . opc2 = “s” .println ( “Dado2 : ” + dado2 ) . if ( suma1 == suma2 ) { estado = 1 . else System. 323 . if ( estado == 1 ) System. dado2 = ( int ) (1 + ( Math.out.println ( “Dado1 : ” + dado1 ) . } } while ( opc2 != “s” ) . opc2 = “s” .out.out. Clase PrgLanzarDados1 } else if ( suma1 == 2 || suma1 == 3 || suma1 == 12 ) { opc1 = “s” .Desarrollo de la Codificación. } else if ( suma2 == 7 ) { estado = 0 . Lectura. opc1 = “s” .println ( “El jugador pierde ” ) . } else { do { System. dado1 = ( int ) (1 + ( Math.println ( “Lanzar dados” ) . System. System.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Continúa… Etapa 04 . suma2 = dado1 + dado2 .random ( ) * 6 ) ) .leerString ( ) .println ( “El jugador gana” ) . } }while ( opc1 != “s” ) . estado = 0 . } } Pag.out. opc1 = “s” .out. estado = 1 . dado2 = ( int ) (1 + ( Math. estado = 0 . Etapa 04 . } else { Pag.random ( ) * 6 ) ) . char opc3 = ‘n’ .out. suma1 = 0. dado1 = ( int ) (1 + ( Math. do { System. Problema 91 Etapa 01 . System. estado = 0 .* . opc2 = “ ” .Descripción del problema. opc2 = “ ” . suma2 = 0.random ( ) * 6 ) ) .println ( “Lanzar dados” ) .Desarrollo de la Codificación. } else if (suma1 == 2 || suma1 == 3 || suma1 == 12) { opc1 = “s” . Lectura.println ( “Dado1 : ” + dado1 ) . class PrgLanzarDados2 { public static void main ( String arg [ ] ) { int dado1 = 0. Clase PrgLanzarDados2 package dominioDeLaAplicacion .out.out.println ( “Dado2 : ” + dado2 ) . System. suma1 = dado1 + dado2 . Juan José Flores Cueto. Modificar el programa del problema anterior. 324 .Ing. String opc1 = “ ”. dado2 = 0. if ( suma1 == 7 || suma1 == 11 ) { opc1 = “s” .leerString ( ) . do { opc1 = “ ” . de tal forma que se muestre un mensaje preguntando si desea volver a tirar los dados. import biblioteca. } } Pag. } } while ( opc2 != “s” ) . } else if ( suma2 == 7 ) { estado = 0 .out. dado1 = ( int ) (1 + ( Math.out.println ( “ El jugador gana ” ) .println ( “Desea volver a jugar [s/n] ” ) .leerString ( ) . Lectura. opc1 = “s” .random ( ) * 6 ) ) .println ( “ El jugador pierde ” ) .println ( “Dado1 : ” + dado1 ) . else System. 325 . Clase PrgLanzarDados2 do { System.out.out. suma2 = dado1 + dado2 . } while ( opc3 != ‘n’ ) . opc3 = Lectura. opc2 = “s” .println ( “Dado2 : ” + dado2 ) .out.leerChar ( ) . } } while ( opc1 != “s” ) .println ( “Lanzar dados” ) .Desarrollo de la Codificación.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Continúa… Etapa 04 .random ( ) * 6 ) ) . System. if ( estado == 1 ) System. System. dado2 = ( int ) (1 + ( Math. opc2 = “s” . System.out. if ( suma1 == suma2 ) { estado = 1 . opc1 = “s” . if (moneda == 1) cont1 ++ .leerInt ( ) . Clase PrgLanzarMoneda package dominioDeLaAplicacion . class PrgLanzarMoneda { public static void main ( String arg [ ] ) { int moneda.* .Descripción del problema. Solicitar el número de veces que se lanzará la moneda. 326 . System.out. import biblioteca.random ( ) * 2 ) ) . Problema 92 Etapa 01 .Ing. x++ ) { moneda = ( int ) (1 + ( Math.println ( “La cantidad de veces que a salido el sello es : ” + cont2 ) .Desarrollo de la Codificación. Elaborar un programa que simule el lanzamiento de una moneda. x <= cant. } System.println ( “La cantidad de veces que a salido la cara es : ” + cont1 ) . Cuentar el número de veces que aparece cada lado de la moneda. cont1 = 0. Etapa 04 . else cont2 ++ . cont2 = 0. } } Pag. Mostrar los resultados. System. cant . Juan José Flores Cueto.println ( “Cuántas veces desea Lanzar moneda ? ” ) . cant = Lectura.out.out. for ( int x = 1. println( “Presionar enter para empezar” ) . case 3 : monto = 300 . break .* . los números son: 1. case 2 : monto = 200 . char s. 5 . valor3 = 0. 3. Pag. import biblioteca.Descripción del problema.random ( ) * 7 ) ) . El premio mayor se obtiene con el número 7. Elaborar un programa que simule el juego de tragamonedas. valor1 = ( int ) (1 + ( Math. Lectura.6 y 7 opciones de ganar. Etapa 04 . Clase PrgTragamoneda1 package dominioDeLaAplicacion . class PrgTragamoneda1 { public static void main ( String arg [ ] ) { int valor1 = 0. El jugador gana cuando el número se repita tres veces.random ( ) * 7 ) ) . if ( valor1 == valor2 && valor1 == valor3 ) { s = (char) valor1 . do { System. 4. 327 . System. opc1 . 2.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 93 Etapa 01 .out. valor2 = ( int ) (1 + ( Math. valor2 = 0.leerString ( ) . switch (s) { case 1 : monto = 100 . break . valor3 = ( int ) (1 + ( Math. monto = 0 . break .Desarrollo de la Codificación.random ( ) * 7 ) ) . Los números deberán ser generados aleatoriamente.println ( valor1 + “ ” + valor2 + “ ” + valor3 ) .out. Ing. case 5 : monto = 500 . case 6 : monto = 600 .out.println ( “Usted gana : ” + monto + “Soles ” ) . case 7 : monto = 1000 . Clase PrgTragamoneda1 case 4 : monto = 400 .out. Juan José Flores Cueto. 328 . } System. break . } else System.println ( “La casa gana” ) . } while ( opc1 != ‘n’ ) .println ( “Desea volver a jugador [s/n] : ” ) . break . } } Pag. break . System. break .out.leerChar ( ) . opc1 = Lectura.Desarrollo de la Codificación. monto = 0 . Continúa… Etapa 04 . case 2 : monto=200 .leerString ( ) . valor2=( int ) (1 + ( Math. valor3=( int ) (1 + ( Math. Lectura.random ( ) * 7 ) ) . 329 . do { System. import biblioteca. acumonto = 0 . Pag. Clase PrgTragamoneda2 package dominioDeLaAplicacion . class PrgTragamoneda2 { public static void main ( String arg [ ] ) { int valor1 = 0. Etapa 04 . System. char s. switch ( s ) { case 1 : monto=100 .random ( ) * 7 ) ) .opc1 .random ( ) * 7 ) ) .println ( “Presionar enter para empezar” ) .out. break .* .out. if ( valor1 == valor2 && valor1 == valor3 ) { s= (char) valor1 . valor3 = 0. valor1=( int ) (1 + ( Math. valor2 = 0.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 94 Etapa 01 .println ( valor1 + “ ” + valor2 + “ ” + valor3 ) . break . de tal forma que se muestre la cantidad acumulada del dinero ganado en el tragamoneda.Descripción del problema. monto = 0. Modificar el programa del problema anterior.Desarrollo de la Codificación. out. System. } acumonto = acumonto + monto . System. break .println ( “Usted gana : ” + monto ) . case 6 : monto=600 .println ( “El dinero acumulado ganado es : ” + acumonto ) . opc1=Lectura.out.out. Juan José Flores Cueto.leerChar ( ) .Ing. break . 330 . break .println ( “Desea volver a jugador [s/n] : ” ) .println ( “La casa gana” ) . case 4 : monto=400 . Clase PrgTragamoneda2 case 3 : monto=300 . System. } while ( opc1! = ‘n’ ) . case 5 : monto=500 . case 7 : monto=1000 . } } Pag. Continúa… Etapa 04 . break . break .out. monto = 0 . } else System.Desarrollo de la Codificación. Descripción del problema.println ( “Aprendiendo a Multiplicar” ) . opc1 . resul1 = 0. import biblioteca. System. El programa deberá preguntar ¿Cuánto es 6 por 7?. Desarrolle un programa que ayude a un estudiante de primaria a aprender a multiplicar. Las computadoras están desempeñando un papel cada vez más importante en la educación.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 95 Etapa 01 . 331 . System.leerInt ( ) .out. valor1 = ( int ) (1 + ( Math. resul2 = Lectura. Etapa 04 . class PrgMultiplicacion { public static void main ( String arg [ ] ) { int valor1 = 0.println ( “Respuesta correcta… Muy bien” ) . opc1 = Lectura.out.println ( “¿Cuánto es ” + valor1 + “ por ” + valor2 + “ ?” ) . } } Pag. Clase PrgMultiplicacion package dominioDeLaAplicacion . valor2 = 0. resul2 = 0 . El programa verificara si la respuesta es correcta.println ( “Desea volver a intentarlo [s/n] : ” ) .leerChar ( ) . } while ( opc1 != ‘n’ ) . Utilice números aleatorios para producir dos enteros positivos de un solo digito.out.out. System.out. Lectura.random() * 9 ) ) . Si es correcta mostrará un mensaje ¡Muy bien! y si es incorrecto mostrará el mensaje ¡No es correcto. do { System.Desarrollo de la Codificación.random() * 9 ) ) .println ( “No es la respuesta correcta… Vuelva a intentarlo” ) . El estudiante deberá ingresar la respuesta. else System. resul1 = valor1 * valor2 .leerString ( ) .* . char s. valor2 = ( int ) (1 + ( Math.out. if ( resul1 == resul2 ) System.println ( “Ingresar resultado de la multiplicación : ” ) . por favor intente otra vez!. System. Clase PrgMenuOperaciones1 package dominioDeLaAplicacion . System.out. resul1 = 0. signo = ‘+’ .out.println ( “[5] Salir ”). valor1=( int ) (1 + ( Math. de tal forma que se muestre un menú de opciones donde permita sumar.println ( “[2] Restar ”). System.Ing.out. restar.out. Se permitirá al estudiante contestar la misma pregunta una y otra vez hasta que responda correctamente. System. 332 .random ( ) * 9 ) ) .println ( “[1] Sumar ”). valor2 = 0. do { System. valor2=( int ) (1 + ( Math.out.Descripción del problema. import biblioteca. Etapa 04 . break .out. switch ( op ) { case 1 : resul1 = valor1 + valor2 .leerInt ( ) .println ( “Elegir opcion : ” ) .println ( “[4] Dividir ”). Pag. Juan José Flores Cueto. operacion = “Suma” .out.println ( “Menú de operaciones” ) . op=Lectura. System.println ( “[3] Multiplicar ” ) . op . resul2 = 0.println ( “-----------------------------” ) . class PrgMenuOperaciones1 { public static void main ( String arg [ ] ) { int valor1 = 0.* . signo = ‘ ’ .random ( ) * 9 ) ) . System.Desarrollo de la Codificación. System. Modificar el programa del problema anterior. String operacion = “ ” . char opc.out. Problema 96 Etapa 01 . multiplicar y dividir dos números generados al azar. break .CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Continúa… Etapa 04 .println ( “Ingresar resultado de la ” + operacion + “ :” ) . resul2 = Lectura.out.Desarrollo de la Codificación.valor2 .out. case 4 : resul1 = valor1 / valor2 .leerInt ( ) . operacion = “División” . } while ( op != 5 ) .out.println ( “Muy bien” ) .out. case 5 : System. break . case 3 : resul1 = valor1 * valor2 . operacion = “Multiplicación” . break .println ( “¿Cuánto es ” + valor1 + “ ” + signo + “ ” + valor2 + “ ?” ) . Clase PrgMenuOperaciones1 case 2 : resul1 = valor1 . por favor trata otra vez” ) . break . if ( resul1 != resul2 ) System. operacion = “Resta” . } } Pag. System. do { System. signo = ‘-’ . signo = ‘/’ .println ( “No es. 333 . signo = ‘*’ . } while ( resul1 != resul2 ) .exit (0) . } System. String operacion = “ ” . multiplicar y dividir dos números al azar. import biblioteca. op = Lectura.out. System.println ( “[5] Salir ”). switch ( op ) { case 1 : resul1 = valor1 + valor2 . cont2 = 0 .println ( “Menú de operaciones” ) .println ( “-----------------------------” ) . System. Clase PrgMenuOperaciones2 package dominioDeLaAplicacion . valor2 = ( int ) (1 + ( Math.println ( “[2] Restar ”). Modificar el programa del problema anterior.Desarrollo de la Codificación.random ( ) * 9 ) ) . int op.Descripción del problema.println ( “[4] Dividir ”). Juan José Flores Cueto.Ing. System. Etapa 04 .out. Mostrar la cantidad de preguntas correctas y la cantidad de preguntas incorrectas. operacion = “Suma” . signo = ‘+’ . Problema 97 Etapa 01 . do { System. restar. resul2 = 0 .leerInt ( ) . signo = ‘ ’ . System.random ( ) * 9 ) ) .out. cont1 = 0. char opc. de tal forma que se muestre un menú de opciones donde permita sumar.println ( “[1] Sumar ”).println ( “[3] Multiplicar ” ) . 334 .* .println ( “Elegir opcion : ” ) . System. System.out.out.out.out. break . class PrgMenuOperaciones2 { public static void main ( String arg [ ] ) { int valor1 = 0. Pag. resul1 = 0. valor1 = ( int ) (1 + ( Math. valor2 = 0.out. System. } System. operacion = “División” . System. } } Pag. if ( resul1 != resul2 ) { System.println ( “La cantidad de respuesta correctas fueron : ” + cont1 ) . cont1 ++ . break .out. case 3 : resul1 = valor1 * valor2 .exit (0) . System.println ( “No es.out. resul2 = Lectura. operacion = “Multiplicación” . signo = ‘/’ .println ( “La cantidad de respuestas incorrectas fueron : ” + cont2 ) . } else { System.Desarrollo de la Codificación.out. break . signo = ‘-’ .valor2 .CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Continúa… Etapa 04 .out. } } while ( op != 5 ) . case 5 : System. por favor trata otra vez” ) . Clase PrgMenuOperaciones2 case 2 : resul1 = valor1 . signo = ‘*’ . 335 .leerInt ( ) .println ( “¿Cuánto es ” + valor1 + “ ” + signo + “ ” + valor2 + “ ?” ) .println ( “Ingresar resultado de la ” + operacion + “: ” ) . break . break .out.println ( “Muy bien” ) . operacion = “Resta” . System.out. case 4 : resul1 = valor1 / valor2 . cont2 ++ . opc = Lectura. num = 0 .println ( “Ingresar número : ” ) .println ( “Adivine el número” ) .Descripción del problema.out. valor = ( int ) (1 + ( Math. System.random ( ) * 1000 ) ) . } while (num != valor ) . } } Pag.out.println ( “Desea Continuar [s/n]: ” ) . num = Lectura.out.* .leerChar ( ) .println ( “El número es demasiado chico.println ( “El número es demasiado grande.out.println ( “Felicidades adivinaste el número ” ) . Pruebe otra vez” ) . Clase PrgAdivinarNumero1 package dominioDeLaAplicacion . Pruebe otra vez” ) . Etapa 04 . do { System.Desarrollo de la Codificación. class PrgAdivinarNumero1 { public static void main ( String arg [ ] ) { int valor = 0. si la estimación del jugador es incorrecta.Ing. Elaborar un programa que permita adivinar cuál es el número entero generado al azar entre 1 y 1000. El jugador ingresará una primera estimación.out. Problema 98 Etapa 01 .out.leerInt ( ) . else if ( num > valor ) System. Juan José Flores Cueto. if ( num < valor ) System. } while ( opc != ‘n’ ) . else System. do { System. char opc = ‘ ’ . import biblioteca. 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. 336 . Cuando la respuesta sea correcta se mostrará un mensaje de felicitaciones. valor = ( int ) (1 + ( Math. num = 0. } while ( num != valor ) . System.println ( “Ingrese la cantidad de intentos : ” ) .println ( “Felicidades adivinaste el número” ) .out. num = Lectura.leerInt ( ) . } while ( opc != ‘n’ ) . do { System. Modificar el programa del problema anterior.random ( ) * 1000 ) ) .out. do { System.out. System. char opc = ‘ ’ .out. if (cont >= intentos ) { System. class PrgAdivinarNumero2 { public static void main ( String arg [ ] ) { int valor = 0. intentos.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 99 Etapa 01 . Clase PrgAdivinarNumero2 package dominioDeLaAplicacion . valor = num .println ( “Adivine el número” ) . cont ++ .Descripción del problema. Etapa 04 .println ( “Deberías haberlo hecho mejor” ) . 337 . else if ( num > valor ) System. Pruebe otra vez” ) . opc=Lectura. } } Pag.println ( “El número es demasiado grande.out.* .println ( “Ingresar número : ” ) . intentos=Lectura. cont = 0 . else System.out.out.println ( “El número es demasiado chico. Pruebe otra vez ” ) .out. de tal forma que se pueda ingresar la cantidad de intentos que se tiene para adivinar el número. Import biblioteca.leerInt ( ) .println ( “Desea Continuar [s/n]: ” ) .leerChar ( ) .Desarrollo de la Codificación. } else if ( num < valor ) System. Ing. 338 . Pag. Juan José Flores Cueto. La clase String incluye métodos que permiten examinar los caracteres individuales de una cadena para compararlos. para extraerlos como subcadenas. números y símbolos especiales almacenados en una variable de tipo texto o cadena. y para crear copias de una cadena convirtiendo todos sus caracteres a letra mayúscula o minúscula. es una clase que viene incorporada en el lenguaje de programación Java.lang. 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). JERARQUÍA DE CLASES Y HERENCIA java. sino que se crean objetos de la clase String).Object java.String El paquete java. no será necesario importar el paquete java. para ubicarlos. En consecuencia. 339 . Las conversiones son realizadas a través del método toString ( ). el cual puede ser utilizado por todas las clases Java a través de la herencia.lang. la cual permite declarar y manipular variables de tipo texto o cadena (en realidad no se declaran variables de tipo texto o cadena. incluida en el paquete java. La clase String. método definido en la clase Object.lang es el paquete principal del lenguaje Java por lo cual no se necesita importar ninguna clase incluida en dicho paquete.lang. Ejemplo: String nom = “Danae” . Pag.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 cada vez que se necesite utilizar la clase String de Java. 5. A continuación se presenta una breve descripción del uso de cada uno de los métodos de la clase String: Pag. el método necesita algunos datos. equalsIgnoreCase( ). 7. Asimismo. 16. 6. 4. trim( ). 11. 9. éste deberá almacenarse en una variable del mismo tipo o mostrarse a través de la pantalla. indexOf( ). valueOf( ). para ejecutar cualquiera de los método de la clase String. Métodos de clase: 17. 12. compareTo( ). concat( ). endsWith( ). Para el caso de los métodos de clase esto no será necesario. el operador punto (. toUpperCase( ). 2. charAt( ). 340 . éstos deben ser necesariamente proporcionados en la cantidad y tipos requeridos. En caso. 8. substring( ).) y el nombre del método de clase que se desea ejecutar. MÉTODOS La clase String presenta los siguientes métodos: Métodos de instancia: 1. toLowerCase( ). que el método devuelva un resultado. 13. el operador punto (. 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). toCharArray( ). 3. Para el caso de los métodos de clase deberá colocar la palabra String.Ing. length( ). lastIndexOf( ). se debe tener en cuenta que si. Juan José Flores Cueto. startsWith( ). 15. 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. 14. 10.) y el nombre del método de instancia que se desea ejecutar. replace( ). equals( ). el método devuelve un número entero menor que cero. resultado: x = ‘D’. Caso contrario devuelve false (falso). el método devuelve un entero mayor que cero. String cad2 = “Danae”. el primer caracter de una cadena se encuentra ubicado en la posición 0 (cero). 341 . Resultado: x = true. String cad1 = “DANAE”. cad1 = "Hola". String cad1 = “Hola Danae”. String cad1 = “Hola Danae”.equalsIgnoreCase(cad2). Resultado: equals(String) Devuelve true (verdadero) si la cadena coincide con la cadena colocada como parámetro. String cad1 = “Danae”. Resultado : cadena = "Hola a todos” endsWith(String) Devuelve true (verdadero) si el final de la cadena coincide con la cadena colocada como parámetro. Resultado: x < 0 (cad1<cad2). String cad2 = “Danae”. x = cad1. boolean x = cad1. String cad2 = “Danae”. cad2 = " a todos". Caso contrario devuelve false (falso). Pag. boolean x = cad1. String cad1 = “Hola Danae”. cadena = cad1. compareTo(String) Si la cadena es alfabéticamente menor que la cadena colocada como parámetro. String cad1. Es importante mencionar que en Java. cadena.concat (cad2). Si las dos cadenas son alfabéticamente iguales devuelve un número cero y si la cadena es alfabéticmente mayor que la cadena colocada como parámetro.charAt(5).compareTo(cad2). boolean x.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA CLASE String MÉTODOS DE INSTANCIA DESCRIPCIÓN USO charAt(int) Devuelve el caracter que encuentre en la posición indicada por la variable entera o número entero colocado como parámetro. Resultado: x = true. int x = cad1. equalsIgnoreCase(String) Este método realiza la misma función que el método equals ( ) pero la comparación la realiza sin tener en cuenta las letras minúscula y mayúscula. String cad2 = “Hola Pedro”.equals(cad2). concat(String) Este método permite juntar dos cadenas en una sola cadena. cad2. char x = cad1.endsWith(cad2). También se puede especificar un segundo parámetro a partir del cual se empieza a buscar hacia atrás. int x = cad1. int x = cad1. String cad1 = “Hola Danae”.5 ). int x = cad1. lastIndexOf(String) Pag.int) indexOf(String) Devuelve la posición de la cadena en la que aparece por primera vez el caracter colocado como parámetro. MÉTODOS DE INSTANCIA DESCRIPCIÓN x = true. También se puede especificar un segundo parámetro a partir del cual se empieza a buscar hacia delante.lastIndexOf( “lo”. int x = cad1.3 ). Resultado: x = 8. int) Resultado: x = 5. lastIndexOf(char) Resultado: x = 8. String cad1 = “Hola Danae”. String cad1 = “Hola Danae”.Ing. String cad1 = “Hola Danae”.lastIndexOf(‘a’).int) Resultado: x = 2. int x = cad1. Resultado: x = 8. int x = cad1.indexOf( “ana” ). indexOf(String. indexOf(char) Resultado: x = 5.lastIndexOf( “ana” ).indexOf(‘D’). 342 . indexOf(char. Resultado: x = 3.6). USO String cad1 = “Hola Danae”. String cad1 = “Hola Danae”. int x = cad1.int) Devuelve la posición de la cadena en la que aparece por última vez el caracter colocado como parámetro.lastIndexOf(‘a’. Juan José Flores Cueto.indexOf(‘a’. Resultado: x = 6. int x = cad1. lastIndexOf(char.5). lastIndexOf(String. String cad1 = “Hola Danae”.indexOf( “Dan”. String cad1 = “Hola Danae”. String x = cad1.‘l’.startsWith(cad2). String cad1 = “Hola Danae”. int x = cad1.substring(6. Resultado: x = “Holo Donoe”.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA MÉTODOS DE INSTANCIA DESCRIPCIÓN USO String cad1 = “Hola Danae”.substring(5). Resultado: x = true. String x = cad1. ‘D’. String x = cad1.replace(‘a’. ‘n’. Resultado: x = {‘H’. (Los vectores serán tratados en el capítulo IV). ‘o’). Resultado: x = “Danae”.char) Permite reemplazar todos los caracteres iguales al caracter colocado como primer parámetro con el caracter colocado como segundo parámetro. caso contrario devuelve false (falso). x = cad1. replace(char.‘o’. String x = cad1.trim(). length() Devuelve la longitud de una cadena. toCharArray() Convierte una cadena específica en un vector de caracteres. 343 .toCharArray(). String cad1 = “Hola Danae”.‘e’}. String cad1 = “ Hola Danae ”. startsWith(String) Devuelve un valor true (verdadero) si el comienzo de la cadena coincide con la cadena colocada como parámetro.‘ ’. String cad1 = “Hola Danae”. Es decir. toLowerCase() Convierte las letras de una cadena en letras minúsculas. Resultado: x = 10. String cad1 = “Hola Danae”. char[ ] x = cad1. boolean x.toLowerCase(). Resultado: x = “ana”. empezando desde la posición indicada en el primer parámetro hasta el final o hasta una posición anterior a la indicada en el segundo parámetro del método. String cad2 = “Hola”. String cad1 = “Hola Danae”. Resultado: x = “Hola Danae”. Resultado: x = “hola danae”. String x = cad1.length(). trim() Permite eliminar los espacios en blanco del inicio y del final de una cadena.int) Devuelve una subcadena a partir de la cadena especificada. ‘a’. el número de caracteres que tiene la cadena. ‘a’. Pag. String cad1 = “Hola Danae”.‘a’.9). substring(int) substring(int. valueOf(double) String.valueOf(pi). double pi = 3. 344 . int. Resultado: x = “HOLA DANAE”.valueOf(float) String. Analice cada una de las siguientes soluciones. String x = String. toUpperCase() Convierte las letras de una cadena en letras mayúsculas.valueOf(boolean) String.1416”.valueOf(int) String.valueOf(char[ ]) String.Ing.int) DESCRIPCIÓN USO Método de clase que permite convertir los valores de otros tipos de datos o variables a una cadena. Pag.valueOf(long) String.toUpperCase().1416.valueOf(Object) String. resultado: x = “3. con la finalidad de mejorar la comprensión del tema tratado. String x = cad1.valueOf(char[ ]. MÉTODOS DE INSTANCIA DESCRIPCIÓN USO String cad1 = “Hola Danae”. A continuación. MÉTODO DE CLASE String. se presentan algunas soluciones a problemas planteados utilizando algunos de los métodos de la clase String. Juan José Flores Cueto. tal y como lo hemos realizado en nuestro ejemplo: Pag.* . System. Mostrar el nombre del alumno en letras mayúscula. 345 .out.out. Nombre de la variable (objeto). Etapa 04 – Desarrollo de la codificación.println o almacenarlo en una variable (que puede ser la variable que contenía la cadena original). Clase PrgConvertirMayuscula package dominioDeLaAplicacion . System. nom = Lectura.leerString( ) .toUpperCase ( ) . El método toUpperCase ( ) se utiliza con variables de tipo String y permite convertir en letras mayúsculas el contenido de la variable que antecede al nombre del método y al operador punto (en nuestro caso la variable nom). Como el método toUpperCase ( ) nos devuelve un valor de tipo String (el contenido de la variable en letra mayúscula).out. podemos mostrar el resultado utilizando System. Nombre del método. Operador punto.toUpperCase( ) .CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 100 Etapa 01 – Descripción del problema.print ( “ Ingresar el nombre: ” ) . } } ¿Qué hay de nuevo en la codificación? Observe el uso del método toUpperCase ( ) de la clase String: nom. import biblioteca. Desarrollar un programa en Java que permita ingresar el nombre de un alumno.println ( “ El nombre en Mayúscula es: ” + nom ) . public class PrgConvertirMayuscula { public static void main(String [ ] args) { String nom . nom = nom. toUpperCase ( ) . Juan José Flores Cueto.Ing. 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. 346 . toLowerCase ( ) . Mostrar el nombre del alumno en letras minúsculas.* .out. tal y como lo hemos realizado en nuestro ejemplo: Pag.print ( “ Ingresar el nombre: ” ) . Como el método toLowerCase ( ) nos devuelve un valor de tipo String (el contenido de la variable en letra minúscula).toLowerCase( ) . Nombre del método.println o almacenarlo en una variable (que puede ser la variable que contenía la cadena original). nom = nom.leerString( ) .out. 347 . nom = Lectura. Operador punto. 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).println ( “ El nombre en Minúscula es: ” + nom ) . Nombre de la variable (objeto).CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 101 Etapa 01 – Descripción del problema. System. import biblioteca. } } ¿Qué hay de nuevo en la codificación? Observe el uso del método toLowerCase ( ) de la clase String: nom. public class PrgConvertirMinuscula { public static void main(String [ ] args) { String nom .out. Clase PrgConvertirMinuscula package dominioDeLaAplicacion . Etapa 04 – Desarrollo de la codificación. System. podemos mostrar el resultado utilizando System. Desarrollar un programa en Java que permita ingresar el nombre de un alumno. 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.Ing. Juan José Flores Cueto.toLowerCase ( ) . 348 . Pag. concat(nom2) . System. 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.out.out.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 102 Etapa 01 – Descripción del problema.out.concat(espacio) .concat (espacio) .out.toLowerCase() ) . 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).* .toUpperCase() ) . Etapa 04 – Desarrollo de la codificación. System. Desarrollar un programa en Java que permita ingresar el primer nombre y el segundo nombre de un alumno. Concatenar y Mostrar los nombres del alumno en letras mayúsculas y letra minúsculas. nom1 = Lectura.println ( “ El nombre en Mayúscula es: ”" + nombre.concat (espacio) . 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). nombre. nom1 = nom1. public class PrgConcatenarNombres { public static void main(String [ ] args) { String nom1. System.leerString( ) .leerString( ) . espacio = “ ” . Pag. nom1 = nom1. nom2. System. nombre = nom1. 349 . Es decir. Clase PrgConcatenarNombres package dominioDeLaAplicacion .concat(nom2) .println ( “ El nombre en Minúscula es: ” + nombre.println ( “ Ingresar el primer nombre del alumno: ” ) . nom2 = Lectura. import biblioteca.println ( “ Ingresar el segundo nombre del alumno: ” ) . } } ¿Qué hay de nuevo en la codificación? Observe el uso del método concat ( ) de la clase String: nom = nom. nombre = nom1. Ing. Finalmente.out. Esto permite juntar o concatenar los nombres del alumno con un espacio en blanco entre ellos en una única variable de tipo String.println. directamente con System. Juan José Flores Cueto.println (nom1. se utilizan los métodos toUpperCase ( ) y toLowerCase ( ). explicados en los problemas anteriores. También podría visualizarse directamente el resultado de juntar o concatenar dos variables de tipo String (cadenas) utilizando System. 350 .println para mostrar el nombre del alumno en letra minúscula y en letra mayúscula.out.out. Pag. como se muestra a continuación: System.concat (nom2) ) . out. String nom . Etapa 04 – Desarrollo de la codificación.length( ) < 2 ) { System. do { System. if ( nom. Consistenciar el nombre del alumno al momento de ingresarlo.* .out.out. } } ¿Qué hay de nuevo en la codificación? Observe el uso del método trim ( ) de la clase String: nom = nom. import biblioteca.println ( “ Ingresar el nombre: ” ) .trim( ) . El método trim ( ) permite eliminar los espacios en blanco que pueden existir al inicio y/o al final de una cadena contenida en una variable (en nuestro caso la cadena contenida en la variable nom). 351 . nom = nom.length( ) < 2 ) . Desarrollar un programa en Java que permita ingresar el nombre de un alumno. Clase PrgLongitudCadena package dominioDeLaAplicacion . System.leerString( ) . Mostrar el número de caracteres del nombre ingresado por teclado. public class PrgLongitudCadena { public static void main(String [ ] args) { int cant . 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. También observe el uso del método length ( ) de la clase String: Pag.length( ) . nom = Lectura.trim ( ) . Esto se realiza como precaución.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 103 Etapa 01 – Descripción del problema.println ( “ Nombre ingresado no válido… Reintente! ” ) . } } while (nom. cant = nom.println ( “ La cantidad de caracteres del nombre es: ” + cant ) . nom = nom. do { System. } } while (nom. Como el método length ( ) devuelve la cantidad de caracteres que tiene una variable (incluido los espacios en blanco).println ( “ Ingresar el nombre: ” ) . En nuestro ejemplo lo utilizamos como condición lógica y para almacenarlo en una variable.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. Pag.leerString( ) . 4.trim ( ) .length ( ) .out.Ing. Lu. if ( nom.out.out. 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. podemos mostrar el resultado utilizando System. nom = Lectura. Ana. José. En la líneas de código mostradas a continuación. y 5 caracteres respectivamente). la cantidad de caracteres que almacena la variable nom).println ( “Nombre ingresado no válido… Reintente! ” ) . 352 . Juan José Flores Cueto.length ( ) < 2) . Pedro. 3. como por ejemplo.println(). cant = nom. utilizarlo en una condición lógica o almacenarlo en una variable. println ( “ Ingresar el nombre: ” ) . if ( nom. } } while ( nom. luego se consistencia que tenga por lo menos 2 caracteres y luego se convierte el contenido de la variable nom en letra mayúscula.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 104 Etapa 01 – Descripción del problema.println ( “ El nombre en Mayúscula es: ” + nom ) . Consistenciar el nombre del alumno al momento de ingresarlo.toUpperCase( ) .* . Mostrar el nombre del alumno en letras mayúscula.println ( “ Nombre ingresado no válido… Reintente! ” ) . nom = Lectura. public class PrgConvertirMayuscula2 { public static void main(String [ ] args) { String nom .trim( ) . Desarrollar un programa en Java que permita ingresar el nombre de un alumno. En la codificación de este programa.out.length( ) < 2 ) { System.out. para finalmente mostrar su contenido por pantalla. se puede afirmar que esta solución es más óptima que la solución presentada en el problema 100. do { System. } } Observe el uso de los métodos trim ( ). System.out. Pag. nom = nom. Etapa 04 – Desarrollo de la codificación. 353 . import biblioteca. se debe eliminar los espacios en blanco que la variable nom pueda tener al inicio y al final del dato que contiene. Clase PrgConvertirMayuscula2 package dominioDeLaAplicacion .length( ) < 2 ) . En consecuencia. length ( ) y toUpperCase ( ) de la clase String. nom = nom.leerString( ) . toUpperCase( ) . La segunda forma nos permite obtener una subcadena desde una posición determinada hasta el final de la cadena.println ( “ Ingresar el nombre: ” ) . System. Etapa 04 – Desarrollo de la codificación.println ( “ Nombre ingresado no válido… Reintente! ” ) .println ( “ El nombre del alumno es: ” + nom ) . nom = cadena1. if ( nom. tal y como se muestra a continuación: Pag. Juan José Flores Cueto. 354 .substring(1) . Clase PrgPrimeroMayuscula package dominioDeLaAplicacion . public class PrgPrimeroMayuscula { public static void main(String [ ] args) { String nom. cadena2= “” . do { System. } } while (nom. La primera forma nos permite obtener una subcadena desde una posición inicial hasta un caracter antes de la posición final indicada.substring(1) .leerString( ) . import biblioteca. nom = nom. cadena1 = cadena1. cadena1 = nom.concat(cadena2) .1) . cadena2 = nom.Ing. Problema 105 Etapa 01 – Descripción del problema.* .out.1) .out. El método substring ( ) se utiliza de dos formas.trim( ) .substring(0.length( ) < 2 ) { System.out. cadena1= “”. cadena2 = nom. Mostrar el primer caracter del nombre ingresado en mayúsculas. Imagínese que la variable nom contiene el nombre “danae”. nom = Lectura.length( ) < 2 ) .substring(0. } } ¿Qué hay de nuevo en la codificación? Observe el uso del método substring ( ) de la clase String: cadena1 = nom. Desarrollar un programa en Java que permita ingresar el nombre de un alumno. substring (1) .toUpperCase ( ) . si deseamos obtener la primera letra de la cadena utilizamos la siguiente sentencia: cadena1 = nom. Esta es la segunda forma de utilizar el método substring ( ). Cuando manipulamos cadenas con el método substring ( ) debemos tener en cuenta que cada caracter de la cadena tiene una determinada posición. Donde. posición 0 Entonces.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA nom = “danae”. donde el número (en nuestro caso el número 1).substring (1. 355 . empezando por la posición cero (0).4) . El resultado que se obtiene es el nombre ingresado con la primera letra en mayúscula. utilizaríamos la siguiente sentencia: cadena1 = nom. Para finalizar solo será necesario juntar o concatenar ambas variables en la variable original nom.1) .concat (cadena2) . Pag. Continuando con nuestro ejemplo. indica la posición de la cadena nom donde va a comenzar la subcadena (la primera letra “a”) hasta el final de la cadena. nom = “danae”. Esto lo realizamos utilizando: cadena2 = nom. 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).substring(0. utilizando el método concat ( ). nom = cadena1. Ahora en la variable cadena1 tenemos almacenada la letra “D” y en la variable cadena2 tenemos almacenadas las letras “anae”. Ahora es necesario obtener el resto del contenido de la variable nom. una vez obtenida la primera letra del nombre se convierte a mayúscula utilizando: cadena1 = cadena1. Suponiendo que se desee obtener la subcadena “ana” de la cadena “danae” contenida en la variable nom. Esto nos permite solo obtener el primer caracter de nom (la letra “d”). public class PrgMayusculaMinuscula { public static void main(String [ ] args) { int cant .* . cadena1 = cadena1.out. Mostrar el primer caracter del nombre ingresado en mayúsculas y el resto en minúscula. En consecuencia. Clase PrgMayusculaMinuscula package dominioDeLaAplicacion .1) .out. nom = nom. En la codificación de este programa.println ( “ Nombre ingresado no válido… Reintente! ” ) .length( ) < 2) { System. Desarrollar un programa en Java que permita ingresar el nombre de un alumno. se convierte en mayúscula la primera letra del nombre y el resto se convierte en minúscula. nom = Lectura. import biblioteca. Etapa 04 – Desarrollo de la codificación.length( ) < 2 ) . se puede afirmar que esta solución es más óptima que la solución presentada en el problema 104.trim( ) . Finalmente siempre el nombre tendrá la primera letra en mayúscula y el resto en letra minúscula.println ( “ El nombre del alumno es: ” + nom ) . Pag. System. cadena2 = nom. cadena1 = “” .println ( “ Ingresar el nombre: ” ) .substring(0. toLowerCase ( ) y concat ( ) de la clase String.leerString( ) .toUpperCase( ) . cadena1 = nom. if ( nom. length ( ). nom = cadena1. 356 . Juan José Flores Cueto. Problema 106 Etapa 01 – Descripción del problema. cadena2 = cadena2.out.Ing. do { System. } } Observe el uso de los métodos trim ( ). toUpperCase ( ). } } while (nom. cadena2 = “” . substring ( ) en sus dos formas.substring(1) .concat(cadena2) . String 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.toLowerCase( ) . public class PrgNombreCompleto { public static void main(String [ ] args) { int cant .length( ) < 2) { System. } else { caracter = nom. import biblioteca.* . caracter = nom.trim( ) .toUpperCase( ).out. cadena2 = cadena2. Desarrollar un programa en Java que permita ingresar el nombre completo de un alumno (nombres y apellidos en una sola variable).out. Etapa 04 – Desarrollo de la codificación.out.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 107 Etapa 01 – Descripción del problema. x<cant. nom = nom.1) . } } } System. } } ¿Qué hay de nuevo en la codificación? Pag.substring(x+2) .equals ( “ ” ) ) { cadena1 = nom. } } while (nom.toLowerCase( ) .length( ) < 2) .println ( “ Ingresar el nombre: ” ) . nom = cadena1 + caracter + cadena2 . caracter = caracter.x+1) .toUpperCase( ) . if ( nom.println ( “ Nombre ingresado no válido… Reintente! ” ) .leerString( ) . cadena2 = nom.println ( “ El nombre del alumno es: ” + nom ) . cadena1 = cadena1.cadena2 = “”.length( ) . nom = cadena1.substring(x.substring(0. cadena1 = “”. cant = nom. String nom.concat(cadena2) . caracter .substring(0. x++) { if ( x==0) { cadena1 = nom.substring(x+1. nom = Lectura. if (caracter. x+2) . cadena2 = nom. Clase PrgNombreCompleto package dominioDeLaAplicacion .substring(1) . do { System. Mostrar el primer caracter de cada palabra del nombre en mayúsculas y el resto de cada palabra en minúscula. x+1) . 357 . for (int x=0. length( ) . } else { caracter = nom. mientras que el resto de las letras estén en letra minúscula. Este valor devuelto se evalúa en la estructura de decisión if.substring(1) . Danae a lessandra flores bertolotti. x++) { if (x==0) { cadena1 = nom.concat(cadena2) .1) . ¿Qué sucede? Modificando la solución anterior para poder considerar la problemática anterior tendríamos la siguiente variación: cant = nom. en caso contrario nos devuelve un valor falso (false).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). cadena2 = cadena2.substring(x. Nosotros desearíamos que la primera letra de cada nombre y de cada apellido de un alumno este en letra mayúscula. Al inicio utilizamos parte de la solución del problema 105. 358 .equals( “ ” ) ) { sw = true . for (int x=0. x+1) . el método equals ( ) nos devuelve un valor verdadero (true). if (caracter. El proceso se repite hasta llegar al final de la cadena.Ing. sw = false . } else { if (sw) { Pag. cadena1 = cadena1. Ahora considere si entre los nombres existe más de un espacio en blanco. A cadena1 caracter cadena2 Después se concatenan las tres variables y se almacenan en la variable nom. Juan José Flores Cueto. x<cant. Si al comparar el contenido de las dos cadenas resulta que ambas variables son iguales. nom = cadena1. Si el caracter resulta ser un espacio en blanco entonces se almacena y se convierte en letra mayúscula la letra siguiente al espacio en blanco. El siguiente esquema muestra como se debe almacenar parcialmente el nombre del ejemplo en la variable nom. Imagínese que la variable nom contiene el siguiente nombre: nom = “danae alessandra flores bertolotti” .toLowerCase( ) .toUpperCase( ) . cadena2 = nom. Observe el uso del método equals ( ) de la clase String: if (caracter. Después obtenemos caracter por caracter y evaluamos si el caracter obtenido es un espacio en blanco.substring(0. cadena2 = nom. 359 . Pag.substring(x+1) .x) . caracter = caracter.substring(x.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA cadena1 = nom. x+1) .toUpperCase( ). nom = cadena1 + caracter + cadena2 . sin preocuparnos de la cantidad de espacios en blanco que pueda existir entre dos nombres. sw = false . } } } } En esta parte modificada de la solución se utiliza un centinela (o flag) que nos permite indicar el momento preciso para realizar la conversión de la primera letra del nombre o apellido a letra mayúscula.substring(0. caracter = nom. import biblioteca.length( ) < 2 ) { System. se le aumenta uno a la variable cont (que esta trabajando como contador de espacios encontrados en la variable nom).println ( “ Ingresar el nombre: ” ) . } } Observe el uso de los métodos trim ( ). Mostrar el número de caracteres blancos o espacios en blanco que existan.x<cant. String nom. if ( nom.trim( ) .Ing.substring(x. En la codificación de este programa. Clase PrgLongitudCadenaBlanco package dominioDeLaAplicacion .x+1) . if (caracter.caracter .leerString( ) . Problema 108 Etapa 01 – Descripción del problema. nom = Lectura. Etapa 04 – Desarrollo de la codificación.cant. nom = nom. do { System.out. 360 .length( ) .println ( “ Nombre ingresado no válido… Reintente! ” ) . for (x=0.cont=0 .x++) { caracter = nom. Desarrollar un programa en Java que permita ingresar los apellidos y nombres de un obrero (en una sola variable). Pag. Si el caracter es igual a un espacio en blanco (“ “).equals ( “ ” ) ) { cont ++ . public class PrgLongitudCadenaBlanco { public static void main(String [ ] args) { int x. Juan José Flores Cueto. substring ( ) y equals ( ) de la clase String. se evalúa caracter por caracter (de la variable nom).out. } } System.length( ) < 2 ) .* . } } while (nom. cant = nom. length ( ).out.println ( “ La cantidad de espacios: ” + cont ) . substring(x. import biblioteca.println ( “ La cantidad de caracteres sin contar espacios: ” + cant ) . En la codificación de este programa. Pag.x. String nom. System. 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). substring ( ) y equals ( ) de la clase String. cant = nom.println ( “ Nombre ingresado no válido… Reintente! ” ) . cadena = “”. } } while (nom.out.out. nom = Lectura.equals ( “ ” ) ) { cadena = cadena. if ( nom.println ( “ Ingresar el nombre: ” ) . caracter . Etapa 04 – Desarrollo de la codificación.trim( ) . Clase PrgLongitudCadenaNoBlanco package dominioDeLaAplicacion . x<cant.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 109 Etapa 01 – Descripción del problema. que equivale a la cantidad de caracteres de la variable nom diferentes a espacios en blanco. public class PrgLongitudCadenaNoBlanco { public static void main(String [ ] args) { int cant.length( ) .x+1) . Al final se obtiene la longitud de la variable cadena. Mostrar el número de caracteres del nombre ingresado por teclado que no sean espacios en blanco.length( ) .length( ) < 2 ) . } } cant = cadena. se evalúa caracter por caracter (de la variable nom).leerString( ) .concat(caracter) . nom = nom. if ( !caracter. length ( ). for (x=0.* . } } Observe el uso de los métodos trim ( ). x++) { caracter = nom. 361 .out. Desarrollar un programa en Java que permita ingresar los apellidos y nombres de un obrero (en una sola variable). do { System.length( ) < 2 ) { System. public class PrgLongitudCadenaBlancoNoBlanco { public static void main(String [ ] args) { int x.println ( “ La cantidad de caracteres sin contar espacios: ” + ( cant . fo r(x=0.cont ) ) .println ( “ Ingresar el nombre: ” ) . Mostrar el número de caracteres que no son espacios en blanco y el número de caracteres que son espacios en blanco. 362 .x+1) .trim( ) .out. Clase PrgLongitudCadenaBlancoNoBlanco package dominioDeLaAplicacion .* . Problema 110 Etapa 01 – Descripción del problema.out.out. if (caracter. Juan José Flores Cueto.out. x<cant. Pag. import biblioteca. String nom.println ( “ Nombre ingresado no válido… Reintente! ” ) . Etapa 04 – Desarrollo de la codificación.Ing. if ( nom. x++) { caracter = nom.length( ) < 2 ) { System. cant.leerString( ) . } } En la codificación de este programa. cont = 0 . caracter .println ( “ La cantidad de espacios: ” + cont ) . para obtener el número de espacios en blanco contenidos en la variable nom. Al final se obtiene la longitud total de la cadena nom y realizando una simple resta se obtiene el número de caracteres de la variable nom que no son espacios en blanco. cant = nom. nom = nom. Desarrollar una solución que permita ingresar los apellidos y nombres de un obrero (en una sola variable). } } while (nom.length( ) . System.substring(x.equals ( “ ” ) ) { cont ++ . nom = Lectura. se emplea la misma estrategia que la utilizada en la solución del problema 108. } } System. do { System.length( ) < 2 ) . public class PrgTotalVocales1 { public static void main(String [ ] args) { int cant.println ( “ Nombre ingresado no válido… Reintente! ” ) .out. } } Pag.trim( ) .println ( “ Ingresar el nombre: ” ) . d = 0.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 111 Etapa 01 – Descripción del problema.* . String nom . x .toLowerCase( ) .length( ) . x++) { c = nom. Etapa 04 – Desarrollo de la codificación.println ( “ El Total de Vocales es: ” + cont ) .length( ) == 0 ) { System. switch (c) { case 97 : // a case 101 : // e case 105 : // i case 111 : // o case 117 : cont ++ . Mostrar el número de vocales que hay en el nombre ingresado. char c = ‘ ’ .out. Clase PrgTotalVocales1 package dominioDeLaAplicacion . if ( nom. do { System. import biblioteca.charAt(x) . cant = nom. d = (int) (c) . x<cant.length( ) == 0 ) . cont = 0. for (x=0. } } while (nom. 363 . Desarrollar una solución que permita ingresar el nombre de un alumno. nom = nom. // u } } System.out.leerString( ) . nom = Lectura. nom = nom. Pag. El caracter obtenido es evaluado para determinar si es o no una vocal.charAt (x) . ¿Qué hay de nuevo en la codificación? Observe el uso del método charAt ( ) de la clase String: nom. c = nom. letras y números).charAt (x) .Ing. 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. o y u (en forma independiente). obtenemos un caracter de la variable nom y lo almacenamos en una variable de tipo char (el método charAt ( ) devuelve un caracter). e. En nuestro caso. Modifique la solución anterior de tal forma que pueda determinar cuantas vocales almacenadas en la variable son a. 364 . 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. El método charAt ( ) se utiliza con variables de tipo String y nos permite obtener un caracter de una cadena. Juan José Flores Cueto. i. } } Pag. if ( nom. Clase PrgTotalVocalesNoVocales package dominioDeLaAplicacion .length( ) == 0 ) { System. nom = Lectura.* . char c = ‘ ’ . d = (int) (c) . Desarrollar un programa en Java que permita ingresar el nombre de un alumno. switch (c) { case 97 : // a case 101 : // e case 105 : // i case 111 : // o case 117 : cont ++ .out. do { System. // u } } System. import biblioteca. x<cant.charAt(x) . cant = nom.out. public class PrgTotalVocalesNoVocales { public static void main(String [ ] args) { int cant. Mostrar el número de vocales y el número de caracteres que no son vocales que hay en el nombre ingresado.out.length( ) .println ( “ El Total de Vocales es: ” + cont ) . x++) { c = nom.println ( “ El Total de caracteres que no son vocales es: ” + (cant – cont) ) . System.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 112 Etapa 01 – Descripción del problema. } } while (nom. d = 0 . String nom .toLowerCase( ) . Etapa 04 – Desarrollo de la codificación. nom = nom.length( ) == 0 ) .println ( “ Ingresar el nombre: ” ) . cont = 0 .leerString( ) .trim( ) .println ( “ Nombre ingresado no válido… Reintente! ” ) .out. x . 365 . nom = nom. for (x=0. Ing. Juan José Flores Cueto. 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. para poder obtener el total de caracteres que no son vocales. La diferencia es que se obtiene el total de caracteres que tiene la variable y se resta del total de vocales que tiene. Este programa es similar al programa desarrolado en el problema 111. Pag. Recuerde utilizar los equivalentes en código ASC de las consonantes en letra minúscula o en letra mayúscula. También puede modificar la solución de tal forma que permita determinar cuántas consonantes contiene la variable nom. 366 . trim( ) . i. do { System.length( ) ) .out..* .println ( “ El número de veces que se repite ” ) .CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 113 Etapa 01 – Descripción del problema.cad2. cad1 = cad1.leerString( ) . i <= total.length( ) .println ( “ la subcadena en la cadena es: ” + cont ) . i++) { subcad = cad1. cad1 = Lectura. import biblioteca. if (cad2.length( ) == 0 ) .substring (i..length( ) == 0) { System.length( ) .println ( “ Ingresar una cadena: ” ) .out. } } while (cad1.println ( “ Cadena ingresada no válido. Clase PrgCadenaSubcadena package dominioDeLaAplicacion . subcad .trim( ) ..println ( “ Cadena ingresada no válida. Reintente! ” ) .length( ) == 0 ) . cad2 = Lectura. do { System.length( ) > cad2. for (i = 0. Pag. if (cad1. cad2. Reintente! ” ) . int total. cont = 0 .leerString( ) .println ( “ Ingresar una subcadena de la primera cadena: ” ) . i + cad2. } } while (cad2. Contar y mostrar cuantas veces se repite la segunda cadena en la primera cadena ingresada. System.length( ) == 0 ) { System.equals(subcad) ) { cont ++ . public class PrgCadenaSubcadena { public static void main(String [ ] args) { String cad1. if (cad2. cad2 = cad2. if (cad1. Etapa 04 – Desarrollo de la codificación.length( ) ) { total = cad1.out. 367 .. Desarrollar un programa en Java que permita ingresar dos cadenas.out.out.out. } } System. Juan José Flores Cueto.println ( “ la segunda cadena no debe tener una longitud ” ) .out.out. } } System.out.equals (cad2) ) { System.println ( “ mayor que la primera cadena ” ) .equals (cad2) ) { System.length( ) > cad2.length( ) . Como ejemplo utilizaremos las siguientes cadenas: cad1 = “Danae” cad2 = “ana” En primer lugar determinamos que cad1 tiene una longitud mayor que cad2.println ( “ mayor que la primera cadena ” ) .println ( “ las cadenas son iguales ” ) . if (cad2. calculamos el valor de la variable total (total = 5-3 = 2).println ( “ las cadenas son iguales ” ) . Si son iguales el contador cont aumenta en 1.out. Pag.out. } else { if (cad1.cad2. Continúa. } } En primer lugar. es el caracter ubicado en la posición total de cad2.out. i + cad2.length( ) ) . se verifica que la primera cadena (cad1) tenga una longitud mayor que la segunda cadena (cad2). Etapa 04 .. } else { System. Luego. } } } } Observe el uso de los métodos trim ( ). Luego.length( ) ) { total = cad1. System.println ( “ El número de veces que se repite ” ). 368 . i++) { subcad = cad1. Este proceso se repite utilizando el siguiente caracter de cad1.out.length( ) . } else { System. El límite para la evaluación del número de veces que se repite cad2 en cad1.. System. 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 ( ).out. La parte central de la solución radica en las siguientes líneas de código: if (cad1. length ( ).Desarrollo de la codificación. i <= total.println ( “ la segunda cadena no debe tener una longitud ” ) .println ( “ la subcadena en la cadena es: ” + cont ) .substring(i. se obtiene la diferencia entre las longitudes de cad1 y cad2. for (i = 0. System. Clase PrgCadenaSubcadena } else { if (cad1. y se almacena en la variable total.Ing. substring ( ) y equals ( ) de la clase String. Después.equals (subcad)) { cont ++ . 369 . subcad = “nae” Finalmente. Pag. Primera evaluación: cad2 = “ana” y Resultado: falso. se concluye que cad2 se repite una vez en cad1. cad1 = “Danae” 0 12 Límite para la evaluación Observe que cad2 tiene una longitud=3 por lo que la última evaluación será: cad2 = “ana” y subcad= “nae” Primera evaluación: cad2 = “ana” y Resultado: falso.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. subcad = “Dan” Segunda evaluación: cad2 = “ana” y subcad = “ana” Resultado: verdadero (cont =1). println ( “ Nombre ingresado no válido… Reintente! ” ) . do { System. nom1 = Lectura. nom2 = nom2. Problema 114 Etapa 01 – Descripción del problema. import biblioteca.equals (nom2) ) { System. length ( ) y equals ( ) de la clase String. Pag.length( ) < 2 ) .leerString( ) . } } while ( nom2.out.length( ) < 2 ) .println ( “ Ingresar el nombre del segundo alumno: ” ) .trim( ) . Mostrar si los nombres ingresados son iguales o no.trim( ) . nom2 = Lectura.length( ) < 2 ) { System. 370 . Juan José Flores Cueto.length( ) < 2 ) { System.* . if ( nom1. if ( nom1.println("Nombre ingresado no válido… Reintente! ").Ing. } } } Observe el uso de los métodos trim ( ). Se comparan dos variables de tipo cadena (nom1 y nom2 respectivamente) y se determinan si ambas cadenas son iguales o no.out. Desarrollar un programa en Java que permita ingresar el nombre de dos alumnos. Etapa 04 – Desarrollo de la codificación.println ( “ Los nombres ingresados son iguales ” ) .println ( “ Ingresar el nombre del primer alumno: ” ) . Clase PrgNombresIguales package dominioDeLaAplicacion .out.out. } } while ( nom1.out. nom1 = nom1.leerString( ) . nom2 . } else { System.out. do { System.println ( “ Los nombres ingresados son diferentes ” ) . if ( nom2. public class PrgNombresIguales { public static void main(String [ ] args) { String nom1. println ( “ ------------------------------------------------. El método compareTo ( ) permite comparar dos variables de tipo String. public class PrgOrdenados1 { public static void main(String [ ] args) { String nombre1. nombre2 = Lectura. nombre1 = Lectura. entonces la variable nombre1 es mayor que la variable nombre2.compareTo (nombre2) .println (nombreMayor) .out. nombreMayor = nombre1 . 371 . System.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 115 Etapa 01 – Descripción del problema. Mostrar los nombres ordenados alfabéticamente. Desarrollar un programa en Java que permita ingresar los nombres de dos alumnos.leerString( ) .println (nombreMenor) .println ( “ Ingrese el nombre de otra persona: ” ) . System.out.println ( “ Ingrese el nombre de una persona: ” ) . entonces la variable nombre1 es menor que la variable nombre2. } else { nombreMenor = nombre2 . System. Si el valor devuelto es igual a cero (0).out. nombreMayor.out.println ( “ Nombres ordenados alfabéticamente ” ) . } } ¿Qué hay de nuevo en la codificación? Observe el uso del método compareTo ( ) de la clase String: nombre1. Si el valor devuelto es mayor que cero (0). nombre2. si el valor devuelto es menor que cero. Etapa 04 – Desarrollo de la codificación. es decir. System.out. if (nombre1. las variables nombre1 y nombre2 contiene cadenas iguales.out. entonces las cadenas son iguales.compareTo(nombre2) < 0 ) { nombreMenor = nombre1 .println ( “ ------------------------------------------------.” ) .* . import biblioteca. Clase PrgOrdenados1 package dominioDeLaAplicacion . System.out. nombreMenor.” ) . Finalmente. } System. Pag. nombreMayor = nombre2 .leerString( ) . El método permite compareTo ( ) nos devuelve un valor entero. System. nombre1 > nombre2 nombre1 = nombre2 nombre1 < nombre2 En base a esto. 3. las letras minúsculas. nombre1 = “Carmen” y nombre2 = “Juan”. nombre1 = “Pedro” y nombre2 = “Luis”. mejore la solución de tal forma que se pueda realizar la consistencia de los nombres ingresados. se realiza una comparación alfabética en la cual tienen significado las letras mayúsculas. nombre1 = “Danae” y nombre2 = “Danae”. 372 . Pag. comparemos las siguientes cadenas: 1.Ing. 2. Por ejemplo. Juan José Flores Cueto. los caracteres especiales y los espacios en blanco. Cuando se comparan dos cadenas. Etapa 04 – Desarrollo de la codificación.compareTo(nombre2) < 0 ) { nombreMenor = nombre1 .length( ) < 2 ) { System.out.println ( “ Nombre ingresado no válido.out. nombreMenor . Clase PrgOrdenados2 package dominioDeLaAplicacion .out.trim( ) . nombreMayor = nombre2 . Desarrollar un programa en Java que permita ingresar los nombres de dos alumnos (no permite el ingreso de solo espacios en blanco).println ( “ Ingrese el nombre de la segunda persona: ” ) . } else { nombreMenor = nombre2 . if (nombre1. public class PrgOrdenados2 { public static void main(String [ ] args) { String nombre1.Reintente!!! ” ) . nombre2 = nombre2.length( ) < 2 ) { System...println ( “ Ingrese el nombre de la primera persona: ” ) . import biblioteca. do { System. nombreMayor = nombre1 . nombre1 = nombre1.println ( “ Nombre ingresado no válido.* . if ( nombre1.. if ( nombre2.out. nombre1 = Lectura. Mostrar los nombres ordenados alfabéticamente. } } while ( nombre2. } } while (nombre1.trim( ) . nombre2.leerString( ) .Reintente!!! ” ) .length( ) < 2 ) .. } Pag. nombreMayor. 373 . do { System.leerString( ).length( ) < 2 ) .CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 116 Etapa 01 – Descripción del problema. nombre2 = Lectura. .println ( “Nombres ordenados alfabéticamente ” ) . Pag. System. Juan José Flores Cueto. System.out. System. System.Ing. Clase PrgOrdenados2 System.” ) .out. } } Mejore la codificación del programa. 374 .Desarrollo de la codificación.println (nombreMayor) .println ( “------------------------------------------------. Continúa.out. de tal forma que se contemple la posibilidad que los nombres ingresados sean iguales. Etapa 04 .println ( “------------------------------------------------.out.println (nombreMenor) .out..” ) . trim( ) .println ( “ Nombre ingresado no válido. } } while (nombre2.out. do { System.Reintente!!! ” ) .leerString( ) ..leerString( ) . } } while ( nombre3. nombre1 = Lectura.Reintente!!! ” ) .length( ) == 0 ) { System. if ( nombre2.out. nombre2 = nombre2.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 117 Etapa 01 – Descripción del problema.out.trim( ) . nombre3 = Lectura.length( ) == 0 ) . Desarrollar un programa en Java que permita ingresar los nombres de tres alumnos (los nombres no deben ser iguales). nombre3 . import biblioteca.trim( ) . public class PrgOrdenados3 { public static void main(String [ ] args) { String nombre1.println ( “ Ingrese el nombre de la primera persona: ” ) .* .out.length( ) == 0 ) { System.length( ) == 0 ) . Mostrar los nombres ordenados alfabéticamente.. nombre2.out...println ( “ Ingrese el nombre de la segunda persona: ” ) . if ( nombre1. Etapa 04 – Desarrollo de la codificación.println ( “ Nombre ingresado no válido.println ( “ Ingrese el nombre de la tercera persona: ” ) .println ( “ Nombre ingresado no válido. nombre2 = Lectura. nom03 = “” . if ( nombre3.Reintente!!! ” ) .length( ) == 0 ) . do { System. nombre1 = nombre1. Clase PrgOrdenados3 package dominioDeLaAplicacion . nom02 = “”. } } while ( nombre1.out..leerString( ) . nombre3 = nombre3. Pag. 375 . do { System..length( ) == 0 ) { System. String nom01 = “ ”. Luego ingrese los siguientes datos y compruebe nuevamente lo que sucede: nombre1 = “Armando”.println (nom02) .println ( “ Nombres ordenados alfabéticamente ” ) . Pag.out. nombre3 = “Armando”.compareTo(nombre1) < 0 && nombre3. } else { nom02 = nombre3 . Compruebe lo que sucede: nombre1 = “Armando”.out. Etapa 04 . nombre2 = “Armando”.compareTo(nombre2) < 0 ) { nom01 = nombre3 . nombre2 = “Armando”. nombre3 = “Beto”. if (nombre1. nom03 = nombre3 . } } if (nombre2.Desarrollo de la codificación.compareTo(nombre3) < 0) { nom01 = nombre2 .compareTo(nombre1) < 0 && nombre2.println ( “ ------------------------------------------------. nom03 = nombre1 . } } System. } else { nom02 = nombre3 . nom03 = nombre1 . System.out. } } if (nombre3. nombre2 = “Beto”. 2.compareTo(nombre3) < 0 ) { nom02 = nombre2 . Finalmente ingrese los siguientes datos. Clase PrgOrdenados3 if (nombre1. nom03 = nombre2 . System. Continúa. Modifique la codificación de la solución de tal forma que pueda mejorarla. if (nombre2.compareTo(nombre3) < 0 ) { nom02 = nombre1 . Ejecute el programa.println (nom01) . nom03 = nombre3 .out. } } Desarrolle la siguiente prueba: 1.” ) . System.compareTo(nombre2) < 0 && nombre1.compareTo(nombre2) < 0 ) { nom02 = nombre1 . 3.compareTo(nombre3) < 0 ) { nom01 = nombre1 . System..out. System.println ( “ ------------------------------------------------. ingrese los siguientes datos y compruebe lo que sucede: nombre1 = “Armando”. Juan José Flores Cueto. nombre3 = “Beto”..Ing. if (nombre1.” ) . 376 . } else { nom02 = nombre2 .println (nom03) .out. nom03 = nombre2 . nombre2 = Lectura.println ( “ Ingrese el nombre de la segunda persona: ” ) . nom02 = “”. do { System.out.leerString( ) . nombre3 = nombre3.. nombre1 = nombre1.Reintente!!! ” ) . 377 .length( ) == 0 ) { System.out.trim( ) .println ( “ Ingrese el nombre de la primera persona: ” ) .out.length( ) == 0 ) . nombre2 = nombre2. nombre2.leerString( ) . public class PrgOrdenados4 { public static void main(String [ ] args) { String nombre1. } } while ( nombre1..CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 118 Etapa 01 – Descripción del problema. Mostrar los nombres ordenados alfabéticamente. do { System.println ( “ Nombre ingresado no válido.length( ) == 0 ) { System.. Desarrollar un programa en Java que permita ingresar los nombres de tres alumnos (los nombres pueden ser iguales)..trim( ) . nombre1 = Lectura. Pag. do { System.println ( “ Ingrese el nombre de la tercera persona: ” ) .trim( ) . Etapa 04 – Desarrollo de la codificación.out.. if (nombre1. if (nombre2. } } while (nombre3.length( ) == 0 ) .println ( “ Nombre ingresado no válido.out.length( ) == 0) { System.out.println ( “ Nombre ingresado no válido. Clase PrgOrdenados4 package dominioDeLaAplicacion .Reintente!!! ” ) . import biblioteca.* . } } while ( nombre2.leerString( ) . String nom01 = “”. nom03 = “”.Reintente!!! ” ) . if ( nombre3.. nombre3 . nombre3 = Lectura.length( ) == 0 ) . println (nom01) . nom03 = nombre2 . nom03 = nombre1 . Compruebe lo que sucede.compareTo(nombre3) < 0 ) { nom01 = nombre1 . Se ordenarán primero los nombres que comiencen con mayúscula y luego los nombres que comiencen con minúscula. Clase PrgOrdenados4 if ( nombre1. } } else { nom01 = nombre3 .out.out.” ) .out. } } System.out.. nom03 = nombre1 . nom03 = nombre3 . System.out.” ) .compareTo(nombre3) < 0 ) { nom02 = nombre2 . Juan José Flores Cueto. nombre3 = “Armando”. } } else { if ( nombre2.println ( “ Nombres ordenados alfabéticamente ” ) .compareTo(nombre3) < 0 ) { nom02 = nombre1 . Pag. nombre2 = “Beto”.println (nom02) . nom03 = nombre3 . if ( nombre1. } else { nom02 = nombre3 . if (nombre2.out. Etapa 04 . nom02 = nombre2 .. 378 .println (nom03) .compareTo(nombre3) < 0 ) { nom01 = nombre2 . Modifique el programa de tal forma que se cambie la primera letra del nombre ingresado a mayúscula. System. por ejemplo: nombre1 = “armando”. nom03 = nombre2 . Continúa. } else { nom02 = nombre3 .println ( “ ------------------------------------------------.Ing. nom02 = nombre1 . System.println ( “ ------------------------------------------------. System. System.compareTo(nombre2) < 0 ) { if ( nombre1.Desarrollo de la codificación. } } Desarrolle la siguiente prueba: Ingrese los nombres con letras mayúsculas y minúsculas. } } else { nom01 = nombre3 . resto .out.toUpperCase()).concat(nombre1. String nom01 = “”.substring(0. nombre2 = nombre2. nombre3 = nombre3.Reintente!!! ” ) .println ( “ Ingrese el nombre de la primera persona: ” ) . } } while ( nombre2. if ( nombre1.leerString( ) .out.. nombre1 = nombre1. nom02 = “”.out. nombre2.trim( ) .* . 1)).trim( ) .println ( “ Ingrese el nombre de la tercera persona: ” ) . } else { nombre1 = ((nombre1. do { System. import biblioteca.substring(1)) . 1)). } else { nombre2 = ((nombre2.leerString( ) . Etapa 04 – Desarrollo de la codificación.println ( “ Nombre ingresado no válido.length( ) == 0 ) . public class PrgOrdenados5 { public static void main(String [ ] args) { String nombre1. Mostrar los nombres ordenados alfabéticamente.. nombre3 = Lectura. nom03 = “” . if ( nombre2.length( ) == 0 ) { System.trim( ) . letra.. nombre2 = Lectura. } } while ( nombre1. 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.out. 379 . do { System.println ( “ Nombre ingresado no válido. do { System.length( ) == 0 ) { System. nombre3. nombre1 = Lectura.toUpperCase()).out.length( ) == 0 ) .leerString( ) .println ( “ Ingrese el nombre de la segunda persona: ” ) .substring(1)) .. Desarrollar un programa en Java que permita ingresar los nombres de tres alumnos.substring(0. Pag. Clase PrgOrdenados5 package dominioDeLaAplicacion .concat(nombre2.Reintente!!! ” ) . } else { nombre3 = ((nombre3.compareTo(nombre3) < 0 ) { nom01 = nombre1 .Reintente!!! ” ) . } } else { nom01 = nombre3 .println ( “ Nombre ingresado no válido. nom03 = nombre2 ..compareTo(nombre3) < 0 ) { nom01 = nombre2 .println (nom03) . nom03 = nombre2 .concat(nombre3. Etapa 04 . nom03 = nombre3 .length( ) == 0 ) . 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.compareTo(nombre3) < 0 ) { nom02 = nombre1 .out.length( ) == 0 ) { System. } } Mejore la solución desarrollando un programa que permita ingresar tres nombres de alumnos.println (nom02) .toUpperCase()). System. nom02 = nombre2 .out. } } else { if ( nombre2. Luego. } } while ( nombre3. } } System.. Continúa. System.substring(1)) .compareTo(nombre3) < 0 ) { nom02 = nombre2 .out. nom03 = nombre1 . Juan José Flores Cueto.. Pag. if ( nombre1. nom03 = nombre3 . } } else { nom01 = nombre3 . 380 . 1)). } else { nom02 = nombre3 .out. if ( nombre2. Clase PrgOrdenados5 if ( nombre3.Ing.compareTo(nombre2) < 0 ) { if ( nombre1.out.println (nom01) .Desarrollo de la codificación. if ( nombre1. complemente la solución permitiendo el ingreso de los nombres de todos los alumnos de un determinado salón de clase..substring(0. nom02 = nombre1 .println ( “ Nombres ordenados alfabéticamente ” ) . } else { nom02 = nombre3 . nom03 = nombre1 . Muestre los nombres ordenados alfabéticamente. System. Pag. 381 . if ( dato1. } } ¿Qué hay de nuevo en la codificación? Observe el uso del método equals ( ) de la clase String: nombre1.leerString( ) .print ( “ Ingrese el caracter por el cual se va reemplazar: ” ) .out.x+1) . for (x=0. dato2. Etapa 04 – Desarrollo de la codificación.equals(caracter) == true ) cadena = cadena + dato2 . un caracter que este contenido en el nombre ingresado y otro caracter por el cual se reemplazará el primer caracter ingresado. import biblioteca. cadena= “” .println ( “ El resultado es: ” + cadena ) . x<cant.leerString( ) . Desarrollar un programa en Java que permita ingresar el nombre de una persona. x++ ) { caracter = nom. dato1. dato2 = Lectura. System.equals (nombre2) .length( ) .substring(x. Clase PrgCadenaModifcada package dominioDeLaAplicacion . caracter.print ( “ Ingrese el caracter que se va buscar: ” ) . public class PrgCadenaModifcada { public static void main(String [ ] args) { int cant .* . System. nom = Lectura.print ( “ Ingresar el nombre de una persona: ” ) . String nom.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 120 Etapa 01 – Descripción del problema.out. System.out.out. Mostrar el nombre modificado.leerString( ) . } System. dato1 = Lectura. cant = nom. else cadena = cadena + caracter . while y for). El método equals ( ) devuelve true (verdadero) si la cadena coincide con la cadena colocada como parámetro del método equals ( ). Juan José Flores Cueto. En base a esto. 382 . Un punto muy importante es el análisis de la siguiente línea de código: if ( dato1.Ing. x+1) . podemos afirmar que las siguientes sentencias en Java son equivalentes: if ( dato1.substring (x . Pag. dependiendo del resultado de la comparación entre las variables dato1 y caracter. el método equals ( ) devuelve true (verdadero) o false (falso). En nuestro caso.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. Por lo que en este caso el método equals ( ) evalúa a la variable dato1 y a la variable caracter.equals (caracter) == true ) if ( dato1. una variable booleana o el resultado de una operación. La variable caracter tuvo que declararse como String para poder ser utilizada por el método equals ( ) de esta forma: caracter = nom. caso contrario devuelve false (falso).equals (caracter) == true ) La sentencia if puede evaluar una condición lógica. dato3.* .valueOf(num). luego intercambiar posiciones.length(). cadena = "". Este método permite convertir una variable de cualquier tipo a una variable de tipo String o cadena. dato2. el primer digito pasarlo al último y el último digito pasarlo al primero. 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. num = Lectura. Una vez convertida la variable num.substring(1.valueOf (num) . dato2 = cadena. se utiliza el método substring ( ) para intercambiar las posiciones deseadas. String dato1. Convertir el número en cadena. Mostrar el nuevo número.substring(cant-1). cant = cadena.out.println(" Número ingresado no válido… Reintente! "). 1). El método valueOf ( ) se utiliza directamente con la clase String (y no con una variable de tipo String).println(" El resultado es: " + cadena).leerInt(). Desarrollar un programa en Java que permita ingresar un número mayor de tres dígitos. dato1 = cadena. do { System.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 121 Etapa 01 – Descripción del problema.out. Pag. Etapa 04 – Desarrollo de la codificación. cadena = String. cadena = dato3 + dato2 + dato1. System. cant. } } while (num < 100).out.substring(0. Clase PrgIntercambioCadena package dominioDeLaAplicacion .1). public class PrgIntercambioCadena { public static void main(String [ ] args) { int num. if (num < 100) { System. import biblioteca.} } ¿Qué hay de nuevo en la codificación? Observe el uso del método valueOf ( ) de la clase String: String. cant . dato3 = cadena.print(" Ingresar un numero mayor de 3 dígitos: "). 383 . cadena = “” . caracter. 384 .concat(caracter) . declaramos la variable caracter como una cadena (String). do { System. } System. Juan José Flores Cueto.out. Clase PrgInvertirCadena package dominioDeLaAplicacion . nom = nom. 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. for (x=cant-1. } } while ( nom.) { caracter = nom.out. Problema 122 Etapa 01 – Descripción del problema. x-. import biblioteca. String nom.out. 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). if ( nom. Desarrollar un programa en Java que permita ingresar el nombre de un alumno.substring(x.trim( ) . public class PrgInvertirCadena { public static void main(String [ ] args) { int cant.x+1) . cant = nom. Cada vez que se ejecuta la sentencia for. x>=0.println ( “ Ingresar el nombre: ” ) .* . nom = Lectura.println ( “ Nombre ingresado no válido… Reintente! ” ) .length( ) == 0 ) { System. se obtiene de la variable nom un caracter empezando desde el último y terminando en el primero.length( ) == 0 ) . Pag. Mostrar el nombre ingresado. x .leerString( ) . Etapa 04 – Desarrollo de la codificación. cadena = cadena.println ( “ El nombre al revés es: ” + cadena ) .length( ). } } ¿Qué hay de nuevo en la codificación? Observe el uso del método concat ( ) de la clase String: En este programa.Ing. CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Otra manera de solucionar este problema es la siguiente: for ( x = cant . Pag.charAt (x) ..1. la variable caracter debe declararse como char. } Es importante indicar que para esta solución. x >= 0. x . Observe como se utiliza el método charAt ( ) de la clase String. cadena += caracter . 385 . 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).) { caracter = nom. Clase PrgCuentaLetras1 package dominioDeLaAplicacion .equals( “a” ) ) { contA++.length( )-1.substring(0.out.Ing.. import biblioteca. letraFin = “” .length( ) == 0 ) .println ( “ Nombre ingresado no válido. } if ( letraFin. i++) { do { System. contP= 0. } } System. nombre = Lectura. Etapa 04 – Desarrollo de la codificación. System. letraIni = “”.println ( “ Nombres que comienzas con la letra P: ” + contP).* . if ( nombre. Pag. if ( letraIni.out.out.trim( ) .length( ) ) .substring ( nombre.length( ) == 0 ) { System. Utilice la estructura do… while. nombre = nombre. 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. for (i = 0.out.. } } while (nombre. Reintente! ” ) . } } Mejore la solución desarrollando un programa que permita ingresar los nombres de todos los alumnos.equals( “P” ) ) { contP++.1) . i <11. int i. Problema 123 Etapa 01 – Descripción del problema. 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”. 386 .println ( “ Ingresar el nombre del alumno: ” ) .println ( “ Nombres que terminan con la letra a: ” + contA). public class PrgCuentaLetras1 { public static void main(String [ ] args) { String nombre. Juan José Flores Cueto.nombre.leerString( ) . contA = 0 . letraFin = nombre. letraIni = nombre. trim( ) . switch(c) { case 97 : // a case 101 : // e case 105 : // i case 111 : // o case 117 : cont ++ . public class PrgTotalVocales2 { public static void main(String [ ] args) { int cant.out. if ( nom. x . for ( x=0. // u } } System.println ( “ El Total de Vocales del nombre ingresado es: ” + cont ) . String nom . do { do { System.out. 387 . Mostrar el número de vocales que existen en cada uno de los nombres ingresados. nom = Lectura. nom = nom.charAt(x) . char c = ‘ ’ .out. } } Pag.println ( “ Ingresar el nombre: ” ) . import biblioteca.toLowerCase( ) . x<cant.length( ) . No = 2): ” ) .* .CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 124 Etapa 01 – Descripción del problema.length( ) == 0 ) { System. x++ ) { c = nom. cont=0. d = (int) (c) . System. opc. nom = nom.println ( “ Desea ingresar otro nombre (Sí = 1. } } while ( nom.println ( “ Nombre no válido… Reintente! ” ) . opc =Lectura. cant = nom. Desarrollar un programa en Java que permita ingresar los nombres de todos los empleados de una empresa.leerInt( ) .out. Clase PrgTotalVocales2 package dominioDeLaAplicacion . } while ( opc != 1 ) .leerString( ) . Etapa 04 – Desarrollo de la codificación.length( ) == 0 ) . d=0. Ing. Juan José Flores Cueto. Como sugerencia investigue los códigos ASCII de las vocales acentuadas y las vocales en letra mayúscula. 388 . Mejore la solución desarrollando un programa que considere el conteo de las vocales acentuadas y las vocales en letra mayúscula. Pag. y agréguelos en la sentencia switch ( ). x) . do { System. class PrgProductosTienda { public static void main ( String arg [ ] ) { int x.1.Desarrollo de la Codificación.println ( “ Ingresar la cantidad de productos: ” ) .leerInt( ) . acum = “” .println ( “ Cantidad no válida… Reintente! ” ) .substring(x . cantidad = Lectura.println ( “ Las posiciones pares del producto son: ” + acum ) .length().Lectura . 389 . } } while ( cantidad < 1 ) . } } System. String producto. Etapa 04 .out. acum = “” .out. } } Pag.out.println ( “ Ingresar el nombre del producto: ” ) . cont ++ . do { System. if ( cantidad < 1 ) { System. for ( x = 1. x++ ) { if ( x % 2 == 0 ) { acum = acum + producto. Clase PrgProductosTienda package dominioDeLaAplicacion .CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 125 Etapa 01 . producto = Lectura.leerString( ) .Descripción del problema. cont = 0 . cantidad. } while ( cantidad != cont ) .out. Desarrollar un programa en Java que permita ingresar los nombres de todos los productos de una determinada tienda. Mostrar como resultado las posiciones pares. x <= producto. import biblioteca. Observe el uso de los métodos length ( ) y substring ( ) de la clase String. 390 . Luego. se valida el número de alumnos ingresado. Esto último se logra utilizando una sentencia for dentro de la sentencia do. Pag. de tal forma que sea mayor a cero. se utiliza una sentencia do para ingresar el nombre de cada uno de los productos y determinar sus posiciones pares. Juan José Flores Cueto. Análisis de la solución Ingresamos la cantidad de alumnos y la almacenamos en la variable cantidad.Ing. y la forma como se utilizan las estructuras lógicas para la solución del problema. out.println ( “ Cantidad no válida… Reintente! ” ) . nomMayor = alumno .length( ) ) { longMayor = alumno. if ( cantidad < 1 ) { System.leerString( ) .println ( “ Ingresar la cantidad de alumnos: ” ) . class PrgLongitudNombre { public static void main ( String arg [ ] ) { int cantidad.out. el nombre que tiene la mayor longitud y el nombre que tiene la menor longitud. do { System.println ( nomMayor + “ tiene de longitud ” + longMayor ) . System.length( ) ) . } if ( longMenor > alumno. Clase PrgLongitudNombre package dominioDeLaAplicacion .out.leerInt( ) .Descripción del problema. String alumno. Etapa 04 .println ( “ La Longitud es: ” + alumno. 391 . } } Pag.Lectura . Desarrollar un programa en Java que permita ingresar los nombres de todos los alumnos de un salón de clase. alumno = Lectura.println ( “ Ingresar el nombre del alumno: ” ) . longMayor = 0.out. import biblioteca.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 126 Etapa 01 . System. nomMenor = alumno .out.println ( nomMenor + “ tiene de longitud ” + longMenor ) .length( ) . cantidad = Lectura.length( ) . } cont ++ .length( ) ) { longMenor = alumno.Desarrollo de la Codificación. Mostrar la longitud de cada nombre ingresado. System. cont = 0. nomMayor = “”. do { System. } while ( cantidad != cont ) .out. if ( longMayor < alumno. nomMenor = “” . longMenor = 100 . } } while ( cantidad < 1 ) . Pag. Luego. Análisis de la solución Ingresamos la cantidad de alumnos y la almacenamos en la variable cantidad. Juan José Flores Cueto. Observe el uso de los métodos length ( ) de la clase String. se valida el número de alumnos ingresado. y se determina la longitud de cada nombre ingresado. 392 . de tal forma que sea mayor a cero. el nombre con la mayor longitud y el nombre con la menor longitud. se utiliza una sentencia do para ingresar el nombre de cada uno de los alumnos. y la forma como se utilizan las estructuras lógicas para la solución del problema.Ing. println ( “ Ingresar la fecha actual: ” ) . System. Etapa 04 .out.parseInt(dia) .println ( “ Formato de la fecha es : dd-mm-aaaa ” ) . 2) .substring(3.Desarrollo de la Codificación.leerString( ) . anio .println ( “ El año ingresado esta incorrecto ” ) . int num1 = 0. } else { System.println ( “ El dia ingresado es incorrecto ” ) .Lectura .length( ) != 4 ) { System. num1 = Integer. Desarrollar un programa en Java que permita ingresar una fecha con el siguiente formato “dd-mm-aaaa” y validarla. System.out.substring(6. Clase PrgFechaFormato package dominioDeLaAplicacion . if ( ( dia. num2 = Integer.Descripción del problema.parseInt(mes) . Incluya la posibilidad que el mes de febrero sea bisiesto.out. import biblioteca. mes = fecha.substring(0. } else { if ( (mes. } else { if ( anio. Pag.length() != 2 ) || ( num2 < 12 ) ) { System.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 127 Etapa 01 . 393 .println ( “ El mes ingresado es incorrecto ” ) . fecha = Lectura. class PrgFechaFormato { public static void main ( String arg [ ] ) { String fecha.out. mes.length( ) <= 10 ) { dia = fecha. 5) . 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. } } } } } } Intente mejorar la solución validando la fecha. if ( fecha. dia.out.println ( “ La fecha ingresada es correcta ” ) . 10) . num2 = 0 . anio = fecha.length() != 2 ) || ( num1 < 31 ) ) { System.out. System. } } System.Ing.leerInt( ) . Desarrollar un programa en Java que permita completar por la izquierda (utilizando asteriscos) una determinada cadena en base a una longitud especificada. class PrgCompletarCadenaIzq { public static void main ( String arg [ ] ) { String cadena . x++) { cadena = cadena + “*” . Problema 128 Etapa 01 . 394 .Descripción del problema. import biblioteca. Ejemplo: Se ingresa: Longitud = 10 Cadena = “Danae” Resultado: Cadena = “Danae*****” Etapa 04 . tamaño.Lectura .println ( “ La longitud especificada es: ” ) . x .length( ) ) { tamaño = longitud . Juan José Flores Cueto. longitud = Lectura.leerString( ) . System. for ( x = 1.out. if ( longitud > cadena.out. cadena = Lectura. } } Pag. Clase PrgCompletarCadenaIzq package dominioDeLaAplicacion .Desarrollo de la Codificación.length( ) .out.cadena. x <= tamaño. int longitud.println ( “ La nueva cadena es: ” + cadena ) .println ( “ Ingresar cadena: ” ) . Descripción del problema. } } System. } } Pag.println ( “ Ingresar cadena: ” ) .cadena.leerString( ) .out. class PrgCompletarCadenaDer { public static void main ( String arg [ ] ) { String cadena . x . Ejemplo: Se ingresa: Longitud = 10 Cadena = “Danae” Resultado: Cadena = “*****Danae” Etapa 04 . import biblioteca.Desarrollo de la Codificación.println ( “ La longitud especificada es: ” ) .out. tamaño. Clase PrgCompletarCadenaDer package dominioDeLaAplicacion . 395 . longitud = Lectura. if ( longitud > cadena. System. int longitud.length( ) ) { tamaño = longitud . for ( x = 1.leerInt( ) . Desarrollar un programa en Java que permita completar por la derecha (utilizando asteriscos) una determinada cadena en base a una longitud especificada.out.length( ) .println ( “ La nueva cadena es: ” + cadena ) .CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA Problema 129 Etapa 01 .Lectura . x <= tamaño. System. cadena = Lectura. x++ ) { cadena = “*” + cadena . println ( “ La cadena es: ” + cadena ) . en primer lugar. Este método permite convertir un arreglo de caracteres o parte de él. ‘n’. import biblioteca. } } ¿Qué hay de nuevo en la codificación? Observe el uso del método valueOf ( ) de la clase String: String. se muestra como resultado la cadena “ana”. Desarrollar un programa en Java que permita transformar un arreglo de caracteres en una cadena.Descripción del problema. Observe que en este método. En el ejemplo.valueOf (arregloA. class PrgArregloCadena { public static void main ( String arg [ ] ) { char arregloA = { ‘D’. En segundo lugar. Etapa 04 . System. se indica la posición del arreglo desde el cual se van a tomar los datos y finalmente. Analizar la solución. se indica la longitud o el número de caracteres que se van a obtener del arreglo. En nuestra solución convertimos parte del arreglo arregloA a un String con la finalidad de mostrar el contenido de dicha variable.out. Clase PrgArregloCadena package dominioDeLaAplicacion . Los arreglos serán tratados en el siguiente capítulo. ‘e’ } . 1. ‘a’. en una variable de tipo String o cadena. ‘a’. 396 . int. 3) . El método valueOf ( ) se utiliza directamente con la clase String (y no con una variable de tipo String). int ) .Lectura . Problema 130 Etapa 01 . se especifica el arreglo de tipo char del cual se va ha obtener la cadena.Ing. Pag.valueOf ( char [ ]. String cadena = String. especificando la posición del arreglo donde va ha comenzar la cadena y su longitud. Juan José Flores Cueto.Desarrollo de la Codificación. Lectura .text. Luego este objeto es creado utilizando el operador new.text.Desarrollo de la Codificación. numFormato = new DecimalFormat ( “###. adjunto al presente texto. Etapa 04 . System. import biblioteca.format ( num ) ) . se puede mencionar la clase DecimalFormat del paquete java. class PrgFormatoNumero { public static void main ( String arg [ ] ) { double num . System. Mostrar el número ingresado con un formato determinado. import java. encontrará más información sobre otras clases de la Jerarquía de Clases de Java.* . 397 .println ( “El número con formato es : ” + df. En el CD. Luego con el método format ( ) se procede a establecer el formato establecido para el número ingresado. Analizar la solución.println ( “Ingrese numero entero: ” ) . DecimalFormat numFormato .000" ) .leerDouble(). num = Lectura.CLASES BÁSICAS INCORPORADAS EN EL LENGUAJE DE PROGRAMACIÓN JAVA OTRAS CLASES EN JAVA En general. Problema 131 Etapa 01 . Clase PrgFormatoNumero package dominioDeLaAplicacion . Desarrollar un programa en Java que permita ingresar un número por teclado. Pag. estableciendo el formato a utilizar en el método constructor. el lenguaje de programación Java incorpora una gran cantidad de clases en paquetes organizados en su Jerarquía de Clases.Descripción del problema.out. } } Observe que se declara un objeto de la clase DecimalFormat llamado numFormato. Como ejemplo.out. 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. Juan José Flores Cueto.Ing. 398 . Pag. • • • • Generalidades. Declaración. Estructura de Datos: Arreglos. • Problemas resueltos. . creación e inicialización. Ingreso y visualización de datos.Capítulo Estructura de Datos Arreglos 4 Temas: Introducción. Desarrollo de soluciones utilizando arreglos: • Formalización del método de las 6’D. • Problemas resueltos. Desarrollo de soluciones utilizando múltiples arreglos: • Arreglos en paralelo. Manejo básico de datos. . Dichos datos deben almacenarse en una estructura de datos. 401 . MARCO DE TRABAJO ENUNCIADO DEL PROBLEMA Etapa 02 Definición Solución Etapa 03 Diseño Solución Etapa 04 Desarrollo Solución Pag. 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. Los arreglos permiten almacenar varios valores a la vez y constituyen las estructuras de datos más sencillas después de la variable.ESTRUCTURAS DE DATOS – Arreglos. LISTA DE PASOS DESCRIPCIÓN DE DATOS SENTENCIAS DECLARACIÓN Y DEFINICIÓN DE DATOS SE DESARROLLAN UTILIZANDO: • Estructuras lógicas de secuencia. trata sobre las estructuras de datos conocidas como arreglos y los conceptos más importantes relacionados a éstos. TAMBIÉN: • Clases incorporadas en el lenguaje de programación utilizado. 402 .Ing. Juan José Flores Cueto. • Estructuras lógicas de repetición. El presente capítulo. • Instrucciones de bifucación. ALMACENADOS EN: • Estructuras de datos tipo variables. se utilizan las estructuras lógicas y las estructuras de datos en forma simultánea. Pag. Las estructuras lógicas y las estructuras de datos que se utilicen en una solución. Al desarrollar soluciones básicas. • Estructuras de datos tipo arreglo. • Estructuras lógicas de decisión. van a depender en general de la complejidad del problema. 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. en el cual el orden de cada uno de los datos es significativo. ESTRUCTURA DE DATOS ARREGLOS Definición: Los arreglos conocidos también como arrays. todos del mismo tipo. Es. Cada dato perteneciente al arreglo se almacena en una posición y puede ser mostrado. Es decir. 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). 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). Un arreglo puede almacenar un conjunto limitado de datos. Pag. 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. Arreglos bidimensionales (tabla o matriz) El arreglo bidimensional se considera como un vector de vectores. 403 .ESTRUCTURAS DE DATOS – Arreglos. El acceso a uno de los datos del arrreglo unidimensional se realiza mediante un índice. Los arreglos o arrays pueden tener de una a varias dimensiones. son estructuras de datos que permiten almacenar más de un dato del mismo tipo a la vez. modificado o eliminado. un arreglo contiene un conjunto de datos. y en el que se necesita especificar dos índices para poder acceder a cada uno de ellos. todos del mismo tipo. • • Desventajas: • Un arreglo no puede almacenar datos de diferente tipo.util. Dependiendo del tipo de arreglo. por lo que pueden ser considerados como globales o locales. Juan José Flores Cueto. pero no se puede tener un arreglo que contenga por ejemplo: cadenas y números enteros a la vez. • • Pag. Esto nos permite reducir el uso de variables y constantes. o un arreglo de cadenas. que tiene métodos que permiten crear un vector y redefinir su tamaño cada vez que sea necesario). denominada Vector. 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 utiliza un único nombre (nombre del arreglo) para referirse al conjunto de datos almacenados en el arreglo. los arreglos tienen un tiempo de vida.Ing. Ventajas: • • Los datos están almacenados en una sola estructura de datos siendo más fácil el acceso a los mismos. unidimensional o bidimensional. se necesitará uno o dos índices para acceder a los datos almacenados en el arreglo. Se puede tener un arreglo de números enteros. Al igual que otras estructuras de datos (como las variables y constantes). 404 . que pertenece al paquete java. Los arreglos permiten almacenar datos de entrada y datos utilizados durante el procesamiento. .. Tamaño del vector. Representación gráfica Arreglos Unidimensionales: Un arreglo unidimensional puede ser representado como un vector o como un registro.. X 1.1 X 0. X 3.. Datos almacenados en el vector.j -1 (i.2 … X 0...0 X i-1.. 405 .X i -1 i = = = Nombre del vector. .j -1 . X 2. Arreglos Bidimensionales Un arreglo bidimensional puede ser representado como una matriz o como una tabla.ESTRUCTURAS DE DATOS – Arreglos. X i -1 ] i Como registro: nombre X0 0 X1 1 X2 2 . A continuación se muestra la representación gráfica de un arreglo bidimensional llamado nombre: Como matriz: X 0. A continuación se muestra la representación gráfica de un arreglo unidimensional llamado nombre: Como vector: nombre = [ X 0..0 nombre = X 0. .0 X 1. X I-1 i -1 i Donde: nombre X0. j) Como tabla: Pag...0 X 2. . X i-1. Así.j -1 i-1 X i-1. nombre Columnas 0 0 1 Filas 2 1 2 j-1 X 0. seguido de un índice igual a 1 entre corchetes ([1]).0 X i-1... se realizaría de la siguiente manera: notas 10 0 15 1 20 2 19 3 14 4 13 5 16 6 11 7 17 8 09 i =10 9 Donde: notas i 10. Tamaño de la matriz.09 = = = Nombre del arreglo.1 X 0. 15.. j) Donde: nombre X0. 406 . según se muestre a continuación: Pag. Juan José Flores Cueto.j -1 (i. j -1 i*j = = = Nombre de la matriz. Por ejemplo. Número de alumnos. para poder acceder a la nota final del alumno 2 se utilizaría el nombre del vector (notas). 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.0 X 2.0 X 1..Ing.0. Son las notas finales de cada uno de los alumnos. 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). En el presente texto. 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. Datos almacenados en la matriz.Xi-1.2 … X 0.0 X 0.. del trabajo y del examen final de 10 alumnos de un salón de clase en un arreglo bidimensional (representado como una tabla).14.…. seguido de dos índices iguales a 2 y 1. Así. j=10) Donde: notas j i 10. 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 12 03 11 14 11 02 12 15 05 11 05 18 16 12 16 17 17 17 12 02 11 18 11 17 10 09 09 08 11 Nota Tra 1 Nota EF 2 (i =3. en la tabla anterior.….11 = = = = = = Nombre del arreglo. Número de notas. para poder acceder a la nota del examen final (Nota EF) del alumno 2 se utilizaría el nombre de la tabla (notas). según se muestra a continuación: Pag. Son las notas de Examen Final de c/u de los alumnos del salón de clase.….ESTRUCTURAS DE DATOS – Arreglos. por ejemplo. 407 .11. Son las notas de Trabajo de c/u de los alumnos del salón de clase.08 03. Son las notas de Examen Parcial de c/u de los alumnos del salón de clase. 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. si se desea representar el almacenamiento de las notas del examen parcial.11.09 12. Número de alumnos. entre corchetes ( [2] [1] ). notas[1] notas 10 0 15 1 20 2 19 3 14 4 13 5 16 6 11 7 17 8 09 i =10 9 También. Pag. en primer lugar. TipoDeDato arreglo[ ][ ] . En general. Juan José Flores Cueto. se debe determinar que tipo de dato podrá almacenar un arreglo. En segundo lugar.Ing. 408 . Un arreglo solo puede almacenar datos del mismo tipo. Para definir un nombre de un arreglo se siguen las mismas reglas utilizadas para la definición de nombres de variables y constantes. Los tipos de datos válidos para declarar un arreglo son los mismos tipos de datos válidos definidos para declarar variables y constantes. definir un nombre para referirnos al arreglo. 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 unidimensional se utiliza solo un corchete de apertura y cierre “[ ]” al final del nombre del arreglo. notas Alumno 1 Alumno 2 … … … … … … … Alumno10 0 Nota EP 0 1 2 3 4 5 6 7 8 9 10 12 03 11 14 11 02 12 15 05 11 05 18 16 12 16 17 17 17 12 02 11 18 11 17 10 09 09 08 11 Nota Tra 1 Nota EF 2 (i =3. para declarar un arreglo se utiliza el siguiente formato: En pseudocódigo y diagrama de flujo: TipoDeDato arreglo[ ] TipoDeDato arreglo[ ][ ] En Java: TipoDeDato arreglo[ ] . los cuales serán separados por comas). mientras que para declarar un arreglo bidimensional se utilizan dos corchetes de apertura y cierre “[ ][ ]” al final del nombre del arreglo. j=10) Notas[2][1] Declaración de Arreglos Para declarar un arreglo es necesario. ESTRUCTURAS DE DATOS – Arreglos. Es decir. Para crear un arreglo se utiliza el siguiente formato: En pseudocódigo y diagrama de flujo: CREAR arreglo[tamaño] Pag. String nombres[ ] . tal y como se explicó anteriormente. El tamaño de un arreglo puede especificarse en forma directa utilizando un número entero o en forma indirecta utilizando una variable entera. TipoDeDato[ ][ ] arreglo . int edades[ ] . según se muestra a continuación: En pseudocódigo y diagrama de flujo: TipoDeDato[ ] arreglo TipoDeDato[ ][ ] arreglo En Java: TipoDeDato[ ] arreglo . 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. Se declara un arreglo unidimensional llamado nombres en el cual se podrá almacenar datos de tipo TEXTO (String). double notas[ ][ ] . parte entera y parte decimal (double). Creación de Arreglos Para crear un arreglo. 409 . solo parte entera (int). Se declara un arreglo bidimensional llamado notas. En ambos casos. cual va ser la cantidad total de datos que se podrá almacenar en el arreglo. 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 cual se podrá almacenar datos de tipo NUMERO. Antes de crear un arreglo se debe determinar cual va ser el tamaño del mismo. en el cual se podrá almacenar datos de tipo NUMERO. el tamaño del arreglo siempre deberá especificarse como un número entero. es necesario que el arreglo previamente haya sido declarado. se debe indicar el tamaño del arreglo. El operador new nos permite crear un arreglo. CREAR arreglo[filas ][columnas] En Java: arreglo = new TipoDeDato [tamaño] .Ing. Utilizando este formato se declara y crea el arreglo en forma directa (esto es conocido como “Definición de un arreglo”). En Java. 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. Donde TipoDeDato debe ser un tipo de arreglo o tipo de dato válido y arreglo es el nombre del arreglo. existe también una forma directa para declarar y crear arreglos. 410 . 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. Pag. Donde TipoDeDato debe ser un tipo de arreglo o tipo de dato válido y arreglo es el nombre del arreglo. es decir cuantos datos podrá almacenar. utilizando el siguiente formato: En Java: TipoDeDato arreglo[ ] = new TipoDeDato [tamaño]. mientras que para crear un arreglo bidimensional es necesario especificar dos índices. Las consideraciones tratadas en los temas “Declaración de arreglo” y “Creación de arreglos” son válidas al utilizar este formato. TipoDeDato arreglo[ ][ ] = new TipoDeDato [filas][columnas]. arreglo = new TipoDeDato [filas][columnas] . Juan José Flores Cueto. Cuando se crea un arreglo con el operador new. Para crear un arreglo unidimensional es necesario especificar solo un índice. int numAlu.out. se asigna directamente el valor 10 a la variable total. numNot = 3 . Una consideración importante antes de utilizar un arreglo en Java: “En Java.ESTRUCTURAS DE DATOS – Arreglos. Se crea un arreglo bidimensional llamado notas. nombres = new String[total] . no se realiza ninguna clase de comprobación del tamaño de los arreglos en forma automática. previamente declarado. Se podría modificar esta parte para que el valor se ingrese a través del teclado. previamente declarado. previamente declarado. nombres = new String [total] . numAlu = 10 . ya que puede ocasionar resultados no deseados. tal y como se muestra a continuación: EJEMPLOS int total . 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. 411 . edades = new int [10] . Se crea un arreglo unidimensional llamado nombres. total = Lectura.leerInt( ) . Es necesario recordar y tener presente que es responsabilidad directa del programador asegurarse que nunca suceda esto. int total = 10 . numNot . en el cual se podrá almacenar 30 datos de tipo NUMERO (double). Pag. Esto quiere decir que se puede desbordar el final de un arreglo (se lanza una excepción de tipo ArrayIndexOutOfBoundException). En el segundo ejemplo se utiliza una variable llamada total de tipo entero para crear el arreglo unidimensional llamado nombres. En el ejemplo. en el cual se podrá almacenar 10 datos de tipo TEXTO (String). y que se finalice la ejecución del programa”. en el cual se podrá almacenar 10 datos de tipo NUMERO (int). notas = new double [numNot][numAlu] .print ( “Ingrese el numero total de alumno: ” ). System. int numAlu. inicializar todas las posiciones del mismo. aunque no necesario. int total = 10 . 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. Ingreso de datos a un Arreglo Después de crear un arreglo. Recuerde que tratar de acceder a una Pag. Generalmente. numNot . en el cual se podrá almacenar 30 datos de tipo NUMERO. los arreglos de caracteres con ‘\0’ y los arreglos de objetos con null. Es necesario que se ingresen datos a todas las posiciones del arreglo. También se podría haber declarado y creado los arreglos del ejemplo anterior. String nombres [ ] = new String [total] . numAlu =10 . Dichos datos estarán organizados en 3 filas y 10 columnas. Inicialización de Arreglos Cuando se crea un arreglo utilizando el operador new es recomendable. 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. en forma directa. inicialice o no el arreglo. Juan José Flores Cueto. tal y como se muestra a continuación. 412 . los arreglos lógicos (tipo LOGICO) o booleanos se inicializan con false.Ing. double notas[ ][ ] = new double [numNota[numAlu] . EJEMPLOS int edades [ ] = new int [10] . parte entera y parte decimal (double en Java). numNot = 3 . los arreglos numéricos (tipo NUMERO) se inicializan con cero (0). se deberán ingresar datos. En el tercer ejemplo se crea un arreglo bidimensional llamado notas previamente declarado. se utilizaría la siguiente sentencia: EJEMPLO char letras[ ] = { ‘A’. ‘B’. También se puede utilizar una forma directa que permite declarar. EJEMPLO int edades[ ] = { 10. En el ejemplo anterior. Para declarar y crear un arreglo unidimensional llamado letras de tipo TEXTO (de solo una letra) con 4 valores.51.20.23. 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. tal y como se muestra a continuación. crear e ingresar datos a un arreglo unidimensional.28. 413 . ‘C’.59 } . Pag.35.32. posición del arreglo que no tiene un dato o que no ha sido inicializado. se declara y crea un arreglo unidimensional llamado edades de tipo NUMERO (solo números enteros) con 10 valores. ‘D’ } .15. para esto se encierran los datos que se almacenarán en el arreglo dentro de llaves. separadas por comas. 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.42. Para ingresar datos a todas las posiciones de un arreglo generalmente se utiliza la estructura lógica de repetición DESDE (for en Java).ESTRUCTURAS DE DATOS – Arreglos. produce un error que ocasiona que se interrumpa la ejecución del programa. La ordenación puede ser en forma alfabética o numérica de mayor a menor o viceversa. Proceso de Modificación de Datos: Permite modificar uno o más datos de un arreglo. Proceso que permite visualizar o consultar el contenido del arreglo. Es importante tener en cuenta que antes de modificar un dato se debe verificar que este existe dentro del arreglo. Se pueden dividir en: • • • Proceso de visualización de datos. que se ingresaron a través de un proceso de ingreso de datos. Procesos que permiten cambiar o modificar el contenido del arreglo. Proceso de búsqueda datos. Manejo de datos de un Arreglo Una vez que se han ingresado los datos a todas las posiciones del arreglo. se pueden manipular dichos datos con la finalidad de cumplir con el objetivo del programa o proyecto de solución de un determinado problema. el manejo de arreglos se puede agrupar en dos grandes grupos: 1). 2). Juan José Flores Cueto.Ing. Es importante tener en cuenta que antes de eliminar un dato se debe verificar que este existe dentro del arreglo. 414 . En términos generales. Proceso de eliminación de datos. utilizando para ello un proceso de búsqueda de datos. Proceso de Ordenación de Datos: Permite ordenar todos los datos de un arreglo en función de un criterio. 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 cálculo basado en datos del 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. Dicho criterio establece la forma de ordenar los datos de un arreglo. Proceso de ordenación de datos. Se pueden dividir en: • • • Proceso de modificación de datos. Pag. Proceso de cálculo basado en datos del arreglo: Nos permite realizar diferentes tipos de cálculo con los datos de un arreglo. promedio. Proceso de búsqueda datos: Permite buscar uno o más datos dentro de un arreglo. Si el dato buscado es encontrado. se considera que la búsqueda fue exitosa. 415 . etc. Pag. Es importante mencionar que para poder visualizar los datos de un arreglo. Proceso de visualización de Datos: Permite visualizar los datos que contiene un arreglo. Dependiendo lo que se necesite visualizar se podrá mostrar todos los datos del arreglo o solo una parte de ellos. En este caso. indicará la posición del arreglo en donde está almacenado el dato buscado. dichos datos deben haber sido ingresados previamente. tales como suma de datos.ESTRUCTURAS DE DATOS – Arreglos. Juan José Flores Cueto. Pag.Ing. 416 . } } Es importante mencionar que cuando se ejecute esta clase. Analizar las siguientes sentencias: Clase Suma /* Clase que nos permite sumar varios números enteros .length .length . Inclusive. para que estos puedan ser sumados. main( ) en Java. i ++ ) { suma += Integer.parseInt (arg [ i ] ) . for ( int i = 0.parseInt ( arg [ i ] ) . } System. incluidos como parámetros */ package dominioDeLaAplicacion . siempre hemos definido un arreglo como parte de la estructura del método principal. tal y como se muestra a continuación. 417 . Este atributo se denomina length. Analizando las siguientes sentencias: for ( int i = 0 . class Suma { public static void main ( String arg [ ] ) { int suma = 0 . i < a. 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. } En primer lugar. DESARROLLO DE SOLUCIONES BÁSICAS UTILIZANDO ARREGLOS Los arreglos pueden ser utilizados como parte de las soluciones a los problemas que se nos plantean. i++ ) { suma += Integer. Pag.ESTRUCTURAS DE DATOS – Arreglos. i < a. Dichos parámetros se pasan al método main ( ) y se almacenan en el arreglo arg.println (suma) . los arreglos en Java poseen un atributo que almacena la cantidad de datos que pueden contener. usted deberá asegurarse de incluir una lista de números.out. cuando necesitamos convertir un dato a un número entero.out. for ( int i = 0. y calcula el promedio general de notas del salón de clase. (Recuerde que una variable solo nos permite almacenar un dato a la vez).parseInt(). } } Observe que la solución anterior nos permite realizar el cálculo y la visualización del promedio general de notas. utilizamos el método parseInt() de la clase Integer. En consecuencia. nota . } promedio = suma / 10 . System. Utilizando la sentencia for podemos acceder a cada uno de los datos almacenados en el arreglo arg[]. public class PrgAlumno { public static void main ( String arg [ ] ) { int suma = 0. i ++ ) { System. En segundo lugar. nota = lectura. suma = suma + nota .print ( “ El promedio general de notas es ” + promedio ) . 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.Ing. la lista de números se almacena en el arreglo arg de tipo String. Clase PrgAlumno package dominioDeLaAplicacion . A continuación se presenta la codificación en Java de una solución que permite ingresar la nota final de 10 alumnos. lo convertimos a un dato tipo NUMERO utilizando Integer.* . no podemos almacenar a la vez las notas finales de los 10 alumnos.out. double promedio . i < 10 . 418 . Pero.print ( “ Ingrese la Nota Final del Alumno ” + ( i + 1 ) ) . al utilizar solo una variable (notas). y luego lo sumamos a la variable suma. import biblioteca.leerInt ( ) . Pag. Una vez almacenadas las notas finales de los 10 alumnos se calculará y mostrará el promedio de las mismas. Pag. para finalmente formalizar el Método de las 6’D. definiendo un nombre adecuado para cada uno de ellos. ingresar los datos necesarios al arreglo o arreglos utilizados en la solución. // Creación del arreglo notas.* . de tal forma que se incorporen progresivamente los conceptos tratados en este capítulo. Estos tres pasos generalmente se desarrollarán en todas las soluciones. Inicializar el arreglo o arreglos. En la solución. int numAlu =10 . import biblioteca. El arreglo notas almacenará datos de tipo NUMERO (número entero con parte decimal). double sumaNotas=0. se modificará el programa anterior. notas[ ] . Por lo tanto. notas = new double [numAlu] . A partir de este punto podemos realizar cualquier proceso con los datos almacenados en el arreglo o arreglos definidos en la solución. 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. 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. o en su defecto. 419 . A partir de este punto. public class PrgAlumnos { public static void main ( String [ ] args ) { // Declaración de variables y arreglos. se utilizará un arreglo unidimensional llamado notas que permitirá almacenar las notas finales de 10 alumnos de un determinado salón de clase. Crear el arreglo o arreglos con el tamaño necesario para poder almacenar todos los datos.ESTRUCTURAS DE DATOS – Arreglos. Clase PrgAlumnos package dominioDeLaAplicacion . print ( “El promedio es : ” + ( sumaNotas / numAlu ) ) . } System. Juan José Flores Cueto. // Proceso de ingreso de datos al arreglo notas. notas = new double [numAlu] . i < numAlu .print ( “ Ingrese nota : ” ) . para i=0. la nota ingresada se almacena en la primera posición del arreglo notas[ ]. y se le asignó un valor igual a 10.out. Esto nos permite crear un arreglo llamado notas[ ] con un tamaño igual a 10.out. 420 . i=3. i=6. notas[i] = Lectura. las cuales están ubicadas dentro de la misma sentencia for. } La estructura lógica de repetición for permite que se repitan 10 veces las siguientes sentencias: System. i++) { System. siendo valores válidos de i.leerDouble( ) . i < numAlu . Los datos que se ingresarán serán las notas finales de los 10 alumnos del salón de clase. se crea el arreglo notas[ ] utilizando la siguiente sentencia: // Creación del arreglo notas.out. Clase PrgAlumnos // Proceso de ingreso de datos al arreglo notas[ ]. i=4.leerDouble( ) . i=7. notas[i] = Lectura. i=5. Pag. } } En la solución anterior. } // Proceso de cálculo del promedio de notas finales. es decir en notas[9]. i < numAlu .print ( “ Ingrese nota : " ) . i++ ) { sumaNotas = sumaNotas + notas[i] .out. la nota ingresada se almacena en la segunda posición del arreglo notas[ ]. Para esto. almacenando la nota ingresada en la décima posición del arreglo notas[ ]. for ( int I = 0 . y así sucesivamente hasta cuando i = 9 (la décima y última vez que se ejecuta la sentencia for). Cada vez que la estructura lógica de repetición for se ejecuta. i=9). se utiliza una sentencia for. en primer lugar. for ( int i = 0 .Ing. se ejecuta el proceso de ingreso de datos al arreglo notas[ ]. Es decir. es decir en notas[1]. En tercer lugar. Cuando i = 1 (la segunda vez que se ejecuta la sentencia for). se declara un arreglo unidimensional llamado notas[ ] (vector). en el arreglo notas[ ] se podrán almacenar 10 notas finales. notas[i] = Lectura.leerDouble( ) . i=1. El uso de la sentencia for tiene como finalidad repetir 10 veces las sentencias que nos permitirán el ingreso de los datos. En segundo lugar. i=8. la variable i aumenta su valor en 1.print ( “ Ingrese nota : " ) . for ( int i = 0 . desde 0 hasta 9 (es decir. i++) { System. Observe que para crear el arreglo notas[ ] se utiliza la variable entera numAlu. Cuando i = 0 (la primera vez que se ejecuta la sentencia for). i=2. La variable numAlu fue declarada previamente con la sentencia int. es decir en notas[0]. Dicho arreglo podrá almacenar datos numéricos (parte entera y decimal). Esto es recomendable como buena práctica de programación ya que posteriormente cada proceso desarrollado se convertirá en un método de una clase con una función determinada. Pag. Para ello. 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. se ejecuta el proceso de cálculo del promedio de las 10 notas finales. Finalizada la ejecución de la primera sentencia for. el arreglo notas[ ] deberá tener almacenadas las notas finales de los 10 alumnos del salón de clase. Tal y como se muestra a continuación: notas 10 0 15 1 20 2 19 3 14 4 13 5 16 6 11 7 17 8 09 i =10 9 Finalmente. se utiliza una segunda sentencia for exactamente igual a la primera sentencia for.ESTRUCTURAS DE DATOS – Arreglos. Cada vez que se ejecuta la segunda sentencia for. Finalizada la ejecución de la sentencia for se muestra el promedio de las 10 notas finales. 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). 421 . La variable numAlu fue declarada previamente con la sentencia int. Esto nos permite crear un arreglo llamado notas[ ] con un tamaño equivalente al valor almacenado en la variable numAlu. // Determinación del tamaño del arreglo. 422 . notas[i] = Lectura. // Declaración y creación del arreglo notas. i < numAlu .out. // Proceso de ingreso de datos al arreglo notas[ ]. double notas[] = new double [numAlu] . } } En la solución anterior.* . } System. y se le asignó un valor que fue ingresado por el usuario a través del teclado. double notas[] = new double [numAlu] . Observe que para crear el arreglo notas[ ] se utiliza la variable entera numAlu.Ing.leerDouble( ) . i++ ) { sumaNotas = sumaNotas + notas[i] . double sumaNotas = 0 . public class PrgAlumnos { public static void main(String[] args) { // Declaración de variables.out.leerInt( ) . se declara y crea el arreglo notas[ ] utilizando la siguiente sentencia: // Declaración y creación del arreglo notas. for ( int i = 0 . System. } // Proceso de cálculo del promedio de notas finales. Clase PrgAlumnos package dominioDeLaAplicacion . int numAlu . for ( int i = 0 .out. Pag. i < numAlu . 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. 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.print ( “ Ingrese la nota final del alumno [” + ( i + 1) + “]: ” ) . import biblioteca.print ( “ El promedio es : ” + ( sumaNotas / numAlu ) ) . numAlu = Lectura. Ahora.print ( “ Ingrese el número de alumnos : ” ) . i++ ) { System. 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[ ]. } 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) + “]: ” ) . i < numAlu . Esta sentencia esta ubicada dentro de la sentencia for y nos permite el ingreso de datos al arreglo llamado notas[ ].out.print ( “ Ingrese la nota final del alumno [” + ( i + 1) + “]: ” ) . 423 . es decir en notas[0]. notas[i] = Lectura. for ( int i = 0 . // Proceso de ingreso de datos al arreglo notas[ ]. y así sucesivamente hasta ingresar la nota final del último alumno. se puede personalizar el mensaje que se le muestra al usuario al momento del ingreso de las notas finales.leerDouble( ) .out. Cuando i = 1 (la segunda vez que se ejecuta la sentencia for).ESTRUCTURAS DE DATOS – Arreglos. Otra modificación que vale la pena destacar es la siguiente: System. Pag. es decir en notas[1]. i++ ) { System. Cuando i = 0 (la primera vez que se ejecuta la sentencia for). 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[ ]. if ( notas[i] > 20 || notas[i] < 0 ) { System. } System. for ( int I = 0 . Pag. Clase PrgAlumnos package dominioDeLaAplicacion .leerDouble( ) .out. double notas[] = new double [numAlu] .out. Juan José Flores Cueto. i < numAlu .println ( “ El número de alumnos no es valido… Reintente! ” ) . i++ ) { do { System. double sumaNotas = 0 . i++ ) { sumaNotas = sumaNotas + notas[i] .out. // Determinación del tamaño del arreglo con consistencia de datos.out. notas[i] = Lectura. 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. if ( numAlu <= 0 ) { System. public class PrgAlumnos { public static void main(String[] args) { // Declaración de variables. int numAlu . // Declaración y creación de arreglo. } } while ( numAlu < 0 ) . de tal forma que permita consistenciar la entrada de datos. Ahora.print ( “ El promedio es : ” + ( sumaNotas / numAlu ) ) .out.leerInt( ) . import biblioteca. i < numAlu . Uno de los principales usos de la sentencia do es la consistencia de datos.* .Ing.println ( “ Nota ingresada no es valida… Reintente! ” ) .print ( “ Ingrese el número de alumnos : ” ) . for ( int i = 0 . se modificará nuevamente la solución anterior. // Proceso de ingreso de datos al arreglo notas[ ] con consistencia de datos. 424 . } } while ( notas[i] > 20 || notas[i] < 0 ) . } } Observe el uso de la sentencia do dentro de la sentencia for. } // Proceso de cálculo del promedio de notas finales. numAlu = Lectura. Se consistenciará el ingreso del número total de alumnos y de la nota final de cada uno de ellos. do { System.print ( “ Ingrese la nota final del alumno [” + ( i + 1) + “]: ” ) . Consistenciar el ingreso de datos. Desarrollar una solución que permita ingresar y almacenar las notas finales de todos los alumnos de un determinado salón de clase. Con el número de alumnos ingresado se crea un arreglo (notas[ ]). se realiza el cálculo del promedio. Después. FORMALIZACIÓN DE LA SOLUCIÓN UTILIZANDO EL MÉTODO DE LAS 6’D Problema 132 Etapa 01 . El número de alumnos se ingresa a través del teclado y se almacena en una variable (numAlu). 425 . Datos necesarios: Procesamiento: Pag. Determinar y mostrar el promedio de las notas finales. se almacena el resultado en una variable (prom) y se muestra por pantalla. El número de alumnos y las notas finales de cada uno de ellos.Definición de la solución. Luego se procede a ingresar las notas finales de todos los alumnos y se almacenan en el arreglo creado.Descripción del problema. se realiza la suma de todas las notas finales y el resultado se almacena en una variable acumulador (sumaNotas). Resultado deseado: Mostrar el promedio de las notas finales de los alumnos de un determinado salón de clase. Etapa 02 . Finalmente.ESTRUCTURAS DE DATOS – Arreglos. Ing. 426 . 1. Clases dominioDeLaAplicacion Clases biblioteca Pag. Nombre del Proyecto: ProyAlumnos. Definición de Paquetes y desarrollo del Diagrama de Paquetes.Diseño de la lógica. Etapa 03 . Juan José Flores Cueto. 2. Definición de las Clases. Diagrama de paquetes 3. .1 INCREMENTA 1 sumaNotas = sumaNotas + notas[i] FINDESDE prom = sumaNotas / numAlu ESCRIBIR prom FIN Pag. Algoritmo PrgAlumnos01 . Reintente!” FINSI MIENTRAS (numAlu <= 0 ) COMENTARIO “Creación del arreglo” CREAR notas [numAlu] COMENTARIO “Ingreso de datos al arreglo notas[ ]. notas[ ].” DESDE i = 0 HASTA i = numAlu . 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. notas[ ] SALIDA: prom INICIO COMENTARIO “Declaración de variables” NUMERO i..ESTRUCTURAS DE DATOS – Arreglos..método main ( ) ENTRADA: numAlu.1 INCREMENTA 1 HACER LEER notas[i] SI ( notas[i] > 20 || notas[i] < 0 ) ENTONCES ESCRIBIR “Nota no válida. 427 . Reintente!” FINSI MIENTRAS ( notas[i] > 20 || notas[i] < 0 ) FINDESDE COMENTARIO “Cálculo del promedio de notas finales” DESDE i = 0 HASTA i = numAlu . Diseño de algoritmo para el método principal.. 4. numAlu. for ( i = 0 .out. if ( numAlu <= 0 ) { System. import biblioteca. do { System.print ( “ Ingrese la nota final del alumno [ ” + ( i + 1) + “]: ” ) . prom .leerDouble( ) . } prom = sumaNotas / numAlu . double sumaNotas = 0. notas[i] = Lectura. i++ ) { do { System.out.Ing. } } while ( notas[i] > 20 || notas[i] < 0 ) . 428 . i < numAlu .println ( “ Nota ingresada no es válida… Reintente! ” ) . System. numAlu = Lectura. } } while ( numAlu <= 0 ) . // Proceso de ingreso de datos al arreglo notas[ ] con consistencia de datos.out. if ( notas[i] > 20 || notas[i] < 0 ) { System. Etapa 04 .print ( “ Ingrese el número de alumnos : ” ) . } } Pag. } // Proceso de cálculo del promedio de notas finales. for ( i = 0 .println ( “ El promedio es : ” + prom ) . int i. Juan José Flores Cueto.out. i++ ) { sumaNotas = sumaNotas + notas[i] . numAlu . i < numAlu .leerInt( ) .* .Desarrollo de la Codificación. // Declaración y creación del arreglo.println ( “ El número de alumnos no es válido… Reintente! ” ) . // Determinación del tamaño del arreglo con consistencia de datos.out. Clase PrgAlumnos01 package dominioDeLaAplicacion . public class PrgAlumnos01 { public static void main(String[] args) { // Declaración de variables. double notas[ ] = new double [numAlu] . se determina la nota más baja del alumno y se almacena en una variable (notaMenor). Problema 133 Etapa 01 . se redondea y se muestra por pantalla. Mostrar el promedio redondeado. Luego. se realiza el cálculo del promedio ((sumaNotas – notaMenor) / (numPra – 1)). se almacena el resultado en una variable (promAlu). El número de prácticas se ingresa a través del teclado y se almacena en una variable (numPra). Finalmente. Consistenciar el ingreso de datos. Pag. Determinar el promedio de las prácticas sabiendo que se elimina la práctica con la nota mas baja. Etapa 02 . se realiza la suma de todas las notas de las prácticas y el resultado se almacena en una variable de tipo acumulador (sumaNotas). El número de prácticas y las notas de las prácticas del alumno. Luego se procede a ingresar las notas de las prácticas del alumno y se almacenan en el arreglo creado. Después.Definición de la solución.Descripción del problema. Con el número de prácticas se crea un arreglo (notas[ ]). Resultado deseado: Datos necesarios: Procesamiento: Mostrar el promedio redondeado de las notas de las prácticas de un alumno. Desarrollar una solución que permita ingresar y almacenar las notas de todas las prácticas de un alumno. 429 .ESTRUCTURAS DE DATOS – Arreglos. Definición de las Clases. Clases dominioDeLaAplicacion Clases biblioteca Pag.Ing.Diseño de la lógica. 430 . Juan José Flores Cueto. Etapa 03 . Diagrama de paquetes 3. 2. Definición de Paquetes y desarrollo del Diagrama de Paquetes. Nombre del Proyecto: ProyAlumnos. 1. 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 .notaMenor ) / ( numPra . 4.” DESDE i = 0 HASTA i = numPra ..1 INCREMENTA 1 sumaNotas = sumaNotas + notas[i] FINDESDE DESDE i = 0 HASTA i = numPra .1 INCREMENTA 1 HACER LEER notas[i] SI ( notas[i] > 20 || notas[i] < 0 ) ENTONCES ESCRIBIR “Nota no válida. Diseño de algoritmo para el método principal.método main ( ) ENTRADA: numPra.1 INCREMENTA 1 SI ( notaMenor > notas[i] ) ENTONCES notaMenor = notas[i] FINSI FINDESDE promAlu = ( sumaNotas . notaMenor = 20 NUMERO notas[ ].1 ) promAlu = promAlu REDONDEA 0 ESCRIBIR promAlu FIN Pag.ESTRUCTURAS DE DATOS – Arreglos. numPra. Algoritmo PrgAlumnos02 .. notas[ ] SALIDA: promAlu INICIO COMENTARIO “Declaración de variables” NUMERO i. sumaNotas = 0. 431 . 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[ ]. double notas[ ] = new double [numPra] . if ( numPra <= 0 ) { System. // Determinación del tamaño del arreglo con consistencia de datos. promAlu = Math. } promAlu = sumaNotas / numAlu . numPra = Lectura.leerInt( ) . } } while ( numPra <= 0 ) . // Ingreso de datos al arreglo notas[ ] con consistencia de datos. import biblioteca.Desarrollo de la Codificación.println ( “ El número de prácticas no es válido… Reintente! ” ) .out. // Declaración y creación del arreglo. 432 .Ing.out. i < numPra . Clase PrgAlumnos02 package dominioDeLaAplicacion . int i. System. promAlu . i < numPra . i++ ) { do { System.round (promAlu) .leerDouble( ) . } for ( i = 0 . i < numPra . notaMenor = 20. for ( i = 0 .println ( “ El promedio es : ” + promAlu ) .out. Etapa 04 . } } Pag.out. for ( i = 0 . notas[i] = Lectura.out. Juan José Flores Cueto.print ( “ Ingrese el número de prácticas del alumno : ” ) . numPra . if ( notas[i] > 20 || notas[i] < 0 ) { System. public class PrgAlumnos02 { public static void main(String[] args) { // Declaración de variables. } // Proceso de cálculo del promedio de notas de las prácticas. } } while ( notas[i] > 20 || notas[i] < 0 ) .println ( “ Nota ingresada no es válida… Reintente! ” ) . i++ ) { sumaNotas = sumaNotas + notas[i] .* .print ( “ Ingrese la nota de la práctica [ ” + ( i + 1) + “]: ” ) . double sumaNotas = 0. i++ ) { if ( notaMenor > notas [i] ) notaMenor = notas[i] . do { System. se realiza la suma de las notas de sus tres prácticas y el resultado se almacena en una variable acumulador (sumaNotas). se determina su nota más alta y se almacena en una variable (notaMayor). El número de alumnos y las notas de las tres prácticas de cada alumno. Finalmente.ESTRUCTURAS DE DATOS – Arreglos. se realiza el cálculo de su promedio ((sumaNotas + notaMayor) / 4). Pag. Problema 134 Etapa 01 . Luego se procede a ingresar las notas de las tres prácticas de cada alumno y se almacenan en el arreglo creado. 433 . por cada alumno. Luego. Determinar el promedio de cada alumno sabiendo que se duplica su nota más alta. Mostrar el promedio redondeado. Después. 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. Con el número de alumnos se crea un arreglo (notas[ ][ ]). Resultado deseado: Datos necesarios: Procesamiento: Mostrar el promedio redondeado de las notas de las tres prácticas de cada alumno. se almacena el resultado en una variable (promAlu). Consistenciar el ingreso de datos. El número de alumnos se ingresa a través del teclado y se almacena en una variable (numAlu). se redondea y se muestra por pantalla.Definición de la solución.Descripción del problema. Etapa 02 . Diagrama de paquetes 3. 1. Nombre del Proyecto: ProyAlumnos. 434 . Definición de las Clases. Juan José Flores Cueto.Ing.Diseño de la lógica. Definición de Paquetes y desarrollo del Diagrama de Paquetes. Clases dominioDeLaAplicacion Clases biblioteca Pag. 2. Etapa 03 . notas[ ][ ] SALIDA: promAlu INICIO COMENTARIO “Declaración de variables” NUMERO i. 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 .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. 435 . Diseño de algoritmo para el método principal... notaMayor = 0 NUMERO notas[ ][ ]. Algoritmo PrgAlumnos03 . sumaNotas = 0.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.método main ( ) ENTRADA: numAlu. 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 . j.ESTRUCTURAS DE DATOS – Arreglos. 4. out. // Determinación del tamaño del arreglo con consistencia de datos. i++ ) { notaMayor = Math. sumaNotas = notas[i][0] + notas[i][1] + notas[i][2] .leerDouble( ) . promAlu = ( sumaNotas + notaMayor ) / 4 . } } while ( notas[i][j] > 20 || notas[i][j] < 0 ) . promAlu = Math.leerInt( ) . public class PrgAlumnos03 { public static void main(String[] args) { // Declaración de variables. for { i = 0 . numAlu = Lectura. for ( i = 0 .out. j < 3 . } } } Pag. Juan José Flores Cueto.max (notas[i][0]. if ( numAlu <= 0 ) { System. System. do { System. Etapa 04 . } } // Cálculo del promedio de notas por alumno.out. } } while ( numAlu <= 0 ) . j++ ) { do { System. if ( notas[i][j] > 20 || notas[i][j] < 0 ) { System.println ( “ El promedio del alumno [ ” + ( i + 1 ) + “ ] es: ” + promAlu ) . Clase PrgAlumnos03 package dominioDeLaAplicacion .println ( “ El número de alumnos no es válido… Reintente! ” ) . i < numAlu .println ( “ Nota ingresada no es válida… Reintente! ” ) . for ( i = 0 . import biblioteca.out. int i.max (notas[i][2].print ( “ Ingrese el número de alumnos : ” ) .round (promAlu) . notas[i][1] ) .Desarrollo de la Codificación. notaMayor = Math. notaMayor ) . i++ ) { System. numAlu .println ( “ Alumno [ ” + ( i + 1) + “ ]: ” ) .print ( “ Ingrese la nota de la práctica [ ” + ( j + 1) + “]: ” ) . // Ingreso de datos al arreglo notas[ ][ ] con consistencia de datos. i < numAlu .Ing.out. promAlu . j. double sumaNotas = 0. // Declaración y creación del arreglo.out. notaMayor = 0. double notas[ ][ ] = new double [numAlu][3] . notas[i][j] = Lectura. 436 .* . el número de prácticas y las notas de las prácticas de cada alumno. se almacena el resultado en una variable (promAlu). Luego se procede a ingresar las notas de las prácticas de cada alumno y se almacenan en el arreglo creado. Determinar el promedio de cada alumno sabiendo que se duplica su nota más alta y se elimina su práctica con la nota mas baja. Mostrar el promedio redondeado a dos decimales. Datos necesarios: Procesamiento: Pag.notaMenor) / numPra).Descripción del problema. Con los datos ingresados se crea un arreglo (notas[ ][ ]). Finalmente.Definición de la solución. se redondea y se muestra por pantalla. Finalmente. se determina su nota más alta y se almacena en una variable (notaMayor). se realiza el cálculo de su promedio ((sumaNotas + notaMayor . 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. 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. Luego. Después. 437 . Problema 135 Etapa 01 . se realiza la suma de las notas de las prácticas y el resultado se almacenan en una variable de tipo acumulador (sumaNotas). El número de alumnos. por cada alumno. Etapa 02 . determinar y mostrar el promedio simple de todas las notas de las prácticas de los alumnos del salón de clase. Consistenciar el ingreso de datos. 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). También se determina su nota mas baja y se almacena en una variable (notaMenor).ESTRUCTURAS DE DATOS – Arreglos. Diagrama de paquetes 3. Nombre del Proyecto: ProyAlumnos. 438 . 2. Etapa 03 . Definición de las Clases. 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). Se determina el promedio simple.Diseño de la lógica.Ing. Juan José Flores Cueto. Clases dominioDeLaAplicacion Clases biblioteca Pag. Adicionalmente. 1. Definición de Paquetes y desarrollo del Diagrama de Paquetes. se almacena el resultado en una variable (prom) y se muestra por pantalla. numAlu. prom COMENTARIO “Determinación del tamaño del arreglo” HACER LEER numAlu SI (numAlu <= 0 ) ENTONCES ESCRIBIR “Número de alumnos no válido. prom INICIO COMENTARIO “Declaración de variables” NUMERO i. numPra. Reintente!” FINSI MIENTRAS (numAlu <= 0 ) HACER LEER numPra SI (numPra <= 0 ) ENTONCES ESCRIBIR “Número de prácticas no válido.ESTRUCTURAS DE DATOS – Arreglos.1 INCREMENTA 1 HACER LEER notas[i][j] SI ( notas[i][j] > 20 || notas[i][j] < 0 ) ENTONCES ESCRIBIR “Nota no válida.1 INCREMENTA 1 DESDE j = 0 HASTA j = numPra . promAlu. notas[ ][ ] SALIDA: promAlu. notaMayor = 0 NUMERO notaMenor = 20. Diseño de algoritmo para el método principal. Algoritmo PrgAlumnos04 .. Reintente!” FINSI MIENTRAS ( notas[i][j] > 20 || notas[i][j] < 0 ) FINDESDE FINDESDE Pag.. 4..método main ( ) ENTRADA: numAlu. j. sumaNotas = 0. 439 . numPra. 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 . notas[ ][ ].. 1 INCREMENTA 1 notaMayor = 0 notaMenor = 20 sumaNotas = 0 DESDE j = 0 HASTA j = numPra .Ing. Continúa… 4.1 INCREMENTA 1 sumaNotas = sumaNotas + notas[i][j] FINDESDE FINDESDE prom = sumaNotas / ( numAlu * numPra ) prom = prom REDONDEA 2 ESCRIBIR prom FIN Pag.1 INCREMENTA 1 DESDE j = 0 HASTA j = numPra . Diseño de algoritmo para el método principal.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 . Juan José Flores Cueto. 440 . Algoritmo PrgAlumnos04 – método main ( ) COMENTARIO “Cálculo del promedio de notas por alumno” DESDE i = 0 HASTA i = numAlu . out. numAlu = Lectura.Desarrollo de la Codificación. prom . j < numPra . double sumaNotas = 0. promAlu. j. if ( numPra <= 0 ) { System.println ( “ El número de prácticas no es válido… Reintente! ” ) .out. numPra = Lectura.leerDouble( ) .out. import biblioteca. notaMenor = 20.print ( “ Ingrese el número de alumnos : ” ) . Clase PrgAlumnos04 package dominioDeLaAplicacion . j++ ) { do { System. /// Determinación del tamaño del arreglo con consistencia de datos. } } while ( notas[i][j] > 20 || notas[i][j] < 0 ) . do { System.leerInt( ) . numAlu. i < numAlu . } } Pag. // Declaración y creación del arreglo.println ( “ El número de alumnos no es válido… Reintente! ” ) . int i.print ( “ Ingrese el número de prácticas : ” ) .ESTRUCTURAS DE DATOS – Arreglos.println ( “ Alumno [ ” + ( i + 1) + “ ]: ” ) . } } while ( numPra < 0 ) . double notas[ ][ ] = new double [numAlu][numPra] .out. i++ ) { System. for ( i = 0 .* .print ( “ Ingrese la nota de la práctica [ ” + ( j + 1) + “]: ” ) . for { i = 0 . notas[i][j] = Lectura. Etapa 04 . public class PrgAlumnos04 { public static void main(String[] args) { // Declaración de variables. numPra . // Ingreso de datos al arreglo notas[ ][ ] con consistencia de datos. } } while ( numAlu <= 0 ) . if ( numAlu <= 0 ) { System.out.leerInt( ) .println ( “ Nota ingresada no es válida… Reintente! ” ) .out.out. if ( notas[i][j] > 20 || notas[i][j] < 0 ) { System. notaMayor = 0. 441 . do { System. sumaNotas = 0 . System. sumaNotas = sumaNotas + notas[i][j] . j++ ) { notaMayor = Math.round (prom * 100) ) / 100. j < numPra . for { i = 0 . sumaNotas = 0 .notaMenor) / ( numAlu * numPra ) .out. j++ ) { sumaNotas = sumaNotas + notas[i][j] .0 .println ( “ El promedio simple de las notas es : ” + prom ) .Desarrollo de la Codificación.out. i++ ) { notaMayor = 0 .round (prom * 100) ) / 100.Ing. } // Cálculo del promedio simple de todas las notas. i++ ) { for { i = 0 .max (notas[i][j]. 442 . i < numAlu . Continúa… Etapa 04 . notaMenor = 20 . } promAlu = ( sumaNotas + notaMayor . notaMenor ) .notaMenor) / numPra . System. for ( i = 0 . Juan José Flores Cueto.0 . } } prom = ( sumaNotas + notaMayor . } } Pag. notaMenor = Math. Clase PrgAlumnos04 // Cálculo del promedio de notas por alumno. notaMayor) . prom = ( Math.println ( “ El promedio del alumno [ ” + ( i + 1 ) + “ ] es: ” + promAlu ) . promAlu = ( Math. for ( i = 0 . i < numAlu .max (notas[i][j]. j < numPra . calcular y mostrar el promedio obtenido por los alumnos en el examen final. Datos necesarios: Procesamiento: Pag. promedio de trabajos y examen final de todos los alumnos de un salón de clase. Se determina el promedio simple. Con el número de alumnos se crea un arreglo (notas[ ][ ]). También. 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).ESTRUCTURAS DE DATOS – Arreglos. El número de alumnos se ingresa a través del teclado y se almacena en una variable (numAlu). Consistenciar el ingreso de los datos. el promedio obtenido por los alumnos en el examen final y el porcentaje de alumnos aprobados y desaprobados. se redondea y se muestra por pantalla. por cada alumno. Adicionalmente. Finalmente. promedio de trabajos y examen final de cada alumno y se almacenan en el arreglo creado. Problema 136 Etapa 01 . Etapa 02 . se determina su promedio ((sumaNotas notaMenor) / 4).Definición de la solución. Resultado deseado: Mostrar el promedio redondeado de las notas de cada alumno. 443 . se almacena el resultado en una variable (promAlu). determinar y mostrar el porcentaje de alumnos aprobados y el porcentaje de alumnos desaprobados. Mostrar el promedio redondeado.Descripción del problema. promedio de trabajos y examen final (multiplicado por 2). Determinar el promedio de cada alumno sabiendo que se duplica la nota del examen final. se realiza la suma de la nota del examen parcial. Luego se procede a ingresar las notas del examen parcial. promedio de trabajos y examen final de cada alumno. Desarrollar una solución que permita ingresar y almacenar las notas del examen parcial. Luego. El número de alumnos y las notas del examen parcial. y el resultado se almacena en una variable de tipo acumulador (sumaNotas). Después. Etapa 03 . Juan José Flores Cueto. 444 . se almacena el resultado en una variable (promEF). 2. almacenando los resultados en variables (aprobados y desaprobados respectivamente). 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. luego se realiza el calculo del porcentaje de alumno aprobados y desaprobados. Definición de Paquetes y desarrollo del Diagrama de Paquetes. Definición de las Clases. se almacena el resultado en variables (porceAprob y porceDesaprob respectivamente). Finalmente.Ing. Diagrama de paquetes 3. 1. se redondea y se muestra por pantalla. y se muestran por pantalla.Diseño de la lógica. Clases dominioDeLaAplicacion Clases biblioteca Pag. Nombre del Proyecto: ProyAlumnos. Diseño de algoritmo para el método principal. porceDesaprob NUMERO aprobados = 0. desaprobados = 0. sumaNotas = 0. 445 . porceAprob. numAlu. promEF.. Reintente!” FINSI MIENTRAS ( notas[1][i] > 20 || notas[1][i] < 0 ) Pag. sumaEF = 0 NUMERO notas[ ][ ]...ESTRUCTURAS DE DATOS – Arreglos. Algoritmo PrgAlumnos05. 4.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..método main ( ) ENTRADA: numAlu. promAlu. notas[ ][ ] SALIDA: promAlu. 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. promEF. porceDesaprob INICIO COMENTARIO “Declaración de variables” NUMERO i. 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 . . 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 .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 .porceAprob ESCRIBIR porceAprob + “ % ” ESCRIBIR porceDesaprob + “ % ” FIN Pag..Ing. Diseño de algoritmo para el método principal. Juan José Flores Cueto. 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 .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.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 . 446 . out. 447 . public class PrgAlumnos05 { public static void main(String[] args) { // Declaración de variables. import biblioteca. Etapa 04 .leerInt( ) . if ( notas[2][i] > 20 || notas[2][i] < 0 ) { System.print ( “ Ingrese la nota del examen parcial : ” ) . numAlu = Lectura.print ( “ Ingrese el número de alumnos : ” ) . promAlu.println ( “ Nota ingresada no es válida… Reintente! ” ) . notas[2][i] = Lectura. if ( notas[1][i] > 20 || notas[1][i] < 0 ) { System. } } while ( notas[2][i] > 20 || notas[2][i] < 0 ) . aprobados = 0.ESTRUCTURAS DE DATOS – Arreglos.println ( “ Nota ingresada no es válida… Reintente! ” ) . porceAprob.leerDouble( ) . } } while ( notas[1][i] > 20 || notas[1][i] < 0 ) .print ( “ Ingrese la nota del examen final : ” ) . int i. notas[1][i] = Lectura. i < numAlu . if ( notas[0][i] > 20 || notas[0][i] < 0 ) { System. sumaEF = 0.leerDouble( ) .print ( “ Ingrese la nota promedio de trabajos : ” ) .out.* .out. } Pag. Clase PrgAlumnos05 package dominioDeLaAplicacion .out.out. notas[0][i] = Lectura.leerDouble( ) . double sumaNotas = 0.Desarrollo de la Codificación.println ( “ El número de alumnos no es válido… Reintente! ” ) . do { System. i++ ) { System. // Declaración y creación del arreglo. do { System. } } while ( notas[0][i] > 20 || notas[0][i] < 0 ) . // Ingreso de datos al arreglo notas[ ][ ] con consistencia de datos. do { System. for ( i = 0 . promEF.println ( “ Nota ingresada no es válida… Reintente! ” ) . porceDesaprob . double notas[ ][ ] = new double [3][numAlu] .out. numAlu.out. } } while ( numAlu <= 0 ) . desaprobados = 0 . if ( numAlu <= 0 ) { System.out. do { System. // Determinación del tamaño del arreglo con consistencia de datos.out.println ( “ Alumno [ ” + ( i + 1) + “ ]: ” ) . println ( “ El promedio de las notas del examen final es : ” + promEF ) .println ( “ El promedio del alumno [ ” + ( i + 1 ) + “ ] es: ” + promAlu ) . promAlu = sumaNotas / 4 . i < numAlu . } // Cálculo del promedio simple del examen final.out.out. promEF = ( Math.out. Juan José Flores Cueto. System. i < numAlu . if ( promAlu < 11 ) { desaprobados ++ . System. porceDesaprob = 100 – porceAprob . Continúa… Etapa 04 .println ( porceDesaprob + “ % ” ) . // Cálculo de alumnos aprobados y desaprobados. promAlu = Math. for ( i = 0 .out. i < numAlu . promAlu = sumaNotas / 4 . System.0 . porceAprob = ( Math. } promEF = sumaEF / numAlu .print ( “ El porcentaje de alumnos desaprobados es : ” ) . i++ ) { sumaNotas = notas[0][i] + notas[1][i] + notas[2][i] * 2 . System. i++ ) { sumaNotas = notas[0][i] + notas[1][i] + notas[2][i] * 2 .println ( “ El porcentaje de alumnos aprobados es : ” + porceAprob + “ % ” ) . Clase PrgAlumnos05 // Cálculo del promedio de notas por alumno. i++ ) { sumaEF = sumaEF + notas[2][i] .round (porceAprob * 100) ) / 100. promAlu = Math. for ( i = 0 . 448 .Ing.round (promAlu) .round (promAlu) .round (promEF * 100) ) / 100. } } porceAprob = ( aprobados * 100 ) / numAlu .0 .Desarrollo de la Codificación. } } Pag. } else { aprobados ++ .out. for ( i = 0 . System. Si el trabajador tiene un sueldo mayor a S/.1. El aumento se almacena en una variable (aumento). Con el número de trabajadores se crea un arreglo (sueldos[ ]). en base a su sueldo se determina su aumento de sueldo. Consistenciar los datos ingresados.00 nuevos soles se le aumenta el 20% de su sueldo. Problema 137 Etapa 01 . Desarrollar una solución que permita ingresar y almacenar el sueldo de todos los trabajadores de una empresa. se le aumenta el 5% de su sueldo y en otros casos el aumento es del 10% de su sueldo. de acuerdo a la siguiente tabla. 449 . Calcular y mostrar el aumento de sueldo de cada uno de los trabajadores (redondeado a dos decimales).Descripción del problema.ESTRUCTURAS DE DATOS – Arreglos. Resultado deseado: Datos necesarios: Procesamiento: Mostrar el aumento de sueldo de cada uno de los trabajadores de una empresa. Si el trabajador tiene un sueldo menor a S/. Después.Definición de la solución. se redondea y se muestra por pantalla.00 nuevos soles.600. Pag.410. El número de trabajadores se ingresa a través del teclado y se almacena en una variable (numTrab). por cada trabajador. El número de trabajadores de la empresa y el sueldo de cada uno de ellos. Luego se procede a ingresar los sueldos de cada trabajador y se almacenan en el arreglo creado. Condición sueldo < 410 sueldo >= 410 y sueldo <= 1600 sueldo > 1600 Aumento 20 % 10 % 05 % Etapa 02 . 2. Definición de Paquetes y desarrollo del Diagrama de Paquetes. 450 .Diseño de la lógica. Etapa 03 . Clases dominioDeLaAplicacion Clases biblioteca Pag.Ing. Nombre del Proyecto: ProyTrabajadores. Diagrama de paquetes 3. Definición de las Clases. 1. Juan José Flores Cueto. 2 SINO SI ( sueldos[i] > 1600 ) aumento = sueldos[i] * 0. 4. sueldos[ ].1 INCREMENTA 1 HACER LEER sueldos[i] SI ( sueldos[i] <= 0 ) ENTONCES ESCRIBIR “Sueldo ingresado no es válido. Diseño de algoritmo para el método principal. 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 .05 SINO aumento = sueldos[i] * 0. Algoritmo PrgTrabajadores01 .ESTRUCTURAS DE DATOS – Arreglos.. ” FINSI MIENTRAS ( sueldos[i] <= 0 ) FINDESDE COMENTARIO “Cálculo del aumento de sueldo por trabajador” DESDE i = 0 HASTA i = numTrab .método main ( ) ENTRADA: numTrab.10 FINSI FINSI aumento = aumento REDONDEA 2 ESCRIBIR aumento FINDESDE FIN Pag.1 INCREMENTA 1 SI ( sueldos[i] < 410 ) ENTONCES aumento = sueldos[i] * 0. numTrab. 451 . sueldos[ ] SALIDA: aumento INICIO COMENTARIO “Declaración de variables” NUMERO i.. Clase PrgTrabajadores01 package dominioDeLaAplicacion .println ( “ Sueldo ingresado no es válido… Reintente! ” ) . double sueldos[ ] = new double [numTrab] .05 . double aumento = 0 . sueldos[i] = Lectura.out. } } aumento = ( Math. if ( sueldos[i] <= 0 ) { System. } } } Pag.* . int i.round (aumento * 100) ) / 100.println ( “ El número de trabajadores no es válido… Reintente! ” ) . // Declaración y creación del arreglo.out. } else { if ( sueldos[i] > 1600 ) { aumento = sueldos[i] * 0. // Ingreso de datos al arreglo sueldos[ ] con consistencia de datos.println ( “ Aumento del trabajador [ ” + ( i + 1) + “ ] es : ” + aumento ) . // Determinación del tamaño del arreglo con consistencia de datos.10 .Desarrollo de la Codificación. for ( i = 0 . i < numTrab .out. do { System.leerInt( ) . numTrab = Lectura. } // Cálculo del aumento de sueldo por trabajador.leerDouble( ) . i < numTrab . public class PrgTrabajadores01 { public static void main(String[] args) { // Declaración de variables. import biblioteca. if ( numTrab <= 0 ) { System. i++ ) { if ( sueldos[i] < 410 ) { aumento = sueldos[i] * 0. Juan José Flores Cueto.print ( “ Ingrese el número de trabajadores de la empresa : ” ) . System.2 . for ( i = 0 .out.0 .Ing. numTrab . } else { aumento = sueldos[i] * 0. 452 . } } while ( sueldos[i] <= 0 ) . i++ ) { do { System.print ( “ Ingrese el sueldo del trabajador [ ” + ( i + 1) + “ ]: ” ) . } } while ( numTrab <= 0 ) .out. Etapa 04 . Definición de la solución.1600. Pag.00 nuevos soles.600. y se almacena en una variable (aumento). Mostrar el sueldo neto a cobrar por cada trabajador redondeado a dos decimales. Si el trabajador tiene un sueldo mayor a S/. en base a su sueldo se determina su descuento o su aumento. El número de trabajadores de la empresa y el sueldo de cada uno de ellos. Luego se procede a ingresar los sueldos de cada trabajador y se almacenan en el arreglo creado. Desarrollar una solución que permita ingresar y almacenar el sueldo de todos los trabajadores de una empresa.00 nuevos soles se le descontará el 15% de su sueldo por impuestos y se almacena en una variable (descuento).1000.Descripción del problema.ESTRUCTURAS DE DATOS – Arreglos.00 nuevos soles se le deberá descontar 15% por impuestos y a todos los trabajadores cuyo sueldo sea menor a S/. Luego. El número de trabajadores se ingresa a través del teclado y se almacena en una variable (numTrab). 453 .1. se almacena el resultado en una variable (sueldoNeto). Si el trabajador tiene un sueldo menor a S/.00 nuevos soles se le deberá aumentar el 10% por concepto de refrigerio y movilidad. A todos los empleados cuyo sueldo sea mayor a S/. por cada trabajador. Con el número de trabajadores se crea un arreglo (sueldos[ ]). Resultado deseado: Datos necesarios: Procesamiento: Mostrar el sueldo neto a cobrar por cada trabajador de la empresa. Problema 138 Etapa 01 . se redondea y se muestra por pantalla. se le aumenta el 10% de su sueldo por concepto de refrigerio y movilidad. Etapa 02 . Consistenciar los datos ingresados. Después. se determina el sueldo neto ((sueldo – descuento + aumento).1000. Clases dominioDeLaAplicacion Clases biblioteca Pag. Definición de las Clases.Diseño de la lógica. Nombre del Proyecto: ProyTrabajadores. Definición de Paquetes y desarrollo del Diagrama de Paquetes. Diagrama de paquetes 3. 1. Etapa 03 . Juan José Flores Cueto. 2.Ing. 454 . descuento = 0. 4. Diseño de algoritmo para el método principal. sueldos[ ] SALIDA: sueldoNeto INICIO COMENTARIO “Declaración de variables” NUMERO i. 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 .15 FINSI SI ( sueldos[i] < 1000 ) aumento = sueldos[i] * 0.1 INCREMENTA 1 HACER LEER sueldos[i] SI ( sueldos[i] <= 0 ) ENTONCES ESCRIBIR “Sueldo ingresado no es válido.método main ( ) ENTRADA: numTrab.ESTRUCTURAS DE DATOS – Arreglos. ” FINSI MIENTRAS ( sueldos[i] <= 0 ) FINDESDE COMENTARIO “Cálculo del sueldo neto de cada trabajador” DESDE i = 0 HASTA i = numTrab . numTrab. sueldos[ ]. 455 . Algoritmo PrgTrabajadores02 .10 FINSI sueldoNeto = sueldos[i] – descuento + aumento sueldoNeto = sueldoNeto REDONDEA 2 ESCRIBIR sueldoNeto FINDESDE FIN Pag...1 INCREMENTA 1 descuento = 0 aumento = 0 SI ( sueldos[i] > 1600 ) ENTONCES descuento = sueldos[i] * 0. import biblioteca.println ( “ Sueldo ingresado no es válido… Reintente! ” ) . 456 . int i. if ( sueldos[i] > 1600 ) descuento = sueldos[i] * 0. } } } Pag.out.println ( sueldoNeto ) .15 . } } while ( numTrab <= 0 ) .print ( “ El sueldo neto del trabajador [ ” + ( i + 1) + “ ] es : ” ) .println ( “ El número de trabajadores no es válido… Reintente! ” ) . sueldoNeto = ( Math.out. numTrab . Etapa 04 . double sueldos[ ] = new double [numTrab] .0 .leerInt( ) . // Determinación del tamaño del arreglo con consistencia de datos. for ( i = 0 . for ( i = 0 . Juan José Flores Cueto. System. double aumento = 0.Ing. // Ingreso de datos al arreglo sueldos[ ] con consistencia de datos. do { System.10 . i < numTrab . numTrab = Lectura. if ( sueldos[i] < 1000 ) aumento = sueldos[i] * 0.print ( “ Ingrese el sueldo del trabajador [ ” + ( i + 1) + “ ]: ” ) . aumento = 0 .out. descuento = 0 . sueldoNeto = sueldos[i] – descuento + aumento . sueldos[i] = Lectura.leerDouble( ) . if ( numTrab <= 0 ) { System. public class PrgTrabajadores02 { public static void main(String[] args) { // Declaración de variables.out.round (sueldoNeto * 100) ) / 100.out. i++ ) { do { System. i++ ) { descuento = 0 . // Declaración y creación del arreglo.out. Clase PrgTrabajadores02 package dominioDeLaAplicacion .Desarrollo de la Codificación. if ( sueldos[i] <= 0 ) { System. System.* . i < numTrab .print ( “ Ingrese el número de trabajadores de la empresa : ” ) . } } while ( sueldos[i] <= 0 ) . } // Cálculo del sueldo neto de cada trabjador. Descripción del problema. 457 . se le aumenta el 5% de su sueldo y se le descuenta 15%. Problema 139 Etapa 01 .ESTRUCTURAS DE DATOS – Arreglos.600. mostrar el monto total que paga la empresa por concepto de sueldos. Con el número de trabajadores se crea un arreglo (sueldos[ ]).1. su aumento y su respectivo descuento en base a la tabla mostrada (redondear dichas cantidades a dos decimales). Después. Desarrollar una solución que permita ingresar y almacenar el sueldo de todos los trabajadores de una empresa.00 nuevos soles se le aumenta el 20% de su sueldo y no se le realiza ningún descuento. su aumento y su respectivo descuento. Si el trabajador tiene un sueldo mayor a S/. Calcular y mostrar el sueldo neto de cada trabajador.Definición de la solución. El número de trabajadores se ingresa a través del teclado y se almacena en una variable (numTrab). Si el trabajador tiene un sueldo menor a S/. Resultado deseado: Mostrar el sueldo neto a cobrar por cada trabajador de la empresa. También mostrar el monto total que paga la empresa por concepto de sueldos. Condición sueldo < 410 sueldo >= 410 y sueldo <= 1600 sueldo > 1600 Aumento 20% 10% 05% Descuento 00 % 08 % 15 % Etapa 02 . Luego se procede a ingresar los sueldos de cada trabajador y se almacenan en el arreglo creado. En otros casos el aumento es del 10% de su sueldo y el descuento es de Datos necesarios: Procesamiento: Pag. Adicionalmente.410. El número de trabajadores de la empresa y el sueldo de cada uno de ellos. por cada trabajador. Consistenciar los datos ingresados.00 nuevos soles. en base a su sueldo se determina su respectivo aumento y descuento. Juan José Flores Cueto. 2. se redondea y se muestra por pantalla. Definición de Paquetes y desarrollo del Diagrama de Paquetes. Después de finalizar el cálculo del sueldo neto de cada trabajador se muestra por pantalla el contenido de la variable acumulador sueldoTotal.Ing. Diagrama de paquetes Pag. El aumento se almacena en una variable (aumento) y el descuento en otra variable (descuento). Nombre del Proyecto: ProyTrabajadores. 458 . También se muestra el aumento y el descuento calculado. Etapa 03 . se almacena el resultado en una variable (sueldoNeto). El sueldo neto obtenido se suma a una variable acumulador (sueldoTotal). se determina el sueldo neto ((sueldo – descuento + aumento). Luego. 1. 8%.Diseño de la lógica. Definición de las Clases. aumento = 0. descuento. sueldos[ ] SALIDA: sueldoNeto. Clases dominioDeLaAplicacion Clases biblioteca 4. sueldos[ ]. 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. sueldoTotal INICIO COMENTARIO “Declaración de variables” NUMERO i.método main ( ) ENTRADA: numTrab. aumento.ESTRUCTURAS DE DATOS – Arreglos. 3. 459 . Diseño de algoritmo para el método principal. Algoritmo PrgTrabajadores03 . numTrab. Ing. Juan José Flores Cueto. ” FINSI MIENTRAS ( sueldos[i] <= 0 ) FINDESDE COMENTARIO “Cálculo del sueldo neto. Continúa… 4. Algoritmo PrgTrabajadores03 .1 INCREMENTA 1 SI ( sueldos[i] < 410 ) ENTONCES aumento = sueldos[i] * 0.15 SINO aumento = sueldos[i] * 0.08 FINSI FINSI sueldoNeto = sueldos[i] – descuento + aumento sueldoNeto = sueldoNeto REDONDEA 2 aumento = aumento REDONDEA 2 descuento = descuento REDONDEA 2 ESCRIBIR sueldoNeto.1 INCREMENTA 1 HACER LEER sueldos[i] SI ( sueldos[i] <= 0 ) ENTONCES ESCRIBIR “Sueldo ingresado no es válido.. Diseño de algoritmo para el método principal.método main ( ) COMENTARIO “Ingreso de datos al arreglo sueldos[ ]” DESDE i = 0 HASTA i = numTrab .05 descuento = sueldos[i] * 0. descuento sueldoTotal = sueldoTotal + sueldoNeto FINDESDE ESCRIBIR sueldoTotal FIN Pag.. 460 . aumento y descuento por trabajador.2 descuento = 0 SINO SI ( sueldos[i] > 1600 ) aumento = sueldos[i] * 0. aumento.10 descuento = sueldos[i] * 0. y del total de sueldos ” DESDE i = 0 HASTA i = numTrab . sueldos[i] = Lectura. descuento = 0. } Pag.leerDouble( ) . i < numTrab .println ( “ El número de trabajadores no es válido… Reintente! ” ) .print ( “ Ingrese el sueldo del trabajador [ ” + ( i + 1) + “ ]: ” ) .out. } } while ( numTrab <= 0 ) . Etapa 04 . // Declaración y creación del arreglo. public class PrgTrabajadores03 { public static void main(String[] args) { // Declaración de variables.println ( “ Sueldo ingresado no es válido… Reintente! ” ) .out. do { System. for ( i = 0 .Desarrollo de la Codificación. numTrab . // Determinación del tamaño del arreglo con consistencia de datos.* . if ( numTrab <= 0 ) { System. if ( sueldos[i] <= 0 ) { System. double sueldos[ ] = new double [numTrab] . int i. import biblioteca. 461 . i++ ) { do { System. double aumento = 0. sueldoTotal = 0 .out.leerInt( ) . sueldoNeto. Clase PrgTrabajadores03 package dominioDeLaAplicacion .out.ESTRUCTURAS DE DATOS – Arreglos. numTrab = Lectura. // Ingreso de datos al arreglo sueldos[ ] con consistencia de datos.print ( “ Ingrese el número de trabajadores de la empresa : ” ) . } } while ( sueldos[i] <= 0 ) . println ( “ Su descuento es : ” + descuento ) . } } sueldoNeto = sueldos[i] + aumento – descuento .println ( “ Monto total pagado por concepto de sueldos : ” + sueldoTotal ) .out. aumento = ( Math.08 .0 .10 . } } Pag.out.Ing. System. Clase PrgTrabajadores03 // Cálculo del sueldo neto. sueldoTotal = sueldoTotal + sueldoNeto .println ( sueldoNeto ) . aumento y descuento por trabajador. } System. } else { aumento = sueldos[i] * 0. 462 . descuento = sueldos[i] * 0.round (aumento * 100) ) / 100.println ( “ Su aumento es : ” + aumento ) . System.out.2 . descuento = 0 .Desarrollo de la Codificación. descuento = ( Math. System.print ( “ El sueldo neto del trabajador [ ” + ( i + 1) + “ ] es : ” ) . i++ ) { if ( sueldos[i] < 410 ) { aumento = sueldos[i] * 0. } else { if ( sueldos[i] > 1600 ) { aumento = sueldos[i] * 0. System.0 .out. i < numTrab . descuento = sueldos[i] * 0. Juan José Flores Cueto. for ( i = 0 . sueldoNeto = ( Math.15 .0 .05 . y del total de sueldos.round (descuento * 100) ) / 100. Continúa… Etapa 04 .round (sueldoNeto * 100) ) / 100.out. Definición de la solución. El número de trabajadores de la empresa.Descripción del problema. sabiendo que se tiene que descontar el 10% por impuestos y el 5% por seguro. por cada trabajador. Calcular y mostrar el sueldo neto de cada trabajador.ESTRUCTURAS DE DATOS – Arreglos. Luego se procede a ingresar las horas trabajadas y la tarifa horaria de cada trabajador y se almacenan en el arreglo creado.Diseño de la lógica. Con el número de trabajadores se crea un arreglo (sueldos[ ][ ]). Problema 140 Etapa 01 . Resultado deseado: Datos necesarios: Mostrar el sueldo de cada trabajador de la empresa. Pag. se determina el sueldo neto ((horas trabajadas * tarifa horaria * 1. y las horas trabajadas y la tarifa horaria de cada uno de ellos. Después.15). 463 . Etapa 02 . El número de trabajadores se ingresa a través del teclado y se almacena en una variable (numTrab). Procesamiento: Etapa 03 . Nombre del Proyecto: ProyTrabajadores. se redondea y se muestra por pantalla. se almacena el resultado en una variable (sueldoNeto). Desarrollar una solución que permita ingresar y almacenar las horas trabajadas y la tarifa horaria de todos los trabajadores de una empresa. 1. 464 . Definición de Paquetes y desarrollo del Diagrama de Paquetes. Diagrama de paquetes 3. 2.Ing. Juan José Flores Cueto. Definición de las Clases. Clases dominioDeLaAplicacion Clases biblioteca Pag. sueldos[ ][ ]. numTrab.método main ( ) ENTRADA: 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..ESTRUCTURAS DE DATOS – Arreglos. Diseño de algoritmo para el método principal. 465 .1 INCREMENTA 1 sueldoNeto = sueldo[i][0] * sueldo[i][1] * 0. 4.85 ESCRIBIR sueldoNeto FINDESDE FIN Pag. Algoritmo PrgTrabajadores04 .. sueldos[ ][ ] SALIDA: sueldoNeto INICIO COMENTARIO “Declaración de variables” NUMERO i. ” 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 . ” FINSI MIENTRAS ( sueldos[i][1] <= 0 ) FINDESDE COMENTARIO “Cálculo del sueldo neto de cada trabajador” DESDE i = 0 HASTA i = numTrab . out. // Ingreso de datos al arreglo sueldos[ ][ ] con consistencia de datos.out.print ( “ Ingrese el número de trabajadores de la empresa : ” ) . } } while ( numTrab <= 0 ) . i++ ) { System. if ( sueldos[i][0] <= 0 ) { System.print ( “ Número de horas trabajadas: ” ) . int i. for ( i = 0 .Desarrollo de la Codificación. } } while ( sueldos[i][0] <= 0 ) .println ( “ El número de trabajadores no es válido… Reintente! ” ) .out. sueldos[i][0] = Lectura. import biblioteca. i < numTrab . // Determinación del tamaño del arreglo con consistencia de datos. double sueldos[ ][ ] = new double [numTrab][2] . Juan José Flores Cueto. do { System.out. public class PrgTrabajadores04 { public static void main(String[] args) { // Declaración de variables.* . do { System. sueldos[i][1] = Lectura. } Pag. double sueldoNeto .println ( “ Ingrese los datos del trabajador [ ” + ( i + 1) + “ ]: ” ) . 466 .println ( “Número de horas trabajadas no válida… ” ) . do { System. if ( numTrab <= 0 ) { System. if ( sueldos[i][1] <= 0 ) { System.leerDouble( ) .print ( “ Tarifa horaria: ” ) . numTrab . numTrab = Lectura.leerDouble( ) .leerInt( ) . Etapa 04 . // Declaración y creación del arreglo. Clase PrgTrabajadores04 package dominioDeLaAplicacion .out.out.Ing.out.println ( “ Tarifa horaria no válida… ” ) . } } while ( sueldos[i][1] <= 0 ) . out. Continúa… Etapa 04 .ESTRUCTURAS DE DATOS – Arreglos. for ( i = 0 . } } } Pag.Desarrollo de la Codificación.85 . i++ ) { sueldoNeto = sueldos[i][0] * sueldos[i][1] * 0.println ( sueldoNeto ) . System. System. 467 . Clase PrgTrabajadores04 // Cálculo del sueldo neto de cada trabajador.print ( “ El sueldo neto del trabajador [ ” + ( i + 1) + “ ] es : ” ) .out. i < numTrab . Después. El número de trabajadores se ingresa a través del teclado y se almacena en una variable (numTrab). Luego se procede a ingresar las horas trabajadas y la tarifa horaria de cada trabajador y se almacenan en el arreglo creado. El número de trabajadores de la empresa.25 ) + ( 48 * tarifa horaria) En caso contrario se siguiente forma: determina de la Procesamiento: ( horas trabajadas * tarifa horaria ) El sueldo bruto se almacena en una variable (sueldoBruto). si el sueldo es superior a S/. Problema 141 Etapa 01 .1. se determina el sueldo bruto.00 nuevos soles. Si el número de horas trabajadas es mayor a 48 horas.500. Adicionalmente. por cada trabajador. sabiendo que hasta 48 horas trabajadas se paga una tarifa normal y sobre las 48 horas. el sueldo bruto se determina de la siguiente forma: ( horas trabajadas – 48 ) * ( tarifa horaria * 1.00 nuevos soles. Calcular y mostrar el sueldo de cada trabajador. Mostrar el sueldo total (sueldo bruto) y el sueldo a cobrar (sueldo neto) de cada trabajador redondeado a dos decimales. se ha establecido un aumento a todos los trabajadores. al trabajador se le descuenta el 10% y si el sueldo es superior a S/. y las horas trabajadas y la tarifa horaria de cada uno de ellos. Desarrollar una solución que permita ingresar y almacenar las horas trabajadas y la tarifa horaria de todos los trabajadores de una empresa. equivalente al 15% del sueldo. Por otro lado.600. Con el número de trabajadores se crea un arreglo (sueldos[ ][ ]).3.Ing.Descripción del problema. Juan José Flores Cueto. al trabajador se le descuenta el 15%. 468 . Pag. Resultado deseado: Datos necesarios: Mostrar el sueldo de cada trabajador de la empresa. Etapa 02 .Definición de la solución. se paga la tarifa con un recargo del 25%. Luego. se calcula el descuento del 10%.500. 2. 469 .ESTRUCTURAS DE DATOS – Arreglos. se calcula el aumento del 15% del sueldo y se almacena en la variable (aumento). 1.500.3. Definición de Paquetes y desarrollo del Diagrama de Paquetes. El sueldo neto y el sueldo bruto se redondean a dos decimales y se muestran por pantalla. Después.1600. Si el sueldo bruto es mayor a S/. Nombre del Proyecto: ProyTrabajadores. Etapa 03 .Diseño de la lógica.00 nuevos soles. Caso contrario el descuento es cero. se calcula el descuento del 15%. por cada trabajador. Diagrama de paquetes Pag. se determina el descuento y el aumento de sueldo. Si el sueldo bruto es menor o igual a S/.00 nuevos soles. En todos los casos el descuento se almacena en una variable (descuento). 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/.3. sueldoNeto INICIO COMENTARIO “Declaración de variables” NUMERO i.Ing. sueldos[ ][ ] SALIDA: sueldoBruto.método main ( ) ENTRADA: numTrab. Juan José Flores Cueto. Diseño de algoritmo para el método principal. 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. numTrab. Algoritmo PrgTrabajadores05 . Clases dominioDeLaAplicacion Clases biblioteca 4. 470 . descuento NUMERO sueldoNeto. Definición de las Clases. 3. sueldos[ ][ ]. sueldoNeto FINDESDE FIN Pag.15 sueldoNeto = sueldoBruto + aumento – descuento sueldoBruto = sueldoBruto REDONDEA 2 sueldoNeto = sueldoNeto REDONDEA 2 ESCRIBIR sueldoBruto...1 INCREMENTA 1 SI ( sueldos[0][i] > 48 ) ENTONCES sueldoBruto = (sueldos[0][i] – 48) * (sueldos[1][i] * 1.ESTRUCTURAS DE DATOS – Arreglos.25) + (48 * sueldos[1][i]) SINO sueldoBruto = sueldos[0][i] * sueldos[1][i] FINSI SI ( sueldoBruto > 3500 ) ENTONCES descuento = sueldoBruto * 0. Diseño de algoritmo para el método principal.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.15 SINO SI (suesldoBruto > 1600 ) ENTONCES descuento = sueldoBruto * 0. ” FINSI MIENTRAS ( sueldos[1][i] <= 0 ) FINDESDE COMENTARIO “Cálculo del sueldo bruto y neto por trabajador” DESDE i = 0 HASTA i = numTrab . 471 .10 SINO descuento = 0 FINSI FINSI aumento = sueldoBruto * 0.. Algoritmo PrgTrabajadores05 .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. Continúa… 4. } Pag. // Determinación del tamaño del arreglo con consistencia de datos. if ( sueldos[0][i] <= 0 ) { System.* . // Declaración y creación del arreglo. for ( i = 0 .out. int i.out. do { System. i < numTrab .Ing.Desarrollo de la Codificación. } } while ( sueldos[0][i] <= 0 ) . } } while ( sueldos[1][i] <= 0 ) . if ( sueldos[1][i] <= 0 ) { System. numTrab = Lectura. do { System.println ( “ El número de trabajadores no es válido… Reintente! ” ) .print ( “ Ingrese el número de trabajadores de la empresa : ” ) .print ( “ Tarifa horaria: ” ) .println ( “Número de horas trabajadas no válida… ” ) .out.println ( “ Tarifa horaria no válida… ” ) .out. } } while ( numTrab <= 0 ) . numTrab .println ( “ Ingrese los datos del trabajador [ ” + ( i + 1) + “ ]: ” ) . do { System. double sueldos[ ][ ] = new double[2][numTrab] .out. 472 . public class PrgTrabajadores05 { public static void main(String[] args) { // Declaración de variables.leerDouble( ) .leerDouble( ) .leerInt( ) . if ( numTrab <= 0 ) { System. i++ ) { System.out.out. Etapa 04 . Clase PrgTrabajadores05 package dominioDeLaAplicacion . // Ingreso de datos al arreglo sueldos[ ][ ] con consistencia de datos. import biblioteca. double sueldoNeto . sueldos[1][i] = Lectura. sueldos[0][i] = Lectura. Juan José Flores Cueto.print ( “ Número de horas trabajadas: ” ) . } else { descuento = 0 . for ( i = 0 . i < numTrab . System. sueldoNeto = ( Math. Clase PrgTrabajadores05 // Cálculo del sueldo bruto y neto por trabajador.sueldos[1][i] ) . } } aumento = sueldoBruto * 0.Desarrollo de la Codificación.out.round (sueldoBruto * 100) ) / 100. } if ( sueldoBruto > 3500 ) { descuento = sueldoBruto * 0.10 .15 .out. } } } Pag. 473 .0 .out. } else { sueldoBruto = sueldos[0][i] * sueldos[1][i] ) .0 .println ( “ Sueldo bruto : ” + sueldoBruto ) .println ( “ Trabajador [ ” + ( i + 1) + “ ] ” ) . sueldoBruto = ( Math. i++ ) { if ( sueldos[0][i] > 48 ) { sueldoBruto = ( sueldos[0][i] – 48) * (sueldos[1][i] * 1.round (sueldoNeto * 100) ) / 100. } else { if ( sueldoBruto > 1600 ) { descuento = sueldoBruto * 0. Continúa… Etapa 04 . System. sueldoNeto = sueldoBruto + aumento – descuento .25) + (48 .ESTRUCTURAS DE DATOS – Arreglos.println ( “ Sueldo neto : ” + sueldoNeto ) .out. System. System.15 .println ( ) . Descripción del problema. se determina su longitud. El número de artículos se ingresa a través del teclado y se almacena en una variable (numArt). Nombre del Proyecto: ProyArticulos. Diagrama de paquetes Pag. Definición de Paquetes y desarrollo del Diagrama de Paquetes. El número de artículos y el nombre de cada uno de los artículos. 2. Etapa 02 . Mostrar cada uno de los nombre con su respectiva longitud. Resultado deseado: Datos necesarios: Procesamiento: Mostrar el nombre y la longitud del nombre de todos los artículos de una bodega. Con el número de artículos se crea un arreglo (articulos[ ]). Desarrollar una solución que permita ingresar y almacenar el nombre de todos los artículos de una bodega.Definición de la solución. Problema 142 Etapa 01 .Ing. luego se eliminan los espacios del inicio y final del nombre. y se almacenan en el arreglo creado. Después. para cada uno de los nombres. Etapa 03 . Luego se procede a ingresar el nombre de los artículos de la bodega. se almacenan temporalmente en una variable (sueldo). se almacena en una variable (tamaño) y se muestra por pantalla. 474 . Consistenciar la entrada de datos. Juan José Flores Cueto.Diseño de la lógica. 1. Algoritmo PrgArticulos01 .método main ( ) ENTRADA: numArt.ESTRUCTURAS DE DATOS – Arreglos. 3. 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. tamaño TEXTO articulos[ ]. nombres SALIDA: tamaño INICIO COMENTARIO “Declaración de variables” NUMERO i. Definición de las Clases. numArt. Diseño de algoritmo para el método principal. 475 . Clases dominioDeLaAplicacion Clases biblioteca 4. tamaño FINDESDE FIN Etapa 04 . numArt. Diseño de algoritmo para el método principal. tamaño . do { System. Algoritmo PrgArticulos01 .. public class PrgArticulos01 { public static void main(String[] args) { // Declaración de variables. } } while ( numArt <= 0 ) .. Juan José Flores Cueto. // Determinación del tamaño del arreglo con consistencia de datos.out.Ing.print ( “ Ingrese el número de artículos : ” ) . 476 . Pag. String nombre .out. Clase PrgArticulos01 package dominioDeLaAplicacion .* .método main ( ) COMENTARIO “Ingreso de datos al arreglo articulos [ ]” DESDE i = 0 HASTA i = numArt . Continúa… 4.1 INCREMENTA 1 tamaño = LONGITUD articulos[i] ESCRIBIR articulos[i]. int i. FIN SI ( LONGITUD articulos[i] < 3 ) ENTONCES ESCRIBIR “Nombre de artículo no válido. if ( numArt <= 0 ) { System. numArt = Lectura.println ( “ El número de artículos no es válido… Reintente! ” ) .” FINSI MIENTRAS (LONGITUD articulos[i] < 3 ) FINDESDE COMENTARIO “Cálculo de la longitud de los nombres” DESDE i = 0 HASTA i = numArt . import biblioteca.1 INCREMENTA 1 HACER LEER nombre articulos[i] = nombre ELIMINAESPACIO INICIO.leerInt( ) .Desarrollo de la Codificación. } } } Pag.leerString( ) .length( ) < 3 ) { System. // Ingreso de datos al arreglo artículos[ ] con consistencia de datos.println ( “ Artículo ” + articulos[i] + “ tiene una longitud de ” + tamaño ) . nombre = Lectura. for ( i = 0 . } } while ( articulos[i].print ( “ Ingrese el nombre del artículo [ ” + ( i + 1) + “]: ” ) .out.out. if ( articulos[i]. for ( i = 0 .Desarrollo de la Codificación. System.println ( “ El nombre ingresado no es válido… Reintente! ” ) .length( ) . } // Cálculo de la longitud de los nombres.length( ) < 3 ) . Continúa… Etapa 04 .out. i++ ) { do { System. String articulos[ ] = new String [numArt] .trim( ) . i < numArt . Clase PrgArticulos01 // Declaración y creación del arreglo. i++ ) { tamaño = articulos[i]. i < numArt . 477 . articulos[i] = nombre.ESTRUCTURAS DE DATOS – Arreglos. Ing. Juan José Flores Cueto. Mostrar la primera letra de cada nombre en mayúscula y el resto en minúscula. se obtiene la primera letra.Descripción del problema. se obtiene las demás letras. se eliminan los espacios del inicio y final del nombre. Luego. Adicionalmente. mostrar la longitud de cada uno de los nombres. Adicionalmente mostrar la longitud de cada uno de los nombres de los artículos. Después.Definición de la solución. Etapa 02 . 478 . Luego se procede a ingresar el nombre de los artículos de la bodega. También. Problema 143 Etapa 01 . El número de artículos se ingresa a través del teclado y se almacena en una variable (numArt). y se almacenan en el arreglo creado. se determina la longitud del nombre y se almacena en una variable (tamaño). se muestra la primera letra del nombre en mayúscula. Finalmente. Datos necesarios: Procesamiento: Pag. Desarrollar una solución que permita ingresar y almacenar el nombre de todos los artículos de una bodega. Resultado deseado: Mostrar la primera letra de todos los nombres en letra mayúscula y el resto en letra minúscula. las demás letras en minúscula y la longitud del nombre por pantalla. se almacenan en una variable (resto) y se convierten en minúscula. Consistenciar la entrada de datos. El número de artículos y el nombre de cada uno de los artículos. Con el número de artículos se crea un arreglo (articulos[ ]). se almacena en una variable (letra) y se convierte en mayúscula. para cada uno de los nombres. ESTRUCTURAS DE DATOS – Arreglos. 2. 479 . 1. Definición de Paquetes y desarrollo del Diagrama de Paquetes. Definición de las Clases.Diseño de la lógica. Clases dominioDeLaAplicacion Clases biblioteca Pag. Diagrama de paquetes 3. Etapa 03 . Nombre del Proyecto: ProyArticulos. 1 letra = MAYUSCULA letra resto = articulos[i] SUBCADENA 1 resto = MINUSCULA resto tamaño = LONGITUD articulos[i] ESCRIBIR letra. Algoritmo PrgArticulos02 . 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 .1 INCREMENTA 1 HACER LEER articulos[i] articulos[i] = articulos[i] ELIMINAESPACIO INICIO. resto. articulos[ ] SALIDA: letra.1 INCREMENTA 1 letra = articulos[i] SUBCADENA 0. 480 . tamaño FINDESDE FIN Pag. numArt. resto.” FINSI MIENTRAS (LONGITUD articulos[i] < 3 ) FINDESDE COMENTARIO “ Manipulación del nombre de los artículos ” DESDE i = 0 HASTA i = numArt . Juan José Flores Cueto. letra..Ing. Diseño de algoritmo para el método principal. tamaño INICIO COMENTARIO “Declaración de variables” NUMERO i. FIN SI ( LONGITUD articulos[i] < 3 ) ENTONCES ESCRIBIR “Nombre de artículo no válido.. 4. tamaño TEXTO articulos[ ].método main ( ) ENTRADA: numArt. String letra. resto .println ( “ El número de artículos no es válido… Reintente! ” ) . } // Manipulación del nombre de los artículos. numArt.out. i < numArt . // Ingreso de datos al arreglo articulos[ ] con consistencia de datos. letra = letra.Desarrollo de la Codificación. for ( i = 0 . import biblioteca. resto = resto]. i++ ) { letra = articulos[i].ESTRUCTURAS DE DATOS – Arreglos. numArt = Lectura. // Declaración y creación del arreglo.leerInt( ) .print ( “ Ingrese el número de artículos : ” ) .print ( “ Ingrese el nombre del artículo [ ” + ( i + 1) + “]: ” ) . tamaño = articulos[i]. } } } Pag. public class PrgArticulos02 { public static void main(String[] args) { // Declaración de variables.substring(1) . if ( numArt <= 0 ) { System.out.toLowerCase( ) . for ( i = 0 .substring(0. Clase PrgArticulos02 package dominioDeLaAplicacion . Etapa 04 .out. } } while ( numArt <= 0 ) .length( ) < 3 ) .println ( “ Artículo ” + letra + resto + “ tiene una longitud de ” + tamaño ) . i < numArt . int i. 481 . resto = articulos[i]. System.length( ) < 3 ) { System. do { System.trim( ) . articulos[i] = Lectura. String articulos[ ] = new String [numArt] . } } while ( articulos[i].toUpperCase( ). // Determinación del tamaño del arreglo con consistencia de datos.println ( “ El nombre ingresado no es válido… Reintente! ” ) .leerString( ) .length( ) .out. i++ ) { do { System. tamaño .* .out.1) . articulos[i] = articulos[i]. if ( articulos[i]. Problema 144 Etapa 01 . se obtiene la última letra.Descripción del problema. se almacenan en una variable (letraFin) y se convierten en minúscula. se obtiene la primera letra. 482 . Juan José Flores Cueto. El número de artículos y el nombre de cada uno de los artículos. Datos necesarios: Procesamiento: Pag. Consistenciar la entrada de datos. Desarrollar una solución que permita ingresar y almacenar el nombre de todos los artículos de una bodega. Adicionalmente mostrar la longitud de cada uno de los nombres de los artículos. Etapa 02 . y se almacenan en el arreglo creado. Resultado deseado: Mostrar la primera letra de todos los nombres en letra mayúscula y el resto en letra minúscula. Después. se almacena en una variable (letraIni) y se convierte en mayúscula. Luego. se eliminan los espacios del inicio y final del nombre. para cada uno de los nombres. Finalmente.Definición de la solución. la primera letra del nombre en mayúscula y la última letra del nombre en minúscula. Luego se procede a ingresar el nombre de los artículos de la bodega. Con el número de artículos se crea un arreglo (articulos[ ]).Ing. se muestra por pantalla. Mostrar la primera letra y la última letra de cada uno de los nombres en letra mayúscula y minúscula respectivamente. El número de artículos se ingresa a través del teclado y se almacena en una variable (numArt). Diseño de la lógica. Nombre del Proyecto: ProyArticulos.ESTRUCTURAS DE DATOS – Arreglos. 2. 1. Definición de las Clases. 483 . Definición de Paquetes y desarrollo del Diagrama de Paquetes. Clases dominioDeLaAplicacion Clases biblioteca Pag. Etapa 03 . Diagrama de paquetes 3. 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 .1 INCREMENTA 1 HACER LEER articulos[i] articulos[i] = articulos[i] ELIMINAESPACIO INICIO. letraIni. Juan José Flores Cueto. letraFin FINDESDE FIN Pag. FIN SI ( LONGITUD articulos[i] < 3 ) ENTONCES ESCRIBIR “Nombre de artículo no válido. 4.1 INCREMENTA 1 letraIni = articulos[i] CARACTER INICIO letraIni = MAYUSCULA letraIni letraFin = articulos[i] CARACTER FIN letraFin = MINUSCULA letraFin ESCRIBIR letraIni. Diseño de algoritmo para el método principal... letraFin INICIO COMENTARIO “Declaración de variables” NUMERO i.Ing.” FINSI MIENTRAS (LONGITUD articulos[i] < 3 ) FINDESDE COMENTARIO “ Manipulación del nombre de los artículos ” DESDE i = 0 HASTA i = numArt . Algoritmo PrgArticulos03 . articulos[ ] SALIDA: letraIni. numArt TEXTO articulos[ ].método main ( ) ENTRADA: numArt. 484 . numArt . // Ingreso de datos al arreglo artículos[ ] con consistencia de datos.length( ) -1) . i < numArt .out. 485 .println ( “ El número de artículos no es válido… Reintente! ” ) . Clase PrgArticulos03 package dominioDeLaAplicacion .out. // Determinación del tamaño del arreglo con consistencia de datos.charAt (articulos[i]. // Declaración y creación del arreglo. for ( i = 0 .print ( “ Ingrese el número de artículos : ” ) .length( ) < 3 ) .out. letraIni = Character.out. if ( numArt <= 0 ) { System.trim( ) . numArt = Lectura.ESTRUCTURAS DE DATOS – Arreglos. letraFin . int i.println ( “ El nombre ingresado no es válido… Reintente! ” ) . import biblioteca.Desarrollo de la Codificación. } } while ( numArt <= 0 ) . Etapa 04 .length( ) < 3 ) { System. articulos[i] = Lectura.out. char letraIni. } } while ( articulos[i]. for ( i = 0 . articulos[i] = articulos[i]. LetraFin = Character.* .toUpperCase(letraIni) . i++ ) { do { System. System. String articulos[ ] = new String [numArt] .leerString( ) . } // Manipulación del nombre de los artículos.println ( “ Artículo ” + articulos[i] ) . letraFin = articulos[i]. } } } Pag.” ) .toLowerCase(letraFin) . System.leerInt( ) . public class PrgArticulos03 { public static void main(String[] args) { // Declaración de variables. if ( articulos[i].out. System.println ( ) .charAt(0) . i++ ) { letraIni = articulos[i]. i < numArt .print ( “ Ingrese el nombre del artículo [ ” + ( i + 1) + “]: ” ) . do { System.out. Letra final : ” + letraFin + “.println ( “ Letra inicial : ” + letraIni + “. la sigla y la descripción de todos los artículos de una bodega. para cada uno de los nombres. También. se convierte a mayúscula las siglas de cada artículo y se almacena en una variable (siglas). Luego. Finalmente.Descripción del problema. Resultado deseado: Mostrar la primera letra de todos los nombres y las descripciones en letra mayúscula y el resto en letra minúscula. Desarrollar una solución que permita ingresar y almacenar el nombre. los resultados se muestran por pantalla. . se obtiene la primera letra. mostrar las siglas del artículo en mayúscula. el nombre. Juan José Flores Cueto. la descripción y las siglas de los artículos de la bodega.Ing. se eliminan los espacios del inicio y final de los mismos. También. para cada una de las descripciones se realiza lo mismo y el resultado se almacenan en una variable (descrip). Consistenciar la entrada de datos. Mostrar la primera letra del nombre y la descripción en mayúscula y el resto en minúscula. Etapa 02 . se almacena en una variable (letra). El número de artículos se ingresa a través del teclado y se almacena en una variable (numArt). El número de artículos y.Definición de la solución. 486 . Luego se convierte a mayúscula la variable letra y a minúscula la variable resto y se almacenan en una variable (nombre). Con el número de artículos se crea un arreglo (articulos[ ]). Problema 145 Etapa 01 . la descripción y las siglas de cada uno de los artículos. También mostrar las siglas del artículo en minúscula. y se almacenan en el arreglo creado. Datos necesarios: Procesamiento: Pag. Después. Luego se procede a ingresar el nombre. se obtiene las demás letras y se almacenan en una variable (resto). 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 dominioDeLaAplicacion Clases 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 0 1 2 0 1 2 sueldos Datos del mismo trabajador. : : numTrab - 1 : : : nombre de los trabajadores : : numTrab - 1 : : : sueldo de los 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 0 1 2 Danae 0 1 2 sexos F 0 1 2 Edades 10 : : numSoc - 1 : : : nombres de cada socios : : numSoc - 1 : : : sexo de cada socio : : numSoc - 1 : : : sueldo de 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 0 1 2 0 1 2 precios 0 1 : : numArt - 1 : : : nombre de cada artículos : : numArt - 1 : : : precio de compra de cada artículos : : : precio de venta 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. El número de trabajadores y, el nombre y el sueldo de cada trabajador. 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 Datos necesarios: Procesamiento: 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 dominioDeLaAplicacion Clases 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 leerInt( ) . sueldoPromedio . int i.println ( “ El número de trabajadores no es válido… Reintente! ” ) .print ( “ Ingrese el número de trabajadores : ” ) . if ( sueldos[i] <= 0 ) { System. if ( nombres[i]. Etapa 04 . sumaSueldos = 0. numTrab = Lectura.ESTRUCTURAS DE DATOS – Arreglos.Desarrollo de la Codificación. Clase PrgTrabajadores06 package dominioDeLaAplicacion . 499 . i < numTrab .out. double sueldoMayor = 0. // Ingreso de nombres y sueldos de trabajadores con consistencia de datos.out.leerString( ) .leerString( ) . } } while (sueldos[i] <= 0 ) . double sueldos[ ] = new double [numTrab] .out.println ( “ El nombre del trabajador no es válido… ” ) . // Determinación del tamaño de los arreglos con consistencia de datos. nombres[i] = nombres[i].out. if ( numTrab <= 0 ) { System.out.length( ) < 3 ) { System. do { System. // Declaración y creación del arreglo.print ( “ Ingrese el nombre del trabajador [ ” + ( i + 1) + “ ]: ” ) .trim( ) . } } while ( nombres[i]. } Pag. } } while ( numTrab <= 0 ) . import biblioteca. String nombres[ ] = new String [numTrab] . sueldos[i] = Lectura.length( ) < 3 ) . numTrab .* . nombres[i] = Lectura. public class PrgTrabajadores06 { public static void main(String[] args) { // Declaración de variables. for ( i = 0 .out. i++ ) { do { System.println ( “ El sueldo del trabajador no es válido… ” ) . do { System.print ( “ Ingrese el sueldo del trabajador [ ” + ( i + 1) + “ ]: ” ) . for ( i = 0 .println ( “ ” + nombres[i] ) . sueldoPromedio = ( Math.println ( “ El sueldo promedio de los trabajadores es: ” + sueldoPromedio ) . for ( i = 0 . } } } System. 500 . i++ ) { if ( sueldoMayor == sueldos[i] ) { System. Clase PrgTrabajadores06 // Determinando el nombre de los trabajadores con el sueldo mas alto.Desarrollo de la Codificación.round (sueldoPromedio * 100) ) / 100. i < numTrab . for ( i = 0 . Continúa… Etapa 04 . } } // Determinando el promedio del sueldo de todos los trabajadores. } else { if ( sueldoMayor < sueldos[i] ) { sueldoMayor = sueldos[i] .Ing. i++ ) { sumaSueldos = sumaSueldos + sueldos[i] . System. Juan José Flores Cueto.0 . i < numTrab . } } Pag.out. i < numTrab . } sueldoPromedio = sumaSueldos / numTrab . i++ ) { if ( i == 0 ) { sueldoMayor = sueldos[i] .out.out.println ( “ Nombres de los trabajadores con el sueldo más alto ” ) . ESTRUCTURAS DE DATOS – Arreglos.sexos[] y edades[]). se determina el número de socios cuyo nombre comienza con la letra ‘D’. Luego se procede a ingresar el nombre de los socios. sexo y edad de cada socio. Por último. Para esto se obtiene la primera letra del nombre de Datos necesarios: Procesamiento: Pag. se procede a ingresar el sexo de los socios (M = Masculino y F = Femenino). se eliminan los espacios del inicio y final de los mismos. el sexo y la edad de todos los socios de un club. El número de socios y.Descripción del problema. Finalizada la evaluación de los datos de todos los socios se muestra el contenido de la variable totalMayoresHombres. se ingresan las edades de los socios y se almacenan en el tercer arreglo (edades[]). 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”. se convierte a mayúscula y se almacenan en otro de los arreglos creado (sexos[]). el nombre. Desarrollar una solución que permita ingresar y almacenar el nombre. 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). y se almacenan en uno de los arreglos creados (nombres[]).Definición de la solución. El número de socios se ingresa a través del teclado y se almacena en una variable (numSoc). mayores de edad. Con el número de socios se crean tres arreglos (nombres[]. Después. Etapa 02 . 501 . Luego. Luego. se determina el número de socios hombres. 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 . entonces se aumenta 1 a una variable de tipo contador (totalMayoresHombres). Ing. 1. Definición de Paquetes y desarrollo del Diagrama de Paquetes.Diseño de la lógica. se convierte a mayúscula y se compara con la letra ‘D’. Si letra = ‘D’. Juan José Flores Cueto. 2. cada socio y se almacena en una variable (letra). Clases dominioDeLaAplicacion Clases biblioteca Pag. Finalizada la evaluación se muestra el contenido de la variable totalNombresD. Etapa 03 . 502 . entonces se aumenta 1 a otra variable tipo contador (totalNombresD). Nombre del Proyecto: ProySocios. Diagrama de paquetes 3. Definición de las Clases. 1 INCREMENTA 1 HACER COMENTARIO “ Ingreso de nombre de socios ” LEER nombres[i] nombres[i] = nombres[i] ELIMINAESPACIO INICIO.. numSoc. sexos[ ]. Algoritmo PrgSocios01 .método main ( ) ENTRADA: numSoc. edades[ ] SALIDA: totalMayoresHombres.ESTRUCTURAS DE DATOS – Arreglos. sexos[ ]. 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. 503 .. 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. totalNombresD INICIO COMENTARIO “Declaración de variables” NUMERO i.. totalNombresD = 0 TEXTO nombres[ ]. FIN SI ( LONGITUD nombres[i] < 3 ) ENTONCES ESCRIBIR “Nombre del socio no válido. Diseño de algoritmo para el método principal. sexo y edad de los socios ” DESDE i = 0 HASTA i = numSoc . 4. nombres[ ].” FINSI MIENTRAS ( sexos[i] <> ‘M’ OR sexos[i] <> ’F’ ) Pag. Continúa… 4.Ing. Diseño de algoritmo para el método principal. Algoritmo PrgSocios01 ..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 .” FINSI MIENTRAS ( edades[i] <= 0 ) FINDESDE COMENTARIO “Determinando número de socios hombres mayores de edad” DESDE i = 0 HASTA i = numSoc . Juan José Flores Cueto. 504 .1 INCREMENTA 1 letra = nombres[i] CARACTER 0 letra = MAYUSCULA letra SI ( letra = ‘D’ ) ENTONCES totalNombresD = totalNombresD + 1 FINSI FINDESDE ESCRIBIR totalNombresD FIN Pag..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. } } while ( nombres[i]. char letra . import biblioteca.* . } } while ( sexos[i] != ‘M’ || sexos[i] != ‘F’ ) . sexos[i] = Lectura. for ( i = 0 .length( ) < 3 ) { System.out. sexo y edad de los socios con consistencia de datos. if ( nombres[i].out.leerInt( ) . Pag.println ( “ El sexo del trabajador no es válido… ” ) . do { System. // Ingreso de nombre. String nombres[ ] = new String [numSoc] .trim( ) . i++ ) { do { System. } } while ( numSoc <= 0 ) . sexos[i] = Character.print ( “ Ingrese el nombre del socio [ ” + ( i + 1) + “ ]: ” ) .toUpperCase( sexos[i] ) . numSoc = Lectura. int i.print ( “ Ingrese el sexo del trabajador [ ” + ( i + 1) + “ ]: ” ) .out.out.ESTRUCTURAS DE DATOS – Arreglos. numSoc.Desarrollo de la Codificación. totalNombresD = 0 .print ( “ Ingrese el número de socios : ” ) . if ( sexos[i] != ‘M’ || sexos[i] != ‘F’ ) { System.leerString( ) . totalMayoresHombres = 0. Clase PrgSocios01 package dominioDeLaAplicacion . // Declaración y creación del arreglo. public class PrgSocios01 { public static void main(String[] args) { // Declaración de variables.length( ) < 3 ) .out. do { System.out.leerChar( ) .println ( “ El nombre del socio no es válido… ” ) . char sexos[ ] = new char [numSoc] .println ( “ El número de socios no es válido… Reintente! ” ) . int edades[ ] = new int [numSoc] . Etapa 04 . // Determinación del tamaño de los arreglos con consistencia de datos. 505 . nombres[i] = Lectura. nombres[i] = nombres[i]. i < numSoc . if ( numSoc <= 0 ) { System. 506 .println ( “ La edad del socio no es válida… ” ) .println ( totalNombresD ) . for ( i = 0 .out.Desarrollo de la Codificación. Continúa… Etapa 04 . i < numSoc . i < numSoc . // Determinando el número de socios cuyo nombre comienza con la letra D. for ( i = 0 .print ( “ El número de socios cuyo nombre comienza con la letra D es : ” ) .out.toUpperCase(letra) .out. i++ ) { if ( edades[i] >= 18 && sexos[i] == ‘M’ ) { totalMayoresHombres ++ .out.out. Juan José Flores Cueto.println ( totalMayoresHombres ) . edades[i] = Lectura. if ( edades[i] <= 0 ) { System. if ( letra == ‘M’ ) { totalNombresD ++ . System.leerInt( ) . } } while ( edades[i] <= 0 ) .charAt(0) . Clase PrgSocios01 do { System. i++ ) { letra = nombres[i]. } } System.print ( “ El número de socios hombres mayores de edad es : ” ) . System.Ing.out. } } Pag.print ( “ Ingrese la edad del socio [ ” + ( i + 1) + “ ]: ” ) . letra = carácter. } } System. } // Determinando el número de socios hombres mayores de edad. El número de artículos y. el precio de compra y el precio de venta de todos los artículos de una bodega. se determina la utilidad de cada artículo. Luego se procede a ingresar el nombre de los artículos. y se almacenan en uno de los arreglos creados (nombres[ ]). el precio de venta del artículo se resta de su precio de compra. Con el número de artículos se crean dos arreglos. Resultado deseado: Datos necesarios: Mostrar el nombre de cada artículo y su margen de utilidad. Desarrollar una solución que permita ingresar y almacenar el nombre.ESTRUCTURAS DE DATOS – Arreglos. Después. un vector y una matriz con dos columnas (nombres[ ] y precios[ ][ ]). Luego. 507 . Procesamiento: Pag. el nombre. se procede a ingresar el precio de compra y el precio de venta. se almacena el resultado en una variable (utilidad) y se muestra el nombre del artículo junto con su utilidad.Definición de la solución. y se almacenan en el otro arreglo creado (precios[ ][ ]).Descripción del problema. Problema 148 Etapa 01 . Etapa 02 . Para esto. Indicar el nombre de cada artículo y su margen de utilidad. se eliminan los espacios del inicio y final de los mismos. El número de artículos se ingresa a través del teclado y se almacena en una variable (numArt). el precio de compra y el precio de venta de cada artículo. El precio de compra se almacena en la primera columna del arreglo y el precio de venta se almacena en la segunda columna. Nombre del Proyecto: ProyArticulos. Definición de las Clases. Juan José Flores Cueto.Ing. 1. 2.Diseño de la lógica. Clases dominioDeLaAplicacion Clases biblioteca Pag. Definición de Paquetes y desarrollo del Diagrama de Paquetes. 508 . Diagrama de paquetes 3. Etapa 03 . ” 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. FIN SI ( LONGITUD nombres[i] < 3 ) ENTONCES ESCRIBIR “Nombre del artículo no válido. 4. 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. nombres[ ].. precios[ ][ ] SALIDA: nombres[ ]. 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. precios[ ][ ]. 509 ...método main ( ) ENTRADA: numArt. utilidad INICIO COMENTARIO “Declaración de variables” NUMERO i.ESTRUCTURAS DE DATOS – Arreglos. numArt. Algoritmo PrgArticulos06 ..” FINSI MIENTRAS ( precios[i][0] <= 0 ) Pag. Diseño de algoritmo para el método principal. Diseño de algoritmo para el método principal.Ing. utilidad FINDESDE FIN Pag. 510 . Juan José Flores Cueto.. Algoritmo PrgArticulos06 .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. Continúa… 4.” FINSI MIENTRAS ( precios[i][1] <= 0 ) FINDESDE COMENTARIO “Determinando la utilidad de cada artículo ” DESDE i = 0 HASTA i = numArt ..1 INCREMENTA 1 utilidad = precios[i][1] – precios[i][0] ESCRIBIR nombres[i]. precio de compra y precio de venta de los artículos.print ( “ Ingrese el número de artículos : ” ) .out.print ( “ Ingrese su precio de compra : ” ) . for ( i = 0 . precios[i][0] = Lectura. Pag. // Declaración y creación del arreglo. import biblioteca. nombres[i] = Lectura. if ( precios[i][0] <= 0 ) { System. } } while ( nombres[i]. nombres[i] = nombres[i]. Etapa 04 .ESTRUCTURAS DE DATOS – Arreglos.leerString( ) . int i. do { System.leerDouble( ) .trim( ) . public class PrgArticulos06 { public static void main(String[] args) { // Declaración de variables. Clase PrgArticulos06 package dominioDeLaAplicacion .out.print ( “ Ingrese el nombre del artículo [ ” + ( i + 1) + “ ]: ” ) .* . numArt = Lectura. double edades[ ] = new double [numArt][2] . double utilidad . numArt .println ( “ El nombre del artículo no es válido… ” ) . } } while ( numArt <= 0 ) .length( ) < 3 ) . // Determinación del tamaño de los arreglos con consistencia de datos. if ( numArt <= 0 ) { System.out.out. if ( nombres[i]. do { System. // Ingreso de nombre.out. String nombres[ ] = new String [numArt] .println ( “ El número de artículos no es válido… Reintente! ” ) .length( ) < 3 ) { System.println ( “ Precio de compra no válido… ” ) .out. 511 .Desarrollo de la Codificación. } } while ( precios[i][0] <= 0 ) .leerInt( ) . i++ ) { do { System. i < numArt . Desarrollo de la Codificación. } // Determinando la utilidad de cada artículo. System.leerDouble( ) .out. if ( precios[i][1] <= 0 ) { System.print ( “ El artículo : ” + nombres[i] + “ tiene una utilidad de ” ) .out. i < numArt .Ing. Continúa… Etapa 04 . i++ ) { utilidad = precios[i][1] – precios[i][0] . precios[i][1] = Lectura. Clase PrgArticulos06 do { System. for ( i = 0 .out.out. } } } Pag.println ( “ ” + utilidad + “. Juan José Flores Cueto.print ( “ Ingrese su precio de venta : ” ) . 512 . } } while ( precios[i][1] <= 0 ) .println ( “ Precio de venta no válido… ” ) . System.” ) . Problema 149 Etapa 01 . Támbien se ingresan las notas de cada alumno y se almacenan en otro de los arreglos (notas[][]). Adicionalmente. Después. el código y el promedio de cada alumno. se redondea y esta a su vez se almacena en el arreglo promedios[]. el código y el promedio de notas de cada alumno. Almacenar el promedio de notas de cada alumno. Después se muestra el nombre. el código y el promedio de notas de cada alumno. el código y las diferentes notas de los alumnos de un salón de clase. Indicar el nombre. El número de alumnos y. se determina el promedio de cada alumno y el promedio mayor. Para esto. tres vectores y una matriz (nombres[]. 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).Descripción del problema. se procede a ingresar el código de los alumnos y se almacenan en otro arreglo (codigos[]). y se almacenan en uno de los arreglos creados (nombres[]). Desarrollar una solución que permita ingresar y almacenar el nombre. Luego. indicar el nombre de los alumnos que obtuvieron el mayor promedio. notas[][] y promedios[][]).ESTRUCTURAS DE DATOS – Arreglos.Definición de la solución. Etapa 02 . el código y las notas de cada alumno. Luego se procede a ingresar el nombre de los alumnos. Resultado deseado: Mostrar el nombre. se suman las notas del alumno y se almacenan en una variable (sumaNotas) y luego se divide entre el número de notas (numNot). Con el número de alumnos y el número de notas se crean cuatro arreglos. Luego se determina el promedio mayor y se almacena Datos necesarios: Procesamiento: Pag. codigos[]. El resultado se almacenada en otra variable (promAlu). el nombre. 513 . Adicionalmente. indicar el nombre de los alumnos que obtuvieron el mayor promedio. Etapa 03 .Diseño de la lógica. Definición de Paquetes y desarrollo del Diagrama de Paquetes. Diagrama de paquetes 3. se muestran los nombres de todos los alumnos que tienen promedio igual a promAluMayor.Ing. Nombre del Proyecto: ProyAlumnos. 1. Definición de las Clases. Juan José Flores Cueto. en una variable (promAluMayor). Clases dominioDeLaAplicacion Clases biblioteca Pag. Finalmente. 514 . 2. Diseño de algoritmo para el método principal. promAlu = 0. 515 .1 INCREMENTA 1 HACER LEER nombres[i] nombres[i] = nombres[i] ELIMINAESPACIO INICIO. notas[ ][ ]. codigos[ ].método main ( ) ENTRADA: numAlu. 4.” FINSI MIENTRAS ( LONGITUD nombres[i] < 3 ) Pag. Algoritmo PrgAlumnos06 . promedios[ ] INICIO COMENTARIO “Declaración de variables” NUMERO i. codigo y notas de todos los alumnos ” DESDE i = 0 HASTA i = numAlu . nomNot. 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.FIN SI ( LONGITUD nombres[i] < 3 ) ENTONCES ESCRIBIR “Nombre del alumno no válido. nombre[ ]. notas[ ][ ] SALIDA: nombres[ ]. numAlu..ESTRUCTURAS DE DATOS – Arreglos. j.. promedios[ ] NUMERO sumaNotas = 0. codigos[ ]. numNot. codigos[ ]. Continúa… 4.” 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 .Ing.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. Algoritmo PrgAlumnos06 ...1 INCREMENTA 1 HACER LEER notas[i][j] SI ( notas[i][j] < 0 OR notas[i][j] > 20 ) ENTONCES ESCRIBIR “Nota ingresada no válida.” FINSI MIENTRAS ( codigos[i] < 100000 OR codigos[i] > 999999 ) DESDE j = 0 HASTA j = numNot . 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 .1 INCREMENTA 1 SI ( promedios[i] = promAluMayor ) ENTONCES ESCRIBIR nombres[i] FINSI FINDESDE FIN Pag.. codigos[i].. Diseño de algoritmo para el método principal.1 INCREMENTA 1 sumaNotas = 0 DESDE j = 0 HASTA j = numNot .1 INCREMENTA 1 sumaNotas = sumaNotas + notas[i][j] FINDESDE promAlu = sumaNotas / numNot promAlu = promAlu REDONDEA 2 promedio[i] = promAlu ESCRIBIR nombres[i]. 516 . 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. El número de artículos y el nombre de cada uno de los artículos. 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. Datos necesarios: Procesamiento: 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 dominioDeLaAplicacion Clases 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: Datos necesarios: Procesamiento: Mostrar la nota final de un determinado alumno. Las notas del alumno (en esta caso tenemos 3 notas). 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 nota3 SALIDA: prom INICIO NUMERO nota1. Clases dominioDeLaAplicacion Clases biblioteca Diseño del algoritmo para el método principal. nota2.INTRODUCCIÓN AL DESARROLLO DE SOLUCIONES ORIENTADAS A OBJETOS Definición de Paquetes y desarrollo del Diagrama de Paquetes. 529 . nota3. Algoritmo PrgAlumno . nota2. nota3 prom = ( nota1 + nota2 + nota3) / 3 ESCRIBIR prom FIN Pag. Diagrama de paquetes Definición de las Clases. nota2. prom LEER nota1.método main() ENTRADA: nota1. System. 530 .leerDouble( ) .Ing.out. import biblioteca.out.Desarrollo de la Codificación. nota2 = Lectura. En la clase PrgAlumno se define un método main() y dentro del mismo se codifica toda la solución. las clases son mucho más poderosas que las presentadas hasta ahora.Lectura .leerDouble( ) . prom . A partir de este punto. para incluir los conceptos presentados. Para ello. el Método de las 6D. en forma progresiva. nuevos conceptos hasta llegar al concepto de ocultamiento de atributos de instancia. prom = ( nota1 + nota2 + nota3 ) / 3 . nota2. Como se ha mencionado. System. Clase PrgAlumno package dominioDeLaAplicacion .println ( “Ingrese la nota 2 del alumno: ” ) .out. } } En este proyecto ProyAlumno se crea un paquete dominioDeLaAplicación con una clase PrgAlumno la cual se utiliza en su forma más simple.println ( “Ingrese la nota 3 del alumno: ” ) . System.println ( “Ingrese la nota 1 del alumno: ” ) .out. se ampliará el conocimiento sobre las clases.leerDouble( ) . se formalizará el método de solución.println ( “ El promedio obtenido por el alumno es ” + prom ) . Juan José Flores Cueto. class PrgAlumno { public static void main ( String arg [ ] ) { double nota1. Al final. se revisarán algunos conceptos básicos y se presentarán. System. Etapa 04 . nota3. nota3 = Lectura. Todos estos nuevos conceptos presentados se incorporarán progresivamente en el ejemplo planteado. Pag. nota1 = Lectura. 531 .INTRODUCCIÓN AL DESARROLLO DE SOLUCIONES ORIENTADAS A OBJETOS Pag. Ing. Juan José Flores Cueto. Pag. 532 . // METODOS tipo nombreMetodo1 (listaDeParámetros) { // cuerpo del método1. Las clases que se han utilizado anteriormente son ejemplos muy limitados en los que no aparece su formato general. Especifica una estructura de datos (atributos) y los métodos operativos permisibles que se aplican a cada uno de sus objetos.INTRODUCCIÓN AL DESARROLLO DE SOLUCIONES ORIENTADAS A OBJETOS CONCEPTOS BÁSICOS CLASE Una clase es una implantación de un tipo de objeto. En Java.. tipo nombreMetodoN (listaDeParámetros) { // cuerpo del métodoN. tipo variableInstancia2 .. 533 . Una clase define un nuevo tipo de objeto. tipo variableInstanciaN . // . } } Los datos o variables definidos en una clase se llaman atributos. El mundo real se modela mediante clases. una clase se declara utilizando la palabra reservada class.. En conjunto. El código está contenido en los métodos. } tipo nombreMetodo2 (listaDeParámetros) { // cuerpo del método2. Una clase es una abstracción y no referencia a ningún objeto en particular. } //. Pag. los métodos y los atributos definidos dentro de una clase son los miembros de la clase.. El formato general de una clase en Java es el siguiente: class NombreClase { // ATRIBUTOS tipo variableInstancia1 . 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. Solo necesitarán tener un método main() aquellas clases que tengan como función principal iniciar la ejecución del proyecto. Esto debido fundamentalmente a que todas las clases en Java no necesitan tener un método main(). En el proyecto de solución ProyAlumno se agregará una clase llamada Alumno. 534 . Los atributos definidos dentro de una clase. es importante mencionar. permiten que los objetos o instancias de una clase puedan almacenar datos. En el formato general de una clase no se especifica un método main(). Juan José Flores Cueto. Pag. La declaración de esta clase en Java es la siguiente: class Alumno { } Ahora. Sin embargo. static o public static.Ing. Todos los métodos tienen el mismo formato que el método main() utilizado en los ejemplos anteriores. Un objeto de software es cualquier cosa real o abstracta acerca de la cual almacenamos datos y los métodos que controlan dichos datos. new es un operador en Java que permite crear un objeto. 535 . Más adelante se verá la forma de definir métodos constructores en una clase. es decir se utiliza el constructor por defecto. Un constructor define que ocurre cuando se crea un objeto de una clase. • • nombreObjeto es el nombre del objeto que se desea crear. 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 ( ) . la clase Alumno no define explícitamente un constructor. La mayoría de las clases del mundo real definen explícitamente sus propios constructores dentro de la definición de la clase.INTRODUCCIÓN AL DESARROLLO DE SOLUCIONES ORIENTADAS A OBJETOS OBJETO Objetos: Modelos de entes del mundo. La definición de un objeto en Java comprende la declaración y la creación del mismo. En el ejemplo. Java automáticamente utiliza un constructor por defecto (es decir. se define el objeto objAlumno de la clase Alumno. Para definir otros objetos de la clase Alumno solo se tendría que repetir la sentencia y cambiar el nombre del objeto. Pag. modelo o patrón a partir del cual se pueden crear objetos. nombreClase es el nombre de la clase que está siendo instanciada. Es importante recordar que la definición de una clase sólo crea un molde. cuando se crea un objeto no ocurre nada). y se realiza utilizando la siguiente sentencia: NombreClase nombreObjeto = new NombreClase ( ) . Si no se especifica explícitamente el constructor. El nombre de la clase seguida por los paréntesis especifica el método constructor de la clase. mientras que la definición de un objeto crea un objeto real o una instancia de una clase. En dicha sentencia. ATRIBUTO Hasta este punto. Ahora. tipo nombreAtributo. La forma mínima de un atributo es la siguiente. 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. areglos u objetos que almacenan el mismo valor para todos los objetos de una misma clase. incluido los tipos de Clase. es necesario conocer algunos conceptos básicas sobre los atributos. son variables. Los atributos de clase son variables. Pag. mientras que a partir de un atributo de instancia se crea una copia por cada objeto que se instancia. 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. que puede ser cualquier identificador válido diferente a los que se está utilizando en el mismo ámbito. Juan José Flores Cueto. Los atributos. nombreAtributo especifica el nombre del atributo. Puede ser cualquier tipo válido. se ha creado la clase Alumno sin atributos ni métodos. en principio. En otras palabras. arreglos u objetos que almacenan valores distintos para todos los objetos de una misma clase. Atributos de Clase. para luego definirlos dentro de la clase Alumno. sirven para almacenar valores de los objetos que se instancian a partir de una clase. Los atributos se clasifican en dos categorías: Atributos de Instancia. Los atributos de instancia conocidos también como atributos de objeto. Para declarar un atributo de clase se utiliza la palabra reservada static. Si no se especifica lo contrario los atributos son de instancia y no de clase.Ing. 536 . Donde : • • tipo especifica el tipo de dato que el atributo almacenará. println ( “ La nota del alumno es: ” + objAlumno. se utilizarían las siguientes sentencias: objAlumno. se declara y crea un objeto que contiene una copia de todos los atributos de instancia definidos para la clase. distinto al valor de las copias de los atributos de instancia que otros objetos definidos puedan tener. si se desea asignar el valor 15 y 19 a los atributos de instancia nota1 y nota2 del objeto objAlumno. } En la clase Alumno solo se han definido dos atributos. cada objeto que se defina de la clase Alumno tendrá su propia copia de los atributos de instancia nota1 y nota2. Si se desea mostrar el valor del atributo de instancia nota1 del objeto objAlumno se utilizaría la siguiente sentencia: System. class Alumno { double nota1 . 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. se definirá el objeto objAlumno de la clase Alumno. Cuando se desea acceder a la copia de los atributos de instancia de un objeto se utiliza el operador punto (. En consecuencia. 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.nota1 ) . Cada vez que se define un objeto de una clase. dentro del método main() de la clase PrgAlumno. Pag. 537 . El operador punto relaciona el nombre del objeto con el nombre de un atributo de instancia. objAlumno. tal y como se especificó anteriormente a través de la siguiente sentencia: Alumno objAlumno = new Alumno ( ) . en la clase Alumno se definirá dos atributos de instancia llamados nota1 y nota2. También. En el proyecto de solución ProyAlumno. double nota2 .nota2 = 19 . Se agregarán algunos métodos a la clase Alumno mas adelante.).out.nota1 = 15 . Por ejemplo. pero todavía no se han definido método.INTRODUCCIÓN AL DESARROLLO DE SOLUCIONES ORIENTADAS A OBJETOS En el proyecto de solución 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. } } Es importante recordar que ambas clases pertenecen al paquete dominioDeLaAplicacion y que el proyecto de solución se denomina ProyAlumno. double nota2 . Esta sentencia permite que se muestre el mensaje “La nota del alumno es:” y el valor del atributo nota1 del objeto objAlumno. class PrgAlumno { public static void main ( String args [ ] ) { double prom . System. // Primero declaramos y creamos un objeto de la clase Alumno. Juan José Flores Cueto.nota1 + objAlumno. System. // Ahora asignamos valores a las variables de instancia del objeto creado. 538 . Según lo mencionado anteriormente. se necesita calcular y mostrar el promedio del alumno. // Finalmente. se ejecuta el método main() de la clase PrgAlumno y se obtiene el siguiente resultado: El promedio final del alumno es: 17 Pag.out.println ( “El promedio final del alumno es: ” + prom ) . calculamos el promedio de notas del alumno objAlumno. para luego mostrar el mensaje “El promedio final del alumno es:” y el valor de la variable prom calculada. objAlumno.nota2 = 19 . objAlumno. class Alumno { double nota1 . Al ejecutar el proyecto.nota2 ) / 2 . el proyecto de solución ProyAlumno se desarrollaría de la siguiente manera: package dominioDeLaAplicacion .out.Ing.nota2 ) / 2 . En el proyecto de solución ProyAlumno. } package dominioDeLaAplicacion . Alumno objAlumno = new Alumno ( ) .nota1 = 15 .nota1 + objAlumno.println ( “ El promedio final del alumno es: ” + prom ) . prom = ( objAlumno. para lo cual se utilizarían las siguientes sentencias: prom = ( objAlumno. 539 . objAlumno.) y declararlos con una solo sentencia. se realizarán algunos cambios en el proyecto de solución ProyAlumno. 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. nota3 . class Alumno { double nota1.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( ). de la siguiente manera: package dominioDeLaAplicacion . nota2.nota1 = 15 . Ahora. // Finalmente. nota3 . Se agregará un atributo de instancia en la definición de la clase Alumno. Dicho método main( ) inicia la ejecución del proyecto y está definido en una de las clases que pertenecen al proyecto.nota3 ) / 3 . objAlumno. se puede separar sus nombres mediante comas (.nota1 + objAlumno. // Primero declaramos y creamos un objeto de la clase Alumno. nota2 y nota3. } En base a esto. Alumno objAlumno = new Alumno ( ) . se modificará el método main() de la clase PrgAlumno para utilizar el atributo de instancia nota3. Tal y como se muestra a continuación: class Alumno { double nota1. } } 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. System. class PrgAlumno { public static void main ( String args [ ] ) { double prom . objAlumno. nota2. que se definan los atributos de instancia nota1. prom = ( objAlumno. de tal forma.nota2 = 19 .nota3 = 11 .println ( “ El promedio final del alumno es: ” + prom ) . Es importante mencionar que si existen varios atributos del mismo tipo en una misma clase. calculamos el promedio de notas del alumno objAlumno. // Ahora asignamos valores a las variables de instancia del objeto creado.nota2 y nota3.out.nota2 + objAlumno. } package dominioDeLaAplicacion . System. se les asignará valores a cada copia de los atributos de instancia nota1. el proyecto de solución ProyAlumno se desarrollaría de la siguiente manera: package dominioDeLaAplicacion . objAlumno03.nota1 + objAlumno. System.nota3 ) / 3 .nota2 = 11 .nota2 + objAlumno.nota3 = 11 .Ing. } } Al ejecutar el proyecto (recuerde que cuando se ejecuta un proyecto en realidad se ejecuta el método main( ) ). objAlumno02.nota1 = 11 .nota1 + objAlumno02.nota3 ) / 3 . // Finalmente.nota3 = 15 . // También asignamos valores a las variables de instancia del objeto objAlumno02. // Calculamos el promedio de notas del objeto objAlumno. objAlumno.println ( “ El promedio final del alumno es: ” + prom ) . objAlumno. nota3 . Alumno objAlumno = new Alumno ( ) . prom = ( objAlumno03.out. 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. Alumno objAlumno02 = new Alumno ( ) . objAlumno02.nota1 = 15 .println ( “ El promedio final del alumno es: ” + prom ) . objAlumno03.nota2 = 19 .nota2 + objAlumno03. Luego. class PrgAlumno { public static void main ( String args [ ] ) { double prom .nota2 + objAlumno02. // Ahora asignamos valores a las variables de instancia del objeto objAlumno. } package dominioDeLaAplicacion . nota2.println ( “ El promedio final del alumno es: ” + prom ) . prom = ( objAlumno02. nota2 y nota3. class Alumno { double nota1. objAlumno02. se definirán dos objetos más denominados objAlumno02 y objAlumno03 en el método main( ) de la clase PrgAlumno. objAlumno.out. // Primero declaramos y creamos tres objetos de la clase Alumno. Esto se puede comprobar fácilmente definiendo más de un objeto en el proyecto de solución ProyAlumno. // y a las variables de instancia del objeto objAlumno03.out.nota1 + objAlumno03. objAlumno03. valor distinto para cada atributo de instancia independiente de los valores que pueden tener los otros objetos.nota3 = 11 .nota2 = 14 . Alumno objAlumno03 = new Alumno ( ) . // También calculamos el promedio de notas del objeto objAlumno02. System.nota3 ) / 3 . Juan José Flores Cueto. para finalmente calcular y mostrar el promedio de las notas de cada uno de los objeto de la clase Alumno. prom = ( objAlumno. 540 . Según lo mencionado anteriormente. Para esto.nota1 = 13 . calculamos el promedio de notas del objeto objAlumno03. nota2 y nota3. 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. 541 . Pag. Para declarar un método de clase se utiliza la palabra reservada static. Los métodos se clasifican en dos categorías: Métodos de Instancia. mientras que para ejecutar un método de instancia se requiere crear primero un objeto de la clase donde está definido el método. En otras palabras. 542 . 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. son métodos que pueden ser llamados a través de un objeto instanciado a partir de una clase. para ejecutar un método de clase se utiliza el siguiente formato: NombreClase. conocidos también como métodos de objeto. A través de métodos de clase se puede manipular solo atributos de clase. Ahora es necesario conocer algunas cosas básicas sobre los métodos para luego poder definirlos dentro de la clase Alumno. Los métodos definen el comportamiento de un objeto. tipo nombreMétodo ( listaDeParámetros ) { // Cuerpo del método . Generalmente. Mientras que a través de métodos de instancia se puede manipular tanto atributos de clase como atributos de instancia. Métodos de Clase. Los métodos de clase son métodos que pueden ser llamados también a través de un objeto instanciado a partir de una clase o utilizando directamente la clase. Un método de instancia se ejecuta utilizando el siguiente formato: nombreObjeto.nombreMétodoClase ( ) . Juan José Flores Cueto. MÉTODO Hasta este punto se ha creado la clase Alumno con tres variables de instancia y sin ningún método. La forma mínima de un método es la siguiente. Un método representa un pequeño subprograma encapsulado dentro de una clase y contribuye a definir el comportamiento típico de los objetos.Ing. ] Pag. Los métodos especifican la forma en que se controlan los datos (atributos) de un objeto. Los métodos de instancia.nombreMétodoInstancia ( ) . el tipo que devuelven un tipo distinto de void. entonces la lista de parámetros estará vacía.INTRODUCCIÓN AL DESARROLLO DE SOLUCIONES ORIENTADAS A OBJETOS Donde : • tipo especifica el tipo de dato devuelto válido. ejecuta el método utilizando la siguiente return valor . Puede ser cualquier tipo método no devuelve ningún valor. • • 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. Aquí valor es el dato que el método devuelve a la sentencia que lo ejecutó. Generalmente la sentencia return se coloca al final del cuerpo del método. Pag. listaDeParámetros es una secuencia de parejas de tipo e identificador separados por comas. 543 . Los parámetros son variables que reciben el valor de los argumentos que se pasan al método cuando este es ejecutado. incluido los tipos de clase. Si el devuelto debe ser void. Los métodos devuelven un valor a la sentencia que forma de la sentencia return: por el método. Si el método no tiene parámetros. nota3 . 544 .nota1 = 13 . // Ahora asignamos valores a las variables de instancia del objeto objAlumno. 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. class Alumno { double nota1. anteriormente. El método se llamará promedio( ).promedio ( ) . System. Alumno objAlumno03 = new Alumno ( ) . nota2.print ( “ El promedio final del alumno es: ” ) . } } package dominioDeLaAplicacion . Alumno objAlumno = new Alumno ( ) .out. objAlumno03. class PrgAlumno { public static void main ( String args [ ] ) { double prom .nota2 = 11 . objAlumno02.out. objAlumno02. objAlumno02. objAlumno03. objAlumno. // y a las variables de instancia del objeto objAlumno03. // Primero declaramos y creamos tres objetos de la clase Alumno.nota1 = 11 .promedio ( ) . } } Pag.nota3 = 15 . 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.nota1 = 15 . Ahora.nota2 = 14 .promedio ( ) . objAlumno03. objAlumno. objAlumno. objAlumno. Juan José Flores Cueto. Aunque. Alumno objAlumno02 = new Alumno ( ) . // Calculamos el promedio de notas para cada alumno.nota3 = 11 . poco a poco conforme se modifique el proyecto de solución ProyAlumno se podrán comprender mejor. void promedio ( ) { System. se definirá un método dentro de la clase Alumno.println ( (nota1 + nota2 + nota3 ) / 3 ) . y permitirá calcular y mostrar el promedio de notas de un alumno. // También asignamos valores a las variables de instancia del objeto objAlumno02. objAlumno03. tiene mucho mas sentido que el cálculo lo realice la clase Alumno a través del método promedio( ).nota2 = 19 . objAlumno02. el cual se desarrolla a continuación: package dominioDeLaAplicacion . Como el promedio de notas depende de las notas.nota3 = 11 .Ing. 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. permiten ejecutar el método promedio( ) definido en la clase Alumno: objAlumno. • objAlumno02. objAlumno03. 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. nota2 = 14 y nota3 = 15 ). Es decir.promedio ( ) . nota2 = 19 y nota3 = 11 ). Analicemos la siguiente sentencia. Pag.promedio ( ) . Así. para acceder a los métodos se utiliza el operador punto (.promedio ( ) . 545 . • objAlumno. El operador punto relaciona el nombre del objeto con el nombre de un método.promedio ( ) . Esta sentencia es parte del método main( ) de la clase PrgAlumno y permite que se ejecute el método promedio( ) del objeto objAlumno definido en la clase Alumno. objAlumno02. se ejecuta el método promedio( ) utilizando el nombre de un objeto de la clase Alumno seguido por el operador punto. objAlumno. cuando se ejecuta.).promedio ( ) . ubicadas dentro del método main( ) de la clase PrgAlumno. Al igual que para acceder a las variables de instancia. nota2 = 11 y nota3 = 11 ).INTRODUCCIÓN AL DESARROLLO DE SOLUCIONES ORIENTADAS A OBJETOS Al ejecutar el proyecto se obtiene el siguiente resultado.promedio ( ) . 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.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. • objAlumno03. En el caso anterior. void promedio ( ) { System. No tiene parámetros. tampoco tiene parámetros ya que al final del nombre del método los paréntesis se encuentran vacíos. En el ámbito del método promedio( ) se puede observar que las variables de instancia nota1. } La llave de apertura “{”. System. nota2 y nota3 se utilizan directamente sin estar precedidas del nombre del objeto y el operador punto (.out. cuando se ejecute el método promedio( ) se ejecutarán las dos sentencia que están dentro de su ámbito (es decir. No devuelve valor. se analizará la definición del método promedio( ) de la clase Alumno. entre las llaves). Juan José Flores Cueto.print ( “ El promedio final del alumno es: ” ) . Todos los métodos definidos con void no devuelven valor.out.Ing.println ( (nota1 + nota2 + nota3 ) / 3 ) . Cuando un método utiliza una variable de instancia que ha sido definida en su misma clase. ubicada después del paréntesis y la llave de cierre “}” ubicada en la última línea definen el ámbito del método promedio( ). System. por lo que no es necesario especificar una sentencia return al final de este método.).println ( ( nota1 + nota2 + nota3 ) / 3 ) . El método promedio().out. se puede referir a ella en forma directa utilizando solo su nombre.out. Pag. El ámbito de un método define todas las sentencias que se ejecutarán cuando el método se ejecute. Ahora. } El método promedio( ) no devuelve ningún valor ya que tiene definido como tipo de retorno void.print ( “ El promedio final del alumno es: ” ) . void promedio ( ) { System. 546 . class PrgAlumno { public static void main ( String args [ ] ) { double prom . Alumno objAlumno03 = new Alumno ( ) .println ( “ La nota final de Luis es ” + prom + “. System. objAlumno. } } package dominioDeLaAplicacion .nota3 = 11 . // Calculamos el promedio de notas para cada alumno. objAlumno02. nota3 .nota1 = 15 .out. nota2. a que en mucho casos.nota1 = 13 . objAlumno03.promedio ( ) .nota3 = 15 . Alumno objAlumno = new Alumno ( ) . 547 . pero no todos necesitarán que una vez calculado el promedio de notas este se visualice. prom = objAlumno.nota2 = 11 . double promedio ( ) { return ( nota1 + nota2 + nota3 ) / 3 . // Primero declaramos y creamos tres objetos de la clase Alumno. Pag. objAlumno03.nota2 = 19 .nota1 = 11 . class Alumno { double nota1. se puede realizar solo el cálculo del promedio de notas y devolver dicho valor para que este pueda ser utilizado de diferente forma. esto no constituye la mejor forma o alternativa de desarrollar dicho método.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. // y a las variables de instancia del objeto objAlumno03. 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. objAlumno. // Ahora asignamos valores a las variables de instancia del objeto objAlumno.nota3 = 11 . objAlumno03. objAlumno02. // También asignamos valores a las variables de instancia del objeto objAlumno02 objAlumno02. Esto se debe.” ) . objAlumno.nota2 = 14 . Con la finalidad de mejorar la implementación del método promedio( ). Alumno objAlumno02 = new Alumno ( ) . 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 . } } Para ejecutar.” ) . En el ejemplo tenemos la siguiente sentencia: prom = objAlumno. 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.” ) . se utiliza también el nombre del objeto.promedio ( ) .promedio ( ) .promedio ( ) . System. antes de mostrar el valor de prom se le suma 1.promedio ( ) + “.) y el nombre del método. se muestra el valor de prom. pero debido a que el método devuelve un valor. Juan José Flores Cueto. Una vez que prom ya tiene el valor devuelto por el método promedio( ) se puede procesar dicho valor según sea necesario. Sentencia definida en el método main( ) de la clase PrgAlumno.out. 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( ). éste deberá ser asignado a una variable del mismo tipo que el valor devuelto por el método. Como el método promedio( ) devuelve un valor. System.Ing. double promedio ( ) { return ( nota1 + nota2 + nota3 ) / 3 . prom = prom + 1 . el operador punto (.out. y en el segundo caso.println ( “ La nota final de Pedro es ” + objAlumno03. Pag.println ( “ La nota final de María es ” + prom + “. un método que devuelve un valor. prom = objAlumno02. entonces el valor devuelto será almacenado en la variable prom. 548 . } prom = objAlumno. En el primer caso. Aquí no se hace uso de la variable prom. 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. double promedio ( ) { return (nota1 + nota2 + nota3 ) / 3 . Pag. Lo cual es compatible con el tipo de dato especificado por el método. se ejecuta a su vez el método objAlumno3.” ) . No tiene parámetros. debe ser compatible con el tipo de dato especificado por el método.promedio ( ) + “. Es decir. se aumenta 1 y se muestra el resultado: prom = objAlumno02.out.out.INTRODUCCIÓN AL DESARROLLO DE SOLUCIONES ORIENTADAS A OBJETOS Se obtiene el promedio de notas y se muestra el resultado: prom = objAlumno.” ) . La ejecución del método promedio( ) se realiza directamente en la sentencia println(). Observe la siguiente sentencia: System. Especifica que se debe devolver un valor double. Existen dos puntos importantes relacionados con los métodos que devuelven valor: 1. al ejecutar println( ).out.promedio ( ) .promedio( ) y el valor devuelto se muestra a través de la pantalla.println ( “ La nota final de Luis es ” + prom + “.println ( “ La nota final de Pedro es ” + objAlumno03.” ) . prom = prom + 1 . prom = objAlumno. System.println ( “ La nota final de María es ” + prom + “. System. 549 . Se obtiene el promedio de notas. Es preciso mencionar. El tipo de dato que un método devuelve (con la sentencia return). } 2. Declarada como double.promedio ( ) .promedio ( ) . que se puede escribir estas sentencias de una manera más eficiente. 11 ) .out. Métodos que no devuelven valor y reciben parámetros Ahora. // Primero declaramos y creamos tres objetos de la clase Alumno.15 ) . double c ) { nota1 = a .19. objAlumno02. se definirá un segundo método dentro de la clase Alumno.promedio ( ) .setNotas ( 11. El método setNotas( ) recibirá. Alumno objAlumno02 = new Alumno ( ) . objAlumno03.setNotas ( 13. nota2 = b . prom = objAlumno. class Alumno { double nota1. // y a los atributos de instancia del objeto objAlumno03. // Ahora asignamos valores a los atributos de instancia del objeto objAlumno.promedio ( ) . nota3 = c . fundamentalmente. // También asignamos valores a los atributos de instancia del objeto objAlumno02.14. double promedio ( ) { return ( nota1 + nota2 + nota3 ) / 3 . 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. } void setNotas ( double a. double b. Los parámetros generalizan el uso de un método permitiendo trabajar con diversos datos y utilizarlo en diferentes situaciones.setNotas ( 15. Juan José Flores Cueto. Esto debido. las notas de un alumno y las asignará a los atributos de instancia. nota3 . package dominioDeLaAplicacion .11 ) .11.Ing. nota2 y nota3. System. nota2. Alumno objAlumno = new Alumno ( ) . class PrgAlumno { public static void main ( String args [ ] ) { double prom . prom = objAlumno02. // Calculamos el promedio de notas para cada alumno. a través de sus parámetros. 550 . Alumno objAlumno03 = new Alumno ( ) . Pag. objAlumno.println ( “ La nota final de Luis es ” + prom + “. } } package dominioDeLaAplicacion . El método se llamará setNotas( ) y permitirá asignar valores a las variables de instancia nota1.” ) . 11 ) .19. el nombre del método a ejecutar y los argumentos necesarios. En el ejemplo anterior tenemos: objAlumno. nota2 = b .” ).19. a = 15 Método definido en la clase Alumno.11 ) . Esta sentencia es parte del método main( ) de la clase PrgAlumno( ) y permite ejecutar el método setNotas( ) del objeto objAlumno definido en la clase Alumno. que recibe un valor cuando se ejecuta dicho método. objAlumno.out. nota3 = c . 3 PARÁMETROS Un parámetro es una variable definida por un método.println ( “ La nota final de Pedro es ” + objAlumno03. } } Para ejecutar un método que tiene parámetros se utiliza el nombre del objeto. double b. 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. System.). System. Sentencia definida en el método main() de la clase PrgAlumno. 551 . void setNotas ( double a.INTRODUCCIÓN AL DESARROLLO DE SOLUCIONES ORIENTADAS A OBJETOS prom = prom + 1 .setNotas (15. el operado punto(.println ( “ La nota final de María es ” + prom + “.promedio() + “. double c ) { nota1 = a .” ) . Pag.out. } 3 ARGUMENTOS Un argumento es un valor que se envía a un método cuando este es ejecutado.setNotas ( 15. se debe pasar al método un valor por cada parámetro definido (es decir.Ing. double c ) { nota1 = a . Un método que tiene parámetros debe recibir un valor por cada parámetro definido. double b. nota3 = c .setNotas(15. 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 ( ). Cuando se ejecuta un método que tiene parámetros.19. Especifica que se tiene definido 3 parámetros de tipo double. nota2 = b . void setNotas ( double a. objAlumno. 552 . se deben pasar los argumentos). } 2. Pag. El valor recibido debe ser compatible con el tipo de dato definido por el parámetro al cual será asignado: No devuelve valor. Existen dos puntos importantes relacionados con los métodos que tienen parámetros: 1.11). Juan José Flores Cueto. println ( ( nota1 + nota2 + nota3 ) / 3 ) . Un método puede. 553 . Un método puede. Un método puede. double c ) { nota1 = a . nota3 = c . No devuelve valor. void promedio ( ) { System. void setNotas ( double a. No tiene parámetros. No tiene parámetros. double b. System. devolver un valor y tener definido uno o más parámetros. } 2. se puede afirmar lo siguiente: 1. double promedio ( ) { return (nota1 + nota2 + nota3 ) / 3 . devolver un valor y no tener definido parámetros. Pag. Especifica que se debe devolver un valor double. no devolver un valor y tener definido uno o más parámetros. nota2 = b . Especifica que se tiene definido 3 parámetros de tipo double. (Este tipo de métodos no han sido tratados en el presente capítulo).INTRODUCCIÓN AL DESARROLLO DE SOLUCIONES ORIENTADAS A OBJETOS En conclusión.print ( “ El promedio final del alumno es: ” ) .out. } 4. } 3. no devolver valor y no tener definido parámetros.out. Un método puede. No devuelve valor. } void setNotas ( double a. nota2.Ing. } } Pag. } double promedio ( ) { return ( nota1 + nota2 + nota3 ) / 3 .promedio ( ) . Alumno ( ) { nota1 = 0 . Se modificará el proyecto de solución ProyAlumno. Un constructor es un método especial que sirve para construir o inicializar objetos. // Primero declaramos y creamos un objeto de la clase Alumno. nota2 y nota3 para el objeto objAlumno: package dominioDeLaAplicacion . Los métodos constructores pueden tener parámetros al igual que otros métodos. } } package dominioDeLaAplicacion . nota3 = 0 . El método constructor tiene el mismo nombre que la clase en la cual está definido. nota3 . Juan José Flores Cueto. class PrgAlumno { public static void main ( String args [ ] ) { double prom .” ) . ni siguiera void. 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. se tiene la característica de disponer de un método que permite inicializar objetos inmediatamente después que se crean. objAlumno. double b. pero no devuelven ningún valor.println ( “ La nota final de Luis es ” + prom + “. nota3 = c .out. Cada vez que se crea un objeto se ejecuta en forma automática el método constructor. Método constructor En Java. Este método es conocido como el método constructor. la inicialización de objetos no se puede realizar en el momento en que estos son definidos.19. nota2 = 0 .setNotas ( 15. 554 . Alumno objAlumno = new Alumno ( ) . Por lo cual. System.11 ) . prom = objAlumno. double c ) { nota1 = a . y se incluirá un método constructor en la clase Alumno que permita inicializar la copia de los atributos de instancia nota1. // Calculamos y mostramos el promedio de notas. nota2 = b . 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). class Alumno { double nota1. // Ahora asignamos valores a la copia de las variables de instancia del objeto creado. 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. 555 .INTRODUCCIÓN AL DESARROLLO DE SOLUCIONES ORIENTADAS A OBJETOS Cuando se ejecuta la siguiente sentencia: Alumno objAlumno = new Alumno(). Aunque esto es posible y perfectamente válido. podemos enviar al método constructor Alumno( ). El método constructor Alumno( ) se encargará de inicializar con el valor cero. En ese caso. nota2 y nota3 del objeto creado y eliminar el método setNotas( ). nota2 y nota3 del objeto objAlumno con el valor cero. a todas las copias de los atributos de instancia de los objetos que se creen. Después que se crea el objeto objAlumno se ejecuta en forma automática al método constructor Alumno( ). deberá realizarlo empleando otro método. no se eliminará el método setNotas( ). El método constructor puede tener definido parámetros. El método constructor Alumno( ) permite inicializar la copia de los atributos de instancia nota1. Para nuestro caso. Pag. los valores de la copia de los atributos de instancia nota1. dicho método es setNotas( ) ). Se declara y crea el objeto objAlumno de la clase Alumno. (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. Utilizando el operador this es posible nombrar a las variables locales igual que los atributos de instancia. Alumno ( ) { nota1 = 0 . Dichas variables locales fueron declaradas con los nombres a. 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). la variable local oculta al atributo. nota2 y nota3 debido a que dichos nombres ya eran utilizados por los atributos de instancia. no es correcto que dos variables que están dentro del mismo ámbito tengan el mismo nombre. b y c. que no tienen ningún significado especial. no se podrían utilizar los atributos de instancia ya que siempre que se utilicen los nombres nota1. class Alumno { double nota1. Cuando una variable local tiene el mismo nombre que un atributo. nota2 = 0 . nota2. } } Dentro del método setNotas( ). Si se hubieran declarado las variables locales con los nombres nota1. Si analiza la implementación del método setNotas( ) podrá observar que en dicho método se utilizan las variables locales a. Cuando sucede esto. } void setNotas ( double a. 556 . dos variables locales declaradas dentro del mismo método o dos atributos. se han declarado 3 variables locales (parámetros) para recibir las notas cuando se ejecute el método. cada vez que necesite referirse a las variables locales se utilizará el Pag. Juan José Flores Cueto. y también se utilizan los atributos de instancia nota1.Ing. se dice que las variables locales ocultan a los atributos de instancia. } double promedio ( ) { return ( nota1 + nota2 + nota3 ) / 3 . double c ) { nota1 = a . Sin embargo. Es decir. Para esto. nota2 y nota3. nota3 = 0 . b y c. nota2 = b . Observe la codificación de la clase Alumno: package dominioDeLaAplicacion . Estás variables locales no fueron declaradas con los nombres nota1. nota3 . OCULTAR ATRIBUTOS DE INSTANCIA En Java. no pueden tener nombres iguales. nota2 y nota3. ya que dichos nombres de variables no reflejan el valor que almacenan. una variable local (declarada dentro de un método) puede tener el mismo nombre que un atributo. nota3 = c . nota2 y nota3. double b. nota2 = 0 . nota3 . } void setNotas ( double nota1. double nota3 ) { this. } double promedio ( ) { return ( nota1 + nota2 + nota3 ) / 3 .nombreAtributoInstancia . double nota2. this.) Nos referimos al atributo de instancia nota1. Pag.nota3 = nota3 . 557 .) y el nombre del atributo. nota3 = 0 . se utilizan los mismos nombres para las variables locales (declarados como parámetros) y para los atributos de instancia. Analizar la variación en la codificación de la clase Alumno: package dominioDeLaAplicacion .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( ). This. class Alumno { double nota1. Alumno ( ) { nota1 = 0 . Al momento de referirnos a los atributos de instancia anteponemos al nombre del mismo el operador this y el operador punto (. Forma general del operador this: this.nota1 = nota1 .nota2 = nota2 . Nos referimos a la variable local nota1. Cuando se utiliza el operador this se indica que se está refiriendo al atributo de instancia y no a una variable local. nota2. } } Ahora.nota1 = nota1. 558 . otros programadores piensan que es una buena práctica utilizar mismos nombres por claridad y utilizar el operador this para referirse a los atributos instancia. Algunos programadores procurar no utilizar variables locales que oculten los atributos instancia. A partir de ahora. se utilizará el operador this como una buena práctica programación. Juan José Flores Cueto.Ing. de los de de Pag. Por otro lado. out. se utilizará la clase Lectura presentada en capítulos anteriores.out.nota1 = nota1 . n3. n1 = Lectura. prom = objAlumno.out. nota3 .println ( “ La nota final de Luis es ” + prom + “.” ) . // Ahora enviamos las notas a la copia de los atributos de instancia del objeto. Alumno ( ) { nota1 = 0 .* . 559 . n2. double nota3 ) { this. public class Lectura { // Cuerpo de la clase Lectura definida en capítulos anteriores. // Ingresamos las notas. Para ello.promedio ( ) . System. La clase Lectura pertenece al paquete biblioteca: package dominioDeLaAplicacion . } void setNotas ( double noat1. se modificará el proyecto de solución ProyAlumno. System. } } package biblioteca . Alumno objAlumno = new Alumno ( ) .n2. class PrgAlumno { public static void main ( String args [ ] ) { double n1. objAlumno. nota2 = 0 . } Pag.println ( “ Ingrese la nota del examen parcial: ” ) . } } package dominioDeLaAplicacion . System. n2 = Lectura.out.setNotas ( n1. de tal forma que los datos sean ingresados a través del teclado de la computadora.println ( “ Ingrese la nota de prácticas del alumno: ” ) .nota2 = nota2 .leerInt ( ) . prom . import biblioteca. this. } double promedio ( ) { return ( nota1 + nota2+nota3 ) / 3 . System. n3 = Lectura.leerInt ( ) . class Alumno { double nota1.leerInt ( ) .INTRODUCCIÓN AL DESARROLLO DE SOLUCIONES ORIENTADAS A OBJETOS INGRESO DE DATOS A TRAVÉS DEL TECLADO Ahora.nota3 = nota3 . this.n3 ) . nota3 = 0 . double nota2.println ( “ Ingrese la nota de examen final: ” ) . nota2. Clase PrgAlumno: Tiene el método main( ) que permite que el proyecto se ejecute. se crea al objeto objAlumno de la clase Alumno. Define métodos que facilitan el ingreso de datos utilizando el teclado. Clase Alumno: Clase Lectura: Pag. 560 .Ing. Dentro del método main( ). Define los atributos de instancia para almacenar las notas y los métodos que permiten manipular dichos atributos de instancia. el proyecto de solución ProyAlumno tiene dos paquetes. Uno de los métodos realiza el cálculo del promedio. Cada clase tiene funciones específicas que se detallan a continuación. se ingresan las notas del alumno y se muestra el promedio. Ahora. Un paquete denominado biblioteca que contiene a la clase Lectura y un paquete denominado dominioDeLaAplicacion que contiene las clases PrgAlumno y Alumno. Juan José Flores Cueto. se utilizó dos paquetes. • Codificar el diseño de la solución del problema utilizando el lenguaje de programación Java. o Uso de la clase Lectura con sus métodos definidos.INTRODUCCIÓN AL DESARROLLO DE SOLUCIONES ORIENTADAS A OBJETOS MÉTODO DE LAS 6’D: Etapas y pasos El proyecto de solución ProyAlumno. (Utilice UML). Con la última solución desarrollada para el proyecto ProyAlumno. se pretende dar un paso importante para acercarnos al desarrollo de soluciones orientadas a objetos. Utilizar pseudocódigo. el método de solución queda definido según se muestra a continuación: ENUNCIADO DEL PROBLEMA Etapa 02 Definición Solución Etapa 03 Diseño Solución Etapa 04 Desarrollo Solución • Definición del proyecto de solución. Los mayores cambios los desarrollamos en las 2 clases del paquete dominioDeLaAplicacion. En base a esto. o Definición de clases con sus atributos y métodos. • Definición del paquete Aplicación. • Diseño del diagrama de paquetes respectivo. En una clase se desarrollará el método main( ) y se definirán objetos de la otra clase. • Diseño del algoritmo para los método definidos. se ha modificado poco a poco con la finalidad de tratar nuevos conceptos relacionados a la POO utilizando Java. • Definición del algoritmo. (Utilice UML). mientras que en la otra clase se definirán los atributos de instancia. Pag. Ajuste de los pasos definidos para las etapas del método En la solución del problema anterior. • Definición del paquete biblioteca. Establecer la dependencia. 561 . métodos de instancia y método constructor válido para los objetos. • Diseño de las clases que serán parte del paquete Aplicación. 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. 562 .Ing. Pag. Juan José Flores Cueto. 3.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. Etapa 02 . Calcular el promedio final de un alumno. En el paquete dominioDeLaAplicacion definiremos dos clases. Pero. se volverá a solucionar el problema anterior. El resultado se almacenará en una variable (prom) para luego ser mostradas por pantalla. se realizará el cálculo de la nota final sobre la base de la siguiente fórmula: prom = ( nota1 + nota2 + nota3 ) / 3. en los métodos de esta clase. Utilice la siguiente fórmula: prom = ( nota1 + nota2 + nota3 ) / 3. y nota3.Definición de la solución. Para solucionar el problema se creará un proyecto denominado ProyAlumno. Como buena práctica de programación. La función de la primera clase será de procesamiento y almacenamiento de datos. no se realizará ingreso de datos. Ingrese las notas nota1. Definición del proyecto de solución. Luego. Definición del paquete Aplicación. nota2. dentro del cual se definirá el paquete dominioDeLaAplicacion y se incluirá el paquete biblioteca (el cual incluye la clase Lectura). nota2 y nota3 a través del teclado. Resultado deseado: Datos necesarios: Procesamiento: Mostrar la nota final de un determinado alumno. 2. ni se mostrarán mensajes de ningún tipo. 1.Descripción del problema. 563 . Definición del algoritmo. PROBLEMA 151 Etapa 01 . La 3 notas serán ingresadas por teclado y almacenadas en las variables nota1. Las notas del alumno (en esta caso tenemos 3 notas). si se utilizarán los mismos nombres para referirnos a variables locales y a los atributos Pag. el ingreso de los datos y mostrar los resultados esperados. Necesitamos los siguientes métodos: Método constructor para inicializar los atributos de instancia (método Alumno()). Por otro lado. Pag. La función de la segunda clase será el ingreso de los datos y mostrar los resultados esperados. devuelve el valor del cálculo del promedio de las notas). Utilizamos el método main( ) para iniciar la ejecución del proyecto. la creación del objeto objAlumno. 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. en los métodos de esta clase. Como atributos de instancia definiremos las variables de entrada nota1. 4. Como atributos de instancia definiremos al objeto objAlumno de la clase Alumno. Juan José Flores Cueto. Como buena práctica de programación. En el paquete biblioteca se tendrá la clase Lectura para poder utilizar sus métodos. nota2 y nota3. recibe los valores de las notas ). de instancia. la clase Alumno).Ing. Su definición será la siguiente: Clase: Atributos: Métodos: PrgAlumno. Su definición será la siguiente: Clase: Atributos: Métodos: Alumno. Método para modificar los valores de las notas (método setNotas(). Método para calcular el promedio de las notas (método promedio(). solo podrán ser definidos como atributos de instancia los datos de entrada. Definición del paquete biblioteca. 564 . Clases de dominioDeLaAplicacion PrgAlumno nota1 : double nota2 : double nota3 : double main( ) Alumno( ) setNotas(double. n2.setNotas ( n1. Diseño del Diagrama de Paquetes. double) : void promedio( ) : double Alumno Clase de biblioteca Lectura leerString( ) : String leerChar( ) : char leerInt( ) : int leerLong( ) : long leerFloat( ) : float leerDouble( ) : double Diseño de algoritmos. Algoritmo PrgAlumno METODO MAIN( ) ENTRADA: SALIDA: n1. n3. n2. 565 . prom CREAR OBJETO objAlumno CLASE Alumno EJECUTAR Alumno ( ) LEER n1.promedio ( ) ESCRIBIR prom FIN Pag.n2. n3 EJECUTAR objAlumno. n3 prom INICIO NUMERO n1.INTRODUCCIÓN AL DESARROLLO DE SOLUCIONES ORIENTADAS A OBJETOS Etapa 03 – Diseño de la lógica. double.n3 ) prom = EJECUTAR objAlumno. n2. Diagrama de paquetes dominioDeLaAplicacion biblioteca Diseño de las clases. 566 . nota3 METODO CONSTRUCTOR PARAMETRO: INICIO nota1 = 0 nota2 = 0 nota3 = 0 FIN METODO SETNOTAS PARAMETRO: RETORNO: nota1. Juan José Flores Cueto. nota2. nota3 INICIO ATRIBUTO. nota2.nota2 = nota2 ATRIBUTO. Algoritmo Alumno ATRIBUTOS NUMERO nota1.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. 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.nota1 = nota1 ATRIBUTO.Ing. 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. Pag. nota3 Se especifica que se utilizan las variables nota1. ATRIBUTO. Hay que tener presente que si el método es de clase se deberá anteponer el operador punto (. El método promedio devuelve un resultado. tal y como se muestra en el ejemplo anterior. Pag. n2 y n3. Si el método es de instancia se deberá anteponer el operador punto (. 567 . el cual se almacena en la variable prom.setNotas ( n1. EJECUTAR objAlumno.n3 ) Se ejecuta el método setNotas() del objeto objAlumno. nota2 y nota3 para recibir los valores que se envían al método al cual pertenece la instrucción. 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 se le envían los valores de la variables n1. PARAMETRO Se utiliza para especificar las variables que utilizamos para recibir los valores enviados a un determinado método.promedio ( ) Se ejecuta el método promedio del objeto objAlumno. nota2.INTRODUCCIÓN AL DESARROLLO DE SOLUCIONES ORIENTADAS A OBJETOS EJECUTAR Se utiliza para ejecutar un método. prom = EJECUTAR objAlumno.n2.nota1 = nota1 Para referirnos al atributo nota1 utilizamos la regla ATRIBUTO.) y el nombre del objeto antes de colocar el nombre del método que se desea ejecutar.) y al nombre del atributo. RETORNO Se utiliza para especificar la variable que utilizaremos para devolver o retornar una respuesta de un determinado método. 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. la cual antecede al operador punto (. PARAMETRO: nota1.) y el nombre de la clase antes de colocar el nombre del método que se desea ejecutar. nota3 .Ing. System. Etapa 04 .n3 ) . nota3 = 0 . // Ingresamos las notas. 568 .leerInt ( ) . class Alumno { double nota1.println ( “ Ingrese la nota de prácticas del alumno: ” ) . } } Pag. n2. prom = objAlumno. this. nota2 = 0 .println ( “ Ingrese la nota de examen final: ” ) . System. n2 = Lectura. double nota2.Desarrollo de la Codificación.setNotas ( n1. this. Juan José Flores Cueto. double nota3 ) { this.out.nota3 = nota3 . import biblioteca.promedio ( ) .println ( “ Ingrese la nota del examen parcial: ” ) . System.nota1 = nota1 . } double promedio ( ) { return ( nota1 + nota2 + nota3 ) / 3 . n3 = Lectura.println ( “ La nota final de Luis es ” + prom + “.nota2 = nota2 . class PrgAlumno { public static void main ( String args [ ] ) { double n1. System.out. // Enviamos las notas a la copia de los atributos de instancia del objeto. } } Clase Alumno package dominioDeLaAplicacion . Clase PrgAlumno package dominioDeLaAplicacion .leerInt ( ) . Alumno ( ) { nota1 = 0 .out. n1 = Lectura.n2. } void setNotas ( double nota1. nota2.leerInt ( ) .out. objAlumno. Alumno objAlumno = new Alumno ( ) . prom .” ) . n3.Lectura . es importante mencionar. Interfaces Gráficas. Encapsulamieno. Herencia.INTRODUCCIÓN AL DESARROLLO DE SOLUCIONES ORIENTADAS A OBJETOS OTROS CONCEPTOS Finalmente. entre otros. Conexiones a BD. tales como. Servlets. 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. que deberá continuar investigando otros conceptos importantes de la Programación Orientada a Objetos. Polimorfismo. 569 . Pag. Dichos conceptos avanzados permitirán elaborar soluciones robustas y profesionales. Pag. Juan José Flores Cueto.Ing. 570 . APÉNDICE . . nota2=13 y nota3=15. 3. 573 . Calcular y mostrar su utilidad. Desarrollar una solución que permita mostrar un mensaje por la pantalla. Pag. 2. Utilizar la siguiente fórmula: Promedio: nf = (nota1 + nota2 + nota3) / 3. 4. multiplicar. 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. Desarrollar una solución que permita mostrar el resultado de sumar. Desarrollar una solución que permita mostrar el nombre. Desarrollar una solución que permita leer el costo de un artículo y su precio de venta. 5. 7. Desarrollar una solución que permita ingresar el nombre de dos personas y luego mostrar los nombres junto con un mensaje de bienvenida. 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%). 6.APÉNDICE Problemas propuestos ENUNCIADO DE PROBLEMAS RESUELTOS 1. El mensaje a mostrar será “Hola bienvenidos mi nombre es Danae”. restar y dividir los números 124 y 35. Mostrar el precio total a pagar incluyendo el IGV (Impuesto General a las Ventas = 19%). Desarrollar una solución que permita calcular y mostrar el área de un triángulo rectángulo. Area = ((p*(p . Ingresar la cantidad en dólares y el tipo de cambio. Mostrar el resto de la división. Desarrollar una solución que permita convertir y mostrar una cantidad de dinero. Desarrollar una solución que permita leer un número y calcular el resto de dividir el número entre 3. Ingresar la base y la altura del rectángulo. Semiperímetro p = (a +b + c) / 2. Ingresar la base y la altura del triángulo rectángulo. Desarrollar una solución que permita calcular y mostrar el perímetro y el área de un círculo. Calcular y mostrar el área del cuadrado. 1 Dólar = 3. expresado en dólares. 12. 10. en su equivalente en nuevos soles.b)*(p . Ingresar el radio del círculo.APÉNDICE 8. 13.09 Euros.352 soles. Desarrollar una solución que permita calcular y visualizar el perímetro y el área de un rectángulo. Mostrar el resultado obtenido. 11. y 1 Dólar = 1.a)*(p . Pag. 15. Desarrollar una solución que permita ingresar el lado de un cuadrado. Desarrollar una solución que permita convertir y mostrar una cantidad de soles a Dólares y a Euros. 574 . Considerar como tipo de cambio. Desarrollar una solución que permita calcular el área de un triángulo en función de las longitudes de sus lados. 14.c)) RAIZ 2. 9. 20. Utilizar la siguiente fórmula: nf = (n1 + n2 + n3 + (n4 * 2)) / 5. Desarrollar una solución que permita ingresar las notas de un determinado alumno y visualizar su promedio final. Desarrollar una solución que permita ingresar 2 números a través del teclado. Calcular la suma.APÉNDICE 16. Desarrollar una solución que permita ingresar el sueldo de un obrero. Calcular el aumento de sueldo del obrero por concepto de escolaridad (17%). multiplicación y división de dichos números. Ingresar las notas n1. Calcular el tiempo que permaneció en la empresa. Ingresar las notas n1. 22. 19. 575 . Ingresar la hora y los minutos de entrada y de salida. Pag. calcular la potencia de 5 y la raíz cuadrada de cada uno de los números ingresados. n3 y n4 a través del teclado. 18. Mostrar el resultado de todas las operaciones. Desarrollar una solución que permita calcular la nota final que ha obtenido un alumno en el curso de laboratorio de Programación Avanzada. 17. Mostrar el resultado de las operaciones. Desarrollar una solución que permita ingresar la hora de ingreso y la hora de salida de un obrero en la empresa que labora. Mostrar el sueldo a cobrar. Adicionalmente. Calcular la suma. El promedio final se obtiene de la siguiente fórmula: PF = (PL + EP + EF*2)/4. sabiendo que se elimina la menor nota y se duplica la mayor nota. Desarrollar una solución que permita ingresar 2 números a través del teclado. n2. Desarrollar una solución que permita calcular la nota final que ha obtenido un alumno en el curso de Algoritmo y Estructura de Datos. n3 y n4 a través del teclado. 21. resta. multiplicación y división de dichos números. resta. EP = Examen Parcial y EF = Examen Final. n2. Donde PL = Promedio de Laboratorio. 1 pie = 12 pulgadas). Desarrollar una solución que permita ingresar una cantidad expresada en metros. 1 pie = 12 pulgadas. 1 pulgada = 2. los cuales corresponden a los vértices de un triángulo. y1). y visualizar su equivalente en pulgadas y en pies (1 metro = 39. 26. P2 y P3. 1 yarda = 3 pies. Intercambie las unidades de los dos números. Desarrollar una solución que permita calcular el perímetro de un triángulo dadas las coordenadas de los puntos P1.”.54 cm.APÉNDICE 23. 29. 24. Determinar la suma de las cifras del número ingresado. Calcular su respectivo descuento del 14% por concepto de impuestos y el 3% por concepto de cafetería. Desarrollar una solución que permita convertir una cantidad expresada en metros a sus equivalentes en centímetros. 27. La distancia entre los dos puntos se calcula a partir de la siguiente fórmula: Distancia = ((x1-x2) **2 + (y1-y2) ** 2) RAIZ 2. Desarrollar una solución que permita ingresar el sueldo de un obrero de la empresa “La Poderosa S. Cada uno de los puntos está expresado en coordenadas y éstos deben ser ingresados por el usuario: P1(x1. Desarrollar una solución que permita ingresar 2 números enteros positivos de dos cifras.37 pulgadas. P2(x2. 28. pulgadas. Pag. pies y yardas.A. Considerar la siguiente información: 1 metro = 100 cm. Mostrar el total de descuentos y el sueldo a cobrar. Desarrollar una solución que permita ingresar un número de 4 cifras. Desarrollar una solución que permita calcular y visualizar la distancia que existe entre dos puntos dados. y2). 576 . 25. Utilizar la fórmula del problema anterior para determinar la distancia entre cada uno de los puntos. Desarrollar una solución que permita ingresar una cantidad entera de dinero. más una comisión del 18% por cada venta que el vendedor realice. 33. S/ 5 y S/ 1. 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. Desarrollar una solución que permita determinar si un número ingresado por teclado es capicúa o no. S/ 50. S/ 20. (Ejemplo: se ingresa el número 3579 se debe visualizar el 9753). 31. 34.00 nuevos soles. 577 Utilizar la siguiente . Mostrar el sueldo básico.APÉNDICE 30. Pag. Dicho cálculo se realiza en base a un sueldo básico equivalente a S/ 465. S/ 10. Un número es capicúa si se lee igual de derecha a izquierda o viceversa. Mostrar el número de billetes de S/ 100. Dicho cálculo se realiza de la siguientes manera: el sueldo básico se calcula en base al número total de horas trabajadas basada en una tarifa horaria. Al sueldo bruto se le aplica un descuento del 12% obteniéndose el sueldo neto. el sueldo bruto y el sueldo neto de un trabajador. 35. que existen en la cantidad de dinero ingresada.. Desarrollar una solución que permita realizar el cálculo del pago mensual del sueldo de un empleado de una empresa. El número deberá ser ingresado por teclado. (Ejemplo de número capicúa 4554). 32. Desarrollar una solución que permita invertir un número de cuatro dígitos. 36. Desarrollar una solución que permita convertir una temperatura expresada en grados Celsius a su equivalente en grados Fahrenheit. fórmula: F = (9 / 5) * C + 32. Desarrollar una solución que permita calcular y visualizar el número de segundos que hay en un determinado número de días. Desarrollar una solución que permita calcula el sueldo neto de un vendedor. Mostrar el equivalente en Megabytes. Ingresar el nombre. Agudo.APÉNDICE 37. código y edad de la persona. 1 Kilobyte= 1024 Bytes. apellidos. a = Aceleración. Kilobytes y Bytes. Desarrollar una solución que permita calcular el porcentaje de hombres y el porcentaje de mujeres que están matriculados en un determinado curso. Desarrollar una solución que permita determinar con qué velocidad inicial partió un automóvil de un determinado punto y qué distancia. . 42. Vo = Velocidad Inicial. Los ángulos se clasifican de la siguiente manera: Ángulo = 0 0 < ángulo > 90 Pag. Desarrollar una solución que permita leer la capacidad de un disco duro en Gigabytes. 578 Nulo. e = Espacio recorrido. se deberá visualizar el mensaje “Cuadrado pequeño”. 1 Megabyte= 1024 Kilobytes. conociendo su velocidad final. su aceleración y el tiempo empleado en el recorrido. 40. 38. Desarrollar una solución que permita calcular y mostrar el área de un cuadrado. t = Tiempo empleado en el recorrido. Si el área del cuadrado resulta menor que 768. Desarrollar una solución que permita determinar si una persona es o no mayor de edad. Considerar las siguientes fórmulas: e = Vot + at 2 Vf = Vo + at. 1 Gigabyte= 1024 Megabytes. Desarrollar una solución que permita determinar cómo se clasifica un ángulo ingresado por teclado. 41. 39. donde: Vf = Velocidad final. Desarrollar una solución que permita calcular el sueldo de un trabajador conociendo el número de horas trabajadas y su tarifa horaria. 46. Llano. sabiendo que se debe descontar un 12% del sueldo por concepto de impuestos si éste es mayor de S/. Desarrollar una solución que permita ingresar los votos obtenidos por cada candidato en una elección democrática. ‘B’.00. Determinar la votación promedio y mostrar los códigos de los candidatos que obtuvieron una votación inferior a la votación promedio. Desarrollar una solución que permita determinar el sueldo neto.APÉNDICE Ángulo = 90 90 < ángulo > 180 Ángulo = 180 180 < ángulo > 360 Ángulo = 360 Recto. La empresa paga a sus vendedores por horas trabajadas. Si el alumno obtiene una nota final mayor a 17 se deberá visualizar un mensaje de felicitaciones. Considerar que han participado 5 candidatos cuyos códigos son ‘A’. 579 . ‘D’ y ‘E’. 45. Por otro lado. sabiendo que se debe descontar un 10% del sueldo por concepto de impuestos si éste es mayor de S/. si el sueldo bruto es superior a S/. Obtuso. ‘C’. 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. Completo. Mostrar el sueldo y el descuento respectivo. 3000. Desarrollar una solución que permita Pag.00 el sueldo del trabajador está sujeto a un descuento del 15%.00. Hasta 40 horas trabajadas se paga una tarifa normal y sobre las 48 horas. Cóncavo. 44. 43. Desarrollar una solución que permita calcular y mostrar la nota final (nf) de un alumno. sabiendo que se tienen sólo dos notas. el sueldo bruto y el descuento de un trabajador de una empresa. se paga la tarifa con un recargo del 20%. 1860. 47.1650. 1800. Desarrollar una solución que permita calcular y mostrar el monto total a pagar por la compra de varios artículos. Desarrollar una solución que permita calcular y mostrar la nota final de un alumno. Proveedor B: Costo unitario igual a $27. 53.APÉNDICE 48. caso contrario el descuento será del 3%. Desarrollar una solución que permita determinar que proveedor es más conveniente para una empresa. 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. Fórmula: nf = (n1+n2+n3) / 3. Considerar que deberá agregar el IGV respectivo. Mostrar las notas ordenadas en forma ascendente (de menor a mayor). 51.5 y 10% de descuento para mas de 35 unidades adquiridas. 52. 580 . Si la nota final (nf) es menor a 13 se deberá mostrar el mensaje “Alumno desaprobado”. caso contrario se mostrará el mensaje “Alumno aprobado”. 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. Si el monto total a pagar incluido IGV es mayor a S/.0 y 15% de descuento para más de 50 unidades adquiridas. 50. La empresa desea adquirir cierta cantidad de unidades de un producto para lo cual cuenta con una oferta de dos proveedores.00 nuevos soles se aplica un descuento del 12%. 49. Pag. Desarrollar una solución que permita determinar si un número es divisor de otro número. Utilizar la expresión (num1 RESTO num2 > 0) donde “num1” y “num2” son los números. impar o nulo. martes…etc). Desarrollar una solución que permita ingresar la categoría y el sueldo de un trabajador. Si el número es Menor que 500 o no. Categoría 1 2 3 Aumento 35 % 25 % 15 % Pag.. impar o nulo.etc). Mostrar el nuevo sueldo del trabajador. 55. Mostrar un mensaje si el número es par. Desarrollar una solución que permita ingresar un número entero. Si el número es par o impar. un número par o un número múltiplo de 7.. 581 . Utilizar lo siguiente: -1 elevado a la potencia del número ingresado (-1 ** num). Desarrollar una solución que permita ingresar un número entre 1 y 12. Mostrar si el número ingresado es un número negativo. Desarrollar un programa que permita ingresar un número entre 1 y 7. (Enero. 59.. Calcular el aumento correspondiente teniendo en cuenta la siguiente tabla. 57. Febrero.APÉNDICE 54. 56. Si el número es múltiplo de 3 o no. Desarrollar una solución que permita determinar si un numero (num) es par. Desarrollar una solución que permita ingresar un número entero. 58. 60. (Lunes. Mostrar si el número ingresado es un número par o un número impar. Mostrar el nombre del día de la semana correspondiente. Indicar lo siguiente en base al número ingresado: Si el número es positivo o negativo. Desarrollar una solución que permita ingresar un número entero. Mostrar el nombre del mes del año correspondiente. 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. Adicionalmente. según los datos de la tabla.00 S/. 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. 4.APÉNDICE 4 5% 61. Enfermedad Tipo 1 2 3 Costo diario 120 380 620 63. Tipo Moderado Mediano Extra Grande Full Costo S/. según los datos de la tabla. sabiendo que. 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. 582 .00 62. debe considerar que los pacientes menores de 18 años implican un costo adicional de 25 %. hay que pagar el 6% por el servicio y 7% por propinas. Considerar que se venden 4 tipos de sándwich. Adicionalmente. Desarrollar una solución que permita calcular y mostrar el monto total a pagar por un sándwich. 2. 6. Enfermedad Tipo 1 2 Costo diario 180 420 Pag. 3. de acuerdo a la siguiente tabla.00 S/.00 S/. adicionalmente. debe considerar que los pacientes de sexo femenino menores de 14 años implican un costo adicional de 8%. Calcular su nota final (nf). Enfermedad Tipo 1 2 3 4 Costo diario 122 234 345 587 66. Desarrollar una solución que permita ingresar las notas obtenidas por un alumno del curso de Matemática Básica III. Mayores de 14. Código Profesor 1 2 3 Fórmula nf = (n1 + n2 ) / 2 nf = (n1 + n2*2) / 3 nf = (n1*2 + n2) / 3 Pag. Adicionalmente. de acuerdo a la fórmula empleada por su profesor. 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. considerando que la nota mínima aprobatoria es 12 (doce). 583 . Mostrar la nota final (nf) del alumno y si está aprobado o no. 65. según los datos de la tabla. Considerar la siguiente tabla: Edad 18 -más 11 -17 0 –10 Categoría Contenido para adultos.APÉNDICE 3 513 64. según los datos de la tabla. 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. Apta para todos. Categoría MB en caso contrario. Si la persona es de sexo masculino: Categoría MA si tiene menos de 40 años. Considerar que la categorización de los postulantes se realiza en función de su sexo y edad. Desarrollar una solución que permita determinar la categoría de cada alumno. 584 . Desarrollar una solución que permita ingresar las ‘n’ notas de un alumno. tal y como se muestra en la siguiente tabla: Promedio Desde 17 a 20 Desde 14 a 16 Desde 10 a 13 Desde cero a 9 Categoría A B C D Pag. Finalmente. determinar la categoría obtenida por un alumno. considerando que la categoría del alumno está en función de su promedio. de acuerdo a lo siguiente: Si la persona es de sexo femenino: Categoría FA si tienen menos de 30 años. Considerar que la categorización de los alumnos se realiza en función de la nota en base a la siguiente tabla: Promedio 18 – 20 15 – 17 11 – 14 00 – 10 Bueno Regular Malo Categoría Excelente 69. Categoría FB en caso contrario. Calcular el promedio del alumno sabiendo que se elimina la nota mas baja. 68.APÉNDICE 67. Desarrollar una solución que permita determinar la categoría de cada postulante. se deberá visualizar el mensaje “rectángulo pequeño”. Desarrollar una solución que permita ingresar el sueldo de un trabajador. Si el área es menor que 100. alumno. En la tabla que se muestra a continuación se detallan los costos de los cursos: Básico Profesor Alumno Externo 35 40 60 Intermedio 40 50 80 Avanzado 45 60 100 Mostrar los datos del recibo.APÉNDICE 70. Desarrollar una solución que permita ingresar el nombre del alumno. y si el área es mayor o igual que 1000. Si el área es menor que 100. 585 . externo) y el nivel del curso (básico. el tipo de participante (profesor. 72. 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”. intermedio. 71. se visualizará el mensaje “rectángulo mediano”. Calcular y mostrar su aumento por incremento del costo de vida de acuerdo a la siguiente tabla: Pag. el mensaje será “rectángulo grande”. avanzado). si el área es mayor o igual a 100 y menor que 1000. Desarrollar una solución que permita calcular el área de un rectángulo conociendo su base y altura. Desarrollar una solución que permita calcular el área de un rectángulo conociendo su base y altura. tal y como se muestra en el siguiente ejemplo: ********************* RECIBO ****************** Alumno : Juan Pérez Costo Nivel : (de acuerdo a la tabla) : (de acuerdo al ingresado) *************************************************** 73. 78. Calcular el número de días que tiene el mes y si el año ingresado es bisiesto o no. 76. Desarrollar una solución que permita ingresar una fecha (dd/mm/aaaaa) y la convierta al siguiente formato de fecha: “dd de NombreMes de aaaa”. Desarrollar una solución que permita ingresar un número de 2 cifras. 79. Desarrollar una solución que permita ingresar un número de 3 cifras. 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) TP<=9 9<TP<=17 17<TP<=27 TP>27 Tipo de Clima Frió Nublado Caluroso Trópico 75. Ejemplo: Ingreso 12/05/2005. Pag. Desarrollar una solución que permita ingresar una fecha en el siguiente formato: (dd/mm/aaaa). 77. Desarrollar una solución que permita calcular el factorial de un número entero positivo. Mostrar el equivalente del número ingresado en letras. Se deberá mostrar: 12 de Mayo del 2005.APÉNDICE Condición Sueldo < 2000 2000 < =Sueldo < =3000 Sueldo > 3000 Aumento 23 % 17 % 12 % 74. 586 . Mostrar el equivalente del número ingresado en letras. 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. 84.. 2 2 2 2 Pag. el valor de la razón y el número de términos. Desarrollar una solución que permita determinar cuáles son los términos de una progresión aritmética. el valor de la razón y el número de términos. Solicitar el valor del primer término.APÉNDICE 80. Desarrollar una solución que permita ingresar tres números enteros. Mostrar el número mayor. 81. 87. Desarrollar una solución que permita calcular la cantidad de dígitos. 86. 88. Solicitar el valor del primer término. 82. Desarrollar una solución que permita determinar cuales son los términos de una progresión geométrica y la suma de los mismos. Solicitar el valor del primer término. Desarrollar una solución que permita determinar y mostrar la suma de los términos de la siguiente serie: 1 + 1/3 + 1/5 + 1/7 + 1/9 +. 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 la suma de todos los números cuadrados perfectos existentes entre los 1000 primeros números. 587 .. Desarrollar una solución que permita determinar cuales son los términos de una progresión aritmética y la suma de los mismos. Desarrollar una solución que permita determinar los 3 primeros números perfectos. 83. 85. 96. Desarrollar un programa que genere cada uno de los siguientes gráficos: * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 97. Determinar y mostrar la suma de todos los números pares y la suma de todos los números primos. 90. Desarrollar una solución que permita calcular y mostrar el producto de los números pares comprendidos entre los números 20 y 400. Desarrollar una solución que permita ingresar 50 números. 93. Determinar cuántos números son negativos. Calcular y mostrar la suma de los números pares. 94. Desarrollar una solución que permita ingresar 10 números. Desarrollar un programa que genere cada uno de los siguientes gráficos: Pag. Desarrollar una solución que permita ingresar un número entero. 91. 95. la suma de los números impares y la media de todos los número ingresados. 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 100 números.APÉNDICE 89. 92. ceros y positivos. Desarrollar una solución que permita ingresar 50 números enteros cualesquiera. 588 . Determinar la suma de todos los números impares y la cantidad de números primos ingresados. Determinar y mostrar si el número ingresado es un número primo o no. Desarrollar un programa que genere el siguiente gráfico: 1 2 4 7 2 7 2 5 7 3 8 3 6 8 4 9 4 5 9 5 1 3 6 1 6 99. DANAE DANA DAN Pag. Desarrollar un programa que permita leer una cadena. Tal y como se muestra a continuación: Ejemplo. Mostrar la cadena ingresada en forma triangular.APÉNDICE * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 98. Desarrollar un programa que permita leer una cadena. Se ingresa la cadena “Danae”. Se ingresa la cadena “Danae”. 589 . D DA DAN DANA DANAE 100. Tal y como se muestra a continuación: Ejemplo. Mostrar la cadena ingresada en forma triangular. 104. Ingresar las notas a través del teclado. Edad mínima. Ingresar las notas a través del teclado. Edad máxima. Promedio de edades pares. 590 . 106. Desarrollar una solución que permita calcular la nota final de todos los alumnos. Desarrollar una solución que permita ingresar las edades de 10 alumnos. 102. La cantidad de símbolos. Pag. Desarrollar una solución que permita calcular y mostrar la nota final de 10 alumno. El número deberá ser ingresado por teclado. Se deberá utilizar la estructura lógica MIENTRAS. Utilizar la siguiente fórmula: nf = (n1 + n2 + n3 + (n4 * 2)) / 5. La cantidad de consonantes. 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. Desarrollar una solución que permita invertir un número cualquiera. Promedio de edades. Utilizar la siguiente fórmula: nf = (n1 + n2 + n3 + (n4 * 2)) / 5. La cantidad de espacios en blanco. Calcular y mostrar lo siguiente: Suma de todas la edades. Desarrollar una solución que permita ingresar un texto y permita determinar lo siguiente: La cantidad de vocales. 103. 105.APÉNDICE DA D 101. Desarrollar una solución que permita determinar la suma de sueldos de los obreros (categoría C).000. Alturas mayores de 1. determinar cuál es el mayor y el menor sueldo en la empresa. Se desea hacer una estadística de las estaturas de los 1000 alumnos de un colegio.80 metros.80 metros.00 y S/. y cuántos más de S/.00.000. 3. 107. Se desea conocer el promedio obtenido en cada una de las pruebas realizadas. Alturas entre 1. Desarrollar una solución para el siguiente problema. 111. Se tiene una relación de 100 obreros y su sueldo. Calcular y mostrar el número de alumnos que tienen promedio final menos de 11. de acuerdo a lo siguiente: Alturas hasta 1. Se deberá utilizar la estructura lógica HACER. y los que tienen promedio final mayor de 17. 591 . 800.APÉNDICE Ingrese las notas a través del teclado.00 (Incluidos S/. Desarrollar una solución para el siguiente problema. 800. entre S/.60 metros. 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. 109. 110.00. Adicionalmente.70 metros. Ingresar 4 notas y calcular el promedio del alumno en base a la siguiente fórmula: nf = (n1 + n2 + n3 + (n4 * 2)) / 5. En un salón de clase se ha realizado un examen con tres pruebas distintas. los que tiene promedio final entre 11 y 14.3.00 y S/.60 metros y 1.00). Determinar cuántos ganan menos de S/. 3.70 metros y 1. 800. Alturas entre 1. Desarrollar una solución para el siguiente problema. Pag. aquellos que tienen promedio final entre 15 y 17. 108.000. Calcular la nota media de los alumnos de una clase considerando “n” alumnos y “c” notas. 116. Desarrollar una solución que permita desarrollar el siguiente menú con las opciones solicitadas. 113. 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. Calcular el total de loterías vendidas de cada tipo. mañana.00 nuevos soles se aplicará un descuento del 12%. incluido IGV. Desarrollar una solución que permita emitir la factura correspondiente a la compra de varios artículos. Un canillita vende 4 tipos de loterías según se muestra en el siguiente cuadro.000.APÉNDICE 112. [4] Terminar. 117. Los empleados de una fábrica trabajan en tres turnos. tarde y noche. Se desea calcular el jornal diario de cada empleado teniendo en cuenta lo siguiente: Pag. 592 . El IGV a aplicar es el 19% y si el monto total de la factura. 3.00 soles. los profesionales con S/ 25. es mayor a S/. Se determina que los gerentes contribuirán con S/ 35. 115. Determinar el total recaudado. Desarrollar una solución para el siguiente problema. Tipo lotería 1 2 3 4 Costo 2 4 6 8 114. [1] Ingreso de datos (base y altura de un rectángulo).00 soles y el resto de empleados de acuerdo a sus posibilidades. [2] Proceso (determinar área y perímetro del rectángulo). [3] Resultado (Mostrar el valor de área y perímetro obtenidos). 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. Antes de finalizar. palco o mezanine). 593 . Para el turno tarde se incrementa S/ 10.00 soles por hora.00 soles por hora. palco y mezanine en el día. Número de entradas vendidas para platea. se leerá una sola vez el precio de entrada para palco. Desarrollar una solución que permita controlar la venta de boletos en un determinado día en un teatro de la capital. platea y mezanine. se deberá proporcionar la siguiente información: Número total de entradas vendidas durante el día. la tarifa se incrementa en 50% para los turnos mañana y tarde y en 60% para el turno noche. Por cada entrada vendida se leerá los siguientes datos: número de boleto y lugar (puede ser platea.APÉNDICE La tarifa del turno mañana y tarde es de S/ 8. El total de soles recaudados en el día. 119. La tarifa del turno noche es de S/ 10. 118.00 soles por concepto de movilidad. en base a la siguiente información: Al comenzar. El programa terminará cuando el número de boleto sea igual a cero. En caso de ser un día domingo. 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). el nombre del alumno con la mayor nota y el nombre del alumno con la menor nota.A. 500. 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). 124. y cuantos tienen un salario mayor a S/. En la fabrica “LA CLONACION S.00 y S/. según los datos de la tabla. Desarrollar una solución que permita ingresar los nombres y las edades de ‘n’ alumnos. 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%. la nota final más baja y más alta.200. el precio de venta y la utilidad de cada artículo. 123. 2.200. Enfermedad Tipo 1 2 3 Costo diario 100 150 300 Pag. Desarrollar una solución para el siguiente problema. desaprobados. Adicionalmente.00. 2. deberá indicar el promedio del costo de todos los artículos. entre S/. 2. el articulo más caro y el más barato. 121. 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.00. Ingresar la cantidad de alumnos y las 3 notas de cada alumno. deberá indicar el porcentaje de alumnos aprobados.200.00 (incluidos S/. Determinar la suma de las edades.00).00 y S/. 500. 500. Adicionalmente. Ingresar el nombre. 122.”. 594 . Trabajan miles de obreros y se desea determinar cuantos tienen un salario menor a S/.APÉNDICE 120. El cine “Pantalla Láser” cuenta con 3 salas y atiende en horarios de matinée. vermouth y noche. 128. (considere solo tres empresas periodísticas. su precio de venta. quien ganó el premio al mejor canillita 1999 otorgado por un diario de la capital. 126.APÉNDICE 4 450 125. Desarrollar una solución para el siguiente problema. Ingresar el producto vendido y la empresa que lo fabricó. 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. normal y especializado). caramelo y gaseosa). Pag. 129. Ingresar el tipo de diario vendido y la empresa a la cuál pertenece. Desarrollar una solución que permita determinar cuántos tipos de periódicos de cada empresa fue vendido por José Luis Candado. y asuma que cada empresa desarrolla 3 tipos de diario: popular. 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”. Deberá ingresar el tipo de hamburguesa y el local en el que fue vendida. Una empresa cuenta con cuatro almacenes de productos. Desarrollar una solución para el siguiente problema. la cantidad existente y el almacén donde están ubicados). 595 . ¿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. 127. Calcular el número de personas que ingresaron a cada una de las salas en cada uno de los horarios en un determinado día. (Ingresar solo los siguientes datos: Número de sala y el horario al cuál el cliente ingresa). Determinar lo siguiente: La suma de todas las edades. Salida.APÉNDICE 130. Determinar si un número es primo o no. 596 . resta y multiplicación de dos números. La cantidad de edades impares. Menor sueldo. Determinar el área y perímetro de un círculo. 131. Desarrollar una solución que permita mostrar un menú con las siguientes opciones: Suma. Cantidad de nombre que comiencen entre “c y p”. Pag. El promedio de edades pares. Desarrollar una solución que permita ingresar los valores de una matriz de 4*4. 134. Determinar lo siguiente: Sueldo promedio. El promedio de edades. La edad mayor. Determinar el número inverso de un número. Desarrollar una solución que permita ingresar los nombres y sueldos de 5 empleados. Desarrollar una solución que permita mostrar un menú con las siguientes opciones: Determinar si un número es par o impar. El nombre de la alumna que tiene la mayor edad. Nombre del empleado con mayor sueldo. Calcular la suma de la diagonal y la suma de la diagonal inversa. Salida. 132. 133. Desarrollar una solución que permita ingresar las edades de 10 alumnos. La edad menor. 597 . 138. y otro listado con los datos de todo los empleados solteros. 139. 137. Intercambiar la primera columna por la tercera columna. así como los símbolos indicados. Determinar y mostrar el digito mayor del número ingresado. Desarrollar una solución que permita ingresar los valores de una matriz de 5*4. así como también intercambiar la segunda fila por la cuarta fila. Determinar cuantos nombres comienzan entre las letras ‘z’ y ‘p’. Desarrollar una solución que permita leer 10 nombres. Determinar el número de nombres cuya primera letra es una letra ‘c’ o una letra ‘x’. Determinar cuál es el apellido mayor (alfabéticamente hablando). Utilizar un vector. Desarrollar una solución que permita ingresar 10 nombres. Desarrollar una solución que reciba la fecha y hora con el siguiente formato: “dd/mm/aaaa hh:mm:ss”. 136. Elaborar un listado con los datos de los empleados cuya edad este ente 18 y 30 años. Validar el número ingresado. También determine el nombre que tiene el menor número de caracteres. 141. 142. Desarrollar una solución que permita almacenar el nombre. Pag. Mostrar los datos de la siguiente manera: Hoy es 30 de septiembre y son las 18 y 10 de la tarde. 30/09/2004 18:10:10. Ejemplo. Desarrollar una solución que permita ingresar un número entero de cualquier número de cifras. 140.APÉNDICE 135. Desarrollar una solución que permita leer 10 apellidos. Validar que la fecha y la hora tenga el número de caracteres correctos. Desarrollar una solución que reciba la fecha con el siguiente formato: 09-302004 (mm-dd-aaaa) y lo convierta a este otro formato: 30 de Septiembre del 2004. la edad y el estado civil de 15 empleados. Los datos de los alumnos son. Calcular los años de servicio (que tiene trabajando). Los datos de los alumnos son. 598 .APÉNDICE 143. Utilizar un vector y validar que el número ingresado sea de 3 cifras. fecha de ingreso (dd/mm/aaaa) y sueldo. Cantidad de alumnos cuyo nombre comience entre a y p. nombre. Regular o Egresado) y nota. Calcular y mostrar la edad de cada alumno . Desarrollar una solución que permita leer los datos de ‘n’ alumnos. Nombre del empleado con menos años de servicio. Desarrollar una solución que permita leer 4 números de 3 cifras. Los datos de los empleados son. fecha de nacimiento (dd/mm/aaaa) y nota. nombre. Si el número está entre 301 y 600 pertenece a la categoría B. Desarrollar una solución que permita leer los datos de 5 empleados. Pag. 146. Se solicita: Ingresar los datos haciendo las validaciones a la fecha (tamaño de fecha y que contenga los símbolos “/”) y sueldo. 145. Crear un menú de opciones para acceder al programa. Nombre del alumno con mayor nota. tipo (Ingresantes. Desarrollar una solución que permita leer los datos de 5 alumnos. Mostrar su categoría. Crear un menú de opciones para acceder al programa. Si el número está entre 100 y 300 pertenece a la categoría A. Hallar: Hallar la nota promedio de todos los alumnos ingresados. Cantidad de empleado que ingresaron entre 1980 y 2004. y si el número está entre 601 y 999 pertenece a la categoría C. Hallar: Hallar el sueldo promedio. nombre. 144. Se solicita: Ingresar los datos haciendo las validaciones a la fecha (tamaño de fecha y que contenga los símbolos “/”) y nota. Por cada alumno mostrar: Nombre al revés. Cálculos: Hallar el promedio de los ingresantes y regulares. Las 3 ultima letras. Crear un menú para acceder al programa. nombre. 599 . Los 3 primeros caracteres del nombre. Desarrollar una solución que permita leer los datos de ‘n’ alumnos. Si es ingresante y tiene entre 12-16 categoría IB. Desarrollar una solución que permita leer los datos de ‘n’ alumnos. Por cada alumno mostrar la categoría: Si es ingresante y tiene entre 17-20 categoría IA. Se solicita: Ingresar los datos validando que en el sexo y la edad. Pag.APÉNDICE Se solicita: Ingresar los datos haciendo las validaciones al tipo y nota. Los datos de los alumnos son. 147. Por cada alumno mostrar: Nombre en Mayúscula. fecha de nacimiento (dd/mm/aaaa) y nota. Nombre de la persona con mayor edad. nombre. Cálculos: Hallar la edad promedio. edad y sexo. Si es regular y tiene entre 17-20 categoría RA. Los datos de los alumnos son. Nombre de mujer con menos edad. Mayor nota de los ingresantes y de los Egresados. Crear una opción para continuar ejecutando el programa. Si es egresado y tiene entre 17-20 categoría EA. Nombre del alumno con mayor nota. Ultimo carácter. 148. sueldo y fecha de ingreso. Mostrar el nombre de la persona más nueva es decir con menos años de ingreso. El descuento de la AFP se ve en la siguiente tabla: AFP Integra Unión ProFuturo Cálculos: Mostrar el nombre y el AFP de la persona con mayor sueldo. Mostrar por cada alumno la edad exacta (años y meses cumplidos a la fecha de hoy). 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. Cálculos: Hallar la edad promedio. Crear un menú de opciones para acceder al programa. 600 Descuento 12% 13% 14% . Nombre y la edad de la persona con mayor nota. Si tiene menos de 4 años se le descuenta 10% más el descuento de la AFP. sueldo Básico y fecha de ingreso (dd-mm-aaaa). Se solicita: Ingresar los datos validando AFP.APÉNDICE Se solicita: Ingresar los datos validando la fecha de nacimiento y la nota. 149. Nombre de mujer con menos edad. Desarrollar una solución que permita leer los datos de ‘n’ empleados. Unión y ProFuturo). nombre. AFP (Integra. Crear un menú de opciones para acceder al programa. Los datos de los empleados son. Pag. sexo (M/F). Cálculos: Hallar la edad promedio. Se solicita: Ingresar los datos validando que en el sexo solo se ingrese ‘M’ o ‘F’. y la edad sea un número positivo. edad y nombre. Desarrollar una solución que permita leer los datos de ‘n’ alumnos. Nombre de hombre con menos edad. 601 . Nombre de la persona con mayor edad. Mostrar lo siguiente por cada alumno: Si es mayor o menor de edad.APÉNDICE 150. Cantidad de vocales del nombre. Los datos de los alumnos son. Pag. Crear un menú de opciones para acceder al programa. 602 .APÉNDICE Pag. out.APÉNDICE Clase Lectura package biblioteca. /* * Clase que permite capturar literales desde el teclado.out.\n Ingrese de nuevo: ").floatValue().*. import java. */ public static char leerChar() { char c = ' '.print("ERROR. */ public static double leerDouble() { try { return Double. 603 . if (c1. return leerDouble(). return leerFloat()...length == 1) c = c1[0].\n Ingrese de nuevo: "). */ public static float leerFloat() { try { return Float. } catch (NumberFormatException e) { System. char[] c1 = leerString()..io. return c.valueOf(leerString()).doubleValue().valueOf(leerString()). } catch (NumberFormatException e) { System.print("ERROR. * */ public class Lectura { /** * Retorna el char capturado desde el teclado.. } } Pag. } } /** * Retorna un literal float capturado desde el teclado.toCharArray(). } /** * Retorna un literal double capturado desde el teclado. readLine(). } catch (NumberFormatException e) { System.longValue().. return leerShort(). */ public static long leerLong() { try { return Long.APÉNDICE /** * Retorna un literal int capturado desde el teclado.print("ERROR.print("ERROR.in)).. } } /** * Retorna una cadena capturada desde el teclado.out.print("ERROR. 604 .valueOf(leerString()).out.\n Ingrese de nuevo: "). } return cadena.. */ public static short leerShort() { try { return Short.out. return leerInt().out. } catch (IOException e) { System.\n Ingrese de nuevo: ")..valueOf(leerString()). } catch (NumberFormatException e) { System..\n Ingrese de nuevo: "). try { cadena = in. */ public static String leerString() { BufferedReader in = new BufferedReader(new InputStreamReader(System. } } /** * Retorna un literal short capturado desde el teclado..shortValue(). */ public static int leerInt() { try { return Integer.parseInt(leerString()). } } /** * Retorna un literal long capturado desde el teclado. } } Pag. return leerLong(). } catch (NumberFormatException e) { System.println(e). String cadena = "". 78. como son: enteros.text. Con la clase DecimalFormat se específica un formato de número con patrón.text. el número 123456. incluye soporte para dígitos Occidentales. También soporta gran variedad de formatos numéricos.lang. DecimalFormat df . Antes de mostrar o imprimir un número el programa debe convertirlo a un String que esté en un formato sensible a la Localidad. formato de moneda.text.78.456. Se puede utilizar la clase DecimalFormat para formatear números decimales en cadenas específicas de la Localidad. La clase DecimalFormatSymbols permite modificar los símbolos de formato como separadores decimales o el signo negativo entre otros. etc. decimales. Pag. métodos: Par poner en práctica esto podemos recurrir a 2 NumberFormat formato . Los programas almacenan y operan con números de una forma independiente de la Localidad. y en Alemania debería aparecer como 123. 605 .DecimalFormat DecimalFormat es una clase concreta de NumberFormat que da formato a números decimales. Por ejemplo.APÉNDICE Clase DecimalFormat java. en Francia.Object java. Arábigos e Índicos.Format java. Tiene una gran variedad de opciones para dar formatos a números en cualquier sistema. notación científica.NumberFormat java.78 debería ser formateado como 123 456. ###E0" muestra 1234 como "1. E . y el separador decimal.getCurrencyInstance(currentLocale). Si queremos dar formato a monedas: formato = NumberFormat. . los sufijos y prefijos. separadores (millares).234E3" Para separar formatos positivos y negativos Multiplica por 100 y lo muestra como porcentaje Multiplica por 1000 y muestra como millares ¤ (\u00A4) Utilizado para mostrar símbolos monetarios ' Usado para mostrar caracteres especiales Ejemplo: Pag. 606 . Esta clase permite controlar los ceros iniciales y finales.getNumberInstance(currentLocale). el cero se muestra como ausente Separador decimal Signo menos Separador de agrupación Para notación científica "0.APÉNDICE Si queremos dar formato a números: formato = NumberFormat. % \u2030 Digito Digito. se puede utilizar DecimalFormatSymbols en conjunción con la clase DecimalFormat Símbolos usados para formato Símbolo Significado 0 # . Luego aplicamos las características locales almacenadas en formato a df: DecimalFormat df = (DecimalFormat)nf. Si se quiere cambiar un símbolo del formateo como el separador decimal. 00"). System.format(n).format(n).format(n). System. f = new DecimalFormat("#.String[] args) { double n.'###.println(s). 607 . n = Lectura. s = f. System.##0. f = new DecimalFormat("###.APÉNDICE En el ejemplo siguiente usaremos distintos cadenas de texto para dar formato a un número ingresado por teclado.format(n).0000").out.println(s).00").format(n).out. s = f.format(n).out. System. System. DecimalFormat f.out. f = new DecimalFormat("###. f = new DecimalFormat("'S/.00%").out.##0.leerDouble().###. 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. s = f. String s.##0. f = new DecimalFormat("###.print("Ingresa número a dar formato : ").format(n). f = new DecimalFormat("'U$' ###.lang.println(s).println(s).println(s).####E0"). System.###").out.println(s). 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. } Pag. s = f. System.##0.out. s = f. s = f.00 Soles").###. s = f. f = new DecimalFormat("###. public static void main(java.out.println(s). print("Ingresa número a dar formato : ").leerDouble(). System. f = new DecimalFormat("###. System. } Pag.format(n). simbolosraros. simbolosraros.setGroupingSize(4).out. f. s = f. simbolosraros. reemplazamos el símbolo que representa números negativos (-) por n public static void main(java.println("Alterando los símbolos : " + s). asi como el símbolo usado para especificar un negativo.String[] args) { double n.setMinusSign('n').##0. //esto lo hacemos utilizando la clase DecimalFormatSymbols DecimalFormatSymbols simbolosraros = new DecimalFormatSymbols().lang.setGroupingSeparator('^'). simbolosraros). 608 . //Ahora modificamos los símbolos usados como separadores decimales //y de millares.out. DecimalFormat f.00". 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.APÉNDICE En el siguiente ejemplo utilizamos la clase DecimalFormatSymbols.setDecimalSeparator('|'). n = Lectura. String s. Calendar Calendar es una clase base abstracta para conversiones entre un objeto Date y una gama de enteros como YEAR(año).getInstance(). mes. DAY(día).Object java. Subclases de la clase calendario interpretan una fecha de acuerdo con las reglas específicas de un calendario determinado. cal.APÉNDICE Clase Calendar java.util. MONTH y DATE del calendario cal // a los valores dados en año. MONTH(mes). mes. 609 .año) . // cambiamos el valor del campo YEAR del calendario cal // al valor guardado en año cal. // cambiamos los campos YEAR. mes.lang. hora.set (cal.set (año. día. Esta plataforma implementa una subclase concreta: GregorianCalendar. cal.set (año. minuto) . mes y día. HOUR(hora). Pag.YEAR. HOUR y MINUTE // del calendario cal a los valores dados en año. MONTH . etc…. Futuras subclases podrían representar los diferentes tipos de calendarios lunares en muchos sitios del mundo. día) . y así sucesivamente. Para inicializar un objeto Calendar con los valores de fecha y horas actuales utilizaremos el método getInstance( ): Calendar cal = Calendar. DATE. Los campos de un objeto calendario pueden ser manipulados usando 3 métodos: set() // cambiamos los campos YEAR. esto es.add(cal. 1) //aumenta el mes actual en 1 roll() // roll (f. 40) // si la hora actual fuera 3:30. la nueva hora sería 3:10 a diferencia del // método add ( ) que nos daría 4:10. la nueva hora sería 3:10 a // diferencia del método add ( ) que nos daría 4:10.HOUR. Esto es equivalente a hacer set (f.MONTH. cal. Sumario de campos static int static int static int static int static int static int static int static int static int AM Constante que representa el campo AM AM_PM Constante que representa el campo AM_PM DATE Constante que representa la fecha del calendario actual (día) DAY_OF_MONTH Constante que representa el campo Día del mes DAY_OF_WEEK Constante que representa el campo Día de la semana DAY_OF_WEEK_IN_MONTH Constante que representa el campo Día del mes DAY_OF_YEAR Constante que representa el campo Día del año ERA Constante que representa el campo AC/DC FIELD_COUNT Indica el número de campos que pueden ser usados por la instrucción get o set HOUR Constante que representa el campo hora Pag. // si aumentamos por ejemplo 40 minutos a la hora 3:30..roll(cal. get(f) + cambio) // agrega cambio al valor del campo campo del calendario cal cal.APÉNDICE add() // agrega cambio al campo f. 610 static int . cambio) agrega cambio al campo f sin variar campos superiores. APÉNDICE static int static int static int HOUR_OF_DAY Constante que representa el campo Hora del día JANUARY , FEBRUARY, MARCH , etc… Constantes que representan a los meses que corresponden del año. MILLISECOND Constante que representa el campo que indica los milisegundos de la hora actual MINUTE Constante que representa el campo que indica los minutos de la hora actual. MONDAY, TUESDAY, WEDNESDAY, etc… Constantes que representan a los días que corresponden de la semana. MONTH Constante que representa el campo que indica el mes actual PM SECOND Constante que representa el campo Indica o establece los segundo de la hora actual UNDECIMBER indica el 13o mes del mes WEEK_OF_MONTH Constante que representa el campo Semana del mes WEEK_OF_YEAR Constante que representa el campo Semana del año YEAR Constante que representa el campo Año static int static int static int static int static int static int static int static int static int 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 boolean add(int Campo, int Cantidad) Date Arithmetic function. after(Object cuando) Compara los tiempos, si la fecha actual de nuestro calendario es superior a cuando, retorna verdadero before(Object cuando) Compara los tiempos,, si la fecha actual de nuestro calendario es inferior a cuando, retorna verdadero clear() limpia los valores de todos los campos del calendario clear(int campo) Limpia el valor del campo indicado equals(Object objeto) Compara este calendario con el objeto dado, y si son iguales retorna verdadero. get(int campo) Obtiene el valor almacenado en el campo dado. 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 getActualMinimum(int campo) Retorna el valor mínimo que puede obtener este campo con la fecha del calendario actual. getFirstDayOfWeek() Obtiene el primer día de la semana. Por ejemplo SUNDAY (0) getInstance() Obtiene un calendario utilizando la zona actual y las reglas dadas getInstance(TimeZone zona) Obtiene un calendario utilizando zona y las reglas dadas getTime() Obtiene la hora actual del calendario. getTimeInMillis() Obtiene la hora actual del calendario en milisegundos getTimeZone() Obtiene la zona horaria. isSet(int campo) Pag. 612 boolean void void boolean int int int int static Calendar static Calendar Date long TimeZone boolean APÉNDICE Determina si el campo dado tiene un valor almacenado. abstract void void void roll(int field, boolean up) Time Field Rolling function. roll(int field, int amount) set(int field, int value) setFirstDayOfWeek(int value) Establece cual es primer día de la semana para el calendario actual. Ej MONDAY setTime(Date fecha) Establece la hora del calendario actual a fecha setTimeInMillis(long milisegundos) Establece la hora del calendario actual utilizando los milisegundos dados setTimeZone(TimeZone value) Sets the time zone with the given time zone value. toString() Retorna una representación de cadena del calendario actual void void void String 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 G Era y Año M Mes del año w Semana del año W Semana del mes D Día del año d Día del mes F Día de la semana en el mes E Día de la semana a AM/PM H Hora del día (0-23) k Hora del día (1-24) K Hora en AM/PM (0-11) h Hora en AM/PM (1-12) m Minuto de la hora s Segundo del minuto S Milisegundo z Zona horaria Z Zona horaria Ejemplos AD 1996; 96 Julio; Jul; 07 27 2 189 10 2 Jueves; Jue PM 0 24 0 12 30 55 978 GMT -5:00 -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 Pag. 623 . Pag. 624 . Jefferson López Goycochea.USMP. Diagrama de flujo y programas 2da Edición .Aspectos básicos. 1999. Metodología de la Programación.BIBLIOGRAFÍA Introducción a las Tecnologías de Información.2003. Deitel y Deitel. 1ra Edición . Método para la Solución de Problemas Utilizando la Programación Orientada A Objetos . FIA . Java. Patrick Naughton / Herbert Schildt. 1ra Edición . 1998. FIA . Manual de referencia. Pag. Algoritmos. 625 . Osvaldo Cairó Battistutti. UML Gota a Gota.USMP.2004. Martín Fowler / Kendall Scott.2003. Juan José Flores Cueto . Como Programar en Java. 626 .Pag. sugerencia o recomendación relacionada al contenido del presente texto podrá realizarla.edu. Pag.NOTAS FINALES Cualquier observación. agradezco cualquier contribución que permita mejorar el material y contenido del presente libro. 627 .pe De antemano. enviándome un correo electrónico a la siguiente dirección: jflores@usmp. 628 .Pag.
Copyright © 2024 DOKUMEN.SITE Inc.