Page 1

METODOLOGรA DE LA

Pr Orientada a Objetos LEobardo LรณpEz Romรกn

S

III I

t

"

CONTIENE

CD-ROM

con ejercicios y programas en Java

Alfaomega


Prefacio Digitally signed by: Jose R.

Jose R. Sanchez DN: CN = Jose Sanche R.MXSanchez C = Date: 2016.12.12 z 12:19:48 -07'00'

En la actualidad muchos estudiantes y profe-sionales dela programación de computadoras están aprendiendo Java, que es un lenguaje orientado a objetos; sin embargo, machos de ellos, no están aprendiendo a programar orientado a objetos, porque se les está e oseñando prácticamente en forma directa ron el lenguaje Java, y no sc les está enseñando a "pensar"; es decir, no están desarrollando la lógica de la programación orientada a objetos. Mi idea es que lo fundamental al aprender a programar computadoras es desarrollar la lógica necesaria para solucionar problemas en forma algorítmica, independientemente de algún lenguaje de programación; esto es, aprender a diseñar algoritmos usando un pseudolenguaje; y no hacerlo directamente con un lenguaje. Metodología de la programación orientada a objetos es un libro que viene a coadyuvar en la solución de una necesidad largamente experimentada por la comunidad académica de la programación de computadoras; contar ron una metodología que permita conducir le enseñanza-aprendizaje de la programación, mediante el uso de un pseudolenguaje de diseño de programas o algoritmos orientados a objetos, y dirigido a personas que están Iniciando sus estudios de programación de computadoras. En este libro se prescrita una metodología de le programación de computadoras que contiene en forma natural los conceptos, estructuras y filosofía que se han generado hasta estos tiempos en que la programación orientada a objetos y et lenguaje Java marran la pauta de la programación de computadoras. Esta metodología es el resultado de la integración y adaptación de varias técnicas, romo son; los conceptos y estructuras de la programación orientada a objetos: objetos, clases, encap.sulación, herencia, polimorfismo; el diagrama de clases de UML (Unified Modeling Language): la arquitectura modelo-vista-controlador; algunos conceptos introducidos por el lenguaje Java; y los conceptos y bases lógicas de la programación estrutiurada en pseudookligo. Dicha metodología permite diseñar programas o algoritmos orientados a objetas, bien estructurados, bien documentados, eficaces, eficientes y fáciles de darles mantenimiento.


a Metodologia de le Programabon alentada e Objetas

El método ha sido plasmado de manera tal, que conduce el proceso enseñanza-aprendizaje de la programación de computadoras en forma didáctica, simple, completa, consistente y práctica con una gran cantidad y variedad de ejercicios cuidadosamente seleccionados y probados en clase por el autor, y que va desde un nivel de principiante, pasando por intermedio y establece las bases para el nivel avanzado. Lo relevante de este método es que enseña a programar computadoras utilizando un pseudolenguaje. es decir, sin emplear la computadora directamente. Esto permite desarrollar las capacidades mentales que una persona debe tener para programar computadoras y sienta las bases de disciplina y buena estructura. Este enfoque se le dificulta a mucha gente, sin embargo, hay que enfrentarlo, porque la programación es una actividad intelectual que requiere mucha creatividad, capacidad de abstracción, de análisis y de síntesis, y estas habilidades no se pueden desarrollar operando un lenguaje en la computadora, sino ejercitando la mente en forma apropiada.

Problemática de la enseñanza de la programación orientada a objetos En la actualidad, algunos maestros de programación pensamos que para aprender a programar computadoras, el estudiante debe seguir un proceso que comienza con cl estudio de la lógica básica de la programación usando un pseudolenguaje como pseudocódigo, enseguida debe aprender a implementar esa lógica en lenguaje C, luego debe aprender a diseñar programas o algoritmos orientados a objetos. para después aprender a implementar esa lógica orientada a objetos en lenguaje Java. Sin embargo, hace unos cuantos años, en ese proceso involucrábamos al lenguaje Pascal. Con el paso del tiempo, seguramente involucraremos a otros lenguajes. El hecho es que la aparición de nuevos lenguajes que se convierten en moda, meten en grandes problemas a la comunidad académica de la programación de computadoras. Concretamente, en los Unirnos años se ha insistido y ejercido una gran presión para que .lava sea el primer y único lenguaje que se enseñe; además, que se use desde la fase introductoria a la programación. eliminando un curso previo de lógica; también se dice que al estudiar el lenguaje 'lava va implícita la lógica; que la programación es mucho más fácil, rápida, agradable y avanzada en Java que lo que anteriormente era la programación, etcétera. Algunas personas, incluso autores de libros y articules, dicen que cualquiera que no sepa nada de programación. puede entender fácilmente los conceptos de la programación orientada a objetos; y estoy de acuerdo que en un nivel abstracto cualquier persona puede comprenderlos. Pero en el momento en que se debe implementar los objetos en instrucciones en un lenguaje de programación. es donde se dan cuenta de que 'algo" falta. Porque un programa orientado a objetos se compone por un conjunto de objetos y métodos que implementan las funciones de los objetas; ya esos métodos hay que enviarles datos a través de parámetros, para que hagan cálculos. De manera que ese "algo" que falta es la lógica básica de la programación, esto es: tipos de datos; entero, real, cadena, carácter, arreglos, registros y archivos; estructuras de control; seeuenciación, if-then, ifthen-eLse, switch, do-while, for, while; métodos (módulos y funciones definidas por el


Prefau:o 9 usuario); parámetros por valor y por referencia. Es por ello que digo que esas estructuras son la base de la programación orientada a objetos; y que una persona que no domine esos conceptos, jamás podrá comprender cómo implementar los métodos de objetos que procesan datos. Si revisamos la historia de la enseñanza-aprendizaje de la programación de computadoras. un fenómeno similar se dio con el lenguaje BASIC; que vino a ganarle lugar a la programación con diagramas de flujo, lenguaje COBOL y FORTRAN, supuestamente haciendo más fácil aprender a programar usando directamente el lenguaje. Esto causó mucha confusión v problemas en la enseñanza-aprendizaje y práctica profesional de la programación: pero después vino el lenguaje Pascal y la programación estructurada y compusieron la situación. Transcurrieron años para que en algunas instituciones de educación (no todas), se convencieran de que lo adecuado es enseñar primero la lógica básica de la programación usando un pseudolenguaje como pseudocódigo, y después enseñar cómo implementar esa lógica en un lenguaje de programación como lenguaje C a otro. El problema actual es que muchas instituciones de educación han sucumbido ante la presión y están enseñando el lenguaje Java desde el primer semestre. Esto ha causado mucha confusión, porque la programación orientada a objetos no está sustentada metodológicamente para niveles básicos de aprendizaje; y están cayendo en la situación de 'enseñar a usar" el lenguaje Java, que es un lenguaje orientado a objetos; pero. no están enseñando a programar orientado a objetos usando el lenguaje Java, que seria lo correcto.

Propuesta sugerida en este libro Este autor está de acuerdo en que Java o cualquier otro lenguaje orientado a objetos que [o sustituya, sea utilizado como primer lenguaje en la enseñanza-aprendizaje de la programación; pero antes debe impartirse un curso de lógica de la programación orientada a objetos, donde los estudiantes aprendan los fundamentos de la programación orientada a objetos usando un psendolenguaje almo pseudocódigo. aplicándolo en el diseño de programas o algoritmos orientados a objetos; es decir, en forma independiente de un lenguaje de programación. Esto es lo que le presento en este libro. Y en una siguiente instancia, el estudiante deberá aprender a implementar esos fundamentos y algoritmos en lenguaje .lava (u otro similar); esto lo presentaré próximamente en otro libro. Esto es fiara no 'casar' la formación lógica de los estudiantes con el lenguaje que esté de moda, porque al cambiar dicho lenguaje, la formación que se les dio con el lenguaje anterior se convierte en 'deformación". ta programación es lógica v debemos desarrollarla en los estudiantes, independientemente de algún lenguaje de programación; porque los lenguajes van y vienen, y la lógica ahí debe estar, para ser implementada en el lenguaje ea turno,

Le metodología propuesta La metodología que se presenta en este libro se divide en dos partes; en la primera, que abarca del capitulo uno al nueve, se estudia la técnica pseudocódigo y su uso en el


10 Metndologie de le Programación Chantada a 120rynns diseño de algoritmos pequeños que tienen una sola tarea o función, por tanto, se establece el uso de una clase y dentro de la clase el método principal, donde se plasma la lógica que soluciona el problema. En esta primera parte se da énfasis al desarrollo de la lógica básica de la programación usando un pseudolenguaje. Se estudian los tipos de datos, identificadores, operaciones de entrada, cálculo y salida; usando las estructuras de control; la secuenciación; la selección simple (IF THEN), doble (IF THEN ELSE) y múltiple (SWITCH); la repetición DO...WH11,E, la repetición FOR y la repetición WHILE; los arreglos unidimensionales, bidimen.sionales, tridimensionales y tetradimensionale.s; y par último, en esta primera parte, se estudia cómo usar más de un método en la clase, en problemas que involucran a más de una tarea o función. métodos que no regresan valor (equivalente a módulos en la programación estructurada), métodos que regresan valor (equivalentes a funciones definidas por el usuario en la programación estructurada), parámetros por valor y por referencia. Este autor tiene la convicción de que el estudiante debe desarrollar las bases lógicas de la programación: es por ello que esta primera parte es la que se estudia en un primer curso de lógica de programación con técnicas estructuradas, pero enfocando la estructura del algoritmo en forma apropiada a la programación orientada a objetos; usando una clase y dentro de la clase el método principal, dejando bien cimentadas las bases lógicas de la programación de computadoras. En la segunda parte, que abarca del capitulo diez al dieciséis, se estudian de lleno los conceptos de la programación orientada a objetos, integrándolos con el concepto de diagrama de clases de UMI. (tinified Modeling Language), con la arquitectura modelovista-controlador, con las estructuras estudiadas en los primeros nueve capítulos y la incorporación de los conceptos de la programación orientada a objetos en la técnica pseudocódigo. logrando una metodología de la programación que permite diseñar algoritmos orientados a objetos.

Organización del libro El macona I de la presente obra está dividido en dieciséis capítulos y cuatro apéndices. En el capando uno se presenta una introducción a la programación. En el capitulo dos se describen las elementos para solucionar problemas en pseud000digo, omito sial tipos de datos, identificadores. variables, operaciones aritméticas, lectura y escritura de datos. En el capítulo tres se estudia la estructura de control secuenciación, su definición, estructura de un algoritmo y su aplicación en algunos ejemplos. El capítulo cuatro trata la selección simple (1F THEN), doble 1W THEN ELSE) y múltiple (SWITCH), su definición, formato en pseudocódigo y utilización con ejercicios resueltos. En el capitulo cinco se explica la repetición DO...WHILE, su definición, formato y utilización en ejercicios resueltos. En el capitulo seis se presenta la repetición FOR, su definición. formato y uso en ejercicios resueltos. En el capitulo siete se describe la repetición WH I LE. su definición, formato y aplicación en ejercicios resueltos. En el capitulo ocho se presentan los arreglos unidimensionales, bid imensionales. tridimensionales v tetradimensionales; su definición, formato, manipulación y uso en ejercicios resueltos.


Prefnco 11

En el capitulo nueve se tratan los métodos; métodos que no regresan valor, equivalente a módulos en la programación estructurada. Se aprenderá el manejo de variables globales. locales y el uso de parámetros por valor y por referencia. Asimismo, se estudian los métodos que regresan valor, equivalente a funciones definidas por el usuario en la programación estructurada. También se estudian algunas funciones estándar como son; funciones para la manipulación de cadenas de caracteres y algunas funciones especiales. En el capitulo diez se estudian la; conceptos de objetos, clases, métodos y encapsulación, y se explica la forma de involucrarlos para diseñar el diagrama de clases. Asimismo se involucra el uso de la arquitectura modelo-vista-controlador. En el capitula once se estudia cómo diseñar la lógica de cada una de las clases usando pseudocódigo, incorporando en esta técnica los conceptos de clases, objetos encapsulación. Se presenta el diseño de algoritmos orientados a objetos aplicando la estructura de secuenciación con ejemplos que se estudiaron en el capitulo tres. En el capítulo doce se presenta el diseño de algoritmos orientados a objetos aplicando las estructuras de selección IF THEN ELSE, IF THEN y SWITCH, con ejemplos que se estudiaron en el capítulo cuatro. En el capítulo trece se presenta el diseño de algoritmos orientados a objetos aplicando las estructuras de repetición DO...WH1LE, FOR y WHILE, con ejemplos que se estudiaron en los capítulos cinco, seis y siete. En el capitulo catorce se presenta el diseño de algoritmos orientados a objetos usando arreglos unidimensionales, bidimensionales. , tridimensionales y tetradimensionales; con ejemplos que se estudiaron en el capítulo ocho. En el capitulo quince se estudia el concepto de herencia, se explica cómo diseñar el diagrama de clases y el diseño de las clases usando pseudocódigo; involucrando la herencia. En el capítulo dieciséis se introduce el concepto de polimorfismo y se estudia cómo diseñar algoritmos involucrándolo. En el apéndice A se presentan algunas conclusiones y recomendaciones; aunque es importante que todos los lectores lo revisen, es particularmente relevante para aquellos lectores que piensen que a esta metodología le falta algo. En el apéndice B se describe la evolución de los paradigmas de programación. En el apéndice C se explica cómo evolucionar de la programación estructurada al uso de la programación orientada a objetos. En el apéndice D se presentan algunos algoritmos sin usar etiquetas. Contenido del CD anexo El libro incluye on CD que, al ejecutarse, ofrece al lector las opciones para acceder a los ejercidos resueltos en formato PDF o a los programas en Java. El CD incluye ejercidos resueltos para los capitulas 3. 4. 5, 6.7. 8,9, u, 12, 13,14, 15 y t6.


12 Metodologis dala nnspesmación Dnenearle a Cajetas

El CU también contiene programas en lenguaje Java; esto es, que en los capitulos antes mencionados se presentan algoritmos que solucionan los problemas planteados usando pseudocódiga; y aunque el propósito de este libro no es estudiar un lenguaje de programación; en el CID, se incluyen los programas en lenguaje „lava de todos los algoritmos; de 'Ea forma romo se indica en el primer algoritmo del capitulo 3.

Cómo usar la metadologia Este trabajo requiere que el lector tenga coneci ni lentos previos sobre conceptos generales relacionados con las computadoras; en caso de no ser así, se renomienda la lectura de sigilo libro que sirva como introducción a las computadoras, a las tecnologías de la información o a la informática. El libro puede ser utilizado como texto o consulta en malcrías de fundamentos de programación, metodología de la programación. programación de computadoras v similares, que se cursan en los primeros des o tres semestres de carreras como Informática, Computación, Sistemas Computacionales Sistemas de I nformación.lngenieria industrial y de Sistemas, Ingeniería Electrónica, Ingeniería Eléctrica, entre otras, y en preparatorias, bachilleratos y carreras de nie.el técnico. Para estudiantes que empiezan la programación desde cero se deben estudiar todos los capitulas en el orden en que están; los capitulos del a al 9 en alrededor de 45 horas, y del o al 16 en aproximadamente 35 horas. Para estudiantes que ya llevaron unen rse de metodologia de la programación estructurada y/0 un lenguaje corno Pascal o C. deben hacer un repaso rápido de los capítulos 2 a] 9 y estudiar el apéndice C; y luego estudiar detenidamente los capítulos m al ió. Advertencia didáctica Se ha tornado el ejemplo de calcular sueldoís) de empleadotsl 'pago de sueldo o nominacomo un problema pivote para facilitar la explicación de las estructuras que integran la metadologia. Esto quiere decir que al estudiar cada elemento o estructura, el primer problema que se plantea es el de pago de sueldo, primero de una manera muy simple, y luego con una variante apropiada para la aplicación de lo que se está explicando en cada momento. Esto es con fines didácticos, va que es una situación fácilmente entendible que permite al estudiante (lector) familiari zarse ron ella porque se trata desde el inicio y durante todo el libro; y así podemos dedicar todo nuestro esfuerzo mental a] aspecto lógico de la metodología. ni decir, que los problemas no deben ser muy complicados. para dirigir todo nuestro esfuerzo mental a comprender la lógica de la metodología y nato ente vide r problemas in necesariamente coco plejos. Ea] consecuencia, ea probable que el lector, perciba que este es un libro con una orientación administrativa; sin embargo, después de explicarle cada estructura con el ejemplo antes referido. en los ejercicios resueltos se prescrita la aplicación de la estructura con otros tipos de. problemas, dándole a la metodología un enfoque de aplicación general, e; decir, tanto para el arra admintstrativa, romo para la ingenicria.


Prefacio 13

Resumiendo Aprender a programar no es fácil ni rápido; es un proceso que debe iniciar con el desarrollo de la lógica usando un pseudolenguaje de diseño de programas o algoritmos; si el estudiante ya domina la lógica hasta lo que es la programación estructurada, debe aprender la lógica de la programación orientada a objetos. Y después, en una siguiente instancia, debe aprender cómo implementar la lógica usando un lenguaje de programación como Java u otro similar. Con el estudio de la metodnlogia y fundamentos de programación que le presento en este libro, el estudiante aprenderá la lógica de la programación orientada a objetos sin estar "casado" con ningún lenguaje; y de aqui en adelante podrá aprender y comprender cualquier lenguaje orientado a objetos como Jara, UML, etcétera. Sin ser esto cierto; se podria decir que esta metodología es algo asi como un trml. para principiantes. Asimismo, creo que en esta obra es donde los conceptos de ]a programación orientada a objetos están más accesibles, claros y aterrizados aplicándolos en problemas cotidianos de proceso de datos.

Agradecimientos A Dios, que es mí guía e inspiración. le doy las gracias por su bondad y generosidad al darme salud, fuerza de voluntad v capacidad para desarrollar mi obra editorial. Mi gratitud para esa gran y noble institución que es la Universidad de Sonora, que en su seno he encontrado la oportunidad de desarrollar mi obra editorial; la cual, ya es parte de su esencia misma. 'También quiero agradecer a mis compañeros maestros y alumnos del Departamento de Ingeniería Industrial y de Sistemas de la Universidad de Sonora y del Instituto Tecnológico de Hermosillo, quienes de una u otra forma han contribuido para que mi obra editorial sea una realidad. Asimismo agradezco a mi maestro y amigo Manuel Sáiz sus consejos y su guía; y al maestro Jesús Manuel Solis Santoscoy sus comentarios y sugerencias. Un agradecimiento muy especial para mi esposa Maricela Villa Amista. y para mis hijos Leobardo y Eleazar, a quienes les he quitado mucho tiempo y paciencia para desarrollar esta obra. Y especialmente a usted, amigo lector, que me ha dado la oportunidad de serle útil a través de mi obra editorial; en primera instancia a través de mis libros anteriores; ahora por medio de este libro y, en un futuro, espero poner a su disposición un libro que implemente esta metodología en lenguaje Java u otro similar.


14 Metraiologia da la Pragrafflableal °mentada a Dtrffitos Indudablemente habrán quedado errores u omisiones, las cuales espero subsanar en una futura edición, así que, amable lector. si tiene alguna sugerencia para el mejoramiento de esta obra, mucho le agradeceré me la haga llegar. Gracias. "Escribir un libro es el más alto honor de un maestro"

Leobardo López Román Universidad de Sonora Hermosillo, Sonora, México llopez@industrialuson.mx


Contenido

Prefacio

9

1. IntrIalueción a la programación 1.1 Cr'>aceptos generale.s 4.2 13 proceso de programación 1.3 13 algoritmo Ejercicios propuesta,:

19 20 27 29 33

2. Elementos para solucionar problemas en pseudocorligo 2.1 Estructural de datos 2.2 Operaciones primitivas elementales 2.3 P-structuras de entra]

35 36 39 47

3. La secuenciación 3.s Nuestro primer problema 3.2 Estructura v diseño de un algoritmo 3.3 Nuestro primer algoritmo 3..4 Funciones matemáticas 3.5 Ejercicios resueltos Ejercicios propuestos

. 49 50 50 53 55 60 63

4. La selección 4.1 La selección dable (IF-THEN-ELSE) 4.2 Sangrado (indentación) y etiquetas 4.3 Expresiones lógicas 4.4 IF's anidados 4.5 La selección simple (17-THEN) 4.6 La selección múltiple (SWITCH) 4.7 Ejercicios resueltos Ejercicios propuestos

67 88 71 72 77 79 8o 85 93

5. La repetición DO...WHILE 5.1 Contadores y acumuladores

97 101


18 Metoecilogia es 5aProgra<riaeran Orientada a altas

5.2 Ejercicios resueltos Ejercicios pospuestos

105 110

6. La repetición FOR 6.1 FOR anidados 6.2 Ejercicios resueltos 6.3 Simulación del POI( con 110...WHILE Ejercicios propuestos

135

7. 1.51 repetición WH1LE 7.1 Simulación del DO—WHILE con WHILE 7.2 Simulación del FOR con WHILE 7.3 Ejercicios resueltos Ejercicios propuestas

145 147 549 152 158

8. Arreglos

563 164 iby

8.1 Arreglos unidirnensionales 83.2 Ejercicios resueltos para unidimensionales 8.2 Arreglos bidimensionales 8.2.1 Ejercicios rebuenos pura bidimensionoles 83 Arreglos iridimensionale: 8.3.1 Ejercicios resuellos para tridimensionales 84 Arreglos tetradimensionales 8.4.1 Ejercicios t'estrenos para tetrudimensionu les igereicios propuestos 9. Métodos

9.1 Métodos que no regresan valor 9-2 Formato general de una clase con métodos 9.3 Va elahle.s globales, locales y parámetros 9.33 Variables globales 9,3.2 Variables tonales 9.3.3 Parámetros 93.3.5 Parámetro por referencia 9.3.3,2 Parámetro por valor 9.4 Funciones estándar 9.4.1 Funciones cadena de caracteres 9.4.2 Validación de la entrado de datos 9.4.3 Punciones especiales 9.5 Métodos que regresan valor 9.6 Ejercicios resueltos Ejercicios propuestos to.Programación orientada a objetos usando el diagrama de clases 10.1 Objetos 10.2 Ciases y su relación ron los objetos

10.2.1 Determinar las clases

121 125 126 133

173

176 182 786

186 192 192

203

204 210 212 .212

213 214

214 256 217 228 22.3 225

227 230 236 241 242

245 245


Cvnbenldo 17 10.2.2 Representación de la elase y sus instancias

10.3 Métodos y encapsulación 10.33 Métodos 10.3.2 Encapsulación

10.4 Diseño del diagrama de clases 10.4.1 Modfficadores de acceso (visibilidad) 10.5 Generar instancias de una clase 10.6 Arquitectura modelo-vista-controlador la. Programación orientada a objetos aplicando la estructura de secuenciación 11.1 Nuestro primer problema 11.2 Diseño de algoritmos 00 usando la scene' iclución en psetiducódigo 11.3 Constructores y destructores 11.4 Ejercicios resueltos Ejercicios propuestos

12.Progra [nación orientada a objetos aplicando las estructuras de selección 12.1 Diseño de algoritmos 00 usando la selección doble (!P'I'REN EME) 12.2 Diseño de algoritmos OO usando la selección simple HE DIEM 12.3 Diseño de algoritmos 00 usando la selección múltiple (SWITCH) 12.4 Ejercicios resueltos Ejercicios propuestos

[3-Programación orientada a objetos aplicando las ~ruetu ras de repetición 13.1 Diseño de algoritmos 00 usando la repetición DO...WHILE 13.1.1 CON tadores y atlita ni/adore-S 13. r_z Ejercidas resueltos pura 130...WHILE Ejercicios propuestos para DO...WHILE 13.2 Diseño de algoritmos 00 usando la repetición FOR 13.2.1 Ejercicios resueltos poro FUR Ejercicios propuestos pa ra FOR

13.3 Diseño de algoritmos 00 usando la repetición WHILIi t3,73 Ejercicio.; resiectros paco wrw.F: Ejercicios pmpuesto 5 poraVVIIILE

14. Programación orientada a objetos aplicando arreglos 14.1 Diseño de algoritmos 00 usando arreglos unidiniensionales 14.2 Diseño de algoritmos 00 usando arreglos bid imensionales 14.3 Diseño de algoritmos IX) usando arreglos tridimensionales 14.4 Diseño de algoritmos GO usando arreglos let radi me nsionales Ejercicios propuestos

13. Programación orientada a objetos usando herencia 15.1 Herencia

246

247 247 247

249 249 252 254

137 258 1611 270 271 281

283 284 288 1190

292 301

303 304 307 310 322

322 325

329 329 333 342

343 344 353 364 369 375 377 378


le 14euíaologia de la Prog, Eln e ofrn, Chantada a aint. 15.2 Diseño del diagrama de clases con herencia 15.2.1 Sope/N-doses y subclases 15.3 Diseño de algoritmos 00 usando herencia 15.4 Ejercicios resueltos Ejercicios propuestos

16. Programación orientada a objetos usando polimorfismo

16.1 Polimorfismo 16.2 Diseño del diagrama de clases con polimorfismo 16.2.1 Clases abstractas 16.3 Diseño de algoritmos 00 usando polimorfismo 16.4 Ejercicios resueltos Ejercicios propuestos Apéndices A. Conclusiones y recomendaciones B. Evolución de los paradigmas de programación C. Cómo evolucionar de la programación estructurada a la programación orientada a objetos D. Algoritmos sin usar etiquetas

380 382 384 392 402 407

408 408 410 410

417 427 433 437 439 443

Bibliografía

449

Indice

451


Introducción a la programación Contenido 1.1 Conceptos generales 1.2 El proceso de programación 13 El algoritmo

Objetivo del capitula En este primer capítulo el lector obtendrá un repaso de los conceptos generales, la t ornputadora y Mis componentes, qué es el programa, las características de los lenguajes de programación las características de un buen programa, los pasos que i integran el proceso de programación, qué es y cuales savias características de un algoritmo, y la aplicación de estos conceptos en situaciones de nuestra vida cotidiana •


20 Melexioacjie de le Provanaacain Clrieriteida a aljama

Antes de iniciar el tema objeto de esta obra, es conveniente, sobre todo para aquellos que comienzan su instrucción informática, hacer un breve repaso de conceptos fundamentales que se han de tomar en cuenta cuando se desarrollan programas que se utilizarán en computadoras: ola computadora por supuesto! Los estudiantes y programadores de nivel medio o avanzado, tendrán la oportunidad de recordar "viejos" esquemas, que (luirás pudieran llevarlos a una reflexión acerca de si hay que seguir por el camino andado o deberán corregir el rumbo; para esto, se incluye aqui la metodología que se requiere para diseñar algoritmos de manera sencilla y funcional. 1.1 Conceptos generales La computadora La computadora es una herramienta que se utiliza para representar cualquier situación de la realidad en forma de datos, los cuales se procesan después para generar información, esquemáticamente: Situación real : Control de inventarias Control de producción Control de compras

DATOS

PROCESO

*INFORMACIÓN

Control de ventas Pago de sueldos (nómina) Esto quiere decir que toda situación que pueda ser abstraída y representada en forma de datos, puede ser manejada madiante la computadora: porque el esquema del proceso de datos es E-P-5 (Entrada-Proceso-Salida), es decir, datos entran como materia Prima, se procesan para transformarlos en la información que se da como salida. Por ejemplo, en una situación de pago de sueldos (nómina), un trabajador puede ser representado mediante las datos: nombre del empleado. número de horas trabajadas y cuota por hora, El sueldo se obtiene multiplicando número de horas trabajadas por la cuota por hora. Y se da corno salida el nombre y el sueldo. Tanto los datos como el procedimiento necesario para generar la Información, se suministran a la computadora en forma de un programa constituido por instrucciones. La computadora interpreta s ejecuta las instrucciones del programa de acuerdo con ciertas reglas de sintaxis que conforman el lenguaje de programas-son_ mediante el cual podernos comunicarle M que debe hacer. Les ~tos básicas que componen una computadora son la unidad central de parmagt a amiba die memoria. la unidad de entrada y la unidad de salida. La ~id morad de proceso es el "cerebro que controla el funcionamiento de ira mammasse s reaulama las ~mes aritméticas y lógicas. Las operaciones del aziosiaroseell toa ~y ~íes. pero ejecutadas a una velocidad muy alta -del orden ik adh~ ~do- permiten la ejecución de tareas simples o complejas.


Irerucluttahl a la programacitr 2t

Manada asir

Figura 1.1 Diagrama que desvibe la organización funcional de una computadora.

La MCMOrkr se utiliza para almacenar los datos., y a éstos se les aplican las operaciones del procesador. Existendostipus de memo ria: la prinripaly la au lidiar. La mernoriaprincipal permite al procesador extraer y almacenar datos a una velocidad comparable a la propia. Cada operación propicia por lo menos un acceso a la memoria. Para que el procesador pueda avanzar de una operación a la siguiente sin retraso, el programa de instrucciones se almacena en esta memoria; en otras palabras, la memoria principal guarda tanto las instrucciones como los datos sobre los que actúa el procesador central. La memoria principal está limitada por su alto costo; debido a esto no es posible raanseryar en ella grandes cantidades de datos e instrucciones y, en consecuencia, sólo se usa para guardar lo que el procesador esté utilizando por el momento. Además, tiene la caracteristica de que no permite almacenar datos permanentemente, pues si se apaga la computadora se pierde lo que haya en la memoria. Por tales razones, las computadoras están equipadas ron memorias auxiliares para almacenamiento masivo y permanente de datos, tales romo discos magnéticos fijos. disquetes (discos flexibles) magnéticos removibles, discos compactos, cintas magnéticas, entre otros. Estos dispositivos tienen más capacidad que la memoria principal, pero son más lentos. Las datos pueden almacenarse en ellos de manera perrnatante; es decir, pueden guardarse para usos posteriores. 1a unidad de entrarla se utiliza para introducir datos del exterior en la memoria de la computadora a través de dispositivos periféricos de entrada corno teclados de terminales, ratón (mouse), discos, módem, lectora de código de barras, etcétera. Esta unidad realiza automáticamente la traducción de símbolos inteligibles para la gente, en símbolos que la máquina pueda manejar.


22

INctodoiogo da la Programación Chantada a Objetos

Figura 1.2 Computadora personal Pentium

La unidad de solido permite transferir datos de la memoria al exterior, a través de dispositivos periféricas de salida como impresoras, pantallas de video, módem, etc. Esta unidad realiza automáticamente la traducción de símbolos que puede manejar la máquina, en símbolos inteligibles para la gente.

Figura 1.3 Pantalla o monitor, dispositivo periférico de salida estándar


Introducción a le proprarnecrán 23

Figura 1.4 Teclado, dispositivo periférko de entrada estándar

Figura 1.5 impresora, dispositivo periférico de salida impresa

Figura 1.6 Mouse, clispositiwo periférico de entrada


24 Mutodoiogo de la Prograrriocion Orientada e Chinos

Figura 1.7 Unidad de DVD's, dispositivo periferico de entrada/Salida.

Figura LB ,Je idades de discos flexibles, dispositivo periférico de eotradaisulida. El programa

Un programa es un conjunto de inst nieciones que guían a la computadora para realizar alguna actividad o resolver algún problema; en el programa se ejecutan diferentes acciones de acuerdo con los dalos (.11.0 se estén procesando. F..1 programa debe incluir instrucciones para las acciones que deban ejecutarse sobre cada uno de los tipos de datos admitidos, además instrucciones que identifiquen los datos erróneos y recuperarse ante la aparición de éstos. Cuando se ejecuta un programa con un tipo de datos específico. es probable que no se ejecuten todas las instrucciones sino sólo las que sean pertinentes a los datos en cuestión. Un programa se compone de cstrucni ras de datos, operaciones primitivas elementales y estructuras de control, corno se muestra a continuación : programa = estructuras de datos + operaciones primitivas elementales + estructuras de control Estructuras de datos. Son las formas de represen tacho interna de La computadora. Los hechos reales, representados en forma de datos, pueden estar organizados de diferentes maneras llamadas estructuras de dalos. Por ejemplo el nombre, las horas trabajadas y el sueldo por hora son los datos mediante los cuales se representa un empleado en una situación de pago de sueldos (nomina).


insruciore.on a ls programación 25

Operaciones prim ideas elementales. Son las acciones básicas que la computadora "sabe" hacer, y que se ejecutan sobre los datos para darles entrada, transformarlos y darles salida convertidos en información. Por ejemplo. el sueldo de un empleada se calcula multiplicando las horas trabajadas por la cuota horaria. Estructuras de con Crol. Son /as formas lógicas de funcionamiento de la computadora mediante las que se dirige el orden en que deben ejecutarse las instrucciones del programa. Les estructuras de control son: la seet.enciaeihn; que es la capacidad de ejecutar instrucciones secuenciales una tras otra; la selecen5n, que es la capacidad de escoger o seleccionar si algo se ejecuta o no, optar par una de dos o más alternativas, y la repetición. que es la capacidad de realizar en más de una ocasión (es decir, varias veces) una acción o conjunto de acciones; par ejemplo, calcular el sueldo de un empleado. pero repitiendo el cálculo n veces para n empleados.

El lenguaje de programación Un lenguaje de programación es el medio a través del cual le colo nicamas a la computadora la secuencia de instrucciones que debe ejecutar para llevar a cabo actividades, tareas o solución de problemas. Todo lenguaje permite A manejo de los tres elementos que componen un programa; a saber: estructuras de datos, operaciones primitivas. elementales v estructuras de control. Recordemos que mediante un programa podemos representar en forma de datos cualquier situación de nuestra realidad, a los datos se les da entrada a la computadora mediante dispositivos de entrada como teclado. lector óptico de caracteres, ratón, etc.; una vez que los datos están en la computadora, se procesan para convertirlos en información, la cual será emitida hacia el exterior de la computadora mediante dispositivos de salida cuneo son la pantalla (crt), impresora, etodeca-

CareCterleticas ele los lenguajes de programación Todo lenguaje está compuesto por un alfabeto. un vocabulario y una gramática. A continuación se describen estos componentes. 1. Alfabeto o conjunto de caracteres Es el conjunto de elementos estructurales del lenguaje: a Caracteres alfabéticos (letras minúsculas y mayúsculas). b. Caracteres numéricos (dígitos del o al 9). c. Caracteres especiales símbolos especiales tales corno (1, [.1. La y muchos otros 1. (1, [.;1, [.$], 2. Vocabulario o léxico Es el conjunto de palabras válidas o reservadas en el lenguaje. Por ejemplo, las palabras switch, float, if, then, else, int, de, for. while, char, pabilo, static, private tienen un sig-


26 Mnorlolowa Os W Programaoon Cr-entarlo a Oblatos

niñeado predeterminado en el lenguaje Java, es decir, son las palabras reservadas del lenguaje Jasa. Así, cada lenguaje tiene sus propias palabras reservadas. 2. Gramática Es el conjunto de lineamientos que se deben seguir para construir frases, oraciones o instrucciones. Mediante la gramáticas sintaxis logramos transmitirle a la computadora lo que deseamos. Por ejemplo, para leer datos debemos seguir cierto lineamiento, también para imprimir, etcétera. La programación Generalmente se consideran sinónimos los conceptos programación y codificación, lo cual constituye un error. Debemos tener presente que la finalidad de un programa es realizar algún proceso sobre ciertos datos para obtener ciertos resultados. La preparación de un programa implica aspectos tales como: ¿para qué sirve el proceso que se desea representar?, ¿qué datos usará, qué resultados producirá y cómo se realizará el proceso sobre los datos para obtener los resultados esperados? Una vez identificado lo anterior se procede a diseñar la manera como la computadora deberá hacerlo, tomando en cuenta su estructura interna y su funcionamiento. Hasta ese momento se tiene representada la solución de una manera convencional (algoritmo). pero enseguida se procede a codificar el programa que solucionará el problema, utilizando un lenguaje de progamación. Características de un buen programa Un programa bien escrito debe tener ciertas características básicas que le permitan operar correctamente; las principales son las siguientes: Operatividad. Lo mínimo que debe hacer un programa es funcionar, esdecir, producir los resultados esperados. independientemente de cualquier otra característica. Legibilidad. Un programa puede hacerse más legible dándole cierto formato al código, utilizando el sangrado (indentación) para reflejar las estructuras de control del programa, e insertando espacios o tabuladores. Es conveniente diseñar reglas propias para darle uniformidad a todos los programas. Transportabilidad. Un programa transportable es el que puede ejecutarse en otro entorno sin hacerle modificaciones importantes. Mientras menos modificaciones se hagan será más transportable, así que es conveniente no utilizar caracteristicas especiales del hardware ni 'facilidades" especiales del software. Claridad. Esta característica se refiere a la facilidad con que el texto del programa comunica las ideas subyacentes. El programa debe indicar claramente lo que el programador desea. Una buena programación es similar a la elaboración de un documento legal; por ejemplo, conviene utilizar nombres adecuados para los identificadores, hacer comentarios correctos, claros y concisos, etcétera.


introducción e el perigremincnin 27

Modularidad. Dividir el programa en un número de métodos (u objetos) pequeños y fáciles de comprender puede ser la contribución más importante a la calidad del mismo. Cada método debe realizar sólo una tarea específica, y no más. Los métodos tienen la virtud de minimizar la cantidad de código que el programador debe comprender a la vez, además de que permiten la reutilización de código.

1.2 El proceso de programación Elaborar un programa de computadora implica llevar a cabo una serie de pasos secuenciales y cronológicos que comienzan con la detección y definición del problema y conducen a la implantación del programa que lo soluciona. A continuación se describen los pasos a seguir; 1. Definición del problema Este proceso inicia cuando surge la necesidad de resolver algún problema mediante la computadora. Para empezar, se debe de identificar el problema y comprender la utilidad de la solución que se alcance. Es menester tener una visión general del problema estableciendo las condiciones iniciales (los puntos de partida) y, además, los limites del problema; es decir. dónde empieza y dónde termina. Por ejemplo, si tenemos que calcular el sueldo de un empleado, la solución que se logre permitirá obtener la cantidad que debe pagársele y servirá precisamente para pagarle. La situación anterior consiste en un pago de sueldos, v parte de que cada empleado tiene algunas atributos como su nombre, el tiempo trabajando y el sueldo que percibe por unidad de tiempo dedicada a su labor.

2. Análisis del problema A continuación es necesario entender en detalle el problema en cuestión, para obtener una radiografía del mismo en términos de los DATOS disponibles como materia prima, y definir el PROCESO necesario para convertir los datos en la INFORMACION requerida. La primero etapa consiste en definir los resultados esperados; es decir, la INFORILACION que deberá producirse como salida. Respecto al problema de pago de salarios tenemos que se requiere la siguiente salida; Nombre del empleado: Sueldo: 99.999.999.99 La segunda etapa consiste en identificar los DATOS que se tienen como materia prima y que constituirán la entrada del programa. En este ejemplo tenemos:

El nombre del empleado El número de horas trabajadas La cuota por hora La tercera etapa tiene como finalidad determinar el PROCESO necesario para convertir los datos de entrada en la información que se tendrá como salida. Volviendo al


28 Metodología de la Programación Orientada a Objetos

ejemplo, puesto que se requieren dos datos de salida, determinemos el proceso de la siguiente manera: a. ¿Cómo se calcula el nombre del empleado? No implica ningún cálculo, pues es un dato que se obtiene como entrada y que no se modifica. b. ¿Cómo se calcula el sueldo? El sueldo es un dato que no existe como entrada, pero que se obtiene o genera: Multiplicando las horas trabajadas por la cuota horaria. En este momento ya se tiene una comprensión clara del problema, y podemos avanzar hacia el siguiente paso. 3. Diseño del programa Durante este paso se procede a diseñar la lógica para la solución al problema, haciendo

dos cosas: a. Elaborar el algoritmo. Se diseña el algoritmo de la solución al problema; es decir, se estructura la secuencia lógica y cronológica de los pasos que la computadora deberá seguir, utilizando alguna técnica convencional como el pseudocódigo, los diagramas de flujo, diagramas de clase, los diagramas Warnier, los diagramas Chapin, etc. Equiparando esta actividad con la construcción de una casa, equivale a diseñar el plano arquitectónico de la misma. b. Prueba de escritorio. Se simula el funcionamiento del algoritmo con datos propios respecto al problema, y se comprueban a mano los resultados a fin de validar la correcta operación del algoritmo. Si quedamos satisfechos con los resultados de la prueba habremos agotado este punto, pero en caso contrario se deberá modificar el algoritmo y posteriormente volverlo a probar hasta que esté correcto. Es posible que se deba retroceder a cualquier paso precedente. En este momento se tiene ya diseñada la solución al problema, y estamos listos para pasar al siguiente punto.

4. Codificación del programa En este paso se procede a codificar el programa en el lenguaje de programación que vayamos a utilizar. Este proceso es sumamente sencillo, dado que ya tenemos diseñado el programa, sólo nos concretamos a convertir las acciones del algoritmo en instrucciones de computadora. El programa codificado debe editarse, compilarse, probarse y depurarse; es decir, se ejecuta para verificar su buen funcionamiento y se hacen las correcciones o los ajustes pertinentes hasta que esté correcto. Si aparecen errores difíciles de corregir en este paso, quiere decir que debemos retroceder al paso 3 o al 2. Para que un programa pueda ser entendido y ejecutado por la computadora, debe estar en lenguaje máquina o código objeta, el programa que nosotros hacemos en papel a lápiz o pluma, debe ser traducido por un compilador, a código asequible para la máquina mediante la compilación. El proceso de compilación es el siguiente: Una vez que tenemos codificado el programa en papel, debe ser introducido mediante el proceso


Introducción a la programación 29

de edición, para lo cual se utiliza un editor que nos permite crear un archivo en el cual introducimos el programa, creándose el programa fuente con las instrucciones que nosotros elaboramos en el lenguaje que estemos utilizando en este momento. El programa fuente es sometido al proceso de compilación, que mediante un compilador (traductor del lenguaje), se traduce instrucción por instrucción a código objeto, creándose un archivo con el programa objeto, eI cual es entendible directamente por la máquina. Si en el proceso de traducción se encuentra algún error, se suspende el proceso; el programador debe corregir el error en el programa fuente y luego someterlo de nuevo al proceso de compilación. Una vez que el proceso de compilación ha terminado con éxito, se tiene el programa objeto, el cual puede ser ejecutado por la computadora, misma que seguirá las instrucciones paso a paso llevando a cabo las acciones que se le indican emitiendo los resultados correspondientes, si éstos no son satisfactorios o existen errores, el proceso de programación debe ser repetido desde alguno de las pasos precedentes. 5. Implantación del programa

Una vez que el programa está correcto, se instala y se pone a funcionar, entrando en operación normalmente dentro de la situación específica para la que se desarrolló. Debe ser supervisado continuamente para detectar posibles cambios o ajustes que sea necesario realizar. G. Mantenimiento del programa

Un programa que está en operación, por un lado podría presentar errores, los cuales deben corregirse; por otro lado podría requerir cambios o ajustes en sus datos, proceso o información; esto implica que eventualmente necesitará mantenimiento para adecuarlo a los cambios que le impongan la dinámica cambiante de las empresas o de los problemas. Lo anterior nos sitúa en una dinámica infinita, ya que si surge la necesidad de darle mantenimiento tendremos que regresar a algún paso precedente; al 4, al 3, al 2 o al punto uno para definir de nuevo el problema. 1.3 El algoritmo

En el proceso de programación hay un paso que es crucial a la hora de desarrollar un programa; es el diseño del programa, en otras palabras, diseñar o elaborar el algoritmo de la solución. El algoritmo es una secuencia ordenada y cronológica de pasos que llevan a la solución de un problema o a la ejecución de una tarea (o actividad). Los pasos del algoritmo deben tener las siguientes características: • Ser simples, claros, precisos, exactos • Tener un orden lógico • Tener un principio y un fin Aplicando el concepto de algoritmo a situaciones de nuestra vida cotidiana, tenemos que, ejemplos de algoritmos son las señas para encontrar una dirección, las recetas de cocina, los planos de construcción, las instrucciones para armar o utilizar un juguete, etcétera.


30 Mützdulag.3

de la R-ograrruacon ONentedd a ['Netas

Cuando diseñemos algoritmos deberemos considerar que los pasos cumplan con las caracteristicas antes mencionadas. A continuación aplicaremos estos conceptos a una situación de nuestra vida cotidiana, a efectos de resaltar las características de los pasos de todo algoritmo; posteriormente (en los capítulos subsecuentes) estaremos aplicándolos al desarrollo de algoritmos que deberá ejecutar la computadora.

Elaras un algoritmo pura que guíe a una persona normal -cuma usted, lector-(estudiante de secundaria, preparatoria o profesional) a cambiar un focofundido, considerando que algún foco de nuestra casa (sala, comedor, baño, recámara, etcétera) está fundido. Usted lector_piense en los pasos que deberá seguir...

Algoritmo Cambiar un foco 1. Guitar el foco fundido 2. Colocar el foco nuevo

fundido

3. Fin

Lector...si usted pensó en los pasos a seguir, es probable que no coincidan exactamente con los que indiqué, pero si conducen de manera efectiva a ejecutar el cambio del foco, entonces estará en lo correcto, corno es el caso de cate algoritmo. Si bien es cierto que son pocos pasos, si usted los entiende y los ejecuta para lograr cambiar el foco, entonces está correcto. Ahora bien, supongamos que estamos tratando de entrenar a un robot para que haga la tarea; en tal caso no funcionará el algoritmo, tendremos que ser más específicos y claros tomando en cuenta las capacidades elementales del robot. Preguntémonos ¿qué sabe hacer el robot?: y en base a ello elaboremos el algoritmo. Capacidades del robot: - Colocar la escalen Suponemos que se nene Una escalera especial para que la maniobre el robot. Sabe traer la escalera desde su lugar y colocarla debajo del focofundido. - Subir a la escalera Sabe subir por los peldaños de la escalera hasta alcanzar el foca fundido o el lugar del faro. - Quitar el foco fundido Sabe girar el foco a la izquierda hasta que salga. - Obtener foco de repuesto. Suponemos que se tiene uno Calle con focos de repuesto de todas las medidas, y que el robot sabe dónde se encuentra la coja y puede obtener un foco nuevo y en buenas condiciones, igual al que traiga en sa brazo, - Colocar el foco de repuesto. Sabe culueu r y girar el foco de repuesto a la derecha hasta que esté apretado.


irrcroducc■run a lo programauón

Bajar de la escalera. Sabe bajarse de la escalera hasta estar en el piso. - Guardar la escalera. Sabe guardar la escalera en el lugar correspondiente. Sabe que ha terminado de ejecutar la tarea. A umlinuación tenemos el algoritmo: Algar itrio Cambiar un foco fundido I. Colocar la escalera Subir a la escalera 3. Guitar el foco fundido A. Bajarse de la escalera 5. Obtener el foco de repuesto S. Subirse a la escalera 7. Colocar el foco de repuesto 9. Bajar de la escalera 9. Guardar la escalera 10. Fin 2.

WIZM Ahora pensemos en otro robot que tiene las siguientes capacidades: - Colocar la escalera Sabe traer lo escakro desde su lugar y colocarla debajo del jaco fundido. - Subir un peldaño Sabe subir un peldaño de la escalera y sabe detectar cuando alcanza el _Ilky o el lugar del foco. - Dar vuelta a la izquierda Sabe gira r el foco tino vuelta a la izquierda y detectar cuándo sale. - Obtener tuco de repuesto. Suponemos que se tiene una caja Cali faros de repuesto de todas las medidas, que el robot sabe dónde se encuentra la caja y puede obtener unían; nuevo y en buenas condiciones igual al que traiga en su brazo. - Dar vuelta a la derecha Sabe girar el fono una vuelta a la derecha y detectar CLIÓI1d0 esto apretada. - Bajar un peldaño Sabe bojar un peldaño de la escalera y sabe detectar cuándo esta en el piso. - Guardar la escalera. Sabe guardar la escalera en el lugar correspondiente. - Fin. Sabe que ha terminada de ejecutar la tarea. Ea obvio que el algoritmo que hicimos anteriormente no servirla para este nuevo robot. Es necesario hacer otro algoritmo considerando las capacidades de este robot.


32 Metncloiagle [be le Prograrosoon Doentede e Objetas

A continuación tenemos el algoritmo;

Algoritmo Cambiar un foco fundido 1. Colocar la escalera 2. Repetir Subir un peldaño Hasta alcanzar el foco 3. Repetir Dar vuelta e la izquierda Hasta que el foco salga 4. Repetir Rajar un peldaño Hasta estar en el piso 5. Obtener el foca de repuesto G. Repetir Subir un peldaño Hasta alcanzar el lugar del foco 7. Repetir Dar vuelta a la derecha Hasta que el foco esté apretado 8. Repetir Bajar un peldaño Hasta estar en el piso 9. Guardar la escalera le. Fin Todas las actividades que llevamos a cabo los seres humanos son algoritmos que hemos aprendido a seguir. Caminar y lavarse los dientes, por ejemplo, son secuencias lógicas de pasos. La civilización está basada en el orden de las cosas y de acciones; éstas se organizan conforme a secuencias lógicas, y a esto se le llama programación!. Durante el desarrollo de algoritmos para computadora, es necesario idear los pasos que la máquina deberá seguir para realizar alguna tarea, actividad o resolver algún problema de nuestra vida cotidiana. Cuando se presenta el problema de realizar cierta tarea, debemos efectuar diversas actividades subyacentes tales como hacer preguntas, buscar objetos conocidos o dividir el problema en partes. A menudo hacemos todc eso inconscientemente, pero al elaborar algoritmos para solucionar problemas con Le computadora debemos detallar esas actividades de manera explican. Si se nos solicita una tarea verbalmente, por lo general hacemos preguntas hasta que quede daro lo que debemos hacer. Por ejemplo, preguntamos cuándo, por qué, dónde otros aspectos, hasta que la tarea queda completamente especificada. Si las insi.ruccione están por escrito, podemos anotar preguntas en los márgenes, subrayar palabras, resalta frases u oraciones, o indicar de alguna otra forma que la idea no está clara y neoesit; precisión. Si la tarea nos la imponemos nosotros mismos, puede ser que la pregunta se plante a nivel subconsciente. Algunas preguntas comunes en el contexto de la programad& son:


intr oducciac e la prugrernaerhn 33

-

¿Qué datos tenemos para trabajar?, y ¿cuál es su apariencia? ¿Cuántos datos hay? ¿Cómo sabremos que ya están procesados todos los datos? ¿Cuál debe ser el formato de la salida? ¿Cuántas veces debe repetirse el proceso? ¿Qué condiciones especiales de error pueden presentarse?

Nata: Cuando se diseña un algoritmo se anotan poso a paso, en secuenda, las acciones que se *curaran, en ocasiones hay que repetir unos warios pasos cierto numero de veces 110 por eiemploken tal caso tenemos que ami:rotar el primer paso, el segundo, el tercero, y eso sucesivamente hasta el décimo para que pueda terminar el proceso. Esto se conoce corno ciclo repetitivo.

.fflaw.amm, En otras ocasiones tenemos que llegar a un resultado partiendo de dos o más situaciones. En este caso debemos tomar en cuenta -por un lado- cómo se llega desde una parte, y por el otro cómo se llegada desde la otra parte, la alternativa; en estas circunstancias se utiliza la selección.

111111111111111111111t. Elaborar un algoritmo para hacer palomitas de maíz en una cacerola puesta al fuego, usando sal y maiz. 2.Elaborar un algoritmo que permita cambiar un vidrio roto de una ventana. 3.Elaborar un algoritmo para cambiar un neumático pinchado. 4.Elaborar un algoritmo para hacer una llamada telefónica. 5.Definir "su" robot, es decir, lo que sabe hacer tomando como referencia lo que usted hace, y elaborar un algoritmo que lo lleve desde que se despierta por la mañana hasta que llega a la escuela, trabajo o algún otro lugar.

del capítulo pos que debe dominar computadora y sus componentes rt El programa .i Características .t. de los lenguajes de programación ...Caracteristicas de un buen programa programación Pasos del proceso de programación 0 Qué ea el algoritmo y sus características ti


Elementos para solucionar problemas en pseudocódigo Contenido 2.1 Estructuras de datos 2.2 Operaciones primitivas elementales 2.3 Estructuras de control

Objetivo del capitulo Una ver que usted conoce lo que es un algoritmo y sus características, está en condidones de estudiar el presente capítulo. En este capitulo dos, usted conocerá los elementos para diseñar algoritmos en pseudocódigo: las estructuras de datos; datas numéricos enteros y reales, datos carácter, cadena de caracteres, etc; las operaciones primitivas elementales: declaraciones de variables, constantes y tipos, lectura de datos (entrada), escritura de datos salida); operaciones aritméticas fundamentales (sumar, restar, multiplicar y dividir), y las estructuras de control: la secuenciacion, la selección itF-THEN, IF-THEN-EISE, SWITCH), y la repetición IDO...WHILE, FOR, WHILEi.


38 Metonologia de la Programacon Orientada a (Motos Ya sabemos lo que es un algoritmo y conocemos la manera de diseñar soluciones para problemas de la vida cotidiana. Ahora aplicaremos estas conceptos a la elaboración de algoritmos para programar computadoras, utilizando el pseudocódigo. El pseudocódigo es una técnica para diseño de programas (algoritmos) que permite definir las estructuras de datos, las operaciones que se aplicarán a los datos y la lógica que tendrá el programa de computadora para solucionar un determinado problema. Utiliza un pseudolenguaje muy parecido a nuestro idioma, pero que respeta las directrices y los elementos de los lenguajes de programación. En este capitulo analizaremos las capacidades básicas o elementales de una computadora, ya que es indispensable conocerlas para poder desarrollar algoritmos. Los elementos básicos para solucionar problemas son las estructuras de datos, las operaciones prirnitivas elementales y las estructuras de control. A continuación explicaremos cada una de ellas y- su forma de representación en pseudocódigo.

2.1 Estructuras de datos Las estructuras de datos son las formas de representación interna ele datos de la computadora, mediante las que se representa cualquier situación en la computadora, es decir, son los tipos de datos que maneja la máquina. Por ejemplo, podemos representar a un trabajador mediante los datos nombre del empleado, número de horas trabajadas, cuota por hora. etcétera. 2.1.1 Tipos de datos Los tipos de datos más comunes son los numéricos (entero y real), cadena de caracteres (alfabéticos o alfanuméricos), carácter y boolean, cada tino de los cuales puede manejarse como una consta rite o corno una variable. A continuación se describe cada tipo; Datos numéricos Estos datos se dividen a su vez en ENTEROS Y REALES. Los ENTEROS son los números que no contienen componentes fraccionarios y, por tanto, no incluyen el punto decimal; pueden ser positivos o negativos, como por ejemplo 450, -325, 4, 0 -4. Se representa corno Entero. Los REALES son los números que contienen una parte fraccionaria y, por tanto, incluyen el punto decimal; pueden ser positivos o negativos, como por ejemplo -42.3. Se representa como Real. 465.0, 42.325, Son.o2,

Notas L Estos conceptos de Entero y Real son acunados y vahdos ep el ambito computacional, mas no para el comas vide la teoría general de los Flameo». 1 Los lenguajes de programación como C, C4+ y oteas, proporcionan más de un tipa de datos de Upo Entero y Real. Por ejemplo, laya tiene los tipos de datos. byte, short. ire y long, todos son de tipo Entero; asimismo, proporciona los tipos: float y doulae, ambos son de tipo Real. Sin embargo, aqui en pseudocódigo solo nos interesa manejar Entero y Real: en el paso que nos corresponda traducir los algoritmos e Instrucciones en un lenguaje, ala si usaremos la variante más apropiada al problema que estemos resolviendo.


Flareernos pera soluLerner proclames en peewlocedgo 37

Datos cadena de caracteres Los datos cadena de caracteres están compuestos por una hilera (cadena) de caracteres alfabéticos, numéricos y especiales, que sirven para representar y manejar datos tales como nombres de personas o de empresas, descripciones de articulas o productos de inventarias, direcciones de personas o empresas, entre otros. Se representa como Cadena. Este tipo de datos también se conoce como alfabético o alfanumérico, ya que su contenido -sea cual fuere- siempre se considera como una serie de caracteres; los valores de este tipo normalmente se encierran entre comillas ( " ) o entre apóstrofos 1" ). Por ejemplo: 'Universidad de Sonora' 'Socorro Rosón Maldonado" 'Dr. de la Torre y Vicente Guerrero O 75" "Guamlichil, Sinaloa, México" 'Tornillo X25 I" 'Bicicleta Cross 2.47" 'Cualquier otra cosa que sea una constante literal" Datas ca rentar El tipo de dato carácter utiliza 1 byte, puede almacenar un carácter; cualquier carácter válido para la computadora según el código ASCII. Se representa como Carácter. Datos baalean Este tipo de dato está compuesto por los valores False (falso) y True (verdadero); este tipo no puede ser leido o escrito, sólo asignado, es útil para plantear cierto tipo de condiciones en el manejo de las estructuras lógicas de control. Se representa corno Bordean. 2.1.2 Variables Las variables sirven para representary manejar datos. Todo dato que vaya a ser introducido a la computadora, y lodo dato que vaya a ser generado o calculado a partir de otros datos para obtener algún resultado, debe identificarse y manejarse en forma de variable; una variable tiene las siguientes características: a) Nombre. Fs el identificador de la variable y que servirá para referenciarla. Reglas pata asignar nombres de variables y otros identificadores como métodos, funciones, clases, objetos, etcétera: 1) Se pueden utilizar combinaciones de letras mayúsculas y minúsculas (A-.7 a..z), dígitos (o..4) y el símbolo de subrayado( i. 2) El nombre debe iniciar con una letra. 3) Es conveniente que la longitud no pase de 20 caracteres. 4) No debe ser palabra reservada (como IF, THEN, FASE, FOR, DO, WHILE, FOR).


38

Mesoeologis de le Programador Orientada e abetos

Los nombres de las variables n ~identificadores deben definirse de tal manera que indiquen lo que están representando, ya sea datos. métodos, clases, objetos; es decir, que sea un mnemón ico de lo que representa. Por ejemplo, si se va a n hal tejar el dato nombre del empleado, se podría usar Nombre o NombreEmpleado. El dato horas trabajadas se podrá nombrar llorasTrahajadas. El dato cuota por hora se podria manejar COMO Cuotallora. Usted, como programador puede adoptar su propio estilo para dar nombres a variables, sin embargo, considere lo siguiente: O Hay autores de lenguajes de programación que usen sido letras mayúsculas, ejemplos: NOMBRE, HORAIrRABA/ADAS, CUOTA I 10 RA, X, Y. Z. a) Otros autores usan sólo letras minúsculas, ejemplos: nombre, horastrabajadas, cootahora. a, y, z. 5) Otros utilizan tanto mayúsculas mulo minúsculas, ejemplo; Cuota Hora. 4) En ate libro se utilizará el estilo que maneja el lenguaje Java y derivados, dicho eslilu es el siguiente: a) En nombres de clases. - La primera letra mayúscula y las denlas minúsculas, ejemplos: Empleado, Alumna, Cliente. - Si se juntan varias palabras, se aplica el punto anterior a cada una de las palabras. ejemplos: EmpleadeConfianza, EmpleadoSindicalileado, Empleado Po d'oras. b) En nombres de variables, objetos, métodos y otros. Si el elemento se compone por una sola palabra, se usan puras minúsculas, ejemplos: nombre., sueldo. s. y, z. al, y2, as, x25., yit, ZT Nota: En general los lenguajes de programación no admiten letras acentuadas, por lo tenia nombres de variables corno, op.pán, prod acción, tornano, arlo, n ürnero, no son correctos. Los nombres correctos sedan opcion, pnoduccion, ta manió, ario, numera Observe que en lagar de la ñ se coloca ro pata evitar nombres

de variables alrisonances.

- Si se juntan varias palabras, de la segunda palabra en adelante, la inicial es mayúscula y las demás minúsculas, ejemplos nombreErn ple.ado, cuota Por I lora. cuota Hora, sueldoErnpleado, objetoEmpleado, objeto:Mi:rano, calcular Sueldo. NIELS: Cuando seca a dar nombre a un dato como número de horas inhaladas, el nombre mas entenclibte es nurneroDeHoraffrabajadas, sin embargo, es demasiado grande, entonces lo que debemos hacer es 'ebreuiar' algunas de las palabras. Podrla quedar. numlirsTrab, es re es un buen nombre, porque se entiende lo que representa y no es muy largo. Con nombres turno este debe tenerse cuidado, porque un error muy común de quienes recen se imcian en este tema, es ponerle puntos (como cuando se aboliría aplicando las regías gramaticales del espanoh. Para esta sttuatión, podrían define nurn.Hts_Trab.; lo que es erróneo, porque en nombres de ickntlficadores no se admite el punto. Otro problema común en los principiantes es poner espacios, por ejemplo tuco Hrs Trab lo que constituye lamben un error..


Elementna para solucionar ~mas en pseutlaukligo 39 b) Contenido. Se puede considerar que toda variable tiene una "casilla" donde se almacena el valor que toma en cada ocasión. Esto es similar a tener un casillero donde las casillas sirven para guardar objetos y tienen su respectiva identificación que permite referenciarlas. Por ejemplo; CASILLA nombreEmp u ot al-lo ra horasTrab el Tipo de datos. Toda variable debe estar asociada a un tipo de datos Entero, Real, Cadena, etc., v de acuerdo non esto sólo podrá tomar valores válidos para el tipo de dato definido. 2.1.3 Constantes Las constantes son valores especificas, en consecuencia invariables. Por ejemplo, constantes de tipo entero son: 5, to, -56 y 20; constantes de tipo real son 3.1416, 405, -1.5 Y 2.718; constantes de tipo cadena de caracteres son °Universidad de Sonora" , "Tornillo X25 Nt", "Rosales e 245 Sur», etcétera.

2.2 Operaciones primitivas elementales Las operaciones primitivas elementales son las acciones básicas que la computadora puede ejecutar. A continuación estudiaremos las características de cada una: 1. Declaraciones Es una accion que se considera como no ejecutable, ya que mediante ésta se define el entorno en el que se ejecutará el algoritmo (programa), en esta parte se declaran las variables. constantes, tipos, objetos, etcétera. A continuación se explican. a. Objetos Se definen los objetos que se utilizarán en el algoritmo, con el siguiente formato; Objetos NomClase nombreObjeto = new Nomelase() Donde: Objetos Indica que se están declarando objetos. NomClase Es la clase de la que se derivará el objeto. nombreObjet o Es el nombre del objeto que se está definiendo. new Indica que se está derivando un nuevo objeto. NomClase ( ) Es el método constructor de objetos de la clase.


40 fti-atudulola se la Prognamechan Oclemaae e Otaatos

JIM»

Empleado objEmpleado = new Emplead01)

Se ha creado un nuevo objeto llamado objEmpleado la clase de la que se ha derivado es Empleado y ha sido formado por el método constructor de objetos de la clase Empleado(). b. Constantes Como va se explicó, las constantes son valores específicos, sin embargo, se pueden definir constantes simbólicas, es decir, mediante un identificador, con el siguiente formato: Constantes NosiConstante = Valor Donde: Identifica la acción que se va a realizar, la cual es definición de constantes simbólicas. No mCo nstante Es el identificador de la constante. Es el valor que toma la constante. Valor

Constantes

2:2111

Constantes Pi = 3.145926536 Cien = 100 Comentariol = 'Aprobado' Comentario2 = 'Reprobado' Nota: Algunos lenguajes utilizan quectacta.:

101

dentlficadotes de constante., en mayúsculas, el ejemplo anterior,

Constant es PI = 3.145926536 CIEN = 100 COMENTARIOT = 'Aprobado" COMENTARIO2 «Reprobado" c. Tipos Se definen nuevos tipos de datos. Formato:

Tipos NombreTipo = (Valorl, Valor2,

, ValorN)


bel-n.11[ns pera soluctoner problemas en pshonecodalo 41

Donde:

Es el nombre del nuevo tipo de dato. NombreTipo Valorl , Valor2, , Va lorN Son los valores que integran el nuevo tipo de dato.

IP»

Colores = (Negro, Blanco, A2p1, Rojo, Amarillol Variables colFondo: Colores Se ha definido el tipo de dato Colores, y luego la variable colFondo del tipo Colores, es decir, que la variable colFondo podrá tomar los valores definidos en el tipo Colores. Este tipo de declaración tiene una aplicación más apropiada cuando se procesan arreglos, registros y archivos. d. Variables

Esta acción permite representar en un programa las estructuras de datos necesarias para abstraer y representar en la computadora la situación real del problema o de la tarea que se manejará, en otras palabras, se definen las variables necesarias mediante el siguiente formato:

Variables nomVariablel: Tipo de dato nomVariable2: Tapo de dato nomVaraableN: Tipo de dato Donde:

Variables

Identifica la acción que se va a realizar, la erial es declaración de variables.

nomvari ab lel, nomVariable2, nomVar aataleN Son los nombres de las variables, de acuerdo con las lineamientos antes expuestos.

Tipo de dato Indica el tipo de datos que tendrá la variable, a saber: Entero, Real. Cadena, etc.

Para representar la situación de pago de sueldos. que ya se ha mencionado, debemos hacer lo siguiente:

Variables nombreEmp: Cadena


42 Metodologie dele Programachรณn Onentede a 1:100tOS

ImrasTrab: Entero cuutaEora: Real sueldo: Real Nota En el tipo de dato Cadena puede indicarse la longitud en minero de caracteres que le caben a la

variable, en el ejemplo pacida quedar mi. n040 re Errip cadenal 3d Es decir, a la variable nairibrealp le caben 30 caracteres. En este libro vamos a utilizar cadena.

2. Lectura de datos (Entrada] Esta operaciรณn nos permite introducir los datos a la computadora, es decir, introducir la materia prima para el proceso. La introducciรณn de datos puede hacerse desde un teclado, lector de cรณdigo de barras, un archivo en un disco, un ratรณn (transe) o desde cualquier otro dispositivo de entrada. El dispositivo estรกndar de entrada es el teclado. El formato para leer datos es: Leer nomVartablet, ridaWarlable2, numvartebleN Donde:

Leer Indica la acciรณn que se va a realizar, la cual es lectura de datos. narnVaria hiel , mallar ia ble2, neanVariableN Son los nombresde. las variables donde se leerรกn los datos.

Para la situaciรณn de pago de sueldos que venimos siguiendo se deben leer el nombre del empleado, las horas trabajadas y la cuota por hora:

Leer nombreEmo, horasTrab, cuotaHora Esta acciรณn espera a que se tecleen hm datos correspondientes, los cuales almacenarรกn en las sanables especificadas. En virtud de que los nombres de las variables sun mnemรณnicos con respecto a los datos que representan, se facilita la comprensiรณn de la acciรณn. Con esta acciรณn entendemos que se leerรกn el nombre, las horas trabajadas y Id cuota por hora, y ademรกs que la lectura implica un proceso interactivโ‘ en el que se piden los datos en la pantalla. โ€ข

711 1 111BRE: TECLEE HORAS TIABAJADAS:_ TECLEE CUOTA POR HORA:_


Dementes para soluoonar proiseemas en panursacodiqo 43 Esta actsón de lectura de datos puede hacerse de una forma más detallada, haciendo star vara acompañada por una solicitud de los datas para enfatizar la interactividad entre la persona que in iruducirá los dama y la computadora; en tal caso la torture queda así:

Solicitar Nombre del empleado, Horas trabajadas y Cuota por hora Leer nombreEmp, horasTrab, ouotaliora También se pudría leer asi: Solicitar Nombre del empleado Leer nombreEmp Solicitar Horas trabajadas Leer horasTrab Solicitar Cuota por hora Leer cuotaHora Nota: Solicitar los datos es equiealenre e imprimir en la pantalla haciendo la petición de que se intred~n les datas: se pedria colocar aSi: Imprimir "TECLEE NOMBRE' Imprimir "TECLEE HORAS TRABAJADAS" Imprimir -TICLEI CUOTA POR HORA"

3. Operaciones aritméticas fundamentales Kstas operaciones permiten modificar la apariencia de los datos y generar información: en otras palabras, procesar las datos que entran corno materia prima para convertirlos en información que saldrá de la computadora. Las operaciones aritméticas son: 1-

Suma

Resta Multiplicación / \

División real División entera

Mod Residuo de una división entera Asignación Mediante tales operaciones se forman expresiones aritméticas para realizar los

cálcalas. Formato; Calcular variable = expresión


44 Mesoddlogia de la Prograrnacieln Onentada a Oblatos

Durarle:

variable expresión

Es el nombre de la variable en la que se asignará el resultado de expresión. Es un valor constante, una variable u una expresión algebraica (para calcular un valor), el cual se le asigna a la variable, Es el símbolo que indica la asignación del valor de expresión a la variable.

MI Calcular sueldo = horasTrab • cuotaHora

Se calcula horasTrab • cuotaHora y el resultado se coloca en sueldo La palabra Calcular puede omitirse, quedando la expresión oil: sueldo = borasTrab • cuotaHora

Otros ejemplos: a=1 b= a 1 b= b • 1 y = 5 / 2 z=512 r = 5 latid 2 observacion

a toma el valor 1 b toma el resultado de 2 b toma el resultado de by toma el valor 2.5. División real (hasta decimales) z toma el valor 2. División entera (no decimales) r toma el valor t, es decir, el residuo. "Aprobado' observacion toma el valor "Aprobado"

es aritméticas deben escribirse en una línea para que la computadora pueda evaluadas. Por ejemplo, la expresión: X +-Y Y-1 nosotros la entendemos perfectamente y la podríamos evaluar mí: si X = 5 Y=3


Esementas para soluDonar oroNamas en peeudscód.go 45

luego bañamos la sustitución de valores y la resolveríamos: N 5+3 —= = 4 3 -1 2 Sin embargo, la computadora no entiende este formato, por lo cual debemos escribir la expresión original en una linea para que la reconozca la computadora; después de hacerlo nos queda de la siguiente forma:

n

(x + y) / (y -

La computadora examina toda la expresión y va evaluando cada componente de acuerdo con cierto orden de precedencia que tienen las operaciones aritméticas, que es el siguiente: r. Operaciones entre paréntesis. Primero busca lo que está entre paréntesis y lo evalúa. En caso de haber paréntesis anidados, evalúa primero los más internos y luego prosigue con los externos. 2. operaciones unarius. A continuación evalúa las operaciones unarias, es decir, de cambio de signo. Ejemplo: -4; le cambia el signo a 4. 3. Multiplicación y división. Posteriormente evalúa las operaciones de multiplicación y división, las cuales tienen el mismo nivel de precedencia. 4. Suma y resto. Estas operaciones se evalúan al final, ya que tienen el más bajo nivel de precedencia. Nota: Cuando existen va

operaciones de un mismo nivel, se evalúan de Izquierda a derecha.

ejemplo Se encerraron entre parerrtesis las operauones le + yl y (y - 11 para cerciorarse de hiciera primero la suma, luego la resta y al último la división. conforme al planteamiento problema original. Si la expreskin se hubiera escrlto n=x+yiy-1 estada incorretti. Porque la computadora primero hada la división de y / y, luego la suma y despull la resta. lo que arrojaria

Otros ejemplos de conversión en una línea: x=A+8-

z

x = a+b-y/z iS x a +64.y/z)


48 Morodologia de le Programación alameda e Oblatos

4,

W

A• C +— D C

Z-

T(Y- 2)+R S

w = (a" e/d)+ b/c x=(1*(y-2)+r)/s

%o CE- SF AE-BD

x = f(c•e)-(1).0) / ((lre)-(b"cD)

F. -C+ 32 5

f= 9 / Ve+32

Escritura de datos (Salida)

Mediante la escritura damos salida a los datos de la computadora hacia un medio peri férico como por ejemplo la pantalla de video (CRT), la impresora, disco u otro. La salid estándar es el video. Formato:

Imprimir nomVariablel nomVariable2, nomVariableN Donde: Imprimir

identifica la acción de escritura.

nomVariablel, nomVariable2 , nomVariableN Son los nombres de las vare bles que contienen las datos que serán impresos.

"ierikc En el ejemplo que venimos siguiendo se debe imprimir como resultado el nombre d empleado y su sueldo. Con la instrucción:

Imprimir notabreEmp , sueldo Se indica que se imprimen el nombre y el sueldo, que es la información requeri en este problema. Por el momento no se hace énfasis en e] formato de salida, sino sólo indica lo que sale -en términos de las variables- aprovechando que estamos utilizan nombres mnemónicos. Cuando se analiza el problema es donde se define el formato da salida, por ejemplo si será un cheque, un recibo o algún otro documento.

Nota: En caso de que se desee acampana, los datos con un letrero. se hace poniéndolo entre comillas r apóstrofos, ejemplo:

Imprimir 'NOMBRE

noetreEmp, 'SUELDO

suelde


Elamensas pum soluessner emblemas en psedeloonOign 47

12111~

Se imprime el letrero. NOMBRE,luego se imprime el contenido de la variable nOrribr chip. luego se imprime el letrero SUELDO y por último se imprime el contenido de la variable sueldo. Note: Si se quiere indicar Que la salida es hacia la impresora se puede tabear la palabra Impresora, ejemplo: 1Mprinir Inpreeeee r nombreEmp. sueldo Mak

2.3 Estructuras de control Son las termas lógicas como puede Comportarse una computado= y mediante las elleles se dirige el funcionamiento de la misma. Se le da orden lógico a las operaciones primitivas elementales que actúan sobre los datos. Las estructuras de control son la SECUENCIACIÓN, la SELECCIÓN, que a su vez tiene tres formas: SIMPLE {IF-THEN), DOBLE (ir-TREN-F,LsE) y minziPLE (swrrein, y la REPETICIÓN, que también tiene tres formas: DO.. WHILE, FOR, WHILE- En los capitulas subsecuentes se estudiará detalladamente cada una de estas estructuras.

Resumen del capítulo Conceptos que debe domina/

Estructuras de datos. Tipos de datos en pseudo-código: datos numéricos enteros y reales: datos carácter y cadena de caracteres. los conceptos de constarles y variables y SUR características. 3 Operaciones primitivas elementales Declaraciones de variables, constantes v tipos Lectura de datos (Entrada) Escritura de datos I Salida) Operaciones aritmélicas fundamentales I surna. resta, multiplicación y división) 3 Estructuras de control Secuenciacion Selección (IF-THEZal. IF-TIIEN-ELSE, SWITCH) Repetición (1}0...WH I LE, FOR, WH I LE)


La secuenciación

3

Contenido 3.1 Nuestro primer problema 3.2 Estructura y diseño de un algoritmo 3.3 Nuestro primer algoritmo 3.4 Funciones matemáticas 35 Ejercicios resueltos Ejercicios propuestos

Objetivo del capitulo Después de haber estudiado el capítulo anterior, usted va domina los elementos para diseñar algoritmos en psudocódigo: tipos de datos, leer datos, imprimir datos y hacer cálculos. Con el estudio de este capítulo, dominará y utilizará la estructura de control yecuenciadon • Aprenderá también a utilizar las (unciones matemáticas (seno, coseno, arco tangente, logaritmo natural, etc.). Podrá ejercitar lo estudiado en los ejercicios resuellos y propuestos; a I estudiar losejercicios resueltos, se le recomienda que pi mero intente hacerlo usted si n ver la solución, luego verlilque sus resu hados con los del libro.


50 Metoduknee de e Prograrreoen Cremada

a Oblatos

La secuenciación es una estructura que permite controlar la ejecución de un conjunto de acciones, en orden secuencial: esto es, ejecuta la primera acción, luego la que sigue y asi sucesivamente hasta la última, como se muestra a continuación: 1. 2. 3. 4. 5.

Acción uno Acción dos Acción tres Acción cuatro Fin

Es decir, es una secuencia de acciones, donde se ejecuta primero la acción una, después la dos, luego la tres, enseguida la cuatro y por último el fin. Dichas acciones pueden consistir en operaciones primitivas elementales como declaraciones de variables, leer datas, imprimir datos o calcular alguna expresión de acuerdo con los lineamientos descritos en el capitulo anterior. Como puede notarse, es conveniente etiquetar cada acción con números desde el 1 en forma ascendente de uno en uno, para denotar el orden secuencial.

3.1 Nuestro primer problema A continuación se presenta un ejemplo para aplicar los conceptos antes descritos. además para explicar cómo se arma un algoritmo.

Elaborar un algoritmo para calcular e imprimir el sueldo de un empleado. Siguiendo ti proceso de programación se hace lo siguiente: .1. Definir el problema. Cideular el sueldo de un empleado. z. Analizar el problema. Información por producir Nombre, Sueldo. Datos disponibles: Nombre, Horas trabajadas y Cuota por hora. Proceso a seguir: Sueldo . Horas trabajadas x Cuota por hora. 3. Diseñar el programa. Se diseña la estructura de la solución, elaborando el algoritmo de acuerdo con la lineamientos que se explican en la sección siguiente.

3.2 Estructura y diseño de un algoritmo En esta sección se explica el uso de los elementos que integran la estructura de 1111 Algo ritmo, aplicándolos al problema definido en la sección anterior.


Le secuenasoón

51

1. Encabezado Todo algoritmo debe tener un encabezado corno identificación, el cual debe empezar ene la palabra Algoritmo seguida por una breve descripción de lo que hace. Para eI problema que nos ocupa puede ser;

Algoritmo CALCULAR SUELDO DE UN EMPLEADO 2. Clases Un algoritmo está formado por un conjunto de una o más clases, v por lo menos debe tener una clase. Cada clase está formada por un conjunto de uno o más métodos; en todo el algoritmo debe haber un método principal, que es donde inicia el funcionamiento del mismo. Con los métodos se implementan las funciones que hace el algoritmo; así, en un algoritmo pequeño, como son los que haremos en los primeros capítulos, habrá una sola clase y esa clase tendrá un solo método, que será el principal, y en ese método van las acciones del algoritmo, a continuación se muestra el formato a utilizar;

Algoritmo IDENTIFICACIÓN Clase NomClase 1. Método principal. a. Acción 1 b. Acción 2 c. Acción 3 d. Acción 4 e. Acción 5 f. Fin Método principal Fin Clase NomClase Fin

~.4 Se tiene el encabezado del algoritmo con su identificación de lo que hace. El algoritmo tiene una clase que inicia con Clase NomClase y finaliza en Fin Clase

NomClase. La clase tiene un método que es el Método principal, el cual contiene las acciones que resuelven el problema y termina con Fin Método principal.

IWOUL En Ibti aparamos que se estudiarán en los capitubs 3 al 13 se uttlezere solo une clase, y dentro de esa clase, se tendrá sedo el método principal. en el cual deserrolleremos la lógIca que resuelve ics problelnaa que 0111Lfierliirill39. Sin embargo. le dese puede tener mes de un método; seta as 2. -Cilditl.`á en el capitulo 3 Ademas, en un algontma puses haber mes de una clase. MAS Ct.-1~Uus estuderen en ias capitules tEl en adelante.


52 MetAdologia de La Prugramecidn Oriornaue a 01),etos

3. Declaraciones En el método principal, el primer paso en el diseño del método del algoritmo. consist en hacer las Declaraciones que se necesiten como variables, constantes, tipos de datos objetos, etcétera. En el caso que nos ocupa se requieren las variables siguientes: nombr eEmp tipo Cadena de caracteres para manejar el dato nombre. horasTrab tipo Entero para manejar el número de horas trabajadas. cuot aHora tipo Real para manejar la cuota que se le paga por hora. sue ldo tipo Real para manejar el sueldo a pagar al empleado. Esto se representa en PSEUDOCDDIGO de la manera siguiente: Declaraciones Variables nombreEmp: Cadena horasTrab: Entero cuotaHora: Real sueldo: Real 4. Leer, calcular e imprimir Los pasos segundo, tercero. etc., pueden consistir en acciones tales como Leer datos Calcular alguna expresión aritmética e Imprimir datas tantas veces como se requiera y el el orden apropiado para resolver el problema en cuestión. Lectura de citaos En este punto se empiezan a introducir los datos disponibles cona materia prima, mediante una operación de lectura precedida por una solicitud de lo datos. En nuestro problema esto quedaría así: Solicitar Nombre del empleado, número de horas trabajadas y cuota por hora Leer nombreEmp, horasTrab, cuotaHora Hacer cálculos El siguiente punto es procesarla entrada para producirla salida, media nt la ejecución de cálculos basados en expresiones aritméticas. En el ejemplo esta rmia' se expresa asi: Calcular sueldo = horasTrab • cuotaHora Impresión de datos El último punto estriba en dar salida a la información requerido imprimiendo las variables que la contienen. En el ejemplo se expresa así: Imprimir nombreEmp, sueldo 5. Fin del método principal, de la clase y del algoritmo Per último se tiene el fin del método principal, de la clase y del algoritmo.


Le secuenclec■on 53

3.3 Nuestro primer algoritmo A otintinuaciórs armaremos nuestro primer algoritmo en pseudocódigo. El algoritmo servirá para calcular el sueldo de un empleado utilizando la estructura de control SECUENCIACION y todos los demás conceptos explicados hasta el momento. Algoritmo CALCULA SUELDO DE Lin EMPLEADO Clase Empleador 1. Método principal a. Declaraciones Variables nombreEmp: Cadena horasTrab: Entero cuotaHora, sueldo: Real h. Solicitar Nombre del empleado, número de horas trabajadas y cuata por hora c. Leer nombreEmp, horanTrab, cuotaHora d. Calcular sueldo = horasTrab • cuotaHora e. Imprimir nombreEmp, sueldo f. Fin Método principal Fin Clase Empleador Fin

U] el Ce areXe. el lector mona encontrar tos programas runiesoondientes e Mes los algorrl• rnos del Iibra. corifficaries en lenguaje Je» El nombre del archive dende se encuentra sr codigo fuente de cada dlontrna se [arma Con el nombre de la clase, que ce este ejmnpio es Ernpleadol ortwsiOn que .e.1}¢, dicho ~eje ¿.faya]. ASI pera este akgorrtmo el programa se officuentra en el a:renno E rnplesciol ja w, E%10. 991,51.211; mous los stpantmus del libro. aunque en lue ~s. no apareare esta nota

111111111 _,__ Este algoritmo -como todos- comienza con el encabezado, en el cual se establece una

identificación de lo que hace: CALCULA SUELDO DE UN EMPLEADO. El algoritmo tiene una clase; la Clase Empleado]. misma que termina can Fin Clase Empleados. Observe que en el nombre de la clase se le ha puesto Empleado': el t significa que posteriormente habrá otra clase relacionada con un empleado y se le pondrá Empleadox. y así sucesivamente. Esto también se aplicará para alumnos, obreros. etcétera. La Clase Empleado] tiene un solo método; el Método Principal el cual tiene las siguientes acciones. a Se hacen las declaraciones; se definen las variables: nombreEmp tipo Cadena para manejar el dato nombre horastrah tipo Entero para manejar el número de horas trabajadas cantal-lora tipo Real para manejarla cuota qu e se le paga por hora. sueldo tipo Real para manejar e] sueldo a pagar al empleado.


merodraogss de lis Programación Cremada a Cittesas

Nota; Canndn hay MES ee una venable de un rntamv:ipe de dato, se pueden definir juntas separándolas per temo: ee.n en0119-10re anleIae Rerel

Esquemáticamente; en la memoria, las variables quedan definidas así:

nombreEn ouot anara

hora sT rab suelde b. Se solicitan los datos nombre del empleado, numero de horas trabajadas y cuota por hora; esto significa que en la pantalla se imprime lo siguiente: TECLEE NOMBRE: TECLEE HORAS TRABAJADAS: TECLEE CUOTA POR HORA:_ e. Se leen el nombre del empleado, número de horas trabajadas y cuota por hora en las variables nombre Ernp. horasTrab y miotaflora; Esta acción espera a que se le teclee el dato correspondiente a cada petición y les datos tecleados se guardan en las variables; E.squernáticainente queda así;

norsdreEmp Socorro Romín Maldonado uot Mora

250.00

horasTrab 40 sueldo d. Se calcula el sueldo = horasTrab • cuotallora. Se multiplican los contenidos de

las variables horas'reab por cuotaHora; es decir, zsu.tic1 por 40,5 el resultado se coloca en sueldo: Esquemáticamente queda así:

I

sueldo 10000.00 e. Se Imprimen los datos nornbreErnp y sueldo. lis decir, se imprime el contenido de dichas v-ariables, quedando impreso: El contenido de la variable no mbreEmp, que es:


Le sareenciacien 55 Socorro Román Maldonado Y el contenido de la variable sueldo, que es: 101300.00 f. Fin del método principal. Se termina d método principal. Luego se tiene el fin de La clase y el fin del algoritmo. FM1~~1EW ._ ObrIerve qua el matado prInCioel Ea enumera con al 1; y les eCciwee de dicho matado se enumeren can letras: a, a, c, d, c. f, atascare.

Práctica: En este momento se recomienda ir al punto de ejercicios resueltos, estudiar algunos ejemplos y resolver otros de los ejercidos propuestos.

3.4 Funciones matemáticas Todo lenguaje de programación proporciona una gran variedad de funciones estándar, es decir, que ya están definidas por el lenguaje, por ejemplo, las funcionas matemáticas, las cuales son funciones de carácter general que nos facilitan la ejecución de ciertos cálculos de índole técnica o científica, ejemplos de estas funciones son: seno, coseno, raíz cuadrada, etc. A continuación se explican en detalle:

Función: Seno Efecto: Calculo el seno. Formato: Seno (e l Donde:

Sano

Es la palabra que identifica a la función. Es el parámetro que indica el valor al que se le obtiene el seno. Debe darse en radianes y debe ser de tipo real. El tipo de dato del resultado que devuelve es real. Ejemplo: y = Senors) Se calcula el seno de x, y se le asigna a y.

FilDri4511: Coseno Efecto: Calcula el coseno. l'armara:

Coseno{ a ) Donde: Coseno

Es la palabra que identifica a la función. Es el parámetro que indica el valor al que se le obtiene el coserlo. Debe estar dado en radianes y debe ser de tipo real.


55 Metociolopia de fa Prgรณrarriacsan remada e Obietos

El tipo de dato del resultado que devuelve es real. Ejemplo: y = Cosenotx) Se calcula el coseno de x, y se le asigna a y. Funciรณn: Arco tangente

Efecto; Calcula el arce tangente. Formato:

ArcoTan(o) Donde.

ArcoTan x

a la palabra que identifica a la funciรณn. Es e] parรกmetro que indica el valor al que se le obtiene el arco tangente Debe ser de tipo real. El tipo de dato del resultado es real_ Ejemplo: y = ArcoTan(x) Se calcula el arco tangente de X, y se le asigna a y.

Funciรณn: Logaritmo natural

Efecto: Calcula el logaritmo natural. Formato:

Ln(X) Donde:

Ln

Es la palabra que identifica a la funciรณn. Es el parรกmetro que indica el valor al que se le obtiene el logaritmo natural debe ser mayor que โ‘ ). Debe ser de tipo real. El tipo de dato del resultado es real. Ejemplo: y = Lo(x) Se calcula d logaritmo natural de s, y se le asigna 71 y.

Funciรณn: Exponencial

Efecto: Calcula e elevada a la a potencia. Donde e es la base del sistema logaritmin natural (e -.2.7i8281.8..1. Formato: Exp( Donde: EX p

x

Es la palabra que identifica a La funciรณn. Es el parรกmetro que indica la potencia a la que se elevarรก la constante e Puede ser de tipo entero o real. El tipo de dato del resultado as real.


La secuancisción 57 Ejemplo:

y = Expl4) Se calcula e elevada a la potencia 4 y se le asigna a y. Función; Absoluto Efecto: Calcula el valor absoluto. Formato:

AbsolatólX) Donde.•

Absoluto Es la palabra que identifica a la función. Es el parámetro que indica el valor al que se le obtiene el valor absoluto.

Puede ser de tipo entero n real. El tipo de dato del resultado es igual al tipo del parámetro, es decir, si el parámetro es entero, el resultado será entero: si el parámetro ea real. el resultado será real. Ejemplo: y = Absoluto{ -24.551 Se obtiene el valor absoluta de -24.55 y se le asigna a y. Punción: Ruiz cuadrada Efecto: Calcula la raíz cuadrada. Formato: Raizeuadficl Donde: Ea ate u ad Es la palabra que identifica a la función. x Es el parámetro que indica el valor al que se le calcula la rail cuadrada.

Puede ser de tipo entero a real. El tipo de dato del resultado es real. Ejemplo: y = Anizeundfle)

Se calcula la raiz cuadrada de in y se le asigna a y. Función: Potencia Efecto: Calculo la potencia de una base elevado a un exponente. Formato: POtenc albase,exoonentel Donde:

Pot encia Es la palabra que identifica a la función. base

Es un parámetro que indica la base.


58 Metodologie de le Progrernecien Orientada a Chatos exponente Es un parámetro que indica la potencia a la que se elevará la base. El tipo de dato puede se entero o real. Ejemplo: y - Potencia(x,3) Se calcula la potencia de x elevada a la 3; y se le asigna a y.

Ejercicio 3.4.1 Elaborar un algoritmo que permita leer el tamaño de un ángulo en radianes, Mego cp calcule e imprima el seno y el coseno (Primero lziajolo IJsted....después campare la saludan)

Algoritmo CALCULOS LOGARITMICOS DE ANGULO Clase Angulol 1. Método principal a. Declaraciones Variables tamAngulo, senAng, cosAng: Real Solicitar Tamaño del ángulo en radianes b. c. Leer tamAngulo d. Calcular senAng = Seno(tamAngulo) cosAng = CosenoltamAngu10/ e. Imprimir senAng, cosAng f, Fin Método principal Fin Clase Angulo1 Fin

El algoritmo tiene una clase: la Clase Angulo' misma que termina con Fin Clase

AL

La Clase Angulo' tiene un solo método; el Método principal el cual tiene las siguient acciones: a. Se declaran las variables: tam•Ltgulo para leer el tamaño del ángulo senAng para calcular el seno cosAng para calcular el coseno b. Se solicita el Tamaño del ángulo en radianes c. Se lee el dato en tamAngulo d. Se calcula el Seno, Coseno e. Se imprimen los datos de salida f. Fin del método principal Luego se tiene el fin de la clase y el fin del algoritmo.


La sacusnmacam 58 Ejercicio 3.4,2 En los lenguajes de prrigrainación,las Funciones seno. coseno y tangente, requieren que el argumento o parámetro que se les envie, esté dado en radianes. Si el dato disponible está lado en grados, se puede hacer la conversión a radiante con la siguiente equivalencia: t' =

180

= 0.iti74775 radianes

Para convertir radianes a grados: t radián = I— Sil=57.21 grados Elaborar un algoritmo que permita leer un número en radianes e imprime su equivalencia en grados: asimismo, que permite leer un número en grados e imprime se equivalencia en radianes. (Primero hágalo usted....después compare la solución) Algoritmo CONVIERTE RADIANES A GRADOS Y GRADOS A RADIANES Clase RadianGradot 1. Método principal a. Declaraciones Constantes PI = 3.145926536 Variables radianes, grados, numRadianes, numGrados: Real.

b. Solicitar Número de radianes c. Leer radianes d. Solicitar Número de grados e. Leer grados

f. Calcular numGrados = radianes*(lge/PI) numRadianes = grados*(PIfiEte) g. Imprimir radianes, "EQUIVALEN A', numGrados. grados, 'EQUIVALEN A", numRadianes, h, Fin Método principal

Fin Clase RadianGradol Fin

El algoritmo tiene una clase; le Clase SadianUradot misma que termina con Fin Clase RadianGrado t. La Clase RadianGraddi tiene un solo método; el Método principal, el cual tiene las siguientes acciones: a. Se hacen las declaraciones Se define la constante P1 = 3.14942653.1,


ea Matodaingie ea le Program-Az:ion Clnentada a Chietns Se definen las variables radianes para leer el número de radianes grados para leer el numero de grados nurnRadianes para calcular el número de radia nes numOrados para calcular el número de grados b. Se solicita el número de radianes c. Se lee el dato en la variable radianes d. Se solicita el número de grados e. Se lee el dato en la variable grados E Se calcula el numero de grados y el número de radianes g Se imprimen los datos de salida h. Fin del método principal Luego se tiene el fin de la clase y el fin del :algoritmo.

k

n este momento se recomienda ir al punta de ejercicios resueltas, estudiar lgu nos ejemplos y resolver otros de Iras ejerdc-ios propuestos.

3.5 Ejercicios resueltas Ejercicio 3.5.1 Elaborar un algoritmo para calcular el área de un triángulo. Se requiere imprimir como salida el área del triángulo. Los datos disponibles para leer como entrada son la base y la altura del triángulo. El área se calcula: Ares Base x Altura Diseño del algoritmo (Primen, hágalo im.ted....después compare lo solución)

Algoritmo MEA TRIANGL/1,0 Clase AreaTriangelei 1. Método principal a. Declaraciones Variables arce, base, altura: Real O. SOliCitar RaSe y Altura C. Leer base, altura d. Calcular ares - (tase • altura) / e. Imprimir oree f. Fin método principal Fin Clase AreaTriangelci Fin

2


La

seeuencieción

89

una clase; la Clase AreaTrianguloi misma que termina con Fin Clase AreaTnangulot. La Clase AreaTriarigulot tiene un solo método; el Método principal el cual tiene las siguientes acciones: a. Se declaran las variables. base para leer y manejar la base del triángulo altura para leer r manejar la altura del triángulo. ares para calcular el área. b. Se solicitan los datos base y altura c. Se leen los datos en base y altura d. Se calcula el Úrea con la expresión: (basealtura)/ 2 Nota: En este iriso sólo se necesita un cálculo e. Se imprime el dato obtenido atea f. Fin del método Luego se tiene el fin de la clase v el fin del algoritmo.

Elercicio 3.5.2 Elaborar un algoritmo para calcular el promedio de calificaciones de un estudiante. Los datos disponibles para lectura son el nombre. calificación 1, calificación 2. calificación y 4; de cada una de Los cuatro exámenes presentados. La itifOrMaCiéel que se r debe imprimir es el Nombre v el promedio de las calificaciones. El promedio se obtiene sumando las cuatro calificaciones y dividiendo la suma entre 4. (Primero hágalo usted....despnés compare la solución)

Algoritmo CALCULA PROMEDIO DE UN ALUMNO Clase Alumno! 1. Método principal a. Declaraciones Variables nombreAlum; Cadena califl, calif2, califa, calif4, promedio: Real b. Solicitar Nombre del alumno, calificaciones 1,2,3,4 c. Leer nombreAlum, califf, calif2, califa, calif4 d. Calcular promedio = Icalifitcalif2+califa.calif41/4 e. Imprimir nombreAlum, promedio f. Fin Método principal Fin Clase Alumno) Fin

FI algoritmo tiene una clase; la Clase Alumnos misma que termina con Fin Clase Alumnos.


62 Matiactologia dale Prograinemón LMentaua a Osains

La Clase Alumnos tiene un solo método; el Método principal el cual tiene las siguientes acciones: a. Se declaran las variables: nombreAlum para leer y manejar el nombre del alumno, calif2, califa, rabí,' para leer las cuatro calificaciones. promedio para calcular el promedio. b. Se solicitan los datos nombre del alumno, y cuatro calificaciones c. Se leen el nombre del alumno y las cuatro calificaciones d. Se calcula el promedio final e. Se imprimen los datas nombreAlum y promedio f. Fin del método principal Luego se tiene el fin de la clase y el fin del algoritmo. Ejercicio 3.5.3 Elaborar un algoritmo que calcule e imprima el precio de venta de un artículo. Se tienen los datos Descripción del articulo v Costo de producción. El precio de venta se calcula añadiéndole al costo 120% como utilidad. y 55% de impuesto. (Primero hágalo usted....después compare la solución)

Algoritmo PRECIO DE VENTA Clase PrecioArticulo1 1. Método principal a. Declaraciones Variables descripcion: Cadena costo, precioVta: Real b. Solicitar Descripción del articulo, Costo c. Leer descripcion, Costo d. Calcular precioVta = costo + (costo*1.2) + ((costo+(costo.1.2))*0.15) e. Imprimir descripcion, precioVta f. Fin Método principal Fin Clase PrecioArticulol Fin

El algoritmo tiene una clase; la Clase PrecioArticuloi misma que termina con Fin Clase FrecioArticulos. La Clase PrecioArticulos tiene un solo método: el Método principal el cual tiene las siguientes acciones: a. Se declaran las variables descripcion para leer y manejar la descripción. costo para leer el costo del artículo


secuenciacion B3

b. c. d. e. f.

precios/tu para calcular el pillado de venta Se solicitan los datos DescripciOn del artículo y Costo Se leen las datos Se calcula el precio de venta Se imprimen los datos descripcion y precioVta }In del método principal

Luego se tiene el lin de la elatie y el fin del algoritmo . En el CD anexo; para el capitulo;;. se encuentran las ejercicios resueltos: Ejercicio 3.5.4 Calcula la hipotenusa de un triángulo rectángulo Ejercicio 3.5.5 Convierte temperaturas Fahrenheit Ejercicio 3.5.6 Calcula el volumen de un cilindro Ejercicio 3.5.7 Calcula el tamaño de un ángulo Ejercicio 3.5.5 Calcula el cateto 11 de un triángulo rectángulo Ejercicio 3.5.9 Realiza cálculos iogarlunicus Ejercicio 3.5.10 Realiza cálculos logaritmicos ime E¡erci

s propuestos

1. Elitboni r orlo algí, rii mi) que calcule e imprima el costo de producción de un articulo, teniendo como datos la descripción y ek número de unidades producidas. El costo se calcula multiplicando el número de unidades producidas por un factor de costo de materiales de 3.5 y sumándole al producto un costo fijo de 1O700. a. Elaborar un algoritmo que calcule e imprima el casto de un terreno cuadrado o rectangular, teniendo como datos la anchura y la longitud en metros, y el costo del metro cuadrado. 3 Elaborar un algoritmo que lea una cantidad de horas e imprima su equivalente en minutos, segundos y días. Simalar al del alumno (Ejercicio 3.5.2), con la diferencia de que en lugar del promedio se obtiene una calificación final multiplicando las calificaciones 1,2,3Y 4 por los porcentajes 30. 20, 10 y 40%, respectivamente, y sumando los productos 5. La velocidad de la luz es 300,000 kilómetros por segundo. Elaborar un algoritmo que lea un tiempo en segundos e inápii tira la distancia que recorre en dicho tiempo. O. Hacer un algoritmo que obtenga e imprima el valor de Y a partir de la ecuación Y

+

7X -

solicitando como dato de entrada el valor de X.


64 Metadohne de a PmgrernecsOn Dnentada a abetos

Una temperatura en grados Centígrados (C) se puede convertir a su equivalente Fahrenheit (F) con la fórmula: 9 F = — C -e 5

32

s De Fahrenheit a Centígrados ron la fórmula: C = (F-32) — 9

Elaborar un algoritmo que lea una temperatura en grados centígrados y obtenga e imprima la temperatura Fahrenheit equivalente. K. Elabore un algoritmo que lea un número de pies y calcule e imprima su equivalente

en yardas, pulgadas. centímetros y metros, de acuerdo con las siguientes equivalencias: 1 pie = 12 pulgadas, 1 yarda = 3 pies. m pulgada = 2.54 cm, a metro = ton cm. 9. Elaborar un algoritmo que lea el articulo y su costo; la utilidad es 150% y el impuesto es 1541.; calcular e imprimir articulo, utilidad impuesto y precio de ve nta. ro. Elaborar un algoritmo que lea el radio de un circulo e imprima el área. AREA = ar2 u. Elaborar un algoritmo que lea la cantidad de dólares a comprar y el tipo de cambio en pesos (costo de un dólar en pesos]: calentar e imprimir la cantidad a pagar en pesos por la cantidad de dólares indicada. 12.Elaborar un algoritmo que permita leer valores para X, Y, Z y W; e imprima el valor de F.

b•

13.Elaborar un algoritmo que lea el radio(r) de una esfera, calcule e imprima el volumen y el área. VOLUMEN = 4"-

AREA =

4n r2

14.Elaborar un algoritmo que lea el valor de W e imprima el valor de Z. re2 2 1/27C

15.Elaborar un algoritmo que lea la cantidad de dólares a comprar y el tipo de cambio (costo de un dólar) en: yenes, pesetas, libras esterlinas y marcos; calcular e imprimir la cantidad a pagar en yenes, pesetas, libras esterlinas y mareos. t6. Elaborar un algoritmo que permita leer un valor e imprima el logaritmo natural. el exponencial, el valor absoluto y la míz cuadrada.


La socuenDac.án 85

17. iWaborar mi algoritmo que permita leer el tamaño de un ángulo en radianes e imprima la tangente. cotangente, secante y cosecante. seau

tangente =_ coseno

—R O

cotangente

seno

secante =

coseno 1

cosecante = — seno

18. Elaborar un algoritmo similar al anterior; sólo que el dato que se lee estará dado en grados. tos grados leidos deben convertirse en radianes antes de hacer los cálculos. 19. EkhOrar un algoritmo que permita leer el tamaña de un ángulo en gradas e in-mur/ni el seno y coseno. Los grados leidos deben convertirse en radianes antes de hacer los cálculos. 20- Elaborar un algoritmo que permita leer salares para A y B, e imprima Y, Z y W. Y° 3a2b2

2r

W= 4 2°a (3a2132-1r2;

I 2a

= -

Resumen net capífulo Conceptos rp o debe dominar r-1 La accuenaiaehla Cl Estructural o diseño de ras algoritmo en pseudo-cric' igo 13 Funciones Maternáti,ns (seno. coseno, arco tangente, logaritmo natural, exponencial, elevar a. potencias, raiz emadruda,


La selección

Contenido 4.1 La selección doble ilF•THEN•ELSE) 4.2 Sangrado iindentacióni y etiquetas 4.3 Expresiones lógicas 4.4 If's anidados 4.5 La selección simple 11F-THEN1 4.6 La selección múltiple (SWITCH) 4.7 Ejercicios resueltos Ejercicios propuestos

Objetivo del capitulo En este momenin ya domina la secuenciactán. y domina cómo diseñar algoritmos usando esa estructura de control. El objetivo de este capitulo os que sea capaz de elaborar algoritmos utilizando la estructura de control selección doble (LE.THistSEF, expresionel lógicas simples t>, <, <>,=.1 y complejas UNO, OR, %0R. NOTL la anidad-fin- de IN, la selección simple UF-THEN1 y la selección múltiple ■ SWITCH1.


68 Matorkloga de la Plogramauba Chantada a Oblatos

La se/cecial es una estructura que permite controlar la ejecución de acciones que re quieren de ciertas condiciones para su realización. De acuerdo con dichas condicione se "selecciona" si las acciones se ejecutan o no. En ocasiones se tienen operaciones que son excluyentes, es decir, que sólo debe ejecutarse una o la otra, pero no ambas de manen simultánea; también puede presentarse el caso que se tengan varias opciones de acción En estos casos es necesario utilizar la estructura de control de selección. Para una alejo comprensión del concepto, veamos el siguiente ejemplo.

~Ido de un empleado. Información a producir: Nombre y Sueldo Datos disponibles: Nombre, número de horas trabajadas y cuota por hora Proceso: El sueldo se calcula de la forma siguiente: Si el número de horas trabajadas es mayor que 40, el excedente de 40 se paga a doble de la cuota por hora. En caso de no ser mayor que 40, se paga a la cuota por hon normal. En esta situación, el sueldo se calcula de dos formas distintas: 1. Si es menor o igual que 40: Sueldo = Número de horas trabajadas e cuota por hora 2. Si es mayar que 40: Sueldo . (40 = cuota por hora) + ((número de horas trabajadas - 40) e (cuota por hora a 2)) Por lo tanto, es necesario utilizar la estructura de selección para calcular el Suelde de la primera forma si el número de horas trabajadas es menor o igual que 40, o de segunda en el otro caso. La selección presenta tres formas; SIMPLE, DOBLE, y MULTIPLE. de acuerdo con e número de alternativas de acción, es decir, si hay una, dos D más de dos, respectivamente Primero se estudiará la DOBLE, después la SIMPLE y por último la MULTIPLE. 4.1 La selección doble (IF-THEN-ELSE) Esta estructura de selección permite controlar la ejecución de acciones cuando se tiene' dos opciones alternativas de acción. Y por la naturaleza de éstas. se debe ejecutar una o I, otra, pero no ambas a la vez, es decir, son mutuamente e..cluyentes.


La solacean 69 Formato:

IF condición THEN Acción .( es ) ELSE Acción Os ) ENDIF Ounde:

IF (Si) condición

Identifica la estructura de selección. Es una expresión lógica que denota la situación especifica mediante la comparación de dos operandos para dar un resultado hondearan (falso, verdadero); es decir, si se cumple u no se cumple. En el punto 4.3 Expresiones lógicas se explica en detalle. THEN Entonces ) Indica el curso de acción si se cumple la condición. Acción es j Es la acción a conjunto de acciones en pseuducódigo que se ejecutarán en el bloque correspondiente. ELSE { si no ; Indica el curso de acción cuando nu se cumple la condición. caso contrario) ENDIF indica e] fin de la estructura de selección (del IF). Funcionamiento Anegar al

I F se evalúa la condición: IF cOndiCión

THEN

a) Opción verdadera { THEN) . Si se cumple, se ejecutan» ta(s) acción(es) del THEN y luego salta hasta la siguiente después del ENOIF (fin del IF).

ELSE Acción ( es ) F

Nota: En este ceso alecuto te opción del THEN e trote le del ELSE.

IF condición THEN b) Opción faL5a { ELSE) . Acción ( es1 De lo contrario. salta hacia el ELSE, ejecuta la(s) acción(es), y después salta a la siguiente acción después del ENDIF (fin dei IF).

ELSE Acción(es) ENOIF


70 Mmodologie de la Progrernacon Onereade a Odieede

Aplicando lo anterior al ejemplo de cálculo de sueldo, queda: IF horasTrab <= 40 THEN sueldo = horasTrab • cuotaHora ELSE Sueldo (40'cuotaHora)+((horasTrab-40)•(CeotaHora*2)) ENDIF la condición se plantea comparando h o ra s T r ab (horas trabajadas) con 40,mediante el operador relacional x= "Menor o igual que" (esto se explica con todo detalle dos puntos más adelante -4.3 Expresiones lógicas-). En caso de cumplirse la condición, se ejecutará la acción o acciones de la opción THEN y. de no cumplirse, se ejecutará la acción o acciones de la opción ELSE. A continuación se presenta el algoritmo completo para calcular el sueldo del empleado, considerando el dobleparaclexcedenMde4ohorastrabinadas, Algoritmo CALCULO SUELDO DOBLE Clase Empleado2 1. Método principal a. Declaraciones Variables nombreEmp: Cadena horasTrab: Entero cuotaliors, sueldo: Real b. Solicitar Nombre del empleado, número de horas trabajadas y cuota por hora c. Leer nombreEmp, horasTrab, cuotaHora d. IF horasTrab <= 40 THEN 1. sueldo = horasTrab • cuotaHora e. ELSE 1. sueldo = (40*cuotaMora)+ ((horasTrab-40)•(cuotaHora•2)) f. ENDIF g. Imprimir nombreEmp, sueldo h. Fin Método principal Fin Clase Empleado2 Fin

1 ene una clase; la Clase Empleado2 misma que termina con Fin Clase Empleado2,


LS seieccián 71

La Clase Empleados tiene un solo método; el Método principal el cual tiene las siguientes acciones: a. Se declaran las variables que va Lonocemas. b. Se solicita el Nombre del empleado, número de horas trabajadas y cuota por hora e. Se leen los datos en nombreEmp, horasTrab y [motril-lora. d. Se compara si horasTrab 40, si se cumple, entonces t. Se calcula el Sueldo de la forma simple. e. Si no se cumple (en caso contrario) t. Se calcula el Sueldo considerando horas dobles. f. Finaliza el IV (EN Din g. Se imprime el nombreEmp y el sueldo. h. Fin del método principal [mozo se tiene• el fin de la clase v el fin del al gori t ni G.

Nata: Observe que tanto en el 111111 como en el USE la «ribo de calcular el sueldo está enumerada con el l.srn e4 siguiente punto se expllea por que.

4.2 Sangrado lindentación] y etiquetas as instrucciones u aeeinties de los algoritmos pueden etiquetarse con números y letras, alternativamente, para identificar más fácilmente su orden en los diversos niveles de suhordi n Si vemos el eje 'ripio sine se da n iás adelante, el primer nivel de acciones son los métodos que se etiquetan con números; el primer col.tedo que es el principal se enumera con el el segundo con el 2, y asi sucesivamente. En el siguiente nivel de subordinación, adentro de Iris métodos. las acciones se etiquetan con 'letras. Además, en el ejemplo, en el método principal, las acciones a, e y. d tienen subaccione%s, las cuales se jerarquizan dejando una samp-ia y se etiquetan con números. Y así, al haber otro nivel de subordinación, las are ares se vuelven a etiquetar con letras, para usar alternativamente números. letras. números, letras y asi sucesivamente. Con base en lo anterior, la estructura que se tendría seria la siguiente: Algoritmo EJEMPLO SANGBADOWiDENTACION1 Y ETIQUETAS Ciase Nomelase 1, Método principal a. Acción A 1, Acción Al 2. Acción A2 E. Acción B C. Acción C 1. Acción Cl d. Acción D 1. Acción Di


72 Metnoologia de la Programación Orientada a asimos

a. Acción D1A b. Acción D1B 2. Acción D2 a. Acción D2A 3. Acción D3 e. Acción E f. Fin Método principal 2. Método dos() a. Acción A b. Acción 8 c. Fin Método dos 3. Método tres() a. Acción A b. Acción 13 c. Acción C d. Fin Método tres Fin NomClase Fin Como podemos ver, la jerarquía v la sulmrdinación se denotan dejando sangrados y etiquetados con números y letras, alternativamente, en los diferentes niveles .

Nieta A algunos maestros no les gusta usar etiquetas para enumerar los pasos de los algoritmos, yn considero que es muy bueno para personas que recen se están formando porque da una mayor disciplina a la persona y un orden más emenclible a los algoritmos. una vea que la persona sabe programar. podrá o no usar etiquetas. En el presente libro se recomienda el uso de las etiquetas. pero sl desea, puede onsitirlds.En el Apendice D (Algoritmos sin usar etiquetas-1.st presentan algunos algoritmos sin usar etiquetas.

Sin embargo, estimado maestro, si está utilizando este libro torno texto, es conveniente que utilice los ejemplos como están planteados en el libro, es decir, con etiquetas; porque si usted explica los algoritmos sin etiquetas, y luego cuando los alumnos estudien el libro v vean los algoritmos con etiquetas, seguramente les causará confusión, y en consecuencia, la utilidad del libro podria ser limitada.

4.3 Expresiones lógicas Sirven para plantear condiciones 0 comparaciones v dan momo resultado un valor boolea n o verdadero o falso, es decir, se e. o no se cumple la condición. Se pueden clasificar en simples y complejas.


La salprciAr 73

Expresiones lógicas simples forman relacionando operan dos. variables y/o constantes mediante operadores relacionales. de la forma siguiente: Expresión lógica simple = Operando]. Operador relacional Operandoa i'1,171de: Operando].. Operando2 Son variables o valores constantes de algún tipo de datos Entero, Real, Cadena, etcétera. En una expresión. ambos operandos deben ser del mismo tipo de dato. Operador relacional Cualquiera de los siguientes: Operadores relacionales • • >.

<>

Significado Menor que Mayor que Menor o igual que Mayor o igual que Igual a Diferente de

n <> z 5 n z<=5 y=z nombre = SOCORRO AMAN MALDONADO' Como va mencionarnos, los posibles resultados para cada una de las expresiones lógicas son. verdadero o falso. Expresiones lógicas complejas Se forman relacionando operandos booleanos mediante operadores lógicos, como sigue:

Expresión lógica compleja Operando booleariot operador lógico Operando bouleano2 f tunde :


74 Metradológia de la Progrernacion Oneraada a apene

Operando booleanot, Operando bonleanoa operador lógico

Son expresiones lógicas que proporcionan un valor veniadero(V) o falso (F). Cualquiera de los siguientes: AND, OR, XOR, NOT.

AND

Relaciona dos operandos booleanos. Proporciona un valor verdadero (V), si los dos san verdaderos(V); en caso contrario da un resultad., falso I EL

Nota Para w, mejor tratamiento del tema, se ha decidido incluir en las tablas de valer y para los valores ven:ladean, sin embarga los lenguajes de programación no emiten este valor como tal, sino una T, que es La sigla de la palabra inglesa Trae, que en español significa verdad.

Si se hace la suposición de que EXP1 y EXP2 son expresiones buoleanas y se plantea la expresión:

( EXP 1) AND ( EXP2)

Proporciona las combinaciones de resultados mostrados en la siguiente tabla:

EXP1

EXP2

( EXPI ) AND lEXP2I

V V

V

V F

F F

F V F

y F

Una escue a aplica dos exámenes a sus aspirantes, por lo que cada uno de ellos obtiene dos calificaciones denotadas como et y ca. El aspirante que obtenga calificaciones mayores que So en ambos exámenes es aceptado; en caso contrario es rechazado. IF (c1 >= 80)AND(c2 >= 80) TREN Imprimir "Aceptado" ELSE Imprimar "Rechazado" ENDIF

OR Relaciona dos operando booleanos. Proporciona un valor verdadero (VI si uno de lus dos es verdadero (V); en caso contrario da un resultado falsa (FI. En la siguiente tabla se presentan las posibles combinaciones:


La solección 75

EXP 1 V V F F

(EXPI ) DR (EXP2).

EXF2 V F V F

:

V V V F

Una escue a aplica dos exámenes a sus aspirantes, por lo que cada uno de ellos obtiene dos calificaciones denotadas como ct v c2. El aspirante que obtenga una calificación mayor que qo en cualquiera de los exámenes es aceptado; en caso contrario es rechazado. IF (ct s= 90)D11(c2 '= 90) TREN Imprimir "Aceptado" ELSE Imprimir "Rechazado" ENOIF XOR Relaciona dos operandos boolearms. Proporciona un resultado verdadero CV) si uno de los dos es verdadera (Vi, pero no ambos; en caso contrario da un valor falso (FI. En la siguiente tabla se presentan las posibles cumbiliNC i orles.

EXP I

EXP2

1 ExP 1 1 XeR ( EXP2 )

V

V

V r r

y

F y y

r

r

54ria Uña empresa aplica dos exámuiLes n sus aspirantes a ingresar como trabajadores, por lo que cada uno de ellos obtiene dos calificaciones denotadas como ct y ea. El aspirante que obtenga loa en cualquiera de los exámenes, pero mi en ambos, es aceptado: en caso .2ontrario es rechazado. IF (el = 100)XDA(G2 = 10E9 TREN Imprimir "Aceptado' ELSE Imprimir "Rechazado" ENDIF


76

MITtnlulopi.

R-rigrernannn ()mentada e Ofiletar.

Neta: Aunque siena ilógico rechazar a quien haya obtenido 100 en ambos exámenes, supongamos que si obtiene loa en ambos, eJ aspirante le queda grande al puesta; esto provocaría que no desempeñe • su usias j

NOT

Este operador relaciona sólo un operando booleano y da corno resultado un valor opuesto al que tenga el operando. En la siguiente tahld se presentan las posibles combinaciones. CCP

NollEXP)

n umno ene una calificación final (calFin) y se desea imprimir el resultado de aprobado si la calificación es igual o mayor que 70; o bien, reprobado en caso contrario. Solución sin usar NOT: IF calFin 5= 70 TREN Imprimir "Aprobado' ELSE Imprimir "Reprobado" ENDIF Solución usando NOT: IF NOT(calFin ,—. 70) TNEN Imprimir "Reprobado" ELSE Imprimir "Aprobado" ENOJE

Noca: II operador lógico NOT sirve para cambiar el resultado de una expresión lógica.

Presentamos el orden de precedencia de los operadores relacionales y lógie m>. 1. 2. 3. 4.

Parentem NOT ANO OR , XOR

5, 5, 5, =, 5=1

1 1


sioecoin 77

4.4 IF's anidados Una estructura de selección f lF) puede tener anidada a otra y ésta a otra, y así sucesivamente. ejemplo:

IF condición TREN IF condición TREN Acción(es) ELSE Acción(es) ENDIF ELSE IF condición TREN Acción(es) ELSE Acción(es) ENDIF ENDIF Se tiene un I F principal, el cual tiene anidado en el THEN un IF; mismo que tiene su propio THEN, ELSE y ENDIF. Por el ELSE también hay un IF anidado que contiene su THEN, ELSE y ENDIF. Otro ejemplo de anidación seria el caso de tener una instrucción simple por el THEN y un IF por el ELSE, la estructura quedada:

IF condición THEN AcciÓn(eS) ELSE IF condición THEN Acción(es) ELSE Acción(es) ENDIF ENDIF Vemos que se tiene el THEN donde no lleva I F anidado, mientras que por el ELSE se tiene el IF anidado. Otra alternativa de anidación es el caso que se tenga un IF anidado por el THEN, mientras que por el ELSE no se tiene I F anidado, el esqueleto de la estructura es:

IF condición THEN IF condición THEN Acción(es) ELSE Acción(eS) ENDIF ELSE


72 Isieladelogia de le Fruir ernecidn Orlencada e dilemas

Acción(es) ENDIF

Era mar un algoritmo similar al anterior de CALCULO SUELDO DOBLE, pero ahora tornando en cuenta que se tiene otni alternativa: Las horas que exceden de go se pagan a l triple de ka cuota por hora. A continuación se presenta el algoritmo:

(Primera hágala ustell...ilespués compare la solución) Algoritmo CALCULO SUELDO TRIPLE Clase Emplead03 1. Método principal a. DeclaracloneS Variables nombreEmp: Cadena herasTrab: Entero cuotaHora, sueldo: Real h. Solicitar Nombre del empleado, número de horas trabajadas y CuOta por hora c. Leer nombreEmp, horasTrab, cuotaRera d. IF herasTrab <= 40 TREN 1. sueldo = horasTrab • cuetahora e. ELSE 1. IF horasTrab s= SO THEN a. sueldo=l40•cuotaHoral+ 1{horasTrab-40}"ScuotaHora•2)l 2. ELSE a. sueldo=(40•cuotaHoralf(10•cuotahora•2}+ ((horasTrab-50)"(cuotaHoraf3)) 3. ENDIF f. ENDIF p. Imprimí: nombreEmp, sueldo h. Fin Matado principal Fin Clase Empleado3 Fin

e2g:Mb Fn el Mételo ptincipal de La Clase Empleado3, se tienen las acciones: Los pasos a. h ye se plantean igual al algoritmo para el Cálculo del sueldo doble, lo diferente son los siguientes pasos: d. Se compara si hunisTrah<=4n si es así, entonces


ab Mctiodólnia da la Programación Orientada a Clojetos

b) Si no se cumple, salta hasta después del El4D I F. es decir, no hace nada.

lgm .. en ig oa con el mismo problema de Mudo del sueldo, ahora se otorga un incentivo de 5% del sueldo, si el empleada trabajó mas de go horas: es decir, al sueldo se le agrega 5% del misma sueldo. A continuación se tiene el algoritmo: Algoritmo CALCULO SUELDO CON INCENTIVO Clase Empleado4 1. Itlet ocio principal a. Paolaraciones Variables nombreEmp: Cadena horasTrab: Entero cuotaHora, sueldo: Real b. Solicitar Hombre del empleado, número de horas trabajadas y cuota por hora c. Leer nombreEmp, horasTrab, cuotellora d. sueldo = horasTrab • cuotal-lora e. 1F horasTrab .> 40 THEN 1. sueldo = suelde + [sueldo * 0.05) f. ENDIF g. Imprimir nombreEmp, sueldo h. Fin Método principal Fin Clase EmpIeado4 Fin Como se puede ver, una vez calculado el sueldo se veralca si trabajó tnáa de 41.] liaras, si es mi, se le adiciona 5% del mismo sueldo. (Nótese que aqui no a parece otra alternativa). ~oeste momento se recomienda ir al punto de ejercicios resueltos, estudiar algunos ejemplos y resolver otros de los ejercicios propuestos para aplicar el I F 4.6 Le selección múltiple (SWITCH) Esta estructura de selección permite controlar la ejecución de acciones cuando se tienen más de dos opciones alternativas de acción. Formato:

SWITCH Selector 1: Acciontes) 2: Accion(es)


La selección 81 3: AcCión(es) 4: Acción(es) DEFAULT Acción(es) ENDSWITCH bonde: SWITCH Selector

Identifica la estructura de selección múltiple. Es una variable de tipo Entero, carácter, o algún tipo de dato ordinal (que esté constituido por un conjunto ordenado y finito de valores), la que traerá un valor que indicará el caso a ejecutar. 1,2,3,4 Son las etiquetas que identifican cada caso de acuerdo con los valores que puede tomar Selector. Acción (es)) Es una acción o conjunto de acciones en pseudocódigo. DEFAULT Si Selector no toma ninguno de los valores colocados, se va por esta opción de DEFAULT. ENDSWITCH Indica el fin de la estructura SWITCH. Funcionamiento Si Selector es t: Se ejecuta(n) la(s) acriol(es) del caso uno y luego se va hasta después del ENDSWITCH. Si Selector es 2: Se ejecuta(n) la(s) acción(es) del caso dos y luego se va hasta después del ENDSWITCH. Si Selector es 3: Se ejecuta(n)

la(s) acción(es) del caso tres y luego se va hasta después del ENDSWITCH.

Si Selector es 4: Se ejecuta(n) la(s) acción(es) del caso cuatro y luego se va hasta después del END , SWITCH. Si no se cumple ninguno de los casos anteriores, se ejecutaUU la(s) acción(es) de la opción DEFAULT y luego se va después del ENDSWITCH . Nota: El DEFAULT es Opcional, en ceso de no estar presente le estructura quedará asi SWITCH Selector 1: Acción ( es) 2: Acción(es) es ) 3: Acción( es I 4: Acción ( es ) ENDSWITCH


82 Meradalowa de la Fragranlawen Orteraaaa a ateos

Y, si Selector no toma ninguno de los posibles valores, simplemente se salta hast después de ENDSWITCH, es decir, no hace nada.

Elan orar ñn~I a goritmo que lea el número de día (un valor entre 1 y 7); e imprima domino' si es 1, lunes si es 2, ...., sábado si es 7. Algoritmo DICE DIA Clase DiceDial 1. Método principal a. Declaraciones Variables numDia: Entero b. Solicitar Número de día c. Leer numDia d. SWITCH numDia 1:Imprimir 'DOMINGO" 2: Imprimir "LUNES" 3: Imprimir 'MARTES" 4: Imprimir "MIERCOLES" 5: Imprimir "JUEVES» 6: Imprimir "VIERNES" 7: Imprimir "SABADO" e. DEFAuLT 1, Imprimir 'NO ESTA EN EL RANGO DE 1 A 7" f. ENDSWITCH g. Fin Método principal Fin Clase DiceDial Fin

N

principal de la Clase DiceDial, se tienen las acciones:

a. Se declara la variable para leer el número de dia b. Se solicita el número de dia c. Se lee en numDia d. Se plantea la estructura de selección SWITCH Si numDia es t se imprime 'DOMINGO" Si numllia es 2 se imprime "LUNES" Si numDia es 3 se imprime "MARTES" Si numDia es 4 se imprime "MIERCOLES" Si nutrillia es 5 se imprime "JUEVES" Si numDia es 6 se imprime "VIERNES" Si numDia es 7 se imprime "SABADO"


La serecr.on

83

e. Si no toma (DEFAULT) ningún valor de los anteriores Imprime "NO ESTA EN EL RANGO DE I A 7" f. Fin del SWITCH g. Fin del método principal Luego se tiene el fin de la clase y el fin del algoritmo.

Otros aspectos que la estructura SWITCH permite: a) Colocar corno etiquetas de casos a más de un valor, podremos hacerlo como sigue:

Algoritmo DICE PAR O IMPAR Clase DiceParImpar 1. Método principal a. Declaraciones Variables num: Entero b. Solicitar Número c. Leer num

d. SWITCH num 432,4,6,B: Imprimir num, 'es par" 1,3,5,7,9: Imprimir num, "es impar' e. DEFAULT 1. Imprimir num, "No esta en el rango 0-9" f. ENDSWITCH g. Fin Método principal Fin Clase DiceParImpar Fin

Ene o principal de la Clase DiceParImpar, se tienen las acciones:

Se declara la variable para leer el número Se solicita el número Se lee el número Se plantea la selección SlATItH Si num es O, 2, 4, 6 ó 8 imprime "es par" Si num es 1, 3, 5, 7 ó 9 imprime "es impar" e. Si no {DEFAULT) toma ningún valor de los anteriores Imprime "No esta en el rango o-9" f. Fin del SWITCH g, Fin del método principal

a. b. c. d.

Luego se tiene el fin de la clase y el fin del algoritmo. b) O bien, se pueden utilizar tipos de datos carácter, podremos hacerlo como sigue:


S4 Metodalogo de: o ProgramacAn aclamada a Objetos

Algoritmo DICE SI ES VOCAL O NO Clase DiceVocal 1. Método principal a. Declaraciones Variables cal.; Carácter 6. Solicitar Carácter c. Leer car d. SWITCH car

'a',.e. ,'i','o','u': Imprimir car, 'Es una vocal minúscula' 'A','E",'I','Cl','U': Imprimir car, 'Es una vocal mayúscula' e. DEFAULT 1. Imprimir car, 'No es vocal" f. ENOSWITCH g. Fin Método principal Fin Clase DiceVocal Fin

En e

o principal de la Clase DiceVocal, se tienen las acciones:

a. Se declara la variable para leer el carácter b. Se solicita el carácter c, Se lee el carácter d. Se plantea la selección SWITCH

Si car está entre. Imprime "ES una vocal minúscula" Si car está entre Imprime "Es bula vocal mayúscula" e. Si no (DEFAULT/ s. Imprime -No es vocal" f. Fin del SWITCH g. Fin del método principal Luego se tiene el fin de la clase y el fin del algoritmo. este momee tu se recomienda ir al punto de ejercicios resueltos, estudiar isaikunos ejemplos v resolver otros de los ejercicios propuestos para aplicar el SWITCH.


La salecc,en 85 4.7 Ejercidos resueltos

A continuación se presentan ejercicios resueltos., se le recomienda que primero haga el algoritmo, y después compare su sollleibll con la del libra. En esta parte hay ejercicios donde se utilizan las tres estructuras de selección. En los puntos anteriores, al estudiar cada estructura de selección se recomienda venir a esta parte y practicar con ejercicios correspondientes a la estructura que esté estudiando, de manera que a esta parte va a venir en varias ocasiones. Ejercicio 4.7.1 Elaborar un algoritmo para calcular el promedio de calificaciones de un estudiante. Los datos disponibles para lectura son el nombre, calificación 1, calificación 2, calificación 3 y calificación 4; de cada uno de los cuatro exámenes presentados. La información que se debe imprimir es el Nombre, el promedio de las calificaciones y un comentario de "Aprobado" si obtiene 6o o más, o "Reprobado" en caso contraa-io. El promedio se obtiene sumando las cuatro calificaciones y dividiendo la suma entre 4. Utilizar IF-THEN-ELSE. (Primera hágalc, Irsted...después com pece la solución)

Algoritmo CALCULA PROMEDIO DE UN ALUMNO Clase Alumno2 t. Método principal a. Declaraciones Variables nombreAlum: Cadena callfl, calif2, califa, calif4, promedio: Real observación: Cadena b, Solicitar Hombre del alumno, calificación 1,2,3 y 4 c. Leer nombreAlum, califl, califa, calif3, cante d. Calcular promedio = (califl+calif2+calif3+calif4)/4 e. LE promedio e= 88 TREN 1. observacion = 'Aprobado" f. ELSE 1. observacion = 'Reprobado' g. ENOIF h. Imprimir nombreAlum, promedio, observacion i. Fin Método principal Fin Clase Alumno2 Fin

ION

cip41 de la Clase Alumno2, se tienen las acciones:

a. Se declaran las variables 13. Se Solicitan el nombre' las cuatro calificaciones c Se leen los datos en las variables correspondientes


86 Manndolugis de la PrugrarnacAn Orientdda a DDiezds

d. Sc calcula el promedio e. Si compara si promedio >= 6o si se cumple, entonces t. En la variable observacion se coloca el valor -Aprobado" f. Si no se cumple t. En la variable observacion se coloca el valor "Reprobado" g. Fin del IF h. Se imprimen los datos nombreEmp. promedio, observacion i. Fin del método principal Luego se tiene el fin de la clase y el fin del algoritmo.

Ejercicio 4.7.2 Elaborar un algoritmo que lea dos números y que calcule e imprima el mayor. Se supon que son números diferentes. Utilizar 1F-THEN-ELSE.

(Primero hayal(' usted...después compare la solución) Algoritmo MAYOR 2 NUMEROS Clase Mayor2Numeros 1. Método principal a. Declaraciones Variables

a, b: Entero b. Solicitar número 1, número 2 c. Leer a, b d. IF a > b THEN 1. Imprimir a e. ELSE 1. Imprimir b f. ENOIF g. Fin Método principal Fin Clase Mayor2Numeros Fin

En el

o principal de la Clase Mayor2Numeros, se tienen las acciones:

a. Se declaran las variables ti. Solicitar los dos números c. Se leen en las variables a y b d. Se compara si a > b si es asi, entonces 1. Se imprime a como el mayor e. Si no (en caso contraria) 1. Se imprime b como el mayor


La seleccion

87

i. Fln del IF g. Fin del método principal

Luego se tiene el fin de la clase y el fin del algoritmo. Ejercicio 4.7.3 Elaborar un algoritmo que lea tres números y que calcule e imprima el mayor. te supone que son números di ¡creo lats. Eate problema lo vamos a solucionar de tres formas distintas. Primer método de solución; Utilizando IF-THEN-ELSE y expresiones lógicas simples. (Primero hágoin usted...después compare lu solución) Algoritmo MAYOR 3 liUME805. Clase MayorsHamerosl 1. Metano principal a. Declaraciones Variables a, b, c; Entere b. Solicitar número 1, número 2, número c. Leer a, b, c d. IF a b THEN 1. IF a u a THEN a. Imprimir e 2. ELSE a. Imprimir c S. ENDIF e. ELSE 1. IF b > c THEN a. Imprimir b 2. ELSE a. Imprimir C 3. ENDIF f. ENDIF g. Fin Método principal Fin Clase May0r3Numerosl Fin

En41 1 1101 o* pnacipal de la Clase liayoraNurnerost, se tienen las acciones: a. Se declaran las variables b. Se solicitan los tres números e. Se leen en a, b ye


La oseCCoso B7

f. Fin del IF g. Fin dei método principal Luego se tiene el fin de la clase y el fin del algoritmo.

Ejercicio 4.7.3 Elaborar un algoritmo que lea tres números y que calcule e imprima el mayor. Se supone que son números diferentes. Este problema lo vainas a solucionar de tres formas distintas. Primer método de solución: Utilizando Ll,..THEN-.ELSE y expresiones lógicas simples.

(Primen, hóyalo usted—después campare la satación) Algoritmo MAYOR 3 NUMEROS Clase Mayor3Numeros1 1. Método principal a. Declaraciones Variables a, b, c: Entero h. Solicitar número 1, número 2, número 3 c. Leer a, b, d. IF a a b TREN 1. IF a> c TSEN a. Imprimir a

2. ELSE a. Imprimir c 3. ENDIF e. ELSE 1. IF b a c THEN a. Imprimir b 2. ELSE a. Imprimir c 3. ENDIF f. ENDIF g. Fin Método principal Fin Clase Mayor3Númercs1 Fin Explican:1M: el Método raTncipal de la Clase Mayor3Numerosi, se tienen las acciones:

a. Se declaran las variables ti. 5e Solicitan los tres números c. Se leen en a. b v c


MI Mei...lulo-0a de la FlfrIlralrainiGra OriarlLaCia a Objetos d. Se compara si a a h si es así, entonces 1. Se compara si a > c si es asi, entonces a. Se imprime a como el mayor 2. Si no a. Se imprime e como el mayor 3. Fin de] iF e. Si no 1. Se compara si h a e entonces a Se imprime b corno el Mayor 2. Si no a. Se imprime e como el mayor 3. Fin del 1F f. Fin del /F g. Fin del método principal Luego se tiene el fin de la clase y el fin del algoritmo. Segundo método de solución: Utilizando IF-THEN y AND. (Primera hdgceln 11.1W...después compare Ict sokición .algoritmo MAYOR 3 NLINER03 Clase Mayor3Numeros2 1. Método principal a. Declaraciones Variables a, h, c: Entero b. Solicitar número 1, número 2, mimara 3 c. Leer a, b, o d. IF (a 7 b)AND(a > el TREN 1. Imprimir a e. ENCIF f. IF 0 n a)ANC(b a e) THEN 1. Imprimir b g. ENDIF h. IF (c a a)AND(c n 1:1) TREN 1. Imprimir c 1. ENCIF j. Fin Método principal Fin Clase Mayor3Humeros2 Fin

En é

o pnneipal de la Clase trlayor3Numeros2, se tienen las acciones:

a. Se declaran las variables h. Solicitar los tres números


La selecalin as

c. Se leen los datos en a, h y c. d. Se compara si (a > h) y (a s e) si se cumple, entonces t. Se imprime a como el mayor e. Fin del 1F f. Se compara si (b > a) y (b > si se cumple, entonces 1. Se imprime b como el mayor g. Pin del IF h. Se compara si (e a a) y (e a b) si se cumple, entonces 1. Se imprime e como d mayor i. Fin del IF j. Fin del método principal Luego se. tiene e] fin dela clase y el fin del algoritmo. Tercer método de solución: Utilizando IF-THEN-ELSE y AND. (Primera hágalo itsted...despidés compuse la solución} Algoritmo MAYOR 3 NUMEROS Clase Mayor3Numeros3 1. Método principal e. Declaraciones Variables a, b, c: Entero b. Solicitar número 1, número 2, número 3 c. Leer a, b, c d. IF (a a b)AND(a > o) TREN 1. Imprimir a e. ELSE 1. 1F O a c TREN a. Imprimir b 2. ELSE a. Imprimir 3. ENDIF f, ENDIF g. Fin Método principal Fin Clase Mayor3Numeros3 Fin

4114 •• , En

e

o principal de la Clase Mayor3Numeros3, se tienen las acciones:

a. Se declaran las variables h. Se solicitan los tres números Se leen en abyr d. Se compara si (a 5 hj y (a s c) si se cumple, entonces


SO Motacloiogie oo le Programocion Oneritalle a Qu'ecos 1. Se imprime a como el mayor e. Si no I. Se compara 13 > c si se cumple, entonces a. Se imprime b como el mayor 2. Si no a. Se imprime c como el mayor 3. Fin del IF f. Fin del IF g. Fin del método principal Luego se tiene el fin de la clase y el fin del algoritmo.

Ejercicio 4.7.4 Elabore un algoritmo que lea cuatro números y calcule e imprima el mayor_ Se sanar que son números diferentes. Utilizar IF-THEN-ELSE y AND. (Primero hágalo usted...después compare lo solución) Algoritmo MAYOR 4 NUMEROS Clase Mayor4Numeros1 1. Método principal a. Declaraciones Variables a, b, c, d: Entero b. Solicitar número 1, número 2, número 3, número 4 c. Leer a, b, e, d d. IF (a > b)ANDIa > c}AND(a > d) THEN 1. Imprimir a e. ELSE 1. IF (b > c)AND(b > d) THEN a. Imprimir b 2. ELSE a. IF c > d THEN 1. Imprimir c b. ELSE 1. Imprimir d c. ENDIF 3. ENDIF f. ENDIF g. Fin Método principal Fin Clase Mayor4Numerosl

Fin

plicacidri Fin el lfétodo principal de la Clase Mayor4Numerost, se tienen las acciones:


Le seleccror 91

a. Se declaran las variables 6. Se Solicitan los cuatro números c. Seleenena,b,cyd d. Se compara si (a > b) y (a a c)y(a a di si se cumple, entonces L Se imprime a como el mayor

e. Sino L Seamnparalb,()y(lo>d)sisecurapk%entonces a. Seimprimebconmelmaynr 2. Si no a. Se compara c > d si se cumple, entonces L Se imprime c como el mayor

6. Si no L Se imprime d corno el mayor

c. Fin del IF 3. Fin del IF del 1F

g. Fin del método principal Luego se tiene el fin de la clase y el fin del algoritmo. Ejercicio 4.7.5 Elabore un algoritmo que lea cinco números y calcule e imprima el mayor. Se supone que

son números diferentes. Restricciones: No usar ELSE ni AND. (Primero hágalo usted...después compare la solución)

Algoritmo MAYOR 5 NUMEROS Clase Mayor5Humerosl 1. Método principal a. Declaraciones Variables a, b, c, d, e, mayor: Entero b. Solicitar número 1, número 2, número 3, número 4, número 5 c. Leer a, b, c, d, e d. mayor = a e. IP b e mayor THEN 1. mayor = b f. ENDIF g. IF c > mayor THEN 1. mayor - c h. ENDIF i. IF d > mayor THEN 1. mayor = d 1 ENDIF k. IF e > mayor THEN


92

MkAnclulogie de la PrograrnaciOn ❑nenrede a Cbleti.

1. mayor = e 1. ENDtF m. Imprimir mayor n. Fin Método principal Fin Clase Mayor5Numerosl Fin

Ene

-pnecipal de la Clase Mayor5Numerosi, se tienen las acciones:

a. Se declaran las variables b. Se solicitan los cinco números c. Se leen en a, b, c, d y e d. Se coloca en mayor el valor de a e. Se compara si b > mayor, si se cumple, entonces 1. Se coloca en mayor el valor de b f. Fin del g. Se compara si e o mayor, si se cumple, entonces 1. Se coloca en mayor el valor de c h. Fin del IF i. Se compara si d > mayor, si se cumple. entonces 1. Se coloca en mayor el valor de d j. Fin del IF k. Se compara st e > mayor si se cumple, entonces t. Se coloca en mayor el valor de e I. Fin del IF m.Se imprime mayor que contiene el número mayor n. Fin del método principal Luego se tiene el fin de la clase y el fin del algoritmo. En el C D anexo; para el capitulo 4. se encuentran los ejercicios resueltos: Ejercicio 4.7.6 Ejercicio 4.7.7 Ejercicio 4.7.8 Ejercicio 4.7.9 Ejercicio 4.7.10 Ejercicio 4.7.11 Ejercicio 4.7.12 Ejercicio 4.7.13

Lee el tamaño de un ángulo e imprime el tipo que es Lee dos ángulos e imprime si son iguales o diferentes Realiza cálculos logarienicus de un ángulo Calcula equivalencias de pies a yardas y otras Realiza cálculos con la segunda ley de Newton Realiza cálculos crin la ecuación cuadrática Lee los ángulos e imprime el tipa de niangulo Realiza cálculos de un cliente


La seler,An 93

: Elabore un algoritmo para calcular e imprimir el precio de un terreno del cual se tienen los siguientes datas: largo, ancho y precio por metro cuadrado. Si el terreno tiene más de 400 metros cuadrados se hace un descuento de lo %. Igual al ejercicio anterior, sólo que si el terreno tiene más de soo metros cuadrados el descuento es de 17 %y si tiene más de 1000 el descuento es de 25%. s Elabore un algoritmo para calcular e imprimir los valores de X y Y, teniendo amo entrada el valor de X y calculando el de Y de acuerdo con las siguientes condiciones Si X < o entonces Y = 3X + Si X >. o entonces Y +6 4. Elabore un algoritmo que imprima el costo de un pedido de un articulo del cual se tiene la descripción, la cantidad pedida y e] precio unitario. Sí la cantidad pedida excede de 50 unidades, se hace un descuento de 15% . 5. Un cliente ordena cierta cantidad de hojas de hielo seco, viguetas y armazones; las hojas de hielo seco tienen 20% de descuento y las viguetas 11.5%. Los datos que se tienen por cada tipo de artículo son: la cantidad pedida y el precio unitario. Además, si se paga de contado todo tiene un descuento de 7%. Elaborar un algoritmo que calcule e imprima el costo total de la orden, tanto para el pago de contado como para el caso de pago de crédito. 6. Igual que el ejercicio 4.7.13 anterior. pero además: si la cantidad de hojas de hielo seco solicitada es mayor que so, se hace un descuento adicional de 5%; en caso de ser mayor que loa el descuento adicional es de to %.

-t. Elaborar un algoritmo que lea los datos de un estudiante: Nombre v tres calificaciones parciales e imprimir el Nombre y la calificación final de acuerdo a lo siguiente: para aprobar el curso, debe tener 70 o más en cada una de las tres calificaciones, la calificación final será el promedio. En caso de haber reprobado uno n más exámenes ordinarios, la calificación final será NA (NO ACREDITADO). S. De acuerdo con la clase de sus ángulos, los triángulos se clasifican en: Rectángulo Obtusángulo Acutángulo

tiene un ángulo recto (igual a 901 tiene un ángulo obtuso (mayor que 90° pero menor que 'Sol los tres ángulos son agudos (menores que 901

Elaborar un algoritmo que permita leer el tamaño de los tres ángulos (A,13.C) de un triángulo e imprima qué tipo es. o. En un almacén de venta de trajes, si compra uno se hace el 5o% de descuento, si compra 2, el 55%, si compra 3, el 60% y si compra más de 3 el 65%. Elaborar un algoritmo que lea la cantidad de trajes y el precio unitario (todos tienen el mismo precio) e Imprima el subtotal a pagar, e] descuento y el total a pagar.


94 Mecndulogia

de t9

Prugnsmao-On Orventaaa a flbistos

lo. Dos triángulos son congruentes si tienen la misma forma y tamaño, es decir, s ángulos y lados correspondientes son iguales. Elaborar un algoritmo que lea los tr ángulos y lados de dos triángulos e imprima si son congruentes. Un trapecio es isósceles si sus dos ángulos de la base son iguales. Elaborar un algoritn que lea los ángulos A y B de la base y que imprima si el trapecio es isósceles o no. m. Elaborar un algoritmo que permita leer los datos de un empleado: Nombre, tipo empleado, número de horas trabajadas y cuota que se le paga por hora; calcular imprimir el Sueldo a pagar. Si el empleado es tipo t, se le pagan las horas extra (ml de 40 horas) a 1.5 de la cuota por hora, si es tipo 2, a 2; si es tipo 3, a 2.5; y si es lip 4, a 3 veces la cuota por hora. 13. Se tiene un terreno A cuadrado que mide LADO metros por Fado a un precio COSTO, por metro cuadrado, y se tiene un terreno a rectangular que mide BASE metros d base y ALTURA metros de altura a un COSTOS por metro cuadrado. Elaborar algoritmo que lea los datos de los dos terrenos e imprima cual es el mas barato o s cuestan igual. 14. Elabore un algoritmo que lea el número de mes entre i y 22 y. que imprima el nombra del mes correspondiente: si es 1 "Enero", si es 2 "Febrero",...etcélera.

15. En el hotel Guamuchil se hace un descuento de to% si el diente se hospeda más di

5 días, de 15% si se hospeda más de so días, y del 20% si se hospeda más de 15 días. Elaborar un algoritmo que lea el número de días y el precio diario de la habitación imprima el subtotal a pagar, el descuento y el total a pagar.

16. Elaborar un algoritmo que permita hacer conversiones de temperaturas entre grados Fahrenheit, Celsins. Kehin y Rankine. Primero debe preguntar qué tipo de grados. quiere convertir. Por ejemplo; si se le indica que se desea convertir una temperatura en grados Fahrenheit, debe leer la cantidad de grados, y luego calcular e imprimir su equivalente en grados Celsius, Keivin y Rankine, y. así, debe hacer lo mismo para cadí uno de los otros tipos. Para convertir en Celsius, la temperatura Fahrenheit se le resta 32 y se multiplica por 5/9. Para convertir en Kelvin a los grados Celsius, se le suma 273. Para convertir en Rankine a los grados Fahrenheit se !e suma 460.

17. Elaborar un algoritmo que permita leer los datos de un aspirante a ingresar a la carrera de Ingenieria Industrial y de Sistemas de la Universidad de Sonora: nombre del aspirante, promedio en bachillerato y tipo de bachillerato (1- Físico matemático 2 - etc...5); y que imprima es aceptado si tiene un promedio mayor que go, o hien, s. tiene un promedio entre 8o y go y si cursó bachillerato Físico matemático. En caso di no ser así, imprimir rechazado.

16. Elaborar un algoritmo que permita leer los datos de un automóvil: marca, origen costo; imprimir el impuesto a pagar y el precio de venta incluido el impuesto. Si origen es Alemania, el impuesto es 20%, si es de Japón el impuesto es 3o%, si es di Italia, 15%, y si es de USA. 11%.


La selecc.on 95

1s, Un sistema de ecuaciones lineales ax + by = e dx + ey = f se puede resolver con las fórmulas X-

ce - bf ae-bd

af -cd ae- bd

si (ae- bd), <>

Elaborar un algoritmo que lea los coeficientes a,b,ed,e y f, y que calcule e imprima los valores de X y Y. Si (ae -bd) <> o; debe calcular e imprimir los valores de X y Y, en caso contrario debe imprimir un mensaje que indique que no tiene solución. 20. Elaborar un algoritmo que permita leer el Nombre, tipo de empleado y Sueldo de un empleado; que imprima el incremento de Sueldo y su nuevo Sueldo de acuerdo con lo siguiente: si es tipo de empleado t se le aumentará 5%; si es tipo a se le aumentará 796: si es 3, 9%, si es 4, 12%; y si es 5, 15%. 21. Elaborar un algoritmo que permita leer una letra e imprima si es vocal o si es consonante. 22. Elaborar un algoritmo que permita leer el tamaño de un ángulo en radianes o en grados y que imprima la tangente, secante, cotangente y cosecante. Debe preguntar en qué tiene el tamaño del ángulo y dependiendo de si es en grados o radianes, los cálculos deben hacerse de una u otra forma, según corresponda. 23. Elaborar un algoritmo que permita leer 4 números e imprima el mayor, Debe validar que sean diferentes, es decir, si hay números iguales debe enviar un mensaje de error. 24. Elaborar un algoritmo que permita hacer conversiones entre pesos, ganes, pesetas y marcos. Debe preguntar qué moneda desea convertir; por ejemplo, si indica que yenes, debe leer cuántos yenes comprará y cuánto cuesta un yen en pesos, pesetas y marcos, luego debe imprimir cuánto es en cada una de las monedas. Y así lo hará para cada una de las otras monedas. 25. Una temperatura en grados Centígrados (C) se puede convertir en su equivalente Fahrenheit (F) con la fórmula: 9 F. -C+ 3a 5 De Fahrenheit a Centígrados con la fórmula: C = (F-32)


66

Meaddelogia de ,a

Pragramse.bn Orar tada a Chatee

Elaborar un algoritmo que pregunte qué quiere convertir, si quiere convertir Centígrados; que lea la temperatura en grados Cent igrados y calcule e imprima la temperatura Fahrenheit equivalente. Si quiere convertir Fahrenheit debe hacerlo propio.

Resumen del capítulo Conceptos que debe dominar

3 La selección doble ( I F-TIIEN-ELSE) 3 Esprasiones lógicas <.. simples (a, <, complejas (AND, OR. NOR, NOT) 3 Irs anidados 3 La selección simple (IF-THF.N) 3 La selección múltiple (SWITCH) ~mor.


98 Metodologรญa de la Programaciรณn Orientada a Objetos

La repetidรณn es una estructura que permite controlar la ejecuciรณn de acciones que se deben realizar en mรกs de una ocasiรณn; es decir, se deben repetir. Con esta estructura se forman ciclos repetitivos. La repeticiรณn tiene tres formas: DO...WHILE, FOR y WHILE. La repeticiรณn DO...WHILE permite controlar la ejecuciรณn de acciones en forma repetitiva, mientras la condiciรณn de control del ciclo repetitivo sea verdadera. Formato: DO Acciรณn(es) WHILE condiciรณn

Donde: DO Acciรณn (es) WHILE

condiciรณn

Identifica la estructura como un ciclo repetitivo e indica el inicio del mismo. Son las acciones que se ejecutan dentro del ciclo. Indica el fin del ciclo y significa "mientras" se cumpla la condiciรณn. vuelve al inicio del ciclo DO; en caso contrario, se sale del ciclo DO... WHILE. Es una expresiรณn lรณgica que controla la repeticiรณn del ciclo.

Nota: Este cipo de repeticiรณn se ejecuta de 1-N veces, ya que las acciones del ciclo, se ejecutan por lo menos una vez y se pueden ejecutar cualquier cantidad (N) de veces.

Funcionamiento 1. Llega al DO; entra al ciclo y ejecuta(n) la(s) acciรณn(es). DO Acciรณn(es) WHILE condiciรณn

2. Llega al WHILE, y se evalรบa la condiciรณn. A) Si se cumple, se va hacia el inicio de la estructura DO, lo que significa, volver a ejecutar lo que estรก dentro del DO. DO Acciรณn(es) WHILE

condiciรณn SI


La repetición DO...WHILE 99

B) Si no se cumple, se va a la siguiente acción después del WH I LE; es decir, se sale del ciclo repetitivo. DO Acción(es)

NO WH1LE

condición

Nota: Cabe aclarar que esta estructura originalmente se inventó como DO-UNTIL; hacer lo que está dentro del ciclo, hasta que se cumpla la condición. Sin embargo, el inventor del lenguaje C la implementó como DO...WHILE; es decir, hacer lo que está dentro del ciclo, mientras se cumpla la condición. Y en virtud de que el lenguaje C es la base de C++, Java y seguramente de los lenguajes que se diseñen en el futuro, en este libro la usaremos de esta forma. Si usted desea ver cómo funciona el DO-UNTIL puede hacerlo en el libro "Programación estructurada un enfoque algorítmico" segunda edición, publicado por esta misma editorial y de este mismo autor.

Ejemplo: Elaborar un algoritmo que calcule e imprima el sueldo de varios empleados, cada empleado s.e tratará en forma similar al primer problema que planteamos en el capítulo 3 cuando estudiamos la secuenciación. A continuación se tiene el algoritmo de la solución: Algoritmo CALCULA SUELDOS DE EMPLEADOS Clase Empleados) 1. Método principal a. Declaraciones Variables nombreEmp: Cadena horasTrab: Entero cuotaHora, sueldo: Real desea: Carácter

b. DO 1. Solicitar Nombre, número de horas trabajadas y cuota por hora 2. Leer nombreEmp, horasTrab, cuotaHora 3. Calcular sueldo = horasTrab * cuotaHora 4. Imprimir nombreEmp, sueldo 5. Preguntar "¿Desea procesar otro empleado (S/N)?" 6. Leer desea


La repetición DO...WHILE Contenido 5.1 Contadores y acumuladores 12 Ejercicios resuellos

Ejerekios propuestos

Objetivo del capítulo En el capítulo anterior estudiarnos la selección. Ahora estudiaremos la estructura de control repetición iipo 1)0....WHILE. se tratará la forma de en turr la información en forma de reporte y se revisará el modo de utilizar contadores y ac u m u laderas, cómo ihiener promedios o medias aritméticas al procesar varios elementos, también se aprenderá a obtener el mayor y el menor de un conjunto de datos y a utilizar un ciclo repelilivu anidado dentro de otro, es decir, un DO...VVHILE dentro de otro DO... WHI I E; lógicamente utilizando todas las estructuras aprendidas hasta este momento, además de los conceptos y estructuras nuevas que se presentan en este capítulo_


La repeución DO WHILE 101

5.1 Contadores y acumuladores En ocasiones, en los ciclos repetitivos se necesita contar el número de veces que se procesa algún elemento, o bien, hacer acumulaciones de cantidades para obtener totalizadores. Veamos el siguiente ejemplo: En el problema anterior de sueldos de empleados, es necesario que los datos se impriman en forma de un reporte que tenga el siguiente formato:

NOMBRE

REPORTE DE EMPLEADOS SUELDO

••••••••• •• •••••••N •••• •• ••••••••••••

} Encabezado

99,999.99 99,999.99 — Detalle

•••••••••

••••••••••

TOTAL 999 EMPLEADOS

99,999-99 999,999.99

j_ Total o pie

Como puede observar, el reporte tiene 3 partes: a) La primera parte es el encabezado, que deberá aparecer una sola vez al principio; la primera línea del encabezado es el nombre del reporte, que en este caso es un REPORTE DE EMPLEADOS, la segunda línea son letreros que identifican los datos que aparecerán en el reporte, que en este caso son el NOMBRE y el SUELDO de los empleados. b) La segunda parte es el detalle de cada empleado que aparecerá tantas veces como empleados haya; el conjunto de XXXXXXXX=000000000(XXXXX indica que va un dato cadena de caracteres, el nombre del empleado; y 99,999.99 indica que va un dato de tipo real, el sueldo del empleado. c) La tercera parte es una línea de total o pie del reporte que aparecerá una sola vez al final y tiene como propósito mostrar una estadística o resumen de los datos que aparecen en el detalle del reporte: TOTAL 999 EMPLEADOS

999,99999.

Los 999 indican que va un dato de tipo entero -el total de empleados-; es decir, el número de empleados que están en el reporte; y los 999,999.99, indica que va un dato de tipo real, es un totalizador o acumulador con la suma de los sueldos de todos los empleados. Para el primero se requiere el uso de un contador, y para el segundo, un acumulador. ¿Que es un contador? Una variable de tipo entero que en nuestro ejemplo podría llamarse t ot Empleados que tiene como función contener el número de empleados que se procesan. El contador funciona de la forma siguiente: al principio se inicia con cero; dentro del ciclo se incrementa en i, para así contar a cada empleado procesado. Al final,


102

Matocologia de la Prowarnawan °rentado e Chatos

después del fin del ciclo, se podrá imprimir el contenido del contador, que será el total d empleados procesados. A continuación se muestra el funcionamiento del contador:

totEmpleados = DO Procesar empleado totEmpleados = totEmpleados

1

WHTLE desea - "S' Imprimir totEmpleados ¿Qué es un acumulador? Es una variable de tipo numérico. que en nuestro ejemplo puede ser totSueldos, cuya función es contener la suma de un determinado conjunto de datos, que en el ejemplo está representado por los sueldos. la forma de operar del acumulador es la siguiente: al principio se inicia con cero, dentro del ciclo se incrementa con lo que tenga la variable que contiene el dato a acumular, que en este caso es sueldo; al final, después del fin del ciclo, se podrá imprimir el contenido del acumulador que es el total de la suma, en este caso de sueldos. A continuación se muestra el funcionantineto del acumulador:

totSueldos DO Procesar empleado totSueldos = totSueldos + sueldo

WHILE desea "S" Imprimir totSueldos A continuación se presenta el algoritmo completo:

Algoritmo CALCULA SUELDOS DE EMPLEADOS Clase Empleados2 1. Método principal a. Declaraciones Variables nombreEmp: Cadena horasTrab, totEmpleados: Entero cuotaHora, sueldo, totSueldos: Real desea: Carácter b. Imprimir encabezado c. totEmpleados = 0


La repetición 1:10...wlLE loa

Fin Fin En él

d. tet5ueldas = 0 e, DO 1. Solicitar Nombre, número de horas trabajadas y cuate por hora 2. Leer nombreEmp, horasTrab, cuotahora 3. Calcular sueldo = horasTrab cuotaHora 4. Imprimir nombreEmp, sueldo 5. totEmpleados = totEmpleados + 1 6. totSueldos = totSueldos + sueldo 7. Preguntar 'Oesea procesar otro empleado (5/1417" 8. Leer desea f. WHILE desea = 'S' g. Imprimir totEmpleados, tot5ueldos h. Fin Método principal Clase Empleados2

o principal de la Clase Empleados2, se tienen las acciones:

a. Se declaran las variables que ya conocemos nombreEmp, horasTrab, cuotaHora, sueldo y desea; además se declaran totEmpleados, que sers'irá para contar el total de empleados procesados y totSueldos, que se utiliza para acumular la suma de los sueldos de todos las empleados. b. Se indica que se imprime el encabezado del reporte de acuerdo con el formato del mismo. Otra forma de imprimirlo seria así: Imprimir " REPORTE DE EMPLEADOS' Imprimir "NOMBRE SUELDO" Imprimir c. Se Miela en cero el contador de. empleados

d. Se inicia en cero el acumulador de sueldos. e. Se inicia el planteamiento del ciclo repetitivo DO t. Se solicitan el nombre, número de horas trabajadas y cuota por hora 2. se leen co nombreEmp, horasTrab. cuotaHora 3. Se calcula el sueldo a. Imprime nombreEmp, sueldo 5. Se incrementa el contador de empleados en e 6. Se incrementa el acumulador de sueldos con sueldo 7. Se pregunta si "i Desea procesar otro empleado [S/N)?", pregunta a la cual se debe contestar S para SI o una N para NO. 8. Se lee en desea, la respuesta que se dé a la pregunta anterior f. Delimita el fin del ciclo repetitivo, si se cumple la condición desea = "S", el control se transfiere hacia el DO, y entra de nuevo al cielo repetitivo. En caso de no cumplirse, el control se transfiere hacia la siguiente acido despues del WH1LE, es decir, se sale del ciclo.


104 Metwologia de la FVogramacw7r1 Chantada a Obl.bs

g. Se imprimen el total de empleados y el total de sueldos h. Fin del método principal Luego se tiene el fin de la clase y el fin del algoritmo.

Funciones Break y Continuo La mayoría de los lenguajes proporcionan las funciones Break y Cont inu e.

Break la función Break interrumpe termina) la ejecución de un ciclo repetitivo y transfiere el control a la siguiente acción después del ciclo. Formato: Br eak

Wati DO Break WHILE condición

Continua La unción Continua permite enviar el control al inicio del ciclo repetitivo, es decir. transfiere el control para ejecutar la siguiente repetición del ciclo. Formato:

Continua

Continua WHILE condición Nota:

Break y Continue son apacaóles. en actos DO...WkeLE. FOR y WHILE. S. no están dentro de un cirio habrá error


La

repeacian DO .WHILE

105

En este libro no se le dará aplicación a esas funciones, porque si un programa está hien estructurado, no son necesarias, y este libro se enfoca precisamente al diserto de prozramas bien estructurados.

5.2 Ejercicios resueltas Cabe aclarar que por la naturaleza de la repetición DO...1,4HlLE, los problemas que se plantean en este capítulo tienen una orientación mas administrativa, porque esta estructura es más natural para resolver problemas de esta índole. Sin embargo, en el capitulo siguiente (FOR), donde los problemas tienen una orientación más hacia ingenieria, utilizaremos el DO...W111LE para resolver ese tipo de problemas. Ejercicio 5.2.1 1ria empresa vende hojas de hielo seco, con las condiciones siguientes: Si el cliente es tipo t se le descuenta 5 9s Si el cliente es tipo 2 se le descuenta g 96 Si el cliente es tipo 3 se le descuenta 12 46 Si el cliente es tipo 4 se le descuenta 15 % Cuando un cliente realiza una compra se generan los datos siguientes: Nombre del cliente Tipo de cliente (1,2.3,4) Cantidad de hojas compradas Precio por hoja Elaborar un algoritmo que permita procesar varias dientes e imprima el reporte: Nombre

Reporte de clientes Descuento Neto a pagar Sub.lertal

300X XXXXXX>0=

99,999-99 99,99999

99,99999 99,999.99

99,999.99 99,999-99

XXXX300000.0000tXXXXX

9999999

99,999.99

99.999-99

999,999,99

999,999-99

999,999.99

Total 999 clientes Cálculos,.

Sub total = Cantidad de boj as a Precio por hoja Descuento es el porcentaje correspondiente del Sub total a pagar Neto a pagar = Sub total - Descuento Y la sumatoria de cada uno de estos datos para imprimirlos como totales.


106 Macuá:Nowa de la Prograrracion Onerrtaaa a atletas

(Primero hágalo usted...después compare la solución) Algoritmo CLIENTES HOJAS HIELO SECO Clase Clientes1 1. Método principal a. Declaraciones Variables nombreClie: Cadena tipoClie, cantidad, totClientes: Entero precioUni, subTotal, descuento, netoPagar, totSubTot, totDescuento, totNeto: Real desea: Carácter b. Imprimir encabezado c. totClientes = totSubTot - 0 totDescuento - 0 totNeto 0 d. DO 1. Solicitar Nombre, Tipo cliente, Cantidad, Precio unitario 2. Leer nombreClie, tipoClie, cantidad, precioUni 3. subTotal = cantidad • precioUni 4. SWITCH tipoClie 1: descuento = subTotal • 0.05 2: descuento = subTotal • 0.08 3: descuento = subTotal * 0.12 4: descuento = subTotal • 0.15 5. ENDSWITCH 6. netoPagar = subTotal - descuente 7. Imprimir nombreClie, subTotal, descuento, netoPagar 8. totClientes = totClientes + 1 totSubTot = totSubTot + subTotal totDescuento = totDescuento + descuento totNeto = totNeto • netoPagar 9. Preguntar "¿Desea procesar otro cliente (S/N)?" 10. Leer desea e. WHILE desea = "S" f. Imprimir totClientes, totSubTot, totDescuento, totNeto g. Fin Método principal Fin Clase Clientes1 Fin


1.9 r•epebnon DO-INHILF 107

Ene

principal de la Clase Clientes], se tienen las acciones:

a. Se declaran las variables b. Se imprime el encabezado c. Se inician en cero los totales generales d. Se inicia el planteamiento del ciclo repetitivo DO I. Se solicitan los datos 2. Se leen en nombreClie, tipoClie, cantidad, preciolJni 3. Se calcula el subTotal 4. Se plantea el SWITCH con el selector tipoClie Si tipoClie es ] calcula descuento con el 5% Si tipoClie es 2 calcula descuento con el 8% Si tipoClie es 3 calcula descuento con el 52% Si tipoClie es 4 calcula descuento con el is% s. Fin del SWITCH 6. Se calcula el netoPagar 7. Imprime nombreClie, subTotal, descuento, netoPagar S. Se incrementan los totales C). Se pregunta "¿Desea procesar otro cliente (S/H)?" tu. Se lee la respuesta en desea e. Delimita el fin del ciclo repetitivo, si se cumple la condición desea ="S", el control se transfiere hacia el DO, y entra de nuevo al cielo repetitivo. En caso de no cumplirse el control se transfiere hacia la siguiente acción después del WHILE, es decir, se sale del ciclo. f. Imprimie los totales totClientes, totSubTot, tolDescuento, totNeto g. Fin del método principal Luego se tiene el fin de la clase' y el fin del algoritmo.

Ejercicio 5.2.2 Elaborar un algoritmo que proporcione el siguiente reporte:

Nombre

Analisis de calificaciones Cal.] Cal.2 Cal.3 Cal-4

XXXVOCXXXX}E{XXMOCXX

99.99 9999

xmodomodoc¿odococx Promedios generales

99.99 99-99

Promedio

99.99 99,99 99.99 99.99

99.99 99.99

99-99 99-99

99.99

99.99

99.99

99-99 99.99

99.99

99.99

99.99

A partir de que se tiene el NOMBRE, calificación 42,3 Y4 de varios alumnos. El promedio se obtiene sumando las cuatro calificaciones y disidiendo el resultado entre cuatro.


108

MeteduenEes de le Progremecon alentada a Otentes

El promedio general de cada calificación se calcula sumando las calificaciones di todos los alumnos y dividiendo el resultado entre el número de alumnos, (Primera hágalo usted...después compare la solución)

Algoritmo CALIFICACIONES DE ALUMNOS Clase Alumnos1 1. Método principal a. Declaraciones variables nombreAlum: Cadena totAlumnos: Entero califl, calif2, calif3, califa, promedio, promCall, promCa12, promCa13, promCa14, promProm, totCall, totea12, totCal3, totCal4, totProm: Real desea: Carácter b. Imprimir encabezado c. totAlumnos = 0 totCall = 0; totCal2 = O; totCal3 = 0; totCal4 - 0; totProm = 0; d. DO 1. Solicitar Nombre, calificación 1, calificación 2, calificación 3 y calificación 4 2. Leer nombreAlum, califl, calif2, calif3, calif4 3. promedio = (califl + calif2 calif3 + calif4)/4 4. Imprimir nombreAlum, califl, calif2, calif3, calif4, promedio 5. totAlumnos = totAlumnos + 1 6. totCall = toteall + califl totCal2 = totCal2 + calif2 totCal3 = toteal3 calif3 totCal4 = toteal4 calif4 totProm = totProm promedio 7. Preguntar "¿Desea procesar otro alumno lS/Nl7• B. Leer desea e. WHILE desea = "5' f. promCall = totCall / totAlumnos promCal2 = totCal2 / totAlumnos promCal3 = totCal3 / totAlumnos promeal4 = totCal4 / totAlumnos promProm = totProm / totAlumnos g. Imprimir promCall, promCaI2, promea13, promCa14, promProm h. Fin Método principal Fín Clase Alumnos1 Fin


La macuco, 00 .WHILE 109

Fnc.

principal de la Clase Alumnosi, se tienen las acciones:

a. Se declaran las variables b. Imprime encabezado c. Inicia en cero los acumuladores de calificaciones; y el contador de alumnos d. Inicia el ciclo DO 1. Se solicitan Nombre, calificación 1,2,3 y 4 a. Se leen en nombreAlum, califi. califa, calif3, calif4 3. Se calcula el promedio 4. Se imprimen nombreAlum, califi, califa, calif3, calif4, promedio 5. Se incrementa el totAlumnos en 6. Se incrementa totCali con califi totCala con califa totCai3 con calif3 totCala con calif4 totProm con promedio 7- Se pregunta "¿Desea procesar otro alumno (S/N)7" S. Se lee en desea la respuesta e. Fin ciclo WHILE desea "S": Si se cumple, vuelve al DO; si no, sale del ciclo. E Se calcula el promCal Se calcula el proinCal2 Se calcula el prumCal3 Se calcula el promCal4 Se calcula el promProm Nota: Observe que los promedios se calculan afuera del ciclo. g. Imprime proneCalt, prometila, peritnCe13, proniCala, promPnlin h. Fin del método principal luego se tiene el fin de la clase y el fin del algoritmo.

En el CD anexo; para el capítulo 5, se encuentran las ejercicios resueltos: Ejercicio 5 2 3 Ejercicio 5.2.4 Ejercicio 5.2.5 Ejercicio 5.2.6 Ejercicio 5.2.7

Procesa las calificaciones de varias alumnos Procesa la Mflacion de varios articulas Procesa la producción de varios obreros usando dos ciclos Procesa las compras de varios clientes Procesa las ventas de varios vendedores; y también se planten la solución para cuando se tienen 15 vendedores


110 Metodulogla de lo ProararnocmOneorado e Obtetas

Resumiendo

La repetición DO...W1IILE es útil para resolver problemas del tipo: I) Algo se repite varias veces, es decir, se debe ejecutar en más de una ocasión, pero no se sabe cuántas veces se repetirá. Se controla haciendo la pregunta y leyendo en una variable la respuesta (desea, otro), para plantear la condición de control del ciclo. Es el caso de todos los problemas planteados en este capitulo, con excepción del último. 2)

Algo se repite un número conocido de veces, es decir, se sabe cuántas veces se repetirá. Se controla utilizando un contador que va contando la cantidad de veces que entra al ciclo, el cual se utiliza para plantear la condición de control del ciclo. Es el caso del último algoritmo de este capitulo. Este tipo de problemas son los que se plantean en el siguiente capitulo, ya que son naturales para la repetición FOR, no obstante que también pueden resolverse utilizando DO...WHILE.

~§~

1. Elaborar un algoritmo que imprima el siguiente reporte: Costos de produccton Articulo

Unidades Factor producidas costo

Costo fijo

Costo de produccion

XXXXXXX.XXXXXXXXXX XKXXXIIXXXXXXXXXKX

9999 9999

999.99

99,999.99 99,999.99

999,999.99 999,999.99

XXXIOCOOOCIOCXXXXXX

9999

999-99

99,99999

999,999.99

Total

999-99

999 articulo

99,999,999.99

Datos disponibles por cada artículo:

Descripción Cantidad de unidades producidas Factor de costo de materiales Costo fijo Cálculo del costo de producción Número de unidades producidas o Factor de costo de materiales 4- Costo fijo Al final, imprimir el total de artículos procesados. Y el total general del costo de producción. 2. Elaborar un algoritmo que imprima el siguiente reporte:


La repErtmib, OO.

VateLE 111

Precios de venta Articulo

Costo de produccion Utilidad

XX.3CCOCCOEX XXXXXXXIM

Precio de venta

99,999-99 99,999-99

999,999.99 999,999-99

99,999-99 99,999-99

99,999-99 99,999-99

99,999-99

99,999,99 - 99,999.99

999.999.99

999,999-99 999,999.99 999,999.99

9,999,999.99

XXXX:0000a Total 999

impuesto

Datos disponible? por rada artículo. Descripción Costo de producción ediculos: Utilidad .• tao% del costo de producción impuesto =15% (costo de producción + utilidad) Precio de venta = costo de producción + utilidad + impuesto 3. Elaborar un algoritmo para imprimir, una factura que contenga los datos de los artículos tendidos a un cliente, y que tenga el siguiente formato; Factura Nombre del cliente :140:::100CXXXXXXDOWOUCCI.XXXXXX Articulo

Precio Cantidad unitario

Precio total

XXYGDOCCOODGZOIX>01 XXX:11:XXXX2000000{XX

999 999

99,999.99 99,999.99

IGOZY.30130DOOODOCXXX .

999

99,999.99

999,999.99

Sol-Iota] Impuesto 1591 Total

9,999,999 99 9.999.999.99 9.999.999.99

Datos disponibles por cada articulo: Descripción Cantidad de artículos Precio unitario de venta Además se tiene eI nombre del cliente

999,999.99 999,999.99


112 Matodologia de le Prograrnacidc Dnercads e Gbierds Cálculos:

Precio total = cantidad de artículos e precio unitario Subtotal = la suma de los precios totales Impuesto = 15% del subtotal Total = subtotal impuesto 4. Igual al caso anterior, pero que se puedan procesar tantas facturas como clientes se hayan atendido. 5. Elaborar un algoritmo que imprima el siguiente reporte: Nomine quincenal Nombre 10000=1:101.)0:9000{X 300:3000000CXXXXXXX JOCXXXXXXXXOCX XXVI Total

999 Empleados

brutu

impuesto

Slip. neto

99.999 99 99,999 99

99,999 99 99,999.99

9999Q 0, 99,999 ,0-1

99,999.99

99,999.99

99,999.99

999,999.99

999,999.99

999,999.99

Datos disponibles por coda empleado : Nombre Sueldo mensual Antigüedad Cidra/os:

Sueldo bruto = [sueldo mensual / 2) s- prima de antiguedad. La prima de antigüedad se otorga a partir del tercer ano de labores, y es de 2% anual. El impuesto se calcula usando la tabla siguiente: Lita. inferior Lim. superior 1 301 701 1101 1701

300 700 1100 1700 adelante

Cuota fija 30 50 100 150 220

Porcentaje 3 96 8% 11 96 16 % 20 %

Cuando el sueldo bruto excede al salario minimo, se calcula el excedente y se busca éste en la tabla, a fin de determinar en cuál ranga se encuentra. El impuesto será la cuota fija, más el porcentaje indicado de la diferencia del excedente sobre el limite inferior.


114 metoaologia de la Prngramación Dnernada a Objetos Reporte de calificaciones Nombre JOCUCWOOCOOCXXXXXXXXXXX

xxxvaxrcxxxxmaxxxxxx

XXX:VOCCCKXXXXXXXXXX.XXICX

Calif. final 999.99

999.99 999.99

Total 999 alumnos Para aprobar el curso, debe tener 7o o más en cada una de las tres calificaciones, la calificación final será el promedio. En caso de haber repmbado uno o más exámenes ordinarios, la calificación final será NA (NO ACREDITADO). to. Se tienen los datos del transporte del elevador de un edificio, por cada viaje hecho durante el día, se tienen los siguientes datas: Viaje: Cantidad de personas• Peso del viaje: Viaje: Cantidad de personas Peso del viaje-

Viaje: Cantidad de personas: Peso del viaje. Elaborar un algoritmo que lea los datos de los viajes del día, y al final que imprima: EstadLstica del dia Cantidad de viajes: 999 Cantidad de personas transportadas: 999 Peso transportado (kilos): 9999.99 Promedio de personas por viaje: 99.99 Promedio de peso por viaje: 9999.99 it. El equipo de futbol soccer CACHORROS requiere llevar un conteo de las acciones que realiza durante un partido, las acciones están catalogadas como sigue:


La remocen UU WI.-19LE 1 tiro a gol 2 tiro desviado 3 falta recibida 4 falta cometida 5 fuera de juego 6 tiro de esquina

7 amonestación 8 gol anotado 9 gol recibido lo balón perdido 11 balón recuperado 12 pase correcto

115

13 pase equivocado o fin de juego

Elaborar un algoritmo que permita capturar las acciones que se den en el partido, por acción se introduce el número de acción, al terminar el partido, con la acción o, se debe imprimir la siguiente estadistica: Estadistica del juego Cachorros

Acciones

Otro equipo

tiros a gol: tiros desviados: faltas recibidas; faltas cometidas: fueras de juego: tiros de esquina: amonestaciones: goles anotados: goles recibidos: balones perdidos: balones recuperados: pases correctos: pases equivocados: o bien, si no hubo ganador, imprimir

Equipo ganador: EL JUEGO FINALL20 EMPATADO

la. Se tienen los datos de varios autos importados, elaborar un algoritmo que permita leer los datos de cada automóvil: marca, origen y costo; imprimir el siguiente reporte: Reporte de autos importados Origen

Marca

Costo

Impuesto

Precio Vta,

:OOLIOOOLXXXXX )01XXX.X.X.XKXXXX XXXXXXXXXKXX 100001)=COIX

99,999.99 99,999.99

99,999-99 99,999.99 99,99999 99,999.99

)0000000201XX . )000000000CXXX

99,99999

99,999_99 99,999.99

99,999.99

99,999-99 99,999.99

Total 999 autos

-


116 Metodolegla de le Progrernecion alentada e COf ecos

Alemania: Japun' Italia

EUAPais del que se importaron mas autos. Cálculos: IMPUESTO si el origen es Alemania el impuesto es 20%, si es de Japón, el impuesto es 30%; si es de Italia 15%; y si es de EUA. 8%. PRECIO VTA. se suma el costo más el impuesto. TOTALES se pide el total de autos importados, asi como totales del costo, impuesto y precio de venta. Por último, el total de autos importados de cada país. 13. En el hotel Guamtichil se tienen los datos de los huéspedes, porcada huésped se tiene: el nombre, el tipo de habitación (14,3,1,5) y la cantidad de días que la ocupó; se hace un descuento de 10% si el cliente se hospeda más de 5 dias, de 15% si se hospeda mas de lo días, y de 20% si se hospeda más de 15 días; de acuerda con el tipo de habitación se tienen las tarifas: Tipo habitación

Tarifa diaria 120,00 155.00 210,00 285,00

2 3 4 5

400-00

Elaborar un algoritmo que lea los datos de los huéspedes e imprima el siguiente reporte: Reporte de huespedes Nombre del huesped

Tarifa

Subtntal

Deseto.

Total

XXXXXXXXXXXXXXKXX 999 XXVD00001300:X700a 999

9.999.99 9,999.99

9,999.99 9,999 99

9,99999 9,999.99

9,999.99 9,99999

mc.xxxxxx mooliocxx

9,999.99

9,99999

9.999.99

9,999.99

9.999.99

9,99999

9,999.99

Total goo huespedes

Dias

999

Total de dias de ocupación: TIPO 1:

TIPO 2:

TIPO 3: _____ TIPO 4:

TIPO 5: -


La raparnsaa ❑C7.. WHILE 117

TARIFA es el precio de la habitación de acuerdo con el tipo. suisToTAL se multiplica el número de días por la tarifa. DESCIO es el descuento que se le hace de acuerdo con la cantidad de días. TOTAL se calcula SUBTOTAL menos DESCIO. TOTAL DE MAS DE OCUPACION es la sumatoria de las cantidades de días. TIPO] es el total de dios de ocupación de habitación tipo 1, y asi para todos. 14. En la carrera de Ingeniería 'Industrial y de Sistemas de la Universidad de Sonora hay varios alumnos, y por cada átonno los datos: Nombre del alumno: X

X

Cada alumno puede haber cursado varias materias, por cada materia que cursó, se tienen los datos: Materia- X

X

Calificación Calificación 2: Calificación 3:

Nombre del alumno- X

X

Materia: X Calificación t• Calificación 2• Calificación 3:

X

Elaborar un algoritmo que permita leer los datos de cada uno de los alumnas e imprima el siguiente reporte. Reporte de materias cursadas Nombre

Materia

Calif. Final Observado n

IDOCIMODDIXXXXXX YZY...)0(XX..30CX.XXXX)DIX 999.99 Aprobado XXXXXMOCIOaXMOCX 999.99 Reprobado XIDOMOGO0000{XXX .

999.99

Aprobado


11E1 Mecadologia de la Prograrnaaún Orientada e Oblatas

Total alumno 999 materias

Promedio: 999.99

UXXX)00(XXXXXXX XXXXXXXXXXICIOIXXX 999.99 Aprobado XXXXXX.XXXXX30000: 999.99 Reprobado X3OCIODOCXXXXX31.XXX 999.99 Total alumno 999 materias Promedio: 999.99 Total alumno 999 materias

Promedio: 999.99

Total general 999 alumnos

Promedio general: 999.99

Aprobado

Cálculos: CALIF. FINAL es el promedio de las tres calificaciones de la materia. OBSERVACION es el comentario APROBADO o REPROBADO según sea la calificación final. TOTAL ALUMNO se imprime el número de materias que cursó y el promedio de las calificaciones finales de todas las materias que cursó. TOTAL GENERAL se imprime la cantidad de alumnos procesados y el promedio general de todos los alumnos. 15. Similar al Ejercicio 5.2,7, sólo que ahora se debe imprimir el siguiente reporte: Reporte de incentivos Nombre

Total vendido

Incentivo

XXX. XX30~01XXXXXXX XXXXXXXXX300000000(XX

99,999.99 99,999.99

XXXXX7000CXXXXXX30000(

99,999.99

99,999.99

Total 999 vendedores

99.999.99

99.999.99

99.999.99 99-999.99

El mejor vendedor es: XXXXXXXXXXMOMOIXXXX Con el total vendido: 99,999.99 Es decir, que es el mismo reporte, sólo se añaden dos datos niás al final: el nombre del mejor vendedor (el que haya vendido más), y cuánto fue el total vendido por el mismo. Vamos a suponer que no va a coincidir que dos vendedores hayan vendido la misma cantidad.


Le repeticion ❑t]...WHLE 119

Nota: Todos los ejercicios resueltos y propuestos en el siguiente capitulo se pueden solucionar con lo estudiado hasta este capitulo.

Resumen del capitulo Conceptos que debe dominar

o La estructura de control repetición tipo DO...WHILE. 0 Emitir la información en forma de reporte. 0 Utilizar contadores y acumuladores, cómo obtener promedios o medias aritméticas al procesar varios elementos. a obtener el mayor y el menor de un conjunto de datos. Utilizar un ciclo repetitivo anidado dentro de otro.


La repetición FOR

6

Contenido 6.1 FOR anidados 12 Ejercicios resueltos 6.3 Simulación del FOR con DO...WHILE Ejercicios propuestos

Ctisetavo de! (lo pirulo anterior aprendimos a manejar ciclos repetitivos con la repetición tipo • YvHILE. En este capítulo estudiaremos la forma de plantear ciclos repetitivos :J'Ido la estructura de repetición tipo FOR, también aprenderemos a plantear -:._•:, anidados, es decir, un FOR dentro de otro FOR. un DO...WHILE dentro de un FOR dentro de un 190...15/FIR E. Cómo simular la estructura FOR con -


122 ailecoocrogie de le Progremacinn Orientada a Ob¡rstos

Lo repetición FOR es una estructura que permite controlar la ejecución de accione que se repetirán un número de veces conocido de antemano. Este tipo de repetición e controlada por un contador que empieza en un valor inicia] y va hasta un valor final incrementándose o deerementandose de acuerdo con un valor, para contar la cantidad di veces que entrará al ciclo. Se dice que el FOR se repite N veces. Formato: FOR contador=velorInicial; condición; incremento Acctori(es) ENDFOR Donde: FOR contador

Es la palabra reservada que identifica la estructura de repetición. Es una variable que puede ser de tipo entero, real o carácter; la cua; se utilizará cuino índice o contador que controlará la repetición del ciclo. El cantador tomará el vakel nidal, se evalúa la condidón, si es verdadera, entra al ciclo FOR a ejecutar las acciones que están dentro del ciclo, si no es verdadera se sale del ciclo Al llegar al ENDFOR, éste lo regresa al FOR incrementando el contador de acuerda= el incremento. volorIniciel Es el valor inicial que tomara el contador, puede ser una constante, variable o expresión de acuerda= el tipo de dató de la variable de control del cklo. Ejemplo: i =1. condición Es una expresión lógica mediante la que se establece la condición de ejecución del ciclo, es decir. si se cumple entra al ciclo; si no se cumple se sale del ciclo. Ejemplo: i .c= 1 0. Acc ion(esl Fs una acción o grupo de acciones en pseudocódigo que se ejecutarán dentro del ciclo. incremento Fs una expresión aritmética mediante la cual se lleva a cabo el incremento o decremento del contador del ciclo. Ejemplos: o m=m-1 0 X=X+2 z=z+2.5

i+.-

Nota: En íos lenguajes C, C++. lava y derivados existe el operador aritmético++ ose Significa Incremento de 1, Y el operador - - que significa decremento de 1

ENDFOR

Delimita el fin del ciclo,


La rapoucrso P:IS

t23

uncionamiento

Se inicia el contador con el valorInicial y se evalúa la condición; si se cumple, entra al ciclo y ejecuta la(s) acción(es)FOR( contadOrvalor

; condición; incremento'

ACCrénlesl EliDFOR 2.

Al llegar al EN DFOR, remite el control al inicio del ciclo, actualizando el valor del contador de acuerdo con el incremento (o decremento).

ron contador=valorInicial; condición; incremento Acción (col ENOFOR 7. Al volver el control al inicio del ciclo, se evalim la condición:

a) Ni se cumple, entra al ciclo a ejecutar la(s) acciónles). FORicontador=valorInicial; condición; incremento

Acción(es5 ENOFOR Después de lo anterior, Ile-Aa al ENEWOR, el cual remite el control al inicio del FOR, actualizando el valor del contador de acuerdo con el incremento (o decremento). b) Si no se cumple, se sale del ciclo. dirigiéndose a la siguiente acción después del ENDFOR, es decir, se sale del ciclo.

FORIcontadur=ealorInicial; condición; incremento Acciónleel ENOFOR

"10; Imprimir i ENOFOR


124 Meonclalogsa de La Progrorriaraón traerme a Otketne

Se trata de un ciclo repetitivo en el que la acción ( Imprimir i) se ejecutará diez que el contador i tomará el valor inicial de 1, luego de 2. y así sucesivamente hasta llegar a lo, con incrementos de uno. Al iniciar i toma el valor de 1. Se evalúa la condición:

veces, ya

Li.< - 10? Si se cumple, ejecuta lo que está dentro del ciclo ( Imprimir i) la primera vez i tendrá valor de 1, por lo tanto, la condición se cumple y se imprime i.

Después de lo anterior llega al ENDFOR, el mal remite el control hacia el encabezado del FOR; en este momento se aumenta el contador i en t. Al llegar otra vez al FOR, evalúa de nuevo la condición; si se cumple, como es nuestro caso, entrará de nuevo al ciclo y asi sucesivamente. En el ejemplo:

i toma el valor de i, entra al ciclo e imprimirá: n

i toma el valor de 2, entra al ciclo e imprimirá: a itoma el valor de 3, entra al ciclo e imprimirá: 3

i toma el valor de 4, entra al cielo e imprimirá: 4 i toma el valor de 5, entra al ciclo e imprimirá: 5 i toma el valor de 6, entra al ciclo e imprimirá: 6 toma el valor de 7, entra al cielo e imprimirá: 7 i toma el valor de 8, entra al ciclo e imprimirá: 8 1 toma el valor de 9, entra al cielo e imprimirá: g tonta el valor de lo. entra al ciclo e imprimirá: In Nota: La condición I.,1 0 quiere decir que cuando el valor de 1 sea hasta 10, va a mirar al ciclo, cuando tenga el valor 11, no se cumplirá la condición y saldrá del ciclo. Si deseamos que entre al ciclo 30 veces, la condición será 1.<=30 y saldrá del ciclo cuando i tenga 31. Si deseamos que entre al ciclo 50 veces, la condición será i.,=50 y saldrá del ciclo cuando i tenga 51.

El cielo puede plantearse: FOR i.10; 1>=1; imprimir i ENDFCIR

En este caso i tomará primero el valor lo, luego el 9, y así sucesivamente hasta llegar a a. debido a que se está planteando 11P ciclo con decremento, el valor inicial debe ser mayor que el valor de la condición ( i>=1 ); en este caso entrará al ciclo hasta que i tome el valor de 1, saldrá del ciclo cuando i tenga o (cero). En este ejemplo se imprimirá ; 10 9 8 7 6 5 4 3 2 1

Iketti

r un algoritmo que calcule e imprima la suma de los números del a hasta el nao.


La

repenCine FOR 125

A continuación se tiene el algoritmo de la solución: algoritmo SUMA NUMEROS l 100 Clase Sumaliumeros1 1. Método principal a. Declaraciones Variables Indice, sumatoria: Entero b. sumatoria 0 c. FOR Indice=1; indice<=100; indice+. sumatoria + indice 1. sumatoria d. ENDFOR e. Imprimir sumatoria f. Fin Método principal Fin Clase Sumallumeroal Fin

En ei

o p ncipal de la Ciase SurnaNumerosi, se tienen las aociones:

a Se declaran las variables indice para manejar el cantador del ciclo sumatoria para calcular la sumatoria de los números del 1 al tiro b. Se inicia el acumulador en cero c. Ciclo FOR desde indice = 1 hasta /no con incrementos de 1. Se incrementa el acumulador sumaturia con indice d. Fin del cielo FOR e Se imprime la sumatoria f. Fin del método principal Luego se tiene el fin de la clase y el fin del algoritmo. 6.1 FOR anidados Al igual que todas las estructuras de control, es posible que un ciclo FOR contenga anidado otro ciclo y éste a otra: wainos, por ejemplo, el siguiente ciclo: FOR /=1 ; i<=18; Imprimir I FOR j.1; j<=12; IMpriMir j ENDFOR ENDFOR

j++

Se trata de un dele ene [rolado por 1. dentro del cual se imprime el calor de i; además, emitiese anidado un ciclo FOR controlado por j, donde .se imprime el valor de j


12a Metaaolwe de la Prowtmeuón °remeda e allat.

Por cada una de las veces que entre en el primer ciclo FOR (ei mas externo), entrará diez veces al ciclo más interno; esto significa que por las diez veces que entrará en 1., le hará loo veces en j. 6.2 Ejercicios resueltos Ejercicio 6.2.1

Elaborar un algoritmo que calcule e imprima la suma de los números pares del 2 hasta el 160. (Primero húgalo usted...después compare lo solución)

Algoritmo SUMA NUUEROS 2.160 Clase SumaNumeros2 1. Matado principal a. Declaraciones Variables i, suma: Entero h. suma . 0 c. FOR i-2; i<=160; 1=1+2 1. suma = suma + 1 d. ENDFOR e. Imprimir suma f. Fin Método principal Fin Clase SumaNumeros2 Fin

1 Ene111 11 o principal de la Clase SumaNumeros2, se tienen las acciones: a. Se declaran las variables i para manejar el contador del ciclo suma para calcular la sumatoria de los números del 2 al 16o b. Se inicia el acumulador en cero c. Ciclo FOR desde i = 2 hasta 1.6o con incrementos de 2 1. Se incrementa el acumulador suma con i d. Fin del ciclo FOR e. Se imprime la suma f. Fin del método principal Luego se tiene el fin de la clase y el fin del algoritmo. Ejercicio 6.2.2 Elaborar un algoritmo que calcule e imprima la suma + 1/2 + 1/3 +1/4

+ 1/50.


Le rapetic/an

FOR 127

Primero l'agoto usted...después compare lo solución)

zoritmo SUMATORIA _ase SumaNumeros3 . Método principal a. Declaraciones Variables i: Entero valor, suma: Real b, suma = O c. FOR P-1; 1+. 1. valor = valor 2. suma = suma d. ENDFOR e. Imprimir suma f. Fin Método principal Sin Clase SumaNumer0s3

12:91j/ principal de la Clase SurnaNumeros3, se tienen las acciones: 'in el. VI& a. Se declaran las variables i para controlar el ciclo valor para calcular cada uno de los valores a sumar suma para calcular la sumatoria b. Se inicia el acumulador suma en cero hasta so con incrementos de 1 c. Ciclo FOR desde i L Se calcula el valor - 1 / i 2. Se incrementa suma con valor d. Fin del FOR e. Se imprime la suma f. Fin del método principal

luego se tiene el fin de la clase y el fin del algoritmo. Ejercicio 6.2.3 Elaborar un algoritmo que lea 20 números y que calcule e imprima el promedio de dichos números. (Primero hágolo usted...después compare la solución)

Algoritmo PROMEDIO DE 20 NUMEROS Clase PromediONumeros1 1. Método principal a. Declaraciones


128 Metoddlogie de á Prograrnowón OrleMacla a Oblatos

Variables i, numero, sumatoria: Entero promedio: Real b. sumatoria = 0 c. FOR 1=1; i<=20; 1++ 1. Solicitar Número 2. Leer numero 3. sumatoria = sumatoria é numero d. ENDFOR e. promedio = sumatoria 20 f. Imprimir promedio g. Fin Método principal Fin Clase PromedioNumeros1 Fin

En e 4 to o principal de la Clase PromedioNumerost, se tienen las acciones: a. Se declaran las variables b. Se inicia la sumatoria en cero c. Ciclo FOR desde i = 1 hasta 20 con incrementas de t. Se solicita el número 2. Se lee en numero 3. Se incrementa sumatoria con numero d. Fin del FOR e. Se calcula el promedio dividiendo sumatoria entre 20 f. Se imprime el promedio g. Fin del método principal Luego se tiene el fin de la clase y el fin del algoritmo. Ejercicio 6.2.4 Elaborar un algoritmo que solicite la cantidad de números a procesar y lea la respuesta ea N; luego que lea los N números y calcule e imprima el promedio de dichos números_ (Primero hagolo usted...después compare iu solución)

Algoritmo PROMEDIO DE N HUMEROS Clase PromedioNumeros2 1. Método principal a. Declaraciones Variables 1, n, numero, sumatoria: Entero promedio: Real b. Solicitar cantidad de números a procesar c. Leer n


Le repelsoon FOR

129

d. semanaria = e. FOR i=1; 1.=n; J.++ 1. Solicitar Número 2. Leer numero 3. sumatoria = sumatoria + numero f. ENDFOR g. promedio = sumatoria / n-1 h. Imprimir promedio i. Fin Método principal Fin Clase PromedioNumeros2 ,in

Ene

p nripad de la Clase ProraedioNumerosn, se tienen las acciones:

a. Se declaran las variables 13. Se Solicita Ea cantidad de números c. Se lee en n d. Se inicia sumatoria en ceso e. Ciclo FOR desde i = 1 hasta n 1. Se solicita el Macero 2. Se lee en numero 3. Se incrementa sumatoria con numero f. Fin del FOR g. Se calcula el promedio dividiendo monetaria entre n-t; se le reata 1, porque para salir del ciclo n llegó hasta Se imprime el promedio i. Fin del método principal Luego se tiene el fin de la clase y el fin del algoritmo. Ejercicio 6.2.5 Llaborar un algoritmo que imprima el seno, coseno y aren tangente de X; para valores de Debe imprimir una tabla: X desde - t hasta t ton intervalos de X

Seno X

Coseno X

Arco tangente X

99 -99 - o.8

9g-99

99.99 99.99

99.99 99.99

1.0

99-99

99.99

99.99

(Primero hágalo usted- .-después compare /u solución)


130 Mandologle be La Programación Orientada a OhjaCtrs Algoritmo SENO COSENO ARCO TANGENTE DE -1 HASTA 1 Clase Logaritmos) 1. Método principal a. Declaraciones Variables x, senoX, cosenoX, arcoTanX: Real b. Imprimir encabezado c. FOR x=-1; x<=1; x-x+0.2 1. senoX = Seno(X) 2. cosenoX = Coseno(X) 3. arcoTanX = ArcTan(X) 4. Imprimir x, senoX, cosenoX, arcoTenX d. ENDFOR e. Fin Método principal Fin Clase Logaritmos) Fin

o pnneipal de la Clase Logaritmos), se tienen las acciones:

Ene

a. Se declaran las variables h. Se imprime el encabezado c. Inicia ciclo FOR desde x = -1 hasta l con incrementos de o.2 I. Se calcula el senoX 2. Se calcula cosenoX 3. Se calcula arcoTanX 4. Se imprim x, senoX. cosenoX, arcoTanX d. Fin del cielo POR e. Fin del método principal Luego se tiene el fin de La clase y el fin del algoritmo. Ejercicio 6.2.6

Una temperatura en grados Fahrenheit (F) se convierte a grados Celsius o Centígrados (C), con la fórmula: C = 5/9 (F-32). Elaborar un algoritmo que imprima una tabla desde 1 hasta é5 (con intervalos de 1) grados Fahrenheit con sus equivalencias en grados CeLsius (Centígrados)1 Fahrenheit

CeLsius

2

99.99 99.99

65

99.99


Le repeticibn FOR

131

(Primero hagaio usted...de-vals compare io suluerón) Algoritmo EQUIVALENCIAS FAHRENHEIT CELSILIS Clase EquivalenciasFahrl 1. Método principal a. Declaraciones Variables fahrenheit, celsius: Real h. Imprimir encabezado c. FOR fahrenneit=11 fahrenheit<=65; tahrenheit.+ 1. celsius = 5/9 ' (fahrenheit-321 2. Imprimir fahrenheit, celsius d. ENDFOR e. Fin Método principal Fin Clase EpuivalenciasFahr1 Fin

En el Método principal de la Clase Equir.slencias Fahri, se tienen las acciones: a. Se declaran las variables b. Imprime el encabezado c. Inicia ciclo FOR desde fahrenheit m hasta 65 con incrementos de 1. Calcula celsius 2. Imprime Fahrenheit, celsius d. Fin del FOR e. Fin del método principal Luego se tiene el fin de la clase y el fin del algoritmo. Ejercicio G.2.7

La escuela FORD No. 8 de Guamúchil, Sinaloa. tiene actualmente 75n alumnas, se espera tener un crecimiento anual del 1296. Elaborar un algoritmo que calcule e imprima la población estudiantil que se espera tener en el año 2025 (Primero hrloalo usted—después compare ha solución] Algoritmo ESTIMAR Pillf3LACIOM Clase PoblacionEstudiantil 1. Método principal a. Declaraciones Variables n: Entero pobFinal: Real b. pobFinal = 750 c. FOR n=2005; n=2025; n+. 1. pobFinal = pobFinal + lpobFinal ' 0.121


132 Metodologe de le Program/satán Cherttade e Obiertos

d. ENDFOR e. Imprimir pobFinal f. Fin Método principal Fin Clase PoblacionEstudiant I Fin

EñITM127Wincipal de la Clase PoblacionFstudiantil, se tienen las acciones: a. Se declaran las variables b. Se inicia pobFinal en 750 c. Ciclo FOR desde n = 2005 hasta 2025 con incrementos de t t. Se calcula pabFinal añadiéndole 12% d. Fin ciclo FOR e. Se imprime la pobFinal f. in del método principal Luego se tiene el fin de la clase y el fin del algoritmo. Ejercicio 6.2.8 Elaborar un algoritmo que lea un valor N, entero y positivo, y que le calcule e imprima su factorial. Por ejemplo, si se lee el 5, su factorial es el producto de 5"4'3"2*1 6 1'2'3'4. 5E] factorial de o es 1. (Primero hágalo usted...despues compare lo solución)

Algoritmo FACTORIAL Clase Factorial) 1. Método principal a. Declaraciones Variables num, 1, fact: Entero b. Solicitar Número c. Leer num d. IF num = e THEN 1. fact = 1 e. ELSE 1. fact = 1 2. FOR i=num; 1, -1; 1a. fact = fact • 3. ENDFOR f. ENDIF g. Imprimir 'El factorial de:', num, "es:', fact h. Fin Método principal Fin Clase Factoriali Fin


lc ~calo FOR 122

❑ p ncipal de la Clase Factorial", se tienen las accionas:

En

a. Se declaran las variables h. Se solicita el numero c. Se lee en num d. Se compara si num = o, si se cumple, entonces t. Se calcula fact = e. Si no (EME) t. Se inicia fact = 2. Cielo FOR desde i = num hasta 1 con decrementos de -a a. Se calcula fact = fact • i 3. Fin del FOR f. Fin del 1F g. Se imprime el factorial fact h. Fin del método principal Luego se tiene el fin de la clase y el fin del algoritmo. En el CD anexo; para el capitulo I:, se encuentra:1'os ejercicios resueltos: Ejercicio 6.2_8 Calcula el iartorial a N números Ejercicio 6.2.10 calcula minieros aplicando la secuencia Fibonacci Ejercicio 6.2.11 Calcula las potencies de loa números del 1 a El Ejercicio 6.2.12 Realiza cálculos con L1 ecuación cuadralica Ejercicio 6.2.13 Calcula intereses de una inversión fija Ejercicio 6.2.14 c.iici,1,..,ntvrese.s. le una Mg:cesión leyendo datos Ejercicio 62.15 Procesa la producción de 15 trabajadores con dos ciclos Ejercicio 6.2.16 Procesa las ventas de varios vendedores Ejercicio 6.2.17 Procesa la producción de 1.5 obreros Ejercicio 6.2.18 Procesa la producción de serios obreros 6.3 Simulacian riel FOR con ❑O...WHILE

Como ya se explico' anteriormente, el FOR es controlado por un contador. También se ha descrito la forma de manejar contadores con Do....WHILE. El ejemplo: FOR 1=1; i<=113; i++ Imprimir i ENOFOR Lo podemos implementar con 130...WHiLE de la siguiente forma; 1=0

00


134 Mesodulugin de lo Pmgramauón Orientada a Clojetos

i=i+1 Imprimir i WHILE i ¢ 10

Antet de euher al ciclo se inicia d contador 1 en cero. Dentro del ciclo se incrementa i en r y se imprime. La condición se plantea mientras el contador i sea menor que le, vuelve al DO. Es decir, que con el DO...WHILE se puede implementar soluciones a problemas que son naturales para el FOR. A continuación se plantearán algunos algoritmos que se resolvieron durante este capitulo crin FOR, pero ahora utilizando DO...WHILE; como podrá observar la diferencia será la forma de manejar el contador, misma que se describió antes. Ejercicio 6.3.1 Elaborar un algoritmo similar al Ejercicio 6.2.5, util zandó DO...WHILE en lugar de FOR. Algoritmo SENO COSENO ARCO TANGENTE DE -1 HASTA 1 Clase unaritmos2 1. Método principal a. Declaraciones Variables x, seno), cosenoX, arcoTenX: Real b. Imprimir encabezado c. x = -1.2 d. DU e.2 x 1. x 2. senolI = Seno (xj 2. cosenoX = Coseno(x) 4. arcoTenX = ArcTan(x) 5. Imprimir x, senoX, coseno), arcoTenX e. WHILE X e 1 f. Fin Método principal Fin Clase togaritmos2 Fin En el CD anexo, para el capitulo 6, se encuentran los ejercicios resueltos: Ejercicio 6.3.2 Similar al Ejercicio 6.2.6. utilizando DO...WHII.F. Ejercicio B.3.3 Similar al Ejenácio utilizando DO...WHILE Ejercicio 8.3.4 Similar al Ejercicio 6.2.12, utilizando DO_WHILE


La repa000n POP 135

Eigitimimw E.áborar trn : góritmo que Fea N menor.

diferentes y calcule e imprima el mayor y el

Elaborar 1111 algoritmo que lea un valor N y que imprime un triángulo de asteriscos como se muestra a continuación, si el valor leído es 5, imprimir: •

3. Elaborar un algoritmo que permita leer un número N par, y calcule e imprima la suma de los números pares del 2 hasta el número leído. Si el número leido es menor que 2, debe imprimir un mensaje de error. 4. Elaborar un algoritmo que lea un valor N, luego que lea N números de entrada e imprimir el total, el promedio, el mayor y el menor. 5. Elaborar un algoritmo que permita leer un adinero e imprima una tabla con las potencias de los números desde 1 hasta el número leido. La potencia de t, es t elevado a la potencia t. La potencia de 2, es 2 elevado a la potencia a, y asi sucesivamente, hasta la potencia del número leído. Número Potencia 9999 9999

9999 6. Elaborar un algoritmo para calcular e imprimir el cuadrado de los números impares del t al 15. 7 Elaborar un algoritmo que permita leer el valor inicial y el valor final en grados Fahrenheit, e imprima una tabla con equivalencias en grados Centigrados, desde el valor inicial hasta el valor final dei en t. Fahrenheit Centígrados

Valor inicial

99.99

Valor final

99.99


136 Metadolople do le PrograrnecIón Chantada selbetas

14. Elaborar un algoritmo similar al anterior, sólo que permita leer el valor inicial y el

valor final en grados Centígrados; e imprima la tabla con equivalencias en grados Fahrenheit, desde el valor inicial basta el valor final de 1 en 1. 9. Elaborar un algoritmo que imprima la secante, (»secante y tangente de X, para valores de X desde --1 hasta 1 con intervalos de o.i. Debe imprimir una tabla: X Secante X

Cosecante X

Tangente X

- 1.11 - o.8

99.99 99.99

99.99 99.99

99-99 9999

1.0

99.99

99.99

99.99

lo. Elaborar un algoritmo que permita que los valores de los coeficientes a, b y c se comporten asi: B debe ir de t hasta 7; C debe ir de 7 a 1; A debe tomar cada vez la diferencia de 11-C, y que imprima para cada juego de valores de a, b, c; si tiene raiz única, raíces complejas o raíces reales, similar al Ejercicio 6.2.12. u. Cada equipo de béisbol de la Liga Mexicana del Pacifico tiene un cuadro de 3o jugadores. Supóngase que cada equipo de la liga prepara un listado donde por cada jugador, aparecen los datos siguientes: nombre del jugador, peso, edad. Elaborar un algoritmo para leer estos datos y que emita el siguiente reporte: Estadistica de jugadores Equipo 1

Promedio peso

Promedio edad

2

999.99 999.99

999 99, 9

10

999.99

99.9

Promedio general peso 999.99 Promedio general edad : 99.9 12. Elaborar un algoritmo para determinar e imprimir una tabla de amortización de

préstamo; para ello se tienen como datos el saldo por amortizar, la tasa de interes anual y el número de meses que se tienen de plazo. Imprimir el reporte siguiente. Tabla de amortizacion Saldo: 99,999,999.99 Interés anual: 999.99 Numero de meses: 99


La repetacián FOR 137

Mes

Saldo insoluto

Cuota fija

Interes

Mensualidad

2

999,999-99 999,999 99

99.999,99 99.999.99

9,99999 9.99999

999,999-99 999,999,99

N

999.999,99

99,999.99

9,999.99

999,999.99

999,999.99

99,999.99

9,999,999.99

Totales I?atos disponibles:

Saldo Interés anual Número de meses (plazo) El proceso a seguir para obtener la información es el siguiente: Como datos de entrada se tienen el saldo, interés anual y número de meses. El mes es un dato de rivahle, de 1 a n meses, según sea el plazo, El saldo insoluto es el capital que se debe en el mes correspondiente. La cuota fija se determina dividiendo el saldo entre el número de meses. El interés se determina mediante la aplicación del interés mensual sobre el saldo insoluto. La mensualidad se establece sumando la cuota fija más el interés. Los totales son el producto de la acumulación de la cuota fija, el interés y la mensualidad. 13. Elaborar un algoritmo para calcular la cantidad que se tendría ahorrada después de ID años, si se depositan mil pesos mensualmente a una tasa de interés mensual de 3%, capitalizable cada mes, es decir, que al capital se le agregan los intereses. 14. Elaborar un algoritmo para calcular la cantidad que se tendría ahorrada después de 15 años, si se depositan quince mil pesos a una tasa de interés de 3.7% mensual. capitalizable cada mes. 15. La empresa Teléfonos de México ha decidido incrementar la tarifa de la renta mensual por uso del teléfono, en un 4% mensual. La tarifa en abril de 2005 es de $57.00. Elaborar un algoritmo que imprima el monto de la renta mensual en abril de 2006, 2007, 2008. 2025. t6. Elaborar un algoritmo para estimar la población estudiantil que se espera tener en un determinado año, los datos que se tienen son: la población actual de la escuela (número de estudiantes), el porcentaje de crecimiento anual que se espera tener, el año actual v el año al que se desea estimar el crecimiento. Todos estos datas deben ser leidos para. imprimir al final lo estimado.


138 Metudologo de lo Prograrnomen Unermodo a Objetas 17. las números Fibonacci constituyen una secuencia que empieza con o y u; el número que sigue a éstos se calcula sumando los dos anteriores y asi sucesivamente. Elaborar un algoritmo que lea un número N e imprima los N primeros números de la secuencia. Si N no es mayor que cero, debe imprimir un mensaje de error. 18. Elaborar un algoritmo que permita leer una medida (N) en número de metros, y que imprima una tabla de equivalencias a yardas, pulgadas y pies; desde 1 metro hasta N metros de uno en uno. Equivalencias: 1 pie = 12 pulgadas, 1 yarda = 3 pies. 1 pulgada = 2.54 cm, 1 metro = loo cm. Se debe imprimir la tabla siguiente: Conversiones Metros

u N

Yardas

Pulgadas

Pies

9999.99 9999.99 — 9999 99

9999.99 9999.99

9999.99 999999 — 9999.99

9999,99

19. Similar al anterior, sólo que se lee un valor inicial y un valor final: por ejemplo si los valores leidos son 100 y zoo; las conversiones se harán desde 100 hasta 200 de uno en uno. 20. Similar al anterior, sólo que el date a convertir es pies, es decir, es el que se leerá. También hacerlo para pulgadas y yardas. 21. Se tienen 12 escuelas: por cada escuela los datos: nombre de la escuela, población actual (número de estudiantes), porcentaje de crecimiento anual que se espera tener. Estarnos en el año actual. Elaborar un algoritmo que permita leer los datas de cada una de las escuelas e imprima el siguiente reporte: Reporte de escuelas Nombre de escuela

XXXXXXXXXXXXXXXXXXXXXX ~a:XXX XX)CCXXXXXXXXX -..

Pobl. est. actual

9999.9 9999.9

Pobl. est. año 2025

9999.9 9999.9

XXXX:500(XXXXXXXXXXXXXXX

9999.9

99999

Total 999 escuelas

9999.9

9999.9

La escuela mayor sera: XXXXXXXX2O=XXXXXM(XXX La escuela menor sera: XXXMOCCOOCXXXXXXXXMLX

22. Elaborar un algorimo similar al anterior, con la diferencia de que se tienen varias escuelas, es decir, no se sabe cuántas escuelas son; todo lo denlas es igual al problema anterior


14. refflenc.en FCSR 129

n Una compañía manufacturera fabrica un solo producto, se tienen los datos de la pro. ducción de cada uno de los siete días de la semana; los datos son: cantidad de unidades producidas, costo de operación por la producción del día y costo de los materiales utilizados. Elaborar un algoritmo que lea dichos datos e imprima el siguiente reporte: Costos de production Unidades Dia Producidas

Costo Produccion

Costo Materiales

Costo Unitario

99,999.99

99 99

999 999

99,999.99

99,99999 99,999.99

99,999-99 99,999-99

99

999

99,999.99

99,999.99

99.999.99

Total

999

99,999.99

99,999.99

Costo unitario promedio: 99,999.99 COSTO UNITARIO se calcula sumando el costo de producción más el costo de materiales y dividiéndolo entre las unidades producidas. TOTAL, sumatoria de unidades producidas de todos los dias, de los costos de producción y de los costos de materiales. COSTO UNITARIO PROMEDIO la sumatoria de los costos unitarios diarios entre la cantidad de días. .L4 Similar al caso anterior, excepto en lo siguiente: se tienen ocho plantas. Emitir el reporte: Costos de produccion Costo Produccion

Costo Materiales

Costo unit. Promedio

999 999

99.999-99 99.999-99

99.999 99 99,999 99

99.999.99

8

999

99,999-99

99,999-99

99,99999

Total

999

99,999-99

99.999-99

99,999-99

Planta 2

Unidades Producidas

Casto unitario promedió general: 99,999.99

99,999-99


140 kleendcaanie de le Programación Onencede a Chistas

Ahora las unidades producidas, costo de producción y costo de materiales son la sumatoria de todos los días de producción de cada planta; el costo unitario promedio es por planta. Y al final el costo unitario promedio general. 25. Una compañia manufacturera de bombillas tiene 5 plantas: Hermosillo, Guamúchil, Tijuana, Culiacán y México. Se tienen los datos de la producción de los días de la semana, de la siguiente forma: Planta e: Hermosillo Dia i; Cantidad producida Cantidad de defectuosas Día 2: Cantidad producida Cantidad de defectuosas Ola 7; Cantidad producida Cantidad de defectuosas Planta 2: Guamúchil Día

Cantidad producida Cantidad de defectuosas

Dia 2: Cantidad producida Cantidad de defectuosas Dia 7: Cantidad producida Cantidad de defectuosas

Elaborar un algoritmo que lea dichos datos e imprima el siguiente reporte: Reporte de control de calidad Planta I lermosilln Guamúchil

Unidades Producidas

Unidades Defectuosas Defectuosas

999 999

999 999

999.99 999.99

México

999

999

999.99

'Total

999

999

Porcentaje total de defectuosas: 999.99


Le

papeve■or, TOP. 141

% DEFECTUOSAS se calcula dividiendo unidades defectuosas entre unidades producidas. TOTAL sumaturia de unidades producidas y unidades defectuosas. PORCENTAJE TOTAL DE DEFECTUOSAS es la sumatoria del % DEFECTUOSAS de cada planta entre e] número de plantas. 26. Se tienen 5 inversiones, por cada una los datos: capital, tasa de interés anual v. el plazo en numero de meses. Elaborar un algoritmo que lea los datos de cada inversión e imprime el siguiente reporte: Inversion Capital: 99,999.99 talleres anual; 999.99 Plato en meses: 999 Mes 2

Capital

Interes

Saldo

99.999.99 99,99994

99,999.99 99.999.99

99999,99 99.999,99

99,999.99

99,999.99

99.999-99

3

N

Total interes ganado: -Inversion a Capital: -Interes anual: Plazo en meses: — Capital

Interna

Saldo

3 2

99.999,99 99.999,99

99,999-99 99,999.99

99,999.99 99.999.99

N

99.999-99

99,999-99

99.999.99

Mes

Total interes ganado: y9,999.99 Total general invertido: 999,999.99 Total generad in tere$ ganado: 999.999.99


142 Metooslogia de le Progrerneción Onentede e Ohietos 27. Similar al Ejercicio 6.2.15, pero con las diferencias siguientes: el número de días que laboró cada trabajador puede variar respecto de los demás trabajadores, es decir, un trabajador pudo haber trabajado 5 días, otro 4, otro 6. otro 4, etcétera. l imprimir al final del reporte: Trabajador mas productivo: 100E<X100C0000,00CXXXXXXXXX Total de unidades fabricadas: 9999 Trabajador menos productivo: Total de unidades fabricadas: 9999

XXXXXXX

Suponiendo que no habrá cantidades producidas iguales entre los trabajadores, el trabajador más productivo es el que tiene el mayor número de unidades producidas, mientras que el menos productivo es el que tiene el menor número de unidades producidas. 28. En una empresa se tienen 15 vendedores. Por cada vendedor se tiene su nombre y la cantidad vendida en pesos por cada uno de los varios días en que laboré. Elaborar un algoritmo que lea esos datos e imprima el siguiente reporte: Reporte de sueldos Total Venta

Sueldo

)00C7000000OCXXXXXXXX.XXX XPOOCCI00000000000000001

99,999.99 99,999.99

99,99999 99,99999

X:01XXXXXXX)000IJOCC1000{X

99,999.99

99,999.99

Total 999 vendedores

99,999.99

99,999.99

Nombre

Nombre del mejor vendedor: XXIXXXXXXX3C01300000000( Nombre del peor vendedor: XXXXXIKXXXXX7CXXXXMCXXX

Cdleulos: TOTAL VENTA es la sumatoria de la venta de todos los días de trabajo. SUELDO es el 4% del TOTAL VENTA del vendedor + 300.00 si el TOTAL VENTA está entre 15001.00 y 250no.00 6.00.00 si el TOTAL VENTA está catre 2500 hoo y 35000.00 000.no si el TOTAL VENTA es mayor a 35000.00 NOMBRE DEL MEJOR VENDEDOR es el vendedor que tenga eI TOTAL VENTA mayor.


Le repetmán FCCI 143

NOMBRE DEL PEOR VENDEDOR es el vendedor que tenga el TOTAL VENTA menor. 2y.

Similar al caso anterior, excepto en lo vendedor laboró 6 días.

siguiente: se tienen varios vendedores y cada

3o. En un equipo de basquetbol se tienen varias jugadores. Por cada jugador se tiene su nombre y la cantidad de puntos que anotó, por cada una de los so partidos ea que jugó. Elaborar un algoritmo que lea esos datos e Imprima el siguiente reporte:

Estadística de jugadores Nombre

Total puntos

Nivel de anotacion

•• ••• • • XX XDOCUCKMOCCXXXXXX,XXXXXX

999

rlgg

Deficiente Bueno

X)WCX.}00000001X1OCOUXXXX

999

Expelente

Total 99

999

jugadores

Nombre del mejor anotador: Nombre del peor anotador:

•••• ••• ►

XX XX XXX

PUNTOS es la sumatoria de los puntos que anotó en todos los juegos. NIVEL DE ANOTACIÓN ea un comentario que indica DEFICIENTE si TOTAL PUNTOS es menor que 41-} BUENO si TOTAL PUNTOS está entre 4o y go EXCELENTE si TOTAL PUNTOS es mayor que go TOTAL por un lado es el total de jugadores; y por el otro, es el total del total de puntos anotados por todos los jugadores. NOMBRE DEL MEJOR ANOTADOR es el jugador que tiene el TOTAL PUNTOS mayor. NOMBRE DEL PEOR ANOTADOR es el jugador que tiene el TOTAL PUNTOS menor. TOTAL

31. Similar al caso anterior, excepto en lo siguiente: se timen iu jugadores y cada jugador participó en vahos partidos

Nota: Estas eierdidos l'amblar, pueden resolverte utilizando DCLAVIIILI y WI-ILLE


144 Meudologia de in Prvyreirnauán Cimentada a Cibietoti

Resumen del capítulo Conceptos que debe dominar 3 La estructura de repetición tipo POR. 3 Utilizar ciclos anidados, es decir, un FOR dentro de otro FOR, un 130...WHILE dentro de un FOR y un FOR dentro de un DO...WHILE. 3 Cómo simular el FOR mi DO...WHI LE-


La repetición WHILE Contenido 7.1 Simulación del 00...I.4HILE WHILE 7.2 Simulación del FOR con WHILE 7.3 Ejercicios resueltos Ejercicios propuestos

del capitulo En el capítulo anterior hemos aprendido a plantear ciclos repetitivos utilizando la reción FOR. En este capitulo estudiaremos el manejo de la repetición tipo WHILE. ¡también aprenderemos a anidar ciclos repetitivos WHILE dentro de otro WHILE, se ircombinará con el uso de las estructuras estudiadas hasta ahora, corno por ejemplo idar WHILE con FOR y 00...WHILE. Además se tratará la torna de plantear idos y DO...WHIL E con WHILE.


146

Matodologla de la Prograrnwión DrIEntada a Oblatas

La repetición WHILE es una estructura que permite controlar la ejecución de acciones que se repetirán en un rango de o (cero) a N veces, esto se debe a que la condición de control del ciclo se coloca al principio de la estructura; y, entra al ciclo mientras la condición sea verdadera. En caso de que no se cumpla la condición, se termina el ciclo. Formato: WHILE condición Acción les) ENDWHILE Donde: WHILE Identifica la estructura y su inicio como un ciclo repetitivo. condición Es una expresión lógica que controla la ejecución del cielo. Acción ( as ) Es la acción o acciones que se ejecutarán dentro del ciclo. ENDWHILE Delimita el fin del ciclo repetitivo; envio el control al inicio de la estructura. Funcionamiento Se evalúa la condición: a) Si se cumple, entra al ciclo, se ejecutatn) la(s)acción(es), y al llegar al ENDWHILE. envía el control al WHILE, lo cual implica volver a evaluar la condición. —...WHILE I condición IAcción ( es) ENDWHILE b) Si no se cumple la condición, entonces se va ala siguiente acción después del ENID • WHI LE; es decir, se sale del ciclo. WHILE 'condición Acción(es) ENDWHILE Al llegar al WHILE. lo primero que se hace es evaluar la condición que controla el ciclo; si se cumple, entra al ciclo y se jecutan las acciones especificadas dentro del mismo. Al llegar al ENDWHI LE (fin del ciclo), el control se remite al inicio de la estructura, donde se evaluará de nuevo. En caso de no cumplirse la condición, el control se traslada a la primera acción después del ENDWHI LE (fin), lo cual implica salirse del ciclo. Por lo general la condición se establece mediante el uso de una variable que se compara con cierto valor u otra variable, debido a que la condición se encuentra al inicio del ciclo.


La repetición VVHILE 147

debe hacerse una lectura adelantada o iniciar dicha variable para que tenga un valor la primera ocasión en que llega al WHILE. Además, dentro del ciclo, debe actualizarse el valor de esa variable, por lo que es necesario incluir una lectura o asignarle un nuevo alar.

Nota: Cabe aclarar que esta estime:Lir" originalmente se inventó como DOWHILE; hacer mientras se cumpla la condlcion. Sin embargó ti Inventor del lenguaje C La implemento como WHILE; es decir, le elminct la palabra Da Y en virtud de que el ienunajeC es la base de Jawa y seguramente de los lenguajes que se diserten en el futuro, en este libo la osaremos de esta Corma. Si desea ver cómo funciona el DOWHILE original. puede hacerlo en el libro ltrograntadán estructurada un enfoque algoritmico' Segunda edición, publkado por esta misma editorial y de este rniSns0 asno,.

Por ejemplo, si ¡cura lus que procesar varios empleados y no sabemos cuántos son, la estructura general quedarla: Preguntar "¿Desea procesar empleado (S/N)?" Leer desea WHILE desea = "5' ProceSar empleado Preguntar "¿Desea procesar empleado 15/N1?" Leer desea ENDWHILE En la estructura anterior se utiliza la variable desea, que es de tipo Carácter. Para controlar el ciclo, antes del inicio del ciclo se hace ta pregunta una sola veo y la lectura adelantada, a fin de que dicha variable tome un valor inicial. Después de lo anterior llega al WHILE. Una vez procesado el empleado, para actualizar el valor de la variable, dentro del ciclo se incluyen la pregunta y lectura_ Como puede observarse estas dos acciones se colocan dos veces. Nota; lo primero que hace es evaluar si la condic.rán se cumple, y por el hecho de que desde la primeta vez pudiera no cumplirse, es que el »II LE permite plantear sirios que se repiten en un Intervale de 0 {cera) a N vetes.

7.1 Simulación del DO...WHILE con WHILE En virtud de que con la estructura WHILE se plantean ciclos que van en un rango de o basta Pi reces, es que con W III Lli es posible solucionar problemas de tipo DO....WHILE.


1413 Ideó:delego de la Programación Onerdada. 8 CIZIEDI

A continuación se presenta un ejemplo que es natural para el DO...WHILE, pero resuelto con WHILE.

teetrá •

rar un algoritmo que permita procesar varios empleados. igual al primer ejemplo del capítulo 5 (DO...WH [LE Y. Por cada empleado se leen los datos: Nombre del empleado. número de horas trabajadas y cuota por hora; y se imprime el nombre y sueldo. Acontinuationsetienee]algoritmodelasoludón; Algoritmo CALCULA SUELDOS DE EMPLEADOS Clase Empleados3 1. Método principal a. Declaraciones Variables nombreEmpi Cadena horasTrab: Entere cuotaHura, sueldo: Heel desea: Carácter b. Preguntar "/Desea procesar empleado (S/N1?" c. Leer desea d. WHILE desea = "S" 1, Solicitar Nombra, número de horas trabajadas Y cuota por hora 2. Leer nombreEMp, horasTrab, cuotaHora horasTrab • cuotaHora 3. Calcular sueldo 4. Imprimir nombreEmp, sueldo 5. Preguntar 1 2.Desea procesar empleado (S/N17' 6. Leer desea e. ENDWHILE f. Fin Método principal Fin Clase Empleados3 Fin

Este es en problema Cr1Fli que se procesan varias empleados y no se sabe cuántos, y corno usted podrá recordar ya lo resolvimos con el DC1311I LE en el capitulo S. es decir. e un problema natural para el EX/...WH I EE_ Ptn embargo, aquí lo estamos resolviendo con »II LE para que usted ave que Puede ser resueno c...ts ambas estructuras. y que observe la dliemnia el utilizar Mi I I_ElAn res del 1! ciclo se Pregunta "reines procesar empleado lSiNI7 lu‘stpo se lee en desea la respuesta. Esta Incluía adelantada se hace para que la primera vea que lieque el WHILE, la estable CO'rnt.g"a un valor o N '.

3


La ,apecnor, sAmiLE 149

En e

principal de la Clase Ernpleados3, se tienen las acciones:

a. Se declaran las variables que ya conocemos nombreEmp, horasTrah, cuotaHora y sueldo, además, desea es una variable carácter que servirá para controlar a] ciclo repetitivo. b. Pregunta ".2. Desea procesar empleado (S/N)?" u. Lee en de-sea la respuesta d. Inicia ciclo WH11.E si desea = "S" entra al ciclo i. Se solicitan el nombre, número de horas trabajadas y cuota por hora 2. Se Leen en nornbreEmp, horasTrab, cuotallora 3. Se calcula el. sueldo 4. Imprime nombreEn3p, sueldo 5. Se pregunta si "¿Desea procesar empleado (S/N)?'„ pregunta a la cual se debe contestar 5 para SI o una N para NO. fi. Se lee en desea, la respuesta que se dé a la pregunta anterior e ENDWHILE delimita el fin del ciclo WH1LE., envía el control hacia el inicio del ciclo f. Fin del método principal Luego se tiene el fin de la clase y el fin del algoritmo.

7.2 Simulación del FOR con WHILE En virtud de que con la estructura WH1LE se plantean ciclos que van en un rango de o hasta N veces, es que con WHILE es posible solucionar problemas de tipo FOR. A contlrMaCiO2 se presenta un ejemplo que es natural para el FOR, pero resuelto con WH1LE y oon 00...WH1LE.

Ta

rar un tl goritmo que imprima los números del s al lo. Este es un problema natural para el FOR, porque se conoce cuantas seres se repetirá.

Solocion usando FOR: Algoritmo IMPRIME 1 , 10 Clase ImprimeNumerosl 1. Método principal a. Declaraciones Variables i: Entero h. FOR i=1; i<=10; i+. 1. Imprimir i o. ENDFOR d. Fin Método principal


150 MffrnOnlogia <le la Programación Orientala

a Dbtetns

Fin Clase imprimeNumeros1 Fin

En 1011111 princ ipal de la Clase ImprimeNurnerosi, se tienen las acciones: a. Se declara la variable i h. Se plantea el ciclo FOR desde i = 1 hasta lo con incrementos de i; cada ves que entra al ciclo imprime el valor de i, c. Fin del ciclo FOR Imprimirá: 12 345 4 784 10. d. Fin del método principal Luego se tiene el fin de la clave y el fin del algoritmo. Solución usando WHILE

Algoritmo IMPRIME 1-10 Clase ImprimeNumeros2 1. Metodo principal a. Declaraciones Variables i: Entero b. i = 0 c. WHILE i. 5 10 1. i = i + 1 2. Imprimir i d. ERDWHILE e. Fin Método principal Fin Clase ImprimeNumeros2 Fin -•

En é1Mét

rincipal de la Clase ImprimeNumeros2, se tienen las acciones:

a. Se declara la variable i b. Se inicia el contador i en o. c. Se plantea el ciclo WHILE pregunta si i es menor a so (i<i0). Si se cumple, entra al ciclo, donde: Incrementa i en 1 Imprime el valor de i d. Fin del ciclo WHILE, que lo envio al inicio del ciclo. Imprimirá: t 2 3 4 5 6 7 8 9 to. e. Fin del método principal Luego se tiene el fin de la clase y el fin del algoritmo.


La cepariestin

151

En otras palabras. lo que estamos haciendo es manejar un contador, el cual se inicia en cero antas del ciclo, adentro del ciclo se incrementa en o y se imprime. En la condición de control del ciclo se pregunta si es menor que lo. Solución usando 1:10—WHILE Algoritmo IMPRIME 1-10 Clase ImprimeNumeros3 1 Método principal a. Declaraciones Variables i: Entero b. i O C. DO 1.i. = i + 1 2. Imprimir 1 n. WHILE i < 10 s. Fin Método principal Fin plass ImprimeNnmerps3 Fin

11 1111110111ipal de la Clase imprimeNumeros3, se tienen las acciones: a. Se declara la variable i h. Se inicia el contador i en o. c. inicia el ciclo DO....WH1LE; entra al ciclo. donde: o. incrementa i en 1 2. Imprime el valor de i d. Cierra el ciclo con WHLLE, pregunta si i < lo; si es así se regresa al DO a repetir el ciclo; si no, se sale del ciclo. Imprimirá:o 2 3 4 5 6 7 S lo. e. Fin del método principal Luego se tiene el fin de la clase s el fin del algoritmo. En otras palabras, lo que estamos haciendo es manejar un contador, el cual se inicia en cern antes del ciclo, adentro del ciclo se incrementa en i y se imprime. En la cm:die:Sin de control del ciclo se pregunta si es menor que lo. Diferencia entre los tipos de repetición Lostipos de repetición DO....W'HILE. FOR y WHILE se diferencian entre si, de acuerdo con el rango de repeticiones que permiten:


152 Metudoluga de w Ptegrarnacetn Onentada e iln$etos

El DO.....WHILE permite un rango de repeticiones que va desde 1 hasta N veces, es decir, lo que está dentro del ciclo se deberá ejecutar al menos una vez, v mientras se cumpla la condición de ejecución del ciclo; cualquier cantidad de veces. El FOR es Mil para controlar ciclos en los que se conoce de antemano el numeroe veces que se deberán ejecutar las acciones que están dentro del ciclo. Esto es porque se controla con sin contador, que toma desde un valor inicial, hasta un valor final con un incremento. El WHILE permite un rango de repeticiones que va desde o {cero] hasta N veces, porque lo primero que se hace es evaluar la condición que controla el ciclo, si es-ta se cumple entra al mismo, pero si no se cumple se va a la siguiente andén después del ciclo; esto permite que, anegar la primera vez al ciclo, si no se cumple la condición, no entra ninguna ver al ciclo; y en caso de cumplirse puede entrar una y otra vez, es decir, hasta N veces, Mi, cuando se tiene un problema que contiene repeticiones, debemos analizar el tipo de repetición que es: • Si se conoce exactamente cuántas veces se va a repetir, es tipo FOR. • Si se sabe que algo se va a repetir, aunque sepa cuántas veces, pero se conoce que si va a haber al menos una ejecución, es tipo DO...1%1-11LE. • Si se sabe que algo se va a repetir, aunque sepa cuántas veces, y que puede repetirse desde o {cero) hasta N veces, es tipo WH1LE.

7.3 Ejercicios resueltos Ejercicio 7.3.1 El sueldo que perciben los vendedores de una empresa automotriz, está integrado de la manera siguiente: Él salario mínimo, más Sloo.o0 por cada auto vendido, más el 2% del valor de los autos vendidos. Datos que se tienen por cada vendedor: Nombre del Vendedor precio auto 999,999.99 precio auto : 999,999.99 precio auto : 999,999 gg Nombre del Vendedor precio auto: 999.999-99 precio auto: 999,999.99 precio auto :999,999.99 Nombre del Vendedor XXXXXXXXKKEOZXXICOEIC=OCaXXX precio auto : 999,999.99 precio auto 999,999.99


Lo regir-cien saailLE 153 Como se puede apreciar, se tienen varios vendedores; por cada vendedor se tiene el n oie hre y el precio de cada auto que vendió en la quincena; es posible que algunos vendeJorei no hayan realizado venta alguna, en tal caso, sólo se tendrá el nombre. Elaborar un algoritmo que permita leer los datas e imprimir el siguiente reporte: Nomina Quincenal Sueldo

Nombre

XX-XX XXXXXXXXXXXXX3(14•1100001 >001.XXXXXXXXXXX=C10001:700a

Totales 999

••••

99.999,99 99,999,99

99.999,99 999999,99

(Primero krágoto usred....después compare la solución/

Algoritmo VENDEDORES DE AUTOS Clase VendedoresAutos 1, Método principal a. Declaraciones variables nombreVend: Cadena desea, otro: Carácter totAutos, totVend: Entero precioAuto, salMin, sueldo, totSueldos, totVendido: Real b. Solicitar el Salario mínimo c. Leer salMin d. Imprimir Encabezado e. totSueldos = O totVend = 0 f. DO 1. Solicitar el Nombre del vendedor 2. Leer nombreVend 3. totAutoS = O totVendido = 0 4. Preguntar "¿Hay auto vendido (S/H}?" 5. Leer otro 6. WHILE otro = "S' a. Solicitar el precio del auto U. Leer precioAutO 1 totAutos C. totAutos


154

Menadologa de La Pragremacam Pnarrceda al:104t.5

tOtVendido = totVendido precioAuto d. Preguntar "¿Hay otro auto vendido ISINW e. Leer otro 7. ENDWHILE 8. sueldo a SalMin+(totAutos.1001+(totVendido*0.02) 9. Imprimir nombreVend, sueldo le. totvend totvend + 1 totSueldos = totSueldos + sueldo 11. Preguntar 'Lblay Otro vendedor IS/Nrr 12. Leer desea 9. WHILE desea = "S" h. Imprimir totVend, totSueldos i. Fin Método principal Fin Clase VendedoresAutOS Fin

En el Métodop neilmddelaClaselzendedoresAulms,sehenenlasaeciones, a. Se declaran Fas variables b.SesolidtaelSdarionahno c. SeleeensalAfin d. Imprime encabezado e. lnidatotSueldosen o InidatoWendeno f. Inicia ciclo DO para procesar varios vendedores 1. SeEdtaelNonahredelvendedor 2.SeleeennombreVend 3. InieiatotAuluseno IniciatorVendidoeno 4.Pregunta'alavaulovendido(S/ND2' 5. Lee en olio la respuesta 5. LUdaekluVV1HILEpanapr~arlosauttmvendidosperelvendedor; eomperasiotroesigeda"S-;siesasf.entraaleldu a. SohdtaelPreebdelauto b.SeleeenpreeinAulo c. Inerementalolkuloseni Incrementa loWeudidu Don precioAuto d.Pregunta"¿HayoMpautovendido~" e. LeeeeoUulatespuesta

7. Fin del ciclo WHILE 8. Calcula sueldo-saIM in+(totAutos'ioo)+(toWend ide"0. 021 9. imprime nonahmVend, sueldo lo. 1 ncrementaMtvend en incrementa totSueldos con sueldo 1L Pregunta "¿Hay otro vendedor (Spqr


La repeucaln WHILE 155 Lee en desea la respuesta Fin ciclo (DO...WHILE) mientras desea sea igual a "S- vuelve al DO; Si no. sale del ciclo. h. Imprime tolVend, tolSueldos i. Fin del método principal 12.

',lego se tiene el fin de la clase y el fin del algoritmo.

Nota: El puma r ciclo es del tipo DO...WHILE. porque .caberse resuello ron WHILE. El

son varios vendedores.sin embargo, también podría

segundo ciclo. que procesa los autos vendidos. soto puede resolverse con WHILE porque la que se presenta hasta cualquiercantidad de autos vendidos.

re petición

Ejercicio 7.3.2 La Comisión Nacional del Agua Delegación Sonora, lleva un registro de las lluvias que se presentaron en todas las poblaciones del estado, de manera que se tienen los siguientes datos: Población X— Lluvia: ---Lluvia: --

X

Población 2: X Lluvia: --

X

l luvia: Población N: X Lluvia: --Lluvia: ---

-X

Lluvia: --Por cada población aparece el dato lluvia tantas veces auno lluvias haya habido, este dato está en milinterro.s cúbicos, pudiera darse el caso de que en alguna población no traiga ningún dato de lluvia, esto quiere decir que no llovió. Elaborar un algoritmo que lea estos datos e imprima el reporte:


156 Mesodologo de le Prograrnaoón ID-macada a Uaetas

Reporte de lluvias Poblacion

XX)OCCOOCXXXXXXXXXXXXXX XX7X.100000001XXXXXXXXXX

Total lluvia

999-99 999.99

XXXY.XXXXXX300OCX . XXXXXXX

999-99

Total 999 poblaciones

999-99

Total poblaciones donde no novio:

999

Cálcalas:

TOTAL W.UVIA es el total de lluvia que se presentó en una población. se calcula sumando la cantidad de milímetros cúbicos de todas las lluvias. Se piden dos totales TOTAL de poblaciones procesadas y el total del total de lluvia en todas las poblaciones. También se pide la cantidad de poblaciones donde no se presentó lluvia alguna. (Primero hágalo usted...después compare la solución) Algoritmo LLUVIAS Clase Lluvias 1. Vetado principal a. Declaraciones Variables poblacion: Cadena Otro, hay: Carácter totPobla, totPobhoLluvia: Entero lluvia, totLluvia, toTotLluvia: Real b. Imprimir encabezado c. totPobla = totPobNoLluvia = 0 toTotLluvia = O d. Preguntar '¿HAY POOLACION (SIN)7' e. Leer hay f. WHILE hay = '6" 1. Solicitar POSLACION 2. Leer poblacion 3. totLluvia = O á. Preguntar '¿HAY LLUVIA (S/NI?' 5. Leer otro 6. WHILE otro - 'S'


La meUe...ou VVH1LE 157

a. Solicitar Lluvia en milímetros cúbicos b. Leer lluvia c. totLluvia = totLluvia lluvia d. Preguntar "¿HAY OTRA LLUVIA ( S / ) 7" e. Leer otro 7. ENEMINI LE 8. Imprimir poblacion, totLluvia totPobla + 1 9. totPobla toTotLluvia toTotLluvia + totLluvia 10. IF totLluvia = 0 TREN a. totPobNoLluvia = totPobNoLluvia + 1 11. ENDIF 12. Preguntar '¿HAY OTRA POBLACION (SIN)?" 13. Leer hay g. ENOWHILE h. Imprimir totPobla toTotLluvia, totPobNoLluvia i. Fin Método principal Fin Clase Lluvias Pio

En e ffi pnncipat de la Clase Lluvias. se tienen las acciones: t l a. Se declaran las variables h. Imprime encabezado c. Inicia totPobla en o; totPobNoLluvia en o; toTotLluvia en o d. Pregunta "il-LAY POBLACION (S/N)?" e. Lee en hay la respuesta f. Inicia ciclo WHILE mientras hay es igual a "S"; entonces entra al ciclo 1. Solicita POBLACION 2. Se lee en poblaeinn 3. Inicia totLluvia en o 4. Pregunta "¿HAY LLUVIA (S/N)?" 5. Lee en otro la respuesta 6. Inicia ciclo WHILE mientras otro es igual a 'S"; entonces entra al ciclo a. Solicita lluvia en milímetros cúbicos b. Se lee en lluvia c. Incrementa totLluvia con lluvia d. Pregunta °MAY OTRA LLUVIA (S/N)?" e. Lee en otro la respuesta 7. Fin del ciclo WHILE S. Imprime poblacion, tolLItivia 9. Incrementa totPobla en Incrementa toTotLluvia con totLluvia lo. Si totLluvia = o entonces


158

Metodología da Pa Programacron Onentada a Olemos a. Incrementa totPobNoLluvia en la. Fin del IF 12, Pregunta "¿HAY OTRA POBLACION (S/N)?" 13. lee en hay la respuesta g. Fin del cielo WH lLF. h. Imprime totPobla, toTotiluvia, toiPobNoLluvia i. Fin del método principal

Luego se tiene el fin de la ciase y el fin del algoritmo.

Nata: El primer ciclo se ha resuelto con WhILE sin embargo, cambien podría resolverse con DO...1VHILE inclusive, seria más natural. El segundo ciclo, que procesa las lluvias, sólo puede resolverse con WHILF porque la repetición que se presenta puede Ir desde u (cero) hasta cualquier cantidad de lluvias.

En el CD anexo; para el capitulo 7, Se etteu entran los ejercicios resuellos:

Ejercicio 7.3.3 Ejercicio 7.3.4 Ejercicio 7.3.5 Ejercicio 7.3.6 Ejercicio 7.3.7 Ejercicio 7.3.8 Ejercicio 7.3.9

Procesa materiales requeridos para fabricar productos Procesa mantenimientos de máquinas Procesa la producción de in estaciones de trabajo Procesa la producción de varias estaciones de trabajo Calcula valores para XYZ Obtiene pares entre o y 20 Determina si un número es par o impar 4~~1~11.011~1111

Ejercicios propuestos

1. Similar al ejercicio 7.3.1 sólo que ahora se tienen 20 vendedores; y al final del report debe imprimirse el nombre del vendedor que tuvo el mayor total venta y del que tu, el menor total venta. Suponiendo que no habrá iguales cantidades de total venta. 2. Similar al ejercicio 7.3.2 sólo que ahora se tienen 45 poblaciones; y al final del report debe imprimirse el nombre de la población que tuso el mayor total lluvia y de la qt tuvo el menor total lluvia (pero habiendo llovido). Suponiendo que no habrá igual cantidades de total lluvia. 3. Elaborar un algoritmo similar al Ejercicio 5.2-5: con la diferencia de que ahora ea< obrero trabajó vahos días y puede darse el caso de no haber laborado ningún día. 4. Elaborar un algoritmo similar al Ejercicio 5.2.5; inn la diferencia de que ahora tienen 15 obreros y cada obrero trabajó varios días y puede darse el caso de no halo laborado ningún día.


La repasoLo. VVHiLE 159

Elaborar un algoritmo similar al Ejercicio propuesto 30 del capitulo 6; con la diferencia de que ahora; por cada jugador se tiene su nombre y la cantidad de puntos que anotó, por cada uno de los partidos en que anotó y puede dame el caso de que no haya anotado puntos en ningún juego. e. Elaborar un algoritmo similar al Ejercicio propuesto 30 del capítulo 6; con la diferen-

cia de que ahora hay 12 jugadores y por cada jugador se tiene su nombre y la cantidad de puntos que anotó, por cada uno de los partidos en que anotó y puede dame el caso de que no haya anotado puntas en ningún juego. L'•na compañia manufacturera fabrica el producto A. Para fabricar una unidad de dicho producto se requieren los siguientes materiales: Material 1: 3 unidades Material 2: 4 unidades Material 3: r unidades Material 4: 2 unidades Material 5: 3 unidades Material 6: 2115idadeS Se tienen como datos el costo de una unidad de cada uno de los seis materiales. Elaborar un algoritmo que lea los costos de los materiales, luego que lea pedidos del producto A. en cada pedid❑ se tiene el dato cantidad de unidades del producto A; cuando termine de leer los pedidos. imprimir Listado de materiales requeridos Material

Total de unidades

2 3 4 5 6

Costo estimado

999 999 999

99,999.99 99,999.99 99.999.99

999

99.999.99

Costo total

99,999.99

8. Similar al ejercicio anterior, sólo que ahora se fabrican el producto A, el producto B y el producto C. Para fabricar el producto B se requieren los materiales: Material 1: 2 unidades Material 2: 5 unidades Material 3: 2 unidades Material 4: t unidades


160 MeuxioLogia oe le Prograrrsamn Oneinada a Oblatos

Material 5: 2 unidades Material 6: 4 unidades y para fabricar el producto C se requieren los materiales: Material t: 7 unidades Material 2: t unidades Material 3: 5 unidades Material 4: 4 unidades Material 3: 2 unidades Material 6: 3 unidades 9. Similar al ejercicio 7.3.4 sólo que al final se indique la máquina que tuvo la mayor cantidad de mantenimientos, y además, que se imprima cuál fue el tipo de mantenimiento que más se aplicó. Suponiendo que no habrá iguales. lo. Similar al ejercicio 7.3.5 sólo que al final imprima el porcentaje de estaciones de trabajo que estuvieron deficientes, el % que estuvieron bien y el % que estuvieron excelentes. En la linea de producción de una compaida manufacturera se pueden presentar nueve tipos de fallas (1.2,3,4,5,6,7,8.9). Se tienen los datos de las fallas ocurridas en cada uno de los 6 días laborables de la semana: por cada dia se tiene el tipo de falla, tantas veces como fallas se hayan presentado; en un dia pudo no haber falla alguna. Elaborar un algoritmo que lea estos datos e imprima el siguiente reporte: Reporte semanal de fallas Total de fallas ocurridas: 999 Total fallas tipo 1: 999 Total fallas tipo 2: 999 Total fallas tipo 3: 999 Total fallas tipo 4: 999 Total fallas tipo 5: 999 Total fallas tipo 6: 999 Total fallas tipo 7: 999 Total fallas tipo 8: 999 Total fallas tipo 9: 999 Tipo de falla que mas °eximio: 999

Nota Se recomiendan corno ejercicios a realizar los resueltos y los propuestos en los dos capitulo• anteriores Is y 7).


Resumen del capítulo onceptüs quo debe dominar

1 La em.ruetura de repetición tipo WHILE. 3 Anidar cielos repetitivos WHILE dentro de In m WHILE. 3 Combinar con e] uso de las CSICLICSUI ras estudiadas hasta ahora, como por ejemplo anidar WH MI? con FOR y r>0....WHILE. 3 Plantear ríelos tipo FOR v DO...WHILE, con WHLI.E.


Arreglos Contenido 8.1 Arreglos unidimensiona les 8.1.1 Ejercicios resueltos para unidimensione[es 8.2 Arreglos tridimensionales 8.2.1 Ejercicios resueltos para tridimensionales 8.3 Arreglos tridimensionales 8.3.1 Ejercicios resueltos para tridimensionales 8.4 Arreglos tefradimensiona les 8.4.1 Ejercicios resueltos para tetradirriens lona les Ejercicios propuestos

Objetiva del capítulo Hasta este momento se han estudiado las estructu ras de datos simples y 1.35 estructuras de control. En este capitulo se estudiará la estruclura de datos denominada arreglos unidimertsinnales 1de una dirnenslánl, hichmenslonales !de dos dimensionesi. rriánsensionalrE. [tres dirnensione0 y tenachrnenslanahm [cuatro dimensiones); se abordarán aspecros tales como la definición y roan tpu ladón de los elementos de 105 diferentes tipos de arreglos y su aplicar.itio.


154 Mesnciglege de la Programee,an Dnarrsria e alleLa9 El arreglo es un tipo de dato estructurado formado por un conjunto de elementos de un mismo tipo de datos. En los capítulos anteriores hemos utilizado los tipos de datos Entero, Real, Cadena, Carácter y Boolean, los cuales son considerados como datos de tipo simple, puesto que una variable que se define con alguno de estos tipos sólo puede almacenar un valor a la vez, es decir, existe una relación de uno a uno entre la variable y el número de elementos (valores) que es capaz de almacenar. En cambio, un dato de tipo estructurado como el arreglo, puede almacenar a más de un elemento (valor) a la vez, con la condición de que todos los elementos deben ser del mismo tipo de dato, es decir, que se puede tener un arreglo de. datas enteros, reales, etc. Los arreglos se clasifican de acuerdo con el número de dimensiones que tienen. Así. se tienen los unidimensionales (de una dimensión). los bidimensionales (dos dimensiones) y los multidimensionales (de mas de dos dimensiones); dentro de éstos están los tridimensionales (tres dimensiones). tetradimen.sionales (cuatro dimensiones). etc. En este libro se tratarán los unidimensionales, bidimensionales, tridimensionales y letradimensionales.

111 Arreglos unidimensionales El arreglo unidimensional o de una dimensión, está formado por u n conjunto de elementos de un mismo tipo de datas que se almacenan bajo un mismo Timbre y se diferencian luz la posición que tiene cada elemento dentro del arreglo de datos. Veamos el siguiente ejemplo: Se tiene el número de unidades producidas por un obrero en cada uno de las 3o días del mes. Elaborar un algoritmo que permita leer la producción de cada uno de los 3o días, sin que se pierda la producción de ninguno de los días; esto es, se lee la producción del primer dio. se lee la producción del segundo día, sin que se pierda la del primero, y así sucesivamente, al leer la producción del día 30, que no se pierda la de ninguno de los 29 días anteriores. a) Una opción sería usar 30 variables, tina para cada día, de la siguiente manera; prodoec¡onao produccionl, produoci0n2, produccion3„ • b) Otra opción es usar un arreglo con una dimensión de 30 elementos, como se muestra en la siguiente figura: producción

tu


Arreglos /55

En a gura tenemos un arreglo llamado praduccian con 3o elementos, el primero de ellos se identifica con la posición o, el segundo tiene la posición 1, el tercero la posición 2, así sucesivamente hasta el elemento 3o que tiene la posición número 29. Mi, la producciOn del día i se almacena en él elemento número 0, la producción del día a se almacena en e] elemento t. v así sucesivamente hasta la producción del dio 30 se. almacena en el ..h.niento

Nota: itay nsousdurogros de la programación y lenguajes, en que los elementos do un arregle inician con el número 1 y yen hasta N. dando N es el numere de clementes del arreglar Por ejemplo; un arreglo de 50 elementos Feriara desde el elemento ]hasta el el mento 50; y un arregle de 100 elerr,erdUS, londra desde el. elemento 1 hasta el elemersa 190.

Sin embarga, lao lenguajes C, C+ +. lava y derivados tienen la peculiaridad de que el primer elemento de un arreglo es el número o (cero), el segundo es el mimen, t, ek tercero e! 2, y así sucesivamente hasta el elemento N-1; donde tic: el número de elementos del arreglo. Por ejemplo, un arreglo de 5o elementos tendrá desde el elemento o hasta el elemento 49; y un arreglo de roo elementos tendrá desde el elemento O hasta e] elemento 99. En la metodología que se está presentando en este libro se utilizará este concepto. Definición del arreglo un:dimensional Cuando se define un arreglo, es necesario hacerlo comes una variable. En la parte de declaraciones de variables se utiliza el siguiente formato: nombreVariable: ArregloiTamañol Tipo de dato Dende: no rilb r eVa ria ble Es el nombre de identificación de la variable. Arreglo Es la palabra reservada que indica que la variable es un arreglo. Tamaño Es un número entera que indica la cantidad de elementos que tendrá el arreglo, por ejemplo, 10, 20, 50, 100, 500, 1000, etcétera. Tipo de dato Es el tipo de dato que tendrá el conjunto de elementos del arreglo q ese se está definiendo, puede ser Entero, Real, Cadena, etcétera. Si aplicamos las conceptos ardo-lores para definir un arreglo que nos sirva para Almacenar la producción de los lo días del mes, tenemos:

Declaraciones Variables producción: Arreglot3el Entero


1Ele MeuxIologin de la Programación Orla-wad:1 a Chocos

iiOr–" orion— es el nombre de la variable que se está declarando. 0 Es un arreglo que contiene 30 elementos (del o al 2q)7 Cada elemento del arreglo es mi dato de tipo entero. Maneto de los elementos del arreglo unidimensional Cada elemento individual de un arregla relaciona con e] nombre de la variable y un número que indica la posición que ocupa el elemento dentro del arreglo. Dicho numen, se pone entre [ I y se le llama subíndice, indice o suscrito. De acuerdo con lo anterior. en nuestro ejemplo tenemos que: El elementos se relaciona con p rodu cc ion [ 0] El elemento 2 se relaciona con procluccion[1 ] El elemento 30 se relaciona con producc ion [ 29] El subíndice puede ser un valor constante de tipo entero como: 0 , 1, 2 , , 29. También puede ser una variable de tipo entero, como: produccion[i] O bien, puede ser una expresión algebraica que dé un resultado de tipo entero, como: produccionli+31 produccionl(i•4)-11 Como toda variable, una de tipo arreglo puede usarse para leer datos, asignarle valores mediante expresiones aritméticas, imprimir su contenido, formar parte de expresiones lógicas, etcétera, por ejemplo: produccion[0] = 20 Leer produccion[i] Leer produccion[10] produccion[20] = produccion[0] + produccion[5] Imprimir produccion[20]

11111LO Elaborar 'un algoritmo que lea la producción de un obrero en cada uno de los 30 días del mes y que lo imprima. La lectura se podria hacer de la siguiente manera: Leer produccion[0] Leer produccion[1]


Arreglas 187

Leer produccion[29] O hien, planteando un ciclo repetitivo, se hace la lectura más eficiente:

FOR i=0; i<=29; i++ Solicitar producción del dia i+1 Leer produccionli] ENDFOR

y1111

Se p antes e ea o desde que i tome el valor de 0 hasta 29, por cada valor dei entra al ciclo; donde se solicita y lee la producción del día número I.+1, es decir, la primera vez solicita la producción del dia número 1 y lo lee en el elemento produccion [ i ]. es decir, en el elemento 0 del arreglo producción, la producción del dia 2 lo lee en el elemento 1, y así, hasta llegar a leer la producción del día 30 en el elemento 29. ¿Por qué se solicita la producción del dia 1.-41 y se lee en el elemento i? Porque se tiene la producción del día'', del día a, del día 3 y así hasta la producción del dia 30; pero en el arreglo se tiene el elemento o, el t, el 2, el 3 y as: hasta el elemento 29; y lo que se hace es: la producción del día 1 leerla en el elemento o, la producción del día 2 leerla en el elemento t y asi, hasta la producción del día 30 leerla en el elemento 2g. El algoritmo completo quedaría de la siguiente manera:

Algoritmo PROOUCCION 30 DiaS Clase Produccion 1. Método principal a. Declaraciones variables produccion: Arreglo]30] Entero i: Entero b. FOR i=0; i<=29; i++ 1. Solicitar producción del dia i+1 2. Leer produccion[i] c. ENDFDR d. FOR i=0: i<=29; i++ 1. Imprimir produccion[i] e. ENDFOR f. Fin Método principal Fin Clase Produccion Fin

p ncipal de la Clase Producción, se tienen las acciones:


I BS Matodzeogas de La Programado Doenteria e ❑sietos

a. Se declara la variable producción como un arreglo de 30 elementos de datos

de tipo entero. para almacenar en cada elemento, cada uno de los 30 días de producción. b. inicia ciclo FOR que va desde o hasta 29 con incrementes de 1. I. Solicita la producción del dia número 2. Lee la producción en e] elemento número i. c. Fin del ciclo POS d. Inicia ciclo FOR que va desde o hasta 29 con incrementos de 1. I. 1r-oprime la producción del dia número +1, que está en el elentenlo número i.

e. Fin del ciclo FOR f. Fin del Método principal Luego se tiene el fin de la clase y el fin del algoritmo. Forma más ganenI de definir arreglos Un arreglo puede definirse de una forma más general utilizando la declaración de tipos, para definir un nuevo tipo de dato de tipo arreglo, por ejemplo: Declaraciones Tipos DiezEnteros = Arreglo[101 Entero Se ha definido un nuevo tipo de dato llamado DiezEnteros, que es un arreglo de Lo elementos de tipo Entero cada uno. Ahora, ese tipo de dato puede ser utilizado en la definición de variables, por ejemplo; Declaraciones Variables a: DiezEnteros b: DiezEnteros s: DiezEnteros Otra forma de definir las variables anterloms: Declaraciones Variables a, b, s: DiezEnteros Donde: a,e, 5

Son variables de tipo DiezEntems, es dwir. son arreglos de lo ciernen ile i i pi 3 Entero cada Lino.

Esto también es aplicable a los derivis tipos de arreglos que se estudian en los siguientes puntos.


Amegms 189

8.1.1 Ejercicios resueltos para unidimensionales Ejercicio 8.1.1.1 Elaborar un algoritmo que ica el nombre de un vendedor y las rentas realizadas en cada uno de los lo días del mes, que las almacene en un arreglo y que imprima el reporte siguiente: Nombre del vendedor: XXX Venta del día t : 999,999.99 Venta del día 2 : 999,99, 7.99

• • • ••

Venta del día 30: 999,999.99 Venta total del mes: 9,999,999.99 Donde la venta total del mes se calcula mediaste la suma de las ventas realizadas en cada uno de los 3o días. (Primero hágalo usted...después compare la solución) Algoritmo VENTAS MES Clase Venta 1. Método principal a. Declaraciones Variables nombreVend: Cadena ventas: Arreglo[30] Real i: Entero totVenta: Real b. Solicitar nombre del vendedor c. Leer nombreVend d. FOR 1=-- 0; i<=29; i++ 1. Solicitar la venta del día 1..1 2. Leer ventas(i] e. ENDFDR f. totVenta = 0 g. Imprimir nombreVend h. FOR i=0; i<=29; i++ 1. Imprimir ventas[1] ventas[i] 2. totVenta = totVenta i. ENDFOR j. Imprimir totVenta k. Fin Método principal Fin Clase Venta Fin


170 Metaáaddia de la Programadlo °mentada a Oblatos

Ene et o pnncipal de la Clase Venta, se tienen las acciones: a. Se declaran las variables ventas como un arreglo de 3o elementos, para almacenar las ventas de cada une de los 3o días del mes; totVenta para calcular la sumatoria de las ventas de los 3o días b. Se solicita el nombre del vendedor c. Se lee en nombreVend d. Inicia ciclo FOR desde i= o hasta 29 con incrementos de 1. Solicita la venta del dia número ii2. Se lee en ventasfii e. Fin del FOR E Inicia totVenta en o g. Imprime nombreVend la. Inicia ciclo FOR desde i=o hasta 2g con incrementos de u. Imprime ventas[ij 2. Incrementa totVenta con ventaslil i. Fin del FOR j. Imprime totVenta k. Fin del Método principal Luego se tiene el fin de la clase y el fin del algoritmo. Ejercicio 8.1.1.2

Elaborar un algoritmo que lea los elementos de dos arreglos, cada uno con lo números enteros. Calcular los elementos de un tercer arreglo, sumando las elementos correspondientes de los dos primeros, de la siguiente manera: que se sume el elemento 1 del primer arreglo y el t del segundo y que el resultado se almacene en el t del tercero y asi sucesivamente. Además, se requiere que al final imprima los tres arreglos de la siguiente forma: Arreglo -1 +

Arreglo 2

=

Arreglo 3

99 99

99 99

999 999

99

99

999

(Primera hágalo usted...después compare la solución) Algoritmo SUMA ARREGLOS

Clase SumaArreglos 1. Método principal a. Declaraciones Variables


Arreglos 171

a, b, s: Arreglo[10] Entero i: Entero b. FOR 1=0; i4=9; i++ 1. Solicitar elemento i del arreglo a 2. Leer a[1] 3. Solicitar elemento i del arreglo b 4. Leer b[il 5. Calcular s[i] = a[i] + b[i] c. ENDFOR d. Imprimir encabezado e. FOR i=0; 14=9; 1++ 1. Imprimir a[i], b[1], s¡i] f. ENDFOR g. Fin Método principal Fin Clase SumaArreglos Fin

EliénfeMgheipal de la Clase SurnaArreglos, se tienen las acciones; a, Se declaran las variables h, 5 corno arreglos de so elementos cada uno. : Entero h. Inicia ciclo FOR desde i =o hasta g con incrementos de 1. Solicita elemento i del arreglo a 2. Seleeen a[iJ 3. Solicita elemento i del arreglo b 4. Se lee en b[i] s.. Calcula s[i]=a[i]+b[i] e. Fin del FOR d. Imprime encabezado e. Inicia ciclo FOR desde i=o hasta g con incrementos de 1. Imprime an b[i], f. Fin del FOR g. Fin del Método principal Luego se tiene el fin de la clase y el fin del algoritmo. Ejercicio 8.1.1.3 Elaborar un algoritmo que permita leer un vector de w números en un arreglo A de lo elementos, lo mismo para un arreglo 13: calcular e imprimir el producto de A a B. Para obtener el producto de dos vectores se multiplica el elemento t del vector A por el elemento i del vector R, el 2 de A por el 2de 5, y asi sucesivamente, obteniéndose la surnatoria de los productos; el resultado no es un vector, sirio un valor simple. (Primero

háblalo usted...después compare la solución)


172 Meto,Sologie de la Programación Drenada a Chatos Algoritmo PRODUCTO DE VECTORES Clase ProductoVectores 1. Método principal a. Declaraciones Variables vectorA, vectorB; Arreglolle] Entero r, producto: Entero b. FOR r=e; r<=9, r++ 1. Solicitar vectorA[r] 2. Leer vectorA[r] c. ENDFOR d. FOR r-C; r<=.B; r++ 1. Solicitar vectorBfr] 2. Leer vectorB[rl e. ENDFOR f. Imprimir encabezado g. producto = h. FOR r=0; rrog; h+. 1. Imprimir vectorAtrj, vector-8[r] 2. producto = producto « (vectorA[r] • vectorp[rD U. ENDFOR 3, Imprimir producto k, Fin Método principal Fin Clase ProductoVectores Fin

Explicación: 4 En el M, todo principal de la Clase ProductoVectores, se tienen las acciones:

a. Se declaran las variables U. Inicia ciclo FOR desde ro hasta 9 t. Solicita vectorAfr] 2. Se lee en vectorA[r] c. Fin del FOR d. Inicia ciclo FOR desde r=o hasta q 1. Solicita elemento r del vectorB 2- Se lee en vectorBlrj e. Fin del FOR f. Imprime encabezado g. Inicia producto en o h. Inicia ciclo FOR desde roo hasta 9 Imprime vectorAttl. vectorB[r] 2. Incrementa producto con (vectorA[r] vectorB[r]) i. Fin del FOR j. Imprime producto k. Fin del Método principal


Arreglos 173

lnejlo se tiene el fin de la clase s el fin del algoritmo. En el CD anierettalata el capítulo 8. se encuentran los ejercicios resueltos: Ejercicio 8.1.1.4 Calcula la desviación de la media de las elementos de un arreglo Ejercicio 8.1.1.5 Realiza cálculos con la producción de un obrero Ejercicio 8.1.1.6 Maneja una fila de 'terneros Ejercicio 8.1.1.7 Maneja 20 números en un arreglo y obtiene el mayor Ejercicio 8.1.1.8 Maneja nombres, pesos• y estaturas de personas en dos arreglos Ejercicio 8.1.1.9 Maneja nombres, edades y sueldos de personas en dos arreglos

8.2 Arreglos bidimensionales El arreglo bidimensional o de dos dimensiones, está formado por un conjunto deelementos de un mismo tipo de dato que se almacenan bajo un mismo nombre y que al igual que en el unidimensional, se diferencian por la posición que tiene cada elemento dentro del arreglo de datos, con la aclaración de que la disposición de los elementos es en forma rectangular o cuadrada, donde la primera dimensión está dada por los renglones. r la segunda, por las columnas. Un arreglo de este tipo, también conocido como matriz. es de orden M a N, donde M es el número de renglones y N el número de columnas. es decir, en forma de tabla.

Un ar o urden 4 u 5 tiene 4 renglones y 5 columnas, es decir, cada renglón se divide en 5 columnas, como se muestra a continuación: Columna o

2

3

4

Renglón o Renglón 1 Renglón 2 Renglón 3 Para esta matriz tenemos: LOS elementos:

0.0 1,0 2,0

3,0

0,1 1,1 2,1

0,2

0,3

1,2

1,3

11,4

2,2

2,3

2,4

3,1

3,2

3.3

3,4

1,4


174

Metaidologia da la Prourarnación °mamado a (nietos

Es decir, el elemento renglón o, columna o; el elemento renglón o, columna y. así hasta el elemento renglón 3, columna 4. Definición del arreglo bidimansionel Al definir un arreglo es necesario hacerlo corno una variable, por lo cual en la parte de declaraciones de variables se uriliza el siguiente formato: nombreArreglo: Arreglo[temnenglenes][tameolumnas] Tipo de dato Donde:

nombreArregl o Es el nombre de identificación de la variable. Arreglo ES /a palabra reservada que indica que la variable es un arregle. tamRenglones Indica el número de renglones qn ir tendrá el arreglo. t arme ol umna s indica el número de columnas que tendrá el arreglo. Tipo de dato Es el tipo de date que tiene el conj u n ro de elementos del arreglo que se está definiendo; pueden ser Entero. Real. Cadena, etcétera. Si aplicarnos los conceptos del formato anterior para definir La matriz de orden 4 a 5 de números enteros, tenernos: Declaraciones Variables matriz: Arreglopflló] Entero nuipigh En icar.ihrr.

❑ matiz es el nombre de la venable. Es un arreglo que contiene 4 renglones y 5 erilninixa.s (lo clemente« Cada elemento del arreglo es un dato de tipo entero. Manejo de los elementos del arreglo biclimensional Para relacionareada elemento individual de una matriz se usan dos subíndices; el primero indica el renglón y el segundo la columna, torno sigue.: matriz] reoglonj columna] Donde:

renglón indica e] número de renglón y columna indica el número de columna que ocupa el elemento relacionado. los subíndices pueden ser contantes, variables o expresiones de tipo entero, como se explicó para el caso de los anichniensionales. Corno toda variable, una de tipo matriz puede usarse para leer datos, asignarle vale res mediante expresiones aritméticas, Imprimir su contenido, formar parte de expresiones lógicas, etcétera.


Arreglos

175

5111114 mat z I -11 = 20 Leer matriz[r][c] Leer matriz[3][4] matriz[l][2] + Natriz[2][3] matrizil][2] Imprimir matriz(1)t2)

a rar un algoritmo que lea números de tipo entero para una matriz de 4 renglones por 5 columnas y además que los imprima. Para leer los elementos de una matriz es necesario utilizar dos ciclos repetitivos anidados, el primero y más externo, para procesar los renglones, y el segundo, que estará anidado dentro del primero, para procesar las columnas. Si definirnos:

Declaraciones Variables numeros: Arreglo[4][51 Entero la lectura se hace asi:

FOR ren=0; ren, s3; ren++ FOR col=0; col<=4; coles Solicitar numeros[ren][col] Leer numeros(renllcoll ENDFOR ENDFOR

Se ut) iza un cirio tipo FOR desde o hasta 3 renglones y, dentro del proceso de cada renglón, un ciclo de o a 4 para procesar las columnas. De lo anterior se tiene que:

1

Cuando ren tome el valor de o, col tornará los valores desde o hasta 4, es decir 5 veces; cuando ren tome el valor de 1, rol tomará otra vez los valores desde o hasta 4, y así sucesivamente hasta que ren tome el valor de 3, también col tomará desde o hasta . de 4 x 5. Puede 4, terminando el proceso de lectura de los 20 elementos de la matriz observarse que dentro del ciclo más interno se solicita el elemento ren,col; y luego se lee. Para imprimir los elementos de la matriz se hace un proceso similar, sólo que en lugar de leer se imprime. A continuación tenemos el algoritmo completo:

Algoritmo MATRIZ NUMEROS Clase MatrizNumeros 1. Método principal a. Declaraciones


178 Mecodologle de le Progreaneoon Creada a Oblatos

Variables numeros: Arreplo[41[5] Entero ren, col: Entero b. FOR ren=0; ren<=3; ren++ 1. FOR col=0; col<=4; col++ a. Solicitar numeros[ren][col] h. Leer numeros[ren][col] 2. ENDFOR c. ENDFOR d. FOR ren=0; ren<=3; ren++ 1. FOR col=0; col<=4; col++ a. Imprimir numeros[ren]lcol] 2. ENDFOR e. ENDFOR f. Fin Método principal Fin Clase MatrizNumeros Fin

1WP

21

En el . ét n principal de la Clase MatrizNumeros, se tienen las acciones; a. Se declaran las variables numeros como un arreglo con 4 renglones por 5 columnas de tipo Entero ren, col para controlar los ciclos b. Inicia ciclo FOR desde renco hasta 3 r. Inicia ciclo POR desde col-o hasta 4 a. Solicita elemento ren,col de numeras b. Se lee en numerus[renllcoll 2. Fin del FOR e. Fin del FOR d. Inicia cielo FOR desde ren=o hasta 3 1. Inicia ciclo FOR desde col=o hasta 4 a Imprime numerostrenlleoli 2. Fin del FOR e. Fin del POR f. Fm del Método principal Luego se tiene el fin de la clase y el fin del algoritmo.

8.2,1 Ejercicios resueltos para bidimensionales Ejercicio 8.2.1.1 K1;10E-ni' un algoritmo que lea números enteros para una matriz de s n 7. que imprima los elementos de la matriz y que al final de cada renglón imprima la suma de todas SUS elementos.


amnios 977 (Primero flogola usted...después compare

la solución)

Algoritmo SUMA POR RENGLONES Clase SumaRenglones 1. Método principal a. Declaraciones Variables matriz: Arreglo(51[71 Entero ren, col, suma: Entero h. FOR ren=0; ren<=4; ren++ 1. FOR col=0; co1.==6;'. col++ a. Solicitar matrizIren][coll h. Leer matriz[ren]lcoli 2. ENDFOR c. ENDFOR d. FOR ren0; ren5=4: ran++ 1. suma = 2. FOR c0l=0; c0l<=6; col++ a. imprimir matriairen1icoll h. suma = suma + matrizrrenl(cOl] 3. ENEFOR 4. Imprimir suma e. ENPFOR f. Fin Método principal

Fin Clase SumaRenglones Fin E ■2 1/2 2::111 15 el Método principal

de la Clase SurnaRenglones, se tienen las acciones:

:1. Sr declaran las variables main?. 3'111.1 arreglo de 5 renglones por 7 columnas S11.11111 para calca lar la sumatoria por renglón 13. inicia cielo FUN desde ren=o hasta i. inicia ciclo hpk desde col.° hasta 6 a. Solicita matriz.fren][col] h. Se lee en matrizfren][coll 2. Fin del 111 1k c. Hn del FUI1 d. Inicia ciclo FOR. desde reu=c3 hasta 4 1. Inicia suma en o a. inicia ciclo rOli desde col= u hasta 6

a. imprime matril[renficoll b.Inerernenia Fuma con tnali-12.1tenlIcoll 3. Fin del POR 4. Imprime. cuma


Arreglos 177

(Primero hágalo usted...ziavpues wmpure lo suiución)

Algoritmo SUMA POR HENGLONES Clase SumaRenglones 1. Método principal a. Declaraciones Variables matriz: Arreglo[5][7] Entero ren, col, suma: Entero b. FOR ren=0; ren=4; ren++ 1. FOR col=0; ccd<=6; col++ a. Solicitar matriz[ren/[col] b_ Leer matriz[men]lcolI 2. ENDFOR c. ENDFOR d. FOR ren=C; ren‹,4; ren++ 1. suma = C 2. FOR coln; col<=6, col44 a. Imprimir matriz[ren][C01] b. suma = Suma * matrizIrenlíColl 3. ENDFOR 4. Imprimir suma e. ENDFOR f, Fin MIlltodO principal Fin clase SumaRenglones Fin .. .. ,...- '

En e .

=..i todo principal de la Clase SumaReugiones, se tienen las acTiorws:

a. Se declaran las variables matSiz como arreglo de 5 renglones 1..lor 7 columnas suma para uil+Jular la 2:natatoria por renglón h. Inicia ciclo FOR dude ren—u hasta 4 1. inicia ciclo FOR dc.sclecol=n hasta 6 a. Srblirital117ari7ErcrlIEroll h. Se lee rn matriz[ren][rol] 2. Fin del FOR c. Fin del ola d. Inicia cielo FOR desde ren=o basta 4 1. Inicia suma atril a. Inicia cielo FOR desde ro1=1) hasta 6 a. Imprime marriz[ren]froll 5. Incrementa suma con matrizirenlicolI 7, Fin del FOR 4, illIpridI1C suma


lia

fteetodologse de le Prograrnecodn Orientada a Obleas

e. f.

Fin del FOR Fin del Método principal

Luego se tiene el fin de la clase y el fin del algoritmo. Enorcicio8.2.1.2 Elaborar un algoritmo que lea números enteros para los elementos de dos matrices de 5 x 5, que calcule cada elemento de una tercera matriz sumando los elementos correspondientes de las dos anteriores. Al final imprimir las tres matrices. (Primenuhdycziousied-dmpulsenmparyqoWurión)

Algoritmo SUMA MATRICES Clase SumaMatrices 1. Método principal a. Declaraciones Variables matrizl, matriz2, matriz3: ArregloW[5] Entero ren, col: Entero b. FOR ren-0; ren<=4; ven+. t. FOR col-0; col<=4; col++ a. Solicitar matrizl[ren][coll b. Leer matrizl[renllcol] 2. ENDFOR c. ENDFOR d. FOR ren=0; ren<=4; ren++ 1. FOR col-0; col<=4; col++ a. Solicitar matriz2lren][coll b. Leer matriz2lren]lcoll 2. ENDFOR e. ENDFOR f. FOR ren=0; ren<=4; ren++ 1. FOR col=0; col<-4; col++ a. matrIz3lren][coll-matrizl[renlIcoll+ matriz2lren]lcoll 2. ENDFOR ENDFOR g. h. FOR ren=0; ren<-4; ren++ 1. FOR col=0; col<=4; col++ a. Imprimir matrizgreni[cOl] 2. ENDFOR ENDFOR FOR ren-0; ren<-4; ron++ 1. FOR col-0; col<=4; col++ e. Imprimir matriz2lren]lcoll 2. ENDFOR


Arreglas 179 k. ENDFOR 1. FOR ren=0; ran‹.4; ven++ 1, FOR c01=0; col<=4; cal++ a. Imprimir matrilOrren][amli 2. ENDFOR m. ENDFOR n. Fin Méted0 principal Fin Clase Sumaklatrices Fin

m

Ene

ncipal de la Clase SurnaMatrices, se tienen las acciones:

a. Re dentaran las variables Las matrices matriz', matriz.2, marria5 cesanarreglas de 5 pnr 5 h. Inicia cielo FOR desde ren=0 hasta 4 t. Inicia ciclo FoR desde colar hasta 4 a. Solicita tnatnintÉrenlícon b. Se Lee en matrin[rent[col] 2. Pin del POR c. Fin del POR d. Inicia ciclo FOR desde relamo hasta t. Inicia ciclo FOR desde colo hasta „I a. Solicita matrizulrenli col] h. Se Lee en rentrizaicen.licclil Fin del FOR. c. Fin del FOR f. inicia ciclo FOR desde ren= o hasta 4 t. Inicia ciclo FOR desde col=ti hasta 4 a. Calcuta matria3(ren][en1]—matriztreen][ecil] a mstrizu(renllcoll 2. Fin del FOR g. Fin del FOR h. Inicia ciclo FOR desde ren=o huta 4 1. Inicia ciclo FOR desde co!=t) hasta 4 a. Imprime matrim[rcecoll 2.. Fin del FOR 1... Fin del POR j. Inicia ciclo FOR desde ren=o hasta 4 deis FOR desde coleo hasta 4 a. Inilichne mairizulrenlícoll 2. Fin del FOR k. Fin del POR I. Inicia ciclo FOR desde ren,o hasta 4 1. Inicia ciclo FOR desde eol,o hasta 4 a. Imprime mnuizg[reni[col] 2. Fin del FOR


181:1 Mewoologiu ae 4:1 P,sgrurnacktu Oneutade e anetus m. Fin del FOR n. Fin del Método principal Luego se tiene el fin de la clase y el fin del algoritmo. Ejercicio 8.2.1.3 Se tienen los siguientes datos: Nombre obrero t:30=000017.10001X1000CXXXXKX=XXX Producción mes 1 : 999 Producción mes 2 999 Producción mes 6: 999 Nombre obrero 2 ; XX7000MOOCIOCXXXXXXXXXXXXXXKX Producción mes 1 : 999 Producción mes 2 : 999 Producción mes 6: 999 Nombre obrero 20 : XXXXXXXXXXXXXXXXXIMOIXXXXXXX Producción Mes 1 : 999 Producción mes 2 : ggg Pro ducción tres 6: 999 Elaborar un algoritmo que lea estos datos en dos arreglos, uno ~dimensional, para los nombres de los 20 obreros; otro, bidimensional, en el que se tendrán ao renglones (uno para cada obrero) por 6 columnas (una para la producción de cada mes): Nombre

Producción o 1 2 3 4 5

2

19 Además, se requiere (pie imprima rl reporte sEgulente


Atrag,o, 181 Reporte semestral de producción 'lumbre del obrero

Idesi Mese Mesa Mes4 Meas Mesh Tot. Prod.

XXXXXXXXXXXXCXX XXXX3XXIXIXXXXX

999 999

999 999

999 999

999 999

999 999

999 999

999 999

XXXXXXIOOCIC000(X

999

999

999

999

999

999

999

Total (Primero háblalo usted-después ~pare lu solución)

Algoritmo PRODUCCION 20 OBREROS Clase ObrerosMatrices Método principal a. Declaraciones variables obreras: Arreglo[20] Cadena produccion: Arreglo[201[6] Entero ren, col, totProd, toTotProd: Entero b. Imprimir encabezado c. FOR ren=0; ren<=1B; ren++ 1. Solicitar obreros[ren] 2. Leer obreros[ron] 3. FOR col=0; col<-5; col++ a. Solicitar produccion[ren][col] b. Leer produccion[ren][col] 4. ENOFOR d. ENDFOR e. toTotProd = 0 f. FOR ren=0; ren<-19; ren+. 1. Imprimir obrerosireni 2. totProd - 0 3. FOR col-0; cols=5; col++ a. Imprimir producclon[renj[colj 0. totProd = totProd + produccionlrenl[cOl] 4. ENOFOR 5. Imprimir totProd R. toTotProd = toTotProd + totProd g. ENDFOR h. Imprimir toTotProd 1. Fin Método principal Fin Clase ObrerosMatrices Fin

999


182 MeLodelogia de a Progrernaodn Cnerrtade e Dbietas

aphIMICitift:4 Fn el Mbtodo principal de la Clase ObreresMatnees. se tienen las acciones: a. Se declaran las variables h. imprimir encabezado c. Inicia ciclo FOR desde renota 19 t. Solicita obrero ren 2. Se lee en obrems[ren] 3. Inicia ciclo FOR desde col-o hasta 5 a. Solicita produccionfrenllc011 b. Se lee en producción[ren][col] 4. Fin del FOR d. Fin del FOR e. Inicia toTotProd en o f. Inicia ciclo FOR desde ren=o hasta 19 1. Imprime obreros[ren] 2. Inicia totProd en o 3. Inicia ciclo FOR desde col=O hasta 5 a. Imprime produccionlrenlicoll b. Incrementa totPrud con producción[ren][coll 4. Fin del FOR 5. Imprime tntProd 6. Incrementa toTotProd con totYrod g. Fin del iADR h Imprime toTotProd i. Fin del Método principal !mego se tiene el fin de la clase y al fin del algoritmo En el CT) anexa, para cl capitulo t3, se encuentran lis ejercicios resueltos: Ejercicio 82.1.4 Obtiene la transpuesta de una matriz de némM'OH Ejercicio 82.1.5 Indica si dos matrices de m'olleros non iguales Euarcic io 8.2.1.13 Multiplica una matriz por vector columna Ejercicio 8.2.1.7 Suma por renglones ng.ones y columnas una matriz de Manieres Ejercicio 8.2.1.8 Maneja la producción de to artieulns en 3 turnos Ejercicio 82.1.9 Maneja las estados y sus capitales Elercicio 8,2,1.10 Maneja una distribución de frecuencias en una matriz. Ejercicio 82.1_11 Maneja un cuadro mágico en aria matriz Eierciclo 8.2.1.12 Multiplica dos matrices -,•■ •■ •

••••

•■•■■•■•■

••••

8.3 Arreglos tridimensionales FI emerjo tridimensional u de tres dunensiunes. está formado por un conjunto de el,

mentos dr un mismo tipo de datos que se almacenan bajo un mismo nombre y que.


arreninis 183 igual que en los unidimensinnale.s y bidimensionales, se diferencian por la posición que tiene cada elemento dentro del arreglo de datos, ron la aclaración de que la disposición de los elementos es una combinación del arreglo unidimensional y bidimensional. La primera dimensión se podría esquematizar como el arreglo unidimensional, un conjunto de elementos; la segunda y tercera dimensión es un arreglo de dos dimensiones que constituye a cada elemento de la primera dimensión. Un arreglo de tres dimensiones se podría leer como un arreglo de matrices, es decir, un arreglo compuesto por X elementos, donde cada elemento es un arreglo de M x N de dos dimensiones, esquemáticamente: ara. dimensión Segunda dimensión

1

Renglón o Elemento o primera dimensión

Renglón 1 Renglón o Renglón 3 Renglón 4

Elemento 1 primera dimensión

Elemento 2 primera dimensión

Elemento 3 primera dimensión

Columnas O

I

2

3 4


194 Megorbologia da le Programación Orienmes e ChEt105 El arreglo trid inttnisional tsquemalizado, tieue 4 elemenlus ea la primero dimensión: un arreglo de 5.5, es decir, un arreglo dr a dimensiones, se lee cada elemento de como un arreglo de matrices o un prisma rectangular. Este arreglo esta compuesto por los elementos; 01,3,0 0,3,1 0,3,2 0.3,3 0,3,4

0,4,1 0.44 043 0,4,4

1,2,0 1,2,1 1,2,2 1,2,3 1,2,4

1,3,0 1,3,1 1,3,2 1,3,3

1,4,0 1,4,1 1,4,2 1,4,3

1,3,4

1.4,4

2,1,0 2,1,1 2,1,2 2,1,3 2,1,4

2,2,0 2,2,1 2,2,2 2,2,3 2,2,4

2,3,11 2,3,1 2,3,2 2,3,3 2,3,4

2,4,0 2,4,1 2,4,2 2,4,3 2,44

3.1,0 1 1,1 3,1.2

3.2.0 3.2.1 3.2.0 3,2,3 3,2,4

3.3.0 1,3,1 3,3,2 3,3.3 3,3.4

3,4,0 3,4,1 3,4,2 34.3 3.4.4

Elemento 0,0,0

0,1,0

0,2,n

0,0,1

0,1,1

0,11,2 0,0,3 0,11,4

0,1,2 0,1,3 0,1,4

0,2,1 0,2,2 0,2,3 0,2,4

Elemento 1,0,0 1,0,1 1,0,2 1,0,3 1,11,4

1,1,0 1,1,1 1,1,2 1,1,3 1,1,4

Elemento- 2,0,0 2,0,1 2,0,2 2,0,3 2,0,4 Elemento 3.0,0 3,0,1 3,0,2 3,0,3 3,0,4

3,1,4

04,0

es un arreglo dr 4 5 % 5 el cual contiene 100 olentellluS. Definición del arreglo tridimensional Como va lo henlof; re envio nudo, al definir un an.elt.lo es necesario hacerlo como un:1,41,1.41e. por lo cual, rn le parte de declaración de variables se utiliza el siatuente furruatu; nnmVarl. Arreolo(przmaraDfm][segundaDim][LerceraDiml Tipo de dato Demder

nomeer Arreglo prlmere0im 5 ep u riel eD in

Es el nombre de la variable. Indica gue es un arreglo. indica la cantidad dr elementos dr In primera dimensión. Indica la cantidad dr ele.mentris de In segunda dimensión del arreglo. toruca la cantidad de elementos de la tercera dimensión del tercerona) arreglo.. Tipo de dato Es el lipa de dalo de len elemeinve del al r eglo.


An-egion 185

numeres: Arreglo[4[15115] Entero 1111111.CIV6

es un arreglo de tres dimensione,..4 4 elemerdva de 5 e 5, ea decir, un arreglo de cada uno de los cuales PA una matriz de 5 x 9.

.a elemen tos,

Manejo de los elementos del arreglo tridimensional Para relacionar ende elemento individual de un arreglo de tres dimensiones se usan tres subindices; el primero indica la primera dimensión del elemento; el segundo, la segunda dimensión; y el tercero, la tercera dimensión, como sigue: nomVar(primara]lsegunda] (tercera] Donde;

primera Indica el número de elemento en la primera dimensión. segunda Indica el número de elemento en la segunda dimensión. tercera Indica el número de elemento en la tercera dimensión. Nota: r[25 SUbltlellet3 puedes ser constantes, variables o expresiones de upo entere.

1

Al igual nue toda variable, una de tipo arreglo tridunesional puede usarse para leer dan», asignarle ralo«, mediante expro:irmea aritméticas, imprimir =su contenido, eiffitern.

nom ar 31[A] 50 Leer nomearI2I121[3] Leer nomearIllI11[3] nomear[1][1](4] = nomear(21(2)131 ovan/al-121131141 imprimir nomVar[1]¡t][41

nomearIIIIII[31

ftWllb (drama que lea números de tipo entere para un arreglo cuma el esquema[Izado Huata antes, ea decir, un arreglo dr 4 x 5 x 5; y loa imprima. A continuación se presenta el algoritmo de la solución; Algoritmo ARREGLO TRIDIMENSIONAL Canse ArregloTresDimt t. Método principal e. Declaraciones


188 Memciolops da la Plrograrnacion °nen:Ida a Quietos Variables numeros: Arreglo( 4] [5]15] Entero seg , ter: Entero b. FOR pr.L-8; prl.<-3; 1. FOR seg.0; seg.4; seg++ a, PDPI ter0; tersa; terf. 4. Solicitar Elemento pri,seg,ter 2. Leer numeros[pri]lSegl[ter] b. ENOFOR 2. ENDFO11 C. ENOFOR d. FOR ari=g; pri<=3; pri++ 1. FOR Seg=0; Ini<=4 ; sea++ a. FOR ter=C; ter<=4: ter.. 1, Imprimir numero5[ pri] [seg] [ ter] b. ENOFOR 2. ENOFOR e. ENOFOR f. Fin Método principal Fin Clase arreglotresOlmi Fin

Se u •riidos FOR. el primero, y mas externo. para procesar Iris. elementos de la primera dimensión, el segundo. que está anidado denull del ¡iriniern, para prguwear 1,1 renglones de la segunda dimensión. y el tercer ciclo, que está anidado Limara del segundo, para procesar las columnas. E1.1 nin_tro ejemplo nemsitamos un ciclo FOR desde n lux-ta 3 para procesar cada uno de los cuatro elementos de la primera dimensión,. timen, ile éste un ciclo de o a 4 para procesar los renglimes de la segunda dimeasi.6n y, duma del proceso de Lada renglón, un ciclo de ti a 4 para procesar las coluuwas (la tercera dimensión). 8 3.1 Ejercicios resueltos para tridimensionales En ri

anexo; para el rapirq lin S, se ene' kararan Io,r ejercicio resuellos,

Ejuruigiu 8.3.1.1 Maneja iaproduoulón de uno ernplwa en un arruglo de treb dimt'iaiones Ejercicio 8.3.1.2 Similar el anterior, pera con mas cálculos Ejercicio 82.1.3 Similar al nnteriur, pero ron nula ráltvlus 8.4 Arregius tetradimensionale5

El arreglo tetradimensional o de neutro dimensiones, está formado por un conjunto elementos rir un mismo tipo di- datos fine se almacenan bajo un mismo nombre y 1,1,


Arreaba 187 al igual que en los un idimensinnalcs, hidimensionales y tridimensionales, se diferencian por la posición que tiene cada elemento dentro del arreglo de datos, con la aclaración de Te, le disposición de los elementos es una doble combinación del arreglo hidimensii mal. las primeras dos dimensiones se podrían esquematizar como un arreglo hidimensional y; la tercera y cuarta dimensión, esquematizan otro arreglo bidimensional dentro del primero Un arreglo de cuatro dimensiones se podría leer cómo una matriz de matrices, es decir, un arreglo de dus diemensiones tv1 a N compuesto por elementos, donde cada elemento es un arreglo de dos dimensiones 1 u Q, esquemáticamente: Cuarta dimensión Columna n Tercera dimensión

1

Columnas o t 2 3

Segunda dimensión Columna a Columna u

4

Renglón o Renglón 1 Renglón 2 Renglón 3 Renglón 4

Renglón Ira. dimensión

Renglón 1 ira. dimensión

Renglón 2 Ira. dimensión

Renglón ira. dimeasiól

jJ

El mi tido tetradimension al esquematizado, tiene.; ciernen tos en la primera dimensión, en la segunda dimensión para formar un arreglo de dos dimensiones; donde cada elemento de ésta es un arreglo dr 5 u 5, es decir, un arregla de a dimensiones (la tercera y cuarta). se lee como una matriz de matrices. 3 elementos

Fuste arreglo (.524; compuesto por los elementos.


108 Matedologia de la Prograroaclon Onentada e Oblatos 0,0,3,0 0,0,3,1 0,0,3,2 0.04,3 0,0,3.4

0.0,4,0 0,0,4,1 0,0,42 0,043 0,0,4,4

0,1,2,0

0,1,3,0

0J.11

0.144 0,1,1,3 0.1.14

0,1,2,1 0.1,2,2 0,1,2,3 0,1,2,4

0.1.34

0,1,4,0 0,144 0.144

0,1,3,3 011.34

0.1.4.3 0.144

Elemento 0,2,0,0 0,2,0,1 0,2,0,2 0,2,0,3 0,2,0,4

0,2,1,0 0,2,1,1 0,2,1,2 0,2,1,3 0,2,1,4

0,2,2,0 0,2,3,0 0,2,4,0 0,2,2,1 0,2,3,1 0,2,4,1 0,2,2,2 0,2,3,2 0,2,4,2 0,2,2,3 0,2,3,3 0,2.4.3 0,2,2,4 0,2,3,4 0.244

Elemento 1,0,0,0 1,0,0,1 1,0,0,2 1,0,0,3 1,0,0.4

1,0,1,0 1,0,1,1 1,0,1,2 1,0,1,3 1,0,1,4

1,0,2,0 1,0,2,1 1,0,2,2 1,0,2,3 1,0,2,4

1,0,3.0 1,0,3,1 1,0,3,2 1343,3 1.0.3.4

Elemento 1,1,0,0 1,1,0,1 1.1,04

1.1.2,0 1,1,2,1 1,1.2,2

1.1.04

1,1,1.0 1,1,1,1 1.14.2 1.1.1,3 1.414

0.1,2,4

1.1,3,12 1,1,3,1 14.33 1.1.3.3 1,1.3.4

Elemento 1.2.0.0 1,2.0.1 1.2.0.2 1,2.0,3 1.2,0.4

62.1.0 1.2.1.1 1.2.1.2 1.2.1.3 1.2,1.4

1.2,2.0 1.2.2.1

1.2,3.0 1.2,3.1

Elemento 2.0.0,0

2.0.1.0

gement') 0,0,0,0 0,0,0,1 0.0,0,2 04,0.3 0.0.0.4

0,0,1,0 0,0,1,1 0,0,1,2 0,0.1,3 0.0,14

Elemento 0,1,0,0

0,1,1,0

0,1,04 0~4 0.404

2.0.1.1 2,0.0,2 2,0.1,2 2,0,03 2,0,1,3 2,0,0,4 2,0,1,4 Elemento 2,1,0,0 2,1,0,1 2,1,0,2 2,1,0,3 2,1,0,4

2,1,1,0 2,1,1,1 2,1,1,2 2,1,1,3 2,1,1,4

0,0,2,0 0,0,2,1 0,0.2,2 0.0.23 0,0,2,4

(.1.2.3

144.2

1.2.3.2

1.2.2,3 1,2,2.4

1.2,3,3 1,2.3.4

1,0,4,0 1.0.4.1 40,4,2 1,0,43

1,1,4,1 1,1,4.2 1.1.43 1.1.44 1.2.4.0 1,2.4,1 1,242 144,,1

2.0,2,0 2,0,10 2,0,2,1 2.0,3,1 2.0,2.2 2,0,3,2 2,0,2,3 2,0,3,3 2,0,2,4 2,0,3,4

2.0,4,0 2.0,4,1 2,0.4,2 2,0,4,3 2,0 4,4

2,1,3,0 2,1,3,1 2,1,3,2 2,1,3,3 2,1,3,4

2,1,4,0 2,1,4,1 2,1,4,2 2,1,4,3 2,1,4,4

2,1,2,0 2,1,2,1 2,1,2,2 2,1,2,3 2,1,2,4


Arreglos 189

2,2,1,0 2,2,1,1 2,2,1,2 2.2.1,3 2,2,1,4

2,2,2,0 2,2,2.1 2,2,2,2 2,2,2,3 2,2,2,4

2,2,3,0 2,2,34 2,2,3.2 2,2,3,3 2,2,3,4

2,2,4,0 2,2,4,1 2.2,4,2 2.2.4.3 2,2,4,4

Elemento 3,0,0,0 3,0,1.0 3,0,0,1 3,0,1,1 3,0,0,2 3,0,1,2 3,0,03 3,0,1,3 3,0.0.4 3,0.1,4

3,0.2,0 3.0,2,1 3,0,2,2 3,0,2,3 10,2,4

3,0.3,0 3,0,3,1 3,0,3,2 3,0,3,3

3,0,4,0 3,0,4,1 3.0.4,2 3.0.4.3

Elemento 3,1,0,0 3,1,0,1 3,1,0,2 3,1,0,4

3,1,1.0 3,1,1,1 33,42 3,1,1,3 3,1,1,4

3,42,0 3,1,2,1 3,1,2,2 3,1,2,3 3,1,2,4

3,1,3,0 3,1.3,1 3,1,3,2 3.1.3,3 3,1.3,4

3,1,4,0 3,1,4,1 3,1,4,2 34,4,3 3.1,4,4

Elemento 3,2,0,0 3,2,0,1 3,2,0,2 3,2,0,3 3,2,0,4

3,2,1,0 3,2,1,1 3,2,1,2 3,2,1,3 3,2,1,4

3,2,2,0 3,2,2,1 3,2,2.2 3,2,2,3 3,2,24

3.2.3.0 3,2,3,1 3.2.3.2 3.2.3.3 3.2.3.4

3.2,4.0 3,2,4,1 3,2.4,2 3,24,3 3,2,4,4

Elemento 2,2,0,0 2,2,0,1 2,2,0,2 2,2,0,3 2,2.0.4

3,1,0,3

3,0.3,4 3.0.4,4

un arreglo de 4 = 3 = 5 a 5 el mal contiene 30u elementos. Definición del arreglo tetrndimensional Cuum ya lo liemos mencionado, n1 del iní r un a 'Inflo es necesario harerin romo 11112 variable, por lu cual, en la parte de derlarindon de variables se utiliza el siguiente formato: ngmVar: Arregle[prinim][suglhml(terDimllcuarDimj Tipo de dato Donde. nomVar Arreglo prilltet

segoim terDim

En el nombre de la variable.

Indita que cs un arreglo. Indica la cantidad de elementos de la primera dimensión del arreglo fin por ejemplo i. Indica la cantidad de elementos de la segunda dimensión del arreglo Indica la cantidad de elementos de la recosa dimensión del a rreglo. Indica la cantidad de elementos de la cuarta dimensión del arreglo.

cua re in Tipo de dato E4 el tipo de dato de loa elementos del arreglo.

efts: Arrogio[41[31[51[5j Entero


190

Metodoingia de b Prugeernecien Orieniada o Oblatos

numeras es un arreglo de cuatro dimensiones: 4 renglones por 3 columnas, donde ca elemento es un arreglo de 5 e 5; en decir, una matriz de 4 >< g, donde cada uno de elementos es una matriz de 5 u 5, Manejo de los elementos del arreglo tetradimensional Para relacionar cada elemento individual de un arreglo de cuatro dimensiones se usa cuatro subíndices; el primero indica la primera dimensión (renglón de la primera matra del elemento, el segundo la segunda dimensión (columna de la primera matriz), el tercer la tercera dimensión (renglón de la matriz dentro de cada elemento de la primera matriz y el cuarto la cuarta dimensión (columna de la matriz dentro de cada elemento de la pii mera matriz), como sigue:

tetra[rent ] coll I ren2I [oo12] Donde:

ren1 Indica el número de elemento en la primera dimensión, col 1 Indica el número de elemento en la segunda dimensión. ren2 indica el número de elemento en la tercera dimensión. co 12 Indica el número de elemento en la cuarta dimensión.

Nota: LOS subíndices pueden ser constantes, variables o expuesionei de tipo entera

1 Al igual que toda variable. una de tipo arreglo terradimesional puede usarse para

leer datos. asignarle valores mediante expresiones atitmeticas, imprimir su contenido, etcétera.

etre 7(2][31[4] - 50 Leer tetreDII2i[2][3] Leer tetra[31[11(1)(3] tetra[31111111(41 = tetra{31{21[2][3] , tetrap][1][11[3pretral3li21[31141 Imprimir tetral3][1][1][41

IIIM

gorimm que lea números de tipo entero para un arreglo romo el esquematizado líneas untes, es decir, un arreglo de 4 s 3 . 5 e Sylas imprima.

Algoritmo ARREol0 rETRADIMENSIONAL Clase ArreglocuatroDimt


Arndt. 191

1 Método principal a. Declaraciones variables numeros: Arreglo[4][3)(5l151 Entero co12: Entero renl, co11, ren2 b. FOR ren1-0; reni.c+2.; runi++ 1. FOR coll=0; co11<=2; col1Ff a. FOR ren20; ren2=4; ren2++ 1. FOR co12■0; col2<4; co12++ a. Solicitar numerospen11[coll][ren2][co121 b. Leer numeros[renlj[coll)(ren2Hco121 2. ENDFOR b. FNDFOR 2. ENDFOR c. ENDFOR d. FOR ren1=0; renl<=0; rumí++ 1. FOR col1=0; col1‘=2; coll++ a. FOR ren2=0; ren2<=4; ren2++ 1. FOR co12.0; col2<=4; col2++ a. Imprimir numeros[renl][collIlren2]Icol2j 2. ENDFOR E. ENDFOR

2. ENDFOR e. ENDFOR f. Fin Método principal Fin Clase ArreglauatroDiml Fin

Siutilizan cuatro cielos FOR. el primero, y más externo, para procesar los elementos de la primera dimensión (renglones de la matriz más externa), el segando, que está anidado dentro del primero, para procesar la beaunda dimensión (columnas de la matriz más externa), el tercer POR. para procesar la tercera dimensión (renglones de la matriz mas interna), y el cuarto cielo, que está anudado dentro del tercero, paro procesar la cuarta dimensión Gas columnas de la matriz más interna). En nuestro ejemplo nece-silanius un rieln Fox desde ti hasta 4 para procesar cada uno dr iris cuatro elementos. de In primera dimensión, dentro de Un; un cielo de o a a para procesar las columnas de la matriz más externa, dentro de éste un cien, de o a 4 pata procesar los renglones de la matriz más interna y, dentro del procela I de cada renulon de esta matriz, un ciclo de ti a 4 para procesar las colo rnnas (la cuarta dimensión).


192 mandos:wat de le Pmgreeleclon Onentede 8.4.1 Ejercicios resueltos para tetradimensioneles En el Cl) anexo; para el capítulo 8, se encuentran los ejercicios resueltos: Ejercicio 8.4.1.1 Maneja la producción de una empresa en un arreglo de cuatro dimensiones Similar al anterior, pero con más cálculos ' ' pero -

Ejercicio 8.4.1.2 Ejercicio 8.4.1.3

Ejercicios propuestos Elaborar un algoritmo que permita leer 2ti nombres de personas en un arreglo permita consultarlos de acuerdo con el numero de posición que ocupan dentro d arreglo. 2. Elaborar un algoritmo para leer 30 dias de ventas realizadas por un empleado, que imprima el dia en que tuvo la mayor y la menor venta, asi como las cantidad correspondientes. 3. Elaborar un algoritmo que permita leer 30 números en un arreglo y que imprima número mayor, el menor y la cantidad de veces que se repiten ambos. 4. Elaborar un algoritmo similar al 8.1.14, con la excepción de que al final debe inrpr luir: 'ruta] de elementos arriba de la media." Total de elementos abajo de in media: Total de elementos igual a la media,

999 999 999

5. Se tienen varios obreros, por cada obrero se tienen los siguientes datos: nombre la producción de loa 30 lúas del mes. Elaborar un algoritmo que los lea y genere siguiente reparte:. Reporte mensual de producción Prod. Nombre XXXMCIOCXXXXXXXXXXXXXX MCCMCXXXX7CC(XXXXXXX XY3000.. "a..XXXX=00C X XX Total

999

mes

Prom. diario

Dial arriba del prom.

999 999

999 999

999

999

999

9999

999

999 9999

6. Una empresa tiene s'arios vendedores, por cada vendedor se tiene el nombre y la vent que realizó. Elaborar tul algoritmo permita leer dichos datos y que pmporelone


Arreglos 193

reporte de comisiones de ventas en el cual aparezcan todos bis vendedores que tengan ventas mayores que el nivel de comisión que se calcula: Nivel de comisión = 5/4 " (promedio de ventas) Comisión = 5% sobre el excedente de lo que vendió por arriba del nivel de comisión. Comisiones de vendedores Nombre del vendedor Ventas Comision 30000000000001,00000CXXXXX 30000001XXXWOCXXXXXXXXXXX :OZXXXXXX.XXXXX . XXXXXXXXXXX Total 999 vendedores

999,999.99 999,99999

99,999.99 99,999.99

999,999.99

99,999.99

9.999.999.99

99949999

7. Elaborar un algoritmo que permita leer 15 números en un arreglo, que pregunte si se desea introducir un nuevo número en lugar de cualquiera de los que están en el arreglo; entonces leer el número a introducir y el lugar del elemento por el que se cambiará, hacer el cambio e imprimir el arreglo antes y después del cambio. d. Elaborar un algoritmo que permita leer 25 números en un arreglo, que imprima el arreglo y la cantidad de números que son reto, la cantidad de números que están abajo de cero y la cantidad de numeras arriba de cero. o. Elaborar un algoritmo q ue permita leer so nu meros en teros en un arreglo e imprimirlos de mayor a menta. ii>. Elaborar un algoritmo que perruna leer 15 mimbres de personas; que k11; clasifique en orden descendente v los imprima. 11. Elaborar un algoritmo que lea números en una matriz. de ti, e ó, que la ni prima y que coloque al final la suma por columnas. 12. Se tienen i 5 estaciones de trabajo. cada una de las cuales tiene un encargado, del cual se conocen su nombre y la producción que tuvo por rada uno de los meses del ano

Elaborar un algoritmo que lea los 15 nombres y los guarde en un arreglo; que haga lo mismo ion los ta meses de producción de cada una de las estaciones y que los almacene en una matriz deis 12. Se requiere que imprima el siguiente reporte: Analista de producción Estación Tu lid producción

Total

99 99

,199999

99

999999 9999999

4414999


194 MolorMlogo de a Program/traen Orlentada a aseuis

Estacion mas productiva 99 Encargado de la estacion: JOCOOCC/C10=CX Cantidad producida' 999999 13. Elaborar un algoritmo que lea el nombre de 2n trabajadores y su producción mensual por cada uno de los 12 meses del año, en dos arreglos uno para nombres y otro para producciones. en los cuales el elemento N corresponde al trabajador N. Se requiere que imprima el siguiente reparte: Análisis de pruduccion Nombre

Total produceinn XXXX

99999 9999-9

49999 Promedio de product ion :

49999

9M1:91 nepe imprimo sola las que tengan producción par arriba del promedio

14. Se nene la producción de los 7 d ias de L semana de au plantas. elaborar un algoritmo que lea estos datos y los almacene en un arreglo de 20 fe99Ivoes para las plantas, en 7 columnas, para cada dia de producción: Y quo illiPlima el número de Planta quo men la mayor producción semanal. 15 Igual al ejercicio anterior, solo que aluna deberá imprimir el número de planta con mayor producción en un dia, el dia en que esto sucedió y con cuánta producción ni_ Elaborar un algoritmo que genere una matriz de no a lo, en la cual asigne ceros a todos los elementos. excepto a los de la diagonal principal, donde asignará unos; imprimir dicha matriz. 17. Elaborar un algoritmo que genere una matriz de 10 a 10, que asigne ceras n todos los elementos desde la diagonal principal hacia abajo; a los demás colocar unos

18. Generar una undlie de ro • so, con ceros en los elementos desde In diagonal principal hacia arriba; a los demás colocar unos e imprimirla. ig_ Elaborar un algoritmo que permita leer números en una matriz de 6 vi 7, lo propio para un vector de 6 elementos. Calcular el producto de matriz por vector lila; el producto


Arreglos 195 de la matriz por el vector fila, es un vector donde el elemento t está dado por la snmatoria de los productos del elemento t del vector por cada uno de los elementos de la columna 1 de la matriz , y así para el 2, 3, cte. Imprimir la matriz . el vector v el vector resultante.

20. Elaborar un algoritmo que permita leer números en una matriz de 5 x b, que la imprima. y que imprima la surnatoria por renglones y por columnas utilizando un arreglo unidlmensional para obtener la sumatoria de todos Ion renglones y otra arreglo de una dimensian para calcular la aumatoria de todas las columnas. 21. Una matriz es nula si todos sus elementos son iguales a cero. Elaborar un algoritmo que lea 111.1111e1O5 en una matriz de 5 F 4 e indique si la matriz es nula o no, 22. Elaborar un algoritmo que permita leer números para una matriz A de 6 x 4, le propio para 111111 matriz R. que las imprima e indique si la matriz A es mayor que la matriz R. Para que A aro mayor que B, cada elemento Aij debe ser por lo menos igual que cada elemento Bij correspondiente, y debe existir al menos un Aij mayor que su correspondiente flij, en caso contrario A nu es mayor que B. 23. Elaborar un algoritmo que lea un número. también que lea números para una matriz de 5 x calcular la matriz producto por un número, esto es, multiplicar cada elemento de la matriz por el número y colocarlo en el elemento correspondiente de la matriz resultante. Imprimir las das matrices. 24. Una compañia manufacturera tiene te plantas. Elaboras' un algoritmo que permita leer el nombre de cada planta y la producción que se hizo en tarda uno de los siete días de la semana; utilizar un arreglo de una dimensión para leer los nombren de las plantas y un arreglo de dos dimensiones (12 su 7) para leer la producción de las doce plantas (uno en cada renglón) en los siete Mas, una columna para roda día. La idea es leer el nombre de la primera planta y luego In producción hecha en luda uno de los siete días, luego procesar el articulo 2, posteriormente el 3 y así sucesivamente. Imprimir el siguiente reporte' Reporte semanal de produeeinn lila 2

Din 3 Ma. 4 Dia 5 Dia 6 Dia 7 Prud. acata.

XX XXXXX 999 XX XXXXX 999

999 999

999 949

999 999

999 999

999 999

999 999

XXXXXXX 999

999

999

999

999

999

999

999

999

999

999

999

999

994

999

999

Planta

'Fatales

Dia 1

Planta mas productiva: XXXXXX X XXXXXXXXXXXXXXMOCX Prlidt1CC1011 de la planta mas productiva: 999

999 999


196 Maus:tobo de á Programando Orientada a Otseios

Dia con mayor produccion: 999 Mayor produccion en un dia; 999 25. Elaborar un algoritmo similar al anterior, excepto que ahora en el reporte debe agregarse un dato más por cada planta; el día más productivo, es decir, de loa siete días. imprimir el número de dia en el que tuvo la mayor producción. 26. Elaborar un algoritmo que permita leer números enteros para cada uno de los elementos de una matriz A de 3 e 4, lo mismo para una matriz 8 de 4 e 5 y calcular una matriz P de 3 o 5, multiplicando la matriz A por la matriz R. 27. Una compañia departamental tiene 8 sucursales, en cada sucursal tiene 6 departamentos de ventas y, por cada departamento se tiene la venta que se hizo en rada uno de las 7 días de la semana. Elaborar un algoritmo que lea los datos de las ventas en un arreglo de tres dimensiones: la primera dimensión la unifórmenlas sucursales, la segunda dimensión los departamentos, y la terrera, los 7 dias de la semana. esquema • ticamente:

Ola

Día

3 4 5 6 7 Depto. Dente. 2 Sucursal

Depto. 3 Depto. 4 Depto. 5 fsmto. 6

96291.92.12

Suca rsal 8

Una vez leídos los /latos, que imprima el sigu"ente reporte,


Arrag•as 1137 Reporte semanal de ventas

SUCURSAL a Dia a Dia sc

Din 3

Dia 4 Dia 5

Día 6

Dia 7

Departarnerau-I Departan-motu-a Departamentu-1 Departamento-4 Departamento-5 Departamento-6 SUCURSAL 2

Dial

SUCURSA/.. Dia 3 Dia 4 Din 5 Dia 6 Dia 7

Di. 2

Departamento-1 Departamento-2 Departamento-5 Depanamento-4 Departamentn-5 Departamento-6 28. Elaborar un algoritmo similar al anterior, pero ahora imprimir el tato] dr ventas por departamento y por rada día para cada sucursal y el total wnerril de ventas, esquemáticamente-. Reporte semanal de ventas SUCURSAL Dia t Dia a Dia 3 Dia 4 ILia 5 Dia fi Departamento-1 Ilepartameotu-a Departamento-3 Departnmento-4 Departamento-5 Departalueuto-á Totales SUCURSAL

Dia

Tuial


188 rvietoww.ga de la Prnaremaner, aneando a Chatos SUCURSAL 8 Dia i Dia s Dia 3 Dia 4 Dia 5 Dia 6 Dia 7 "totld Deparnunento-i Departamento-u Departamento-3 Departamento-4 Departamento-5 -Departamento-G Totales Total general de ventas 29. Elaborar un algoritmo similar al anterior, pero además imprimir el total de ventas general por cada sucursal, el departamento que tuvo la mayor venta de cada sucursal y cuánto fue la venta; el total de ventas general, la sucursal que tuvo la mayor venta y cuánto fue ésta. 30. Una compañía departamental tiene 8 sucursales, en cada sucursal tiene b departamentos de ventas, pur cada departamento Se tienen 4 vendedores, y por cada vended, r se tiene la venta que se hizo en cada uno de los 7 días de la semana. Elaborar un algoritmo que lea los datos de las ventas en un arreglo de cuatro dimensiones; la pri mera dic . occisión la conforman las sucursales; la segunda, los departamentos; la tercera, los vendedoras, y la cuarta, los 7 días de la semana, esquemáticamente; Departamento t Día 2 Sucursal

Sueural

lincumal ti

Vendedor Vendedor a Vendedor :3 Vendedor 4

Dia 4

Departamento


Arreó'. 199

Una vez leidos los datos, que imprima el siguiente reporte: Reporte semanal de ventea SUCURSAL DEPARTAMENTO a Dial Dia l Dia 3 Dia 4 Die 5

Dia 6 Dia 7

Vendedor-1 Vendedor-2 VendedorVendedor-4 DEPARTAMENTO a

DEPARTAMENTO 6 Dial Día a Die 3 Dia 4 Dia s Dia 6 Dia Vendedor-i Vendedor-2 Vesdedur-2 Vendedor-4

SUCURSAL S DEPARTAMENTO

DEPARTAMENTO 6

31. Elaborar un algoritmo simular al amenor, pero que ahora imprima el siguiente repor. te;


2OD Mewoolowe de ,e Prograreacqn Onentacia e atletas Reporte semanal de ventas SUCURSAL DPPARTAMENTO i Dia t Dia 2 Dia 3 Dla 4 Dla 5 Dia 6 Dia 7 Total Vendedor-a Vendedor-2 Vendedor-3 Vendedor-4

^

N V - -

-

-

-y

^

Totales DEPARTAMENTO 8 Dia l Dia 2 Dia 3 Dla 4 Dia 3 Dia 6 Dia 7 Total Vendedor-1 Vendedor-2 Vendedor-3 Vendedor-4 Totales

SUCURSAL 2 DEPARTAMENTO t

DEPARTAMENTO 6 SUCURSAL 8 DEPARTAMENTO[

DEPARTAMENTO 6

Mal general de prodiurion

32. Elaborar un algoritmo similar al anterior, además, al tinal de cada sucursal imprimir el departamento que tueco la mayor venta y cuánto loe esta. Al final del reporte imprimir la venta total de toda la compañia. la sucursal que tuvo la mayor venta y cuánto fue esta.


201

Resumen del capítulo ,incepros ryir debe rlorrünar Definición. manipulación y utilización de arreglos: tinidimensionales Cuna dimensión) ▪ hidimensiiinolca (dos dimensiones) ▪ iridiinesinnalcs (tres dinactuimies) 7 tetradimensionnles (cuatro dimensiones)


Métodos Contenido 9.1 metreins que no regresan valor 91 Formato general de una clase ron métodos 9.3 Variables globales, locales y parámetros 9.3.1 Variables globales 9.3.2 Variables locales 9.3.3 Parámetros 9.3.3.1 Parámetro por reterenc a 9.3.3.2 Parámetro por valor 9.4 Funciones estándar 9.4.1 Funcione; cadena de caracteres 9.4.2 Validación de la entrada de datos 9.4.3 Funciones especiales 9.5 Métodos que regresan valor 9.6 Ejercicios resueltos Eisecickas propueonc

Objetivo del cepttufe En el presente capitulo se estudiara cómo utilizar más de un método dentro de una tase; mélodos que aro regresan valor, equivalente a módulos en la prograrnacilio estructurada. Se aprenderá el manejo de variables de clase, variables locales y el uso de parámetros pon valor y por relerencia. Asimismo, se estudiarán los métodos que regresan valor, equivalente a iunclunes definidas por el usuario en la programación estructurada. lambusn se estudiarán algunas funt:Iontn estándar come son; funciones para la manipulación de cadenas de caracteres y algunas funciones especiales.


204 Marodelogis Ue te Priyarrenscien Onantans e ❑secas

9.1 Métodos que no regresan valor Un método es una función. segmento. rutina, bubrutina o subalgoritmo que puede ser definido dentro de una Clase con el propósito de ejecutar uns función, comportamiento o tarea específica, pudiendo ser llamado a invocado desde eI método principal u otro método, cuando se requiera. Existen dos tipos de métodos; métodos que no regresan valor métodos que regresan valor. En este punto se estudian los métodos que no regresan valor, más adelante en otro punto se tratarán los mbtralos que regresan valor. En los capitulen precedentes se han planteado p roblern as perpieños, es deci r, que hacen una sola cosa o tienen una sola función; y en consecuencia, se han diseñado algoritmos que tienen una sola clase y dentro de esa clase, se tiene sólo el método principal, en el cual se implementa la lógica que resuelve el problema. Sin embargo, en ocasionas se tienen problemas más grandes y complejos que involucran a más de una tarea o función, real onmpliee le solución en un solo método; ahora estudiaremos cómo utilizar más de un método dentro de la clase, la idea es que se defina un método por separado para implementar cada función; y en su n'ornen o, desde el método principal se llama o invoca a cada método para que haga su tarea o remeso; el mando principal, que es donde inicia el funcionamiento del algoritmo, dirigirá la lógica general de la solución y se apoyará llamando a los otros métodos para que realicen sus funciones especificas, en el momento que se requieran, así, e] formato de la clase será el siguiente: Algoritmo ALGO Clase Nomelase 1. Método principal a. Acción a b. Acción id

c. Acción d. Fin Método principal 2. Método funcioniino a. Acción a 6. Acción b c. Acción e d. Fin Método funeionono a. Método funcionDos a. Acción a 6. Acción e, Acción o d. Fin Método FuncionGoa 4. Método tuncionTres a. Acción a b. Acción o c. Acción c d. Fin Método funcionTres


Mesdos

205

Fin Clase NomClase Fin Donde

Se tiene el esquema de un algoritmo que tiene una clase y dentro de la clase tiene cuatro métodos: el Método principal, el Método bridón U n.o, el Método función Dos y el Método funciónTres. Los métodos funciónUno, funciónDos y funciónTres; cada uno tiene la lógica necesaria para implementar una función específica para resolver el problema. Sin embargo, en el Método principales donde inicia el funcionamiento del algoritmo, y es el que tiene la lógica general que resuelve el problema; y en su momento deberá llamar a cada uno de los otros métodos de la clase, es decir, al Método función Uno, al Método funcionDos y al Método funciónTres.

gorittno que ayude a un niño a revisar sus tareas referentes a las operaciones r un 1 IL - *111 aritméticas fundamentales: sumar, restar, multiplicar y dividir. El proceso es el siguiente: Se ofrecerá un metió de opciones para escoger lo que desee hacer de acuerdo con el siguiente formato: TE PUEDO AYUDAR A: t. SUMAR 2. RESTAR 3. MULTIPLICAR 4. DIVIDIR 5. FIN OPC ION En caso de que el niño escila la opción 1; está indicando que desea revisar operaciones de sumar, enseguida se debe establecer un proceso in teractivo para que el niño introducen tos dos números a sumar y su risa aliado. luego que la computadora le indique si la suma está correcta o incorrecta. enseguida preguntar si desea revisar otra soma, Si CA así, deberá repetir todo el proceso para revisar una nueva operación de sumar, algo parecido a lis siguiente: Ayudando a revisar operaciones de sumar Teclee primer número: 45 Teclee segundo Manean"- 13 Teclee el resultado: 58


2158

Meindrangla de la Programación Orientada a Chatos la suma

está correcta

¿Desea revisar otra su ma(S/N)? Para el caso de resta, multiplicación y división se seguirá un proceso similar, pero con las diferencias correspondientes. ¿Qué se requiere para solucionar este problema? El problema tiene cuatro funciones n tareas especificas: Ea la parte que permite ayudar a revisar operaciones de sumar . Sumar Restar Es la parte que permite ayudar a revisar operaciones de restar. Multiplicar Es la parte que permite ayudar a revisar operaciones de multiplicar Es la parte que penuite ayudar a revisar operaciones de dividir. 1)ividir Por tanto, se requiere un método para implementar la solución de cada una dr esas funciones, es decir, un método para sumar, otro método para restar. otra método para multiplicar y otro método para dividir: además del método principal que dirigirá el funcionamiento general del algoritmo, que llamará a lut, métodos sumar, restar. multiplicar y dividir cuando requiera que cada uno haga su tarea o función. A continuación se presenta el algoritmo de la solución. Algoritmo AYUDA Clase Ayuda 1. Declaraciones de clase Variables num1, num2, resuNi, resuMag: Entero desea: Carácter opcion: Entero 2. Método principal a. DO 1. Imprimir el mentí de opciones TE PUEDO AYUDAR A:

1. 2. 3. 4. S.

SUMAR RESTAR MULTIPLICAR DIVIDIR FIN

OPCION: 2. Leer opcion 3. SWITCH opcion 1: Llamar ayudaSumar


Menease 207

2: Llamar ayudaRestar 3: Llamar ayudaMultiplicar 4: Llamar ayudaDividir 4. ENDSWITCH b. WHILE opcion ‹)- 5 c. Fin Método principal 3. Método ayudaSumar a. no 1. Solicitar número uno, número dos y resultado 2. Leer num1, num2, resuNi num1 + num2 3. Calcular resuMaq 4. IF resuMaq = resuNi THEN a. Imprimir 'La suma está correcta' 5. ELSE a. Imprimir 'La soma está incorrecta" 6. ENDIF 7. Preguntar "¿Desea revisar otra suma (S/N)?" 8. Leer desea b. WHILE desea "S' e, Fin Método ayudaSumar 4. Método ayudaRestar a. DO 1. Solicitar número uno, número dos y resultado 2. Leer num1, num2, resuNi num1 num2 3. Calcular resuMaq 4. IF resuMaq = resuNi THEN a_ Imprimir "Le resta está correcta' 5. ELSE a. Imprimir "La resta está incorrecta" 6. ENDIF 7. Preguntar "¿Desea revisar otra resta (S/N)?" 8. Leer desea b. WHILE desea = "S' c. Fin Método ayudaRestar 5. Método ayudaMultiplicar a. DO 1. Solicitar número uno, numero dos y resultado 2. Leer num1, num2, resuNi num2 3. Calcular resuMaq numl resuNi THEN 4. IF resuMaq a. Imprimir "La multiplicación esta correcta" 5. ELSE a. Imprimir "La multiplicación está incorrecta' 8. ENDIF


2nn Metadologia de le Progreosecidn Orientarla e illtrymDs

7. Preguntar 'iDesea revisar otra multiplicaCión (SIN)7" B. Leer desea h. WHILE desea = "5" c. Fin Método ayudaMultiplicar

8. Método ayudaDividir e. DO 1. Solicitar número uno, número dos y resultado 2. leer num', num2, resuNi 3. Calcular resuMaq = nóml / num2 4. IF resuMaq = resuNi TREN a. Imprimir "La división está correcta" 5. ELSE a. Imprimir 'La división está incorrecta' E. ENDIF 7. Preguntar 'Wesea revisar otra división (S/N17" 8. Leer desea h. WHILE desea "S' C. Fin Método ayudaDividin Fin Clase Ayuda Fin

9 gontmo 11: 4110A Es el eaeubeztatu del dlydr1 dote t.

Declaraciuneb de ciare (giubde4

a la clase)

Variables

tiumi, num2, resugi. resuMaq: Entero desea Carácter opcion r Entero F:o esta parte se hacer: fas derlaraciarres de clase, se pueden declara r tipos. constantes eariahlest y podrán ser utilizadas en cualquier método de lo clase. 2.

Método principal

DO e. Imprimir el menú de upeinnet donde se solicita la opción. 2. Se lee en epeive te respuesta 3. Inicia SWITCH upcivu Si opción ea 1, entonces Llanta ayudaSuinar Si opción es u. entonces Lama ayudaRestar Si opción es 3, entonas :Liante nyudalluitiplieur Si oPelon re 4, entonces liorna .1.iynaiDividir 4. Fin del SIVFECIT 12. Fin ciclo WIIILE epcion <5 5 va al DO u. Fin Método principal a. Inicia ciclv


melados 208 Todo algoritmo diseñado con métodos, inicio 571fUnCiOnalnient0 en el método principal, que será el que dirigiré' tu operación del resto de los métodos, es decir, los llamará pura que realicen lu turro que les corresponde.

3. Método ay udaSurnar a. Inicia cielo 110 1. Solicita número uno, número das y resultado del niño 2. Lee en mina, DUM2, resuNi 3. Calcula resultado de la máquina 4. Si resuMaq = resuNi Entonces u. Imprime "La suma está correcta" 5. Si no a. Imprime "La suma está incorrecta" 6. Fin IF 7. Pregunta "¿Desea revisar otra suma (S/N)?' 8. Lee en desea b. Fin ciclo WHILE desea "S"; Regresa al DO c. Fin Método aytidaSumar En este método se ayuda a revisar operaciones de sumar.

4. Método ayudaRestar a. Inicia ciclo I:10 I. Solicita numero uno, ninnero dos y resultado del niño 2. Lee en nom , mima, resuNi 3. Calcula resultado de la máquina 4. Si resullaq - resuNi Entonces a. Imprime "La resta está correctas. Si no a. imprime "La resta está incorrecta' 6. FM del IF 7. Pregunta "iDesea tensar atril. resta (S/N)?' 8. Lee en desea la respuesta b. Fin cielo %VIOLE desea = "S"; Regresa al DO c. Fin Método ayudaRestar En este método se ayuda a revisar operaciones de restar.

5. Método ayudaMultipliesir a. Inicia ciclo En) t. Solicita 111.1111470 uno, número dos y maullado del niño 2. Lee en nunsi, cuma, resuNi 3. Calculo resultado de la máquina 4. Si resuMaq - resuNi Entonces a. Imprime "La multiplicación está correcta" ñ. Si no a. Imprime "La multiplicación está incorrecta" 6. Fin del IF


210 hantodninghe ele In Prograrnarion Orientada a Dalias 7. Pregunta "¿Desea revisar otra multiplicación (S/N)? 8_ Lee en desea b. Fin ciclo WH1LE desea = "S"; Regresa al DO c. Fin Método ayudaMultiplicar En este método se ayuda a revisor operaciones de multiplicar. 6. Método ayuclaDividir a. Inicia ciclo DO r. Solicita número uno, número dos y resultado del niño 2. Lee en num, noma, resuNi 3. Calcula resultado de la máquina 4. Si resuMaq = resuNi Entonces a. Imprime '1.a división esta correcta" 5• Si no a. Imprime 1.a división está incorrecta" 6. Fin del 1F 7. Pregunta "¿Desea revisar otra división (S/N)?" 8. Lee en desea 13. Fin ciclo WHILE desea "S"; Regresa al DO c. Fin Método avudaDividir En este método se ayudo a revisar operaciones de dividir.

9.2 Formato general de una clase con métodos Una ciase puede tener másde un método, a m'inhlación se espitesel formato general de un algoritmo para cuando se presenta esta situación. Como ya sabemos la clase empieza con el encabezado de la clase: Clase NomClase Parte L Se tiene una parte de declaraciones de clase: 1. Declaraciones de clase Constantes Tipos Variables Estas son declaraciones glohnles en la clase, es decir, se pueden utilizar en cualquier método de la clase. Esta parte es opcional; es decir, puede estar presente o no. Parte 2, Se tiene el método principal, es el paso 2 dentro de la clase, si hay declaraciones de elan; pero si no hay declaraciones de ciase, este es el paso I. Como ya se indicó anteriormente, este es el método obligatorio; y es donde inicia el funcional-11c," de la clase;


Métodos 211 2. Met000 prinCipal a. Declaraciones Constantes Tipos Variables b. Accionl c. Acción2 d. AccionN e. Fin Método principal Parte 3. Se tiene uno o más métodos subordinados; que son opcionales: 3. Método FuncionUno a. Declaraciones Constantes TipOS Variables b. ACción1 c. Acción2 d. ACCIOnN e. Fin Metody funOlOnlino 4. Método fonnionDos a. Declaraciones Constantes TiptIS Variables 5. AccIón1 c. Acción2 d. ACCiónr4 e. Fin Matad° funcionDos 5. Método foncionTres a. Declaraciones Constantes lipos Variables b. Abrion1 c. Acción2 d. Acclánli e. Fin Método fOnolOnTres Fin Clase NarsClase Por último se tiene el hn de

la dase


212 Mdtddildi. le PcDg-acrdcror Cremada a Objetos

Nota: Corno puede observar, cada método de la ciase puede tener su parte de declamoones: consumes y variables, la cual es opcional: y lo que ahí se declare. soto puede ser utilizado en el método correspondiente: es decir, se les conoce como locales al rnatodo donde se definen,

92 Variables globales, locales y pararnetros 9.3.1 Variables globales Cuando un algoritmo utiliza métodos, se pueden declarar variables tanto en el contexto global de la clase, como de manera local en cada método. A las variables definidas en el contexto global se les llama variables globales o variables de clase, mismas que pueden utilizarse en cualquier método de la clase. A continuación se presenta un algoritmo que muestra cómo usar una variable global o de clase:

Algoritmo VARIABLE GLOBAL Clase VarGlobal 1. Declaraciones de clase Variables x: Entero 2. Método principal a. x0 b. Llamar cambiar c. Imprimir x d. Fin Método principal

3. Método cambiar a. x = 1 b. Fin Método cambiar Fin Clase VarGlobal Fin

ARIABLE GLOBAL tiene el método principal y un método subordi e o llamado cambiar. Se utiliza una variable global o de clase (global a la clase), la cual definida en la parte de declaraciones de la clase, a continuación, en el método principal. le asigna el valor cero a dicha variable (x-..0); luego se llama o invoca al método caro el cual también utiliza la variable s, asignándole el valor 1. Al regresar al método pri se imprime la variable s cuyo valor es 1. Esto significa que se utiliza una sola variable global o de clase (global a la clase). cual se le asigna el valor cero en el método principal y después se le asignar en el cambiar: al regresar al método principal se imprime x. con el valor actual i.


Métodos 213

9.3.2 Variables locales Las variables locales san las que se definen en cada método, mismas que sólo pueden utilizarse en el contexto del método en que fueron definidas. A continuación se presenta un algoritmo que muestra cómo usar una variable local: Algoritmo VARIABLE LOCAL Clase VarLocal 1. Declaraciones de clase Variables x: Entero 2. Método principal a. x = 0 b, LLamar cambiar c. Imprimir x d. Fin Método principal 3. Método cambiar a. Declaraciones Variables x: Entero b. x=1 c. Fin Método cambiar Fin Clase VarLocal Fin

Este algoritmo VARIABLE LOCAL tiene el método principal y un método subordinado llamado cambiar. Se utiliza una variable global o de clase (global a la clase) x definida en la parle de declaraciones de la clase (globales de la clase); a continuación (en el método principal) se le asigna el valor cero, luego se invoca al método cambiar en el cual se define una variable local con el nombre de x, a la cual se le asigna el valor 1. Al regresar al método principal, se imprime la variable x cuyo valor es cero (o). Revise el algoritmo ¿Ya lo hizo?. Si es cierto, ¿por que? Respuesta: aunque las dos y vea si esto es cierto variables tienen el mismo nombre; son diferentes, va que una se definió como global a la clase y la otra como local. Aun cuando la local definida en el método cambiar, se llame igual que la global, para este método tiene mayor jerarquia la local, es decir, oculta a la global (de la clase) porque tiene el mismo nombre. En otras palabras. en el algoritmo se define una variable global o de clase x a la que se le asigna el valor o (en el método principal), luego se llama al método cambiar donde se define una variable local x, y se le asigna el valor I. Al regresar al método principal se imprime x, ¿cuál x?, obviamente la global, parque es la única de las dos x's que se puede usar en el método principal, que tiene el valor de cero (o). este mamen to se recomienda ir al punto de ejercicios resueltos. estudiar IlMengunos ejemplos y resolver otros de los ejercidos propuestos para aplicar métodos que no regresan valor, variables globales y locales.


214 Mebodok4o de le

Or-alramecion Orworada e ONems

92.3 Parámetros Si analizarnos los conceptos de variables de clase (globales) y locales, inferirnos que cuando se usan variables locales, éstas son independientes de las globales y de las de otros métodos. En ocasiones puede ser necesario conectar una variable de clase (global) con una local para transmitir datas entre ambas, o bien, conectar variables locales de un método con variables locales de oteo(s) método(s); esto es posible mediante el uso de parámetros, donde las variables fungen como tales. Existen parámetros por referencia ■ parámetros por valor. 9.3.3.1 Parionsoro por referencia Cl parámetro por referencia (o parámetro variable, en algunos lenguajes), es una variable local de un método que se define como parámetro en el encabezado del mismo; y sirve para conectarse con otra variable de otro método mediante el envio de su dirección. es decir, se conecta con la otra variable a través de su contenido; al llamarse o invocarse el método se establece la timexion, conviertiéndose en sinónimos, esto significa, que la que le suceda a la variable local del método llamado, le sucederá a la variable del método con la que fue conectada al hacer la llamada, porque utilizan la misma posiráan de memoria. A cantinuaci6n se presenta un algoritmo que muestra el uso de un parámetro por referencia. Algoritmo PARAMETRO POR REFERENCIA Clase Paramet roPorReferenCia S. Método principal a. Declaraciones Variables x: Entero b. x = c. Imprimir x d. LLamar cambiar(x1 e. Imprimir x f. Fin Método principal 2. Método cambiar(Ref y: Entero) a. y= 1 b. Fin Método cambiar Fin Clase ParametroPorReferencia Fin

o principal I I PP ln I se define la variable s, a la cual se le asigna el valor cero y se imprime: luego se llama al método cambiar, y, dado que deseamos conectar esta variable con una variable local del método, entonces indicamos entre paréntesis dicha variable (cambiar(x)). En el encabezado del método cantbiar y especificado entre paréntesis se define la variable que fungirá como enlace con la variable de otro método: la palabra


Metnetis 215

Ref indica que se está definiendo un parámetro por referencia (llamado tipo variable en algunos lenguajes como Turbo Pascal), y es el nombre de la variable que funge como parámetro (aqui se le llama parámetro formal}; y Entero es el tipo de dato de la variable parámetro. Nótese que y queda definida ramo una variable local, independientemente de que se definan otras en la parte de declaración de variables del método, es decir, que en un método es posible declarar variables en dos partes: una es la normal (la parte de declaración de variables), y la otra en el encabezado del método; se definen las variables que fungirán parámetros. Cuando se llanta al método, las das variables se conectan convirtiéndose en sinónimos, es decir, que x y y son lo mismo y en la memoria las dos hacen referencia a] mismo contenido; esto signifimi Tic lo que le suelda a y e.n método, le sucederá a s, de ahi que también se. le conoce como parámetro tipo va riable, ya que su valor puede cambiar. 'Una vez que el control esté dentro del método, 9 y se le asigna el salar de t, lo cual le sucede. también a s. Al regresar al método principal se imprime x mie tendrá el valor . Nata: Se le llama pararnetro formai al definido en el metodo; y parámetro anual al paramecio utilizado al hacer la llamada at método, este concepto se aplica a todos los tipos de parámetros.

Esquemáticamente:

-

Se define la variable x ea el Meted.) principal, la cual tiene su contenido en la memoria, se le coloca u; gráficamente: Contenido

Cuando se llama el Método e-ambiar, se conectan x y y ola parámetro por referencia, lo que hace que gran sinónimos, es decir, que y u rilice la misma dirección de memoria que gráficamente: Contenido

Y Cuando a y se le coloca L ¿qué le pasa a x? Contenido


216 Matodologia da la Prograrnacién Gnentada a 01312COS

A a le pasa lo mismo que le sucede a y; es decir, a y se le coloca i e indirectamente le sucede lo mismo a x, porque manejan el mismo contenido en la memoria.

9.3.3.2 Parámetro por valor El parámetro por valor es una variable local de un método que se define como parámetro en el encabezado del mismo; y sirve para conectarse con otra variable de otro método mediante el envio de se valor, en el momento de hacer la llamada del método, después de lo cual ya no hay relación, De ahí en adelante lo que le sucede a la variable parámetro no afectará a la otra variable, que sólo le curia su valor. A continuación se presenta un algoritmo que muestra cómo utilizar un pa ramet m por valor.

Algoritmo PARAMETRO POR VALOR Clase ParametroPorValor 1. Método principal a. Declaraciones Variables x: Entero b. x - 0 c. Imprimir x d. LLamar cambiar(x) e. Imprimir x f. Fin Método principal cambiar(Val y: Entero} a. y = 1 b. Fin Método cambiar Fin Clase ParametroPorValor Fin 2.

Método

Ebtoomilisti ealgoritmo, podemos observar que la única diferencia con el anterior Si en es que al delinir la variable que funge corno parámetro en el método, se indica la palabra Val, lo que signilka que es un parámetro por valor. La diferencia con respecto al parámetro por referencia es que al llamar al método, el valor del parámetro actual x se le asigna al parámetro y {del método) nada más, es decir, que de ahi en adelante lo que le suceda a y es independiente de s. En tarea palabras, si x vale o al llamar a cambiar, a y se le asigna o (el mismo valor que x); en la memoria s tiene su propio contenido y y tiene el suyo. En el ejemplo anterior, a la variable x se le asigna o; luego se narria carnbiar(x), en ese momento a y se le asigna el valor de x, es decir o. Ya en el método, a y se le asigna y, se regresa al método principal a imprimir x, la cual tiene el valor de o, es decir, al ir al método Camhiar no le afecto lo que se le asignó a y. Por ello este tipo de parámetro funge sólo como un valor que se envio al método. Cabe hacer la aclaración que se ha usado un solo parámetro, pero pueden usarse más. los parámetros indicados tanto al definir el método como al llamarlo desde el método principal, deben coincidir en número y tipo.


Melados 217

Esquemáticamente: Se define la variable x en el Método principal, la cual tiene su contenido en la memoria, se le coloca o; gráficamente: Contenido

Cuando se llama al Método cambiar, se conectan x y y vía parámetro por valor, lo que hace que el valor de x se le asigne a y; de ahí en adelante x y y no tienen ninguna relación; gráficamente: Contenido a

Mal MED

Es decir. x tiene su propio contenido en la memoria y y tiene el propio. Cuando a y se le coloca I ¿qué le pasa a x?

-a-

Contenido

y

A x no le pasa nada; es decir, a y se le coloca t en su contenido, y x ni cuenta se as, porque tiene su propio contenido independiente de y. Práctica: rrEn este momento se recomienda ira] punto de ejercicios resueltos, estudiar algunos ejemplos y resolver otros de los ejercicios propuestos para aplicar parámetros por valor y por referencia.

9.4 Funciones estándar Las funciones estándar son funciones proporcionadas por cualquier lenguaje de programación de alto nivel, dichas funciones se agrupan como matemáticas, cadena de caracteres o alfabéticas, archivos, graficacion, objetas, especiales, etc. En los capítulos anteriores hemos estudiado algunas funciones estándar. en este capítulo.e estudiarán otras funciones, mientras que en los demás capítulos se estudiarán otras más.


21 a Metnnningia de la Progrernauรณn Onereada a aletas

9.4.1 Funciones cederle de caracteres Carรกcter La funciรณn Carรกcter pmporciona el carรกcter representado por un valor entero en sistema numรฉrico decimal, de acuerdo al cรณdigo ASCII. Formato:

Carรกcter (x) Donde:

Carรกcter Es la palabra que identifica a la funciรณn. e Es el parรกmetro que indica el valor entero en sistema numรฉrico decimal, que se se tomarรก como base para determinar el carรกcter correspondiente. Debe ser de tipo entero. El tipo de dato del resaltado es Carรกcter.

Elimilbraa c~cter (65) car toma el valor A; es decir. la letra A corresponde al Unen) decimal 65 en el cรณdigo ASCII. Ordinal la funciรณn Ordinal proporciona el valor entero decimal que se utiliza para representar un carรกcter, de acuerdo al cรณdigo ASCII. Formato:

Ordinal (x) Donde:

Ordinal Fs la palabra que identifica a la funciรณn. Es el parรกmetro que indica el carรกcter al cual se determinarรก el valor entero decimal que se utiliza para representarlo. Debe ser de tipo Carรกcter. El tipo de dato del resultado es entero.

num - Ordinal("A"1 nazi torna el valor by; es decir, la letra A corresponde al entero decimal 65 en el cรณdigo


Met0C105

219

Concatenar La función Concatenar permite concatenar o "unir" cadenas de caracteres.

litea4 Si tenernos variables: nombrePala - 'Maria" apellidoPaterno - "López' apellidoMaterno = "Acosta" Podemos concatenar de la forma: nombrePersona = Concatenar(nombrePila + apelllooPalerno apelliooMaternO) bien, de la forma siguiente: nombrePersona = nombrePila

apellicloPaterno

apel 1 idomaterno

Donde: Concatenar

Es una función que realiza la otincatenación. Batanees nornbrePersnna tendrá el contenido "Maria López Acosta"

Subcadena La función Subcadena permite obtener una copia de una subcadena (una parte de una cadena). Formato:

Subcadena (cadenaFuente , inicio, tamaño Donde:

Identifica la función. Subcadena cacienaFuent e Es la Va risible tipo cadena de carnetems de la cual se obtendrá la subeadena. Es un número, variable o expresión de tipo entero que indica la inicio posición desde la cual se empezará a obtener la subcadena. Es un número entero, variable o expresión de tipo entero que tamaño indica la cantidad de caracteres que serán copiados,

mi

l imo ular cadena nombrePersona con el valor "Maria lopez grusta" y se aplica lo siguiente:


220 MetPIWIGgl.5 de la Prtwerriacein Orientada a aleles

a = Subcadena(nombrePersona,7,5) tornará el valor '". Lopez Porque se copian 5 caracteres desde el 7.

Borrar La función Borrar borra o quita una subcadena de una cadena. Formato:

Borrar(cadeneFuente,Inicio,tamanO) Donde:

Borrar cadenaFuent e inicio tamaño

tdentifica la función. Es la variable tipo cadena de caracteres de la cual se borrará.

F...% un numero, variable o expresión de tipo entero que indica la posición desde donde se empezará a borrar. Es un numero, variable o expresión de tipo entero que indica la cantidad de caracteres que serán borrados.

Mdth Si tenemos: comentario =•El FUTBOL SOCCER ES POCO INTERESANTE" y le apbeamos lo siguiente: Borrar ( comentarlo,21 , 4 ) tendremos comentario = "EL FUTBOL SOCCER ES INTERESANTE« porque se borra a partir del carácter 21 (desde la 1), v se borran cuatro caracteres (POCO)

Insertar La función Insertar inserta caracteres en una cadena. Formato:

Insertar(caracteres,cadenaObjeto,inicio)


Metanos 221 Donde: Insertar Identifica la función. Es una cadena de caracteres ya sea constante o variable. caracteres cadenaObj eta Es la variable tipo cadena de caracteres en la cual se insertarán los caracteres. Es un número, variable o expresión de tipo entero que indica la inicio posición desde la cual empezará la inserción de los caracteres.

Si

emos: comentario ='EL FÚTBOL SOCCER ES INTERESANTE'

y le aplicamos: Insertar( "POCO' , comentario ,21) Quedará: comentario -'EL FUTBOL SOCCER ES POCO INTERESANTE"

Longitud La función Longitud proporciona la longitud de una cadena. Formato: Longitud 1 cadenaFuente) Donde: Longatud c adenanrent e

Identifica la función. Es la variable ti po cadena de caracteres dr la cual se propurcioilará su longitud en número de caracteres.

comentario .'EL FUTBOL SOCCER ES INTERESANTE' y le aplicamos: n = Longitud(comentario) n tomará el valor 31 porque comentario tiene 31 caracteres.


222 MernrInlogla de la Programación Orientada e Objama

Posición La función Posición busca una cadena dentro de otra y proporciona la posición donde inicia. Formato:

Posición ( cadenaFuente cadenaBuscada ) Donde:

Posición cadenaFuente

Identifica la función. Es la variable tipo cadena de caracteres en la cual se buscará la otra cadena.

cadenaBuscada Es la cadena de caracteres que será buscada.

itt~ Si tenemos

comentario = "EL FÚTBOL SOCCER ES POCO INTERESANTE' y le aplicamos:

a = Posición ( comentario, 'POCO") a tomará el valor de 21, donde empieza la cadena buscada.

Cadena La función Cadena convierte un valor numérico real o entero en cadena de caracteres. Formato.

Cadena( numero , cadena0b) eto ) Donde:

Cadena

Identifica la función. numero Fs una variable o número entero o real. cadenaObj eto Es una variable tipo cadena de caracteres en la cual se colocará el valor convertido.

Si tenemosn con el valor 278, y le aplicamos: Cadena(n,n2)


Mstortos 223

n2 toma el valor '278" es decir, transforma el número entero en cadena de caracteres.

NOTA: La variable numerica tiene ta opción de forrnmearse para tipos reales, por eiempio, so n = 27155 se convierte de la siguiente kirrna. Cadena(n:10:2,n2) Donde se está ronnateando el contenido de la variable n, a 10 posiciones de salida con 2 decimales, entonces el valor de n2 ser:5'271.55-

Valor La función Valor convierte una cadena de caracteres (string) a número entero o real. Formato:

ValoolcadenaFuente,numero,estado) Donde: Valor

adenaFuente nume ro estado

Identifica la función. Es la cadena de caracteres que se convertirá a numérico, Es una variable de tipo entero o real, en la cual se asignará el valor de la cadena de caracteres pero en formato numérico. Es una variable tipo entero que tendrá al valor cero si se hizo la conversión correctamente. En caso de no hacerse correctamente contendrá el número de carácter donde se presentó el problema.

41211111-

Si tenemos n2 con el valor "278.55-, y la aplicamos:

Valor(n2,n,1) n torne el valor 278.55: i toma el valor o, porque se hizo la conversión ourrectamen te.

este momento se recomienda ir al punto de ejercicios resueltos, estudiar Igunos ejemplos y resolver otros de los ejercicios propuestos para aplicar las funciones explicadas en este punto. 9.4.2 Validación de la entrada de datos Las funciones del punto anterior son útiles para algunas operaciones, tales corno puede ser la validación de datos. Por ejemplo, si debemos leer un número entero podríamos hacerlo de la siguiente manera:


224 Metodologie cte Ie Pfngrarnao0n Oneniada e paletos

Arontinuadánsepresentaelágorihnodelasolución. Algoritmo LEER IMPRIMIR N Clase LeeImprimeN 1. Método principal e. Declaraciones Variables n: Entero b. Solicitar Numero entero c. Leer n d. Imprimir n e. Fin Método principal Fin Clase LeeImpr1meN Fin

Se 81 ne a0 vanable 1° se solicita un número entero; se lee en n; se imprime el número leido; fin. O hien, podríamos leer ese número validando la lectura (entrada de datos). Sque significa esto? Que cuando se teclee el número, puede teclear una letra o símbolo especial esto sería un error. La idea es que el algoritmo valide la entrada, es decir, detecte si has errar en la entrada del dato y que permite recuperarse del error, es decir, no quedarse tirado con el error. A continuación se presenta un algoritmo que permite leer el mimen entero, si hay error, lo vuelve a leer, y así, hasta que se teclee sin error: Algoritmo LEER IMPRIMIR N VALIDANDO Clase LeeImprimeValidando 1. Método principal a. Declaraciones Variables n, i, bandera: Entero numero: Cadena[5I num: Carácter E. DO 1. bandera = 1 2. Solicitar Numero 3. Leer n 4. Cadena(n,numero) 5. FOR 1=0; 1, -Longitud(numero)-1; i++ a. num , Subcadena(numero,1,1) b. IF NOT(((num>="0")AND(NUM<="9"))0R (num='-')) THEN 1. bandera = 0 C. ENDIF d. IF (num = 11 - 1 ) ANO li > 0) THEN 1. bandera = 0


Metales 225

e. ENDIF 6. ENDFOR c. WWILE bandera ‹, 1 d. Imprimir n e. Fin Método principal Fin Clase LeeImprimeValidando Fin

. 11# Sr entra en un mclu repetitivo donde La bandera se "enciende" colorándole 1, enseguida se solicita y lee el Mimen] en una variable tipo Cadena, fuego se entra en un ciclo que revise cada uno de los caracteres leidos; si alguno(S) nu es (sun) un dimito entre ovo() no es el signo de menos, entonces. se "apaga" la bandera. colue.ándule o; al llegar al WIIILIl del ciclo externo, se evalúe si la bandera no está "apagada" (diferente de i), si es así, se vuelve a entrar al ciclo para volver a leer el número; esto se repetirá mientras que la bandera rw "apague", es decir, liaste que se haya leido correctamente un numero de tipo Lotero (ni> sc le puso O -saco-}.

Observan » ......ij tor la varlahl~ bandera pudo haberse definido de tipo andean y usar los valores True (Verdndern) c FHtic (Falso]: en lugar de 1 y o.

PrillgIticil En este momento se recomienda ir al punto de ejercicios resueltos, estudiar algunos ejemplos y resolver otros de los ejercicios propuestos para aplicar validación de la entrada de datos. 9.4.3 Funcionas unpocialus En este punto se estudiarán algunas otras funciones especiales de indole general . Random La función Random proporciona un número aleatorio, es decir. un número generado al azar; realmente es un número pseudoaleatorio porque es generado por una función matemática, por lo cual no es totalmente aleatorio. Formato;

Randnial (n11 Donde:

Random Identifica la función. Es opcional: Cuando no está presente se genera un valor entre o y 1 o r valor e t. El valor es tipo Real. Cuando esta presente se genera un valor entre n y n o <= valor < n. El valor es tipo Entero.


228

Metadología ie la Provemadón Chenceda e Objetos

nurrendom( 20 ) num tomará un valor entre o y 20, es decir, cualquiera desde o al 19. num . Rancios num tomará un valor entre o y 1, es decir, cualquiera entre o y o.9999999....

IniciaRandom La función IniciaRandom permite iniciar la semilla del generador de números aleatorios. Los números aleatorios (pseudo) se generan a partir del valor que tiene la semilla, el cual se almacena en la variable Randseed. Cada vez que se ejecuta esta función Randseed toma un nuevo valor generado a] azar. Formato:

IniciaRandom

Sonido la función Sonido genera un sonido en el altavoz de la computadora de acuerdo con la frecuencia que se le indique hasta que se encuentre con la función NoSonido. Formato:

Sonido( frecuencia) Donde:

Sonido f recuencia

Es el nombre de la función. Es un numero entero que indica la frecuencia del sonido.

NuSonido la función NoSonido detiene la generación de sonido en el altavoz. Formato: NoSonido

Detener La función Detener detiene el funcionamiento de la computadora la cantidad de milisegundos que se le indique. Formato:

Detener(tiempo)


22B Matadologie de Prograrnactn Croo-dada a Natas

Tupo de dato Es el tipo de dato del resultado que regresará el método. return Indica que el método está regresando el valor obtenido a calculado. valor Ez el valor que regresa el método.

Referencia de métodos que devuelven valor Para llamar o invocar a un método que regresa valor, se indica e] nombre del misma poniendo entre paréntesis el parámetro que se envio, utilizándose como cualquier otra variable de tipo simple. Por ejemplo: x = 5 n = nomFuncion(x) x toma el valor 5; luego se llamad método nomFundon, enviándole como parámetro X, el método utiliza el valor de ay hace algún cálculo devolviendo un valor, el cual es colouado en n.

10 Eá

rar 15 un aalgoritmo que evalúela función: XI

de la cual se tienen Ion dalos X v Y; mismos que deberán solicitarse y leerse. Factorial de X se divide entre el Factorial de:Y multiplicado por el factorial de X-Y. A continuación le presenta el algoritmo de la solución. Algoritmo EVALVA EL VALOR DE F GlaSe IvaluaF 1. Método principal a. Declaraciones Variables x, y: Entero fi Real E. Solicitar E, Y c. Leer x, y d. f = factcrial/x} / (factorial(y) e. Imprimir 'El valor de F = , f f, Fin Matado principal 2. Método factorial(Val a. Declaraciones Variables

factorial(x -y))

Entero): Entero


230 Metodalogia de la Prourenlacián Orrentuda e Coletos

2. Inicia ciclo FOR desde i = n hasta i con decrementos de -i A. Calcula fact = fact t i 3. Fin del FOR d. Fin del IF e. Regresa el valor que calculó en fact f. Fin Método fadurial

Práct

En este momento se recomienda ir al punto de ejercicios resueltos, estudiar algunos ejemplos y resolver otros de los ejercidos propuestos para aplicar métodos que regresan valor.

9.6 Ejercicios resueltos Ejercicio 9.6.1 Elaborar un algoritmo que ofrezca un menú de opciones, mediante el cual se pueda escoger calcular el área de las figuras geométricas: triángulo, cuadrado, rectángulo y círculo. Una vez seleccionada la opción, que llame a un método que permita solicitar, leer los datos necesarios, hacer el cálculo correspondiente e imprimirlo. Area de triángulo = BaseAltura Área de cuadrado = LADO2 Arca de círculo = 1tr2 Arca de rectángulo = Base a Altura Debe ofrecer el siguiente menú de opciones, donde está solicitando la opción deseada: FIGURAS ARRAS GEOMEFRICAS LTRIANGULO 2. CUADRADO 3. RECTANGULO 4- CIRCULO 5. FIN ORCION: Usar variables locales. A continuación se tiene el algoritmo de la solución: ("Primero hágalo usted—después rompan. la solución)

Algoritmo AREAS Clase AreasFigGeOmetricas 1. Método principal a. Declaraciones


Metze._, 231

Variables opcion: Entero b. DO

1. Imprimir MENU

APEAS FIGURAS GEOMETRICAS 1. TRIANGULO 2. CUADRADO 3. RECTANGULO 4. CIRCULO 5. FIN OPCION: 2. Leer opcion 3. SWITCH opcion 1: Llamar calcularAreaTriangulo 2: Llamar calcularAreaCuadrado 3: Llamar calcularAreaPectangulo 4: Llamar calcularAreaCimculo 4. ENDSWITCH c. WHILE opcion u> 5 d. Fin Método principal 2.

Método calcularAreaTriangulo a. Declaraciones Variables base, altura, areaTria: Real b. Solicitar Base, Altura c. Leer base, altura d. areaTria = (base • altura)/2 e. Imprimir areaTria f. Fin Método calcularAreaTriangulo

3. Método calcularAreaCuadrado a. Declaraciones Variables lado, areaCuad: Real b. Solicitar Lado c. Leer lado d. areaCuad Potencia(lado,2) e. Imprimir areaCuad f. Fin Método calcularAreaCuadrado 4. Método calcularAreaRectangulo a. Declaraciones Variables


232

Matodolage do lo Programaron Orientarla a Choro;

b. c. d. e. f.

areaRec, base, altura: Real Solicitar Base, Altura Leer base, altura areaRec = base • altura Imprimir areaRec Fin Método calcularAreaRectangulo

5. Método calcularAreaCirculo a. Declaraciones Constantes PI = 3.145926536 Variables areaCirc, radio: Real b. Solicitar Radio c. Leer radio d. areaCirc = PI • Potencia/radio,2) e. Imprimir areaCirc f. Fin Método calcularAreaCirculo Fin Clase AreasFigGeorsetricas Fin

Dentro de la1e se definen cinco métodos: uno es e] método principal, y los otros método,: calculan el area de un triángulo, cuadrado, rectángulo y círculo, respectivamente. Se tiene el método principal: t. Método principal a. Se declara la variable opcion para leer la opción que escoga b. Inicia ciclo DO t. Imprimir MENU y solicita la opción 2. Lee en Opcion 3. SWITCH opcion Si opcion = o: Llama Método calcuiarAreaTriangulo Si opcion = 2: Llama Método calcular.~Ladrado Si opcion = 3: Llama Método calcularAreaRectangulo Si opcion = Llama Método calcularAreaCirculo 4. Fin del SWITCH e. Fin ciclo WHILE opcion <a 5 va al DO d. Fin Método principal 2. Método calcularAreaTriangulo a. Se declaran las variables h. Solicita Base, Altura c. lee base, altura d. Calcula areaTria = [base • al tura lin


Métodos 233 e. Imprime areaTria f. Fin Método calrularAreaTriangulo 3. Método calcularAreaCuadrado a. Se declaran las variables b. Solicita lado c. Lee lado d. Calcula areaCuad = Potencia(lado.2) e. Imprime areaCuad f. Fin Método calcularAreaCuadrado 4. Método calcularAreaRectangulo a. Se declaran las variables b. Solicita Base, Altura e. Lee base, altura d. Calcula areaRec = base • altura e. Imprime areaRec f. Fin Método calcularAreaRectangulo 5. Método calcularAreaCirculo a. Se declaran la constante y las variables h. Solicita Radio c. Lee radio d. Calcula areaCire = PI " Potencialradio,2) e. Imprime areaCirc f. Fin Método calcularAreaCirculo Ejercicio 9.6.2 Elaborar un algoritmo que permita leer dos números de tipo Real en el método principal; que en un método los intercambie vía parámetros por referencia, y los imprima en el método principal. Usar parámetros por referencia. A continuación se tiene el algoritmo de la solución: (Primero luigaio usted...después campare la solución)

Algoritmo INTERCAMBIA NUMERDS

Clase IntercambiaNumeros 1. Método principal a. Declaraciones Variables a, E: Real b. Solicitar dos números c. Leer a, b d. Imprimir a, b e. Llamar intercambiarla,b) f. Imprimir a, b g. Fin Método principal


234 MewErologie de la Prograrnau0n Chemada a Obietos

2. Método intercambiar(Ref al, bl: Real) a. Declaraciones Variables auxiliar: Real b. auxiliar = al c. al = bl d. bl = auxiliar e. Fin Método intercambiar Fin Clase IntercambiaNumeros Fin 140* .e éto principal a. Se declaran las variables b. Solicita dos números c. Lee a, b d. Imprime a, b e. Llama intercambiada,b) enviando a y b como parámetros, que se conectarán con al y bi. f. Imprime a, b g. Fin Método principal 2. Método intercambiar(Ref as, ti: Real) al y In se definen como parámetros por referencia. que se concertarán con a y b. respectivamente al ser llamado este método. a. Se declara la variable auxiliar b. Se coloca ai en auxiliar c. Se coloca bi en al d. Se coloca auxiliar en hl e. Fin Método intercambiar Ejercicio 9.6.3 Elaborar un algoritmo que permita leer tres números de tipo entero e imprima el mayor: utilizando un método para leer los números, otro método para obtener y devolver el mayor y un método para imprimir el mayor. Usar parámetros por valor y por refrencia. A continuación se tiene el algoritmo de la solución. (Primero hóyolu usted...después compare lo solución) Algoritmo MAYOR 3 NUMEROS CON MET000S Clase Mayor3Numerosa 1. Método principal a. Declaraciones

Variables a, b, c, may: Entero ti. Llamar leerNumeros(a, b, c)


mamona 235

c. may = obtenerMayor(a, b, c) d. Llamar imprimirMayor(may) e. Fin Método principal 2. Método leerNumeros(Ref n1,n2,n3: Entero) a. Solicitar tres números b. Leer nl, n2, n3 c. Fin Método leerNumeros 3. Método obtenerMayor(Val num1,num2,num3: Entero): Entero a. Declaraciones Variables mayor: Entero b. mayor = num1 c. IF num2 > mayor THEN 1. mayor = nuM2 d. ENDIF mayor THEN e. IF num3 1. mayor - num3 f. ENDIF g. return mayor h. Fin Método obtenerMayor 4. Módulo imprimirMayor(Val m: Entero) a. Imprimir m, 'ES EL MAYOR' b. Fin Método imprimirMayor Fin Clase Mayor3Numeros4

Fin

etodO principal a. Se declaran las variables b, Llama leerNumeros(a, b, e) enviando a, h y e como parámetros. c. Coloca en may lo que regrese obtenerMayor(a, b. c) enviando a, b y c como parámetros. d. Llama imprimirMayor(may) enviando may como parámetro. e. Fin Método principal 2. Método leerNumeros(Ref ni,n2,n3: Entero) ni, n2 y ni se definen como parámetros por referencia; se conectarán con a, b y c. a. Solicita tres números b. Lec ni, n2, n3 c. Fin Método leerNumeros 3. Método obtenerMayor( Val numi,nurn2,num3: Entero): Entero numi, num.2 y num3 se declaran como parámetros por valor, que se conectarán con a, b, y e.


238 Metodniogia ele le Proprarnacdn Ornentada a (Arena

a. Se declara la variable mayor b. Se coloca nonti en mayor e. Si suma > mayor Entonces 1. Se coloca Cuma en mayor d. Fin del IF e. Si num3 > mayor Entonces 1. Se coloca num3 en mayor f. Fin del /F g. retaco mayor h. Fin Método obtenerMayor 4. Método imprimirMayur(Val m: Entero) m se declara como parámetro por valor, que se conecta con may a. Imprime m, "ES EL MAYOR" b. Fin Método impriniirMayor En el Cr) anexo; para el capitulo 9. se encuentran los ejercicios resueltos: Ejercicio 9.6.4 Realiza cálculos con medidas estadísticas Ejercicio 9.6.5 Eleva a una potencia en un método Ejercicio 9.6.6 Calcula la suma de raíces cuadradas en un método Ejercicio 9.6.7 Calcula la suma de cuadrados en un método Ejercicio 9.6.8 Calcula la media de los números de un arreglo con métodos Ejercicio 9.6.9 Eleva a potencias Ejercicio 9.6.10 Obtiene el mayor y menor de una matriz de números Ejercicio 9,6.11 Determina SI una matiz es simétrica o no Ejercicio 9.6.12 Obtiene el dígito verificador de un número Ejercicio 9.6.13 Indica si una frasees un palíndromo Ejercicio 9.6.14 Dice fecha con letras Ejercicio 9.6.15 Realiza la validación en la entrada de datos Ejercicio 9.6.16 Indica cuántas veces se usó cada vocal Ejercicio 9.6.17 Separa una frase en palabras hercicio 9.6.18 Separa una frase en palabras e indica la mayor erCiCi.0 8.6.19 Genera números aleatorios

1.

orar un algoritmo que proporcione un menú que permita escoger una de las funciones siguientes: tangente, cotangente, secante y cosecante. El cálculo de cada una es de la forma siguiente: Tangente(X)-

Seno(X) Coseno(X)


MÉL000s 237

cotangente(X)Serante(X)-

Coseno(X) Seno(X)

Coseno(X)

Cosecante(X)= Seno(X) 2.

Elaborar un algoritmo que proporcione un menú donde ofrezca hacer conversiones entre metros, yardas, pulgadas y pies. Si escoge metros, en un método debe leer la cantidad N de metros y que imprima una tabla de equivalencias a yardas, pulgadas y pies; desde 1 metro hasta N metros de uno en uno. Equivalencias: 1 pie = 12 pulgadas, I yarda = 3 pies. 1 pulgada = 2.54 cm, 1 metro = loo cm. Se debe imprimir la tabla siguiente. Conversiones Metros 1 2

N

Yardas

Pulgadas

Pies

9999.99 9999.99 -9999.99

9999.99 9999.99

9999.99 9999.99 9999.99

9999.99

Y asi si escoge pies. pulgadas o yardas se hace lo propio para cada una de ellas. 3. Similar al anterior, sólo que se lee un valor inicial y un valor final: Por ejemplo si los valores leidos son loo y 200; las conversiones se harán desde toa hasta 200 de uno en uno. 4. Elaborar un algoritmo que ofrezca un menú que permita escoger la impresión dr las tablas de multiplicar, dividir, sumar y. restar, y dentro de cada opción que permita escoger las del 1, 2, 3, 4, 5, 6, 7, S, 9, y lo. 5. Elaborar un algoritmo que defina tres matrices MI y S de 7 x 7, que lea números enteros para A y B; que obtenga la 5 multiplicando los elementos A(1,1) y B(1,1) y lo coloque en el S(1,1), y asi sucesivamente. Que al final imprima las tres matrices. L'tilizar un método para leer y otro para imprimir. 6. El sistema monetario mexicano incluye entre billetes y monedas las denominaciones siguientes: 500, 200, 100. 50, 20,10, 5, 2, i, pesos y de 5o, 20, 10, 5 centavos. Hacer un algoritmo que lea una cantidad y que imprima cuántos billetes y monedas y de qué denominaciones se necesitan para cubrir dicha cantidad_ Por ejemplo, la cantidad 577.8o generaría: 5 billetes de 100,1 de so, t de 20,1 de 5, i de 2 pesos, una moneda de bo centavos, 1 de 20, 1 de lo.


238

Metodolinia de la Programación Orientada a ObIRIOS

Nota: lugar de 5 de MO, podrían ser dos de 200y uno de load anude 500. 7. Igual al problema del capítulo 5, que calcula el sueldo a empleados, y al anterior, que el final presente una distribución de efectivo donde indique cuántos billetes y ¡nonadas y de qué denominaciones se requieren para cubrir el total a pagar. 8. Según el teorema de Pitágoras el cuadrado de la hipotenusa es igual a la suma del cuadrado de los catetos ( C2 = A2 + B2 ). Utilizando este concepto es posible conocer de qué tipo es un triángulo: Si C2=A2+ B2 es un triángulo rectángulo Si C2<A2+ B2 es un triángulo acutángulo Si C2z.A2-t-B2 es un triángulo obtusángulo Elaborar un algoritmo que permita leer los dos catetos y la hipotenusa e imprima el tipo de triángulo que es. Usar un método que reciba los catetos y devuelva el tipo de triángulo que es. 9. Elaborar un algoritmo que imprima las potencias de 2 que no excedan 85oo. Utilizando un método que calcule la potencia de rada número. In. Elaborar un algoritmo que lea 20 números enteros y positivos; y que para cada uno imprima si es par o impar. Utilizar un método que determine si es par o impar. ti. Elaborar un algoritmo que lea un valor X (entero y positivo); y que imprima el valor de y.

X'+—+ X' X' + 2! 3!

1!

+X X!

Usar un método que eleve X a la potencia y otro método que calcule el factorial en cada ocasión. 12. Elaborar un algoritmo que lea números enteros en un arreglo de 5 x 7, que lo imprima, e imprima la sumatoria por renglones y por columnas: utilizando un arreglo para el cálculo de las su matorlas de los 5 renglones y lo propio para las? columnas. Utilizando un método para hacer la lectura, otro para los cálculos y otro para imprimir, éstas dirigidos por un método de control que es el principal. 13. Elaborar un algoritmo que permita leer diez valores para A, B y C, calcular los valores de X1 y X2 para cada tripieta de valores e imprimir A, B, C. Xt y X2. Utilizar un método para hacer las cálculos. Utilizar la ecuación cuadrática: X

-b

-

- 4ac 2a


Metoclos 239

14. Elaborar un algoritmo que lea dos números y llame un método que calcule el máximo común divisor (mcd) y otra que calcule el mínimo común múltiplo (mcm); y los imprima al regresar al método principal. 15. Similar al anterior, sólo q1.11e ahora se deberán leer ocho veces los dos números. 16. Elaborar un algoritmo que permita leer el tamaño de un ángulo y calcule e imprima el seno, el coseno y la tangente. Utilizar métodos. 17. Un número entero es primo si es divisible solo por la unidad y por si mismo. Elaborar un algoritmo que lea un valor N. y calcule e imprima los números primos entre t y N. 18. Elaborar un algoritmo que lea el dividendo y divisor de una división entera, que llame un método al cual envíe dichos valores mediante parámetros, calcule el cociente y el residuo de la división sin utilizar los operadores \, Mod. y devuelva los resultados mediante parámet ros. lo. Elaborar un algoritmo que permita leer un número entero e indique si es capicúa; es capicúa si se lee igual de izquierda a derecha que en sentido contrario. Utilizar un método que reciba como parámetro el número, y que proporcione el valor True si es capicúa o False en caso de no ser capicúa. Ejemplo: 1991. 20. Elaborar un algoritmo similar al que calcula la media, varianza y desviación estándar. pero ahora usar variables locales en los métodos; y además, que se utilice un método para leer los números y métodos que regresan valor para calcular el valor de cada medida. 23. Elaborar un algoritmo que permita leer una frase u oración y que imprima la palabra más larga, la más corta y la posición donde inicia cada una de ellas. Utilizar un método que obtenga cada palabra. 22. Elaborar un algoritmo que permita leer una expresión aritmética, la cual estará formada por operadores aritméticos. uperandos y paréntesis. Separar y colocar los operandos en un arreglo y los operadores en otro; por último que imprima la frase los dos arreglos. Los paréntesis no se colocarán en ninguno de los dos arreglos. 23. Elaborar un algoritmo que permita leer las longitudes de los tres lados de un triángulo y calcular e imprimir cada uno de los tres ángulos, utilizando un método para el cálculo de cada uno de éstos. 24. Elaborar un algoritmo que permita leer números enteros en una matriz de 4 x 5 e imprimir los elementos que al mismo tiempo sean el mayor de su renglón y el mayor de su columna. 25. Elaborar un algoritmo que permita leer una frase u oración e imprima cuántas veces se utilizó cada letra del alfabeto. Utilizar un método que reciba como parámetros la frase v la posición en la que se debe obtener el carácter, y que obtenga un carácter en cada llamada.


240 Metodaioga de la ProgrernsoOn Onentade a Oteros

26. Elaborar un algoritmo que permita leer una frase u oración y que imprima la palabra más larga, contemplar la posibilidad de que haya más de una palabra con la longitud más larga, en tal caso, se puede utilizar un arreglo para guardarlas y al final imprimir todas las palabras que tuvieron la máxima longitud. 27. Elaborar un algoritmo que permita leer so números enteros en un arreglo, e imprimir cuántas veces se utilizó cada uno de los dígitos del o al 9. 28. En un triángulo rectángulo es posible que se desee calcular el cateto A, el cateto B, o la hipotenusa C, de acuerdo con los datos que se tengan disponibles. Elaborar un algoritmo que permita seleccionare] cálculo a realizar, leer los datos correspondientes e imprimir el resultado. Por ejemplo, si se escoge calcular la hipotenusa, se debe leer el cateto A y el cateto B; si se selecciona calcular el cateto A. se leen el cateto B y la hipotenusa C; si se escoge calcular el cateto 11, se debe leer el cateto A y la hipotenusa. Utilizar métodos para hacer cada uno de los cálculos. 29. Elaborar un algoritmo que permita leer una cantidad de tipo Real, que le inserte comas cada tres cifras y la imprima.

Resumen del capitulo Conceptos que debe dominar 7 Métodos que no regresan valor 3 Variables globales y locales; parámetros por referencia y por valor 3 Métodos que regresan valor O Funciones cadenas de caracteres n Validación de la entrada de datas CI Funciones especiales


Programación orientada a objetos usando el diagrama E ` de clases

10

Contenido 19.1 Ob¡ems 10.2 Clases y su relación con los objetos 10.2.1 Determinar las clases 10.2.2 Representación de la clase y sus instancias 10.3 Métodos y encapsulación 10.3.1 Métodos 10.3.2 Encapsulación 10.4 Diseño del diagrama de clases 10.4.1 Modificadores de acceso tvisibilidact 10_5 Generar instancias de una clase 10.6 Arquitectura modelo-vista-controlador

Objetivo del capitulo En las primeros nueve capítulos, hemos aprendido qué son y cómo se aplican las estructuras y bases logras de la programación de computadoras, generadas hasta iu que se denominó programación estructurada, que constituyen las bases de la progra. marión orientada .1 objetos. En este capítulo se aprenderán los conceptos básicos de la programación orientada a objetos: objetos, clases. métodos y encapsu lación; y su aplicación en el diseñe de programas o algoritmos orientados a objetos, a través del uso del diagrama de clase:, y la arquitectura modelo-vista-controlador.


242 Metedoloole Ele le Pregremeciee erierdsda e Objetes

10.1 ❑bjatus La programación orientada :1 objetas (P00, también identificada como 00P, object. oriente:1 program-ni/1y). es Un método de programación muy parecido a la forma en que nosotros hacemos cosas. Es tina evolución natural de las innovaciones más recientes en el diseño de los lenguajes de programación. La POO es más estructurada que las tentativas previas de la programación estructurada; y es más modular y abstracta que los intentos previos en abstracción de datos y ocultamiento de detalles, la programación orientada a objetos se caracteriza por las siguientes propiedades; Objetos, Clases, Encapaulación, Herencia y Poli morfismo. Un programa orientado a objetos está formado por una colección de objetos interaccionando conjuntamente para representar o solucionar algún problema. Gráficamente, vidriamos observar un programa orientado a objetos, coma se muestra en la siguiente figura:

programa e constituido por un conjunto de objetos relacionados entre si, los cuales permiten hacer la entrada de datos, los cálculos necesarios para resolver el problema 1. dar la salida de datos convertidos en información.


PrsgrarnacIdn orientada a objetas usando el ckagrama de clases 243

10.1.1 Clua san be objetos Los objetos son entes, entidades, sujetos o casas que encontramos en el dominio del problema de nuestra realidad. Entiéndase; en situaciones o problemas de nuestro mundo cotidiano empresarial, (irgan nacional o institucional, que se requiere manejar o solucionar mediante la computadora.

10.1.2 Cómo están formados los objetos Los objetos están formados por dos elementos:

1. Datos que representan su estructura. En otras palabras; atributos que describen su forma o apariencia. 2. Métodos que implementan las funciones propias de su comportamiento; es decir. métodos que manipulan los datos para hacer la entrada, proceso y salida de los mismos. En el contexto no orientado a objetos, a los métodos se les conoce como procedimientos, módulos, funciones, subrutinas, etcétera. Esquemáticamente, podríamos observar un objeto como se muestra en la siguiente figura: objeto &mit datos dato3

datoN métodos( ) método2t metodo3( )

métodoN( )

Eje se representa con un rectángulo redondeado y está formado por dos partes: una parte, se compone de los datos que representan la estructura del objeto, y la otra, parte de los métodos que implementan las operaciones que se deben realizar sobre los datos. 10.1.3 Cuándo y cómo identificar los objetos En el entorno del proceso de programacion, en el paso de análisis del problema, el elemento central es el objeto: es decir, se estudia el problema y se identifican los objetos involucrados y sus relaciones.


244 Metodetopie da le Oragrarnactr, Orientada e Obietos

A continuación vamos a plantear un problema para ejemplificar cómo identificar los objetos,

Definición del problema (es el paso t del proceso de programación) • Elaborar un programa que permita calcular el sueldo de los empleados de una empresa. Análisis del problema (es el paso 2 del proceso de programación) 11 Planteamiento del problema. En la empresa X hay varios empleados. por cada empleado se tienen los datos: Nombre, Número de horas trabajadas y la Cuota que se le paga por hora trabajada. Cada quincena sc requiere emitir un cheque con los datos: nombre del empleado y sueldo que se le debe pagar. F.1 sueldo se calcula multiplicando horas trabajadas por cuota por hora. Resumiendo, desde la perspectiva de entrada-proceso-salida: Información que debe imprimir como salida: Nombre y Sueldo, Datos que se deben leer: Nombre, Horas trabajadas y Cuota por hora. Proceso a seguir; Calcular Sueldo=Horas trabajadas x Cuota por hora. 2) Identificar

objetas

Para identificar los objetos presentes en el dominio del problema, se debe estudiar el caso expuesto, con el propósito de distinguir y determinar el objeto o colección de objetos, que el programa debe representar v manejar; para solucionar la situación planteada. ¿Cómo se identifican los objetos? Se buscan los sustantivas presentes en la especificación; los sustantivos son los objetos. En nuestro problema se menciona un sustantivo, las empleados. Aplicando esto en el problema formulado líneas antes; tenemos que nuestro programa debe representar una colección de empleados tomo la que se muestra en La siguiente figura: objetoEmpleado

objetoEmpleado

Nombre Juan

Nombre Mateo

Horas trabajadas 40

Horas trabajadas 45

Horas trabajadas 55

Cuota por hora so.ao

Cuota por hora too.uo

Cuota por hora 80.ou

Sueldo

Sueldo 4500,00

Sueldo 4400.00

2000.00


Pr.r.rrOC,On orle hada a °Netos traerla° e. negrame de das. 245

Se muestra a colección de empleados que debe representar el programa, es decir, a un objetoEmpleado que es el empleado Juan, a otro objetoEmpleado que es el empleado Pedro, y a otro empleado, y a otro, hasta el último objetoEmpleado presente, que es el empleado Mateo. Asi, tenemos una colección de objetos iguales, es decir, se tiene un conjunto de empleados; donde cada empleado es un objeto que tiene la misma estructura de datos, y tiene el mismo comportamiento que todos los demás objetos (empleados). Nota: 1 °osen,e que se esta utilizando un rectángulo redondeado para representar a cada objeto.

1

Nota 2: la este momento se está esquematizando cada objeto desde el punto de vista de su estructura, es decir, de los datos que io representan; en puntos subsiguientes se explicará como involucrar las

10.2 Clases y su relación con los objetos La clase es una representación abstracta que describe a un conjunto de objetos; en otras palabras. es un tipo de dato abstracto que representa a un conjunto de objetos que tienen en común una misma estructura (de datos) y un mismo comportamiento (las mismas funciones), es decir, son la misma cosa y hacen lo mismo. En la fase de diseño del programa, el elemento central es la clase: porque un conjunto de objetos Iguales, debe ser representado en forma abstracta por una clase, que fungirá como una plumilla o molde, para crear todos y cada uno de los objetos necesarios. En el entorno del proceso de programación sigue el paso: a) Diseño del programa Para diseñarel programa, se elabora o diseña el algoritmo que sol uciona el problema. en das pasos: primero, se diseña el diagrama de clases; segundo, se diseña la lógica de las clases en pseudocodigo: después se hace la prueba de escritorio. En este capitulo se explica cómo diseñar el diagrama de clases. 10.2.1 Determinar las clases Una vea identificados los objetos del problema, se procede a diseñar el diagrama de clases, para lo cual primero debemos determinar la(s) clase(s) que necesitaremos, y luego dibujar el diagrama con la representación de la(s) clase(s) y sus instancias. las objetos identificados en el punto anterior se convierten en clases, que como ya se mencionó. son la representación abstracta de un conjunto de objetos; aplicando este concepto al problema que nos ocupa —el cual tiene un conjunto de objetos de empleados-


PrograrnanOn orientada a objetos usando el dtegrarne de ciases 245

81~ See"Mección de empleados que debe representar el programa. es decir, a un tdnetoEmpleado que es el empleado Juan, a otro objetoEmpleado que es el empleado Pedro, y a otro empleado, y a otro, hasta el último objetoEmpleado presente, que es el empleado Mateo. Así, tenemos una colección de objetos iguales. es decir, se tiene un conjunto de empleados; donde cada empleado es un objeto que tiene la misma estructura de datos, y tiene el mismo comportamiento que todos los demás objetos (empleados). Nota: 1 Observe que se esta utilizando un rectángulo redondeado para representar a cada objeto.

Nota 2: En este momento se está esquerneuzanclo cada objeto desde el punto de vista de su estructura. es decir, de tos datos que lo representan. en puntos subsiguientes se explicará cómo Involucrar los métodos

10.2 Clases y su relación can los objetos La clase es una representación abstracta que describe a un conjunto de objetos; en otras palabras, es un tipo de dato abstracto que representa a un conjunto de objetas que tienen en común una misma estructura (de datos) y un mismo comportamiento (las mismas funciones), es decir. son la misma cosa y hacen lo mismo. En la fase de diseño del programa, el elemento central es la clase; porque un conjunto de objetos iguales, debe ser representado en forma abstracta por una clase, que fungirá como una plantilla o molde. para crear todos y cada uno de los objetos necesarios. En el entorno del proceso de programación sigue el paso: 3) Diseño del programa Para diseñar el programa. se elabora o diseña el algoritmo que soluciona el problema, en dos pasos: primero, se diseña el diagrama de clases; segundo, se diseña la lógica de las clases en pseudocódigo; después se hace la prueba de escritorio, En este capitulo se explica cómo diseñar el diagrama de clases.

10.2.1 Determinar las clases Ena vez identificados los objetos del problema, se procede a diseñar el diagrama de clases, para lo cual primero debemos determinar la(s) clase(s) que necesitaremos, y luego dibujar el diagrama con la representación de la(s) clase(s) y sus instancias. Los objetos identificados en el punto anterior se convierten en clases, que como ya se mencionó, son la representación abstracta de un conjunto de objetos: aplicando este concepto al problema que nos ocupa -el cual tiene un conjunto de objetos de empleados-


24E Meradaiogra ae la Prini-arnacion Guantada a Galana

tenemos que dicha colección se representa como clase, mediante e] sinibalo que se india en la siguiente figura.

Ahlweáln: Una cf se: se representa con un rectángulo. En nuestro ejemplo estamos representando i clase Empleado. ¶0.2.2 Representación de la clase y BLI e instancias En el programa que habremos de elaborar, debemos definir una clase como un nuevo ti p de datos abstracto, y en base a la referida clase, vamos a generar instancias u ocurrencia especificas de dicha clase, rada una de estas instancias son los objetos que representará, a cada uno de las empleadas presentes en nuestra aplicación; la relación entre una clase• sus instancias se representa corno ir muestra en la siguiente figura.

objetoFniplea do

objetoEmpleado

Nombre Juan

Nombre Pedro

Nombre Mateo

Horas trabajadas

Horas trabajadas

Horas trabajadas

45

55

Cuota por hora 50..ou

Cuota por hora

Cuota por hora So.00

Sueldo 2000.00

Sueldo 45(10.41(1

110 .(X)

Suelde 44001 .00


298 Mumaologin de le Programacion Onentede a aneo. (getters) los valores de los datos para utilizarlos, ya sea para hacer cálculos o par darles salida. ¿Cómo identificar los métodos? Se buscan los verbos presentes en el planteamient del problema. en nuestro caso se debe. Imprimir como salida: Nombre y Sueldo. Leer los datos: Nombre, lloras trabajadas y Cuota por hora. Calcular el sueldo; Sueldo.Horas trabajadas a Cuota por hora. Tipicamente, para establecer los valores para cada uno de las datos de un objeto. sr requiere definir y diseñar un método perteneciente al objeto que permita colocar (setter el valor a cada dato; ya sea que lo lea o que lo calcule. Asimismo, para dar salida al valor de un dato, se requiere definir y diseñar un método que permita acceder (getter) al valor del dato para darlo como salida, esto es, un método para obtener cada dato. Como muchos aspectos de la programación orientada a objetos, la encapsulación de datos es una disciplina que se debe respetar siempre. Para establecer u obtener los datos de un objeto, se debe hacer mediante métodos del mismo objeto, y no leerlos o accederlos directamente.

Ene problema de calcular el sueldo de varios empleados, tenemos que cada objeto de empleado se representa mediante las datos: nombreEmp Nombre del empleado

n o ca sTr ab Número de horas trabajadas cuotaHora Cuota por hora Sueldo del empleado sueldo Para cada dato se debe definir un método para establecer o colocar (setter) el valor que tomará, ya sea que lo tome a través de leer el dato, bancada cálculos, o de otra forma. Y, otro método que permita obtener o acceder (getter) al valor para utilizarlo, ya sea para hacer cálculos, para imprimirlo o hacer otra cosa con él. i nuestro problema, se requieren los siguientes métodos: establecerNombreEmp( 1. Para leer (entrada) el valor del dato nombreEmp. establecerHorasTrab( 1 . Para leer (entrada) el valor del dato horasTrab. establecerCuotaHoral) . Para leer (entrada) el valor del dato cuotaHora. calcularSueldo( . Para calcular y establecer el valor del dato sueldo. obtenerNombreEmp Para acceder e imprimir el valor del dato nombreEmp. obtenerSueldo 1 1 . Para accedere imprimir el valor del dato sueldo. játita: Observe que los ~iodos setter inician su nombre con establecer o calcutar. Y F05 métodos getter iniclancon obtener_Asimisrn9obsersequeno pasa todos los datos sedefineun método getter; en este caso sólo se definieron para los datos que se van a Imprimir coma salida; nombreEmp y sueldo; IMM~.10.■1~■ 1.1

1~=100

.■••■■•■-


ProgrOrnaCKIn onentada Quietas e uSrIcGO e neocarrá Ce ciases 249

10.4 Diseño del diagrama de clases Una vez que se tienen definidos los datos v los métodos necesarios, se procede a diseñar la estructura de la clase, que al mismo tiempo se convierte en el diagrama de clases: se hace con el siguiente formato:

NombreClase - datos

- dato2 - dato3 - dataN - método-)l) - método2( ) - metodo3( ) - rnetodoN( Donde: NombreClase datol, dato2, dato3, datoN métodol(), metodo2(), método3(), métodoN0

O

Indica el nombre de la clase. Son los datos que representarán a cada uno de los objetos de la clase. San los métodos que establecerán y obtendrán los valores de los datos de cada uno de los objetos de esta clase. Indica que es un método. Modificador de acceso (visibilidad).

10.4.1 Modificadores de acceso (visibilidad) Con los símbolos - * ' se indica la visibilidad que tendrá cada dato o método, a éstos se les conoce como modificadores de acceso: Privado (-), Protegido (*), Público (e), Estático (__) y Abstracto('). Esto quiere decir, desde qué partes son visibles para ser utilizados.

10.4.1.1 Visibilidad de los datos -Privado (Private) Los datos que se declaran como privados, sólo pueden ser vistos y utilizados por métodos de la misma clase. Por defecto (default) los datos son privados. e Protegido (Protected] Los dalos que se declaran como protegidos, pueden ser vistos y utilizados por métodos de la misma clase y por métodos de subclases derivadas de la clase donde están declarados.


250 kleunkaagoa de la ProgramacAn Orientada a Laaerns

s Público fPublic) Los datos que se declaran como públicos, pueden ser vistos y utilizados tanto por mem de la misma clase, como por métodos de otras clases, _ Estático [Static) Los datos que se declaran como estáticos, son únicos para toda la clase; es decir, no I tenecen a ninguna instancia (objeto) de la clase, pero pueden ser vistos y utilizadas todas las instancias de la clase. 10.4.1.2 Visibilidad de los métodos - Privado (Privase] Los métodos que se declaran como privados, sólo pueden ser vistos y utilizados por mei dos de la misma clase. # Protegido [Protected] Los métodos que se declaran como protegidos, pueden ser vistos v utilizados por met dos de la misma clase y por métodos de subclases derivadas de la clase donde está declarados. ▪ Público [Public] Los métodos que se declaran como públicos, pueden ser vistos y utilizados tanto po métodos de la misma clase, como por métodos de otras clases. Por defecto (default) le métodos son públicos. _ Estático (Stade) Los métodos que se declaran como estáticos, son únicos para toda la clase; es decir, n pertenecen a ninguna instancia (objeto) de la clase, pero pueden ser vistos y utilizados po métodos de todas las instancias de la clase. ' Abstracto /Abstract] Los métodos que se declaran como abstractos, no timen implementación; par tanto deben ser implementados en subclases.


252 Metodologia rae le Programmon Oriaataaa a 96».1.. Aplicando el formato en nuestro ejemplo, nos queda el siguiente diagrama de clases. Empleado n omb reEmp horasTrab cuotaHora sueldo estableCerNombreEmp (j establecerHorasTrab( ) establecerCuotaHore( calcularSueldo( ) obtenertdombreEmp( obtenerSueldo( )

Se tiene e iagrama de clases, el cual consta de una clase, Nombre de la clase: Empleado Datos que tiene la clase: nomb re Emp Nombre del empleado Número de horas trabajadas 110 rasTrab Cuota por hora cuotaHora Sueldo del empleado sueldo Métodos que tiene la clase: establecerNombreEmp( ) . Para leer (entrada) el valor del dato nombreEmp. establecerHo rasTra b ( . Para leer (entrada) el valor del dato horasTrab. ra 1 . Para leer (entrada) el valor del dato cuotal-lora. esta blecerCuot Para calcular s establecer el valor del dato sueldo. calcularSueldo( Para acceder e imprimir el valor del dato nornbreEmp. obt e nerNombreEmp( ) . Para acceder e imprimir el valor del dato sueldo. obtenerSueldo( ) 10.5 Generar instancias de una clase Una vez que tenemos definida una clase como Empleado, ésta se utiliza para generar instancias u ocurrencias; estas instancias son los objetos, que darán vida al funcionamiento de nuestro programa. Esto quiere decir que la clase es como un molde, una plantilla tipo de dato, que se utiliza para generar objetos específicos, en la siguiente figura se e,quematim.


Programando onenrada e °Netos usando el diegnene de ciases 253

Emplead o nombre Emp horasTrab cuotaHora sueldo est ab lec e rHomb re Em p{ ) establecerHora$Trab ) establecerCuotaHora calcularSueldo ( obtenerkombreEmp(1 ObtenerSueld0( )

objetoEmpleado

obietoEmpleadu

nom b reEnip Juan

nombreErnp Mateo

hurasTrab 40

horasTrab 55

cuoteHora 50.00

cuotaliora

sueldo

sueldo

2000.00

440(1..00

e sta blec e rNombreEmp ( 1 establecerHorasTrab( ) establecerCuotahora { ) calcula rSueldo ( ) obtenerNombreEep I 1 ObtenerSueldo( I

es tablecerNombreEmp( establecerHorasTrab ) est ab le ce r Cuot ra ( ) calcularSueldo()) j obtene rtJambreEmp ( 1 obtenerSueldo( )

ce E:c»11....... Se tiene la clase Empleado, de la cual se genera una instancia, que es el objetoEmpleado que representa al empleado Juan, y así sucesivamente, hasta generar la instancia que es el objetoEmpleado que representa al empleado Mateo.


254 Metndulogia de la Prograrnac■On Cremada a Objetos

Observe que cada objetoEmpleado que se crea de la clase Empleado tendrá los datos: nombreEmp hora$Trab cuotaHora sueldo Y también tendrá los métodos: est ablecerNombreEmp ( ) establecerHorasTrab() est ablecerCuotaHora ) calcula rSueldo ( ) obtenerNombreEmp ( ) obtenerSueldo(

Nota: La ósea indica que hay una relación "instancia de" u "objeto det por ejemplo. que Juan es una instando. abeto u ocurrencia de la clase Empleado. lo mismo Mateo, etcétera.

10.6 Arquitectura modelo-vista-controlador El diagrama de ClaSeS que se ha diseñado es lu que constituye el modelo de nuestro programa, sin embargo, este modelo necesita ser utilizado en la solución del problema, y para hacerlo se requiere aplicar la arquitectura modelo-vista-controlador; la cual establece que un programa orientado a objetos está formado por tres partes: 1) El modelo. Es la clase o conjunto de clases identificadas en el dominio del problema, mismas que representan el objeto u objetos presentes en el problema. 2) La vista. Es la interfaz de usuario; es decir, toque el usuario observara en la pantalla, impresora u otro dispositivo de salida de la computadora al operar el programa. 3) El controlador. Es la parte que permite que el usuario interactúe con la vista para utilizar el modelo que representa y soluciona el problema. En programas complejos la arquitectura modelo• vis-ta-controlador se ve así:

.neut Conm rola ovdor ama

.i

Mrdakl t>

-1

Donde la parte controlador es la que lleva el control del funcionamiento del programa. auxiliándose de la parte vista que seguramente es una sofisticada interfaz gráfica de Usuario; y ele la parte modelo que es la parte que representa y soluciona el problema.


PrograrmamOn ensotada a 17113i2LDS usando el diagrama de ciases 255

Nota: La flecha punteada representa una relación de dependencia en el Sentido de que la clase Controlador utiliza a la clase Mede o y a la clase Vista.

Sin embargo, en programas no muy complejos o que la vista es sencilla, la parte controlador incluye a la parte vista; y la arquitectura del programa se simplifica a dos partes, la cual se ve así:

Esta arquitectura es la que se utiliza en los problemas que se plantean en este libro, debido a que está dirigido a un nivel donde todavia no se enfrentan problemas muy complejos. Aplicando esta arquitectura al problema que hemos venido diseñando; el diagrama de clases nos queda de la forma siguiente: Empleado nombreEmp norasTrab cuotallora sueldo

7=7=i

establocerNombreEmp(1 establece MoresTrab() establecerCuotaHOra1 ealcularSueldO( ) obtenerNambreEmpl 1 obtenerSueldo 1)

xpiicacian: Este diagrama consta de dos clases: una es Empleado que es el modelo que representa y soluciona el problema planteado. La otra es EjecutaEmpleado que es la clase controlador, que utiliza el modelo que es la clase Empleado, para controlar la interacción CCM el usuario y permite que e] programa sea operado por el usuario para resolver su problema. Nota 1: A diferencia de todos los demás capitules de este libro, en ene no se presentan problemas resueltas ni problemas por resolver, debido a que la aplicación del diseño de diagramas de clases se liara conjuntamente con tos ternas que siguen, para ad complementar la metodología de diseño de algoritmos orientados a objetos.


256 Metodología se la ProgremacOn arremeda a Usases

Note 2: Las problemas que se plantean en los capitulo% 11, 13. 13 y 14: serán solucionados con un diagrama de clases similar al presentado en este punto. Sin embargo, en los capítulos 15 y 16, donde se tratan . las temas de herencia y polimorfnmo, es donde se estudia cómo diseno. el diagrama de ciases involucrando mas clases,

¿Qué hemos hecha hasta ahora? En este capítulo se han explicado los conceptos básicos de la programación orientada a objetos, y se ha planteado la forma de involucrarlos para diseñar el diagrama de clases, el cual contiene la estructura general del programa (algoritmo) que estamos diseñando; esto es, las clases necesarias para resolver el problema. Para diseñar programa% (algoritmos) aplicando la metodología de la programación orientada a objetos que se está presentando, se deben diseñar dos elementos; uno es el diagrama de clases: el otro elemento es lo que se explica a continuación. ¿Qué sigue? ID que sigue es disertar la lógica de cada una de las clases que integran el diagrama de clases, utilizando la tknica pseudoeodigo; para asi tener completa la metodología de diseño de programas (algoritmos) orientados a objetos. En el siguiente capitulo se explica cómo hacerlo.

Resumen del capitulo Conceptos que debe dominar

1Objetos 3 Clases 3 Métodos 3 Eneapsulación 1 Diagrama de clases 1 Modificadores de acceso 1 Arquitectura modelo-vista-controlador


Programación mentada e plateara aplicando le estructura de eamernacion 258

Diagrama de clases Empleado5 nOmbreEtnp 50 re ST r ab

cuotaHora sueldo

EjecutaEmpleado5

establecerNombreEmp{ ) eStablecerHorasTrab( establecerCuotaHora( ) calcularSueldo( ) obtenerNombreEmp( ) obtenerSueldo( )

Este 11. lagrama consta de dos clases: Una es la clase Empleados que es el modelo que representa y soluciona el problema planteado, la cual esta formada por: Los datos:

nombreEnp horaSTrab

cuotaHora sueldo

Nombre del empleado Número de horas trabajadas Cuota por hora Sueldo del empleado

Y los métodos:

establecerNombreEmp ) . Para leer (entrada) el valor del dato nombreF.top. Para leer (entrada) el valor del dato borasTrab. establece riiorasTrab establecerCuotaHora() . Para leer (entrada) el valor del dato cuotaIl o ni. calcularSueldol . Para calcular y establecer el valor del dato sueldo. obtenerNambreEmp( ) Para acceder e imprimir el valor del dato nombreDnp. obtenerSueldo( ) . Para acceder e imprimir el valor del dato sueldo. La otra es la clase EjecutaEmpleados, que ea la clase controlador, la cual utiliza el modelo, que es la clase Empleados, para controlar la interacción con el usuario representando y resolviendo su problema. Segundo Se diseña la lógica de cada una de las clases usando pseudo-código; para armar el algoritmo que resuelve el problema. A continuación se explica cómo elaborar el algoritmo de la solución:


280

Memnoiogsa de la Programación Onentade a Objetos

11.2 Diseño de algoritmos 00 usando la secuenciación en pseudocódigo En este punto se explica cómo diseñar el algoritmo orientado a objetos usando pseudo° digo. Cuando se tiene más de una clase el formato del algoritmo es el siguiente:

Algoritmo ALGO Clase NomClase1 1. Declaraciones Datos Objetos Variables 2. Método funcionUno a. Acción a b. Acción b c. Fin Método funcionUno 3. Método funcionN a. Acción a b. Acción b c. Fin Método funcionN Fin Clase NomClasel Clase NomClase2 1. Declaraciones 2. Método funcionUno a. Acción a b. Fin Metodo funcionUno 3. Método funcionN a. Acción a b. Fin Método funcionN Fin Clase NomClase2 Clase NomCleseN 1. Declaraciones 2. Método principal a. Acción a b. Fin Método principal 3. Matado funcionUno a. Acción a b. Fin Método funcionUno


Programeeide orientada a oblatas aplicando Je estrucerre de sacueneleuen 2S1

Método funcionN a. Acción a b. Fin Método funcionN Fin Clase NomClaseN Fin 4.

...• . tiene1 e esquema 11 de un algoritmo que tiene tres clases, puede haber más clases, cada clase tiene su parte de declaraciones donde se declaran los datos; y enseguida, los métodos que necesite; aclarando que en un algoritmo que tiene varias clases, solo en una clase se puede tener Método principal, ya que es ahí donde el programa inicia su funcionamiento; y en el momento en que lo requiera utilizará las otras clases v métodos. No obstante que ti ri algoritmo puede estar formado por varias o amebas clases, en esta parte de la metodología (capítulos ti., u, rd y 14), estaremos utilizando dos ciases; Cato es, la clase modelo). la clase controlador, donde la elll.se controlador incluye a la parte

Se21

vista.

Aplicando este formato en nuestro ejemplo: I amando como base el diagrama de clases diseñado en el punto anterior, donde se tienen dos clases; la clase Empleados y la clase PjeetttaEmpleados. Ahora se procederá a diseñar la lógica de cada una de las clases usando pseudocodigo, quedando el siguiente algoritmo:

Algoritmo CALCULAR SUELDO DE UN EMPLEADO Clase Empleed05 1. Declaraciones Datos nombreEmpl Cadena horasTrab: Entero cuotallora: Real sueldo: Real 2. Método eStablecerNombreEmp(nom: Cadena)

a. nOmhreEmp = nom h. Fin Método estahlecerNombreEmp 3. Método eStableOerMOraSTrab(horasTr: Entero) a. horasTrab hOrasTr b. Fin Método eStableCerflOraSTrab 4. Método estábleOerCuotablora(OuotaHri Real) a. cuOtafOra = eoOtSHr h. Fin Método eatableeerCuOtaHOra 5. Método calcularSueldo() a. sueldo , horasTrah • cuotahora b. Fin Método calcularSueldn


262 Motadologia de la Progremouár,Orscrldde e 131111[05

6. Método ebtenerNombreEmp(): Cadena a. return nombreEmp e. Fin Método obtenerNembreEmp 7. Método obtener5ueldo(1: Real a. return Suelde b. Fin Método ObtenerSuelda Fin Clase Empleade5 Clase EjeCutaEmpleado5 s. Método principal a. Declaraciones Variables nomEmp: Cadena nrsTra: Entero cuolir: Real b. Declarar, crear e iniciar objeto Empleados objEmpleado = new Empleado6() c. Solicitar Nombre, número de horas trabajadas y cuota por hora d. Leer nomEmp, hrsTra, cuohlr e. Establecer oblEmpleado.eStablecerNombreEmp(nemEmp) objEmpleado.eStablecerHeresTrabOrsTral objEmpleado,establecerCuotallora/cuobrj f. Calcular objEmpleado,calcularSuelde() g. Imprimir ObjEmpleado.pbtenerNombreEmp() obj6mpleado.ebtenerSueldo() h. Fin Método principal Fin Clase EjecutaEmpleado5 Fin

Se {teme enea WridelWgorinno Algoritmo CALCULAR SUELDO DE UN EMPLEADO El cual tiene dos clases: Empleadoy y EjecutaEmpleados

Clase Empleados inicia Empleado5, que es la clase modelo que representa al objeto empleado que asi presente en este problema; la cual está formada por la parte de declaraciones y seis nu todos:

1. Declaraciones Datos


Pi-agrama., anotada a atieses aparcando la estructure de secuanc,aeián 203

nombreEmp: Cadena horasTrab: Entero cuotaHora: Real sueldo: Real Este paso permite declarar los datos o atributos que representan al objeto empleado, que se creará a partir de esta clase; es decir, los datos: Nombre del empleado, número de horas trabajadas, cuota que se le paga por hora trabajada y sueldo. 2. Método establecerNombreEmp(nom: Cadena) a. nombreEmp = nom h. Fin Método establecerNombreEmp Este paso es un método (setter) que permite establecer o colocar el valor correspondiente al dato nombreEmp (nombre del empleado). Observe que nom es un parámetro que recibe el valor que se le envía desde donde se llama a este método; y el valor que recibe, lo coloca en el dato nombreEmp. 3. Método establecerHorastrab(horasTr: Entero) a. horasTrab = horasTr b. Fin Método establecerhorasTrab Este paso es un método (setter) que permite establecer o colocar el valor correspondiente al dato horasTrab (número de horas trabajadas). Observe que horasTr es un parámetro que recibe el valor que se le envía desde donde se llama a este método: y el valor que recibe, lo coloca en el dato horasTrab. 4. Método establecerCuotaHora{cuotaHr: Real) a. cuotaHora = cuotaHr b. Fin Método establecerCuotaHora Este paso es un método (selle rlquepenniteestablecero coloearel valoreorrespondiente al dato cuotaHora (cuota por hora). Observe que cuotaHr es un parámetro que recibe el valor que se le envía desde donde se llama a este método; y el valor que recibe, lo coloca en el dato cuotaHora. 5. Método calcularSueldo() a. sueldo = horasTrab * cuotaHora b. Fin Método calcularSueldo Este paso es un método (setter) que permite establecer o colocar el valor correspondiente al dato sueldo. Observe que se multiplica el valor del dato horasTrab por el valor del dato cuotaHora y el valor resultante se coloca en el dato sueldo. 6. Método obtenerNombreEmpl): Cadena a. return nombreEmp b. Fin Método obtenerNombreEmp


264

~Godo de Id Programacain &testada e Oblotos Este paso es un método Igetter) que permite acceder el valor del dato nombreEmp

Observe que lo único que hace es retornar (retura el valor del dato nombreErrip, al punto desde donde se llama a este método. Cadena es el tipo de dato del valor que regresa.

7. Método obtenerSueldol ): Real a. return sueldo b. Fin Método obtenerSueldo

Este pasees un método (setter) que permite acceder el valor del dato sueldo. Observe que lo único que hace es retornar (rMura el valor del dato sueldo, al punto desde donde se llama a este método. Real es el tipo de dato del valor que regresa. Fin Clase Empleado5 Indica el fin de la clase Empleado5. Clase EjecutaEmpleado5

Inicia EjecutaEmpleados, que es la clase controlador que utiliza a la clase Empleado5, para controlar la interacción con el usuario y permite que el programa sea operado por el usuario para resolver su problema. No obstante que puede tener más métodos, en problemas con la magnitud que enfrentaremos en este libro, sólo tiene el método principal, que a continuación se explica: 1. Método principal Es el encabezado del método principal e indica el inicio del mismo. a. Declaraciones

Indica que se hacen declaraciones. Variables numEmp: Cadena hrsTra: Entero cuoHr: Real

Se declaran las variables necesarias para implementar la lógica del algoritmo, en este caso sólo se declaran variables para leer cada uno de los datos a los que hay que dar entrada. Estas son variables estáticas que se almacenan en el segmento de datos de la memoria; son como las variables normales que se usan en la programación tradicional o estructurada. nomEmp hrsTra

cuoHr

Para leer el nombre del empleado. Para leer el número de horas trabajadas. Para leer la cuota por hora.

b. Declarar, crear e iniciar objeto

Indica que se decienta, se genera(o) e inician) objeto(s): en este caso se crea un solo objeto: Empleado5 objEmpleado

new Empleado5()


288 macadaaagia Se le Programada., Orientado a Natas

• Sr'r eraTroleto objEmpleado tomando como base la clase Empleado5, el objeto ci cado en la memoria dinámica (Heap) tiene dos elementos. Un elemento son los datos que lo representan; nombreEmp, que se inicia en nulo; horasTrab, que se inicia en cero; cm- tal-lora, que se inicia en cero y sueldo, que se inicia en cero. El otro elemento son las métodos: establecerNombreEmpO, es-tablecerliorasTrabo, esLablecerCuotall oral). calcularSueldo0, obtenerNombreErap() y obtenerSueldo()) los cuales permiten acceder a las datos del objeto. ya sea para establecer o para obtener valores. En la memoria sucede lo siguiente: Los lenguajes de programación, dividen la memoria de la computadora en: Segmento de código (Code), segmento de datos (Data), segmento de pila (Stack) y segmento de variables dinámicas (Heap). En el segmento de código se almacenan las instrucciones del programa. En el segmento de datos se almacenan las variables estáticas, son las variables normales que se usan en la programación tradicional o estructurada. En el segmento de pila (Stack) se al. macenan los datos temporales. Yen el segmento de variables dinámicas (Heap); es donde se almacenan los objetos. Nuestro ejemplo, en la memoria se representa así: Stack objEmpleado k EEF.E

Heap A LEEEE nombreEmp 1

I

horasTrab 10 cuotaHora 10.00

I

sueldo 10.00

1

E

establecerkombreEmp(I

( establecerHorasTrab (1 establecerCuotaHoral) ( calcularSueldo( )

( obtenerNninbreEmp( 1 ( obtenerSuelt1o( )


1e4911=3

Programación oneniatla a Obf CLOS aplicando la estructura de socuenclacIón 287

se crea una referencia (objEmpleado) a una dirección (AIEEEE) en el Heap En que es donde se asigna espacio para alojar el objeto creado; el cual tiene los datos que lo representan y los métodos que permiten acceder a los datos para establecerlos u obtenerlos. c. Solicitar Nombre, número de horas trabajadas y cuota por hora d. Leer nomEmp, hrsTra, cuoHr

Se solicita el nombre del empleado y se lee el valor tecleado en nomEmp. Se solicita el número de horas trabajadas v se lee el valor tecleado en hrsTra. Se solicita la cuota par hora y se lee el valor tecleado en cuolir. Vamos a suponer que se le dio entrada a los siguientes valores: nomEmp Socorro Román Maldonado hraTra

40

cuoHr

100.00

e. Establecer objEmpleado.establecerNombreEmp(nomEmp) objEmpleado.establecerHorasTrab(hrsTra) oblEmpleado.establecerCuotaHora(cuokr)

En este paso se procede a colocar los valores leidos en los datos del objeto, a continuación se explica cada acción: obj Empleado. establecerNombreEmp ( nomEmp) Se llama al método establecerNombre Enap del objeto objEmpleado, enviando como parámetro nomEmp; es decir, que el valor de nomEmp que es Socorro Román nado, se envio al método establecerNombreEmp, donde se tiene el parámetro nom que recibe este valor que se le envía desde aqui, y lo coloca en el dato nomhrelimp. Observe que nomEmp es una variable que reside en el segmento de datos de la memoria, y norabreEmp reside en el objeto que a su vez reside en la memoria dinámica (Ileap). objEmpleado.establecerHorasTrab(hrsTra)

Se llama al método establecerHorasTrah del objeto objEmpleado, enriando como parámetro hrsTra: es decir, que el valor de hrsTra que es 40, se envía al método establecerHorasTrab, donde: Se tiene el parámetro horasTr que recibe este valor que se le envía desde aqui; y lo coloca en el dato horasTrab. Observe que hrsTra es una variable que reside en el segmento de datos de la memoria, y horasTrab reside en el objeto que a su vez reside en la memoria dinámica (Heap).


298 Metedelogle da lo PrOgreMación &Oleada a Oblar:N

nbiEmpleado.establecerCuctaHcra(cucHr) Se llama al método establecerCuotaHora del objeta objEmpleadn, enviando como parámetro cuipHr; es decir, que e] valor de cuo Hr que es tnn.nü, se envía al método establecerCuotaHora, donde se tiene el parámetro cuotaHr que recibe este valor que se le envía desde aquí; y lo coloca en el date cuotaHora. Observe que cuoH r es una variable que reside en el segmento de datos de la memoria, yruotaH ora reside en el objeto que a su vez reside es la memoria dinámica (Heap).

f, Calcular ob]Empleado.calcularSueldo[y Se llama al método elleultu-Sueldo del objeto objEmpleada, donde calcula el sueldo: Multiplicando e] valor del dato borasTrab por el valer del dato cuotaHora y el valor resultante 4000.00, lo coloca en el dato sueldo. Gráficamente el objeto nos queda corno se muestra en la siguiente figura: Y

cobjb.r . opleado nornbreFanp Socorro timan Maldonado borasTrab 40 cuotaHora 100.00 sueldo 4000.00

establecerW]mbreEmp() establecenorasTrabll establecerCuotaHorall calcularSueldol) DOtenerNombreEmp0 obtenerSuoldoU \ .., Es decir, que los datos del objeto tomaron valore% a través de los métodos del mismo objeto. Nuestro ejemplo, en la memoria ahora queda así:


ProprerreDen onanteda e alredub' eparendo le estructura da secuanciacen 209 Stock objEmpleado

Heap AtEEEE.

A-LEEI7K nombreEmp ¡Socorro Román Maldonado horasTrab 140 cuotaHora 1100.00 sueldo 14000.00

i I

establecerNombreEmp( ) establecerHorasTrab( ) establecerCuotaHora() ) CcalcularSueldo( 1

)

obtenerNombreEmp( ) ( obtenerSueldo()

Observe que los datos del objeto han tomado los valores que les fueron introducidos a través de los métodos correspondientes. g. Imprimir objEmpleado.obtenerNombreEmp( ) objEmpleado.obtenerSueldo( ) En este paso se procede a imprimir o dar salida a los valores de los datos del objeto, que se requirieron al plantear el problema; enseguida se explican: obj Empleado. obtenerNombreEmp( I Sella ma al método obtenerNombreEmpdel objeto objEmpleadoielcual.loque hace es acceder v retornar (return) el valor del dato nombreEmp, a este punto para imprimirlo. objEmpleado.obtenerSueldo() Se flama al método obtenerSueldo del objeto objEmpleado; el cual, lo que hace es acceder y retornar (return) el valor del dato sueldo, a este punto para imprimirlo. h. Fin Método principal


270 Mardtdainaia de la Pragrernateán Onernade a Objetos

Indica el fin del método principal. Fin Clase EjecutaEmpleado5 Indica el fin de la clase Ejecutarnapleados. Fin Indica el fin del algoritmo.

Resumiendo: En la ciase controlador Ejecu n'Empleados, en el método principal, es donde se implementa la secuencia de pasos lógica que controla la solución del problema: t. Se declaran variables normales (estáticas) para dar entrada a los datos. 2. Se declara, crea e inicializa el objeto empleado utilizando el modelo; la clase Empleados. En el objeto creado, están empaquetados o encapsulados juntos los datos y los métodos; los datos, que representan la estructura del objeto, solo pueden accederse a través de los métodos del mismo objeto. 3. Se solicitan los datos. 4. Se leen los datos en las variables declaradas en este método principal, luego se colocan en los datos del objeto a través de los métodos del mismo objeto: establecerNombreEmpt). establecerHorasTrab(), establecerCuotaHora(). 5. Se hace el cálculo del sueldo llamando al método calcularSueldo(l. h. Se Imprimen los datos de salida, accediendo a los datos del objeto a través de los métodos obtenerNombreErnp() y obtenerSueldo(). Esto es, se establece un proceso interactivn para que el usuario interactúe con la computadora para solucionar su problema: introduciendo los datos que se le solicitan y recibiendo los resultados a través de la parte vista, incluida en esta clase controlador. 11.3 Constructores y destructores Los lenguajes orientados a objetos como Java proporcionan por defecto (default) un método constructor y un método destructor para cada clase definida Constructor El método constructor es ejecutado con new y su función es asignar espacio y crear el objeto en la memoria dinámica (Heap). Asimismo, inicia los datos con los valores que se hayan asignado en la declaración; o bien, si no fueron iniciados con valores en la declaración, se inician con los valores por defecto (default): Los datos numéricos en ceros y los datos cadena (string) en nulos. El constructor tiene el mismo nombre que la clase pero con () al final. En el ejemplo del punto anterior la clase es Empleado y su constructor es Empleado().


Programación orientada a ottetos aplicando le estrvortwe de secuenosóan 271

Si en nuestro ejemplo quisiéramos iniciar los datos del objeto con valores especificos, necesitaríamos el método constructor: 2. Método Empleado( ) a. nombreEmp = "Maria" horesTrab = 40 cuotaHora = 100.00 sueldo = 4000.00 b. Fin Método Empleado Los datos se están iniciando con los valores especificados. Y la numeración de los dentón métodos se recorrería. Destructor

El método destructor hace lo contrario que e] constructor, es decir, libera el espacio ocupado por los objetos creados en la memoria dinámica. El destructor, por defecto (default), entra en acción cuando el objeto creado ya no tiene referencias, esto es, que ya no se utiliza. '111191:én Aunque los lenguajes orientados a objetos permiten dehnir el constructor y el destructor. y también permiten llamar al destructor, en risa libro emplearnos los conceptos por defecto f default),

explicadas en los párrafos anteriores.

11.4 Ejercicios resueltos En este punto se presentan ejercicios resueltos aplicando la metodología propuesta en el capitulo anterior y en ente, pero también se usan conceptos desarrollados en los primeros nueve capítulos; los problemas resueltos en este punto son algunos de los ejercicios resueltos del capitulo 3. Es decir, que el mismo problema ya lo resolvimos aplicando la lógica básica de la programación en el capitulo 3; y aqui lo estamos resolviendo aplicando la lógica de la programación orientada a objetos.

Nota: Ea pedidoras recordar que todo algoritmo onentado a objetos se elabora en dos pasos Po mero, se diserta el diagrama de clases. aplicando los lineamientos que se empbcaron en el

capitulo 50. Segundo, se diseno la lógica de cada una de las ciases usando paeudocódtgo. aplicando Los lineamientos que se explicaron en los puntos anteriores de este capitulo. Ejercicio 11.4.1

Elaborar un algoritmo que permita leer el tamaño de un ángulo en radianes, luego que calcule e imprima el seno y el coseno. A continuación se presenta el algoritmo de la solución:


272 Mucaologin an In Prograrmacton Dnentalla a Oblata:9

(Primero iaóyak, usted—después campare la solución)

Diagrama de clases Angulo5 TamAngulo senAng cosAng establecerTamAngulo{1 calcularSenAng( } calcuiarCosAng( obtenerSenAng() obtenerCosAng()

Algoritmo CALCULOS LOGARITM/COS DE ANGULO Clase Angulo5 1. Declaraciones Datos tamAngulo, senAng, cosAng: Real 2. Método establecerTamAngulo(ang: Real) a. tamAngulo = ang h. Fin Método establecerTamAngul0 3. Método calcularSenAng(1 a. senAng = Seno(tamAngulo) b. Fin Método calcularSenAng 4, Método calcularCosAngl) a. cosAng = CosenoltamAngulo) b. Fin Método calcularCosAng 5. Método obtenerSenAng(1: Real a. return senAng b. Fin Método obtenerSenAng S. Método obtenerCosAng1): Real a. return cosAng b. Fin Método obtenerCosAng Fin Clase Angulo5

E] ecutaAngulo5


Programación entintada a a:flema aplicando la estructura de sacuenevaesso 273 clase EjecutaAngulo5 1. Método principal a. Declaraciones Variables tamAng: Real b. Declarar, crear e iniciar objeto Angulo5 objAngulo = new Angulo5() c. Solicitar Tamaño del ángulo en radianes d. Leer tamAng e. Establecer objAngulo.establecerTamAngulo(tamAng) f. Calcular ub7Angulo.calcularSenAng() ob7Angulo.calcularCosAng() g. Imprimir objAngulo.obtenerSenAng(1 objAngulo.obtenerCosAng() h. Fin Método principal Fin Clase EjecutaAngulo5 Fin

.toww-díok a - -E a gont no tiene fi P dos clase-s; la Clase Angulos y la clase EjecutaAngulo3. En la Clase Angulo5: 1. Se declaran Ion datos que representan la estructura de la clase: tamAngulo para el tamaño del ángulo senAng para el seno cosAng para el coseno 2. Método establecerTamAngulo(ang: Real) Recibe en el parámetro ang el valor que luego coloca en el dato tamAngulo. 3. Método caleularSenAng() a. Calcula el seno de tamAngulo llamando ala función Seno(tamAngulo) 4. Método calcularCusAng() a. Calcula el coseno de tamAngulo llamando a la función Coseno(tamAngulul s. Método obtenerSenAng(): Real a. Retorna senAng (seno de tamAngulo) 6. Método obtenerCosAng(); Real a. Retorna cosAng (coseno de tamAngulo) FM de la Clase Angulo5 En la Clase EjecutaAngulo5; en el Método principal: a. Se declara: La variable tamAng para leer el tamaño del angula. b. Se declara el objeto objAngulo, usando como base a la clase Angulo5; dicho objeto se crea e inicializa mediante el constructor por defecto Angulo5(). c. Se solicita el tamaño del ángulo en radianes d. Se lee en tamAng


274 Metuuulogla de la Programación Orientada a Obvebas

e. Se llama al método establecerTamAngulo(tarnAng) del objeto objAngulo; par colocar el valor de tainAng en el dato tainAngulo. f. Se llama al método calen larSeriAng0 del objeto objAngulo; para calcular el sé del data tarnAngulo. Se llama al método calcularCosAng0 del objeto objAngulo; para calcular e] cose del dato tamAngu lo. g. Se llama al método ubteue rSenAng() del objeto objAngulo; para acceder e imprirri e] valor del dalo senAng. Se llama a] me todo obte,ierCosAng() del objeto objAnguin: para acceder e imprimí el valor del dalo cosAng h. Fin del Método principal Fin de la Clase EjecutaAngulo5 Fin del algoritmo En la siguiente figura se muestra cómo se ve el objeto en la memoria. Stack objAngulo A42CDI

1-leap A42CDi i."....-"Ar

tamAngule le .5

1

SenAng 10.47942553

1

cosAng J0.87758256

]

CestablecerfamAngulo{ ) ( calcularSenAng ( } E ealcularCosAng ( ).

3

( obtenerSenAngll

C

OIDtenerGosAng { 1

)

se crea una referencia objAngulo a la dirección A42CEn de] Heap, donde se Ene almacena el objeto creado; el cual tiene los datos y métodos que ya fueran explicados. Observe que los datas del objeto han tornado los valores que les fueron introducidos a través de los métodos correspondientes.


Programanan onenteda a ababas aplimmea Je estructure de satuencleción

275

Ejercicio 11.4.2 Elaborar un algoritmo para calcular el área de un triángulo. Se requiere imprimir como salida el área del triángulo. Los datos disponibles para leer como entrada son la base y la altura del triángulo. El área se calcula; Area - Base Altura A continuación se presenta el algoritmo de la solución. (Primero Isigulaustect....despnás compare la solución)

Diagrama de clases

AreaTriangulo2 baseTria alturaTria areaTria

EjecutaAreaTriangulo2

establecerBaSeTrla() establecerAlturaTria() calcularAreaTria() obtenerAreaTria()

Algoritmo AREA TRIANGULO Clase AreaTriangulo2 1. Declaraciones Datos baseTria: Real alturaTria; Real areaTria: Real 2. Método establecerBaseTria(base: Real)

a. baseTria = base b. Fin Matado establecerBaseTria 3, Método establecerAlturaTria(altura: Real) a. alturaTria = altura b. Fin Método establecerAlturaTria 4. Método calcularAreaTria() a. areaTria = (baseTria • alturaTria) / 2 b. Fin Método calcularAreaTria


on

Metodología de la Progratnac.on Orientada e noma

5. Método ObtenerAreaTria(): peal a. return areaTria h. lin método obtenorAreaTriS Fin Clase AreaTriangulo2 Clase EjecutaAreaTriangulo2 1. Método principal a. Declaraciones Variables basTri, altuTri: Real O. Declarar, crear e iniciar objeto AreaTriangulo2 objTriangulo = new AreaTriengu1O21) o. Solicitar Base y Altura d. Leer basTri, altuTri e. Establecer objTriangulo.establecerBaseTrialbasTri} objTriangulo.establecerAlturaTria(altuTri) f. Calcular objTriangulo.calcularAreaTria(1 g. Imprimir objTriangulo.obtenerAreaTriall h. Fin Método principal Fin Clase EjecutaAreaTriangulo2 Fin

111

0

a go# ene o dos clases; la Clase AreaTriangulo2 y la clase FáceutaAseaTriangulo2. En la Clase AreaTriangulo2: 1.Se declaran los datos que representan la estructura dt!le clase: baseTria para la base del triángulo alturaTria para la altura del triángulo areaTria para el área del triángulo 2.Método establecerBaseTria(base: Real) Recibe en el parámetro base el valor que luego coloca en el dato baseTria. 3. Método establererAlturaTriatallura: Rea]) Recibe en el parámetro altura el valor que luego coloca en el dato alturaTria 4 Método cal cularAreaTriaü Calcula el área del triángulo 5. Método obtenerAreaTria0: Real Retorna areaTria (área de] triángulo) Fin de la Clase AreaTriangulo2 En la Clase EjecutaAreaTriangulo2; en e] Método principal: a. Se declara; La variable basTri para leerla base del triángulo. La variable altuTri pesa leer ta altura del triángulo.


Prdirarnaaan enancada e obtiaLini aplicandó le eakinxtbra de secuenciacidn 277

b. Se declara el objeto objTriangulo, usa cojo como base ala clase AreaTriangu los; dicho objeto se crea e in Halita mediante el eonstrucior por defecto AreaTriangulo20. e. Sr. solicita la base y la altura d. Se leen en basTri y. al tuTri e. Se llama al método esiablecerBaseTria(basTri) del objeto objTriangula: para colocar el valor de basTri en el dato baseTria. Se llama al método establc-ecrAlturaTria(altuTri) del objeto objTriangulo; para colocar el valor de al tuTri en el dato alturaTria. f. Se llama al método calcularAreaTriap del objeto objTriangulo.: para calcular el área del triángulo. g. Se llama al método obtenerAreal'iia0 del objeto objTrianguloi para acceder e imprimir e] valor del dato areaTria. h. Fin del Método principal FM de la Clase EjecuteArea"Triangulaa Fin del algoritmo

Ejercicio 11.4.3 Elaborar un algoritmo para calcular el promedio de calificaciones de un estudiante. Los datos disponibles para lectura son el nombre. calificación 5, calificación 2, calificación 3 y calificación 4, de cada uno de los cuatro exámenes presentados. La información que se debe imprimir es el Nombre y el promedio de las calificaciones. El promedio se obtiene sumando las cuatro calificaciones y dividiendo la suma entre 4. A continuación se presenta el algoritmo de la solución-. (Primero hágalo usted....después campare Si solución)

Diagrama de clases A 1 amo3

nembreAlum califl calif2 calif3 calif4 promedio establecerNombreAlem() establecerCalif10 establecerCalif20 establecerCalif30 establecerealif40 calcularPromedlo() DbtenerNombreAlumu nbtenerPrcmedio()

EjecutaAlunino3


278 Metodologie de In ProgrameGion Onentade e GIJOSOS

Algoritmo CALIFICACION ALUMNO Clase Alumno3 1. Declaraciones Datos nombreAlum: Cadena calif1: Real calif2: Real calif3: Real Canté: Real promedio: Real 2. Método establecerNombreAlum(nom: Cadena) a. nombreAlum - nom b. Fin Método establecerNombreAlum 3. Método establecerCalifl(cal: Real) a. califl = cal b. Fin Método establecerCalifl 4. Método establecerCalif2(ca2: Real) a. calif2 = ca2 b. Fin Método establecerCalif2 5. Método establecerCalif3(ca3: Real) a. calif3 = ca3 b. Fin Método establecerCalif3 6. Método establecerCalif4(ca4: Real) a. calif4 = ca4 b. Fin Método establecerCalif4 7. Método calcularPromedid() a. promedio = (califl + calif2 + calif3 + calif4)/4 b. Fin Método calcularPromedid 8. Método obtenerNombreAlum(): Cadena a. return nombreAlum b. Fin Método obtenerNombreAlum 9. Método obtenerPromedio(): Real a. return promedio b. Fin Método obtenerPromedio Fin Clase Alumno3 Clase ElecutaAlumno3 1. Método principal a. Declaraciones


Program...Y, anereade a ableces apurando la estruet,rd de seduemacide 279

Variables nombre: Cadena cl, c2, c3, c4: Real b. Declarar, crear e iniciar objeto Alumno3 obiAlumno = new Alumno30 c. Solicitar Nombre del alumno, calificación 1, calificación 2, calificación 3 y calificación 4 d. Leer nombre, cl, c2, c3, 04 e. Establecer oblAlumno.establecerNombreAlum(nombre) objAlumno.establecerCalif1(c1) obiAlumno.establecerCalif2(c2) objAlumno.establecerCalif3(c3) objAlumno.establecerCalif4(c4) f. Calcular objAlumno.calcularPromedion g. Imprimir objAlumno.obtenerNymbreAlum() objAlumno.ObtenerPromedio() h. Fin Método principal Fin Clase EjecutaAlumno3 Fin Expllcacióre: El algoritmo tiene dos clases; la Clase Alumnos y la clase ElecutaAlunino3. En la Clase Alumno3; 1. Se declaran los datos que representan la estructura de la clase: nombreAlum para el nombre del alumno califa para la calificación t del alumno calif2 para la calificación 2 del alumno calif3 para la calificación 3 del alumno calif4 para la calificación 4 del alumno promedio para el promedio del alumno 2. Método establecerNombreAlum(nom; Cadena) Recibe en el parámetro nom el valor que luego coloca en el dato nombreAlum. 3. Método establecerCalifi(car Real) Recibe en el parámetro cal el valor que luego coloca en el dato califa. 4. Método establecerCalif2(ca2: Real) Recibe en el parámetro cae el valor que luego coloca en el dato califa. 5. Método establecerC_alif3(ca3: Real) Recibe en el parámetro ca3 eI valor que luego coloca en el dato califa. 6. Método establecerC.alifp(cap: Real) Recibe en el parámetro cap el valor que luego coloca en el dato calif4. 7. Método calcularPromedio0 Calcula el promedio del alumno S. Método obtenerNombreAlum(): Cadena Retorna nombreAlum (nombre del alumno)


Earl metodoiege de la Prorelernaciori Doonlade e Cautos g. Método obtenerPromedio(): Real Retorna promedio (promedio del alumno) Fin de la Clase Alumnos En la Clase EjecutaAlumno3; en el Método principal: a. Se declara: La variable nombre para leer e] nombre del alumno. La variable ce para leer la calificación i del alumno. La variable ca para leer la calificación 2 del alumno. La variable c3 para leer la calificación 3 del alumno. La variable c4 para leer la calificación 4 del alumno. b. Se declara el objeto objAlumno, usando como base a la clase Alumnos; dicho objeto se crea e inicializa mediante el constructor por defecto Alumnos°. c. Se solicitan Nombre, calificación t, calificación 2, calificación 3 y calificación 4 d. Se leen en nombre, ea, c2, c3, c4 e. Se llama al método establecerNombreAlum(nom) del objeto objAlumno: para colocar el valor de nom en el dato nombreAlum. Se llama al método establecerCalifi(ci) del objeto objAlumno; para colocar el valor de C1 en el dato califi. Se llama al método establecerCallf2(c2) del objeto objAlumno; para colocar el valor de C2 en el dato califa. Se llama al método establecerCalif3(c3) del objeto objAlumno; para colocar el valor de es en el dato calif3. Se llama al método establecerCalif4(c4) del objeto objAlumno; para colocar el valor de c4 en el dato calif4. f. Se llama al método calcularPromedio() del objeto objAlumno; para calcular el promedio. g. Se llama al método obtenerNombre.Alum() del objeto objAlumno; para acceder imprimir el valor del dato nombreAlum. Se llama al método obtenerPromedio() del objeto objAlumno: para acceder e imprimir el valor del dato promedio. h.Fin del Método principal Fin de la Clase EjecutaAlumno3 Fin del algoritmo En el CD anexo, para el capitulo u. se encuentran los ejercicios resueltos: Ejercicio 11.4.4 Calcula el precio de venta de un articulo Ejercicio 11.4.5 Calcula la hipotenusa de un triángulo rectángulo Ejercicio 11.4.8 Convierte grados a radianes y viceversa IZ.1~1 1.1••••••■•.••••■••••■■■■••wo•n•.I.~I■I•Tw■••••••••••=Mw•I

.,••••■•■•■• -


Progrernación onentada e oblatas aplicando ia Erscrucwre de sacuancrauan 281

Corno *reírlos propuestos para este punto se recomiendan, del capitulo 3, algunos de las ejercicios resueltos que no fueron incluidos en este punto; además, todos los ejercicios propuestos en dicho capítula.

Resumen del capítulo Conceptos ciruP debe dominar•

1Cómo diseñar algoritmos orientados a objetos aplicando la estructura de set:emulación en pscuclocódigo

la Constructores y. destructores


Programación orientada a objetos aplicando las estructuras de selección

12 1~%

Contenido 12.1 Diseño de algoritmos 00 usando la seleccIón doble IIF T HEN ELSE) 12.2 Diseño de algoritmos Ch0 usando la selección simple l/F THEN) 12.3 Diseño de algoritmos iC)0 usando la selección múltiple [SWITCH] 12.4 Ejercicios resueltos Ejercicios propuestos

CeitetiVo del capítulo En el capa ulu anterior se estudió cómo diseñar algoritmos orientados a ohletus aplicando la estructura de secuenciacián. En este capitulo se explica cómo diseñar algoritmos orientados a objetos aplicando las estructuras de selección: IT THEN FLSE, IF THEN y SWITCH.


Metonclogla de fe Prugrarnapán Orwroade

12.1 Diseño de algoritmos 00 usando la selección dable (IF THEN ELSE( En este capitulo se utilizarán las estructuras de selección en pseudocódigo, que se estudiaron en el capítulo 4, pero ahora aplicadas conjuntamente con el diagrama de clases y los conceptos de la programación orientada a objetos, es decir, en el diseño de algoritmos orientados a objetos. En este punto se aplica la selección doble (W THEN EISE).

e cül r eT Sunido de un empleado. Información a imprimir como salida Nombre y Sueldo Dotes disponibles para leer Nombre, número de horas trabajadas y cuota por hora Proceso El Sueldo se calcula de la forma siguiente: Si el número de horas trabajadas es mayor que 40. el excedente de 40 se paga al doble de la cuota por hora. En caso de no ser mayor que 40 se paga a la cuota por hora normal. A continuación se presenta el diagrama de clases de la solución. Diagrama de clases Empleado6 nombreEmp horasTrab cuota hora sueldo

1E) ecutaEmpleado6

establecerNombreEmp{ ) establecerHorasTrab{ establecerCuotaHora( calcularSueldo()) obtenerNombreEmp( obtenerSueldo( )

Fsie arria consta de dos clases: una es la clase Emple.adob que es el modelo que representa y soluciona el problema planteado, la cual está formada por los datos:


Programación Dm:reacio e Quietos

aplicando ras estAamttas de seleccias 286

no mb r eEm p Nombre del empleado horasTrab Número de horas trabajadas cuota Hora Cuota por hora sueldo Sueldo del empleado Y los métodos: establecerNombreEmp { 1. Para leer (entrada) el valor del dato nombreEmp. es t abl e ce rHo rasT ra b ). Para leer (entrada) el valor del dato horasTedbe s t ab le c e rC u ot aHor Pare leer (cut rade) el valor del dato cuntaHora. Para calcular y establecer et valor del dato sueldo. calcularSueldo i ). Pare acceder e imprimir el valor del dato nombreEmp. obtenerNombreEmp: y. Para acceder e imprimir el valor del dato sueldo. obtenerSueldo(). La otra es la ciase EjeculaEmpleadoP, que es la clase controlador, la cual utiliza el modelo, que es la clase Empleado6, para controlar la interacción can el osnarin representando y resolviendo su problema. Acontinuadónsem~aelalgorionodelasoluciénenpseudocódigp, Algoritmo CALCULAR SUELDO DOBLE OE UN EMPLEADO Clase Empleado6 1. Declaraciones Datos nombreEmp: Cadena horasTrab: Entero cuota:40ra: Real sueldo: Real 2. Método establecerNombreEmpinom: Cadena) a. nombreEmp - nom b. Fin Método establecerNombreEmp 3. Método establecerRorasTrab(hOrasTr: Entero) a, horasTrab = horasTr b. Fin Método establecerHorasTrab 4. Método establecereuotaMora(CuOtaHri Real) a. cuotaHora = cuotaHr b. Fin Método estableCerCuOtaHOra 6. Método calcularSueld01) a. IF horasTrab <= 40 DIN 1. sueldo = horasTrab cuotaftra b. ELSE Imrcuataliorly+ 1. sueldo

IlharasTrab-40)*(cuptaHora.2)1


286 Metodología de la ProyamaciOn [Memada a Objetos

c. ENDIF d. Fin Método calcularSueldo 6. Método obtenerNombreEmp(): Cadena a. return nombreEmp b. Fin Método obtenerNombreEmp 7, Método obtenerSueldo(): Real a. return sueldo b. Fin Método obtenerSueldo Fin Clase Empleado6 Clase EjecutaEmpleado6 1. Método principal a. Declaraciones Variables nomEmp: Cadena hrsTra: Entero cuoHr: Real b. Declarar, crear e iniciar objeto Empleado6 objEmpleado = new Empleado6() c. Solicitar Nombre, número de horas trabajadas y cuota por hora d. Leer nomEmp, hrsTra, cuoHr e. Establecer objEmpleado.establecerNombreEmp(nomEmp) objEmpleado.establecerHorasTrab(hrsTra) objEmpleado.establecerCuotaHora(cuoHr) f. Calcular objEmpleado.calcularSueldo() g. Imprimir objEmpleado.obtenerNombreEmp() objEmpleado.obtenerSueldo() h. Fin Método principal Fin Clase EjecutaEmpleado6 Fin

~:~i

El algoritmo tiene dos clases. la Clase Empleado(' y la clase EjecutaEmpleado6. En la Clase Empleado6: 1. Se declaran los datos que representan la estructura de la clase: nombreEmp para el nombre del empleado horasTrab para el número de horas trabajadas cuotaHora para la cuota por hora sueldo para el sueldo del empleado 2. Método establecerNombreEmp(nom: Cadena) Recibe en el parámetro nom el valor que luego coloca en el dato nombrekImp. 3- Método establecerHorasTrab(horasTr. Entero)


Programación aclamada e oblatas aplicando tea enructoras de solar-coa 287

Recibe en el parámetro horasTr el valor que luego coloca en el dato horasTrab. 4. Método e_stablecerCuotaHora(cuotaHr: Real) Recibe en el parámetro cuotaHr el valor que luego coloca en el dato cuota II ora. 5. Método calcularSueldo[) a- Si horasTrab e- 40 Entonces 1 Se calcula d sueldo en ferina simple h. Si no 1. Se calcula el sueldo: 40 horas a la cuota simple y el excedente de 4o, al doble de la cuota c. Fin del 1F d. Fin del método calcula rSueldo 6. Método abtenerNombreEmpf): Cadena Retorna nombreEmp 7. Método obtenerSueldo(l: Real Retorna sueldo Fin de la Clase Empleado& En la Clase EjecutaEmpleadotr. en el Método principal: a. Se declara: la variable nom Emp para leer el nombre del empleado. La variable hrsTra para ker e] número de horas trabajadas. La variable cuo Hr para leer la cuota por hora. h. Se declara el objeto objE mpleado. usando como base a la clase Empleado6; dicho objeto se crea e in Icial ka mediante el constructor por detecto Empleadok) c. Se solicitan Nombre, número de horas trabajadas y cuota por hora d Se leen en nom Emp, hNTra, cuoFir e. Se llama al método establecerNombreErnp(nomErnpi del objeto ohjEmpleadm para colocar el valor de nomEmp en el dato nombreEmp. Se llama al método establecerHarasTrab(hrsTra) del objeta ohj Empleado; para colocar el valor de hraTra en el dato horasTrab Se llama al método estahlecerCuritaHora(cuoHr) del objeto obj Empleado; para colocar el valor de coa Hr en el dato cuota Hora. f. Se llama al método caJcularSueklo0 del objeto objampleado; para calcular el lucido. g. Se llama al método obtenerNornhreEmp() del abjeto ohjEmpleado: para acceder e imprimir el valor del dato norribreEmp Se llama al método obtenerSueldo0 del objeto objEmpleado: para acceder e imprimir el valor del dato sueldo. h. Fin del Método principal Fin de la Clase EjecutaEmpleado& Fin de] algoritmo

":5

este momento se recomienda practicar haciendo algunos ejercicios ueltos y propuestos para aplicar el IF-THEN-EI


288 Me:Molino Se lo Al:gramma& C.1111naldf. a Oblatos

12.2 Diseño de algoritmos 00 usando la selección simple (IF THENI) En este punto se aplica la selección simple (IF THE.bi).

Sigine ".=on el mismo problema de calcular el sueldo de un empleado, ahora se otorga un incentivo de 5% si el empleado trabajo más de 4o horas, esto se agrega, independientemente del calculo del sueldo. A continuación se presenta el algoritmo de la solución. Diagrama de clases Empleado] nombreEmp horasTrab cuotaHora sueldo

EjecutaEmpleado7

establecerNombreEmp() establecerHorasTrab() establecerCuotaHora() calcularSueldo() obtenerNombreEmp() obtenerSueldoll

Algoritmo CALCULAR SUELDO CON INCENTIVO DE UN EMPLEADO Clase Empleado7 1. Declaraciones Datos nombreEmp: Cadena horasTrab: Entero cuotaHora: Real sueldo: Real 2. Método establecerNonbreEmp(nom: Cadena) a. nombreEmp nom b. Fin Método establecerNombreEmp 3. Método establecerHorasTrab(horasTr: Entero) a. horasTrab horasTr b. Fin metodo establecerHorasTrab


Programación unen cada a oblatos aplicando Loa estructuras da Balanceo 2138 4.

método establecerCuotaHora(cuotaHr: Real) a. cuotaHora = cuotaHr b. Fin Método establecerCuotaHora

5. Método calcularSueldo() a. sueldo = horasTrab • cuotaHora b. IF horasTrab > 40 THEN 1. sueldo - sueldo + (sueldo ' 0,05) c. ENDIF d. Fin método calcularSuelde 6. Método abtenerNombreEmp(): Cadena a. return nombreEmp E. Fin Método obtenerNombreEmp 7. Método obtenerSueldo(): Real a. return sueldo b. Fin Método obtenerSueldo Fin Clase Empleado? Clase EjecutaEmpleado7 1. Método principal a, Declaraciones Variables nomEmp: Cadena hrsTra: Entero cuoHr: Real b. Declarar, crear e iniciar objeto Empleado? ObjEmpleado = new Empleado7() c. Solicitar Nombre, numero de horas trabajadas y cuota por hora d. Leer nomEmp, hrsTra, cuoHr e. Establecer objEmpleado.establecerNombreEmp(nomEmp) objEmpleado.establecerHorastrab(hrsTra) objEmpleado.establecerCuotaHora(cuoHr) f. Calcular objEmpleado.calcularSueldo() g. Imprimir objEmpleado.obtenerNombreEmp() objEmpleado.obtenerSueldo() h. Fin Método principal Fin Clase EjecutaEmpleado7 Fin

loggiluo Este bintmo es casi igual al del punto anterior. lo ún izo diferente es en el método calcularSueldo0, en el cual ahora se hace el cálculo así:


Ceo

Metadelogia de la PregremacIgn Cnertede

a amebas

5.AltodocaleulatSuddo0 a Se calcula el sueldo en forms normal (honisDab'cucalHora) h Si horasTrab 40 Entonces L Al sueldo se le agrega 06 del mismo sueldo c. Fin del IF

d.FM del método caieularSueldo n este momento se recomienda practicar haciendo algunos ejercicios resueltos y propuestos para aplicar el 1F-THEN.

12.3 Diseña de algoritmos 00 usando la selección múltiple (SWITCH} En este punto se aplica la selección múltiple (swr-rc

runa oritmo que lea el número de dia (un valor entre i y 7); e imprima domingo si es a, lunes si es 2, sábado si es 7. A continuación se presenta el algoritmo de la solución.

Diagrama de clases DiceDia2 numoia nombreDia establecerNumDiap calcularblombreDia() obtenerNombreDia0

Algoritmo DICE DIA Clase DiceDia2 1. Declaraciones Datos numDia: Entero nOmbreDia: Cadena 2, Método establecerNumDiapum: Enterol a. numDia - num b. Fin Método establecerNumDia

E1ecuttinCeDia2


Progr.,oción mentada a dbfetos eplicand0 les estruct4, 313 de selección 291

3. Método calcularNombreDia() a. SWITCH numbia 1: nombreDia 'DOMINGO" 2: nombreDia 'LUNES' 3: nombreDia 'MARTES" 4: nombreDia 'MIERCOLES' 5: nombren() 'JUEVES' 6: nombreDia 'VIERNES' 7: nombreDia "SASADO" b. DEFAULT 1. nombreDia "NO ESTA EN EL RANGO DE 1 A c. ENDSWITCH d. Fin Método calcularNombreDla 4. Método obtenerNombreDia(): Cadena a. return nombreDia b. Fin Método obtenerNombrena Fin Clase DiceDia2 Clase EjecutaDicena2 1. Método principal a. Declaraciones Variables nDia: Entero b. Declarar, crear e iniciar objeto new DineDia2() DiceDia2 on]Dia C. Solicitar Número de dia d. Leer nDia e. Establecer objna.establecerNumDia(nDia) f. Calcular objna.calcularNombreDia() g. Imprimir objDia.obtenerNombreDia() h. Fin Método principal Fin Clase EjecutaDiceDia2 Fin

agontmouenedosdawisJaClaseDiceDia20aclaseEjecutaDireEna2. En la Clase DiceDia2: t. Se declaran los datos que representan la estructura de la clase: numlla para el número de dia nombreDia para el nombre del dia 2. Método establecerNumDiaDium: Entero} Recibe en el parámetro num el valor que luego coloca en el dato n u mDia. 3. Método calcularNombreDia() Establece el nombre del dia:


252 Mdrodologá dala Prugrarrvetpdr, Cinentada a

°Mara

a. SWITCH numDia Si numDia =t Entonces: nombreDia = "DOMINGO" Si numDia .2 Entonces: nombreDia = "LUNES" Si numilla .3 Entonces: nombreDia = "MARTES Si mi ruDia =4 Entonces: nombre Dia = "MIERCOLES" Si num Dia .5 Entonces: nombre Dia = "JUEVES" Si tiamitia =ó Entonces; nombre Dia = "VIERNES" Si nuinDia =7 Entonces: nombre Ella = "SABADOb. Si no es ninguno; Entonces: 1.'nombreDia = "NO FiSTA EN EL RANGO DE 1 A 7" c. FUI del SWITCH d. Fin del método calcularNombreDia 4. Método obtenerNombreDia(): Cadena Retorna nombreDia (nombre del dio) Fin de la Clase DiceDia2 En la Clase EjecuraDicelDia2; en el Método principal: a. Se declara: nDia para leer el número de din b. Se declara el objeto objDia, usando corno base a la clase DiceDia2; dicho objeto se crea e inicial iza mediante el constructor por defecto DieeDial(). c. Se solicita el número de dia d. Se lee en nDia e. Se llama al método establecerNurnDia[nDia) del objeto objEria; para colocar el valor de nDia en el dato numDia. f. Se llama al método calcularNombreDi del objeto objDia; para calcular el nombre del día nombreDia. 5.. Se llama al método obtenerNombreDiall del objeto objDia ; para acceder e imprimir el calor del dato nombreDia. h. Fin del Método principal Fin de la Clase EjecutaDticeDia2 Fin del algoritmo :j (womp 111,4092le jEn este momento se recomienda practicar haciendo el ejercicio resuello? algunos propuestos para aplicar el SWITCII, 12.4 Ejercicios resueltos En este punto se presentan ejercicios resueltos aplicando la metodología propuesta en e: capitulo anterior y en éste. pero también se usan conceptos desarrollados en los primero, nueve capítulos; los problemas resuellas en este punto son algunos de los ejercicios resueltos del capítulo 4. Es decir, que el mismo problema ya lo resolvimos aplicando la lógica básica de la programación en el capitulo 4; y aqui lo estamos resolviendo aplicand.: la lógica de la programación orientada a objetos.


284 Metáxiaboa de te Prograrnecoon Cromada e Dtrietne nombreAlum: Cadena Califl: Real Calif2: Real Califa: Real Calif4: Real promedio: Real observacion: Cadena 2. Método establecerNombreAlum(nom: Cadena) a. nombreAlum - nom b. Fin Método establecerNombreAlum 3. Meted() establecerCalifl(cal: Real) a. califl = cal O. Fin Método establecerCalifl 4. Metodo establecerCalif2(ca2: Real) a. califl = ca2 b. Fin Método establecerCalif2 5. Método establecerCalif3(ca3: Real) a. califa = ca3 O. Fin Método establecerCalif3 6. Método establecerCalif4(ca4: Real) a. califa = ca4 b. Fin Método establecerCalif4 7. Metodo calcularPromediCM) a. promedio - (califl + califa + califa + calif4)/4 b. Fin Método calcularPromedio 8. Método calcularObservacion() a. IF promedio >= 60 TREN 1. observacion = 'Aprobado' b. ELSE 1. observacion = 'Reprobado' C. ENDIF d. Fin Método calcularObservacion 9. Método obtenerNombreAlum(): Cadena a. return nombreAlum b. Fin Método obtenerNombreAlum 10. Método obtenerPromedio(): Real a. return promedio b. Fin Método obtenerPromedio


Progremacien orientada a oblatos Nelcande las estructuras de saiocuoe 295

11. Método obtenerObservacion(): Cadena a. return observacion b. Fin Método obtenerObservacion Fin Clase Alumno4 Clase EjecutaAlumno4 1. Método principal a. Declaraciones Variables nombre: Cadena C1, c2, c3, c4: Real b. Declarar, crear e iniciar objeto Alumno4 objAlumno = new Alumno4() c. Solicitar Nombre del alumno, calificación 1, calificación 2, calificación 3 y calificación 4 d. Leer nombre, cl, c2, c3, c4 e. Establecer objAlumno.eStablecerNombreAlum(nombre) objAlumno.establecerCalif1(c1) objAlumno.establecerCalif2(c2) objAlumno.establecerCalif3(c3) objAlumno.establecerCalif4(c4) f. Calcular objAlumno.calcularFromedie(1 objAlumno.calcularObservacion() g. Imprimir objAlumno.obtenerNombreAlum() objAlumno.obtenerPromedio() objAlumno.obtenerObservacion() h. Fin Método principal Fin Clase EjecutaAlumno4 Fin _ gozo garitrno berra dos clases, la Clase Alurnno4 y la clase EjecutaAlumno4. En la Clase Alumno4: 1. Se declaran los datos que representan la estructure de la clase:

nombreAlum para el nombre del alumno califi para la calificación 1 del alumno calif2 para la calificación 2 del alumno calif3 para la calificación 3 del alumno calif4 para la calificación 4 del alumno promedio para el promedio del alumno observacion en el que se colocará Aprobado o Reprobado i. Método establecerNombreAlinn(nom Cadena) Recibe en el parámetro nom el valor que luego coloca en el dato nombreAlum.


285 Metodologa 2e la Progranlecum Chantada a Otietos 3. Método establecerCalifi(cat: Real) Recibe en el parámetro cal el valor que luego coloca en el dato catifi. 4. Método establecerCalifa(ca2: Real) Recibe en el parámetro (112 el valor que luego coloca en el dato califa. 3. Método establecerCalif3(ca3; Real) Recibe en el parámetro ca3 el valor que luego coloca en el dato califs. 6. Método establecerCalif4(ca4: Real) Recibe en el parámetro ca4 el valor que Mego coloca en el dato califa. 7. Método calcularPromedio() Calcula el promedio del alumno 8. Método cakularObservaciona a. Si promedio >= 6o Entonces 1. Coloca "Aprobado" en observacion b. Si no 1. Coloca "Reprobado" en observacion c. Fin del IF d. Fin del Método caleularObservacion 9. Método obtenerNombreAlum0: Cadena Retorna nombreAlum (nombre del alumno) ro. Método obtenerProntedio(): Real Retorna promedio (promedio del alumno) 11. Método obtenerObservacion(): Cadena Retorna observacion Fin de la Clase Alumno4 En la Clase EjecutaAlumno4; en el Método principal: a. Se declara: La variable nombre para leer el nombre del alumno, La variable o para leer la calificación r del alumno. La variable c2 para leer la calificación 2 del alumno. La variable c3 para leer la calificación 3 de! alumno. La variable e4 para leer la calificación 4 del alumno. b. Se declara el objeto objAlumno, usando como base a la clase Alurnno4; dicho objeto se crea e inicial iza mediante el constructor por defecto Alumno40. c. Se solicitan Nombre del alumno, calificación calificación 2, calificación 3 y calificación 4 d. Se leen en nombre, cr, c2, c3, c4 e. Se llama al método establecerNombreAlum(nom) del objeto objAlumno; para colocar el valor de nom en el dato nombreAlum. Se llama al método establecerCalifi(ct) del objeto objAlumno; para colocar el valor de ci en el dato colifi. Se llama al método establecerCalif2(c2) del objeto objAlumno; para colocar el valor de ca en el dato califa. Se llama al método establecerCalif-3(0) del objeto objAlumno; para colocar el valor de c3 en el dato calif3.


Pro/ remocen onentede a objetas apláceselo las estructures de 5811302117,297

Se llama al método establecerCalif4(c4) del objeto objAlumno; para colocar el valor de c4 en el dato califa. f. Se llama al método calcularPromedio() del objeto objAlumno; para calcular el promedio. Se Rama al método calcularObservacion() del objeto objAlumno; para calcular la observación. g. Se llama al método obtenerNombreAlum() del objeto objAlumno; para acceder e imprimir el valor del dato nombreAlum. Se llama al método obtenerPromedio() del objeto objAlumno; para acceder e imprimir el valor del dato promedio. Se llama al método obtenerObservacion0 del objeto objAlumno; para acceder e imprimir el valor del dato observacion. h. Fin del Método principal Fin de la Clase EjecutaAlumno4 Fin del algoritmo Ejercicio 1 2.4.2 Elaborar un algoritmo similar al anterior de CALCULAR SUELDO DOBLE DE UN EMPLEADO, pero ahora tomando en cuenta que se tiene otra alternativa; Las horas que exceden de 5o, se pagan al triple de la cuota por hora. Usando IF-THEN-ELSF,.. A continuación se presenta el algoritmo.

(Primero hágala usted...después compare la solución) La solución es muy similar al algoritmo CALCULAR SUELDO DOBLE DE UN EMPLEADO; el diagrama de clases es igual, la clase EjecutaEmpleado7 es igual, en la clase Empleado7, es donde cambia, el método calcularStieldo( queda así: 5. Método calcularSueldol) 40 THEN a. IF horasTrab 1. sueldo = horasTrab • cuotaHora b. ELSE 1. IF horasTrab <= 50 THEN a. sueldo,(40.cuotaHora)+ ((horasTrab-40).(cuotaHora*2)) 2. ELSE a. sueldo=(40.cuotaHora)+(10"cuotaHora'2)* ((horasTrab-50)•(cuotaHora'3)) J. ENDIF c. ENDIF d. Fin Método calcularSueldo


298 MetpdoloWadeiakm~mcmnOrenuldeaCheWs

1

.11.1cularSueldo() a. Si horasTrab <= 4o Entonces 1. Calcula el sueldo de la forma simple b. Si no t. Si horasTrab <- so Entonces a. Calcula el sueldo de la forma doble 2. Si no a. Calcula el sueldo de la forma triple 3. Fin del IF e. Fin del IF d. Fin Método cadcularSueldn

Ejercicio 12.4.3 Elaborar un algoritmo que lea cuatro números y calcule e imprima el mayor. Se supone que son números diferentes. Utilizar IF-THEN-ELSE y AND. A continuación se presenta el algoritmo de la solución. (Primero hágala usted....despoés compare la solución)

Diagrama de clases

Mayor4Numeros2 numA numB nuniC

Ejecutablayor4Numero2

numD nuMayor establecerA0 establecerBi 1 establecerC establecerD0 calcularNuMayor( obtenerNuMayor 1)

Algoritmo MAYOR 4 NUMEROS Clase Mayor4Numeros2 1. Declaraciones Datas numA, mima, numC, numO, nuMayor: Entero


Preprameeen orientada a objetos apkrancia les esr.eleturas de m'emes 288

2. Método establecerNumA(a, Entero) a. numA - a b. Fin Método establecerNumA 3. Método estableCerNumB(h: Entero,. a. numB = b b. Fin Método estableCerNumS 4. Método eltableCerNumC(C: Entere) a. hule = h. Fin Método estableoerNumC 5. Método eStabIecerNumlEd: Entero) a. numD = d b. Fin Método establecermomo 6. Método calCularNuMayorly a. IF (numA > numS)AND(numA Y numC)ANDInumA > numD) TREN 1. nuMayor = numA h. ELSE 1. IF (nume el numCjAND)numB > numD) TREN a. nuMayOr = numB 2. ELSE numD THEN a. IF numC 1. nuMayor = numG b. ELSE 1. nuMayor = numD C. ENDIF 3. ENDIF C. ENDIF d. Fin Método calcularNuMayor 7. Método obtenerNuMayor(1: Entero a. return nuMayor O. Fin Método obtenerNuMayor Fin Clase Mayor4Numeros2 Clase EjecutaMayor4Numeros2 t. Método principal a. Declaraciones Variables nl, n2, n3, n4: Real b. Declarar, crear e iniciar Objeto Mayoreiumeros2 oh]Mayor4Numer0s= new Mayor4Numero52(1 c. Solicitar Numero 1, Numero 2, Numero 3 y Numero 4 d. Leer nl, n2, n3, 04 e. Establecer ob]Mayor4NumeroS.OStahlecerNumA(n1)


300 Matodologla de la Programamon Onentade a Cunetas

obiMayor4Numeros.establecerNumg(n2) ob]Mayor4Numeros.establecerNumC(0) objMayor4Numeros.establecerNumWn4) f. Calcular objMagor4Numeros.calcularNuMayor() g. Imprimir objdayor4Numeros.obtenerNuMayor() h. Fin Método principal Fin Clase EjeoutaMayor4Numeros2 Fin

PIt a go rno ** tiene dos clases, la Clase Mayor4Numeros2 y la clase EjecutaMayor4Numeros2. En la Clase Mayor4Numeros2: 1. Se declaran los datos que representan la estructura de la clase; numA, numB, numC, numD para cada uno de los 4 números nuMayor para número mayor 2. Método establecerNumA(a: Entero) Recibe en el parámetro a el valor que luego coloca en el dato numA. 3. Método establecerNumB(b: Entero) Recibe en el parámetro b el valor que luego coloca en el dato numB. 4. Método establecerNumC(c; Entero) Recibe en el parámetro c el valor que luego coloca en el dato numC. 5. Método establecerNumD(d: Entero) Recibe en el parámetro d el valor que luego coloca en el dato num D. 6. Método calcularNuMayor() Calcula el mayor en nuMayor a. Si (n o rnA > numB) y (numA > nuroC) y (nurnA > numD) Entonces t. Coloca nuntA en nuMayor b. Si no t. Si (numB > numC) y (numB 5 numD) Entonces a. Coloca numB en nuMayor 2. Si no a. Si numC > numD Entonces 1. Coloca numC en nuMayor b. Si no t. Coloca numD en nuMayor c. Fin del IF 3. Fin del IF c. Fin del IF d. Fín Método calcularNuMayor 7. Método ebtenerNoMayor(): Entero a. Retorna nuMayor Fin de la Clase Mayor4Numeros2


300 Metodoiogia de la Prograrnauon 0,,e,tada e Pblecos

objMayor4Numeros.establecerNumB(n2) obiMayor4Numeros.establecerNumC(n3) oblMayor4Numeros.establecerNumD(n4) f. Calcular objMayor4Numeros.calcularNuMayor() g. Imprimir objMayor4Numeros.obtenerNuMayor() h. Fin Método principal Fin Clase EjecutaMayor4Numeros2 Fin

a go tino teme dos clases, la Clase Mavor4Numeros2 y la clase EjecutaMayor4Numeros2. En la Clase Mayor4Numeros2: t. Se declaran los datos que representan la estructura de la clase: numA, numB, numC. numD para cada uno de los 4 números nuMayor pera número mayor 2. Método establecerNumA(a; Entero) Recibe en el parámetro a el valor que luego coloca en el dato numA_ 3. Método establecerNum13(b: Entero) Recibe en el parámetro b el valor que luego coloca en el dato numB. 4. Método establecerNumC(c: Entero) Recibe en el parámetro c el valor que luego coloca en el dato numC. 5. Método establecerNumD(d: Entero) Recibe en el parámetro d el valor que luego coloca en el dato numD. 6. Método calcularNuMayor() Calcula el mayor en nuMayor a. Si (numA > numB) y (numA > numC) y (numA > numD) Entonces I. Coloca numA en nuMayor b. Si no I. Si (numB > nurnC) y (numB > numD) Entonces a. Coloca numB en nuMayor 2. Si no a. Si numC > numn Entonces t. Coloca numC en nuMayor b. Si no i. Coloca numD en nuMayor c. Fin del 1F 3. Fin del IF c. Fin del IF d. Fin Método calcularNuMayor 7. Método obtenerNuMavor(): Entero a. Retorna nuMayor Fin de la Clase Mayor4Numeros2


Programación mentada a al:actos aplicando las enructaras de selocciari 301

En la Clase EjecutaMayor4Numeras2; en el Método principal: a. Se declara: Las variables 01, ria, n.3, n4 para leer los 4 números, b. Se declara el objeto objMayor4Numems, usando oamobase a la clase Mayor4Numerosa; dicho objeto secrea e inicializa mediante el constructor por defecto Mayor4Nomerosz(), c. Se solicitan Numero 1, Numero 2, Numero 3 y Numero 4 d. Se leen en ni, nz, n3,114 e. Se llama al método establecerNtmaA(nt) del objeto objMayor4Numeros; para colocar el valor de ni en el dato numA. Se llama al método establecerNumB(021 del objeto objMayor4Numeros; para colocar el valor de nz en el dato numB. Se llama al método establecerNumC(n3) del objeto objMayor4Numeros; para colocar el valor de n3 en el dato numC. Se llama al método establecerNurnDin4) del objeto objMayor4Numeros; para colocar el valor de n4 en e] dato numEi. f. Se llama al método calcularNuMayar0 del objeto objMayor4Numeros; para calcular el mayor. g. Se llama al método obtenerNuMayorO del objeto objMayor4Numeros; para acceder e imprimir el valor del dato nuMayor. h. Fin del Método principal Fin de la Clase Ejecn taMayoraNumerosz

En el CD anexo; para el capitulo la, se encuentran los ejercidos resueltos:

Ejercicio 12.4.4 Ejercicio 12.4.5 Ejercicio 12.4.6 Ejercicio 12.4.7

Obtiene el mayor de $ números Imprime el tipo de ángulo que es Realiza cálculos con la segunda ley de Newton Realiza cálculos de un cliente

deis propuestos para este punto se recomiendan, del capitulo 4, algunos de Co1110 los ejercicios resueltos que no fueron incluidos en este punto: además todos las ejercicios propuestos en dicho capitulo.

Resumen del capítulo Conceptos que debe dominar 1 Como diseñar algontmus orientados a objetos aplicando las estructuras de selección: IF IEN USE, IF THEN y SWITCH.


Programación orientada a objetos aplicando las estructuras de repetición

1

3

Contenido 13.1 Diseño de algoritmos 00 usando la repetición DO...WHII 13.1.1 Contadores y acumuladores 13.1.2 Ejercicios resueltos para DO... WHILE Ejerriejos prolluestas para DC1 ..WH1LE 13.2 Diseño de algoritmos ()D usando la repetición FOR 13.2.1 Ejercicios resuelto s para FOR Ejercicios propuestas para 1-OR 13.3 Diseño de algoritmos 00 usando la repetición WHILE 13.3.1 Ejercicios resueltos para WHILE Ejercicios propuestos para WHILE

Objetivo del capítulo En el r arabio anterior se aplicaron las estructuras de selección: lE THIN EISE, IE THEN y SWITCH; en el diseño de algoritmos orientados a objetos. En este capitulo se aplican las estructuras de repericióni DO--.WHILE, FOR y Willt E; en el diseño de algoritmos orientados a objetos.


304 Metedologto de la Pmgrernacton &celada a Objetes

13.1 Diseño de algoritmos 00 usando la repetición DO...WHILE En este punto se utiliza la estructura de repetición DO...14i1-11LE. en pseudocódigo, misma que se estudió en el capitulo 5, pero ahora aplicada conjuntamente con el diagrama de clases y los conceptos de la programación orientada a objetos, es decir, en el diseño de algoritmos orientados a objetos.

F. a rar unalgoritmo que calcule e imprima el sueldo de varios empleados, cada empleado se tratará en forma similar al primer problema que planteamos en el capitulo 3 cuando estudiamos la secuenciación. A continuación se presenta el algoritmo de la solución. Diagrama de clases Empleado8 nombreEmp horasTrab cuotaHora sueldo

E)ecutaEmpleado8

establecerNombreEmp() establecerHorasTrab(1 establecerCuotaHora() calcularSueldo() obtenerNombreEmp() obtenerSueldo()

Algoritmo CALCULAR SUELDO DE VARIOS EMPLEADOS Clase Empleado8 1. Declaraciones Datos nombreEmp: Cadena horasTrab: Entero cuotaHora: Real sueldo: Real 2. Método establecerNombreEmp(nom: Cadena) a. nombreEmp = nom b. Fin Método establecerNombreEmp 3. Método establecerHorasTrab(horasTr: Entero)


Programecon onentada e bbiabas apficando las estructuras che repeso án 305

a. horasTrab horasTr b. Fin Método establecerHorasTrab 4. Método establecerCuotaHora(cuotaHr: Real) a. cuotaHora = cuotaHr b. Fin Método establecerCuotaHora 5. Método calcularSueldo() a. sueldo = horasTrab cuotaHora b. Fin Método calcularSueldo 6. Método obtenerNombreEmp(): Cadena a. return nombreEmp b. Fin Método obtenerNombreEmp 7. Método obtenerSueldo(): Real a. return sueldo b. Fin Método obtenerSueldo Fin Clase Empleado8 Clase EjecutaEmpleado8 1. Método principal a. Declaraciones Variables nomEmp: Cadena hrsTra: Entero cuoHr: Real desea: Carácter b. DO 1. Declarar, crear e iniciar objeto Empleada8 objEmpleado new Empleados() 2. Solicitar Nombre, número de horas trabajadas y cuota por hora 3. Leer nomEmp, hrsTra, cuoHr 4. Establecer objEmpleado.eStablecerNombreEmp(nomEmp) objEmpleado.eStablecerHorasTrab(hrsTra) objEmpleado.establecerCuotaHora(cuoHr) 5. Calcular objEmpleadO.calcularSueldo() 6. Imprimir objEmpleado.obtenerNombreEmp() objEmpleado.obtenerSueldo() 7. Preguntar "¿Desea procesar otro empleado(S/N)?" 8. Leer desea c. WHILE desea = "S" d. Fin Método principal Fin Clase EjecutaEmpleado8 Fin


906 Metodologla de la PrografrISCUYI ra,enmaa

e °tienes

„ al ontmo tiene dos clases, la Clase Emplcado8 e la clase EjecutaEmpleadoS En la Clase Empleado& t. Se declaran los datos que representan la estructura de la clase nombreEmp para el nombre del empleado horasTrab para Las horas trabajadas del empleado cuotal-Isara para la cuota por hora sueldo para el sueldo del empleado 2- Método establecerNombreEm pf nom: Cadena) Recibe en el parámetro naco el valor que luego coloca en el dato nombreEmp. 3. Método establecerHorasTrabthorasTr: Entera) Recibe en el parámetro horasTr el valor que luego coloca en el dato horasTrah. 4. Método establecerCuotaHora( euotaHr: Real) Recibe en el parámetro estala euolalIr el valor que luego coloca en el dato cuotaH ora. 5_ Método calcularSueldo0 Calcula el sueldo del empleado 6. Método ohtenerNombreEmpf )1 Cadena Retorna nombre Erup (nombre del empleado) 7. Método nbtenerStheidn(). Real

Retorna sueldo Fin de la Clase Empleadol En la Clase Ejecuta Empleado8; en el Método principal: a. Se declara: La variable nomEmp para leer el nombre del empleado La variable hrsTra para leer l as horas trabajadas La variable cuoHr para leer la cuota por hora La variable desea para controlar el ciclo repetitivo h. Inicia ciclo IX) 1. Se declara el objeto objEmpleado, usando como base a la clase Empleado6; dicho objeto se crea e inicializa mediante el constructor por defecto EmpleadoklObserve que cada vez que entra a] ciclo crea un nuevo objeto empleado. 2. Se Solicitan el Nombre, número de horas trabajadas y cuota por hora 3. Se leen en nomEmp, brsTra, cun Hr 4. Se llama al método establecerNombreEmp(nomEmp) del objeto objErnpleado, para colocar el valor de nomEmp en el dato nombreEmp. Se llama al método establecerHorasTrab(hrsTra) del objeto objEmpleado, para colocar el valor de hrsTra en el dato horasTrab. Se llama al método establecerOuntaHora(ctioHr) del objeto objErnpleado, para colocar el valor de cuoHr en el dato cuotaHora. 5. Se llama al método calcularSueldo() del objeto objEmpleado, para calcular el sueldo. 6. Se luna al método obtenerNombreEmp() del ohjetn ohj Empleado, para acceder e imprimir el valor del dato nombreEmp.


Programación onencada a ob■etos Bobeando cae estructuras de repeoclon 307

Se llama al método obtenerSuelduf) del objeto objEmpleado, para acceder e imprimir el valor del dato sueldo. 7. Se pregunta "¿Desea procesar otro empleado(STN)?" 8. Se leer en desea la respuesta. c. Fin del ciclo (WHILE desea = 'S"), Si se cumple regmat al DO; si no, se sale del dein. d. Fin del Método principal Fin de la Clase Ejecuta Empleado8 Fin del algoritmo

13.1.1 Contadores y acumuladores Utilizando el concepto de contadores y acumuladores en el problema anterior, ahora se requiere elaborar un algoritmo que permita procesarlos empleados e imprima un reporte que tenga el siguiente formato. Reporte de empleados Nombre )00000ZICINXIOCXXXXXXXIOCXXXX KXXX XXXX0001.301XXXXXXX7 X.XMXIOCX3C{ XXXX.XXIOCXXXXX . Total 999 empleados

Sueldo 99.999.99 99,999.99 99,999.99 999,999.99

A continuación se presenta el algoritmo de la solución. Diagrama de clases Empleado9 nombreEmp horestrab cuot aHora sueldo establecerNombreEmp( ) establecerHorasTrab () establecerCuotaHora() calcularSueld0 ) obtenerNombreEmpt obt enerSueldo()

EjecutaEmpleado9


MIBM~edeleProgremaciánlai~bel~ Algoritmo CALCULAR SUELDO DE VARIOS EMPLEADOS Clase Empleado9 1. Declaraciones Datos nombreEmp: Cadena horasTrab: Entero cuotaHora: Real sueldo: Real 2. Método establecerNombreEmp(nom: Cadena) a. nombreEmp = nom b. Fin Método establecerNambreEmp 3. Método establecerHorasTrab(borasTr: Entero) a. horasTrab = horasTr b. Fin Método establecerHorasTrab 4. Método establecerCuotablora(OuotaHr: Real) a. cuotaHora = cuotaHr b. Fin Método establecerCuotaH0ra 5,

Método calcularSueldo() cuotaHora a. Sueldo = horasTrab b. Fin Método calcularSueld0

6. Método obtenerNombreEmp(): Cadena a. return nombreEmp 6. Fin Método obtenerNombreEmp '7. Método obtenerSueldo(): Real a. return sueldo b. Fin Método obtenerSueldo Fin Clase Empleado9 Clase EjecutaEmpleado9 1, Método principal a. Declaraciones Variables nomEmp: Cadena hrsTra, totEmpleado0: Entero cuoSr, totSueldol: Real desea: Carácter 6. Imprimir encabezado c. totEmpleados = 0 tottueldos = 0 d. DO 1. Declarar, crear e iniciar oblato Empleado9 ob)Empleado = new Empleado01)


Programación unar■Uida a abetos aplicando. las estructural rae MPE/t.00,308

2. 3011Citar Nombre, número de horas trabajadas y Cuota por hora 3. Leer nOmEmp, hrSTra, ouoHr 4. Eateblecer ObjEmpleado.establecerNombreEmpInomEmpy ObjEMpleado.establecerHorasTrah(hrsTra) ObjEmpleadO.eatablecerCuotaHoralcuo9r1 5. Calcular ObjEmpleado.calcularSueldoII 6. Imprimir ObjEMpleadO.obtenerNombreEmp0 ObjEMplead0.obtenerSueldo() 7. totEmpleados tOtEmpleados + t totSueldos = tOtSoeldOs + objEmpleado.ubtenerSueldoE) 8. Preguntar 'Oesea procesar otro emplead012/617" 9. Leer desea e. VOIILE desea a "5" t. Imprimir totEmpleados, totBueloos g. Fin Método principal Fin Clase EjecuteEmpleadog Fin

godtmo

dos clases, la Ciase Empleado) y la ciase EjecutaEmpleado9.

En la Clase Einpleadoy: declaran los datos que representan la estructura de la clase nonlbreF,mp para el nombre del empleado horasTrab para las horas trabajadas del empleado cuotaH ora para la cuota por hora sueldo para el sueldo del empleado a. Método estableocrNombreErrip(norn: Cadena) Recibe en el parámetro nom el valor que luego coloca en el dato nombreEm p. 3. Método establecerHorasTrab(horasTr: Entero) Recibe en el parámetro horasTr el valor que luego coloca en el dato horasTrab. 4. Método establecerCuotaHora(cuotaHr: Real) Recibe en el parámetro cuotaHr rl valor que luego coloca en el dato euotaHora. g. Método calcularSueltio0 Calcula el sueldo del empleado 6. Método obtenerNombreEmpa Cadena Retorna nombreEmp (nombre del empleado) 7. Método obterierSueldo(). Real Retorna %Cid° i.

Se

Fin de la Clase Empleada) En la Clase EjecutaErnpleadoy; en el Método principal:


310 Mebociologia de a Prograrnaubn 0,antácIa a Obpabcra a. Se declara: La variable nomEmp para leer el nombre del empleado La variable hrsTra para leer las horas trabajadas La variable cuolIr para leer la cuota por hora La variable totEmpleados para contar el total de empleados La variable totSueldos para calcular el total de sueldos de todos los empleados La variable desea para controlar el ciclo repetitivo b. Imprime el encabezado c. Inicia totEmpleados en o, y totSueldos en O d. Inicia ciclo DO I. Se declara el objeto objEmpleado, usando como base a la clase Empleado9; dicho objeto se crea e inicializa mediante el constructor por defecto Empleado9(). Observe que cada vez que entra al ciclo crea un nuevo objeto empleado. 2. Se Solicitan el Nombre, número de horas trabajadas y cuota por hora 3. Se leen en nomEmp, hrsTra, cuoHr 4. Se llama al método establecerNombreEmp(nomEmp) del objeto objEmpleado: para colocar el valor de rumian en el dato nombreEmp. Se llama al método establecerHorasTrab(hrsTra) del objeto objEmpleado; para colocar el valor de hrsTra en el dato horasTrab. Se llama al método establecerCuotaHora(cuol I r) del objeto objEmpleado; para colocar el valor de cuollr en el dato cuotaHora. 5. Se llama al método calcularSueldo0 del objeto objEmpleado; para calcular el sueldo. 6. Se llama al método obtenerNombreErnp0 del objeto objEmpleado; para acceder e imprimir el valor del dato nombreEmp. Se llama al método obtenerSueldo() del objeto objEmpleado; para acceder e imprimir el valor del dato sueldo. 7. Se incrementa totEmpleados en 1 Se incrementa totSueldos con el sueldo del empleado; mismo que se accede llamando al método obtenerSueldo( ) del objeto objEmpleado. 8. Se pregunta "¿Desea procesar otro empleado(S/N)?" 9. Se lee en desea la respuesta. e. Fin del ciclo (WHILE desea = "S"). Si se cumple regresa al IX); si no, se sale del ciclo. f. Imprime totEmpleados y totSueldos g. Inn del Método principal Fin de la Clase EjecutaEmpleadon Fin del algoritmo 13.1.2 garcicios reauettaa para OO...WHILE En este punto se presentan algunos de los ejercicios resueltos del capítulo 5. Es decir, que el mismo problema ya lo resolvimos aplicando la lógica básica de la programación en el capitulo 5, y aqui lo resolvemos aplicando la metodología de la programación orientada a objetos.


Programación nriwrZld9 o octetos aplanada los whirue.arras de repotmán 311

Cabe aclarar que por la naturaleza de la repetición los problemas que se plantean en este capitulo tienen una orientación más administrativa, parque esta estructura es más natural para resolver problemas de esta índole. Sin embargo, en el capitulo siguiente (POR). donde los problemas tienen una orientación más hacia ingenieria. utilizamos el DO...WH1LE para resolver ese tipo de problemas. Ejercicio 13.1.2.1 Una empresa vende hojas de hielo seco, con las condiciones siguientes: Si el cliente es tipo 1 se le descuenta 5 % Si el cliente es tipo a se le descuenta 8 % Si el cliente es tipo 3 se le descuenta 12 % Si el cliente es tipo 4 se le descuenta 15 % Cuando un cliente realiza una compra se generan los datos siguientes: Nombre del cliente Tipo de cliente (1.2,3,4) Cantidad de hojas compradas Precie por hoja Elalxirer un algoritmo que permita procesar varios clientes e imprima el siguiente reporte. Repode de cliente, Nombre

Sallotal

XXXXXX XX X X XXXXXXXXX 99,999.94 X XXXXXXXXXXXXXXXXXX 99.999.99 XX.X.XXXXXXXXX XXXXXXX 99,999.99 Total 999 clientes

999.999.99

Descuento

Nelo • pagar

911..994 99.99) 59

'19;)99.99

99,999 oo

99999.99

99.999.99

999.999.99

999,999.99

Cálculos: Sub total , Cantidad de hojas s Precio por hoja Descuento es el porcentaje correspondiente del Sub total a pagar Neto a pagar e Sub iota] - Descuento A continuación se presenta el algoritmo de la solución. (Primero hiroulo usted. _después compare lo solución)


312 kNtudekule dé Prugw‘ecten Chantada e ClbffitOB Diagrama de clases Cliente3 nombreClie tipoClie cantidad precioUnl subTotal descuento netoPagar

Ejecut aC liente3

establecerRombreClie() establecerTipo011e0 establecerCantidadll establecerPrecioUnii1 calcualarSubTotal0 calcualarCescuente() CaIcualarNetoPagar(1 obtenerNombreClie() ObtenerSubTotall) ObtenerDescuenton ObtenerNetoPagarp Algoritmo CLIENTES HOJAS HIELO SECO Clase cliente3 1. OeclaraCiOnes Datas nombreClie; Cadena tipoClie, cantidad: Entero precioUni, subTOtal, descuento, netoPagar: Real 2. Método establecerHombreelle(nom: Cadena) a. nombreClie = non b. Fin Método establecerNombreClie 3. Método establecerTipoClie(tip: Entero} a. tipoClie = tip O. Fin Método establecerTiponie 4. Método establecerCantIdad(oan: Entero)

a. cantidad = can D. Fin Método establocerCantidad

5. Método establecerPrecioUni(pre: Real)

a. precioUni = pre b. Fin Método establecurPrecioUni


Preremauien orientada e clama aptcanooms etritvetures de repeecián 313 6. Método calcuIarSubTotaI() a. subTotal = cantidad • preciohni h. Fin Método calcularSubTotal 7. Método calcularOescuento() a. SWITCH tipoCile 1: descuento = subTotal • 0.05 2: descuento = subTotal • 1.0e 3: descuento = subTotal • 0.12 4: descuento = subTotal 0.15 5. ENDSWITCH c. Fin Método calcularDescuento 8. Método calcularNetoPagar{1 a. netoPagar = subTotal - descuento b. Fin Método calcularNetoPagar 9. Método obtenerNombreCIie(1: Cadena a. return nombreClie h. Fin Método ehtenerNombreClie 10. Método obtenerSubTotall): Real a. return subTotal b. Fin Método obtenerSubTotal 11. Método obtenerDesCuent0(): Real a. return descuento b. Fin Método obtenerDeaCuento 12. Método obtenurNatoPagar(): Real a. return netoPagar h. Fin Método ObtenerNetoPagar Fin Clase Cliente3 Clase EjecutaCliente3 1. Método principal a. Declaraciones Variables nomCli: Cadena tiCli, cant, totelientest Entero prehni, totSubTot, totDescuentO. tOtNetO: Real desea: Carácter b. Imprimir encabezado C, totClientes = 0 totSubTot = 0 totOescuento = 0 totNeto = 0


314 Me9toclalogia de te Programaron OrlÉntass

a UVA..

d. DO 1. Declarar, crear e iniciar objeto Cliente3 objCliente = new Cliente3() 2. Solicitar Nombre, Tipo cliente, Cantidad, Precio unitario 3. Leer nomCli, tiCli, cant, pretini 4. Establecer objeliente.establecerNombreClie(nomeli) objeliente.establecerTipoClie(tiCli) objCliente.establecerCantidad(cant) objCliente.establecerPreciouni(preUni) 5. Calcular objCliente.calcularSubTotal() objCliente. calCularDescuento() objCliente.calCularNetoPagar() 6. Imprimir objCliente.obtenerNombreClie() objCliente.obtenerSubTotal() objCliente.obtenerDescuento1) objCliente.obtenerNetoPagar() 7. totClientes = totClientes . 1 totSubTot = totSubTot objCliente.obtenerSubTotal() totDescuento = totOescuento + objCliente.obtenerDescuento() totNeto = totNeto objCliente.obtenerNetoPagar() 8. Preguntar "¿Desea procesar otro cliente(S/N) r 9. Leer desea e. WHILE desea = "S' f. Imprimir totClientes, totSubTot, totDescuento, totNeto g. Fin Método principal Fin Clase EjecutaCliente3 Fin

e das clases, la Clase Cliente3 y la clase Ejecutarllente3. En la Clase Cliente3: 1. Se declaran los datos que representan la estructura de la clase: nombreClie para el nombre del cliente tipoClie para el tipo de cliente cantidad para la cantidad de hojas compradas precioUni para el precio unitario subTotal para el sub total descuento para el descuento


Pnivarl.E.or. [montada a obleccts epliC9M111 las estructuras de ropeución al 5 netoragar para el neto a pagar 2. .Método establecertiorubreClie(norm Cadena) Recibe en el parámetro nom el valor que luego coloca en el dato nombreClie. 3. Método establecerTipoClie(tipo: Entero) Recibe en el parámetro tipo el valor que luego coloca en el dato tipoClie. 4. Método establecerC.antidad(can: Entero) Recibe en el parámetro can el %amor que luego colora en el dato cantidad. s. Método establecerPrecioUni(pre: Real) Recibe en el parámetro pie el valor que luego adora en el dato precioUni. 6. Método calce larSubTotal0 Calcula el subTot al a pagar 7. Método calcularDescuento0 Calcula el descuento a. SW1TC.14 lipoClie Si tipuClie,t: descuento = subTotal o.os Si tipoClie=2; descuento = subTotal • 0.08 Si tipoClie=3.: descuento = subTotal • 0.12 Si tipoClie=4: descuento = subTotal • 0.15 b. ENDSWITCH c. FM Método calcular Descuento S. Método calcularNetoPagar0 Calcula el netoPagar a pagar g. Método oblenerNombreClieD:Cadena Retorna nombreClie lo. Método oblenerSubTotal(): Real Retorna subTotal t. Método obtenerDescuento().: Real Retorna descuento 12.Métodu obtenerniloPágar(): Real Retorna neloPagar

Fin de la Clase Cliente3 En la Clase EjecutaCliente3; en el Método principal: a Se declara: La variable nornCli para leer el nombre del cliente. La variable tiCli para leer el tipo de cliente. La variable cant para leer la cantidad de hojas compradas. La variable pre Uni para leer el precio unitario por boja. La variable tatClientes para contar el total de clientes. La variable totSubTut para calcular el total de los subtotales. La variable totDtwuento para calcular el total de los descuentos. La variable totNeto para calcular el total de lob netos a pagar. La variable desea para cont..Tdar el cielo repetitivo b. Imprime el encabezado e. Inicia los totalizadores en o


318 Metodologia de la Progranación alentada a Otnatas

d. Inicia ciclo DO t. Se declara el objeto objCliente, usando como base a la clase Cliente3; dicho objeto se crea e inicializa mediante el constructor por defecto Cliente30. Observe que cada vez que entra al ciclo crea un nuevo objeto cliente. 2. Solicita Nombre. Tipo cliente, Cantidad, Precio unitario 3. Lee en nomCli, tiCli. cant, preUni 4. Se llama al método establecerNombreClie(nomCli) del objeto objCliente, para colocar el valor de omite' i en el dato nombreClie. Se llama al método establecerTipoClie(tiCli) del obj eto objCliente, para colocar el valor de tiCli en el dato tipoClie. Se llama al método es-tablecerCantidad(cant) del objeto objCliente, para colocar el valor de cant en el dato cantidad. Se llama al método establecerPrecioUni(preUni) del objeto objCliente, para colocar el valor de preUni en el dato precioUni. 5. Se llama al método calcularSubTotal0 del objeto objCliente, para calcular el suhtotal. Se llama al método ulcularDescuento0 del objeto objCliente, para calcular el descuento. Se llama al método calcularNetoPagar() del objeto objCliente, para calcular el neto a pagar. 6. Se llama al método obtenerNornbreClie() del objeto objCliente, para acceder e imprimir el valor del dato nombreClie. Se llama al método obtenerSubTotal() del objeto objCliente, para acceder e imprimir el valor del dato subTotal. Se llama al método obtenerDescuento0 del objeto objCliente, para acceder e imprimir el valor del dato descuento. Se llama al método obtenerNetoPagar() del objeto objCliente, para acceder e imprimir el valor del dato netoPagar. 7. Incrementa totClientes en 1 Se incrementa totSub'fot con el s-ubTotal del cliente, mismo que se accede llamando al método obtenerSubTotal (1 del objeto objCliente. Se incrementa t❑tDescuentO con el descuento del cliente, mismo que se accede llamando al método obtenerDescuento() del objeto objCliente. Se incrementa totNeto con el netoPagar del cliente, mismo que se accede llamando al método obtenerNetoPagar() del objeto objCliente. S. Pregunta -¿Desea procesar otro cliente(S/N)r g. Se lee en desea la respuesta desea = "S"). Si se cumple regresa al DO; si no, se sale del e. Fin del ciclo ciclo. (. Imprime totClientes, totSubTot, totDescuento, totNeto g. Fin Método principal Fin de la Clase EjecutaChente3 Fin del algoritmo


Programación orientada o nepotes aplicando Lw anructdres de repetición 317

Ejercicio 13.1.2.2 Elaborar un algoritmo que proporcione el siguiente reporte

Nombre

Analisis de calificaciones Cali Cala Ca1.3

X XXICOODOCXXXXXXX XXX

XXXXXXXXX)CXXXXXXXXX

99.99 99.99 •

99.99 99.99

Cal.4

Promedio

99.99 99.99

9999 99.99

99,99 99.99

XXX,102000200(XX " XXXXX

99:99

99.99 99.99

99.99

99 - 99

Promedios generales

99.99

99.99 9999 99.99

99.99

A partir de que se tiene el NOMBRE. calificación 1,2,3 y 4 de varios alumnos, el promedio se obtiene sumando las cuatro calificaciones y dividiendo el resultado entre cuatro. El promedio general de cada calificación se calcula sumando las calificaciones de todos los alumnos y dividiendo el resultado entre el número de alumnos. A continuación se presenta el algoritmo de la solución. (Primero hóyalo usted...después compare in solución)

Diagrama de clases Alumno5 nombreAlam calif1 calif2 calif3 calif4 promedio establecerHombreAlum() establecerCalifl() establecerCalif2() establecerCalif3() establecerCalif4() calcularPromedio() obtenerNombreAlom( ) obtenerCalifl() obtenerCalif2() obtenerCalif31) obtenerCalif4() obtenerPromedio()

E] ecutaAlumno5


318 meconsmem de la Prograrneudn Onentada a Chelas Algoritmo CALCULA PROMEDIO DE VARIOS ALUMNOS Clase Alumno5 1. Declaraciones Datos nombreAlum: Cadena calif1: Real calif2: Real calif3: Real calif4: Real promedio: Real 2. Método establecerNombreAlum(nom: Cadena) a. nombreAlum - nom E. Fin Método establecerNombreAlum 3. Método establecerCallfl(ca1: Real) a. califl = cal b. Fin Método establecerCalifl 4. Método establecerCalif2(ca2: Real) a. calif2 = ca2 6. Fin Método establecerCalif2 5. Método establecerCalif3(ca3: Real) a. calif3 = ca3 b. Fin Método establecerCalif3 6. Método establecerCalif4(ca4: Real) a. calif4 = ca4 b. Fin Método establecerCalif4 7. Método calcularPromedio() a. promedio = (califl + calif2 + calif3 + calif4)/4 b. Fin Método calcularPromedio 8. Método obtenerNombreAlum(): Cadena a. return nombreAlum b. Fin Método obtenerNombreAlum 9. Método obtenerCalifl(): Real a. return califl b. Fin Método obtenerCalifl 10. Método obtenerCalif2(): Real a. return calif2 b. Fin Método obtenerCalif2


320 Prietadoiagta Lie u Progrernamon Desculo a 00"05

8. totCall = tOtCall + objAlumno.obtenerCalifl() totCal2 = toteal2 + objAlumno.obtenerCallf2() toteal3 = totCal3 olnAlumno.obtenerCallf30 totCal4 = totCal4 + objAlumno.obtenerCalif4{) totProm = totProm otnAlumno.obtenerPromedio() 9. Preguntar "¿Desea procesar otro alumno (S/N)?" 10. Leer desea e. WHILE desea = f. promCall totCall / totAlumnos promCal2 = totCal2 1 totAlumnos promeal3 = toteal3 totAlumnos prOmCal4 = totCal4 / totAlumnos promProm = totProm / totAlumnos g. Imprimir promCall, promCa12, promCal3, promCa14, promProm h. Fin Método principal Fin Clase EjecutaAlumno5 Fin

El algoritmo tiene dos clases, la Clase _Alumnos y la clase EjecutaAlumnos. En la Clase Alumnos: t. Se declaran los datos que representan la estructura de la clase: nomhreAlum para el nombre del alumno califi para la calificación t del alumno califa para la calificación 2 del alumno calif3 para la calificación 3 del alumno calif4 para la calificación 4 del alumno promedio para el promedio del alumno 2. Método establecerNombreAlumlnom: Cadena/ Recibe en el parámetro nom el valor que luego coloca en el dato nombreAd um. 3. Método establece rCalift(cai: Real) Recibe en el parámetro cal el valor que luego coloca en el dato calift. 4. Método establecerCali(2(ca2: Real) Recibe en el parámetro ex2 el valor que luego coloca en el dato califa. 5. Método establecerCalif3(ca3: Real) Recibe en el parámetro ca3 el valor que luego coloca en el dato califa. 6. Método establecerCalif4(ca4: Real) Recibe en el parámetro ca4 el valor que luego coloca en el dato calif4. 7. Método calcularPromedio() Calcula el promedio del alumno 8. Método obtenerNombreAlum(): Cadena Retorna nombreAlu in (nombre del alumno) 9. Método obtenerCalifin: Real


Programasen orlo-naoa a oblatos aplicando las escrácturas oe repenoon 321

Retorna califi io. Método obtenerCalif20: Real Retorna califa ti. Método obtenerCalif3(); Real Retorna calle; t2. Método obtenerCali/4(): Real Retorna calif4 13.Método obtenerPromedio(): Real Retorna promedio (promedio del alumno) Fin de la Clase Alumnos F.n la Clase EjecutaAlumnos: en el Método principal: a. Se declara:

La variable nombre para leer el nombre del alumno. la variable ca para leer la calificación a del alumno. La variable ca para leer la calificación a del alumno. La variable ea para leer la calificación 3 del alumno. La variable c4 para leer la calificación 4 del alumno. totAlumnos para contar el total de alumnos promCalt, proinCala, promCal3, prorriCa14, promProm; para los promedios totCalt, totCa12, tolCa13, totCal4, totProm: para los totalizadores La variable desea para controlar el ciclo repetitivo b. Imprime el encabezado c. Inicia los totalizadores en o d. biela ciclo DO a. Se declara el objeto objAlumno, usando como base a la clase Alumnos; dicho objeto se crea e inicializa mediante el constructor por defecto Alumnos°. Observe que cada vez que entra al ciclo crea un nuevo objeto alumno. 2. Se solicitan Nombre del alumno, calificación a, calificación 2, calificación 3 y calificación 4 3. Se leen en nombre, ca, ca, c3, 4. Se llama al método establecerNombreAlum(nombre) del objeto objAlumno: para colocar el valor de nom en el dato nombreAlum. Se llama al método establecerCalifaci) del objeto objAlumno; para colocar el valor de ca en el dato califa. Se llama al método establecerCallf2(ca) del objeto objAlumno; para colocar el valor de C2 en el dato Calif2. Se llama al método es-tablecerCalif3(c3) del objeto objAlumno; para colocar el valor de c3 en el dato califa. Se llama al método establecerCalif4(c4) del objeto objAlumno; para colocar el valor de c4 en el dato calif4. 5. Se llama al método calcularPromedioa) del objeto objAlumno: para calcular el promedio. 6. Se llama al método obtenerNombreAlum° del objeto objAlumno; para acceder e imprimir el valor del dato nombreAlum.


322 Metodologia de la Programacon Orientada a Objews

Se llama al método obtenerCalift0 del objeto objAlumno; para acceder e imprimir el valor del dato califa. Se llama al método obtenerCalif2() del objeto objAlumno: para acceder e impri• mir el valor del dato calif2. Se flama al método obtenerCalif3f) del objeto objAlumno; para acceder e imprimir el valor del dato calif3. Se llama al método obtenerCalif40 del objeto objAlumno; para acceder e imprimir el valor del dato ralif4. Se llama al método obtenerPromedio0 del objeto objAlumno; para acceder e imprimir el valor del dato promedio. 7. Incrementa totAlumnos en 1 8. Se incrementa totCali con califa; que se accede llamando al método obtenerea• 8f10 del objeto objAlumno. Se incrementa totCal2 ron ealif2; que se accede llamando al método obtenerealif20 del objeto objAlumno. Se incrementa totCal3 con califa; que se accede llamando al método obtenerCalif30 del objeto objAlumno. Se incrementa totCal4 con ealif4; que se accede llamando al método obtenerCalif40 del objeto objAlumno. Se incrementa totProm con promedio; que se accede llamando al método obtenerPromedio0 del objeto objAlumno. si. Pregunta "¿Desea procesar otro aluinno(S/N)?" so. Se lee en desea la respuesta e. Fin del ciclo (W1111£ desea = °S"). Si se cumple regresa al DO; si no, se sale del ciclo. f. Calcula los promedios promCalt, promealz, promCa13, promCal4 y promProm g. imprime proniCali, promCalz promCa13, proniCa14, promProm h. Fin Método principal Fin de la Clase EjecutaAlumno5 Fin del algeottrnu

En el CD anexo. para el capitulo 13, se encuentran los ejercicios resueltos: Ejercicio 13.12.3 Procesa la inflación de articules Ejercicio 13.1.2.4 Procesa la producción de obreros Ejercicios propuestos para 130...WHEE Como ejercicios propuestos para este punto, se recomiendan. del capitulo 5; algunos de los ejercicios resueltos que no fueron incluidos en este punto; además todos los ejercidos propuestos en dicho capitulo.

13.2 Diseño de algoritmos DO usando la repetición FOR En este punto se utilizará la estructura de repetición FOR en pseudocódigo, misma que se estudió en el capítulo 6. pero ahora aplicada conjuntamente con el diagrama de clases y


ProgranaoOn ademada a obesos aplicando las estructonas de caseacian 323 los conceptos de la programación orientada a objetos, es decir, en el diseño de algoritmos orientadas a objetas. pernplo: Era rar un álgnri[mo que lea 2n númerosy que calcule e imprima ej pmmed'[o de dichas números A continuación se presenta el algoritmo de la solución. Diagrama de clases Numeral nume ro

EjecutaNumerol

establecerNurnero( ) oOtenerNumero;)

Algoritmo PROMEDIO DE 20 numEnos Clase Numeral 1. Declaraciones Datos numero: Entero 2. Método establecerNumero(nu: Entero) a, numero = nu O. Fin Método estableCerNumero 2. Método obtenerNumerol) a. return numero O. Fin Método obtenerNumero Fin Clase Numero1 Clase EjecutaNumero1 1. Método principal a. Declaraciones Variables i, num, sumetoria: Entero promedie: Real O. sumaturia = 0 c. FOR 1=1; i<=20; 1-1- t 1.Oeclerar, crear e iniciar objeto Humeral obrIumero = new NumerolI) 2. Solicitar Número 3. Leer num 4, Establecer obiNumera.establecerNumero(num)


324 Metodología de re Pragrarrwoon Orientada 19 aleto-a 5. sumatoria sumatoria + obiNumero.obtenerNumero() d. ENDFOR e. promedio - sumatoria / 20 f. Imprimir promedio g. Fin Método principal Fin Clase EjecutaNumerol Fin

Ef a

tino tiene dos clases, la Clase Numerot y la clase EjecutaNumerot.

En la Clase Numero]: i. Se declara el dato que representa la estructura de la clase: numero para el número 2. Método establecerNumero(nu: Entero) Recibe en el parámetro nu el valor que luego coloca en el dato numero. 3. Método obtenerNurnero0 Retorna numero Fin de la Clase Numeras

En la Clase EjecutaNumerot; en el Método principal: a Se declara: La variable num para leer el número. La variable i para controlar el ciclo repetitivo for. La variable sumatoria para calcular la sumatoria de los números. La variable promedio para calcular el promedio. b. Inicia sumatoria en c. Inicia ciclo FOR desde i=1 hasta 20 con incrementos de 1. Se declara el objeto objNumero, usando como base a la clase Numerm; dicho objeto se crea e inicializa mediante el constructor por defecto NumeroiQ. Observe que cada vez que entra al ciclo crea un nuevo objeto numero. 2. Solicita el número 3. Lee en num .4. Se llama al método establecerNumero(num) del objeto objNumero; para colocar el valor de num en el dato numero. 5. Se incrementa sumatoria con numera; que se accede llamando al método obtenerNumero() del objeto objNumero. d. Fin del ciclo FOR e. Calcula pmrnedio f. Imptime promedio g. Fin Método principal Fin de la Clase EjecutaNumerot Fin del algoritmo


Prograrnacian orientada a oblatos aplicando las

ESIFULIAlrno de

repetición 325

132.1 Ejercicios resueltos para FOR En este punto se presentan algara-7S de los ejercicios resueltos del capitulo 6. Es decir, que el mismo problema ye lo resolvimos aplicando le lógica básica de la programación en e] capitulo 6; y aqui lo estamos resolviendo aplicando la metodología de la programación orientada a objetos. Ejercicio 13.2.1.1 Elaborar un algoritmo que solicite la cantidad de números a procesar v lea la respuesta en N; luego que lea los N números y calcule e imprima el promedio de dichos 11(1111E1'0S. A continuación se presenta el algoritmo de la solución. (Primero imiguio meted.-..después Cfliospare la solución)

Diagrama de clases Numero2 numero

Elecutablumer02

establecerNumaro() obtenerNumer00

Algoritmo PROMEDIO DE N MUMERDS Clase Numero2 I. Declaraciones Datos numero: Entero 2, Matad* establecerNumero(nu: Entero) a. numero . nu ID, Fin Método establecerNumero 3. Método obtenerNumerc(1 a. return numere b. Fin Método obtenerNumero Fin Clase Numero2 Clase t)ecutaNumero2 1. Método principal a. Declaraciones Variables 1, n, num, sumatoria: Entero promedio; Real E. Solicitar cantidad de números a procesar


328 Metadelops tle le Progremaeldn LInentatle e Ohiertim

c. Leer n d. sumatoria e. FOR i=1; 1<1-1; 1++ 1. Declarar, crear e iniciar objeto Numero2 objNumero = new Numero2() 2. Solicitar Número 3. Leer num 4. Establecer objNumero.establecerNumero(num) 5. sumatoria= sumatoria i obiNumero.obtenerNumero() f. ENDFOR g. promedio = sumatoria / n h. Imprimir promedio i. Fin Método principal Fin Clase EjecutaNumero2 Fin

g 10 o 1 go ene 1 dos clases, la Clase Numero2 y la clase EjecutaNumero2. En la Clase Numero?: 1. Se declara el dato que representa la estructura de la clase: numero para el número 2. Método establecerNumero(nu: Entero) Recibe en el parámetro nu el valor que luego coloca en el dato numero. 3. Método obtenerNumero() Retorna numero Fin de la Clase Numero2 En la Clase EjecutaNumero2; en el Método principal: a. Se declara: La variable num para leer el numero. La variable i para controlar e! ciclo repetitivo for. La variable sumatoria para calcular la sumatoria de los números. La variable promedio para calcular el promedio. La variable n para leer la cantidad de números. b. Solicita la cantidad de números a procesar c. Lee en n d. Inicia sumatoria en o e. baba ciclo FOR desde i=i hasta n con incrementos de t. Se declara el objeto objNumero, usando como base a la clase Numero2: dicho objeto se crea e inicializa mediante el constructor por defecto Numero2(). Observe que cada vez que entra al ciclo crea un nuevo objeto numero. 2. Solicita el número 3. Lee en num


Progrernacne orientada a obeigos aplicando las estructures de repoUción

f. g. h. i.

327

4, Se llama al método establecerNumero(num) del objeto objNumero; para colocar el valor de num en el dato numero. s. Se incrementa su matoria con numero; que se acede limando al método ohtenerNumerol) del objeto objNumero. Fin del vicio FOR Calcula promedio Imprime promedio Fin Método principal

Fin de la Clase EjecutaNumero2 Fin del algoritmo Ejercicio 132.1.2 Elabore un algoritmo que lea un valor N, entero y positivo, y que le calcule e imprima su factorial. Por ejemplo, si se lee el 5, su factorial es el producto de 5".4'3• 2' t El factorial de o es t. A continuación se presenta el algoritmo de la solución. {primero hágalo usted...después compare la solución)

Diagrama de clases Factorial2 numero factorial

[ EjecutaFactorial2

establecerNumero( calcularFactorial() obtenerFactorial()

Algoritmo FACTORIAL Clase Factorial2 1. Declaraciones Datos numero: Entero factorial: Entero 2. Método establecerNumero(nu: Entero) a. numero - nu b. Fin Método establecerNumero 3. Método calcularFactorial(j a. Declaraciones


sea roeiud.inia de le Prngre.eció. Onoruelo e Obleas Variables i: Entero E. IF numero = O THEN

1. factorial = 1 c. ELSE 1. factorial = 1 2. FOR i=numero; i>=1; a. factorial = factorial 3. ENDFOR d. ENDIF e. Fin Método calCUlarFaCtOrial

4. Método obtenerFactorial(1 a. return factorial h. Fin Método obtenerFactorial Fin Clase Factorial2 Clase E3ecutaFactorial2 1. Método principal a. Declaraciones Variables num: Entero b. Declarar, crear e iniciar objeto Factorial2 ❑b]Factorial new Factorial2[] c. Solicitar Número d. Leer num e. Establecer obffactorial.establecerNumerolnum} f. Calcular objFactorial.calcularFactoriall) g. Imprimir oblFantonial.ObtenenFantOnial()

h. Fin metal» principal Fin Clase E}ecutaFaCtOrial2 Fin

Ri a]goritmd1iéné dasdasesJaChweVactorid2ylaclaseIljecutaFactorial2. En la Clase Factorial2: I. Se declaran los dalos que representan la estructura de ha clase: numero para el numero factorial para el factorial 2. Método establecerNunneru(nu; Reten)) Recibe en e/ parámetro nu el valor que luego coloca en el dato numero. 3. Método caleularFactoriall a. Declaraciones Variables

Entero


Program-eco', drentade e cobiems splicande las estructures de repeupen 329

b. Si numero = o Entonces L. factorial = 1 c. Sí no e. Inicia factorial en 2. Inicia ciclo FOR desde i= numero hasta t con decrementos de a. Calcula factorial = factorial • i 3. Fin del FOR d. Fin del IF e. Fin Método calcula rFactorial 4. Método obtenerFactorialü Retorna factorial Fin de la Clase Factoríal2 En la Clase EjecutaFactorial2; en el Método principal: a. Se declara: La variable num para leer el número. b. Se declara el objeto ohjFactorial, usando como base e la clase Factorial2; dicho objeto se crea e inicial iza mediante el constructor por defecto Factorial2O. c. Solicita el número d. Lee en num e. Se llama al método establecerNumero(num) del objeto ohjFactorial; para colocar el valor de num en eI dato numero. f. Se llama al método calcularFactorial0 del objeto objFactorial; para calcular el factorial. g. Se llama al método obtenerFactorial0 del objeto objFactorial: para acceder e imprimir el valor del dato factorial. h. Fin Método principal Fin de la Clase EjecutaFactorial2 Fin En el CD anexo; para el capítulo t3, se encuentran los ejercicios resueltos:

Ejercicio 13.2.1.3 Calcula el factorial a N números Ejercicio 13.2.1.4 Procesa la producción de obreros ropuestos Ejercicios pro

FOR j

Como ejercicios propuestos para este punto se recomiendan, del capitulo 6, algunos de los ejercicios resueltos que no fueron incluidos en este punto; además todos los ejercicios propuestos en dicho capitulo. 13.3 Diseño de algoritmos 00 usando la repetición WHILE En este punto se utiliza la estructura de repetición Will LE en pseuducódigo, misma que se estudió en el capitulo ?, pero ahora aplicada conjuntamente con el diagrama de clases y


330 »31=0100 dele Prcgremean lanntada e Chotos los conceptos de la programación orientada a objetas, es decir, en el diseño de algoritmos orientados a objetos.

' a rar un algoritmo que permita procesar varios empleados, igual al primer ejemplo del primer punto (DO...WHILE) de este capitulo. Por cada empleado se leen los datos: nombre del empleado, número de horas trabajadas y cuota por hora; y se imprime el nombre y sueldo. A continuación se presenta el algoritmo de la soleciOn.

Diagrama de clases Eispleadole nomb re Ealp hora$Trah cuotaliora sueldo

1 EjecutaEmpleadol0 1

estabIecerNombreEmpl) estahlecerliorasTrabl) estahlecerCuotaHora() calcularSueldo(1 ❑etenerhombreEmp() obtenerSueldo()

Algoritmo CALCULAR SUELDO DE VARIOS EMPLEADOS Clase Empleadole 1. Declaraciones Datos nombreEmp: Cadena horasTrah: Entero cuotaHoral Real sueldo: Real 2. Método establecerNombreEmp(noml Cadena] a. nom:Dread = nom h. Fin Retado establecerNombreEmp a. Método establecerHorasTrab(horasTr: Entero) a, horasTrab = horasTr h. Fin Método eStablecerHcrasTrah


Programación Orilintada a oblatea aplicando las estructures da repetiohin 321

4. Método eStableCerCuOtaHOralcuotaHr: Real) a. cuotaHora cuotaHr h. Fin Método establecerCuotaHora 5. Método calcularSueldO() a. Sueldo = horasTrab ' cuotaHora b. Fin Método calcularSueldo 6. Método obtenarNombreEmp(): Cadena a, return nombreEmp h. Fin Método obtenerNombreEmp 7. MetOda ObtenerSueldol): Real a, return Suelde 6. Fin Método obtenerSueldo Fin Clase Empleadolé Clase EjeCutlEmpleadolC 1. Método principal a. Declaraciones Variables nomEmp: Cadena hrsTra: Entero cuoHr; Real desea: Carácter b. Preguntar '¿Desea procesar empleado 15/107' C. Leer desea d. «HILE desea = "5' 1. Declarar, crear e iniciar objeto Empleadolá objEmpleady = new Empleado15n 2. Solicitar Nombre, número de horas trabajadas y cuota por hora 3. Leer nomEmp, hrsTra, cuoHr 4. Establecer ob7Empleado.establecerNombreEmp(nomEmp) objEmpleado.establecerHOraSTrab(hrsTra) oblEmpleado.establecerCuotaHora(cu0Hr) 5. Calcular objEmpleado.calcularSueldo() 6. Imprimir objEmpleado.ObtenerNombreEmp0 oblEmpleado.obtenerSueldo() 7. Preguntar "¿Desea procesar otro empleado(S/N)7" B. Leer desea e. ENDWHILE f. Fin Método principal Fin Clase EjecutaEmpleadole Fin


332 Metsdologia dele Progremenán aman: le a °Mien

gol-aula hene dos clases, la Clase Empleado to y la clase EjecutaEmpleadcuu. En la Clase Empleado lo: a. Se declaran Ion datos que representan la estructura de la ciase: nombre Euip para el nombre del empleado homsTrab para las horas trabajadas del empleado cuotall ora pan la cuata por hora sueldo para el sueldo del empleado a. Método entablecerNonibreEmp(riom: Cadena) Recibe en el parámetro nom el valor que luego coloca en el dato nombre Einp. :t- Método establecealorasTrabiherasTr: Entero) Recibe en el parámetro borasTr el valor que luego coloca en el dato horasTrab 4. Método eatablecerCuotaHot-a(cuotaHt; Real] Recibe en el parámetro cuota II r el calor que luego coloca en el dato cuota Hora. 5. Método calcuiarSueldo0 Calcula el sueldo del empleado G. Método ohtenerNombreEmpül Cadena Retorna nombreEmp (nombre del empleado) 7. Método obtenerSueldo(). Real Retorna sueldo Fin de la Clase Empleado lo En la Clase EjecutaEmpleadol u: en el método principa l:

a. Se declara. La variable nomEmp para leer el nombre del empleado Lt variable hrsTra para leer las horas trabajadas La variable cuonr para leer la cuota por hora La variable desea para controlar el ciclo repetitivo b. Pregunta "¿Desea procesar empleado (S/N)P" c-. Lee en desea la respuesta d. Inicia cielo WFULE mientras desea = "S' I. Se declara el objeto ohj Empleado, asando como base a la clase Empleado[u; dicli objeto se crea e inicializa mediante el constructor por defecto Empleador ti°, Observe que rada vez que entra al ciclo crea un nuevo objeto empleado. 2. Se Solicitan el Nombre, número de horas trabajadas y cuota por hora 3. Se leen en nonzEmp. hrsTra, cuoHr 4- Se llama al método establecechiorribraaip(nomEmp) del objeto objEmpl eadi para colocar el valor de nom Emp en el data nornbreErrip. Se llama al método establecerHorasTrab(hrsTra) del objeto objEmpicado; par colocar el valor de hrsTra en el dato horasTeab. Se llama al método establecerCuotaHora(cuoHig del objeto objEmpleado; par colocar e] valor de cuoHr en el dato cuotaHora. 3. Se llama al método calcularSueldo() del objeto objErnpleado) para calcular sueldo.


Pra¡p•amacen alentada a obteto aphrsndo les astrocturva de ~o 333

8. Se llama al menidoobienerNonibreEmpai del objeto objErn piando; para acceder e imprimir el valor del dato nomb reEm p. Se 'llama a] método obtenerSueldo0 del objeto objEmpleado; para acceder e imprimir el valor del dalo sueldo. 7. Se pregunta "¿Desea procesar otro empleado(S/N)?" 8. Se lee en desea la respuesta. e. Fin del [LE f. Fin Método principal Fin de la Clase EjecutaEmpleadolo Fin del algoritmo ia.3.9 Ejercicios resueltos para WHILE

En este ponto se presentan algunos de los ejercicios resueltos del capitulo 7. Es decir, que el mismo problema va lo resolvimos aplicando la lógica básica de la programación en el capitulo 7; y aqui lo resolvemos aplicando la metodología de la programación orientada a objetos. Elercicio 13.3.1.1 El sueldo que perciben los vendedores de una empresa automotriz, está integrado de la manera siguiente: eI salario mínimo. más $100.00 por cada auto rendido, más 2% del valor de los amos vendidos.. Datos que se tienen por cada vendedor: Nombre del Vendedor : XXX/70=000000CXXXXX7IXXXXKXXX precio auto : 999,999.99 Precio auto 999,999.99 Precio auto 999,999.99 Nombre del Vendedor ; Precio auto ; 999,999.99 Precio auto 999,999.99 precio auto ; 999,999.99

Nombre del Vendedor XXXXXX.XXXXXXXXXY.XXXXXXMOCCVXX precio auto ; 999.999.99 precio auto ; 999,999.99 Como se puede apreciar, l'ay varios vendedores, por cada vendedor, se tiene el nombre y el precio de cada auto que vendió eta la quincena; es posible que algunos vendedores no hayan realizado venia alguna, en tal caso, sólo se tendrá el nombre. Elaborar un algoritmo que permita leerlos datos e imprimir el siguiente reporte.


534 Metorlaiogin da la Prograrmcdri Grontade a obTama

Nomina quincenal

Nombre

Sueldo

300001XXXXXXXXXXIDOCXXXXXXX XXXXXXXXXXX17tXXXXXXXXXXXX

99,999.99 99,999.99

X.XXX:XXXXXXXX XXXXXX~CXX .

99,999-99

Totales 999

999,999.99

A continuación se presenta el algoritmo de la solución. (Primera hóguin usted...después compare la solución)

Diagrama de clases Vendedor nombreVend sueldoVend

_-4

E }ecutaVendedor

establecerNombreVend() establecerSueldoVend() obtenerNombreVend() obtenerSueldoVend()

Algoritmo VENDEDORES DE AUTOS Clase Vendedor 1. Declaraciones Datos nombreVend: Cadena sueldoVend: Real 2. Método establecerNombreVend(nom: Cadena) a. nombreVend = nom b. Fin Método estublecerNembreVend 3. Método establecerdueldoVend(sdo: Real) a. sueldaVend = sda b. Fin Método establecerSueldoVend

1


Progsarnauión mentada e oblaws aplicando los ~turas cle reperación 335

4. Método obtenerNombreVend(): Cadena a. return nombreVend b. Fin Método obtenerNombreVend 5. Método obtenerSueldoVendll: Real a. return sueldoVend b. Fin Método obtenerSueldoVend Fin Clase Vendedor Clase EjecutaVendedor 1. Método principal a. Declaraciones Variables nombre: Cadena desea, otro; Carácter totAutos, totVend: Entero precioAuto, salMin, sueldo, totSueldos, totVendido: Real b. Solicitar el Salario minino c. Leer salMin d. Imprimir Encabezado e. totSueldos = 0 totVend = 0 f. DO 1. Declarar, crear e iniciar objeto Vendedor objVendedor = new Vendedor() 2. Solicitar el Nombre del vendedor 3. Leer nombre 4. totAutos = 0 totVendido = 0 5. Preguntar 'Lliay auto vendido (S/N)7" 6. Leer otro 7. WHILE otro = 'S' a. Solicitar el precio del auto b. Leer precioAuto c. totAutos = totAutos + 1 totVendido = totVendido precioAuto d. Preguntar "¿Hay otro auto vendido (S/N)7" e. Leer otro 8. ENDWHILE 9. sueldo=salMin+(totAutos•100)+{totVendido •8.02) 10. Establecer objVendedor.establecerNombreVend(nonbre) oblVendedor.establecerSueldoVend(sueldo) 11. Imprimir objVendedor.obtenerNombreVend() objVendedor.obtenerSueldoVendl) 12. totVend = totVend + 1


336 Matodologla da la Progrernacon Orientada a Oblatas

totSueldos = totSueldos + obyVendedor.obtenerSueldoVend() 13. Preguntar 'LHay otro vendedor (S/Ny?' 14. Leer desea g. WHILE desea - 'S"

h. Imprimir totVend, totSueldos i. Fin Método principal Fin Clase ElecutaVendedor Fin

E

o tito nene dos clases, la Clase Vendedor y la clase EjecutaVendedor,

En la Clase Vendedor; t. Se declaran los datos que representan la estructura de la dase: nombreVend para el nombre del vendedor sueldoVend para el sueldo del vendedor 2. Método establecerNombreVend(nom: Cadena) Recibe en el parámetro nom el valor que luego coloca en el dato nombreVend. 3. Método estableirSueldoVend (sdo: Real) Recibe en el parámetro sdo el valor que luego coloca en el dato sueldoVend. 4. Método oblenerNombreVend°, Cadena Retorna nombreVend s. Método obtenerSueldoVend (); Real Retorna sueldoVend Fin de la Clase Vendedor En la Clase EjecutaVendedor; en el Método principal: a. Se declara: La variable nombre para leer el nombre del vendedor La variable precioAuto para leer el precio de cada auto vendido La variable salMin para leer el salario mínimo La variable totVend para contar el total de vendedores La variable totAtitos para calcular el total de autos vendidos La variable sueldo para calcular el sueldo del vendedor La variable totSueldos para calcular el total de los sueldos de los vendedores La variable lotVendido para calcular el total vendido por cada vendedor Las variables desea y otro para controlar los ciclos repetitivos b. Solicita el Salario mínimo quincenal c. Lee en salMin d. Imprime el Encabezado e. Inicia torSueldos y totVend en o f. Inicia dein DO t. Se declara el objeto objVendedor, usando corno base a la clase Vendedor; dicho objeto se crea e inicializa mediante el constructor por detecto Vendedor().


Programador onentsaa a objetos atacando as esirocrones de repeddon 337

Observe que rada vez que entra al ciclo crea un nuevo objeto vendedor. 2. Solicita el Nombre del vendedor 3. Loe en nombre 4, Inicia totAutos y totVend ido en O 5. Pregunta 'éllay auto vendido (S/N)?" 6. Lee en otro la respuesta 7. Inicia ciclo WHILE mientras otro = "Sir Solicita el precio del auto b. Lee en precioAuto c. Incrementa totAutos en Incrementa totVendido con precioAuto d. Pregunta "¿Hay otro auto vendido (5/N)?" e. Lee en otro la respuesta 8. Fin del WHILE 9. Se calcula el sueldo salario mininos: más 100.00 por auto vendido: más 2% del total vendido en dinero. so. Se llama al método establecerNombreVend(nombre) del objeto objVendedor, para colocar el valor de nombre en el dato nombreVend. Se llama al método establecerSueldo(sueldo) del objeto objVendedor, para colocar el valor de sueldo en el dato sueldoVend. Ir Se llama al método ohtenerNombreVend() del objeto objVendedor, para acceder e imprimir el valor del dato nombreVend. Se llama al método obtenerSueldoVend() del objeto objVendedor, para acceder e imprimir el valor del dato sueldoVend. 12. Se incrementa totVend en Se incrementa totSueldos con el sueldo del empleado, mismo que se accede llamando al método obtenerSueldoVend() del objeto objVendedor. 13, Pregunta "¿Hay otro vendedor (S/N)?" 14. Lee en desea la respuesta g. Fin de) ciclo (WHILE desea = "S"). Si se cumple, regresa al DO; si no. se sale del ciclo. h. Imprime totVend, totSueldos i. Fin Método principal Fin de la Clase EjecutaVendedor Fin del algoritmo Etercício 13.3.1.2 Comisión Nacional del Agua Delegación Sonora, lleva un registro de las lluvias que se presentan en todas las poblaciones del estado, de manera que se tienen los siguientes datos. Población 1: X Lluvia: -Lluvia: --

X


336 Metal:Jala:1m de !a Prograrnacen Onereada a Chama

X

Población 2: X— Lluvia; -Lluvia: --

Lhívia.: Población N: XLluvia: — Lluvia: --

X

Lluvia: — Por cada población aparece el dato lluvia tantas veces como lluvias haya habido. este dato está en milímetros cúbicos, pudiera darse el caso de que en alguna población no haya ningún dato de lluvia, esto quiere decir que no llovió. Elaborar un algoritmo que lea estos datos e imprima el siguiente reporte. Reporte de lluvias Poblacion XX:1XXX3001}0{XXXXXX,XXXXX XXXXXXWXXXXXXXXXX,MXXX

Total lluvia 999.99 999.99

XYDCX.)00002 . ,01.300000000M

999.99

Total 999 poblaciones

999.99

Total poblaciones donde no llovio:

999

Cálculos:

❑ TOTAL, IJLINIA es el total de lluvia que se presentó en una población, se calcula sumando la cantidad de milímetros cúbicos de todas las lluvias. ❑ Se piden dos totales TOTAL de poblaciones procesadas y el total del total de lluvia en todas las poblaciones. También se pide la cantidad de poblaciones donde no se presentó lluvia alguna. A continuación se presenta el algoritmo de la solución.


Prodrernaoón orientada a ubicada epbcendo tes estructures de repeuuon 339

(Primero 'tagalo usted...después compare la solución) Diagrama de clases Poblacion nombrePob cantLluvia

EjecutaPoblacion

establecerNombrePob() establecerCantLluvia( obtenerNombrePob() obtenerCantLluvia() Algoritmo LLUVIAS Clase Poblacion 1, Declaraciones Datos nombrePob: Cadena cantLluvia; Real 2, Método establecerNombrePob(nom: Cadena) a. nombrePob = nom b. Fin Método establecerNombrePOb 3. Método estableCerCantLluvia(cant: Real) a, cantLluvia cant b, Fin Método establecerCantLluvia 4. Método obtenerNombrePob(): Cadena a. return nombrePob b. Fin Método obtenerNombrePob S. Método obtenerCantLluvia(): Real a. return cantLluvia b. Fin Método obtenerCantLluvia Fin Clase Poblacion Clase EjecutaPoblacion 1. Método principal a. Declaraciones Variables poblacion: Cadena otro, hay: Caracter totPobla, totPobNoLluvia: Entero lluvia, totLluvia, toTotLluvia: Real


340 Matodcaegla de le Programación Orientada e Cbiecos

6. Imprimir encabezado c. totPobla = 0 totPobNoLluvia = 0 toTotLluvia = 0 d. Preguntar "¿HAY POBLACION (S/N)?' e. Leer hay f. WHILE hay = "S' 1, Declarar, crear e iniciar objeto Poblacion objPoblacion = new Poblacion() 2. Solicitar POBLACION 3. Leer poblacion 4. totLluvia = 0 5. Preguntar "¿HAY LLUVIA (S/N)?' 6. Leer Otro 7. WHILE otro = 'S" a. Solicitar Lluvia en milímetros cúbicos b. Leer lluvia c. totLluvia = totLluvia + lluvia d. Preguntar 'CHAY OTRA LLUVIA (S/N)?" e. Leer otro 8. ENDWHILE 9. Establecer objPoblacion.establecerNombrePob(nombre) objPoblacion. establecerCantLluvia(totLluvia) 10. Imprimir objPoblacion.obtenerNombrePob() objPoblacion.obtenerCantLluvia() 11. totPobla = totPobla + 1 toTotLluvia = toTottluvia + objPoblacion.obtenerCantLluvia() 12. IF totLluvia - 0 TREN a. totPobNoLluvia = totPobNoLluvia + 1 13. ENDIF 14. Preguntar "¿HAY OTRA POBLACION (S/N)?' 15. Leer hay g. ENDWHILE h. Imprimir totPobla, toTotLluvia, totPobNoLluvia i. Fin Método principal Fin Clase EjecutaPoblacion Fin

,

tino ene dos clases; la Clase Poblacion y la clase EjecutaPoblacion.

En la Clase Poblacian: t. Se declaran los datos que representan la estructura de la clase; nombrePob para el nombre de la población


Pragnsmeudn orientada a obilains aplicando Las estrucci"u de repiauc.dri 341

cantiluvia para la cantidad de lluvia 2. Método establecerNonibrePob(norn. Cadena) Recale en el parámetro nom el valor que luego coloca en el dato nombrePoh 3. Método e_stablecerCantplivia(eant; Real Recibe en el parámetro cant el valor que luego coloca en el dato cantLluvia. 4- Método obtenerNambrePobü, Cadena Retorna nomb re Pob 5 Método obtenerCant Lluvia(); Real Retorna cantLluvia Fin de la Clase Poblacion Vil la Clase EnvaitaPoblacion; en el Método principal: a. Se declara: La variable poblarion para leer el nombre de la población La variable lluvia para leer la cantidad de cada lluvia que hubo La variable totPobla para contar el total de poblaciones La variable totPobNo Lluvia para Contare] total de poblaciones donde nu llovió La variable totLluvia para calcular el total de lluvia de cada población La variable toTutLluvia para calcular e] total de lluvia de todas las poblaciones Las variables otro y hay para controlar los ciclos repetitivos h. Imprime el encabezado c. Hiela tolPobla, totPubNoLluvia y toTotLluvia en o d. Pregunta "¿HAY POBLACION (S/N1?" e. Lee en hay la respuesta f. Inicia ciclo WIT ILE mientras hav a 'S" t. Se declara el objeto objPoblaeion. usando romo base a la clase Poblacion; dicho objeto se crea e inicializa mediante el constructor por defecto Poblacion(). Observe que cada vez que entra al ciclo crea un nuevo objeto población. a. Solicita POBLACION 3. Lee en población 4. inicia tutlJuvia en S. Pregunta "¿HAY LLUVIA. (S/N)P" 6. Lee en otro la respuesta 7. Inicia ciclo WHILE mientras otro = "S" a- Solicita Lluvia en milímetros cúbicos b. Lee en lluvia e. Incrementa totilmía con lluvia cl. Pregunta "¿.HAY OTRA LLUVIA (S/N)P" e. Lee en otro la respuesta 8. Fin del WRILE 9. Se llama a] método establecerNombrePob(nombre) del objeto objPnblacion, para colocar el valor de nombre en el dato nornbrePub. Se llama al método establecerCantLluvia(totLluvia) del objeto objPoblacion, para colocar el valor de totLI avía en el dato cantLluvia. ti. Se llama al método obtenerNombrePribu del objeto objPoblacion, para acceder e imprimir el valor del dato nombre Pub.


342 Metodología cía La Programadse Cremada a Oeietos Se Mama al método obtenereantlinvia() del objeto objPoblacinn, para acceder imprimir el valor del dato cantiluvia. 31. incrementa totPobla en Incrementa toTottluvia con totLluvia 12. Si tottluvia = a Entonces a. Incrementa tutPobNoLluvia en t 13. FM. del IF 14. Pregunta "¿HAY OTRA PORLACION (S/N)?' ts. Lee en hay la respuesta g. Fin del WH1LE h. imprime totPobla, toToiLluvie, totPoTalloUtteia Fin Método principal Fin de la Clase EjecutaPnblacion Fin del algoritmo En cl CD anexo, para el capitulo 13, se encuentra el ejercicio resuelto; Ejercicio 13.3.1.3

Procesa la producción de estaciones de trabajo

Ejercicios propuestos para WHILE •• • Corno ejercicios propuestos para este ponto se recomiendan, del capítulo 7, algunos de los ejercicios resuel tus tme no fueron incluidos en este punto; además todas los ejercicios propuestos en dicho capftfflo.

Resumen del capitulo Concepios que dehr dominar Diseño de algoritmos orieamdua s5 objetos usando las estructuras de repetición: 3 DO...WH1LE, FOR y WHILE.


Programación orientada a objetos aplicando arreglos 1

4

Contenido 14.1 Diseño de algoritmos 00 usando arreglos unidimensinnales 14.2 Diseño de algoritmos 00 usando arreglos b id i rnens lona les 14.3 Diseño de algoritmos 00 usando arreglos tridimensionales 14.4 Diseño de algoritmos 00 usando arreglos telradimensionales Ejercicios propuestos

Objetivo del capítulo :En el capitulo anterior se aplicaron las estructuras de repetición: DO... WHILE, FOR WHILE; en el diseño de algoritmos orientadas a objetos. este capítulo se aplican los arreglos uniclimensionales, bidimensionales, tridimensionales y tetradimensionales: en el diseño de algoritmos orientados a objetos. 1


344 Metadalogia de la 1,rogrtim4u2. Orwtacla a dojace,

14.1 Diseña de algoritmos 00 usando arreglos unidimensioneles En este punto se utilizarán los arreglos unidirnensionales en pseudocódigo, mismos qrr se estudiaron en el capitulo S, pero ahora aplicados conjuntamente con el diagrama de clases y los conceptos de fa programación orientada a objetos, es decir, en el diseñe de algoritmos orientados a objetos. Ejercicio 14.1.1 Se tiene el número de unidades pi-Enlucidas por un obrero en cada uno de los 30 dias del mes. Elaborar un algoritmo que permita leer la producción de cada uno de los 30 dios. es un arreglo; y luego que los imprima. A continuación se presenta el algoritmo de la solución.

Diagrama de clases Obrero3 Produccion[301

Ejectita0brero3

establecerProduccióni I obtenerPro du cCion

Algoritmo PRODUCCICIN 30 DIAS Clase Obrer03 1. Declaraciones Datos produccion: Arreglo[30] Entero 2, Método establecerPrOduCcion(pro[]: Entero) pro a. producción b. Fin Método estableOerProduccion 3. Método obtenerPrOduCCioni): Arreglo[] Entero

a. return produCCiOn b. Fin Método obtenerProduccion Fin Clase Obrero3

Clase Ejecutaarer03 1. Método principal a. Declaraciones Variables prod, prod2: Arreglc[30] Entero i: Entero b. Declarar, crear e iniciar objeto Obrer03 objObrerc = new Obrero3(1


Progrerneoón Inentscia a ociens apeando erregans 345

c. FOR I.0; i=29; 1. Solicitar producción del dia 1+1 2. Leer prod[il d. ENDFOR e. Establecer objObrero.establecerProduccion(prod) f. Obtener prod2 = obiObrero.obtenerProduccionl) g. FOR 1,0; 1,,29; 1. Imprimir prod2[1] h. ENDFOR 1. Fin Método principal Fin Clase Epacuta0brero3 Fin

El t

,- , trAell il e dos clases, la Clase Obrero3 y la clase Ejecuta0brero3.

En la Clase Obrero3: I. Se declara el dato que representan la estructura de la clase: produccion que es un arreglo de 30 elementos de tipo entero para los 3o días de producción del obrero. 2. Método e.stablecerProduccion(pro[]; Entero} Recibe en el parámetro pro los valores que luego colora en el dato producción. 3. Método obtenerProduccion(); Arreglo') Entero Retorna produccion Fin de la Clase Obrero3 En la Clase Ejecuta0brero3; en el Método principal: a. Se declara: La variable prod para leer los :40 días de producción La variable prod2 para recibir los 30 días de producción del objeto La variable i para controlar el ciclo repetitivo b. Se declara el objeto objObrero, usando como base a la clase Obrero3; dicho objeto se crea e inicializa mediante el constructor por defecto Obrero30, c. Inicia ciclo FOR desde ino hasta 29 con incrementos de I. Solicita la producción del día i-1-1 2. Lee en prodfil d. Fin del ciclo FOR e. Se llama al método establecerProduccion(prod) del objeto objObrerm para colocar el valor de prod en el dato produccion. f. Llama al método obtenerProduccion() del objeto objObrero; para obtener el dato produccion y colocarlo en prod2, que es corno se procesará de aqui en adelante en este método. g. Inicia ciclo FOR desde i.o hasta 29 con incrementos de i


346 Met.dologia de le Programeato Gnentede e Ckiews

1. Imprime prodlil h. Fin del ciclo FOR i. Fin del Método principal Fin de la Clase EjecutaObrero3 Fin del algoritmo Ejercicio 14.12 Elaborar un algoritmo que permita leer un vector de 10 números en un arreglo A de ro elementos, lo mismo para un arreglo li1; calcular e imprimir el producto de A >i B. Para obtener el producto dedos vectores se multiplicad elemento t del vector A porel elemento 1 del vector B, el 2 de A por el a de B, y asi sucesivamente, obteniéndose la sumatoria de los productos: el resultado no es un vector, sitio un valor simple. A continuación se presenta el algoritmo de la solución. Diagrama de clases Vectores vectorA1101 vectora[101 producto

EjecotaVectores

establecerVectorA() establecerVectorB() calcularProducto() obtenerVectorA() obtenerVectorB() obtenerProducto() Algoritmo PRODUCTO DE VECTORES Clase Vectores 1. Declaraciones Datos vectorA: Arreglarle] Entero yactura: Arreglo[10) Entero producto: Entero 2. Método establecerVectorA(vecA[1: Entero) a. vectorA = vecA b. Fin Método establecerVectorA 3. Método establecerVectora(veca[]: Entero) a. vectore vecB b. Fin Método establecerVectorB


Pragrarnac.an oneatasla a M'ama "acenso arreglos 347

4. Método calcularProducto() a. Declaraciones Variables r: Entero b, producto = 0 FOR r=0; r<=9; r+4 c. 1. producto = producto + (vectorA[r] d. ENDFOR e. Fin Método calcularProducto

vectorB[r])

5. Método obtenerVectorAW Arreglo[) Entero a. return vectorA b. Fin Método obtenerVectorA 6. Método obtenerVeCtorBO: Arreglo]] Entero a. return vectorB b. Fin Método obtenerVector8 7. Método obtenerProducto(): Entero a. return producto b. Fin Método obtenerProducto Fin Clase Vectores Clase EjecutaVectores 1. Método principal a. Declaraciones Variables vectA, vectA2: Arreglo[10] Entero vectB, vectB2: Arreglo[10] Entero i: Entero b. Declarar, crear e iniciar objeto Vectores objVectores = new Vectores() c. FOR 1=0; i<=9; i++ 1. Solicitar vectorA[i] 2. Leer veCtA[i] d. ENOFOR e. FOR im0; i<=9; i++ 1. Solicitar vectorA[i] 2. Leer vectB[i] f. ENDFOR g. Establecer objVectores.establecerVectorA(vectA) objVectores.establecerVectorB(vectB) h. Calcular objVectores.calcularProduCt0() i. Obtener vectA2= ob]Vectores.obtenerVectorAD vectE12- objVectores.obtenerVectorB)) J. Imprimir encabezado


34B

Mecodologw se le P"ograrrvacaln go-emula a ~Los

k. FOR i=d; 1.4+ 1. Imprimir vectA2[1], vectE12(i) 1. ENDFOR m. Imprimir oblVectores.obtenerProducto() n. Fin Método principal Fin Clase EjecutaVectores Fin

El

gn tito tiene dos clases, la Clase Vectores y la clase EjecutaVectores.

En la Clase Vectores:

1. Se declaran los datos que representan la estructura de la clase: vectorA para el vector A de números vectorB para el vector B de números producto para el producto de los vectores 2. Método establecerVectorA(vecAn: Enterco) Recibe en el parámetro vecA los valores que luego coloca en el dato vectorA. 3. Método establecerVectorB(vecBn: Entero) Recibe en el parámetro vecB los valores que luego coloca en el dato vectorB. 4. Método calcularProducto() a. Declara la variable r para controlar el ciclo b. Inicia producto en o e. Inicia ciclo FOR desde r=o hasta 9 con incrementos de 1. Se multiplican los elementos r de ambos vectores y el resultado se incremea en producto d. Fin del ciclo FOR e. Fin Método calcularProducto 5. Método obtenerVectorAO: Arreglan Entero Retorna vector. 6. Método obtenerVectorBO: Arreglo[] Entero Retorna vectorlt 7. Método obtenerProductoO; Entero Retorna producto Fin de la Clase Vectores En la Clase EjecutaVectores; en el Método principal:

a. Se declara: La variable vectA para leer los números del vector A Le variable vectS para leer los números del vector 13 La variable vecLk2 para recibir los números del vector A del objeto La variable vertB2 pura recibir los números del vector B del objeto La variable i para controlar el ciclo repetitivo b. Se declara el objeto objVectores. usando ramo base a la clase Vectores; dicho objei se crea e inicial ira mediante el constructor por defecto Vectores°.


Programaran anentada a ogjetns aPlicaMs arreglen 349

c. Inicia ciclo FOR desde i= o hasta 9 con incrementos de 1. Solicita vectorAjij 2. Lee en vectAjij d. Fin del ciclo FOR e. Inicia ciclo FOR desde i =o hasta g con incrementos de t. Solicita vectorB[ij 2. Lee en vectlt[i] f. Fin del ciclo FOR g. Se llama al método establecerVectorMvectA) del objeto ob5Vectores; para colocar el valor de vectA en el dato vectorA. Se llama al método establecerVectorB(rectB) del objeto objVectores; para colocar el valor de vemll en el dato vectorS. h. Se llama al método calcularProducto0 del objeto objVcctores; para calcular el producto_ i. Llama al método obtenerVectorAO del objeto obyectores; para obtener el dato vectorA y colocarlo en vecIA2, que es como se procesará de aquí en adelante en este método. Llama al método obtenerVectorBO del objeto objVectoms; para obtener el dato vectorB y colocarlo en eectI32 que es como se procesará de aquí en adelante en este método. j. Imprime el encabezado k. Inicia ciclo FOR desde i= o hasta 9 con incrementos de a. Imprimir veciA2lil, vectB2ii J L Fin del ciclo FOR m.Se llama al método obtenerProducto() del objeto objVectores; para acceder e imprimir el valor del dato producto. n. Fin del Método principal Fin de la Clase EjecutaVectore_s Fin del algoritmo Ejercicio 14.1.3 Flaborar un algoritmo que lea el nombre de un obrero v las unidades producidas por éste los 3o días del mes y que, además, imprima el siguiente reporte. Nombre del obrero : ~DOOM XXXXICCCOOMIXXXXX Producción del día r : 999 Producción del días 1' ggg Producción del día 30: 999 Promedio de producción : 999.99 Total de días arriba del promedio : 9y Cantidad producida más alta : 999 Día más productivo : 99


350 Merodologia de la Progremaclon Onenzada e Oblatos

Cálculos: •

Promedio de producción. Se calcula mediante la suma de todos los días de producción dividido entre 30. 71 Total de días arriba del promedio. Es el total de días en que la producción fue mayor que el promedio. Se compara la producción de cada día con el promedio y se cuentan sólo los días cuya producción es mayor que éste. • Cantidad producida más alta. Comparar la producción de todos los días para determinar la que es mayor; se supone que son diferentes. • Dia más productivo. El número de día al que corresponda la cantidad producida más alta. A continuación se presenta el algoritmo de la solución: Diagrama de clases Obrero4 nombreObr produccion)30)

EjecutaObrero4

establecerNombreObr() establecerProduccionl) obtenerNombreObrI) obtenerProduccion 1

Algoritmo PRODUCCION PROMEDIO DE OBRERO Clase Obrero4 1. Declaraciones Datos nombreObr: Cadena produccion: Arreglo1301 Entero 2. Método establecerNombreObr(nom: Cadena) a. nombreObr = nom b. Fin Método establecerNombreObr 3. Método establecerProduccion(prof]: Entero) a. producción = pro b. Fin Método establecerProduccion 4. Método obtenerNombreObr(): Cadena a. return nombreObr b. Fin Método obtenerNombreObr 5. Método obtenerProduccion(): Arreglo)] Entero a. return produccion


PrograrroDán ortenlasla a objetas ap‘cando Bnbglos 351

h. Fin Método obtenerProduccion Fin Clase Obrero4 Clase EjecutaOhrero4 1. Método principal a. Declaraciones MariableS nombre, nombre2: Cadena prod, prod2: Arreglo[30] Entero promProd: Real 1, totArriba prodMayor, diaMayor, SumaProd: Entero h. Declarar, Crear e iniciar objeto Obrero4 oblObrero = new ObreroSH C. Solicitar nombre del Obrera d. Leer nombre e. FOR 1.0; i‹.29] i++ 1. Solicitar producción del d a 1+1 2. Leer prOd[il f. ENOFOR g. Establecer ob]Obrero.establecerNombreObr(nombre] OblObrero.establecerProduccion(prody E. Obtener nombre2 = ohjOhrerc.obtenerHombreChr() prod2 = objObrero.obtenerProduccionl) 1. SumaProd = O j, FOR 1.0] 1,.29; 1++ 1. sumaProd = sumaProd + prod2[1] k, ENOFOR I. promProd = sumaProd / 30 m. totArriba . O prodMayor , 0 n. Imprimir nombre2 o. FOR 1.0; i<=29; i++ 1. Imprimir prod2[1] 2. IF prod2[1] > promProd THEN a. totArriba = totArriba + 1 3. ENDIF 4. IF prod2[i] prodMayor THEN a. prodMayor = prod2[f] b. diaMayor = 5. ENOIF p. ENOFOR q. Imprimir promProd, totArriba, prodMayor, diaMayor r, Fin Método principal Fin Clase EjecutaObrero4 Fin


352 Matudotegade ta Programacioó Chamada

El a go

e OblOtOS

o ene dos clases. la Clase Obrero4 y la clase Ejecuta0brem4.

En la Clase Obrero4: I. Se declaran los datos que representan la estructura de la clase: nombreObr para el nombre del Obrero . produccion que es un arreglo de 3o elementos de tipo entero para los 30 dias de producción del obrero. 2. Método establecerNombreOhr(nom: Cadena) Recibe en el parámetro nom el calor que luego coloca en el dato norabreOlir. 3. Método establecerProduccion(pro[]: Entero) Recibe en el parámetro pro los valores que luego coloca en el dato producción, 4. Método obtenerNombreObr(): Cadena Retorna nombreObr 5. Método obtenerProduccionu: Arregloll Entero Retorna poxlmcion Fin de la Clase Obrero4 En la Clase EjecutitObrera4; en el Método principal: a. Se declara: La variable nombre para leer el nombre del obrero La variable nombren para recibir el nombre del obrero del objeto La variable prod para leer los 3o días de producción La variable prod2 para recibir los 30 chas de producción del objeto La variable promProd para calcular el promedio de producción La variable i para controlar el ciclo repetitivo La variable totArribe para calcular el total de dilas arriba del prontexlio La variable prodMayor para obtener la producción mayor La variable diaMayor para obtener el día de la producción mayor La variable sumaProd para calcular la suinatoria de los 3o dias de producción b. Se declara el objeto objObrero, usando como base a la clase Obrero4; dicho objeto se crea e inicializa mediante el constructor por defecto Obreroa(). c. Solicita el nombre del obrero d. Lee en nombre e. Inicia cielo FOR desde i=o hasta 29 con incrementos de 1. Solicita la producción del dia lel 2. Lee en prod[i] f. Fin del ciclo FOR g. Se llama al método establecerNombreObr(nombre) del objeto objObrero; para colocar el valor de nombre en el dato nombreOhr. Se llama al método establecerProduccion(prod) del objeto objObrero; para colocar el valor de prod en el dato produccion. li. Llama al método obtenerNombreObr() del objeto objObrero; para obtener el dato nombreObr y colocarlo en nombren: que es como se procesará de aquí en adelante en este método.


Pttlgram~ plantada a caretos aplicando arregles 353 Llama al método obtenerProcluccion[j del objeto objOhrero; para obtener el dato produccion y colocarlo en proda, que es como se procesará de aqui en adelante en este método. i. Inicia surnaProd en o j. Inicia ciclo FOR desde i=o hastald9 0011 incrementos de 1. 'Incrementa surnaProd con prndnfi] k. Fin del ciclo FOR 1. Calcula promProd = sumaProd / 30 m.11-fiera totArriba en o Inicia predMayor en n. Imprime nombrez o. Inicia ciclo FOR desde i=0 hasta 29 con incrementos de 1. Imprime prodz1i) 2. Si prodálil > promProd Entonces a. Incrementa totArriba en 3. Fin det 1F 4. Si prod2.51 o prodMayor Entonces a. Coloca en prodMayor el valor de prodnlij b. Coloca en diaMayor el valor de i 5. Fin del 1F p. Fin del ciclo FOR q. Imprime promProd, totArriba, prodMayor„ diaM ayor r. Fin del Método principal Fin de la Clase EjecutaOhrero4

En el CD anexo; para el capitulo ]4.. se encuentra el ejercicio resuelto: Ejercicio 14.1.4 En este ejemplo se elabora un algoritmo que soluciona el mismo prohlenur del I: ejercicio anterior. pero con una esirurtura diferente. Ejercicios propuestos a_

_

Como ejercicios propuesim, para este punto se recomiendan, del capitulo 8. algunos de las ejercicios resueltos que no fueron incluidos en este punto; además todos los ejercicios propuestos en dicho capitulo sobre arreglas unidimen_sionades.

14.2 Diseño de algoritmos 00 usando arreglos bidimensionales En este punto se utilizarán los arreglos hidimension ales en pseudocédigo, mismos que se estudiaron en el capitulo 8, pero ahora aplicados conjuntamente con el diagrama de clases y. los conceptos de la programación orientada a objetos, es decir, en el diseño de algoritmos orientados a objetos.


Programe.án bruimetls a obiercos aplicando arreglos 355 e. Establecer obiMatriz.establecerhumeroS(nums) f. Obtener nums2 = ObjMatriz.obtenerNumeros() g. FOR ren=0; ren==5; ren+. F. FOR col=0; col., =4; col++ a. Imprimir nums2[ronlIcol] 2. ENDFOR h. ENDFOR i. Fin Método principal Fin Clase EjecutaMatriz Fin

El algoritmo tiene dos clases, la Clase Matriz y la clase EjecutaMatriz. En la Clase Matriz t. Se declaran los dalos que representan la estructura de la clase: numeras que es un arreglo de 4 e 5 elementos de tipo entero para los numeras 2. Método establecerNu meros[numf] []: Entero] Recibe en el parámetro num los valores que luego coloca en el dato numeres. 3 Método ohtenerNurneros(): Arreglo[][] Entero Retorna Humeros Fin de la Clase Matriz

En la Clase EjecutaMatriz; en el Método principal: a. Se declara: La variable noma para leer la matriz de números La variable nums2 para recibir la matriz de números IAS variables re n v col para controlar los ciclos repetitivos b. Se declara el objeto objMatriz, usando como base la clase Matriz; dicho objeto se crea e inicialies mediante el constructor por defecto e. inicia ciclo FOR desde ren =o hasta 3 con inerementos de t. Inicia cielo FOR desde rol=o hasta 4 con incrementos de a. Solicita numeomíren][ooll h. Lee en nurns[ren][col] a. Fin del ciclo FOR d. Fin del ciclo FOR e. Se llama al método establemrNtunerus(nurns) del objeto objMatriz; para colocar los valores de cunas en el dato numeres. F. llanta al método oblenerNumeros0 del objeto objMatriz; para obtener el dato n u merrl. y colocarlo en Riuns2. que es como se procesará de aqui en adelante en método. I;. Inicia ciclo FOR desde tt11 hasta 3 con incrementos de 1 t. Inicia ciclo FOR desde coi=o hasta 4 con incrementos de 1


358 Metooelowa de Is Progremarson Drenen:Le a Olajetas

a. imprime nurns2[reri][col] 2. Fin del ciclo FOR h. Fin del ciclo FOR i. Fin del Método principal Fin de la Clase Ejecutailiatriz Fin del algoritmo Ejercicio 14.2.2

Elaborar un algoritmo que lea numeras enteros para los elementos de dos matrices de 5 5_ que calcule cada elemento de una tercera matriz sumando loe elementos correspondiente= de las dos anteriores. Al final imprimir las tres matrices. A continuación se presenta el algoritmo de la solución. Diagrama de clases

Matrices1 matriz1151[51 matriz215]151 matriz3151151

EjecutaMatrices1

establecerMatrizt() establecerMatriz2() calcularMatriz3 obtenerMatriz1() obtenerMatriz2() obtenerMatriz3() Algoritmo SUMA MATRICES Clase Matrices1 1. Declaraciones [hatea matriz1: Arreglo[5][51 Entero matriz2: Arreglo[5][51 Entero matriz3: Arreglo[5][51 Entero 2. Método establecerMatriz1(mat1[][]: Entero) a. matrizl = matl b. Fin Método establecerMatriz1 3. Método establecerMatriz2(mat21)11: Entero) a. matriz2 = mat2 b. Fin Método establecerMatriz2 4. Método calcularMatriz3()


Progrernacitinall21~% a obpeOca aplicando arreglos 357

a. Declaraciones Variables r, c: Entero b. FOR r=0; r<=4; rrr 1. FOR c=0; c<=4; C.+ a. matriz3[r](cpmatriz1[r][c]fmatriz2(r)fc] 2. ENDFOR c. ENDFOR d. Fin Método calcularMatriZ3 5. Método obtenerMatrizl(): Arreg10[1(1 Entero a. return matrizi b. Fin Método obtenerMatriz1 6. Método obtenerMatriz20: Arreglo[][] Entero a. return matriz2 b. Fin Método obtenerMatriz2 7. Método obtenerMatriz30: Arreglo[[[] Entero a. return matriz3 b. Fin Método obtenerMatriza Fin Clase Matricesl Clase E]ecutaMatrices1 1. Método principal a. Declaraciones Variables matr1, matr12: Arreg10[5](5) Entero matr2, matr22: Arreg10[5]151 Entero matra, matr32: Arreg10(51151 Entero ren, col: Entero b. Declarar, crear e iniciar objeto Matricest ob]Matrices = new Matrices1/) c. FOR ren=0; ren<=4: rens* 1. FOR col=0; col<=e; cglr. a. Solicitar matrizt[ren][col] b. Leer matrgrenI[col] 2. ENDFOR d. ENDFOR e. FOR ren=0; rerc=4; ren+. 1. FOR 001=0; col<=4; col.+ a. Solicitar matriz2fteni[col] b. Leer matr2(renj(coll 2. ENDFOR f. ENDFOR g. Establecer ob)Matrices.establecerMatrizl(matr1)


35B

Metorkoowe de le Progrernewn Onentade e axetos

objMatrices.establecerMatriz2(matr2) h. Calcular objMatrices.calcularMatriz3() i. Obtener matr12 = objMatrices.obtenerMatriz1() matr22 = objMatrices.obtenerMatriz2() matr32 = objMatrices.obtenerMatriz3() j. FOR ren=0; ren<=4; ren++ 1. FOR co1=0; co1<=4; col++ a. Imprimir matr12IrenIfcoll 2. ENDFOR k. ENOFOR 1. FOR ren-0; ren<=4; ren++ 1. FOR col=0; co1<=4; col++ a. Imprimir matr221ren][001) 2. ENOFOR m. ENDFOR n. FOR ren=0; ren<=4; ren.+ 1. FOR co1=0; col<=4; col++ a. Imprimir matr32(renlIcoll 2. ENDFOR o. ENDFOR p. Fin Método principal Fin Clase EjecutaMatrices1 Fin

El5114 algoritmo tiene dos clases, la Clase Matrices, y la clase EjecutaMatricesi. En la Clase Matrices, t. Se declaran los datos que representan la estructura de la clase: matriz[ que es un arreglo de 5x5 elementos de tipo entero para la matriz t. matriz que es un arreglo de 5x5 elementos de tipo entero para la matriz 2. matriz3 que es un arreglo de 5x5 elementos de tipo entero para la matriz 3. 2. Método estableoerMatrizt(matinn Entero) Recibe en el parámetro mate los valores que luego coloca en el dato matriz:. 3. Método estableeerMatrizzlmat2up: Entero) Recibe en el parámetro mate las valores que luego coloca en el dato matria. 4. Método calcularMatriz3( a. Se declaran las variables r, c: Entero b. Inicia ciclo FOR desde r=o hasta 4 con incrementos de t. Inicia ciclo FOR desde c=o hasta 4 con inuementos de t a Calcula matriz3[r][c]; sumando matrizt[r][e] + matrizz[r]k] 2. Fin del ciclo FOR c. Fut del cielo POR d. Fin Método calcularMatrit3


Frograrnaciai rics,taric e obparne apitonas arreglos asa a. Método ohienerMatrizsu: Arreglonl] Entero Retorna matriz] 6. Método obtenerMatrizal Arreglo[][] Entero Retorna ma triza 7. Método ohtenerMatriz3(). Arreglo[]]] Entero Retorna matliz3 Fin de la Clase Matrices] En la Clase. EjecutaMatricest. en el Método principal; a. Se declara: La variable matri para leer la Incidas de números La variable matri2 para recibir la matriz 1 de números La variable matra para leer la matriz 2 de números La variable matraz para recibir la matriz 2 de números La variable riaarr3 para leer la matriz 3 de números La variable matr32 para recibir la matriz 3 de números Las variables ren y col para controlar los ciclos repetitivos h. Se declara el objeto objMatriees, usando como liase e la clase Matrieesi; dicho objeto se crea e inirializa mediante el constrictor por defecto Matrittcsi c. Inicia ciclo FOR desde ren -o hasta 4 con incrementos de L Inicia ciclo FOR desde col=0 hasta 4 con incrementos de a. Solicita matrim[ren][col] b. l.ee en rnatrifrenl[Call C. Fin del ciclo FOR d. Fin del ciclo FOR e. Inicia ciclo FOR. desde ren=o hasta 4 con incrementos de i s. Inicia ciclo FOR desde col= o hasta 4 con incrementos de s a. Solicita matrizz[ren][col] b. Lee en nactra[ren][col] 2- Fin del ciclo FOR f. Fin del ciclo FOR g. 5c llanta al método establecerMatrizi(matri) del objeto objMatrices; para colocar los valores de Main en el dato mateas. se llama al método establecerMatriz2(matral del objeto objMatrices; para enlucir los valores de mitre en el dato matriz2. h. Se llama al método calcularMatriz30 del objeto obj2vIatrices; para calcular los valores de los elementos de la rnatriz3. i. Llama al método obtenerMatrime del objeto objMatrices; para obtener el dato matriz' v colocarlo en matrl2, que escamo se procesará de aqui en adelante en este método.. Llama al método obtenerMatriz2() del objeto obj.Matrices; para obtener el dato nzatria2 y colocarlo en matr22, que es romo se procesará de aqui en adelante en este método. Llama al método obterierMatriz30 del objeto objMatrices para obtener el dato matriz3 y colocarlo en matr32, que es como se procesará de aquí en adelante en este método.


360 Macnarogia oe La Programaco ünenrada a Objetos

j. Inicia ciclo FOR desde ren=o hasta 4 con incrementos de 1. Inicia ciclo FOR desde col=o hasta 4 con incrementos de 1 a. Imprime matri2[ren][call 2. FM del ciclo FOR k. Fin del ciclo FOR 1. Inicia ciclo FOR desde ren=o hasta 4 con incrementos de 1 1. Inicia ciclo FOR desde col.° hasta 4 non incrementos de a. Imprime matr22[ren][colj 2. ENDFOR m.Fin del ciclo FOR n. Inicia ciclo FOR desde reno hasta 4 crin incrementos de i 1. Inicia ciclo FOR desde col.° hasta 4 con incrementas de t a. Imprime matrsa[ren][col) 2. Fin del ciclo FOR o. Fin deicida FOR p. Fin Método principal Fin de la Clase EjecutaMatricest Fin del algoritmo Ejercicio 14.2.3 Se tienen los datos de 20 obreros. Por cada obrero se tiene el nombre y la cantidad de unidades fabricadas por cada uno de los seis meses del semestre. Elaborar un algoritmo que lea estos datos en dos arreglos, uno unidimensional, para los nombres de los 20 obreros; otro bidimen.sional. en el que se tendrán ser renglones [uno para cada obrero, por 6 columnas (una para la producción de cada mes): Nombre

Produccion O

2

2

ig Además, se requiere que imprima el reporte siguiente

3

4


Progrorrowntn .0r:ornada a odiaras aplicando arrognis 351

Reporte semestral de produccion Nombre del obrero

Mes]

Total Mesa Ntes3 Mes4 Mess Mesó Prod.

h:10C1X31XXXXXXXXX MC10:30CCIODOEXXX

999 999

999 999

999 999

999 999

999 999

999 999

999 999

313000001101XXX:0)3: '

999

999

999

999

999

999

999

Total

999

A continuación se presenta el algoritmo de [a solución.

Diagrama de clases Obrerofi nombres1201 produccion(201[6]

EjecutaCbrero6

establecerNombresi) establecerProduccionly obtenerNombresp obtenerProduccion()

Algoritmo PRODUCCION 20 OBREROS Clase Cbrero6 1. Declaraciones Datos nombres: Arregle/[20] Cadena produccion: Arregloi20][8] Entero 2. Método establecerNombres(nom[]: Cadena) a. nombres = nom b. Fin Método establecerNombres 3. Método establecerProduccion(proM]: Entero) e. prOduCcion = pro b. Fin Método establecerProduccion 4, Método ObtenerNamlices(): Arreglo[] Cadena e. return nombres b. Fin Método nbtenerNombres


3B2 Mecoaologe de ia Prograrnapon alentada a Chatos 5. Método obtenerProduccion(): Arreglo(][) Entero a. return produccion b. Fin Método obtenerProduccion Fin Clase Obrero6 Clase Ejecuta0brero6 1. Método principal a. Declaraciones Variables obreros, obreros2: Arreglo 120) Cadena prod, prod2: Arraglo[201(61 Entero r, c, totProd, toTotProd: Entero O, Declarar, crear e iniciar objeto Obrero6 objObrero = new Obrero6() c. POR r=0; r<=19; r++ 1, Solicitar nombre del obrero [r] 2. Leer obreros(r] 3. FOR c=0; cf. a. Solicitar producción del día [r][c] b. Leer prod[r][c] 4. ENOFOR d. ENDFOR e. Establecer objObrero.establecerNombres(obreros) objObrero.establecerProduccion(prod) f. Obtener obreros2 = objObrero.obtenerNombres() prod2 = objObrero.obtenerProduccion() g. Imprimir encabezado h. toTotProd = 0 i. FOR r=0; r<=19; r+. 1. Imprimir obreros2[r] 2. totProd = 0 3. FOR c=0; c<=5; c++ a. Imprimir prod2(r)[c] prod2[rJ[cJ b. totProd = totProd 4. ENDFOR S. Imprimir totProd G. toTotProd = toTotPrOd totProd j. ENDFOR k. Imprimir toTotProd 1. Fin Método principal Fin Clase Ejecuta0brero6 Fin

gontmo tiene dos clases, la Clase Obrero6 y la clase Ejecuta0brero6.


Prográmenlo-1 &reanuda a obiscoa son:ardo arreglos 963 En la Clase Obrero6. t. Se declaran los datos que representan la estructura dela clase: nombres para los nombres de los 20 obreros producción para la producción de los 6 meses de los so obreros 2. Método estatilecerNornbres(nrann Cadena) Recibe en el parámetro nom los valores que luego coloca en el dato nombres 3. Método establecerProducrion(pro[][1: Entero) Recibe en el parámetro pro lis valores que luego coloca en el dato produccion. 4.. Método obterterNombres(): Arreglo[] Cadena Retorna nombres 5. Método otitenerProduccion0: Arreglo[][] Entero Retorna producción Fin de la Clase Obreroó En la Clase EjecutaObreroó; en el método Principal: a. Se declarar La variable obreros para leer los nombres de los 20 obreros La variable oh/cross para recibirlos nombres de los 20 obreros la variable prod para leer la producción de los 20 obreros La variable prods para recibir la producción de los so obreros Las variables r y e para controlar los ciclos repetitivos La variable totProd para calcular el total de producción de cada obrero La variable toTotProd para calcular el total de producción de los 20 obreros b. Se declara el objeto objObrero, usando como base la clase Ob re ru6; dicho objeto se crea r inicialisa mediante el constructor por defecto Obrero6ll• c. Inicia ciclo FOR desde reo hasta uy con incrementas de I i.. Solicita el nombre del obrero [r] 2. lose en obrero< rj 3. Inicia ciclo FOR desde can hasta S. con incrementos de a. Solicita la producción del día I r][cJ b. Lec en prOd[rIIC] q. Fm del ciclo FOR d. Fin del ciclo FOR e. Se lla ma al método establecerNombres(obreros) del objeto objObrero: para colocar los valores de obreros en el dato nombres. Se llama al método establecerProduccionf prod) del objeto objObrero; para colocar los valores de prod en el dato producciun. f. llama al método obtenerNombres() del objeto objObrero; para obtener el dato nombres y colocarlo en obreross, que es como se procesará de aqui en adelante en este método. Llama al método obtenerProduccion() del objeto ubjObrero., para obtener el dato produccion y colocarlo en prod2, que es como se procesará de aqui en adelante en este método. g. Imprime el encabezado h. Inicia toTotProd en o


364 Metodologe de la Programación alentada e Obletns

i. Inicia ciclo FOR desde r.o hasta 19 con incrementos de 1 t. Imprime obreros2[r] 2. Inicia totProd en o 3. Inicia ciclo FOR desde c.o hasta 5 con incrementos de a. Imprime prod2[r][c] h. Incrementa totProd ron prod2[r][c] 4. Fin del ciclo FOR 5. Imprime totProd 6. incrementa toTotProd con totProd j. Fin del ciclo FOR k. Imprime toTotProd L Fin Método principal Fin de la Clase Ejecuta0breron Fin del algoritmo

En el C13 anexo; para el capítulo 14, se encuentra el ejercicio resuelto: Ejercicio 14.2,4 En este ejemplo se elabora un algoritmo que soludotut el mismo problema del ejercicio 14.2.2. pero con 1.167,1 estructura diferente.

9ercicios propuestos k.

Como ejercicios propuestos para ...sic punta se recomiendan, del capitulo 8, algunos de los ejercicios resueltos que no fueron incluidos en este punto; ademas todos los ejercicios I propuestos en dicho capitulo sobre arreglos bidimensionales.

14.3 Diseño de algoritmos 00 usando arreglos tridimensionales En este punto se utilizarán los arreglos tridimensionales en pseudocodigo, mismos que se estudiaron en el capítulo 8, pero ahora aplicados conjuntamente con el diagrama de ciases y los conceptos de la programación orientada a objetos, es decir. en el diseño de algoritmos orientados a objetos. Ejercicio 14.3.1 Una compañia manufacturera tiene 6 plantas, en cada planta has 4 estaciones de trabajo y, por cada estación de trabajo se tiene la producción (número de unidadesfabricadas) de cada uno de los 5 días laborables de la semana. Elaborar un algoritmo que lea los datos de la producción en un arreglo de tres dimensiones; la primera dimensión la conforman las plantas; la segunda, las estaciones de trabajo, y la tercera, los días de producción; esquemáticamente:


Programación orientada a ointos aplicarKio aryagles 365

Planta o

Estación o Estación Estación 2 Estación 3

Planta

Planta 5

Una vez leídos los datos, que imprima el siguiente reporte. Reporte semanal de produceion Planta o Día o Dia l Dia 2 Dia 3 Dia 4 Total Estaciono Estacion-i Estacion-2 Estacion-3 Totales

Planta 5 Dia o Dia t Dia a Dia 3 Estacion-o Estados-1 Estacion-2 Estacion-3 Totales Total general de produccion

Dia 4 Total


ass

MewoologedeloPnwramaciónOnenuadoaOhrups

A Continuación se presenta el algoritmo de la solución.

Diagrama de clases Emp resal Produccion(6)(41[5]

EjecutaEmpresa1

establecerProducción() obtenerProduccion]]

Algoritmo ARREGLO TRES DIMENSIONES Clase Empresal 1. Declaraciones Datos produccion: Arreglo[6][4][5] Entero 2. Método establecerProduccion(proMI[): Entero) a. produccion = pro b. Fin Método establecerProduccion 3. Método obtenerProduccion(): Arreglo[][](] Entero a. return produccion b. Fin Método obtenerProduccion Fin Clase Empresas Clase EjecutaEmpresa1 I. Método principal a. Declaraciones Variables prod, prod2: Arreglo[6]141[5] Entero pla, est, die, totEst, totOia, totPlanta, totProd: Entero b. Declarar, crear e iniciar objeto Empresas objEmpresa = new Empresal]] c. FOR pla=0; pla<=5; pla++ 1. FOR est=0; est<=3; eSt++ a. FOR dia=0; dia<=4; dia.+ 1. Solicitar Producción pla,est,dia 2. Leer prod[pla]lest][dia] b. ENDFOR 2. ENDFOR d. ENDFOR e. Establecer objEmpresa.establecerProduccion(prod)


PrOfrarnaCOn orientada a Oblatos aplicando arreglos 387

f. Obtener prOd2 = oblEmpresa.obtenerProduccion() g. Imprimir primer renglón del encabezado h. totProd = 0 i. FOR pla=0; ple<=5; pla++ 1. Imprimir encabezado 2. FOR est=0; est<=3; est++ a. totEst = 0 b. FOR dia=0; dia<=4; dia++ 1. Imprimir prod2[pla][est][dial 2. totEst = totESt + prod2[pla][estj[dia] c. ENDFOR d. Imprimir totESt 3. ENDFOR 4. totPlanta = 0 5. FOR dia=0; dia<=4; dia.+ a. totDia = 0 b. FOR est=0; est<=3; 1. totoia = totDia prod2Iplal[estl(dial c. ENDFOR d. Imprimir totDia e. totPlanta = totPlanta + totD a 6. ENDFOR 7. Imprimir totPlanta 8. totProd = totProd + totPlanta j. ENDFOR k. Imprimir totProd 1. Fin Método principal Fin Clase EjecutaEmpresal Fin

Explica _ F.17,7;j7Wele dos clases, la Clase Empresas y la clase EjecutaEmpresai. En la Ciase Empresas: t. Se declaran los datos que representan la estructura de la clase: produccion para la producción de las 6 plantas de las 4 estaciones de trabajo y los 5 dios hábiles de la semana 2. Método establecerProduccion(pronln Entero) Recibe en el parámetro pro los valores que luego coloca en el dato produccion. 3. Método obtenerProduccion0: Arreglollnl Entero Retorna producción Fin de la Clase Empresas


3111111 ertercorkerlea coa le Progrernecen Chantada e aneas En la Clase EjecutaErnpresay, en el Método principal:

a. Se declara: La variable prod para leer la producción de las 6 plantas de las 4 rotaciones de trabajo y los 5 días hábiles de la semana. La variable prod2 para recibir la producción de las 6 plantas de las 4 estaciones del trabajo y los 5 días hábiles de la semana. Las variables pla. est y día para controlar los ciclos repetitivos La variable totEst para calcular el total de producción de cada estación La variable totDie para calcular el total de producción de cada dia La variable totPlanta para calcular el total de producción de cada planta La variable totProd para calcular el total de producción de las ti plantas b. Se declara el objeto objEmpresa, usando como base a la clase Empresas; dicho objeto se crea e inicializa mediante el constructor por defecto Empresas{). c. Inicia ciclo FOR desde pla=o hasta 5 con incrementos de 1. Inicia ciclo FOR desde est=o hasta 3 con incrementos de t a. Inicia ciclo FOR desde dia=o hasta 4 con incrementos de 1. Solicita Producción pla,est,dia 2. Lee en prodtplaliestildial b. Fin del ciclo FOR 2. Fin del ciclo FOR d. Fin del ciclo POR e. Se llama al método istablecerPniduccion(prod) del objeto obj Empresa: para colocar los valores de prod en el dato produccion. f. Llama al método obtenerProduccion0 del objeto objEmpresa: para obtener el dato : produccion y colocarlo en prod2, que es como se procesará de aqui en adelante en este método. g. Imprimir primer renglón del encabezado h. Inicia totProd en o i. Inicia ciclo FOR desde pla=o hasta 5 con incrementos de 1. Imprimir encabezado 2. Inicia ciclo FOR desde est=o hasta 3 con incrementos de a. Inicia totEst en o b. Inicia ciclo FOR desde dia.o hasta 4 con incrementos de I. Imprimir prod2jplaj[est][dia] 2. Incrementa totEst con prodalplaliestirdial c. Fin del ciclo FOR d. Imprime totEst 3. Fin del ciclo FOR 4. Inicia totPlanta en o 5. Inicia ciclo FOR desde clia=o hasta 4 con incrementos de a a. Inicia totDia en o b. Inicia ciclo FOR desde est=o hasta 3 con incrementos de 1 t. Incrementa totDia con prodarplaj[est][dia] C. Fin del ciclo FOR d. Imprime totDia Incrementa IotPlanta con totDia


Prograrnacidri orientada a °hiatos aplicando amaglas

369

6. Fin del ciclo FOR 7. Imprime totPlanta 8. Incrementa tot Prod con totPlanta j. Fin del ciclo FOR Imprime totProd I. Fin Método principal Fin de la Clase EjecutaEnipresat Fin del algoritmo

Como ejercicios propuestos para este punto se recomiendan, del capitulo 8, algunos de los ejercicios resueltos que no fueron incluidos en este punto; además todos los ejercicios propuestos en dicho capitulo sobre arreglos tridimensionales.

14.4 Diseño de algoritmos 00 usando arreglos tetradimensionales En este punto se utilizaran los arreglos tetradimensionales en pseudocódigo, mismos que se estudiaron en el capitulo 8, pero ahora aplicados conjuntamente con el diagrama de clases y los conceptos de la programación orientada a objetos, es decir, en el diseno de algoritmos orientados a objetos. Ejercicio 14.4.1 Una compañía manufacturera tiene 6 plantas, en cada planta tiene 3 estaciones de trabajo, en cada estación de trabajo se tienen 4 obreros, y por cada obrero se tiene la producción (número de unidades fabricadas) de cada uno de los 5 d las laborables de la semana. Elaborar un algoritmo que lea los datos de la producción en un arreglo de cuatro dimensiones; la primera dimensión la conforman las plantas: la segunda, las estaciones de trabajo; la tercera, los obreros, y la cuarta, los días de producción, esquemáticamente,


370 Metoddiogia de ta Programacain °dentada a aletas

Estanción o Estanción 1 Estanción 2 Día

Planta o

Dia

Obrero o Obrero Obrero 2 Obrero 3

Planta

Planta 5

Una vez leídos los datos en el arreglo, imprimir el siguiente reporte: Reporte semanal de produccion Planta o Estaeion O Dia o

Din t Din e

Dia 4

Total

Dia 3 Dia 4

Total

Dia 3

Obrero-o Obrero-t Obrero-a Obrero-3 Totales Estaciun 1

Din o Dia 1 Dia 2 Obrero-o Obrero-t Obrero-a Obrero-3 Totales


Programaciรณn onencada e Oblatos aphcanciรณ arreglos 371

Estacion 2 Dia o Dia t Dia 2

Dia 3 Dia 4 Total

Obrero-o Obrero-1 Obrero-2 Obrero-3 Totales

Planta 5 Estacion o Dia o Dia i Dia 2 Dia 3 Dia 4 Total Obrero-o Obrero-1 Obrero-2 Obrero-3 Totales Estacion 1 Dia o Dia 1 Dia 2

Dia g Dia 4 Total

Estacion 2 Dia o Dia t Dia 2

Dia 3 Dia 4 Total

Obrero-o Obrero-1 Obrero-2 Obrero-3 Totales

Obrero-o Obrero-1 Obrero-2 Obrero-3 Totales Total general de pruduceion


372 Matodelogia de la Programación Onareada a Chatos

A continuación se presenta el algoritmo de la solución. Diagrama de clases Empresa2 Produccion(6)(31(41151

L E)ecutaEmpresa2 1

establecer-Producción() obtenerProduccion()

Algoritmo ARREGLO CUATRO DIMENSIONES Clase Empresa2 1. Declaraciones Datos produccion: Arreglo(6)(3)(41(5) Entero 2. Método establecerProduccion(pro[]1][1[1: Entero) e. produccion = pro b. Fin Método establecerProduccion 3. Método obtenerProduccion(); Arreglo[][1[][) Entero a. return produccion b. Fin Método obtenerProduccion Fin Clase Empresa2 Clase EjecutaEmpresa2 1. Método principal a. Declaraciones Variables prod, prod2: Arreglo[6][3][4][5] Entero pla, est, obr, dia, totEst, totOia, totObr, totPlanta, totProd: Entero b. Declarar, crear e iniciar objeto Empresa2 objEmpresa = new Empresa2() c. FOR pla=0; pla<=5; pla++ 1. FOR estn; est=2; est++ a. FOR obr=0; obr=3; obr++ 1. FOR dia=0; dia<=4; die++ a. Solicitar producción pla,est,obr,dia b. Leer prod[plal(est][obr][dia] 2. ENDFOR b. ENDFOR 2. ENDFOR


Rrpgramacen arientatlfi e Oblathl aplicando arregles 373

d. ENDFOR e. Establecer objEmpresa.establecerProduccion(prod) f. Obtener prod2 = ub]Empresa.obtenerProduccion() g. Imprimir primer renglón del encabezado h. totProd = 0 1. FOR pla=0; pla<=5; pla++ 1. Imprimir encabezado de planta 2. totPlanta = 0 3. FOR est.0; est<=2; eSt++ a. Imprimir encabezado de estación h. FOR obr=0; obr=3; obr++ 1. Imprimir - OBRERO-',obr 2. totObr = 0 3. FOR dia=0; dia'e=4; dia++ a. Imprimir prud2[p1aj[est][obri[dia] U. totObr = totObr + prod2[pla][est][obrI[dia] 4. FROM 5. Imprimir totObr C. ENDFOR d. totEst = 0 e. FOR dia=0; dia<=a; dia++ 1. totOia . 2. FOR obr =a; obr..3; cbr++ a. toalla = totDia + prod2Iplaj[est][obr][dia] 3. ENDFOR 4. Imprimir 5. totESt = totEst + tntOia f. ENDFOR g. Imprimir totEst h. totPlanta = totPlanta + totEst 4. ENOFOR 5. Imprimir totPlanta S. totProd = totProd + totPlanta j. INDFOR k. Imprimir TotPred 1. Fin Método principal Fin Clase Ejecutalmpreso Fin

gon

ene dos clases, la Clase Ernpresa2 y la clase EjecutaRrnpresa2.


374

Metudulogle de Le Progrwnee.,pn °antena o aya,.

En la Clase Empresa2: t. Se declaran los datos que representan la estructura de la clase produccion para la producción de las 6 plantas de las 3 estaciones de trabajo de los 4 obreros v los 5 chas hábiles de la semana 2. Método esi ablecerProduccion(Prenini: Entero) Recibe en e] parámetro pro los valores que luego coloca en el dato produccion. 3. Método obtenerProductiona: Arreglo[][][][] Entero Retorna producción Fin de la Ciase Empresa2 En la Clase EjecutaEmpresa 2; en el Método principal: a. Se declara: Le variable prod para leer la producción de las 6 plantas de las 3 estaciones de trabajo de los 4 obreros s.. los 5 días hábiles de la semana la variable prod 2 para recibir la producción de las 6 plantas de las 3 estaciones de trabajo de los 4 obreros v los 5 dial hábiles de la semana las variables pis, est, obr y. dia para controlar los ciclos repetitivos La variable totEst para calcular el total de producción de cada estación La variable tot➢ia para calcular el total de producción de cada dia Le variable totObr para calcular el total de producción de cada obrero la variable totPlanta para calcular el total de producción de cada planta La variable totProd para calcular el total de producción de las 6 plantas h. Se declara el objeto objEm presa usando como base a la clase Ernpresa2; dicho objeto se crea e inicial iza mediante el constructor por defecto Empresa2O. c. Inicia ciclo FOR desde pla= o hasta 5 con illICM/lentOS de t. Inicia ciclo FOR desde est=o hasta 2 con incrementos de a. Inicia ciclo FOR desde obr=o hasta3 con incrementos de 1. Inicia ciclo FOR desde dia= o hasta 4 con incrementos de 1 a. Solicita Producción pla,est,obr,dia b. Lee. en prod[plaffest][obrlidiai 2. Fin del ciclo FOR la. Fin del ciclo FOR 2.. Fin del ciclo FOR d. Fin del ciclo FOR e. Se llama al método establecerProduccion(prod) del objeto objEmpresa: para colocar los valores de prod en el dato produccion. f. Llama al métalo obtenerProduccion0 del objeto objEm presa; para obtener el dato produccion y colocarlo en proda, que es corno se procesará de aquí en adelante en este método. g. Imprimir primer renglón del encabezado h. inicia totProd en o i. Inicia ciclo FOR desde pla = o hasta 5 con incrementos de 1 r. imprimir encabezado de planta 2. Inicia totPlanta en o 3. Inicia ciclo FOR desde est=o hasta 2 con incrementos de I


Prorjrarniscián urrantada a objetos apiesridu arrugar. 375 a. Imprimir encabezado de estación b. Inicia ciclo FOR desde obr=o bastas con incrementos de 1 t. Imprime 'O BRER02. obr 2. Inicia totObr en o 3. inicia ciclo SOR desde dia=o hasta 4 can incrementos de 1 a. Imprime proda[pia][est][obrj[dia] b. Incrementa totObr con proda[pla][est][obr][dia] 4. Fin del ciclo FOR 5. Imprime totObr c. Fin del ciclo FOR d. Inicia totEst en i1 e. Inicia ciclo SOR desde dia -o hasta 4 con incrementos de L Inicia Milla en 2. Inicia ciclo FOR desde obr=o bastas con incrementos de 1 a. Incrementa tot Dia con prodafplalIestKobr][dia] 3. Fin del ciclo FOR 4. Imprime totllia 5. Incrementa totEst con totllia f. Fin del ciclo FOR g. Imprime totEst h. Incrementa totPlanta con totat 4. Fin del ciclo FOR 5. Imprimir totPlanta 6. Incrementa totProd con totPlanta j. Fin del ciclo FOR h. imprime TotProd 1. Fin Método principal Fin de la Clase EjecutaF-mpresa2 Fin del algoritmo

*0=1111/1.Como ejercicios propuestos para este punto, se reomniendan, del capitulo 8; algunos de los ejercicios resueltos que no fueron incluidos en este punto; además m'os los ejercicios propuestos en dicho capitulo sobre arreglas tettadi me nsionaies.

Resumen del capítulo Conceptos que debe dominar 3 Diseño de algoritmosorientados a objetos usando Huellos unidimensionales, bid irn erusional es, tridimensionales y tetradimensionales.


Programación orientada a objetos usando herencia

15

Contenido 15.1 Herencia 15.2 Diseño del diagrama de clases con herencia 15.2.1 Superclases y subclases 15.3 Diseño de algoritmos 00 usando herencia 15.4 Ejercicios resueltos Ejercicios propuestos

Objetivo del capítulo En el capitulo anterior se aplicaron los arreglos unidimensionales. bidimensionales, tridimensionales s. tetradimensionales; en el diseño de algoritmos orientados a objetos. En este capitulo se estudia el cumcpto de herencia y se aplica en el diseño de algoritmos orientados a objetos.


ang Metodulogia de le Programación alentada a Ghettos 15.1 Herencia La idea fundamental de la programación orientada a objetos es identificar los obj presentes en nuestro problema y sus relaciones, para formar una jerarqula de objela algo similar a un árbol genealógico; es decir, primero identificar al objeto más genérí de la especie, y luego identificar otros objetos derivados de este primer objeto, y sucesivamente, de esos nuevos objetos identificar otros objetos derivados de efá Los objetos derivados son objetos descendientes que heredan las características comportamiento, de lo que se llama. objetos ancest ros (o sus ascendientes).

En cierta empresa se tienen empleados; los empleados se dividen en dos tipos: emplea por horas, a los que se les paga de acuerdo con el número de horas trabajadas y a una cu por hora. El otro tipo son los empleados asalariados, a quienes se les paga de acuerdo un sueldo fijo mensual. En este problema podemos identificar dos objetos. Un objeto es EmpleadoPorHoras, con los datos: nombreEmp Nombre del empleado. deptoEmp Departamento en el que labora. puestoEmp Puesto que desempeña. horasTrab Número de horas que trabajó. cuota lora Cuota que se le paga por hora. sueldoOnaHoras Sueldo quincenal del empleado por horas; calculado con hormq trabajadas v cuota por hora. Y el otro objeto es EmpleadoAsalariadu, con los datos: nom ti re Emp deptoEmp puestoEmp sueldoMensual sueldoOnaAsal

Nombre del empleado. Departamento en el que labora. Puesto que desempeña. Sueldo fijo mensual que se le paga. Sueldo quincenal del empleado asalariado; calculado con el sueldo mensual.

Podemos apreciar que los objetos EmpleadoPorHoras y EmpleadoAsalariado tienen en común los datos: nombreEmp, deptoEmp y puestoEmp. Ei resto de los datos son diferentes. Cuando se tiene una situación como la expuesta, podemos utilizar el mecanismo de herencia, mediante un proceso de abstracción en el que definimos un objeto más abstrae. to que contenga lo que es común a los demás objetos, para que, a partir de ese, derivar a los otros objetos mediante el mecanismo de herencia, como se muestra en el siguiente diagrama.


Pmgracnacian orientada a D4IPLOS asando herencia

379

ExpElca la .17rm 1e in71.77que -se deriva lit.", u bien, que "hereda de"; por ejemplo, que Empleado1 orHoras hereda de Empleado, y EmpleadoAsalariado hereda de Empleado. Se tiene el objeto más genérico; Enipleado, con los datas; nombre Era p dept o E mp pues t o Emp

Nombre del empleado. Departamento en el que 'labora. Puesto que desempeña.

Se tiene el objeto.. EmpleadoPorli oras, con los datos: horasTrab Número de horas que trabajó. cuotaHora Cuota que se le paga por hora. s ue iciaGnahl o ras Sueldo quincenal del empleado por horas. Y. mediante el mecanismo de herencia "hereda de" Empleado los datos de este, por tanto. no es necesario definirlos aqui. Y se tiene el objeto: EmpleadoAsalariado, con los datos: Sueldoldensual Sueldo fijo mensual que se ]e paga. sueldoOn aAs al Sueldo quincenal del empleado asalariado. Que mediante el mecanismo de herencia "hereda de" Empleado los datos de este, por tanto, no es necesario definirlos aqui. Con la jerarquia de objetos antes esquematizada, tenemos que el objeto EmpleadoPont oras es un objeto descendiente de Empleado, lo mismo el objeto EmpleadoAsalariado. también es un objeto descendiente de Empleado.


8110 Maladologia de la ProjeaFeauen ❑notada a Obiatos

Los objetos descendientes heredan las características y comportamiento, de lo que; llama objetos ancestros. Esto quiere decir que si tenemos el objeto Empleado oon los tos ya detallados; al definir el objeto EmpleadoPorHoras, este hereda todo lo que comía su ancestro Empleado, y sólo resta por definir lo que es específico del objeto Emplead Porlloras, que son los datos: horasTrah, cuotallora y sueldoQnaHoras. Es decir, que identificarse como descendiente de Empleado ya no es necesario definir las earacterist cas de Empleado, porque las hereda de este. Al definir el objeto EmpleadoAsalarlado„ este hereda los datos de su ancestru Ea picado, y sólo resta por definir lo que es específico del objeto EmpleadoAsalariado, que sueldoMensual y sueldoQnaAsal. En resumen, la programación orientada a objetos es el proceso de construir árbol' genealógicos para estructuras de datos. t :na de las casas más importantes que la progn mación orientada a objetos adiciona a los lenguajes tradicionales, es el mecanismo < herencia, mediante el cual tipos de datos heredan las características de tipos más simpii y más genéricos.

15.2 Diseño del diagrama de clases con herencia Ahora se debe dibujar el diagrama de clases, tomando como base el diagrama de jerarqu de objetos. elaborado lineas antes, y como ya se explicó. cada objeto identificado. representa mediante una clase; y utilizando el rectángulo para representar /as clases. tu queda el siguiente diagrama de clases.

Corno se puede observar. se he formado una jerarquia de clases, donde tenemos ur primera clase, la clase principal o más general: la clase Empleado, a la cual se le cona como la su pe rehuse. Luego. de la superclase Empleado se derivan dos clases, a las que


programación onentacle a obpstpu ~MIL, harenes 381

les llama subclases, porque son clases que se derivan de otra clase, éstas san: la clase EmpleadoPorHoras y la clase Empleadoiksidariado.

Nota: La flecha indicalue deylva de:o bien,quellereda de": por elempla. que la clase ErripleadoPorlioras I 'hereda de" Empleado. y la clase ErnpleadoAsata riado "hereda de' Empleada.

Y aplicando el concepto de diseñar la estructura de cada clase, nos queda el siguiente diagrama de clases.

Empleado)) a nombreEmp deptoEmp a puestoEmp

E)ecutaEmpleacion I

establecerNombreEmp( ) establecerDeptoEmp(1 estableterPuestErepII otitenerNombreEmpi) obtenerDeptoEmp(1 obtenerPuestoEmp( )

/

EmpleadoPorHoras1

N

EmpleadoAsalariado1

horaaTrab cuotaHora sueldoOnaHoras

Sueldoleensual SueldoGnaAsal

establecerHorasTrab() establecerCuotaHora( ) calcularSueldoQnaHoraS() obtenerSueldoanallores()

establecerSueldoMensuall ) calcularSueldoOnaAsal() obtenerSueldoanaAsal( )

Se ene e e controlador EjecutaEmpleadoii. la cual utiliza al modelo, que está formado par tres clases jerarquizadas:


382 Matodelogia de le Progrernaven Orientada a Objetas .

r. La clase Empleado"' que es la superclase o clase principal, que tiene los data nombreErnp, deptoEmp y pues. toEmp; y los métodos estableoerNombreEmp( es. tablecerDeptoEmp(), estableeerPuestoEmpO, obtenerNombreEmp< obtenerDeptoEmp() y obtenerEuestoEmpO: para establecer y obtener cada us de los datos, respectivamente. Empleado"' es la superclase que se usa para derivi subclases, a través del mecanismo de herencia; es por ello que a sus datos se 1 antepuso el símbolo • el cual indica que el dato es protegido (protected); los date deben ser protegidos para que se puedan heredar.

2. La clase EmpleadoPorllorast que es una subclase que se deriva de la s'inercias Empleado u, tiene los datos: horasTrab, ruotallora y suetloQmsHoras; ylos métodu establecerHorasTrab(), establecerCuotalloraa calcularSueldoQualloras0 obtenerSueldoQnalloras(); para establecer las horas trabajadas, establecer 1 cuota par hora, calcular el sueldo quincenal del empleado por horas y obten* el valor del sueldo quincenal respectivamente. Al derivarse de Empleadou EmpleadoPorHorast hereda los datos y métodos de Empleadott a través de mecanismo de herencia.

3. La clase EmpleadoAsalariadoi que es una subclase que se deriva de la supercla se Empleado'', tiene los datos: sueldollensual y suedoQnaAsal; y los método establecerSueldoldensuala calcularSueldoQnaAsal() y obtenerSueldoQnaAsalú para establecer el sueldo mensual, calcular el sueldo quincenal del empleado asala nado y para obtener el sueldo quincenal, respectivamente. Al derivarse de Emplea dou. EmpleadoAsalariadoi hereda los datos y métodos de Empleador' a través de mecanismo de herencia. 15.2.1 Supereisses y subclases

Las superclases no se usan para ser instanciadas, es decir, no se usan para genera objetos a partir de ellas. Las superclases se utilizan para derivar otras clases (subclases) formando jerarquías de clases a través del mecanismo de herencia. En nuestro ejem plo, Empleado"' es una superclase que se utiliza para derivar las subclases Emplea doPorHorast y EmpleadoAsalariador; en consecuencia, la clase Empleado'', no se us para generar objetos: 410 se generan objetos de las subclases EmpleadoPorHorasi EmpleadoAsalariadoi. Así, al generar un objeto de la clase EmpleadoPorliorast, tende la siguiente estructura:


Programación orierladA a opinas L'asna.] herencia 383

objEmpleadt) nombreEmp Juan dept oEmp Caballeros pue ato Emp Vendedor horasTrab 40 CuOtabiora 58.00 sueldoCinaHoras 2000.80 establecerNombreEmpt ) establecerDeptoEmp() establecerPuesterEmpt establecerHorasTrab( ) establecerCuotallora( ) calcularSueldoenaHoras obtenerNombreEnIp( ) obtenerDeptoEmpl obtenerPuestoEmp( ) obtenerSueldoOnaHoras( 1

f.xpticargitor Al crear .1=111. u instancia de la clase EmpleadoPorHorási, el objeto generado tiene los datos y maitudua dele clase EmpleadePorHorasi, y también, los datos y métodos de la clase Empleadott; porque al diseñar el diagrama de clases. existe una relación de herencia entre Empleado tt, que es la superclase y EmpleadoPorHurasi, que una subclase que se derive de Entpleadoit. Y al generar su objelo de la clase EmpleadoAsalariadot, tendrá le siguiente estructura:


384 Metectiogia be le Prograrnaoon Cherrrada a 1313,eros

oh] Empleado nombreEmp Mateo OeptoEmp Deportes PueetoEmp Jefe sueldoMensual 10000 . 00 suelchoOnaAsal SON .00 est ablecerNombreEmp ( ) est a blece rDeptoEmp ( ) establece rPuestoEmp ( ) establecerSueldoMenSual ( ) calcularSueldoCinaASal( ) obt enerNombreEmp ) obtenerDeptoEmp obtenerRuestoEmp ( I obtenerSueld0OnaAsal ( )

ell111411111Wí errar un o Meto o instancia de la clase EmpleadoAsalariadol, el objeto generado tiene los datos y métodos de la clase EmpleadoAsalariadoi, y también los datos y métodos dr la clase Empleador t.; porque al diseñar el diagrama de clases, existe una relación de herencia entre Empleadoii, que es la superelase y ErnpleadoAsalariadoi, que es una subclase que se deriva de Empleadoli. 15.3 Diseño de algoritmos DO usando herencia

he este punto se toma como base el diagrama de clases diseñado en el punto anterior y se procede a diseñar el algoritmo en pseudocódigo; es decir. se diseña la lógica de cada clase usando pseudocódigo, involucrando el concepto de herencia, a continuación se tiene el algoritmo. Algoritmo CALCULAR SUELDO DE VARIOS EMPLEADOS Clase Empleadol1 I. Declaraciones Datos


388 Mecodoogia da te Prograrnacoon Onereada a Obetos

5. Método

obtenerSueldoOnaHoras(): Real

a. return sueldoOnaHoras b. Fin Método obtenerSueldoOnaHoras Fin Clase EmpleadoPorHoras1 Clase EmpleadoAsalariado1 hereda de Empleado11 1. Declaraciones Datos

sueldoMensual: Real sueldoOnaAsal: Real 2. Método establecerSueldoMensual(sdo: Real) a. sueldoMensual sdo b. Fin Método establecerSueldoMensual 3. Método calcularSueldoOnaAsal() a. sueldoOnaAsal = sueldoMensual / 2 b. Fin Método calcularSueldoQnaAsal 4. Método obtenerSueldoOnaAsal(): Real a. return sueldoOnaAsal b. Fin Método obtenerSueldoOnaAsal Fin Clase EmpleadoAsalariado1 Clase EjecutaEmpleadol1 1. Método principal a. Declaraciones Variables nomEmp, depto, puesto: Cadena hrsTra, tipoEmp: Entero cuoHr, sdoMen: Real desea: Carácter b. DO 1. Imprimir Menu y solicitar tipo de empleado Tipos de empleado 1. Empleado por hOras 2. Empleado asalariado Teclee tipo: 2. Leer tipoEmp 3. Solicitar Nombre, departamento y puesto 4. Leer nomEmp, depto, puesto 5. IF tipoEmp . 1 THEN a. Crear objeto EmpleadoPorHoras1 objEmpleado = new EmpleadoPorHoras1(1

b. Solicitar número de horas trabajadas y cuota por hora


Preir3mscaóra anexada a 1:177.111[09 uaanee herencia 2137

C. Leer nrSTra, cuoHr d. Establecer ObjEmpleado.establecerNombreEmp(nomEmp) objEmpleado.establecerDeptoEmp(deptoy objEmpleado.establecerPuestoEmp(puest0) objEmpleadd.eStablecerHorasTrab(hrsTra) objEmpleade.eStablecerCuotaHora/cuoHrl e. Calcular objEmpleado.calcularSueldoOnaHorasI) f. Imprimir objEmpleade.ObtenerNombreEmp(1 ObjEMpleado.obtenerDeptoEmpI) ObjEmpleado.obtenerPuestoEmpO objEmpleado.obtenerSueldoGnaHorasll 6. ELSE a. Crear objeto EmpleadoAaalariadol ObjEmpleado = new EmpleadoAsalariadol(1 b. Solicitar sueldo mensual c. Leer sdoMen d. Establecer objEmpleado.establecerNombreEmpInomEmp} objEmpleado.establecerDeptoEmp(depiol objEmpIeado.establecerPuestoEmpIpuesto} obiEmpleado.establecerSueldoMensual(sdoMen) e. Calcular objEmpleado.calcularSueldoOnaAsalp f. Imprimir objEmpleadd.obtenernombreEmpI) oblEmpleadd.obtenerDeptoEmpp oblEmpleado.obtenerPoestoEmp() objEmpleado.obtenerSueldoUnaAsal() 7. VEME 8. Preguntar "¿Desea procesar otro empleado(SIN)7' S. Leer desea C. WMILE desea = "S' d. Fin Método principal Fin Clase EjeeutaEmpleadoll Fin

» EL

:

Eáié .elgoritnia hene cuatro clases, la superclase Empleadon. La superrtale no se usa para crear instancias u objetos; en consecuencia, solo se utilizará para derivar otras ciases a partir de ella. Es la a apervlase Empleado]] : t. Se declaran los datos que representan la estructura de le clase:


asa ro.tocinlogia de le Oroarenianion Orientada e Cluise.os nombreEmp para el nombre del empleado (e protegido para heredarlo) deptoEmp para el departamento del empleado le protegido para heredado) puestoEmp para el puesto del empleado (a protegido para heredado) 2. Método establecerNombreErnp(nom: Cadena) Recibe en el parámetro nom el valor que luego coloca en el dato nombreEmp. 3. Método establecerLteptoEmp(dep: Cadena) Recibe en el parámetro dep el valor que luego coloca en el dato deptoEmp. 4. Método establecerPuestoEmp(pite: Cadena) Recibe en el parámetro pue el valor que luego coloca en el dato puestoEmp. 5. Método obtenerNombreEmp)): Cadena Retorna nombreEmp 6. Método obtenerDeptoEmp(): Cadena Retorna deptoEmp 7. Método obtenerPuestoEmp(): Cadena Retorna puestoEmp Fin de la Clase Empleadoti En la Clase EmpleadoPorHorast hereda de Empleadon: Las palabras "hereda de" quieren decir que la clase EmpleadoPorHorasi se "deriva de" la superclase Emplea.doit; aplicando el mecanismo de herencia.

r. Se declaran los datos que representan la estructura de la clase: horasTrab para las horas trabajadas del empleado cuota Flora para la cuota por hora sueldoQna Horas para el suelda quincenal del empleado 2. Método establecerHorasTrab(horasTr: Entero) Recibe en el parámetro horas Cr el valor que luego coloca en el dato horasTrab. 3. Método establecerCuotaHora(cuoLaHr: Real) Recibe en el parámetro cuutaHr el valor que luego coloca en el dato cuotaHora. 4. Método calcularSueldoQnaHoras() Calcula d sueldo quincenal del empleado 5. Método obtenerSueldoQnaHoras(): Real Retorna sueldoQnalloras Fin de la Clase EmpleadoParl brasa En la Clase EmpleadoAsalariadoi hereda de Empleado][: Las palabras "hereda de" quieren decir que la clase Empleaduksalariadot se "deriva de" la superclase Empleado ii; aplicando el mecanismo de herencia

r. Se declaran los datos que representan la estructura de la clase: sueldotpaAsal para el sueldo quincenal del empleado sueldoMensual para el sueldo mensual del empleado 2. Método establecerSueldoMensual(sdo: Real) Recibe en el parámetro sdo el valor que luego coloca en el dato sueldoMensual. 3. Método calcularSueldoQnaAsal0


Pragrernawn oneniada a colean velando he enea 309

Calcula el sueldo quincenal del empleado 4. Método obtenerSueldoQnaAsa.101 Real Retorna sueldoQnaAsal Fin de la Clase Empleadonsalariadoi En la Clase EjecuraEmpleadott en el Método principal: a. Se declara: La variable nornEmp para leer el nombre del empleado La variable depto para leer el departamento del empleado fa variable puesto paro leer el puesto del empleado la variable tipoEmp para leer el tipo de empleado La variable hrsTra para leer las horas trabajadas La variable cuoHr para leer la cuota por hora La variable sdoMen para leer el sueldo mensual La variable desea para controlar el ciclo repetitivo b. Inicia ciclo DED, 1. Imprime el Menu v solicita el tipo de empleado Tipos de empleado a. Empleado por horas o. Empleado asalariado Teclee tipo: 2 Lee en tipoEmp 3. Solicita Nombre, departamento y puesto 4. Lee en nom Emp, depto, puesto 5. Si tipoEmp = r Entonces a. Se declara el objeto objEmpleado, 1152 ndo como base a la clase EmpleadoPorHoras!: dicho objeto se crea e inicialira mediante el constructor por defecto EmpleadoPorHora.s 10. b. Solicita atines° de horas trabajadas v cuota por hora c- lee en hrsTra, cuo Hr d. Sellar= al método establecerNombreEmp(nomEmp)delobjetoobj Empleado, para colocar el valor de nom Emp en el dato nombreEmp. Se llama al método establecer DeptoEmp(depto) del objeto objEmpleado. para colocar e/ valor de depto en el dato deploEmp. Se llama al método establecer PuestoEmp(puesto) del objeto objE.ropleado, para colocar el valor de puesto en el dato puestoEmp. Se llama al método establecerlIorasTrab(hrsTral dei objeto ohj Empleado, para colocar el valor de hrsTra en el dato horasTrab. Se llama al método estahleeerCuota Hora(cuoHr) del objeto obj Empleado, para colocar el valor de cuoHr en el dato cuota Hora. e. Se llama al método calcularSueldoQnaH oras() del objeto objEmpleado, para calcular e] sueldo quincenal. f. Se llama al III MEXiO obrenerNombreEmp() del objeto objEmpleado, para acceder e imprimir el valor del dato nornbreEMp.


39O matodoiogia da la Progeemacioa Domada a animes Se llama al método obtener IlleptoEmp() del objeto obj Empleado, pa ra acceder e imprimir el valor dei dato de.ptoEmp. Se llama al método obtenerPuestoEmpU del objeto objEmpleado, para acceder e imprimir el valor del dato puestoEmp. Se llama al método obtenerSueldoQnalloraso del objeto objEmpleado, para acceder e imprimir eI valor del dato sueldoQna Horas. 6. ELSE a. Se declara el objeto objEmpleado. usando como base a la clase EmpieadoAsa.lañado' dicho objeto se crea e in icializa mediante el constructor por defecto EmpleadoAsalariados(). b. Solicita sueldo mensual c. Lee en adoMen d. Sellamos] métodoestablecerNornbreErnp(nornEmp)del objeto objEmpleado, para colocar el valor de nomEmp en el dato nombreEmp. Se llama al método estahlecerDeptoEmp(depto) del objeto objEmpleado, para colocar el valor de depto en el dato deptoEmp. Se llama al método establecerPuestoEmptpuesto) del objeto objEmpleado, para colocar el valor de puesto en el dato puestoEmp. Se llama al método establecerSueldoMensuallsdoMen) del objeto objEmpleado, para colocar el valor de sdeMen en el dato sueldoMensual. e. Se llama a] método calcularSuelcloQnaAsal0 del objeto objEmpleado, para calcular el sueldo quincenal. f. Se llama al método obtenerNombreEmpO del objeto objEmpleado, para acceder e imprimir el salar del dato nombreEmp. Se llama al método obtenerDeptoEmp0 del objeto obj Empleado, para acceder e imprimir el valor del dato deptottmp. Se llama al método obsc-nerPuestoEmpo del objeto objEmpleado, para acceder e imprimir el valor del dato puestoEmp. Se llama al método obtenerSueldoQriaissal() del objeto objEmpleado, para acceder e imprimir el valor del dato sueldoQriaAsal. Fin del TE S. Pregunta "d Posea pmeasar otro erupSeadts(S/N}?" 9. Loe en desea la respuesta c„ Fin de] ciclo (WHILE. desea = "S"). Si se cumple regresa al DO; si no, se sale del ciclo. d. Fin Método principal Fin de la Clase EjecutaErn picado] Fin del algoritmo

Resumiendo: Cada vez que entra al ciclo procesa un empleado, pregunta si es empleado por horas o asalariado. Si el tipo de empleado es por horas. genera un objeto llamado objEmpleado, este objeto se generará tornando como base la subclase EmpleadoPorHortsst; misma que a su vez, hereda de Empleadoli, quedando un objeto con la siguiente estructura.


Programan:1On aventada a objetas usando herencia 391

DI)] Empleado nombreEmp Juan deptoEmp Caballeros puestoEmp Vendedor horasTrab 40 CuotaHora 50.00 sueldoOnaHoras 2000.00

establecerNombreEmp()) establecerDeptoEmp( ) establecerPuestoEmp() establecerliorasTrab{ ) establecerCuotaHora( ) calcularSueldoOnaHoraS ) abtenerNombreEmp( ) obtenerDeptoEmp obtenerhuestoEmp( obtenerSueldoOnaHoras()

F4 decir, con los datos y mĂŠtodos definidos tanto en la subclase EmpleadoPorliorasi, como los definidos en la clase Empleado ti. que es la superrlase de la cual hereda Ein picado Porttorast. Por el contrario, si el tipo de empleado es asalariado, genera un objeto llamado objEmpleado, este objeto se generarĂĄ tomando como base la subclase EmpleadoAsalariador, misma que a su vez, hereda de Empleado ti, quedando un objeto con la siguiente estructura.


392 Meted aagla de la Prtgramadan Chantada a Otaettal

oblEmpleedo

nombreEmp Juan

deptoEmp Caballeros puestoEmp Vendedor

sueldoMensual 5000.00

sueldoQnaAsal 2500.00 establecerNOmbreEmp() estableceffleptoEmp() establecereueStoemp() establecerSueldoMensual() calcularSueldoGnaAsal() obtenerNombreEmp0 obtenerpeptoEmp() obtenerPuestoEmp() obtenerSueldoanaAsal()

Es decir, con los datos y métodos definidos tanto en la subclase EmpleadoAsalarbuloi. como los definidos en la cta.. Empleado'', que es la superclase de la cual hereda ErnpleadoAsalaríadoi. 1 5.4 Ejercicios resueltos Ejercicio 114.1 Elaborar un algoritmo que ofrezca un menú de opciones, mediante el cual se pueda escoger calcular el área de las figuras geométricas: triángulo, cuadrado, rectángulo y círculo. Una vez seleccionada la opción, que permita solicitar y leer el nombre de la figura y los datas necesarios para calcular el área correspondiente e imprimir el nombre de la figura v el área. Aren de triángulo Rase a Altura 2 Arca de cuadrado 1.,ado2 Ares de circulo = 7trz Arca de rectángulo = Rase a Altura


394 Mecodcaogie se le Progrerbeción Drenada a Objetas

Se 1 112 'ene aa1 11 ase controlador EjecutaFigural, la cual utiliza al modelo, que está formado por cinco clases jerarquizadas: s. La clase Figura; que es la superclase o clase principal, tiene el dato nomFigura; y los métodos establecerNonsFigura0 y obtenerNomFigura(). para establecer y obtener el dato respectivamente. Figuras es la superclase que sólo se utiliza para derivar otras clases (subclases), a través del mecanismo de herencia; tso por ello que a su dato nomFigura se le antepuso el símbolo # el cual indica que el dato es protegido (protected); los datos deben ser protegidos para que se puedan heredar. 2. la clase Triangulo; que es una subclase que se deriva de la superclase Figura[ tiene los datos: baseTria, alturaTria y areaTria. y los métodos establecerltaseTria( 5. establecerAlturaTria(), calcularAreaTria() obtenerArcaTria(); para establecer la base, establecer la altura, calcular el área y obtener el valor del área del triángulo respectivamente. Al derivarse de Figuras, Triangulos hereda el dato y los métodos de Figuras a través del mecanismo de herencia, 3. La clase Cuadrados que es una subclase que se deriva de la superclase Figuras, tiene los datos: ladoCuad y areaCuad; y los métodos establecerLadoCuada calcularAreaCuadf y obtenerAreaCuad(); para establecer el lado, calcular el área y obtener el valor del área del cuadrado respectivamente. Al derivarse de Figuras, Cuadrados hereda el dato y los métodos de Figuras a través del mecanismo de herencia. 4. La clase Rectangulm que es una subclase que se deriva de la superclase Figuras. tiene los datos: baseRecta, alturaRecta y areaRecta; y los métodos establecerRaseRecta0, establecerAlturaRecta(), calcularÁreaRecta0 y obtenerAreaRecta(); para establecer la base, establecer la altura, calcular el área y obtener el valor del área del rectángulo respectivamente. Al derivarse de Figuras. Rectanguloi hereda el dato y los métodos de Figuras a través del mecanismo de herencia. 5, La clase Circulo' que es 1111d subclase que se deriva de la superclase Figuras, tiene las datos: radioCirc v areaCirc; v los métodos establemrRadioCirc(), calcularAreaCirc0 y obtenerAreaCiic(); para establecer el radio, calcular el área y obtener el valor del área del circulo respectivamente. Al derivarse de Figuras, Cirrulol hereda el dato y los métodos de Figuras a través del mecanismo de herencia, A continuación se tiene el algoritmo de la solución en pseudocódigo:

(Primero Icigato usted...después campare lo solución) Algoritmo AREAS FIGURAS GEOIAETRICAS Clase Figurar 1. Declaraciones Datos # nomFigura: Cadena


progremsoononenteen e obietoe usando hencmtr_ba 395 2. Método establecerNomFigura/nom: Cadena) a. nomFigura = nom h. Fin Método establecerNomFigura 3. Método obtenerNomFigura(): Cadena a. return nomFigura b. Fin Método OhtenerNOmFigura Fin Clase Figural Clase Triangulo1 hereda de Figural 1, DeClaraCiOneS Datos haseTria: Real alturaTria: Real areaTria: Real 2. Método estableCer5aSeTrialbaSe, Real) a. baseTria = base h. Fin Método establecerBaseTria 3. Método establecerAlturaTria/altura: Real) a. alturaTria = altura h. Fin Método establecerAlturaTria 4. Método calcularAreaTria(1 a. areaTria = (baseTria • alturaTria) / 2 h. Fin Método calCularAreaTria 5. Método obtenerAreaTria[1: Real a. return areaTria b. Fin Método obtenerAreaTria Fin Clase Triangul0] Clase Cuadrado] hereda de Figural 1. Declaraciones Datos ladoCuad: Real areaCuad: Real 2. Método estableCerl.adoCUadílado: Real.) a. ladoCuad = lado b. Fin Método establecerLadoCuad 3. Método CalcularAreaCuadl) a. areaCuad = PotenotailadoCuad, 2) b. Fin Método calCularAreaCuad


388 MuLadologia de le Prognwamn ONernade e übiews

Método obtenerAreaCuad(): Real a. return areaCuad b. Fin Método obtenerAreaCuad Fin Clase Cuadrados 4-

Clase Rectangulol hereda de Figural 1. DeCiaraciones Datos baSeRecta: Real alturaRecta: Real areaRecta: Real 2. Método establecerBaseRecta(base. Real) a. baSeRecta = base b. F411 Método establecerRaseRecte 3. Método establecerAlturaRecta(altura: Real) a. alturaRecta = altura 5. Fin Método establecerAlturaRecta 4. Método calcutarAreaRecta() a. areaRecta baseRecta • alturaRecta h. Fin Método calCularAreaRecta 5. Método obtenerAreaRectap: Real a. return areaRecta h. Fin Método obtenerAreaRects Fin Clase Rectangulol Clase Circulol hereda de Figura1 1. Declaraciones Datos radioCirc: Real areaCirc: Real 2. Método establecerRadioCirc(radio: Real) a. radioCirc = radio b. Fin Método establecerRadioCirc 3. Método calcularAreaCirc0 a. areaCirc = 3.1418 • Potencia(radiOCirC, 2) 6. Fin Método calcularAreaCirc 4. Método obtenerAreaCirc(): Real a. return areaCirc b. Fin Método obtenerAreaCirc Fin Clase Circulol


Programoci0o OriCoUld9 e Objetel: usondo herencia 397

Clase EjecutaFigural i. Método principal a. Declaraciones Variables nombre: Cadena opcion: Entero bes, alt, rad, lad: Real b. DO I. Imprimir MENU AREAS FIGURAS GEOMETRICAS I. TRIANGULO 2. CUADRADO 3. BECTANCULO 4. CIRCULO 5. FIN OPCION: 2. 3. 4. 5.

Leer opcion Solicitar Nombre de la figura Leer nombre SWITCH opcion I: a. Crear objeto Triangulol objFigura = nao, Triangulo10 b. Solicitar Base, Altura C. Leer tus, alt d. Establecer objFigura.establecerNomFiguralnombrey objFigura.establecerBaseTria(bas, objFigura.eStablecerA/turaTria(alt) e. Calcular ObjFigura.calCularAreaTria() f. Imprimir objFigura.obtenerNomFigura() objFigura.obtenerAreaTria(1 2: a. Crear objeta Cuadradol objFigura = new Cuadrado}{) D. Solicitar Lado c. Leer lad d. Establecer objFigura.establecerNomFigura(nombre) ob7Figura.establecertadoCuad(lad) e. Calcular objFigura.calcularAreaCuad(I f. Imprimir objFIgura.obtanerlomFigurali ObjFigura.obtenerAreaCuadll


asa meLonoiDgie de ia Pmgramman GIIBIltd11:1 a oblatos 3: a. Crear objeto Rectangulol ab] Figura = new Rectangulo b. Solicitar Base, Altura C. Leer bes, alt d. Establecer ob]Figura. establecerlomFigura (nombre) pbj Figura. establecerBaseRecta(baS) ab] Figura. establecerAlturaRectalalti e. Calcular objFigura.calcularAreaReCta( j f. Imprimir objFigura .obtenerNomFIgura( j objEigura.obtenerAreaReCta j 4:

a.

Crear objeto Circulol objFigura = new Circulol 5. Solicitar Radio c. Leer rad d. Establecer objFigura .estableoerNomFlgurat nombre.) ObjFigura .establecerRadioCirc(rad) e. Calcular obifigura. calcularAreaCirc/ f. Imprimir [lb] Figura obtenerNomFigurall din Figura. obtenerAreaCirc0 5. ENDSWITCH c. WHILE opcion e> 5 d. Fin Método principal Fin Clase EjecutaFigural Fin

EsVaWiirrn—olfene seis clases: la superclase Figura'. La superclase no se usa para crear instancias u objetos; en consecuencia, 54:utilizará para derivar otras clases a partir de ella. En la s-uperclase Figura': L Se declaran los datos que representan la estructura de la clase:

nomFigura para el nombre de la figura 2. Método estableeerNontFiguraf nom: Cadena) Recibe en el parámetro nom el calor que luego coloca en el dato nomFigura.

2. Método ohtenerNom Figu ra0: Cadena Retorna nomFigura Fin de la Clase Figura.' En la Clase Trianguloi hereda de Figura': Las palabras "hereda de" quieren decir que la clase Triangulot se 'deriva de" la su Figura': aplicando el MOCAll ismu de herencia.


Programa:son onemoda a objetas usando herencia 399 o. Se declaran los datos que representan la estructura de la clase; baseTria para la base del triángulo alturaTria para la altura del triángulo areaTria para el área del triángulo 2. Método establecerRaseTria(ba.se: Real) Recibe en el parámetro base el valor que luego coloca en el dato baseTria. 3. Método establecerAlturaTria(altura: Real) Recibe en el parámetro altura el valor que luego coloca en el dato alturaTria. 4. Método calcularAreaTria() Calcula el área del triángulo 5. Método obtenerAreaTrian: Real Retorna area'I'ria Fin de la Clase Triangulor En la Clase Cuadrados hereda de Figurar. Las palabras "hereda de" quieren decir que la clase Cuadrados se "deriva de° la superclase Figurar; aplicando el mecanismo de herencia. I. Se declaran los datos que representan la estructura de la clase: ladoCuad para el lado del cuadrado areaCuad para el área del cuadrado 2. Método establecerLadoCuad(lado: Real) Recibe en el parámetro lado el valor que luego coloca en el dato ladoCuad. 3. Método eakularAreaCuad() Calcula el área del cuadrado 4. Método obtenerAreaCuad(l: Real Retorna areaCuad Fin de la Clase Cuadrado] En la Clase Rectángulos hereda de Figuras: Las palabras "hereda de" quieren decir que la clase Reetangulos se "deriva de" la superclase Figuras; aplicando el mecanismo de herencia. t. Se declaran los datos que representan la estructura de la clase: baseRecta para la base del rectángulo alturaRecta para la altura del rectángulo areaRecta para el área del rectángulo 2. Método establecerBa.seReeta(base: Real) Recibe en el parámetro base el valor que luego coloca en el dato baseRecta. 3. Método establecerAlturaRecta(altura: Real) Recibe en el parámetro altura el valor que luego coloca en el dato alturaRecta. 4. Método calcularAreaRecta() Calcula el área del rectángulo g. Método otitenerAreaRecta(): Real Retorna ares Recta Fin de la Clase Rectangulol


40[7 Metodologe de la Programaciál Oneritscla a OtNelus En la Clase Circulo] hereda de Figuras:

Las palabras ''hereda de" quieren decir que la clase Circulo" se 'deriva de" la superclase Figura': aplicando el mecanismo de herencia. 1. Se declaran los datos que representan la estructura de la clase: radioCirc para el radio del circulo areaCirc para el área del círculo 2. Método establecerRadioCirc(radio: Real) Recibe en el parámetro radio el valor que luego coloca en el dato radioCirc, 3. Método calcularAreaCirc() Calcula el área del circulo 4- Método ohtenerAreaCirclj: Real Retorna areaCirc Fin de la Clase Circulo' En la Clase EjecutaFigural: en el Método principal: a. Se declara: La variable nombre para leer el nombre de la figura La variable opcion para leer la opción que desee La variable has para leer la base La variable alt para leer la altura La variable rad para leer el radio La variable lad para leer el lado b. Inicia ciclo DO i. Imprime el MENU de opciones a. Lee en opcion 3. Solicita el nombre de la figura 4. Lee en nombre s. Inicia SWITCH opcion 1: a. Se declara el objeto objFigura, usando como base a la clase Triangulol; dicho objeto se crea e inicializa mediante el constructor por defecto Triangulo10. b. Solicita Base v Altura c. Loe en bas y alt d. Se llama al método establecerNornFigura(nombre) del objeto objFigura. para colocar el valor de nombre en el dato nom Figura. Se llama al método establecerBaseTria(bas) del objeto objFigura, para colocar el valor de has en el dato baseTria. Se llama al método establecerAlturaTria(alt) del objeto objFigura. para colocar el valor de alt en el dato alturaTria. e. Se llama al método ealcularAreaTria0 del objeto objFigura. para calcular el área del triángulo. f. Se llama al método obtenerNomFigura() del objeto objFigura, para acceder e imprimir el valor del dato nomFigura. Se llama al método obtenerAreaTria(] del objeto objFigura, para acceder e imprimir el valor del dato areaTria. a: a. Se declara el objeto objFigura, usando como base a la clase Cuadrado ; d icbc objeto se crea e inicializa mediante el constructor por defecto Cuadrado


PrograrrOSCAM oroarrtacte e

utilesms usando herencia 401

h. Solicita Lado c. Lee en lad d. Se llama al método establecerNomFigura(nombre) del objeto objFigura, para colocar el valor de nombre en el dato nomFigura. Se llama al método estahlecerLadoCuad(lad) del objeto objFigura, para colocar el valor de lad en el dato ladoCuad. e. Se llama al método calcularAreaCuad0 del objeto objFigura, para calcular el área del cuadrado. L sellama al método obtenerNomFigura() del objeto ubj Figura, para acceder e imprimir el valor del dato nomFigura. Se llama al método obtenerAreaCuad() del objeto objFigura, para acceder e imprimir el valor del dato areaCuad. 3: a. Se declara el objeto ohj Figura, usando camobasea la clase Rer.tangulot. dicho objeto se crea e inicializa mediante el constructor por defecto Reetangulol(). b. Solicita Base y Altura c. Lee en has y alt d. Se llama al método establecerNomFigura(nornbre) del objeto objFigura, para colocar el valor de nombre en el dato nomFigura. Se llama al método estableterBaseReeta(bas) del objeto objFigura, para colocar el valor de bas en el dato baseRecta. Se llama al método establecerAlturaRecta(alt) del objeto objFigura, para colocar el valor de alt en el dato alturaRecta. e. Se llama al método calcula rArea Recta() del objeto objFigura, para calcular el área del rectángulo. f. Se llama al método obtenerNomFigura() del objeto objFigura, para acceder e imprimir el valor del dato nomFigura. Se llama al método obtenerAreaRecta0 del objeto objFigura, para acceder e imprimir el valor del dato areaRecta. 4: a. Se declara el objeto objFigura, usando como base a la clase Circulo 1; dicho objeto se crea e inicialira mediante el constructor por defecto CirculolO. b. Solicita el radio c. Lee en rad d. Se llama al método establecerNomFigura(nombre) del objeto objFigura, para colocar el valor de nombre mi el dato nomFigura. Se llama al método es-tablecerRadioCirc(rad) del objeto objFigura. para colocar el valor de rad en el dato radioCirc. e. Se llama al método calcularAreaCirc() del objeto objFigura, para calcular el área dei círculo. f. Se llama al método obtenerNomFigura() del objeto objFigura. para acceder e imprimir el valor del dato nomFigura. Se llama al método obtenerAreaCire() del objeto objFigura, para acceder e imprimir el valor del dato areaCirc. 6. Fin del SWITCH c. Fin del ciclo (WHILF. opcion o> 5). Si se cumple regresa al DO; si no. se sale del ciclo. d. Fin del Método principal Fin de la Clase EjecutaFigurai Fin del algoritmo


402 ~delego es ia Progran,acon Deenteda a 011eros

En el CD anexo. para el cap lulo 15, se encuentra el ejercicio resuelto: Ejercicio 15.42 En este ejemplo se elabora un algoritmo que soluciona el mismo problema del ejercicio anterior. pero ahora se le agrega que también calcule e imprima el perímetro de las figuras. Ejercicios propuestos , Nota: Recuerde que un algoritmo orientado a objetos se diseña en dos pasos: diseño del diagrama de clases y diseno del algo/lune en pseirdocOdiga i_ Elaborar un algoritmo (píe ofrezca un munir de opclones, mediante el cual se pueda

escoger calcular el volumen de las figuras geométricas: cubo, cilindro, cono y esfera. Una vez seleccionada la opción, que permita solicitar y leer el nombre de la figura y los datos necesarios para calcular el volumen correspondiente; e imprimir el nombre de la figura y el volumen. Volumen de cubo = Arista3 Volumen de cilindro - =4i Volumen de cono = nr, 3

Volumen de esfera = = ora 3

Debe ofrecer el siguiente mentí de opciones, donde está solicitando la opción deseada. VOLUMENES FIGURAS GEOMETRICAS t. CUBO 2. CILINDRO 3. CONO 4. ESFERA 5.FIN OPCION: La idea es que se u e una superclase Figura que contendrá el dato trombrev los métud os para establecerlo y obtenerlo. De esa superclase derivar cuatro subclases: Cubo. Cilindro, Cono y Esfera; en cada una de las cuales se heredarán el dato y los métodos de la superclase; además, cada subclase de éstas, deberá tener sus propios datos; y métodos para establecer los datos necesarios, calcular el volumen correspondiente


Programaron orientada a oblatos usando Serenos 402

y obtenerlo para imprimirlo. Asimismo, deberá haber una clase controlador que permita leer los datos y utilice el modelo para representar y solucionar el problema. 2. Elaborar un algoritmo que ofrezca un menú de opciones, mediante el cual se pueda escoger calcular el área de las figuras geométricas: trapecio, rombo v paralelogramo. Una vez seleccionada la opción, que permita solicitar y leer el nombre de la figura y los datos necesarios para calcular el área correspondiente; imprimir el nombre de la figura y el área. mea de trapecio - (BosemaYor

BaseMenor) Altura

Anee de rombo - DiagunalMayor x DinunalMenor 2

Aren de paralelogramo = Base o Altura Debe ofrecer el siguiente menú de opciones, donde está solicitando la opción de-

seada.

ÁREAS FIGURAS GEOMETRICAS 1.TRAPECIO 2. ROMBO 3. PARELOGRAMO 4. FIN OPCION: La idea es que se ust, una superclase Figura que contendrá el dato nombre y los métodos para establecerlo y obtenerlo. De esa superclase derivar tres subclases: Trapecio. Rombo y Paralelogramo; en cada una de las cuales se heredarán el dato y los métodos de la superclase; además, cada subclase de estas, deberá tener sus propios datos y métodos para establecer los datos necesarios. calcular el área correspondiente y obtenerla para imprimirla. Asimismo, deberá haber una clase controlador que permita leer los datos y utilice el modelo para representar y solucionar el problema.

3. Elaborar un algoritmo similar al anterior, solo que ahora, además del área; para cada una de las figuras, deberá calcular e imprimir el perímetro. Perimetro de trapecio - BaseMayor + BaseMenor + Perimetro de rombo = 4 u Lado Perímetro de paralelogramo e (2 o Base) -1- (2 o Altura)

Lado2

4. En una empresa automotriz se tienen tres tipos de empleados: Administrativos, Mecánico v Vendedores. En general, para todos los empleados se tienen los datos RFC (Registro Federal de Causantes), el nombre, el departamento v el puesto. En particular; para el empleado


404

ahnodologia eta la Pragrarnacán Onentacia a Ottawa

administrativo se tiene el dato sueldo mensual; para el mecánico se tiene el preck del trabajo, tantas veces como trabajos haya realizado; y para el vendedor se tiene el precio del auto, por cada auto que vendió. El sueldo quincenal se calcula: Para el administrativo, sueldo mensual entre 2. Para el mecánico, 4% del valor total de los trabajos realizados. Para el vendedor. el salario mínimo, más 2% del valor de la venta realizada. Elaborar un algoritmo que permita procesar los empleados de la empresa e imprimir el reporte: Reporte de nomina quincenal RFC

Nombre

Depilo.

Puesto Sueldo Quincena

XXXXX XXXI:30000=XXXX XXXXXXX XXXXXXX 99,999.99

XX:XXX XX)IXXICODCXXXXXX XXXXXXX XXXXXXX

99,999.99

Total 999 empleados

99,999.99

La idea es que se use una superclase Empleado que contendrá los datos RFC (Registro Federal de Causantes), el nombre, el departamento y el puesto; y los métodos para establecer y obtener cada uno de los datos. De esa superclase derivar tres subclases: EmpAdmvo, ErripMeeanico y EmpVendedor; en cada una de las cuales se heredarán los datos y los métodos de la superclase: además. cada subclase de éstas, deberá tener sus propios datos Y métodos para establecer los datos necesarios, calcular el sueldo quincenal correspondiente y obtenerlo para imprimirlo. Asimismo, deberá haber una clase controlador que permita leer los datos y utilice el modelo para representar y solucionar el problema_ 5. Elaborar un algoritmo similar al anterior, pero para una fábrica, en la cual se tienen dos tipas de empleados, directivos y técnicos; investigue o establezca los datos disponibles y la forma de pagarle a cada uno de los tipos de empleados, de manera que tenga una superclase y dos subclases que hereden de la superclase. 6. Elaborar un algoritmo similar al anterior, pero para un gobierno de un municipio o de un estado, en el cual se tienen dos tipos de empleados, de confianza y sindicalizados; investigue o establezca los datos disponibles y la forma de pagarle a cada tipo de empleado, de manera que tenga una superelase y dos subclases que hereden de la superclase. 7. Un banco tiene clientes que son inversionistas; unos poseen cuenta de ahorro, otros tienen inversión en pagaré, y otros, cuenta maestra. Cada tipo de inversión paga intereses de manera diferente; investigue o establezca cómo lo hará cada tipo de inver-


Programo:aún onentada a obieirs

narroido *35

sl6n. Elaborar un algoritmo que tenga una superclase Inversionista y tres subclases que hereden de la supenclase; una para cada tipo de inversinnicuentaélono, Pagare, CuentaMae_stra. Por cada tipo de cuenta se tiene el número de cliente, el nombre del cliente, el número de cuenta, el capital invertido, la tasa de interés anual y e] plazo de la inversión. Imprimir el siguiente reporte. Reporte de inversiones No. Cliente

Nombre

No. enema

Interés ganada

999999999 >00lX10011340001:XXICX 9999999

99.999.99

999999999 XXX1::(XXXX:11000,001X 9999999

99,99999

Total 999 inversiones

9949999

8. Un banco tiene clientes deudores: unos tienen préstamo personal; otros préstamo hipotecario, y otros, préstamo de automóvil. Cada tipo de préstamo paga intereses de manera diferente; investigue a establezca cómo lo hará cada tipo de préstamo. Elaborar un algoritmo que tenga una supetclase ClienteDeudor y tres subclases que hereden de la superclase; una pan cada tipo de préstamo: PrestarnoPersonal, PrestamoHipotecario, PrtamoAtito. Por cada tipo de préstamo se tiene el número de cliente, el nombre del diente, el número de cuenta, el capital prestado, la tasa de interés anual y e] plazo de la inversión. Imprimir el siguiente reporte; Reporte de dientes deudores No. Cliente

Nombre

No. Cuenta Interés a pagar

999999999 XXXXXXXXXXXXXXXXX

9999999

999999999 YYYYXXYYYYXYYYYYY

9999999

Total 999 clientes

Resumen del capítulo Conceptos que debe donunar 3 Herencia Diseño riel diagrama de ciases con herencia Superclases y subclases 3 Diseño de algoritmos 00 usando herencia

99,999.99

9939949 99,999,99


Programación orientada a objetos usando polimorfismo 1

6

Contenido 16.1 Polimorfismo 16.2 Diseño del diagrama de clases con polimorfismo 16.2.1 Clases abstractas 1 6.3 Diseño de algoritmos 00 usando polimorfismo 16.4 Ejercicios resueltos Ejercicios propuestos

tiw del capado En el capítulo anterior se estudió el concepto de herencia y se aplicó en el diseño de algoritmos orientados a objetos. En este capitulo se estudia el concepto de polimorfismo y se aplica en el diseño de algoritmos orientadas a objetos.


400

Metodologe de la Programar:en []remada e Oblatos

16.1 Polimorfismo Los métodos que hemos utilizado hasta este momento son métodos estáticos, se les denomina estáticos por el hecho de que el compilador asigna y resuelve todas las referencias en tiempo de compilación, es decir, los métodos se definen y se implementan en el mismo lugar, y asi actuarán siempre. Como hemos visto, objetos y métodos estáticos pueden ser una poderosa herramienta para organizar la complejidad de un programa, sin embargo, hay ciertos problemas que no se resuelven con este tipo de métodos. La solución es que las referencias se resuelvan en tiempo de ejecución; para hacerlo se requieren ciertos mecanismos; los lenguajes orientados a objetos proporcionan esos mecanismos a través del soporte de métodos abstractos (virtuales o dinámicusi. Los métodos abstractos (virtuales o dinámicos) implementara una muy poderosa herramienta de generalización llamada polimorfismo. Polimorfismo significa muchas formas, y es justamente eso; una forma de dar a un método un nombre que es compartido hacia arriba y hacia abajo en la jerarquia del objeto, donde cada objeto de la jerarquía implementa el método en forma apropiada a él mismo. la diferencia entre una llamada a un método estático y una llamada a un método abstracto, es la diferencia entre una decisión hecha ahora y una decisión que se hará después. Cuando se codifica un método estático, en esencia se está diciendo al compilador "tú sabes lo que yo quiero, llámalo". Por otro lado, al hacer una llamada a un método abstracto (virtual o dinámico), es como si se le dijera al compilador "todavía no sabes lo que quiero, cuando llegue el momento, pide la forma que corresponda". Al utilizar objetos potimórficus y métodos abstractos (virtuales o dinámicos), los usuarios del objeto pueden añadir características que se ajusten a sus necesidades. Esta nueva noción de tomar el código de alguien, añadiéndole nuevas funciones, sin modificar el código fuente es a lo que se le llama extensibilidad. La extensibilidad es una forma de crecer más, dada por la herencia; se hereda todo lo que el tipo ancestro tiene y se añaden las nuevas funciones que se necesiten. El acoplamiento tardío permite juntar el nuevo código con el viejo (el ya definido) en tiempo de ejecución, asi, la extensión del código existente es sin coseduras y no cuesta más en términos de rendimiento, que un viaje rápido al lugar donde están los métodos abstractos. 18.2 Diseño del diagrama de clases con polimorfismo En este punto y el siguiente se presenta el ejemplo de empleados que se hizo en el capitulo anterior, pero ahora dándole un enfoque apropiado para usar y explicar el concepto de polimorfismo. En este punto se diseña el diagrama de clases.


Programacion aiouada e onretos usando puhrourrissia 408 Diagrama de clases Em pie a do 1 2 f ab t rae t a) le nombreEmp le dept oEmp le puestoErep le sueldoOna

EyecutaEmpleadol2 1

establecerNombreEmpl

establecerDeptoErnp ( establecerPuestErrip( *calcular SueldoQna ( ) obtenerNOmbreEmp( ) ObtenerDeptOEDp( ) ObtenerPueSt0Emp( obtenerSueidOCIna( )

EmpleadoPorHoras 2

EmpleadnAsalariado2

horasTrati contaHora

Sueldoblensual

establecerHorasTrab( est arlecerenotaiiora { ) calcularSueldoOna()

est ablecer SueldoAtensual{ ) calcularSueldnOna( )

4110 . 0 Se ene a ase controlador EjecutaEmpleadon, la cual utiliza al modelo. que está formado por tres clases jerarquizadas.: t.

La clase Esnpleadoi2 que es la superclase o clase principal; se está definiendo como una clase abstracta, tiene los datos: nombreEmp, deptoEmp, puestriErnp v sueldoQna; a los que se les antepuso el símbolo * el cual indica que el dato es protegido (protected), losdatos deben ser protegidos para que se puedan heredar; y los métodos para establecer y obtener cada uno de los datos. En e/ caso de •calcularSueldoQua(); con el asterisco se define como un método abstracto, esto es, se define solo el encabezado del método; y cada objeto, de les subclases derivadas. lo implementaré de acuerdo con las especificaciones que le corresponda: El objeto generado con EmpleadoPorHoras2, la calculará utilizando horasTrab y euotaHora; mientras que el objeto generado con EmpleaclaAsalmiadrr2, lo calculará utilizando sueldoltensual Aplicando el polimorSsmol es decir, se tiene más de una forma Idos) de calcular el sueldo.


410 Matodalogia de la Programanán Orientada

2.

a Dejaos

La clase EmpleadoPorHoras2 que es una subclase que se deriva de la superclase abstracta Empleadora, tiene los datos: horasTrab y cuota Hora; y los métodos establecerHorasTrabf), establecerCuotaHora() y calcularSueldoQna(); para establecer las horas trabajadas, establecer la cuota por hora y calcular el sueldo quincenal respectivamente. Al derivarse de Empleadoig, EmpleadoPorHoras2 hereda los datos y métodos de Empleadolg, a través del mecanismo de herencia; y, corno está heredando el método abstracto 'calcularSueldoQnaQ, aquí lo implementa utilizando la forma de calcular el sueldo quincenal correspondiente al empleado por horas.

3- La clase EmpleadoAsalariado2 que es una subclase que se deriva de la superclase abstracta Empleadoig, tiene el dato sueldoMensual; así como el método establecerSueldoM ensual0 que establece el sueldo mensual y el método calcularSueldognal que calcula el sueldo quincenal. Al derivarse de Empleadora, EmpteadoAsalariadog hereda los datos y métodos de Empleadora, a través del mecanismo de herencia: y. como está heredando el método abstracto "calcularSueldoQna(), aqui lo implementa utilizando la forma de calcular el sueldo quincenal correspondiente al empleado asa • lariado. 16.2.1 Clases abstractas Las clases abstractas tienen al menos un método abstracto; los métodos abstractos se utilizan para implementar el polimortismo: polimorfismo significa muchas formas v se aplica cuando alguna tarea o función tiene más de una forma diferente de hacerse, veamos cómo se aplica esto en nuestro ejemplo: La función calcular sueldo quincenal tiene dos formas distintas de hacerse; una, para el empleado por horas, usando el número de horas trabajadas y cuota por hora; y la otra forma, para el empleado asalariado. con el sueldo mensual. En la clase Empleadora se define el método abstracto *calcularSiteldoQna(); el cual es un método abstracto, porque aquí no se implementa, sólo se define el encabezado del mismo. Luego, en cada una de las subclases EmpleadoPorHoras2 y EmpleadoAsalariadog: ambas,derivadasdeEmpleadoizseimplementaelmétodoabstracto"calcularSueldoQual 1. esto es porque al empleado por horas, el sueldo se le calcula de una forma v al empleado asalariado, se le calcula de otra forma. Así, el método •calcularSueldoQna() tiene dos formas distintas de implementarse, es por ello que en la superclase abstracta Impleadola se define pero no se implementa: r será en el momento de ejecución cuando se establezca la forma como se hará el cálculo del sueldo; dependiendo del tipo de empleado que se esté procesando; es decir, de una forma si es empleado por horas, o de la otra forma, si es empleado asalariado. Las clases abstractas son clases incompletas, por el hecho de que los métodos abstractos no se implementan en dichas clases, sino que se implementan en subclases derivadas de las clases abstractas; por lo cual, no se pueden crear instancias u objetos de las clases abstractas.

16.3 Diseno de algoritmos 00 usando polimorfismo En este punto se toma como base el diagrama de clases diseñado en el punto anterior y se procede a diseñar el algoritmo en pseudocodigo; es decir. se diseña la lógica de cada


ProgrsmacIón mentada a obleCos usando polirnorfisrna 411

clase usando pseudocódigo, involucrando el concepto de polimorfismo, a continuacion se tiene el algoritmo. Algoritmo CALCULAR SUELDO DE VARIOS EMPLEADOS Clase abstracta Empleado12 1. Declaraciones Datos •nombreEmp: Cadena •deptoEmp: Cadena e puestoEmp: Cadena A sueldoOna: Real 2. Método establecerNombreEmp(nom: Cadena) a. nombreEmp = nom b. Fin Método establecerNombreEmp 3. Método establecerDeptoEmp(dep: Cadena) a. deptoEmp = dep b. Fin Método establecerDeptoEmp 4. Método establecerPuestoEmp(pue: Cadena) a. puestoEmp = pue b. Fin Método establecerPuestoEmp 5. Método abstracto calcularSueldoOna() 6. Método obtenerNombreEmp(): Cadena a. return nombreEmp b. Fin Método obtenerNombreEmp 7. Método obtenerDeptoEmp(): Cadena a. return deptoEmp b. Fin Método obtenerDeptoEmp 8. Método obtenerPuestoEmp(): Cadena a. return puestoEmp b. Fin Método obtenerPuestoEmp 9. Método obtenerSueldoQna(): Real a. return sueldoQna b. Fin Método cbtenerSueldoOna Fin Clase Empleado/2 Clase EmpleadoPorHoras2 hereda de Empleado12 1. Declaraciones Datos horasTrab: Entero cuotaHora: Real


412

Metorloinge da la Programación Orientada a Ctietos

2. Menda establecerHorasTrab(horasTr: Entero) a. horasTrab = horasTr b. Fin Método establecerHorasTrab 3. Método establecerCuotaHora(cuotaHr: Real) a. cuotaHora = cuotaHr b. Fin Método establecerCuotaHors 4. Matado calcularSueldoOna() a. sueldoOna = horasTrab ^ cuotaHora b. Fin Método calcularSueldoOna Fin Clase EmpleadoPorHoras2 Clase EnpleadoAsalariado2 hereda de Empleado12 1. Declaraciones Datos sueldoMensual: Real 2. Método establecerSueldoMensual(sdo: Real) a. sueldoMensual = sdo b. Fin Método establecerSueldoMensual 3. Método calcularSueldoOnal) a. sueldoOna = sueldoMensual / 2 b. Fin Método calcularSueldoOna Fin Clase EmpleadoMalariado2 Clase EiecutaEmpleado12 1. Método principal a. Declaraciones Variables nOmEnp, depto, puesto: Cadena hrsTra, tipoEmp: Entero cuoHr, sdoMen: Real desea: Carácter b. DO 1. Imprimir Menu y solicitar tipo de empleado Tipos de empleada 1. Empleado por horas 2. Empleado asalariado Teclee tipo: 2. Leer tipoEmp 3. Solicitar Nombre, departamento y puesto 4. Leer nomEmp, depto, puesto 5. IF tipoEmp - 1 TREN a. Crear objeto EmpleadoPorHoras2 ob)Empleada = new


Programan:O

atentase e oblatos usando polirnorftorno 413

EmpleadoPorHoras2() b. Solicitar número de horas trabajadas y cuota por hora c. Leer hrsTra, cuoHr d. Establecer objEmpleado.establecerNombreEmp(nomEmp) objEmpleado.establecerDeptoEmp(depto) objEmpleado.establecerPuestoEmp(puesto) objEmpleado.establecerHorasTrab(hrsTra) objEmpleado.establecerCuotaHora(cuoHr) e. Calcular objEmpleado.calcularSueldoGna() f. Imprimir objEmpleado.obtenerNombreEmp() objEmpleado.obtenerDeptoEmpl) objEmpleado.obtenerPuestoEmp() objEmpleado.obtenerSueldoOna() 6. ELSE a. Crear objeto EmpleadoAsalariado2 objEmpleado = new EmpleadoAsalariado2() O. Solicitar sueldo mensual c. Leer sdoMen d. Establecer obJEmpleado.establecerNombreEmp(nomEmp) objEmpleado.establecerDeptoEmp(deptO) objEmpleado.establecerPuestoEmp(puesto) objEmpleado.establecerSueldoMensual(sdoMen) e. Calcular objEmpleado.calcularSueldoOna() f. Imprimir objEmpleado.obtenerNombreEmp() objEmpleado.obtenerDeptoEmp() objEmpleado.obtenerPuestoEmp() objEmpleado.obtenerSueldoCina() 7. EHOIF E. Preguntar "¿Desea procesar otro empleado(S/N)?" 9. Leer desea c. WHILE desea - 'S" d. Fin Método principal Fin Clase EjecotaEmpleadol2 Fin

Es e a gorttmo pene cuatro clases; la Clase abstracta Empleadoic. Que una clase es abstracta significa que tiene al menos un método abstracto, por tanto no se pueden crear instancias u objetos de dicha clase; en consecuencia solo se util huirá para derivar otras clases a partir de ella.


414 memdotogia de la Progremaeon orientada a Chet08

En la Clase abstracta Empleado12: 1. Se declaran los datos que representan la estructura de la clase: nombreEmp para el nombre del empleado (e protegido para heredarlo) deptoEmp para el departamento del empleado (e protegido para heredado) puestoEmp pata el puesto del empleado )d protegido para heredado) sueldoQna para el sueldo quincenal del empleado (a protegido para heredarlo) 2. Método establecerNombreEmp(nom: Cadena) Recibe en el parámetro nom el valor que luego coloca en el dato nombreEmp. 3. Método establecetDeptoEmp(dep: Cadena) Recibe en el parámetro dep el valor que luego coloca en el dato deptoEmp. 4- Método establecerPuestoEmp(pue: Cadena) Recibe en el parámetro pue el valor que luego coloca en el dato puestoEmp. 5. Método abstracto ealcularSueldoQnaO Se define el método abstracto calcularSueldoQna() para calcular el sueldo del empleado; abstracto significa que aqui se define solo el encabezado del método. esto es, sin acciones. Será en otro momento donde se implementará completamente el método, de acuerdo con el tipo de empleado que corresponda. Aplicando el polirnorfismo: es decir, se tiene más de una forma (dos) de calcular el sueldo. 6. Método obtenerNombreEmpO: Cadena Retorna nombreEmp 7. Método obtenerDeptoEmpO: Cadena Retorna deptoEmp 8. Método obtenerPuestoEmp(): Cadena Retorna puestoEmp g. Método obtenerSueldoQnaQ: Real Retorna sueldoQoa Fin de la Clase Empleado12

En la Clase EmpleadoPorHoras2 hereda de Empleatioi2: Las palabras "hereda de" quieren decir que la clase EmpleadoPorHoras2 se "deriva de" la superclase Emple,adot2; aplicando el mecanismo de herencia. 1. Se declaran las datos que representan la estructura de la clase: horasTrab para las horas trabajadas del empleado cuotallora para la cuota por hora 2. Método establecerHorasTrab(horasTr: Entero) Recibe en el parámetro horasTr el valor que luego coloca en el dato horasTrab. 3. Método establecerCuotallora(cuotaHn Real) Recibe en el parámetro anotan r el valor que luego coloca en el dato euotaHora 4. Método calcularSueldoQna0 Calcula el sueldo quincenal del empleado. Aquí se implementa el método abstracto en el que calcula el sueldo quincenal de la forma que le corresponde al empleado por horas; es decir, multiplicando número de horas por cuota por hora. Fin de la Clase EmpleadoPorHoras2


Progrorna

aen °rentada a aletas usando pormodisma

415

En la Clase EmpleadoAsalariado2 hereda de Empleadotaz Las palabras "hereda de" quieren decir que la ciase EmpleadoAsalariado2 se "deriva de' la superclase Empleadnia; aplicando el mecanismo de herencia. 1. Se declara el dato que representa la estructura de la clase: sueldoMensual para el sueldo mensual del empleado 2. Método establecerSueldoMensual(sdo; Real) Recibe en el parámetro sdo el valor que luego coloca en el dato sueldoMensual. 3. Método calcularSueldoQna() Calcula el sueldo quincenal del empleado. Aquí se implementa el método abstracto en el que calcula el sueldo quincenal de la forma que le corresponde al empleado asalariado; es decir. dividiendo el sueldo mensual entre 2. hin de la Clase EmpleaduAsalariado2 En la Clase EjecutaEmpleado12., en el Método principal: a. Se declara: La variable nomEmp para leer el nombre del empleado la variable depta para leer el departamento del empleado La variable puesto para leer el puesto del empleado La variable tipoEmp para leer el tipo de empleado La variable h rsTra para leer las horas trabajadas La variable cuoll r para leer la cuota por hora La variable sdoMen para leer el sueldo mensual La variable desea para controlar el ciclo repetitivo b. Inicia ciclo 1)0 1. Imprime el Menu y solicita el tipo de empleado Tipos de empleado I. Empleado por horas 2 Empleado asalariado Teclee tipo: 2. Lee en tipoEmp 3. Solicita Nombre, departamento y puesto 4. Lee en nomEmp, depto. puesto 5. Si tipoEmp = t Entonces a. Se declara el objeto objEmpleado, usando oonio base a la clase EmpleadoPor Horas2; dicho objeto se crea e inicializa mediante el constructor por defecto EmpleadoPorHoras20. b. Solicita número de horas trabajadas v cuota por hora c. Lee en hrs'Ira, emitir d. Se llama al métodoestableeerNombreErnp(nomEmp) del objeto objEmpleado. para colocar el valor de nomEmp en el dato nombreEmp. Se llama al método eslableeerDeptoEmp(depto) del objeto objEmpleado, para colocar el valor de repto en el dato deptoEmp. Se llama al método establecerPuestoEmp( puesto) del objeto objEmpleado, para colocar el valor de puesto en el dato puestoEmp.


418 Motuociunie de la ProgremeconOetantaria a aletas Se llama al método establecerHorasTrab(hrsTra) del objeto objEmpleado. para colocar el valor de hrsTra en el dato horasTrab. Se llama al método establecerCuotaHara(cuoHr) del objeto objEmpleado, para colocar el valor de cuoHr en el dato crucitaHora. e. Se llama al método ealcularSuelduQua() del objeto objEmpleado, para calcular el sueldo quincenal, como corresponde al empleado por horas. f. Se llama al método obtenerNombreErnp() del objeto objEmpleado, para acre. der e imprimir el valor del data nombreEmp. Sel lato a al método obtenerDeptoEmp(1 del objeto objEmpleado, para acceder e imprimir el valor del dato deptoEmp. Se llanta al método obtenerPuestoEmpO del objeto objEmpleado, para acceder e imprimir el valor del dato puestoEmp. Se llama al método obtenefSueldoQna() del objeto objEmpleado, para,

acceder e imprimir el valor del dato sueldoQna. 6-

PISE

a. Se declara el objeto °ME-repicado, usando como base a la clase EmpleadoAsalariadon; dicho objeto se crea e iniciaba mediante el constructor por dckct EmpleadoAsalariadnaO. b. Solicita sueldo mensual e, Lee en sdoMen d. Se Llama almétodo establecerNambreEmp(nomEmp) del objeto olajEmplead para colocar el valor de narnEmp en el dato nombreEmp. Se llama al método establecerDeptoEmP(deFto) del objeto dbilmIdead' para colocar el valor de depto en el dato deptoEmp. Se llama al método establecerPuestoEmp(puesto) del objeto objEmplead. para colocar el valor de puesto en el dato puestoEmp. Se llama a] método establecerSueldoMensual(sdoMen) del objet objEmpleado, para colocar el valor de sdoMen en el dato sueldoMensual. e. Se llama al método calcularSuekloQua() del objeto objEmpleado, par: calcular el sueldo quincenal, corno corresponde al empleado asalariado. f. Se llama al método oblenerNombreErnp() del objeto objEmpleado, par, acceder e imprimir el valor del dato nombreEmp. Se llama al método obtenerDeptoEmpOdel objeto objEmpleado,. para acetal e imprimir e/ valor de/ dato deptoEmp. Se llama al método obtenerPuestoEmp() del objeto objEmpleado, par, acceder e imprimir el valor del dato puestoEmp.

Se llama al método obtenerSueldoQoa() del objeto objEmpleado, par, acceder e imprimir el valor del dato sueldogna. 7. Fin del IF 8. Pregunta "LDese.a procesar otro erripleado(S,S)?" 9. Lee en desea la respuesta Fin del ciclo (WHILE desea = 'Si. Si se cumple regresa al DO; si no, se sale cie: ciclo. d. Fin Método principal Fin de la Clase EjevutaEmpleadoin Fin del algoritmo


Prograrnacion imanta. a utile:os usando ornmorforna 417

Nota; Este problema de empleados m el mismo que se planteó en el capitulo anterior. la diferencia corno se soluciona es que aciul, el dato sueldoOna está definido en la superclase abstracta Erripieado12, asimismo el método •calcularSueldognag. corso un método abstracto y el método obtenerSuel. doCinall. Que es método es abstracto significa que aqui está definido, pero no Implementado; y el cálculo del sueldo quincenal se realizará ya sea COTO está Implementado en la subclase Empleadoillorbloras7 o de biforme como está Implementado en la subclase frnpleadoAsalariado2, de acuerdo con el tipo de empleado que se esté procesando; aplicando el pollrnorfismo.

16.4 Ejercicios resueltos Ejercicio 16.4.1 Elaborar un algoritmo que ofrezca un menú de opciones. mediante el cual se pueda escoger calcular el área de las figuras geométricas: triángulo, cuadrado, rectángulo y circulo. Una vez seleccionada la opción, que permita solicitar y leer el nombre de la figura y los datos necesarios para calcular el área correspondiente e imprimir el nombre de la figura y el área. Area de triángulo =

Base x Altura 2

Área de cuadrado = Ladoz Ares de circulo = 7tr7 Ama de rectángulo = Base o Altura Debe ofrecer el siguiente menú de opciones, donde está solicitando la opción deseada:

ÁREAS FIGURAS GEOMETRICAS t. TRIANGULO 2. CUADRADO 3. RECIANGULO 4. CIRCULO 5. FIN OPCION:

A continuación se tiene el algoritmo de la solución. (Primero húgalo usted...después compare la solución)


418 relaindologia de le Progremarion Driernada e coims

Diagrama de clases ffigura3 {abstracta}

1 Elecuta r Figura31

nornFigura e arce establecerNomFigura() ottenernsmFzgura0 ,.calcularAreal. ) obtenerArea{) r/)7 Triangulo3

Cua drado3

baseTria alturaTria

ladoCuad

establecerneeeTria0 estanlecerAlturaTria I calcularAree(}

eeteniecerLadoCuad( I CalCuiarAreal 1

Rectangulc3

Circulo3

baseneet alta raRecte

radioCirc

establecerBaseRectaLl establecerAlturaRecta() calcularAreal }

establecerRadioCirc(1 calcularArea()

Se tiene a e as e controlador EjecutaFiguras, la cual utili2a al modelo, que está formado por cinco clases jerarquizadas: 1. La clase Figuras que es la superclase o clase principal; se esta definiendo como una clase abstracta, tiene el dato nornFigura; al que se le antepuso el simbolo r el cual indica que el dato es protegido (protected), Ios datos deben ser protegida,: para que se puedan heredar; y los métodos establecerNornFigura() y obtenerNomFigura(); para establecer y obtener el dato respectivamente. También tiene el dato crea y los métodos 'calculaeArea() y obtenerArea(); para calcular el área y obtener el valor del data respectivamente. En el casa de •calcularAreap; can eI asterisco se define corno


Programacw5n orlo-mí:Ida a ejes usando poknorfismci 419

un método abstracto, esto es, se define solo el encabezado del método; y nada objeto, de las clases derivadas, lo imptementará de acuerdo con las especificaciones que le corresponda: el objeto generado con Triangulo3, lo calculará de una forma; el objeto generado con Cuadrados, lo calculará de otra forma; el objeto generado con Rectángulos, lo calculará de otra forma v el objeto generado con Circulo3, lo calculará de otra forma. Aplicando el polimorfismo; es decir, se tiene más de una forma (cuatro) de calcular el área. 2. La clase Triangulo3 que es una subclase que se deriva de la superclase abstracta Figuras. tiene los datos; baseTria y alturaTria: v los métodos establecerklaseTria(), establece rAlturaTria() y calmilarArea(); para establecer la base, establecer la altura y calcular el área respectivamente. Al derivarse de Figuras, Triangulo3 hereda los datos y irritados de Figuras. a través del mecanismo de herencia; y, como está heredando el método abstracto "calcularArea(), aqui lo implementa utilizando la forma de calcular el área correspondiente al triángulo. 3. La clase Cuadrados que es una subclase que se deriva de la superclase Figuras, tiene el dato: /adoCuad; y los métodos estableeerladoCuad() y ealcularArea(); para establecer el lado y calcular el área respectivamente. Al derivarse de Figuras, Cuadrados hereda los datos y métodos de Figuras, a través del mecanismo de herencia; y, corno está heredando el método abstracto *calcularArea(), aqui lo implementa utilizando la forma de calcular el área corrospondiente al cuadrado. 4. La clase Recta ngulos que es una subclase que se deriva de la superclase Figura3, tiene los datos: baseRecta y alturaRecta; y los métodos establecerBaseRecta(), establecerAlture Recta() y ealcálarArea(); para establecer la base, establecerla altura, calcular el área respectivamente. Al derivarse de Figuras. Rectangulos hereda los datos y métodos de Figuras, a través del mecanismo de herencia; y, corno está heredando el método abstracto "calcularArea(), aqui lo implementa utilizando la forma de calcular el área correspondiente al rectángulo. 5- La clase Circulos que es una subclase que se deriva de la superclase Figuras. tima, el dato: radioCirc; y los métodos establecerRadioCi re() y ralee la rA rea (); para est a blecer

el radio y calcular el área respectivamente. Al derivarse de Figuras, Circulos hereda los datos y métodos de Figuras, a través del mecanismo de herencia; y, como está heredando el método abstracto *ea I eularArea(), aqui lo implementa utilizandola forma de calcular el área correspondiente al circulo. A continuación se tiene el algoritmo de la sol ucion 011 psetidocád igo. (Primero ¡ráyala usieci... después conipore la sniación) Algoritmo AREAS FIGURAS GEOMETRICAS Clase abstracta Figura3 1. Declaraciones Datos nomFigura: Cadena a arca: Real


420 Matadoiegia in la Propramacén Onentacla a Chinas 2. Método establecerNomFigura(nom: Cadena) a. nomFigura , nom b. Fin Método establecerNomFigura 3. Método obtenerhomFigura(1: Cadena a. return nomFigura b. Fin Método chtenerhomFigura 4. Método abstracto calcularArea() 5. Método obtenerArea(1: Real a. return area h. Fin Método obtenerArea Fin Clase Figura3 Clase Triangulo3 hereda de Figura3 1. Declaraciones Datos baseTria: Real alturaTria: Real 2. Método establecerBaseTria(base: Real) a. baseTria = base b. Fin MétOde establecerBase*ria 3. Método establecerAlturaTria(altura: Real) a. alturaTria = altura h. Fin Meterle eatablecerAlturaTria 4, Método CalCularArea(I a. crea = (baseTria * alturaTria) í 2 h. Fin Método calcularArea Fin Clase Triangulo3 Clase Cuadrado3 hereda de Figura3 1. Declaraciones Datos ladoCuad: Real 2. Método establecerLadoGuad)lado: leal) a. ladoCuad = lado b. Fin Método estableCerLadoCuad 3. Matado calcularArea)) a. ares) = ladeGual * ladoCuad b. Fin Método calcularArea Fin Clase Cuadrado3


Progrernecton orientada a abianG usaron polarinrilsrno 421

Clase Rectangulo3 hereda de Figura3 1. Declaraciones Datos baseRecta: Real alturaRecta: Real 2. Método establecer6aseRecta(base: Real) a. baseRecta = base b. Fin Método establecerEaseRecta 3. Método establecerAlturaRecta{altura: Real) a. alturaRecta = altura 1. Fin Método establecerAlturaRecta 4. Método calcularArea() a. arca = baseRecta • alturaRecta b. Fin Método calcularArea Fin Clase Rectangul03 Clase Circulo3 hereda de Figura3 1. Declaraciones Datos radioCirc: Real 2. Método establecerRadioCirc(radio: Real) a. radioCirc = radio b. Fin Método establecerRadloCirC 3. Método calcularArea() a. area = 3.1416 • (radioCirc • radioCirc) b. Fin Método calcularArea Fin Clase Circulo3 Clase ElecutaFigura3 1. Método principal a. Declaraciones Variables nombre: Cadena opcion: Entero bas, alt, rad, lad: Real P. 00 1. Imprimir MENÚ


422

Mea:dolo/11E1 do la Programar:ion Dnenza118 a OUieWs

AREAS FIGURAS GEOMETRICAS 1. TRIANGULO 2. CUADRADO 3. RECTANGULO 4. CIRCULO S. FIN OPCION: 2. 3. 4. 5.

Leer opcion Solicitar Nombre de la figura Leer nombre SWITCH opcion 1: a. Crear objeto Triangulo3 objFigura = new Triangulo3() b. Solicitar Base, Altura c. Leer bas, alt d. Establecer objFigura.eatablecerNomFigura(nombre) objFigura. establecerBaseTria(bas) objFigura.eStablecerAlturaTria(alt) a. Calcular objFigura.calcularArea() f. Imprimir objFigura.obtenerNomFigura() objFigura.obtenerArea() 2: a. Crear objeto Cuadrado3 objFigura = new Cuadrado3() b. Solicitar Lado c. Leer lad d. Establecer objFigura.establecerNomFigura(nombre) objFigura.establecerLadOCuad(lad) e. Calcular objFigura.calcularArea() f. Imprimir objFigura.obtenerNomFigura() objFigura.obtenerArea() 3: a. Crear objeto Rectangulo3 objFigura= new Rectangulo3() b. Solicitar Base, Altura c. Leer bas, alt d. Establecer objFigura.establecerNomFigura(nombre) objFigura.establecerBaseRecta(bas) objFigura.establecerAlturaRecta(alt) e. Calcular objFigura.calcularArea() f. Imprimir objFigura.obtenerNomFigura() objFigura.obtenerArea()


Frograrrackor. (nen:ella a DbiElág usando poilmorhsmo 423

41 a, Crear objeto Circulo3 objFigura II naw Ciroulo3() b, Solicitar Radio e. Leer red d. Establecer objFigora.establecerNomFigura(nombrol objFigura,estableceraadioCirc(rad) e. Calcular objFigura,coloularArea() f. imprimir objFigora,obtenerNomFigora() objFigura,obtonerAreal)

6. EMOSWITCH c. WHILE opcion e> 5

d. Fin Método principal Fin Clase E)ecetaFigera3 Fin

Este gontme t ene seis ciases; la Clase abstracta Figura3. Que una clase es abstracta significa que tiene al menos un método abstracto, por tanto no se pueden crear instancias u objetas de dicha clase; en consecuencia solo se utilizará para derivar otras clases a partir de ella. En la Clase abstracta Figura3: L. Se declaran los datos que representan la estructura de la clase: nomFigura para el nombre de la figura arca para el área de la figura 2. Método estableeertiornFigura(num: Cadena) Recibe en el parámetro room el valor que luego coloca en eI dato norriFi gura. 3. Método obtenerNomFiguraQ: Cadena Retorna nom Figura 4. Método abstracto calcula rAreao Se define el método abstracto calcularArea() para calcular el área de la figura; abstracto significa que aqui se define solo el encabezado del método, es decir, sin acciones. Será en otra momento donde se implementará completamente el método, de acuerdo con la figura que corresponda. Aplicando el polirnorfismo; es decir, se ricnc más de. una forma (cuatro) de calcular el área. 5. id &Endo obtenerArea(): Real Retorna arca Fin de la Clase Figura2 En la Clase Triangulo3 hereda de Figura3: Las palabras "hereda de" quieren decir que la clase Triangulce se "deriva de° la buperelow Figura3; aplicando el mecanismo do herencia. t. Se declaran los datos que representan la estructura de la clase:


4e4 materlologie de la 1.raggarcersen Chantada a Obiatos baseTria para la base del triángulo alturaTria para ]a altura del triángulo 2. Método establecerBaseTria(hase: Real) Recibe en el parámetro base el valor que luego coloca en el dato baseTria. 3. Método establecerAlturaTria(alturá: Real) Recibe en el parámetro altura el valor que luego coloca en el dato alturaTria. q. Método caJcularAreaLl Calcula el área. Aqui se implementa el método abstracto en el que calcula el área de la forma que le corresponde a] triángulo; es decir, multiplicando base por altura y dividiendo entre 2. Fin de la Clase Triangulo3 En la Clase Cuadrado) hereda de Figura3: Las palabras 'hereda de- quieren decir que la clase Cuadrado3 se 'deriva de" la superelase Figura); aplicando el mecanismo de herencia. t. Se declaran los datos que representan la estructura de la clase: kaitiCuad para el lado del cuadrado 2. Método establecerLadoCuad(lado: Real) Recibe en el parámetro lado el valor que luego coloca en el dato ladoCuad. 3. Método calcularAreát) Calcula el área. Aqui se implementa el método abstracto en el que calcula el área de la forma que le corresponde al cuadrado, es decir, elevando el lado al cuadrado. Fin de la Clase Cuadrado3 En la Clase Rectangulo3 hereda de Figura3; tau palabras "hereda de' quiere/1 decir quela clase Rectangulo3 se "deriva de" la superelase Figura3; aplicando el mecanismo de herencia. i. Se declaran los datos que representan la estructura de la clase: base Recta para la base del rectángulo alturaRecta para la altura del rectángulo 2. Método establecerBaseRecta(base: Real} Recibe en el parámetro base el valor que luego coloca en el dato base Recta. 3. Método establecerAlturaRectaialtura: Real) Recibe en el parámetro altura el valor que luego coloca en el dato alturaRecta. 4. Método calcularAreat) Calcula el área. Aquí se implementa el método abstracto en el que calcula cl área de la forma que le corresponde al rectángulo: es decir, multiplicando base por altura. Fin de la Clase Rectangulo3 En la Clase Circulo3 hereda de Figuras; Las palabras "hereda de" quieren decir que la clase Cinzulo3 se "deriva de- la superclase Figura3; aplicando el mecanismo de herencia. 1. Se declaran los datos que representan la estructura de la clase:


Pingrama.on orientada a oblatos usando pahrnorristrio 425

radioCirc para el radio del circulo 2. Método estahlecerRadioCirc(radio: Real) Recibe en el parámetro radio el valor que luego coloca en el dato radioCire. 3. Método calcularArea0 Calcula el área. Aquí se implementa el método abstracto en el que calcula el área de la forma que le corresponde al círculo: es decir, multiplicando PI por radio al cuadrado. Fin de la Clase Circulo3 En la Clase Ejecuta Figura3i en el Método principal: a. Se declara: La variable nombre para leer el nombre de la figura La variable opcion para leer la opción que desee La variable bas para leer la base La variable alt para leer la altura La variable rad para leer el radio la variable lad para leer el lado h. Inicia ciclo DO t. Imprime el MENII de opciones 2. Lee en opcion 3. Solicita el nombre de la figura 4. Lee en nombre s. Inicia SINTTCH opcion : a. Se declara el objeto objFigura, usando corno base a la clase Triangulo3; dicho objeto se crea e inicialiati mediante el constructor por defecto Triangulo30. b. Solicita Base y Altura c. Lee en bas y alt d. Se llama al método e.stablecerNomFigura(nombre) del objeto ubjFigura, para colocar el valor de nombre en el dato nomFigura. Se llama al método establecerBaseTria(bas) del objeto objFigura, para colocar el valor de bas en el dato baseTria. Se llama al método establecerAlluraTria(alt) del objeto objFigura, para colocar el valor de alt en el dato alturaTria. e. Se llama al método calcularArea() del objeto objFigura, para calcular el área del triángulo. f. Se llama al método obtenerNomFigura() del objeto obj Figura, para acceder e imprimir el valor del dato nomFigura. Se llama al método obtenerArea() del objeto objFigura, para acceder e imprimir el valor del dato arca. a: a. Se declara el objeto objFigura, usando como base a la clase Cuadrado3; dicho objeto se crea e inicializa mediante el constructor por defecto Cuadrado30. h. Solicita Lado c. lee en lad d. Se llama al método establecerNomFigura(nom bre) del objeto objFigura, para colocar el valor de nombre en el dato nomFigura.


426 hilesedoidga de la Progremacon e:nem/Ida a

❑Metas

Se llama al método establecerLadoCuad(lad) del objeto objFigura, para colocar el valor de lad en el dato ladoCuad. e. Se llama al método calcularArea() del objeto objFigura, para calcular el área del cuadrado. f. Se llama al método obtenerNomFigura() del objeto objFigura. para acceder e imprimir el valor del dato nomFigura. Se llama al método obtenerArea() del objeto objFigura, para acceder e imprimir el valor del dato aren. 3: a. Se declara el objeto objFigura, usando como base a la clase Rectanguloy. dicho objeto se crea e inicializa mediante el constructor por defecto Rectan8111030. b. Solicita Base y Altura c. Lee en bas y ah d. Se llama al método establecerNomFigura(nombre) del objeto objFigura. para colocar el valor de nombre en el dato nomFigura. Se llama al método establece_rFlaseRecta(bas) del objeto objFigura, para colocar el valor de bas en el dato baseRecta. Se llama al método establererAlturaRecta(alt) del objeto objFigura, para colocar el valor de alt en el dato alturaRecta. e. Se llama al método calcularArea() del objeto objFigura. para calcular el área del rectángulo. f. Se llama al método obtenerNomFigu ra() del objeto objFigu ra, para acceder e imprimir el valor del dato nomFigura. Se llama al método obtenerArea() del objeto objFigura, para acceder e imprimir el valor del dato ama. 4: a. Se declara el objeto objFigura. usando como base a la clase Circulo3; dicho objeto se crea e inicializa mediante el constructor por defecto Cireulo30. b. Solicita el radio c. Lee en rad d. Se llama al método establecerNomFigura(nombre) del objeto objFigura, para colocar el valor de nombre en el dato nomFigura. Se llama al método establecerRadioa re( rad) del objeto objFigura. para colocar el valor de rad en el dato radioCire. e. Se llama al método calcularArea() del objeto objFigura, para calcular el área del círculo. f. Se llama al método obre nerNomFigura() del objeto objFigura. para acceder e imprimir el valor del dato nomFigura. Se llama al método obtenerArea( del objeto objFigura, para acceder e imprimir el valor del dato orea. á. Fin del SWITCH c. Fin del ciclo (WHILE opcion s, 5). Si se cumple regresa al IX); si no, se sale del ciclo. d. Fin del Método principal Fin de la Clase EjecutaFigura3 Fui del algonimo


Peogremacien ['mesnada a obreras ksantle polimerfisrno 427

Nota: Este problema de áreas de figuras geométricas es el MISMO que se planted en el caprrulo anterior, la oiferencla como se sofisclona es que aquí, el dato afea está definido en la superclase abstracta Ffigura3,asUrdsrma el método •calculariSreag.corno un método abstracto y el método obtenerArea.g. Que el método es abstracto significa que aqui está definido, pero no implementado: y el cákulo del área se realtrárá ya sea como esta implementado en la subela se Trlangu Ica.Cuadrado 3,11ectangulu3 o dele forma como está implementado en la subclase Clmulo3, de acuerdo con el Upo de figura que se está procesando; aplicando el eofirnornsmo.

En el CD anean, pera el capitulo in, se encuentra el ejercicio re.stiolto: Ejercicio 18.4.2 En este ejemplo se elabora un algoritmo que soluciona el mismo problema del ejercicio anterior, pero ahora se le agrega que también calcule e imprima el perímetro de [as figu ras.

jercicios proueat.osj_ Nata: Remar-de que un algoritmo orientado e objetos se diserta en dos pasos: diseño del diagrama de dases y diSINO del algo/lancen oseudocodigo.

1. Elaborar un algoritmo que ofrezca un menú de opciones. mediante el cual se pueda escoger calcular el volumen de las figuras geumétricau: cubo, cilindro, cono y esfera. Una vez seleccionada ]a opción, que permita solicitar y leer el nombre de la figura y los datos necesarios para calcular el volumen correspondiente, imprimir el nombre de la figura y el volumen. Volumen de cubo = Arista, Volumen de cilindro = nr, la Volumen de cono = 1 msroh 3 Volumen de esfera =

4

7Cta

Debe ofrecer el siguiente menú de tipcionits. donde está splicitandu la ..pricul dr, suda.


422 Metuffelopa 0e e PnIgramnuon Clemteda e Obietus

VOLUMENES FIGURAS GEOMETRICAS 1.CUBO 2.CILINDRO 3.CONO 4. ESFERA 5.FIN OPCION: La idea es que se use una superubSC abstracta Figura que contendrá el dato nombre v los métodos para establecerlo y obtenerlo; además el dato volumen, un método abstracto para calcular el volumen y un método para obtenerlo e imprimirlo. De esa superclase derivar cuatro subclases: Cubo, Cilindro, Cono y Esfera; en cada una de las cuales se heredarán los datas y los métodos de la superclase Figura: cada subclase de éstas, deberá tener sus propios datos y los métodos necesarios para establecerlos: además del método calcular el volumen de la figura correspondiente. En virtud de que calcular volumen es un método abstracto heredado de la superclase abstracta Figura. cada una de los subclases derivadas, lo deberá implementar de acuerdo con la forma que le corresponda; aplicando el polimorfismo. 2.

Elaborar Un algoritmo que ofrezca un menú de opciones. mediante el cual se pueda escoger calcular el área de las figuras geométricas: trapecio, rombo. y paralelogramo. Una vea seleccionada la opción, que permita solicitar y leer el nombre de la figura y los datos necesarios para calcular el área correspondiente; e imprimir el nombre de la figura y el área. Arca de trapecio - (BaseMayor + Ba.seMenor) Altura 2

Arco de rumbo -

DiagonalMayor DiagonalMenor 2

Area de paralelogramo = Base x Altura

Debe ofrecer el siguiente menú de opciones, donde está solicitando la opción deseada. ARIAS FIGURAS GEOMETRICAS t. TRAPECIO 2. ROMBO 3.PARELOGRAMO 4- FIN O F'CI ON:


Prograrnauon onentoda a oblotbs usando polimorfismo 429

La idea es que se use una superclase abstracta Figura que contendrá el dato nombre los métodos para establecerlo y obtenerlo; además el dato área, un método abstracto para calcular el área y un método para obtenerlo e imprimirlo. De esa superclase derivar tres subclases: Trapecio, Rombo y Paralelogramo; en cada una de las cuales se heredarán los datos v los métodos de la superclase; cada subclase de éstas, deberá tener sus propios datas y los métodos necesarias para establecerlos; además del método calcular el área de la figura correspondiente. En virtud de que calcular área es un método abstracto heredado de la superclase abstracta Figura, cada una de los subclases, lo deberá implementar de acuerdo con la forma que le corresponda; aplicando el polimorfismo. Elaborar un algoritmo similar al anterior, sólo que ahora, además del área; para cada una de las figuras, deberá calcular e imprimir el perimetro. Perímetro de trapecio = BaseMayor BaseMenor + Lado! + Lado2 Perímetro de rombo = 4 a lado Perímetro de paralelogramo (2 e Base)

(a %

Altura)

Ahora en la superclase abstracta Figura. además de lo del problema anterior, se tendrá el dato perímetro. el método abstracto calcular perímetro y un método para obtenerlo e imprimirlo; y. en virtud de que calcular perímetro es un método abstracto heredado de la superclase abstracta Figura, cada una de los subclases lo deberá implementar de acuerdo con la forma que le corresponda; aplicando el polimorfismo. 4. En una empresa automotriz hay tres tipos de empleados: Adnainistrativos. Mecánicos y Vendedores. En general, para todos los empleados se tienen los datos RFC (Registro Federal de Causantes), el nombre, el departamento y el puesto. En particular; para el empleado administrativo se tiene el dato sueldo mensual; para el mecánico se tiene el precio del trabajo, tantas veces como trabajos haya realizado; y para el vendedor se tiene el precio del auto, por cada auto que vendió. El sueldo quincenal se calcula: Para el administrativo, sueldo mensual entre 2. Para el mecánico, 4% del valor total de los trabajos realizados. Para el vendedor, el salario minina°, más z% del valor de la venta realizada. Elaborar un algoritmo que permita procesar los empleados de la empresa e imprimir el reporte:


439 Meendalogia de la ProgrernaLlárl Orientada a Cepatus

Reporte de nomina quincenal RPC

Nombre

Depto.

Puesto Sueldo Quincena

XXXXX XXXXIOCXXXXXXXXX XXXIMCXX XXXXXXX 99,999.99 XXXXX XXXXXXXXXXXXXXX XXXXXXX XXXXXXX 99,999.99 -MOGO( XXXXXXXXX>DZXXXX XXXXXXX XXXXXXX 99.999.99 Total 999 empleados

99,999.99

La idea es que se use una superclase Empleado que contendrá los datos RFC (Registro Federal de Causantes), el nombre, el departamento y el puesto; y los métodos para establecer y obtener cada uno de los datos; además el dato sueldo quincenal, un método abstracto para calcular el sueldo quincenal y un método para obtenerlo e imprimirlo. De esa superclase derivar tres subclases: EmpAdmvo, EmpMecanico EmpVendedor; en cada una de las cuales se heredarán los datos y los métodos de la superclase; cada subclase de éstas, deberá tener sus propios datos y los métodos necesarios para establecerlos; además del método calcular el sueldo quincenal del empleado correspondiente, En virtud de que calcular sueldo quincenal es un método abstracto heredado de la superclase abstracta Empleado, cada una de las subclases, lo deberá implementar de acuerdo con la forma que le corresponda; aplicando el polimodismo. 5. Elaborar un algoritmo similar al anterior, pero para una fábrica, en la cual se tienen dos tipos de empleados; Directivos y Técnicos; investigue o establezca los datos disponibles y la forma de pagarle a cada tipo de empleado, de manera que tenga una superclase y dos subclases que hereden de la superclase. 6. Elaborar un algoritmo similar al anterior, pero para un gobierno de un municipio o de un estado, en el cual se tienen dos tipos de empleados; de confianza y sindicalizados; investigue o establezca los datos disponibles y la forma de pagarle a cada tipo de empleado, de manera que tenga una superclase y dos subclases que hereden de la superclase. 7. Un banco tiene clientes que son inversionistas; unos poseen cuenta de ahorro, otros tienen inversión en pagaré y otros poseen cuenta maestra. Cada tipo de inversión paga intereses de manera diferente; investigue o establezca como lo hará cada tipo de inversión. Elaborar un algoritmo que tenga una superclase Inversionista y tres subclases que hereden de la superclase; una para cada tipo de inversión: CueotaAhorro, Pagare, CuentaMaestra. Por cada tipo de cuenta se tiene el número de cliente, el nombre del cliente, el número de cuenta, el capital invertido, la tasa de interés anual y eI plazo de la inversión. Imprimir el siguiente reporte.


Pf.ogran-raciónanentatia a ociares usando rolirnortsrna 401

Reporte de inversiones No. Cliente

Nombre

999999999 XXXX3OIXXXXXXXXXXX

999999999

•••

999999999 ›Dev.300=XXX-XXXXXX

No. Cuenta

Interés ganado

9999999 9999999

99.999.99 99,999.99

9999999

Total 999 inversiones

99,999.99 99.999.99

La idea ea que se aplique el polimorlismo en calcular interés ganada; esto ea, que en la superclase se tenga el dato interesGanado y un método abstracto que lo calcule; y en cada subclase CuentaAnorto, Pagare, CuentaMaestra; se implementará de acuerdo can la forma que le corresponda calcular el interés ganado. 8. Un banco tiene clientes deudores; anos tienen préstamo personal; otros, préstamo hipotecario, y otros, préstamo de automóvil. Cada tipo de préstamo paga intereses de manera diferente; investigue u eslabletca afama lo hará cada tipo de préstamo. Elaborar un algoritmo que tenga una superclase Clientellteudor y tres subclases que hereden de la superclase; una para cada tipo de préstamo; PrestaitioNtsonal. PrestatuoIlipoteraric, PrestamoAutn. Pne cada tipo de prési amo se tiene el iininere de cliente, el nombre del cliente. el mimen, de cuenta. el capital prestado, la tasa de interés anua/ y el plazo de la inversión. Imprimir el siguiente reporte: ~orle de dientes deudores

Nombre

No. Cliente 999999999 999999999

XXX X X X XXX XXXXXXILX NYJLXXXXXXXXXX.XXXX

999999999 Total 999 clientes

No. Cuenta

Enteres a pagar

9999999 9999999

99,999-99 99,999.99

9999999

99,999.99

99,999.99

La idea es que se aplique el polimorfismo en calcular interés a pagar; esto es, que en la superclase se tenga el data luteresAPagar y un método abstracto que lo calcule; y en cada subclase PrestamoPersonal, PrestarneHipotecaria, PrestameAuto; se implemenlará de acuerdo con la forma que le corresponda calcular el interés a pagar.


432

Resumen del capaulo Conceptos que debe d xnir,4r 3 l'amorfismo ri DiseĂąo del diagrama de clases con pnliroorrismo 1 Clases abstractas 13iseĂąo de algoritmos 00 usando prillinerdsmo


Apéndice

A

Conclusiones y recomendaciones Con el estudio de la inetexiolowa y fundamentos de programación que presento en este libro, el estudiante aprenderá la lógica de la programación orientada a objetos sin estar "casado" con ningún lenguaje; esto es, utilizando la técnica pseudocódigu, que es un pseudolenguaje que permite diseñar programas o elaborar algoritmos orientados a objetos. La idea es que este pseudolenguaje sea lo más general posible, para que las algoritmos que se diseñen, puedan traducirse más o menos con la misma facilidad a cualquier lenguaje orientado a objetos. Sin embargo, es imposible que haya la misma distancia entre este pseudolenguaje y nxIos los lenguajes orientados a objetos; por tanto, debe ser un poco más parecido a alguno de los lenguajes; en este caso he escogido que la técnica pseudocódigo, sea sutilmente más parecida al lenguaje Java, porque es el lenguaje que prácticamente se ha convertido en el estándar de la programación orientada a objetos. La intención es que esta metodología pueda ser aprendida en un primer semestre de nivel licenciatura en alrededor de 70 horas de clase; y luego en un segundo semestre recomiendo que se estudie un lenguaje orientado a objetos como Saya, para implementar la metodología en dicho lenguaje. De hecho, en un futuro no muy lejano, espero poner a su disposición un siguiente libro que explicará cómo implementar esta metodología en lenguaje Java. Cuando una persona aprende a programar usando un pseudolenguaje como el que le presento en este libro, le será más fácil estar cambiando de lenguaje de programación, simplemente hay que estar añadiendo al pseudolenguaje los nuevos conceptos que se van generando a través de los nuevas lenguajes de programación. 1.1.stimado lector, si ya sabe programar en Java, quizás espere ver en esta metodología temas como arreglos de objetos, static, archivos, entre otros; es por ello que quiero comentarle que no los he incluido, porque creo que deben estudiarse en un siguiente curso de programación orientada a objetos en lenguaje Java.


434 Metodología de á Programacán Onentada e (bleu.

La metodologia que le presento en este libro no es restrictiva y no la debemos considerar completamente terminada: usted amigo lector, está en libertad de añadirle palabras y conceptos que sea en los lenguajes y que considere necesarios para sus propósitos. A continuación le daré un ejemplo.

Graficación en pseudocódigo Los lenguajes como C, Java y otros, permiten dibujar figuras geométricas, a esto se le llama graficación; si al diseñar un programa usted tiene necesidad de graficar, podrá hacerlo con funciones como las siguientes. Arco Dibuja un arco circular desde el Angulolnicial hasta el AnguloFinal. utilizando (X,Y) como punto central y el radio Radio. Sintaxis: Arco(X,Y,AnguloInicial,AnguloFinal,Radio) Barra Dibuja una barra rectangular desde Xi,Y1 hasta X2,1-2; utilizando el relleno y color actual. Sintaxis: Barra(X1,Y1,X2,Y2) Barre30 Dibuja una barra en tres dimensiones de XLYI hasta X2,Y2 con la profundidad Prot. y Tapa indica si lleva o no tapa; utilizando el relleno y color actual. Sintaxis: Barra3000,Y1,X2,Y2,Prof,Tapa) Circulo Dibuja un circulo utilizando (X,Y) como punto central. Sintaxis: Circulo(X,Y,Radio) CierraGraph Quita de uso el sistema gráfico. Sintaxis: CierraGraph DasectaGraph Verifica el hardware determina el manejador y modo de gráfiracián a utilizar. Sintaxis: DetectaGraph{ManejadorGraf,ModoGrafi


apanden A 435 DibujaPoli Dibuja un polígono. Sintaxis: Dibuj aPoli (NumPuntos , Puntos) Elipse Dibuja una elipse desde el ángulo inicial hasta el ángulo final, utilizando (X,Y) como punto central. Sintaxis:

Elipse ( , ,AnguloInIcial,Angulonnal ,XRadio ,YRadio) IniciaGraph Inicia el sistema de gráficas v coloca el hardware en modo gráfico. Sintaxis:

IniciaGraph(Manejador,Modo,Ruta) Linea Dibuja una linea desde (X ',YO hasta (X2,Y2). Sintaxis:

Lineap11,Y1X,Y2) RebPastel Dibuja y rellena una rebanada de pastel desde el ángulo inicial hasta el ángulo final. Sintaxis:

RebPastuF(X,Y,AnguloInicial,Angulonnal,Radio} Rectangulo Dibuja un rectángulo desde el punto (XIX') hasta (X2,Y2). Sintaxis:

Rectangulo(X1,Y1,X2,Y2) Nata: Entre otras funciones que usted puede ariadir que traiga el manejado, graficu del lenguaje que este utilizando, como RellenaElipse,RellenePoli, etcétera


Apéndice

B

Evolución de loe paradigmas de programación Desde que la programación de computadoras apareció como tal, la forma, el paradigma o modelo que se usa ha evolucionada constantemente. Sin embargo, las bases de la programación no han cambiado, simplemente se han ido añadiendo nuevos conceptos y nuevas estructuras. Todo inicia con las primeras estructuras que se inventaron cuando aparecio la programación tradicional, luego sobre estas bases se gestó la programación estructurada, para dar lugar a fa programación modular, enseguida se agrega la programación con abstracción de dates, para llegar al desarrollo de la pmgramación orientada a objetos. En la siguiente figura se esquematiza la evolución de los paradigmas

de programación. PROGRAMACIÓN ORIENTADA A OBJETOS

PROGRAMACIÓN CON ABSTRACCIÓN ❑E DATOS PROGRAMACIÓN MODULAR PROGRAMACIÓN ESTRUCTURADA PROGRAMACIÓN TRADICIONAL CUrtICterbtiCOS de la programación tradicional

La programación tradicional tuvo ÑUS inicios a finales de los años so. Las lenguajes de programación que se utilizaban eran: FORTRAN. COBOL y BASIC. Las estructuras lógicas de control que se utilizaban eran: la secuenclación, IF-THEN, IF-THEN-ELSE y DO (en la actualidad conocida como POR). La técnica de diseño de programas utilizada eran los diagramas de flujo.


438 Matudolugia da la Programación Ormantoda a Clajecas

Características de la programación estructurada La programación estructurada tuvo sus inicios a mediados de los años (al, tos lenguajes de programación que se utilizaban eran: P.A.SCAL, COBOL estructurado, BASIC estructurado, FORTRAN con estilo estructurado, FORTRAN go. Lenguaje G Las estructuras de control utilizadas eran: la secuenciación, IF-THEN, IF-THEN-ELSE, CASE, FOR, DO•UNfIL y DOWHILE. Otras caracteristicas son: Dividir un programa en módulos y funciones; y estilo de programación. Las técnicas de diseño de programas que se utilizaban eran: Diagramas Warnier, diagramas estructurados, diagramas Chapin, Pseudocódigo. Top Donen Design, entre otras. Características de la programación modular La programación modular tuvo sus inicios a fines de los años 7o y principios de los do. El lenguaje de programación que se utilizó es MODULA a Emerge el concepto de encapsulación; que en un módulo o paquete se encapsulan los datos y las funciones que los manipulan. Características de la programación con abstracción de datos La programación con abstracción de datos se generé en los años Ro. El lenguaje de programación que se utilizó fue ADA. Emerge el concepto de Tipos Abstractos de Datos (TAD). Características de la programación orientada a objetos Aunque el concepto de la programación orientada a objetos, se genero muchos años antes, es a finales de los do y principios de los go cuando se pone en boga, la caracterizan los conceptos objetos, clases, encapsulación, herencia y polimorfismo. Los principales lenguajes de programación que se utilizan son: C++, Java y C#. Las técnicas de diseño que se utilizan son: ltooch, Rumhaugh, Jacobson, Yourdon, UML (Unified Modeling Language), entre otras. Resumiendo: Sobre las estructuras básicas que se crearan con la programación tradicional, se gestó una resolución de nuevas estructuras que se añadieron a la programación, a lo que se le llamó programación estructurada; ésta aporto las bases lógicas sobre la que se sustentó la programación modular, la cual añadió otro concepto más para dar lugar a la programación con abstracción de datos; y sobre todas esas bases, se sustenta la programación orientada a objetos.


Apéndice

C

Cbrinn evolucionar de la programación estructurada a la programación orientada e objetos. Este autor considera que si una persona maneja la lógica básica de la programación, ya sea la programación estructurada en pseudoccidigo u otra técnica de diseña de algoritmos, ya ha adelantado algo, y el estudio de la programación orientada a objetos, es lo que sigue en forma natural; es decir, es la siguiente estructura de k programación que debe aprender. Para estudiantes que va tomaron un curso de metodología de la programación estructurada y/o un lenguaje corno Pasea C u otro; deben hacer un repaso rápido de los capitulas del a al 9, para adaptar los conceptos y estructuras que malician, con la forma s estilo que se 11.9a en este libro. En ESOS capitulas se presenta, lo que se estudia en un primer curso de lógica de programación con técnicas estructuradas. pero enfocando la estructura del algoritmo en forma apropiada a la programación orientada a objetos. Si antes, un algoritmo nos quedaba como sigue. Algoritmo CALCULAR SUELDO DE UN EMPLEADO

1. peclaraciOneS Variables NombreEmp: Cadenal381 HOrasTrab: Entero CuctaHora, Sueldo: Real 2. Solicitar Nombre del empleado, número de horas trabajadas y Cuota por hure 3. Leer NOmbreEmp, HorasTrab, CuotaFora 4. Calcular Sueldo = HorasTrab • Cuotahora S. Imprimir NombreEmp, Sueldo S. Fin Ahora nos queda de la siguiente forma:


440 Mutidologte dele Programación Dr tersuada a °timos

Algoritmo CALCULA SUELDO DE UN EUPLEADD Clase( Empleador 1. Matedo principal a. Declaraciones Variables nombreEmp: Cadena norasTrab: Entero CuotaRora, sueldo; Real b. Solicitar Nombre del empleado, número de horas trabajadas y cuota por hora c. Leer nombreEmp, horastrab, clic:tal-10ra d. Calcular sueldo = horasTrab • cuOtaHora e. Imprimir nombreEmp, sueldo:, f. Fin Método principal Fin Clase Empleados Fin Esto es, usando una liase y dentro de In clase el método principal; que es donde están las acciones del algoritmo. En el caso de las estructuras de control, en este libra se les está dando un estilo más parecido a lenguaje C y Java. A continuación se presentan los formatos que se ut dita s. La selección simple o "S1 ACASO" se representa: IF condicionTREN Acción/es) ENDIF Le selección doble o "S1 ACASO - SINO se representa: IF condicionTNEN Acciónles) ELSE Accionles1 ENDIF La seleeeión múltiple u "SEGUN" se representa: SWITCH Selector 1: Acción(es) 2: Accionles) 3: Acción/es) 4: Acción/es) DEFAULT Acción les) ENDSWITCH


Apéndice C 441

La repetición DO - ~t. o "HACER - HASTA" se representa: DO

Acción(es) WHILE condición La repetición POR o "PARA" se representa: FOR contador, valorInicial; condición; incremento Recion(es) ENDFOR La repetición DOWHILE o "MIENTRAS" se representa: WHILE condición Acción(es) ENDWHILE Asimismo, en este libro a los módulos, se les denomina métodos que no regresan valor; y a las funciones definidas por el usuario se les denomina métodos que regresan valor.


Apéndice

-

Algoritmos sin usar etiquetas Este autor considera que es mejor utilizar etiquetas porque ayudan a desa rallar disciplina y orden en los estudiantes, virtudes que los maestros debernos estimular, sobre todo en la etapa de formación de los aprendices de programación. Sin embargo en este apéndice se presentan algunos algoritmos de los elaborados en los capítulos del 3 al te; sólo que aqui se muestra cómo quedan sin utilizar el concepto de etiquetas. Esto es con la finalidad de que el lector pueda observar la diferencia y elija la forma que le parezca mejor, esto. una vez que haya aprendido a programar.

A algunos maestros no les gusta usar etiquetas para enumerar los vasos de los algoritmos; sin embargo estimado profesor, si usted esa utilizando este libro como texto. es conveniente que use los ejemplos corno estar, plasmados en el libro es decir con etiquetas, porque si uyred espita has eigorionos sin etiquetas, luego, cuando los alumnos estudien el Itrio y Vean los algoriOtos ron etiquetas, seguramente se contundirán y, en consecuencia, la utilidad del libio podría ser limitada.

A 1.11nt num:ion se presentan :dgunns algoritmos sin usar etiquetas .

Heroico 3.4.1 [Capitulo 3] Algoritmo CALCULOS LOGARITUICOS OE ANGULO Clase Ang ulo1 tilét odo principal Declaraciones Variables tamAngulo, senAng, cosAng: Real Solicitar Tamaño del ángulo en radianes Leer tamAngulo Calcular senAng Seno(tamAngulol cosAng Co s eno t asiAng u lo


444 Melzidulogia de la Programación Onancada a Objetos

Imprimir senAng, cosAng Fin Método principal Fin Clase Angulo1 Fin Ejercicio 4.7.1(Capitulo 4) Algoritmo CALCULA PROMEDIO DE UN ALUMNO Clase Alumno2 Método principal Declaraciones Variables nombreAlum: Cadena calif1, calif2, calif3, calif4, promedio: Real observacion: Cadena Solicitar Nombre del alumno, calificación 1,2,3 y 4 Leer nombreAlum, calif1, calif2, calif3, calif4 Calcular promedio = (califf+calif2+calif3+calif4)14 IF promedio >= 60 TREN observacion = 'Aprobado' ELSE observacion = 'Reprobado' ENDIF Imprimir nombreAlum, promedio, observacion Fin Método principal Fin Clase Alumno2 Fin Ejercicio 7.3.1 (Capitulo 7] Algoritmo VENDEDORES DE AUTOS Clase VendedoresAutos Método principal Declaraciones Variables nombreVend: Cadena desea, otro: Caracter totAutos, totVend: Entero precioAuto, salMin, sueldo, totSueldos, totVendido: Real Solicitar el Salario minimo Leer salMin Imprimir Encabezado totSueldos = 0 totVend = 0 DO Solicitar el Nombre del vendedor


Apándme C 445

Leer nombreVeod totAutos = 0 totVendido = 0 Preguntar "¿Hay auto vendido (Sil)?" Leer otro WHILE otra = "S' Solicitar el precio del auto Leer precioAuto totAutos = totAutos + 1 totVendido = totVendido + precioAuto Preguntar 'LHay otra auto vendido (S/N)?' Leer otro ENOWHILE sueldo = salMin+ttotAUtoS•100)*[totVendido^0.02) Imprimir nombreVend, sueldo totVend = totVend + 1 totSueldos = totSueldos s sueldo Preguntar "¿Hay otro vendedor (S/N)?' Leer desea WHILE desea = "S" Imprimir totVend, totSueldos Fin Método principal Fin Clase VendedoresAutos Fin

hemick>1312.1[Capluk113] Algoritmo CLIENTES HOJAS HIELO SECO Clase Cliente3 Declaraciones Datos nombreClie: Cadena tipoClie, cantidad: Entero precioUni, subTotal, descuento, netoPager: Real Método eStebleCerNombreClie(nom: Cadena) nombreClie = nom Fin Método establecerNombreClie Método establecerTipcClie)tip: Entero) tipoClie = top Fin Método establecerTipoClie Método establecerCantidad(can: Entero) cantidad = can Fin Método establecerCantidad


446 Metodologla do la Progranlacidn Onentada a Objetes

Método establecerPrecioUni(pre: Real) precloUni = pre Fin Método establecerPrecioUni Método calcularSubTotal() subTotal = cantidad • precioUni Fin Método calCularSubTotal Método calcularDescuento() SWITCH tipoClie 1: descuento - subTotal * 0.05 2; descuento - subTotal * 0.08 3: descuento = subTotal * 0.12 4: descuento = subTotal * 0.15 ENDSWITCH Fin Método calcularDescuento Método calcularNetoPagar() netoPagar = subTotal - descuento Fin Método calcularNetoPagar Método obtenerNombreClie(): Cadena return nombreClie Fin Metodo obtenerNombreClie

Método obtenerSubTotal(): Real return subTotal Fin Método obtenerSubTotal Método obtenerDescuento(): Real return descuento Fin Método obtenerDescuento Método obtenerNetoPagar(); Real return netoPagar Fin Metodo obtenerNetoPagar Fin Clase Cliente3 Clase EjecutaCliente3 Método principal Declaraciones Variables nomCli: Cadena tiCli, cant, totClientes: Entero preUni, totSubTot, totDescuento, totNeto: Real desea: Carácter Imprimir encabezado


.AiWdice G 447

totClientes = O t otSubTot = 0 t otDescuento 0 t otNeto DO Declarar, crear e iniciar objeto Cliente3 obiCliente = new Solicitar Nombre, Tipo cliente, Cantidad, Precio unitario Leer nomCli, tiCli, cant, preUni Establecer ob]Cliente,establecerNombreClie(nomeli) ❑b7Cliente.establecerTipoClie(tiCli) ob]Cliente.establecerCantidad(canty objeliente.establecerPrecioUni/preUni) Calcular ob)Cliente.calcularSubTotal(} objeliante.calcularOescuentn() otjeliente.calcularNetoPagar{y Imprimir obiellente.obtenerNombreClie/1 objeliente.obtenerSubTotall} objCliente.obtenerOescuentoIl ob]Cliente.obtenerNetoPagarl) totClientes = totClientes + 1 tOtSubTot tOtSubTOt ❑bjeliente. ❑btenerSubTotal() totOescuento = totDescuento + objeliente.obtenerDescuenton totNeto = totNeto + obiCliente.obtenerNetoPagar() Preguntar 'LDesea procesar otro cliente(S)N}4' Leer desea WHILE desea - "S" Imprimir totClientes, t0tSubT0t, totDeSCuente, tOtNetO Fin Método principal Fin Clase E)ecutaCliente3 Fin


Metodologia de la programacion orientada a objetos  

Autor: Leobardo López Román Libro con OCR activado

Metodologia de la programacion orientada a objetos  

Autor: Leobardo López Román Libro con OCR activado

Advertisement