crestomatía

227

Click here to load reader

Upload: grettel-zamora

Post on 17-Mar-2016

301 views

Category:

Documents


20 download

DESCRIPTION

Crestomatía de fundamentos de infórmatica

TRANSCRIPT

Page 1: Crestomatía

Crestomat¶³a de

Fundamentos de inform¶atica

Compilado por

NOTA

Este material ha sido recopilado de diversas fuentes para apoyar el

curso Fundamentos de Inform¶atica del II ciclo del 2007. Se proh¶³be

su utilizaci¶on para otros ¯nes. No tiene valor comercial

Page 2: Crestomatía

2

Page 3: Crestomatía

¶Indice General

1 Orientaci¶on Profesional 7

1.1 Inform¶atica educativa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

1.1.1 Estructura curricular . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

1.2 Ingenier¶³a en sistemas de informaci¶on . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

1.2.1 Etructura curricular . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

1.3 Per¯l ocupacional del graduado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

1.4 Enfoque metodol¶ogico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

1.5 Ejercicios del cap¶³tulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

2 Reglamentos importantes 17

2.1 Pre¶ambulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

2.2 Contenido de los art¶³culos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

2.3 Objetivo y responsables de su aplicaci¶on . . . . . . . . . . . . . . . . . . . . . . . . . 21

2.4 Sobre los estudiantes y el plan de estudios . . . . . . . . . . . . . . . . . . . . . . . . 22

2.5 Sobre los programas de los cursos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

2.6 Sobre la evaluaci¶on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

2.7 Sobre las ausencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

2.8 Sobre las evaluaciones extraordinarias . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

2.9 Sobre las evaluaci¶ones por su¯ciencia . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

2.10 De las cali¯caciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

2.11 Sobre la retenci¶on de la escolaridad . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

2.12 Sobre los recursos de apelacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

2.13 Del mejoramiento del proceso de ense~nanza aprendizaje . . . . . . . . . . . . . . . . . 32

2.14 Sobre disposiciones ¯nales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

2.15 Ejercicios del cap¶³tulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

3 Historia de la computaci¶on 35

3.1 Primera Generaci¶on de Computadores . . . . . . . . . . . . . . . . . . . . . . . . . . 36

3.2 Segunda Generaci¶on de Computadores . . . . . . . . . . . . . . . . . . . . . . . . . . 37

3.3 Tercera generaci¶on de Computadores . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

3.4 Quinta Generaci¶on de Computadores . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

3.5 Ejercicios del cap¶³tulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

3

Page 4: Crestomatía

4 ¶INDICE GENERAL

4 Organizaci¶on de una computadora 434.1 Historia de los lenguajes de programaci¶on . . . . . . . . . . . . . . . . . . . . . . . . 514.2 Ejercicios del cap¶³tulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

5 Introducci¶on a la orientaci¶on a objetos 555.1 Objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 555.2 Atributos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 575.3 M¶etodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 585.4 Estado del objeto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 585.5 Comportamiento del objeto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 585.6 Identidad del objeto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 595.7 Mensajes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 595.8 Interfaz del objeto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 605.9 Abstracci¶on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 605.10 >Qu¶e es una clase? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 615.11 Instanciaci¶on de una clase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 635.12 Encapsulaci¶on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 645.13 Modi¯cadores de acceso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 655.14 Herencia y polimor¯smo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 655.15 Sobrecarga, reemplazo y sombreado . . . . . . . . . . . . . . . . . . . . . . . . . . . . 665.16 Ejercicios del cap¶³tulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

6 Relaciones entre clases 696.1 Introducci¶on al UML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 696.2 Tipos de Datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 706.3 Representaci¶on de clases mediante UML . . . . . . . . . . . . . . . . . . . . . . . . . 716.4 Relaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 726.5 Relaci¶on de dependencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 746.6 Relaci¶on de asociaci¶on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 756.7 Relaciones de agregaci¶on/composici¶on . . . . . . . . . . . . . . . . . . . . . . . . . . . 786.8 Relaci¶on de herencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 796.9 Modelando relaciones mediante UML . . . . . . . . . . . . . . . . . . . . . . . . . . . 806.10 Ejercicios del cap¶³tulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84

7 Introducci¶on a los algoritmos 897.1 >Qu¶e es un Algoritmo? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 897.2 >Qu¶e es un programa de computadora? . . . . . . . . . . . . . . . . . . . . . . . . . . 917.3 Dise~nando un buen algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 927.4 Depuraci¶on de programas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 947.5 Identi¯cadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 947.6 Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 957.7 Asignando datos a una variable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 977.8 Constantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100

Page 5: Crestomatía

¶INDICE GENERAL 5

7.9 Palabras reservadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1007.10 Comentarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1017.11 Expresiones y operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1017.12 Ejercicios del cap¶³tulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105

8 Algoritmos secuenciales y condicionales 1098.1 Estructuras secuenciales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1098.2 Diagramas de °ujo de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1108.3 Problemas secuenciales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1128.4 Ejercicios sobre algoritmos secuenciales . . . . . . . . . . . . . . . . . . . . . . . . . . 1208.5 Estructuras de condicionales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1218.6 Par¶ametros por valor o por referencia . . . . . . . . . . . . . . . . . . . . . . . . . . . 1278.7 Ejercicios del cap¶³tulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128

9 Estructuras iterativas o c¶³clicas 1399.1 Ciclos del tipo For . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139

9.1.1 Ejercicios usando un ciclo FOR . . . . . . . . . . . . . . . . . . . . . . . . . . 1499.1.2 Ejemplos adicionales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149

9.2 Ciclos del tipo While . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1509.3 Ciclos del tipo Do{While . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1589.4 Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161

9.4.1 Ejercicios usando un ciclo Do{While . . . . . . . . . . . . . . . . . . . . . . . 1629.5 Ejercicios del cap¶³tulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163

10 Hileras 16910.1 Longitud de una hilera (Length) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17210.2 Borrando en una hilera (Delete) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17410.3 Buscando subhileras (Pos) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17510.4 Insertando hileras (Insert) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17810.5 Copiando hileras (Copy) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17910.6 Convirtiendo hileras a may¶uscula o a min¶uscula (UpperCase y LowerCase) . . . . . . 18010.7 Convirtiendo entre tipo string y tipos num¶ericos . . . . . . . . . . . . . . . . . . . . . 18110.8 Ejercicios sobre hileras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184

11 Vectores y matrices 18711.1 Vectores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18711.2 Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19211.3 Pasando vectores como argumentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19811.4 Ordenanci¶on de vectores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20411.5 Ejercicios del cap¶³tulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206

12 Creaci¶on e instanciaci¶on de clases 20912.1 Ejercicios del cap¶³tulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218

Page 6: Crestomatía

6 ¶INDICE GENERAL

Page 7: Crestomatía

Cap¶³tulo 1

Orientaci¶on Profesional

Presentamos aqu¶³ informaci¶on necesaria para que el estudiante se capaz de conocer el per¯l de losprofesionales en Ingenier¶³a de Sistemas de Informaci¶on e Inform¶atica Educativa.

1.1 Inform¶atica educativa

² La Inform¶atica Educativa es una disciplina que estudia el uso, efectos y consecuencias de lastecnolog¶³as de la informaci¶on en el proceso educativo. La Inform¶atica Educativa analiza dequ¶e manera puede la educaci¶on participar en el proceso de transferencia de las tecnolog¶³as dela informaci¶on, procurando acercar la educaci¶on formal al mundo inform¶atico y contribuir almejoramiento cualitativo de la educaci¶on.

² La carrera de Inform¶atica Educativa es una carrera compartida entre la Escuela de Inform¶aticay la Divisi¶on de Educolog¶³a del Centro de Investigaci¶on y Docencia en Educaci¶on (CIDE).El Bachillerato en Inform¶atica Educativa inicia en la Escuela de Inform¶atica cuenta desde ela~no 1996. Anteriormente exist¶³a la carrera de Bachillerato en Ense~nanza de la Computaci¶ony la Inform¶atica perteneciente al Departamento de Filosof¶³a y en el a~no 1995, la Escuela deInform¶atica por medio de Asamblea de Escuela toma la decisi¶on de aceptar trasladar dichacarrera a esta Unidad, y posteriormente se le cambia el nombre a Bachillerato en Inform¶aticaEducativa.

² Objetivos de la carrera.{ Formar profesionales en el ¶area de la inform¶atica con una s¶olida formaci¶on pedag¶ogica, ca-paces de potenciar el proceso de ense~nanza- aprendizaje mediante el uso de las tecnolog¶³asde la informaci¶on y la comunicaci¶on.

{ Contribuir al desarrollo integral aut¶onomo y sostenible de la sociedad costarricense for-mando profesionales cr¶³ticos, independientes, participativos y creativos con un dominios¶olido del conocimiento y su problem¶atica pedag¶ogica.

{ Crear ambientes acad¶emicos favorables a la construcci¶on y reconstrucci¶on del conocimientoacerca de los procesos de ense~nanza- aprendizaje de la Inform¶atica Educativa y de susv¶³nculos con los procesos educativos en los que ocurren.

7

Page 8: Crestomatía

8 CAP¶ITULO 1. ORIENTACI ¶ON PROFESIONAL

{ Formar profesionales con sentido de pertenencia cultural, a partir de principios y valoresdemocr¶aticos, que incluyen la tolerancia, la equidad, el respeto por las diferencias y porla vida en todas sus formas.

² Objetivos Espec¶³¯cos

{ Ofrecer una visi¶on global e integrada de la inform¶atica como herramienta al servicio deleducador para la gesti¶on del proceso educativo, la resoluci¶on de problemas, el desarrollode proyectos, el trabajo colaborativo y el desarrollo de metodolog¶³as de aprendizaje y dedocencia creativa.

{ Dar respuesta a las necesidades que surgen de las innovaciones curriculares en torno aluso de las nuevas tecnolog¶³as de informaci¶on y comunicaci¶on en el proceso educativo.

{ Formar profesionales capaces de integrar el conocimiento y la realidad de su entorno(re°exivo, cr¶³tico, human¶³stico, ¶etico y moral) para que generen soluciones nuevas demanera responsable y ¶etica.

{ Preparar profesionales con capacidad de aprendizaje autodidacta, y promover en ellos laautonom¶³a intelectual.

{ Desarrollar la vocaci¶on investigadora en los profesionales para que fortalezcan los proce-sos de ense~nanza-aprendizaje de la Inform¶atica Educativa y los vincule con la realidadeducativa en la que trabajan.

{ Preparar profesionales con capacidad de liderazgo efectivo y respetuoso para dirigir equiposinterdisciplinarios y multidisciplinarios en el desarrollo de proyectos de tecnolog¶³a educa-tiva.

{ Fomentar en los profesionales las habilidades de comunicaci¶on oral y escrita, tanto enespa~nol como en ingl¶es que le permitan transmitir, convencer, negociar y motivar la im-plantaci¶on de soluciones.

1.1.1 Estructura curricular

² Los cursos del Bachillerato en Inform¶atica Educativa se distribuyen en las cuatro ¶areas disci-plinarias del programa de la siguiente manera:

{ Ingenier¶³a de software educativo: es un ¶area donde se estudian y aplican distin-tas metodolog¶³as de desarrollo de software educativo, tomando en cuenta los principiospedag¶ogicos que permiten que la tecnolog¶³a contribuya a potenciar el proceso ense~nanza{aprendizaje. Los cursos que corresponde a esta ¶area son:

¤ Fundamentos de Inform¶atica¤ Programaci¶on I¤ Programaci¶on II¤ Programaci¶on III¤ Estructuras discretas para Inform¶atica

Page 9: Crestomatía

1.1. INFORM¶ATICA EDUCATIVA 9

¤ Estructuras de datos¤ Dise~no e implementaci¶on de bases de datos¤ Dise~no de ambientes multimediales¤ Ingenier¶³a de software educativo¤ Dise~no de ambientes de aprendizaje¤ Desarrollo de aplicaciones administrativas¤ Sistemas expertos educativos

{ Tecnolog¶³as para la informaci¶on y comunicaci¶on: esta ¶area proporciona los conocimien-tos necesarios acerca de telecomunicaciones, dispositivos, redes locales y de comunicaci¶on.T¶ecnicas de teleconferencia, educaci¶on a distancia, aprendizaje virtual, consulta a bancosde informaci¶on externa y sistemas de correo electr¶onico. Adem¶as de la formaci¶on nece-saria para incorporar Internet como una herramienta efectiva en el proceso ense~nanza-aprendizaje. Los cursos que corresponde a esta ¶area son:

¤ Soporte T¶ecnico¤ Internet y educaci¶on¤ Telecomunicaciones y redes

{ Pedagog¶³a: Disciplina que estudia el complejo proceso social de la educaci¶on. Es unare°exi¶on °exible, abierta, inter, transdisciplinaria y multimetodol¶ogica. Su misi¶on esenciales generar humanidad, para esto la pedagog¶³a reconstruye su camino, generando oportu-nidades y experiencias de humanizaci¶on a los individuos y generando se~nales de alerta alos educadores sobre las consecuencias de lo que hacen o dejan de hacer con sus alumnos.

¤ Introducci¶on a los procesos educativos¤ Educaci¶on para la diversidad¤ Desarrollo costarricense y modelos educativos¤ Desarrollo humano y teor¶³as de aprendizaje

{ Ciencias aplicadas a los procesos de ense~nanza-aprendizaje: Esta ¶area la confor-man las disciplinas que permiten la construcci¶on de conocimientos para innovar, crear,adecuar y aplicar el proceso de ense~nanza-aprendizaje, como la did¶actica, el curr¶³culum,el planeamiento, la evaluaci¶on educativa, la investigaci¶on y la pr¶actica docente. Los cursosque corresponde a esta ¶area son:

¤ Curr¶³culum y planeamiento did¶actico para Inform¶atica Educativa

¤ Evaluaci¶on de los aprendizajes en Inform¶atica Educativa¤ Did¶actica de la Inform¶atica Educativa y recursos para el aprendizaje¤ Desaf¶³os did¶acticos en la pr¶actica docente de la Inform¶atica Educativa (PPS)¤ Seminario de innovaci¶on y producci¶on en Inform¶atica Educativa

{ Formaci¶on complementaria: esta ¶area est¶a orientada a complementar y profundizar enlos campos de formaci¶on humana, tecnol¶ogica, pedag¶ogica, temas nuevos y de avanzada.

¤ Matem¶atica I, II, III

Page 10: Crestomatía

10 CAP¶ITULO 1. ORIENTACI ¶ON PROFESIONAL

¤ Generales I, II, III, IV¤ Ingl¶es I, II, III, IV¤ T¶ecnicas de Comunicaci¶on oral y escrita¤ M¶etodos de investigaci¶on cient¶³¯ca en inform¶atica¤ Inform¶atica y Sociedad¤ Optativa I, II, III

{ Los graduados de la Carrera de Bachillerato en Inform¶atica Educativa est¶an en condicionesde asumir cargos tales como:

¤ Profesor (a) de inform¶atica educativa en diversos niveles del sistema educativo formalo no formal, p¶ublica y privada.

¤ Coordinador del Departamento de Inform¶atica de una Instituci¶on de Ense~nanza p¶ublicay privada.

¤ Asistente de Investigaci¶on en proyectos relacionados con la Inform¶atica Educativa.¤ Asesor de la Direcci¶on de una instituci¶on de ense~nanza media p¶ublica y privada.¤ Dise~nador y desarrollador de software educativo y material did¶actico.¤ Encargado del dise~no y desarrollo de material de capacitaci¶on en organizaciones oempresas.

¤ Administrador de un laboratorio de Inform¶atica Educativa.¤ Consultor de Inform¶atica Educativa.

{ En estos cargos desempe~nar¶an funciones tales como:

¤ Orientar y organizar los procesos de ense~nanza - aprendizaje de la inform¶atica educa-tiva.

¤ Promover en la instituci¶on educativa el uso de la inform¶atica como una herramientaen la ense~nanza.

¤ Elaborar el planeamiento curricular y did¶actico (contenidos, evaluaci¶on, bibliograf¶³a)tomando en cuenta las diferencias individuales de sus estudiantes en el proceso deense~nanza-aprendizaje.

¤ Utilizar t¶ecnicas did¶acticas de acuerdo con los objetivos, los contenidos y las carac-ter¶³sticas de los estudiantes y del medio, apoy¶andose en el uso responsable de mate-riales y equipos.

¤ Promover o facilitar actividades creativas en el aula considerando el desarrollo cogni-tivo, afectivo y formativo de los estudiantes y haciendo del acto educativo un di¶alogolibre y permanente.

¤ Motivar al estudiante a ser cr¶³tico enfrent¶andolo con la realidad mediante el debatede ideas y la confrontaci¶on de diversas opiniones sobre temas de particular inter¶es,respetando el derecho de disentir, la decisi¶on de la mayor¶³a y los puntos de vista delas minor¶³as

¤ Realimentar el proceso de ense~nanza- aprendizaje, mediante investigaciones de aula,para propiciar y enriquecer el aprendizaje signi¯cativo de su disciplina

Page 11: Crestomatía

1.2. INGENIER¶IA EN SISTEMAS DE INFORMACI ¶ON 11

¤ Asesorar a los docentes de la Instituci¶on en aspectos espec¶³¯cos de la Inform¶aticaEducativa.

¤ Promover actividades de investigaci¶on relacionadas con la Inform¶atica Educativa.¤ Dise~nar y desarrollar materiales educativos con soporte tecnol¶ogico.¤ Dise~nar y desarrollar material educativo de capacitaci¶on para organizaciones y em-presas.

1.2 Ingenier¶³a en sistemas de informaci¶on

² La Universidad Nacional tiene sus primeros graduados en el ¶area de inform¶atica a partir de1981, cuando la carrera de Diplomado pertenec¶³a al Centro de C¶omputo. En el a~no de 1989la Escuela se independiza y nace lo que hoy se conoce como Escuela de Inform¶atica. A partirde esa fecha y hasta el d¶³a de hoy, la Escuela se ha ido consolidando y ha logrado una granmadurez acad¶emica, a pesar de ser una de las escuelas m¶as j¶ovenes de la Universidad Nacional.

² En t¶erminos generales "La Ingenier¶³a en Inform¶atica" se re¯ere al proceso de examinar unasituaci¶on con la intenci¶on de mejorarla mediante nuevos procedimientos y m¶etodos, en los quenormalmente se utilizan sistemas computacionales para alcanzar los objetivos propuestos.

² Objetivos generales de la carrera :{ Formar profesionales capaces de potenciar el uso de la informaci¶on y de las herramientastecnol¶ogicas de la computaci¶on y la inform¶atica como motor de desarrollo, calidad de viday bienestar social.

{ Contribuir al desarrollo de la sociedad costarricense formando profesionales con capacidadde liderazgo en la b¶usqueda de soluciones responsables y ¶eticas a las demandas que planteael desarrollo de proyectos de sistemas de informaci¶on.

{ Contribuir al desarrollo integral, aut¶onomo y sostenible de la sociedad costarricense, for-mando profesionales cr¶³ticos, re°exivos, independientes, participativos y creativos con do-minio en el ¶area de la Ingenier¶³a en Inform¶atica.

{ Preparar profesionales con capacidad de aprendizaje autodidacta, y promover en ellos laautonom¶³a intelectual.

{ Formar profesionales con sentido de pertenencia cultural y valores que incluyen la toler-ancia, la equidad, el respeto por las diferencias, y por la vida en todas sus formas.

² (Diplomado en Programaci¶on de aplicaciones inform¶aticas):{ Formar un diplomado que proponga soluciones a problemas mediante aplicaciones in-form¶aticas y sea capaz de desarrollar, documentar, y dar mantenimiento a las mismas.

{ Preparar un diplomado con capacidad de comunicarse adecuadamente en forma oral yescrita, tanto en espa~nol como en ingl¶es para que pueda transmitir, convencer, negociar ymotivar la implementaci¶on de soluciones inform¶aticas.

Page 12: Crestomatía

12 CAP¶ITULO 1. ORIENTACI ¶ON PROFESIONAL

{ Preparar un diplomado que pueda dar el soporte t¶ecnico b¶asico a los computadores de laorganizaci¶on en que labora.

² Ingenier¶³a en Sistemas de Informaci¶on con grado de bachillerato Formar un profesionalcapaz de:

{ Desarrollar proyectos inform¶aticos con soluciones de hardware, software, administraci¶onde la informaci¶on y telecomunicaciones.

{ Ejercer un liderazgo efectivo y respetuoso para dirigir equipos interdisciplinarios y multi-disciplinarios en el desarrollo de proyectos inform¶aticos.

{ Ofrecer una visi¶on global e integrada de la inform¶atica como herramienta al servicio de laorganizaci¶on y de la sociedad.

{ Dar respuesta a las necesidades que surgen en torno al uso de las nuevas tecnolog¶³as deinformaci¶on y comunicaciones.

1.2.1 Etructura curricular

² Los cursos de la carrera se distribuyen en las ¶areas disciplinarias del programa de la siguientemanera:

{ Fundamentos de Inform¶atica

{ Programaci¶on I

{ Programaci¶on II

{ Programaci¶on III

{ Programaci¶on IV

{ Estructuras discretas para Inform¶atica

{ Estructuras de datos

{ Paradigmas de programaci¶on

{ Investigaci¶on de operaciones y sus aplicaciones

{ Optativa

² Ingenier¶³a de Sistemas de Informaci¶on:{ Dise~no e implementaci¶on de bases de datos

{ Administraci¶on de bases de datos

{ Ingenier¶³a de Sistemas I

{ Ingenier¶³a de Sistemas II

{ Ingenier¶³a de Sistemas III

{ Proyectos y su aplicaci¶on en la organizaci¶on

Page 13: Crestomatía

1.3. PERFIL OCUPACIONAL DEL GRADUADO 13

{ Aplicaciones inform¶aticas globales

{ Optativa 3

² Arquitectura y telecomunicaciones:{ Soporte T¶ecnico 3

{ Arquitectura de computadores 3

{ Comunicaciones y redes de computadores 3

{ Sistemas Operativos 3

{ Optativa 3

² Formaci¶on complementaria:{ Matem¶atica para inform¶atica I, II, III 12

{ Estudios Generales I, II, III, IV 12

{ Ingl¶es para inform¶atica I, II, III, IV 12

{ T¶ecnicas de Comunicaci¶on Oral y Escrita 2

{ M¶etodos de investigaci¶on cient¶³¯ca en inform¶atica 2

{ Probabilidad y estad¶³stica para inform¶atica 3

{ La organizaci¶on y su entorno 3

{ Liderazgo y organizaci¶on 3

{ Inform¶atica y Sociedad 2

{ Optativa 3

1.3 Per¯l ocupacional del graduado

² En esta secci¶on se establecer¶an los cargos y funciones que est¶an en capacidad de ejercer y llevara cabo los estudiantes tanto a nivel de diplomado como de bachillerato.

² (Diplomado en Programaci¶on de aplicaciones inform¶aticas) Los cargos del graduadocomo Diplomado en Programaci¶on de Aplicaciones Inform¶aticas, son:

1. Programador de aplicaciones inform¶aticas.

2. Programador de aplicaciones Web.

² Llevan a cabo la programaci¶on de aplicaciones inform¶aticas de acuerdo a las especi¯cacionesdadas, adem¶as pueden realizar el mantenimiento de aplicaciones existentes, en instituciones,empresas y organizaciones en el sector p¶ublico o privado. Por tanto podr¶a realizar las siguientesfunciones:

Page 14: Crestomatía

14 CAP¶ITULO 1. ORIENTACI ¶ON PROFESIONAL

{ Desarrollar software seg¶un los requerimientos de la organizaci¶on.

{ Documentar software producido:

{ Implementar software producido:

{ Dar mantenimiento al software.

{ Dar mantenimiento b¶asico a computadores, instalaci¶on de programas, hardware.

² (Ingenier¶³a en Sistemas de Informaci¶on con grado de bachillerato) Los egresados deesta carrera deben de tener la capacidad no s¶olo de incorporarse a las organizaciones de nuestrasociedad, sino de ser agentes de cambio y de utilizaci¶on de una TIC que contribuya al desarrollodel pa¶³s. De esta forma al ¯nalizar el bachillerato, el graduado podr¶a desempe~narse como:

{ Analista/ Programador de sistemas.

{ Programador de sistemas inform¶aticos de alta complejidad.

{ Encargado de procesos de selecci¶on e implantaci¶on de recursos inform¶aticos.

{ Administrador de bases de datos.

{ Asesor y director de proyectos de software de peque~na y mediana escala. Adem¶as de lasfunciones especi¯cadas para el nivel de diplomado, el graduado a nivel de bachillerato est¶aen condiciones de llevar a cabo las siguientes funciones:

{ Elaborar, analizar y de¯nir requerimientos de los sistemas requeridos a nivel de la organi-zaci¶on.

{ Elaborar modelos y especi¯caciones de dise~no de las aplicaciones.

{ Construir las aplicaciones de software.

{ Desarrollar modelos de informaci¶on.

{ Administrar bases de datos.

{ Implantar/ Documentar /Mantener sistemas.

{ Administrar de la con¯guraci¶on de software.

{ Elaborar recomendaciones de equipo, software, aplicaciones, telecomunicaciones, ambi-entes desarrollo, ambientes de administraci¶on de bases de datos.

{ De¯nir y establecer criterios para la adquisici¶on de Tecnolog¶³a de Informaci¶on.

1.4 Enfoque metodol¶ogico

² (Rol del docente): El docente debe servir de gu¶³a en el proceso de aprendizaje, permiti¶endoleal estudiante ser el propio constructor de su conocimiento, y dado lo cambiante de la tecnolog¶³aen esta ¶area, el profesor debe garantizar el car¶acter investigativo del estudiante de tal formaque pueda continuar aprendiendo seg¶un sus propias necesidades e inquietudes.

Page 15: Crestomatía

1.5. EJERCICIOS DEL CAP¶ITULO 15

² (Rol del estudiante): El estudiante debe estar en constante investigaci¶on, ya sea a trav¶esde su gu¶³a o profesor, o por s¶³ mismo, y la formaci¶on que reciba debe encauzarlo hacia estetipo de actitud, ya que en esta carrera se debe actualizar constantemente. Parte importantede su formaci¶on lo son los trabajos o proyectos programados que debe resolver en la mayor¶³ade los cursos de la carrera, y cuyo objetivo es poner en pr¶actica los conocimientos que ha idoadquiriendo.

1.5 Ejercicios del cap¶³tulo

1. Qu¶e es Ingenier¶³a en Sistemas?

2. >Cual es el nombre de las carreras que se imparten la Escuela de Inform¶atica?

3. >Cu¶ales son los objetivos de la carrera de ingenier¶³a inform¶atica?

4. >Cu¶ales son las ¶areas disciplinarias en las que se dividen los cursos de Ingenier¶³a en Sistemas?

5. >Cu¶ales son las actividades que puede efectuar un diplomado de ingenier¶³a inform¶atica?

6. > Cu¶ales son las actividades que puede efectuar los bachilleres en inform¶atica?

7. >Cu¶al es el rol del docente dentro del enfoque metodol¶ogico?

8. >Cu¶al es el rol del estudiante dentro del enfoque metodol¶ogico?

9. >Cu¶ales son los cargos que podr¶³a ocupar el graduado como diplomado en inform¶atica?

10. >Cu¶ales son los cargos que podr¶³a ocupar el graduado en bachillerato en inform¶atica?

11. >Qu¶e capacidades deben tener los egresados de la carrera de inform¶atica?

12. >Cu¶ales son las cuatro ¶areas disciplinarias de la carrera de bachillerato en inform¶atica educativa?

13. >Qu¶e es la ingenier¶³a de software educativo?

14. >Qu¶e es la pedagog¶³a?

15. >Qu¶e es la inform¶atica educativa?

16. >Entre cu¶ales centros educativos se comparte la carrera de Inform¶atica Educativa?

17. >Desde qu¶e fecha se cuenta con el bachillerato en Inform¶atica Educativa y que nombre recib¶³adicha carrera anteriormente?

18. >Cu¶al es el objetivo general de la Inform¶atica Educativa?

19. >Cu¶ales son las ¶areas disciplinarias en las que se dividen los cursos del bachillerato en In-form¶atica Educativa?

Page 16: Crestomatía

16 CAP¶ITULO 1. ORIENTACI ¶ON PROFESIONAL

20. >Cu¶al es el a~no en que la UNA tiene sus primeros graduandos en inform¶atica y en que a~no laEscuela de Inform¶atica se independiza del Centro de C¶omputo? Escriba el nombre que se leda.

Page 17: Crestomatía

Cap¶³tulo 2

Reglamentos importantes

Presentamos aqu¶³ informaci¶on necesaria para que el estudiante se capaz de identi¯car y ejercer susresponsabilidades hacia el curso, la carrera y su desempe~no profesional en general.

2.1 Pre¶ambulo

Docentes y estudiantes son los protagonistas de los procesos de ense~nanza y aprendizaje, de suinnovaci¶on y actualizaci¶on permanentes. Ambos construyen, en el marco de una relaci¶on dial¶ogicapermanente, espacios que favorecen el desarrollo del conocimiento y su desarrollo integral comopersonas, en estrecha relaci¶on con las distintas ¶areas acad¶emicas institucionales y el contexto sociohist¶orico nacional e internacional.El proceso de ense~nanza y aprendizaje promueve la construcci¶on de conocimientos, el desarrollo

de habilidades, destrezas, actitudes y valores dirigidos a la plena realizaci¶on del ser humano. Paraello, supera la mera transmisi¶on del conocimiento y se fundamenta en el an¶alisis y problematizaci¶onde la realidad, en el trabajo pr¶actico e investigativo sobre el contexto en que se desenvuelve, en eldesarrollo de competencias para la soluci¶on de problemas, en el trabajo en equipo y en la toma dedecisiones con base en informaci¶on con¯able y oportuna. Es un proceso que estimula el gusto poraprender y que incentiva el aprendizaje permanente, el aprender a aprender y la educaci¶on continua.Tambi¶en considera el contexto y los avances del conocimiento; incorpora las nuevas tecnolog¶³as, lasque in°uyen signi¯cativamente en las formas de aprendizaje y el trabajo pedag¶ogico, y las relacionesde los estudiantes con el entorno familiar, comunitario y con la sociedad en general. Asimismoconcede un mayor ¶enfasis a los valores, especialmente los relacionados con el ambiente, con el modelode desarrollo y con la atenci¶on a la problem¶atica sociocultural.En la construcci¶on y reconstrucci¶on de los aprendizajes el aporte de los estudiantes juega un papel

decisivo. Con base en sus propios acervos de informaci¶on, creencias, valores y formas culturales,son responsables activos de su propio aprendizaje y consolidan nuevos esquemas que les permitendesarrollar plenamente sus potencialidades. Los procesos de ense~nanza y aprendizaje promueven encada estudiante la apropiaci¶on del conocimiento, as¶³ como su aplicaci¶on a la resoluci¶on de problemasy generaci¶on de capacidades y actitudes asociadas a la innovaci¶on, la cooperaci¶on y el liderazgo.La evaluaci¶on educativa ha evolucionado y se ha enriquecido hacia una evaluaci¶on integral y

continua que toma en cuenta todos los aspectos relacionados con el proceso educativo, no solo los

17

Page 18: Crestomatía

18 CAP¶ITULO 2. REGLAMENTOS IMPORTANTES

que pueden ser veri¯cados en un examen o en una demostraci¶on, sino todos los aspectos relacionadoscon el clima de trabajo en la clase y la disposici¶on que muestren docentes y alumnos durante eldesarrollo de los cursos, como puntualidad, participaci¶on, disposici¶on al trabajo en equipo y esfuerzopersonal, entre otros. En este sentido la evaluaci¶on es un proceso din¶amico que adem¶as de los logroscognoscitivos, considera el desarrollo y modi¯caci¶on de habilidades, destrezas, valores y actitudes.La evaluaci¶on es una oportunidad de re°exionar sobre la pr¶actica pedag¶ogica, que permite valorar,

reforzar y mejorar, los procesos de ense~nanza y aprendizaje, en concordancia con la naturaleza dela disciplina y de la carrera, de la metodolog¶³a de trabajo utilizada, de los objetivos del curso y lascaracter¶³sticas socioculturales de los estudiantes.

2.2 Contenido de los art¶³culos

A continuaci¶on se hace un recuento de los art¶³culos de este reglamente. M¶as adelante se explican endetalle cada uno de ellos.

SOBRE EL OBJETIVO Y RESPONSABLES DE SU APLICACI¶ON

Art¶³culo 1. OBJETO DEL REGLAMENTO.

Art¶³culo 2. RESPONSABLES.

SOBRE LOS ESTUDIANTES Y EL PLAN DE ESTUDIOS

Art¶³culo 3. CATEGOR¶IAS DE ESTUDIANTES.

Art¶³culo 4. DEFINICI¶ON DE CATEGOR¶IAS DE ESTUDIANTES.

Art¶³culo 5. RESPETO A LAS CAPACIDADES Y NECESIDADES EDUCATIVAS ES-PECIALES.

Art¶³culo 6. INDUCCI¶ON A LA CARRERA.

Art¶³culo 7. MODIFICACIONES CURRICULARES.

Art¶³culo 8. DEL GU¶IA ACAD¶EMICO.

Art¶³culo 9. DE LA REPETICI¶ON DE CURSOS

SOBRE LOS PROGRAMAS DE LOS CURSOS

Art¶³culo 10. DEFINICI¶ON.

Art¶³culo 11. CONTENIDOS DEL PROGRAMA DEL CURSO.

Art¶³culo 12. ELABORACI¶ON, DISCUSI¶ON Y EJECUCI¶ON DEL PROGRAMA DELCURSO.

Art¶³culo 13. ENTREGA DE LA PROPUESTA DE LOS PROGRAMAS A LA DIREC-CI¶ON DE LA UNIDAD ACAD¶EMICA.

Art¶³culo 14. ENTREGA DE LA PROPUESTA DE PROGRAMA A LOS ESTUDI-ANTES.

Page 19: Crestomatía

2.2. CONTENIDO DE LOS ART¶ICULOS 19

SOBRE LA EVALUACION

Art¶³culo 15. PROCEDIMIENTOS DE EVALUACI¶ON.

Art¶³culo 16. MODIFICACI¶ON DE LOS PROCEDIMIENTOS DE EVALUACI¶ON.

Art¶³culo 17. COMUNICACI¶ON DE LAS MODIFICACIONES DE LOS PROCED-IMIENTOS DE EVALUACI¶ON.

Art¶³culo 18. ESCALA DE EVALUACI¶ON.

Art¶³culo 19. OTROS SISTEMAS DE CALIFICACI¶ON.

Art¶³culo 20. ENTREGA DE RESULTADOS DE LAS EVALUACIONES.

Art¶³culo 21. PROGRAMACI¶ON DE LAS EVALUACIONES.

Art¶³culo 22. N¶UMERO DE EVALUACIONES.

Art¶³culo 23. P¶ERDIDA DE LA EVALUACI¶ON.

Art¶³culo 24. PLAGIO.

Art¶³culo 25. COPIA.

SOBRE LAS AUSENCIAS

Art¶³culo 26. AUSENCIA DEL ESTUDIANTE A UNA EVALUACI¶ON.

Art¶³culo 27. AUSENCIA DEL DOCENTE A UNA EVALUACI¶ON.

Art¶³culo 28. AUSENCIA DEL DOCENTE AL CURSO

SOBRE LAS EVALUACIONES EXTRAORDINARIAS

Art¶³culo 29. PRUEBA EXTRAORDINARIA.

Art¶³culo 30. CANCELACI¶ON DE LOS DERECHOS POR CONCEPTO DE PRUEBAEXTRAORDINARIA.

Art¶³culo 31. SITUACIONES EN LAS QUE NO SE APLICAN PRUEBAS EXTRAOR-DINARIAS.

Art¶³culo 32. PER¶IODO ENTRE LA COMUNICACI¶ON DE LA NOTA FINAL Y LAREALIZACI¶ON DE LA PRUEBA EXTRAORDINARIA.

Art¶³culo 33. APROBACI¶ON Y REPORTE DE LA PRUEBA EXTRAORDINARIA.

Art¶³culo 34. ENTREGA DE LAS EVALUACIONES CALIFICADAS.

SOBRE LAS EVALUACI¶ONES POR SUFICIENCIA

Art¶³culo 35. DEFINICI¶ON.

Art¶³culo 36. CRITERIOS PARA REALIZAR EVALUACIONES POR SUFICIENCIA.

Art¶³culo 37. PROGRAMACI¶ON DE LAS EVALUACIONES POR SUFICIENCIA.

Page 20: Crestomatía

20 CAP¶ITULO 2. REGLAMENTOS IMPORTANTES

Art¶³culo 38. SOLICITUD Y N¶UMERO DE VECES QUE SE PUEDE PRESENTARLA EVALUACI¶ON POR SUFICIENCIA.

Art¶³culo 39. RESOLUCI¶ON SOBRE LA SOLICITUD.

Art¶³culo 40. FALLO DEL TRIBUNAL.

DE LAS CALIFICACIONES

Art¶³culo 41. RETIRO JUSTIFICADO ORDINARIO Y EXTRAORDINARIO.

Art¶³culo 42. CANCELACI¶ON DE DERECHOS.

Art¶³culo 43. DEL REPORTE DE INCOMPLETO EN LOS CURSOS.

Art¶³culo 44. MATR¶ICULA CONDICIONADA.

Art¶³culo 45. PLAZO PARA ENTREGAR LAS ACTAS ORDINARIAS Y EXTRAOR-DINARIAS DE CALIFICACIONES.

Art¶³culo 46. MODIFICACI¶ON DE LAS ACTAS DE CALIFICACIONES.

SOBRE LA RETENCION DE LA ESCOLARIDAD

Art¶³culo 47. DEFINICI¶ON.

Art¶³culo 48. CAUSAS QUE AMERITAN LA RETENCI¶ON DE ESCOLARIDAD.

Art¶³culo 49. REQUISITOS PARA LA RETENCI¶ON DE ESCOLARIDAD.

Art¶³culo 50. REPORTE EN LAS ACTAS DE CURSO EN CASO DE RETENCI¶ON DEESCOLARIDAD.

Art¶³culo 51. REGRESO A LOS CURSOS.

SOBRE LOS RECURSOS DE APELACION

Art¶³culo 52. REVISI¶ON DEL RESULTADO DE LAS EVALUACIONES.

Art¶³culo 53. APELACI¶ON DE LA DECISI¶ON DEL PROFESOR.

Art¶³culo 54. FUNCI¶ON DEL TRIBUNAL DE APELACI¶ON.

Art¶³culo 55. REPROGRAMACI¶ON DE LA PRUEBA EXTRAORDINARIA .

Art¶³culo 56. MATR¶ICULA PROVISIONAL POR APELACION EN PROCESO.

Art¶³culo 57. RECURSOS CONTRA LAS DECISIONES DE RETENCI¶ON DE LAESCOLARIDAD.

DEL MEJORAMIENTO DEL PROCESO DE ENSE~NANZA APRENDIZAJE

Art¶³culo 58. EVALUACI¶ON DEL DESARROLLO DEL CURSO.

Art¶³culo 59. SEGUIMIENTO DE LA ACTIVIDAD DOCENTE.

Page 21: Crestomatía

2.3. OBJETIVO Y RESPONSABLES DE SU APLICACI ¶ON 21

Art¶³culo 60. EVALUACION DEL DOCENTE.

Art¶³culo 61. PROCESOS DE AUTOEVALUACI¶ON Y DE MEJORAMIENTO DE LAACTIVIDAD DOCENTE.

Art¶³culo 62. DIVULGACION DE LAS NORMAS.

SOBRE DISPOSICIONES FINALES

Art¶³culo 63. PROCEDIMIENTOS RELACIONADOS CON ESTE REGLAMENTO.

Art¶³culo 64. DEROGATORIA.

Art¶³culo 65. VIGENCIA.

TRANSITORIOS

TRANSITORIO AL

Art¶³culo 31

TRANSITORIO AL

Art¶³culo 32

TRANSITORIO AL

Art¶³culo 45

TRANSITORIO AL

Art¶³culo 60

2.3 Objetivo y responsables de su aplicaci¶on

Art¶³culo 1. (Objeto del reglamento).

Esta normativa regula los procesos de ense~nanza y aprendizaje de la Universidad Nacional.

² Art¶³culo 2. (Responsables).En su calidad de superior jer¶arquico, los directores y directoras de unidades acad¶emicas ser¶anlos responsables de velar por el cumplimiento y la ejecuci¶on de este Reglamento en su unidad.Las decanas y los decanos en su facultad, centro o sede, y la Vicerrector¶³a Acad¶emica en el¶ambito general, son los responsables de efectuar el seguimiento correspondiente.

Page 22: Crestomatía

22 CAP¶ITULO 2. REGLAMENTOS IMPORTANTES

2.4 Sobre los estudiantes y el plan de estudios

² Art¶³culo 3. (Categor¶³as de estudiantes)La Universidad Nacional tendr¶a cuatro categor¶³as de estudiantes: regulares, especiales, ex-traordinarios y en condici¶on de oyentes, con los derechos y obligaciones especi¯cadas en elEstatuto Org¶anico, en este reglamento y en los procedimientos correspondientes, as¶³ como enotra normativa institucional.

² Art¶³culo 4. (De¯nici¶on de categor¶³as de estudiantes)Estudiante regular: es aquel admitido y matriculado en la Universidad Nacional con objeto deadquirir formaci¶on conducente a la obtenci¶on de un grado acad¶emico o t¶³tulo que otorgue laUniversidad, independientemente del tipo de ¯nanciamiento. Se regir¶an por lo establecido enel presente reglamento los estudiantes de pregrado, grado y posgrado.

Estudiante especial: es aquel que proviene de otra universidad, nacional o extranjera, que tieneal menos aprobado el primer a~no de estudios de la carera en que est¶a inscrito en la universidadde origen y que matricula cursos de grado o posgrado en la Universidad Nacional.

Estudiante extraordinario: es aquel que demuestra una actitud superior en el ¶area de conoci-miento de la carrera y a quien se le permite matricular uno o varios cursos pertenecientes aun plan de estudios, al margen de los requisitos que establece el sistema de admisi¶on para losestudiantes regulares. Con respecto al r¶egimen de evaluaci¶on se someter¶a a lo establecido en elcap¶³tulo IV del presente reglamento.

Estudiante en condici¶on de oyente: es aquel que se le permite asistir a un curso regular de undeterminado plan de estudios de la Universidad Nacional, al margen del sistema de admisi¶on,de los requisitos que establece el plan de estudios y del r¶egimen de evaluaci¶on.

² Art¶³culo 5. (Respeto a las capacidades y necesidades educativas especiales)Todo estudiante que presenta necesidades educativas derivadas o no de una discapacidad yque se encuentra inscrito en una carrera, tiene derecho a recibir lecciones accesibles de acuerdocon sus capacidades y necesidades e informaci¶on sobre los servicios de apoyo que brinda laInstituci¶on y la unidad acad¶emica.

² Art¶³culo 6. (Inducci¶on a la carrera)La Direcci¶on de la unidad acad¶emica, en coordinaci¶on con la Vicerrector¶³a de Vida Estudiantil,debe brindar un proceso de inducci¶on a los estudiantes sobre la carrera y sus deberes y derechosen relaci¶on con el plan de estudios en el cual est¶an inscritos.

² Art¶³culo 7. (Modi¯caciones curriculares)El plan de estudios, como documento acad¶emico de car¶acter o¯cial que establece la organizaci¶oncurricular y administrativa de una carrera, podr¶a ser modi¯cado parcial o totalmente. LaDirecci¶on de la unidad acad¶emica es responsable de mantener informado al estudiantado sobrelas modi¯caciones curriculares que se realicen.

Page 23: Crestomatía

2.5. SOBRE LOS PROGRAMAS DE LOS CURSOS 23

Cuando se trate de una modi¯caci¶on curricular integral, el estudiante tiene derecho a continuarcon el plan anterior u optar por el nuevo. En este ¶ultimo caso, la unidad acad¶emica realizar¶alas equivalencias de los cursos que el estudiante aprob¶o. Si el estudiante continua con el planen el cual estaba inscrito inicialmente, tendr¶a un plazo m¶aximo de tres a~nos para concluirsus estudios, a partir de la fecha en que el plan de estudios se declar¶o terminal. En curso decarreras con Licenciatura como ¶unica salida, el plazo m¶aximo lo determinar¶a la Vicerrector¶³aAcad¶emica en coordinaci¶on con las autoridades de escuela. De no lograrlo, deber¶a ajustarse alnuevo plan de estudios. Las modi¯caciones curriculares parciales se incorporar¶an en el historialacad¶emico de los estudiantes inscritos en la carrera.

² Art¶³culo 8. (Del gu¶³a acad¶emico)El gu¶³a acad¶emico es la persona responsable de orientar al estudiante de manera permanentedurante su carrera, en aspectos que se relacionan directamente con su desarrollo acad¶emico, laatenci¶on a sus necesidades educativas, proporcionar informaci¶on sobre servicios de apoyo conque cuenta la unidad acad¶emica y la Universidad y la aplicaci¶on de las adecuaciones curriculares.Es responsabilidad de las unidades acad¶emicas de¯nir el per¯l y establecer el gu¶³a acad¶emicode acuerdo con las caracter¶³sticas de sus carreras.

² Art¶³culo 9. (De la repetici¶on de cursos)Si el estudiante pierde un curso en la segunda oportunidad, su caso ser¶a estudiado integral-mente por el gu¶³a acad¶emico, el Coordinador de Vida Estudiantil de la Facultad, Centro o SedeRegional y un especialista del Departamento de Orientaci¶on de la Vicerrector¶³a de Vida Estu-diantil, con el prop¶osito de recomendar al estudiante y a la direcci¶on de la unidad acad¶emicalas medidas pertinentes.

2.5 Sobre los programas de los cursos

² Art¶³culo 10. (De¯nici¶on)El programa del curso es el documento o¯cial en el que se establecen los compromisos y condi-ciones en cuyo marco se desarrollan los procesos de ense~nanza y aprendizaje.

² Art¶³culo 11. (Contenidos del programa del curso)El programa del curso debe contener como m¶³nimo: nombre y c¶odigo del curso, periodo lectivo,a~no, nombre del docente, n¶umero de cr¶editos, horas presenciales contacto (teor¶³a, laboratorio,pr¶actica y otras actividades semejantes, realizadas en un horario y fecha determinada), horariode atenci¶on a estudiantes, horas de estudio independiente (actividad acad¶emica no presencialdel estudiante), requisitos y correquisitos, descripci¶on general del curso, objetivos o prop¶ositos,contenidos, estrategia metodol¶ogica y evaluativa, cronograma, la bibliograf¶³a.

La obligatoriedad de asistencia presencial de los estudiantes a los cursos deber¶a estar indicadaen el respectivo programa de curso, fundamentada en la naturaleza y enfoque metodol¶ogico delmismo y en concordancia con la normativa vigente.

Page 24: Crestomatía

24 CAP¶ITULO 2. REGLAMENTOS IMPORTANTES

Las t¶ecnicas e instrumentos de evaluaci¶on para los cursos deben establecerse en el programacon las respectivas fechas en que se realizar¶an.

² Art¶³culo 12. (Elaboraci¶on, discusi¶on y ejecuci¶on del programa del curso)La propuesta del programa de curso debe ser elaborada por el o los docentes que imparten lamateria y discutida en el equipo de la carrera a que pertenece el curso, de conformidad con loslineamientos curriculares de la Instituci¶on y el per¯l profesional propuesto en el plan de estudiosde la carrera. Le corresponder¶a a la Direcci¶on de la unidad acad¶emica aprobar los programasde curso en cada ciclo lectivo, garantizar el cumplimiento del programa y el seguimiento deltrabajo que se desarrolle en el aula.

² Art¶³culo 13. (Entrega de la propuesta de los programas a la direcci¶on de la unidad acad¶emica)Es obligaci¶on de los docentes entregar a la Direcci¶on de la unidad acad¶emica, una versi¶ondigital y dos copias de los programas de¯nitivos de los cursos que impartir¶an y de las estrategiasmetodol¶ogicas y de evaluaci¶on espec¶³¯cas para la atenci¶on de los estudiantes con necesidadeseducativas especiales, para los efectos institucionales correspondientes.

Es responsabilidad de la unidad acad¶emica mantener en archivo digital y escrito los programasde los cursos tanto propios como de servicio.

² Art¶³culo 14. (Entrega de la propuesta de programa a los estudiantes) Los docentes deber¶anentregar a cada estudiante el programa del curso, en la primera semana de cada per¶³odo lectivo,para su an¶alisis e incorporaci¶on de las observaciones pertinentes.

2.6 Sobre la evaluaci¶on

² Art¶³culo 15. (Procedimientos de evaluaci¶on)Los Procedimientos de evaluaci¶on en los cursos deber¶an tomar en cuenta este reglamento, loslineamientos curriculares, el per¯l profesional, la naturaleza de la disciplina y los principios delproceso de ense~nanza y aprendizaje utilizado.

² Art¶³culo 16. (Modi¯caci¶on de los procedimientos de evaluaci¶on)Los procedimientos de evaluaci¶on incluidos en el programa del curso solo podr¶an ser variadospor razones justi¯cadas y por acuerdo del profesor y los estudiantes, establecido al menos unasemana antes de la aplicaci¶on del cambio en la evaluaci¶on.

² Art¶³culo 17. (Comunicaci¶on de las modi¯caciones de los procedimientos de evaluaci¶on)El docente que modi¯que los procedimientos de evaluaci¶on incluidos en el programa del curso,deber¶a comunicar el cambio realizado al director de la unidad acad¶emica y entregarle una copiadel acta donde consta el acuerdo tomado con los estudiantes.

Page 25: Crestomatía

2.6. SOBRE LA EVALUACI ¶ON 25

² Art¶³culo 18. (Escala de evaluaci¶on)El estudiante ser¶a cali¯cado con base en una escala que va de cero (0) a diez (10). La cali¯caci¶onm¶³nima de aprobaci¶on es siete (7). Toda cali¯caci¶on ¯nal deber¶a redondearse de la siguientemanera:

del 0.10 al 0.24, corresponde a 0.25del 0.26 a 0.49, corresponde a 0.50del 0.51 al 0.74, corresponde a 0.75del 0.76 al 0.99, corresponde al entero superior

² TRANSITORIO AL Art¶³culo 18 LA APLICACI¶ON DE LA ESCALA DE EVALUACI¶ONESTABLECIDA EN EL Art¶³culo 18 SE APLICAR¶A A PARTIR DEL SEGUNDO CICLOY SEGUNDO TRIMESTRE DEL 2007. LAS CALIFICACIONES FINALES DEL A~NO 2006Y PRIMER CICLO Y PRIMER TRIMESTRE DE 2007 SE REPORTAR¶AN SEG¶UN LASIGUIENTE ESCALA DE EVALUACI¶ON: TODA CALIFICACI¶ON FINAL DEBERA RE-DONDEARSE AL ENTERO O MEDIA UNIDAD M¶AS PR¶OXIMA AS¶I: DE 0.1 A 0.25 ALENTERO INFERIOR, DE 0.26 A 0.75 A LAMEDIA UNIDAD Y DE 0.76 A 0.99 AL ENTEROSUPERIOR.

ESTE ACUERDO FUE PUBLICADO COMO ALCANCE N 1 A LA GACETA N 20- 2006Y ENTR¶O EN VIGENCIA A PARTIR DEL D¶IA 30 DE NOVIEMBREDEL 2006. FUEPUBLICADO NUEVAMENTE EN UNA-GACETA 22-2006.

² Art¶³culo 19. (Otros sistemas de cali¯caci¶on)En casos debidamente autorizados por la Direcci¶on de Docencia, podr¶an utilizarse otros sis-temas de cali¯caci¶on, en reemplazo de la escala num¶erica. ¶Estos deber¶an incluir una tabla deequivalencia con la escala num¶erica, para efectos de reconocimiento y equiparaci¶on de cursos yde estudios.

² Art¶³culo 20. (Entrega de resultados de las evaluaciones).El profesor deber¶a se~nalar, por escrito, en el documento de evaluaci¶on correspondiente, lasobservaciones pertinentes y deber¶a entregar y comentar con los estudiantes los resultados de laevaluaci¶on, en un plazo no mayor de ocho d¶³as naturales a partir de la fecha en que se llev¶o acabo.

² Art¶³culo 21. (Programaci¶on de las evaluaciones)Las evaluaciones se efectuar¶an en las horas lectivas correspondientes al curso o en otras fechaspreviamente establecidas en el programa. Si se requiere una modi¯caci¶on en el horario y en lasfechas previstas, debe existir acuerdo entre docentes y estudiantes en la nueva fecha designada.

² Art¶³culo 22. (N¶umero de evaluaciones).No se podr¶an realizar m¶as de dos pruebas evaluativas en un mismo nivel de carrera en la mismafecha sean ¶estas escritas, orales o de ejecuci¶on art¶³stica. En caso de con°icto, ser¶a resuelto porla Direcci¶on de la unidad acad¶emica.

Page 26: Crestomatía

26 CAP¶ITULO 2. REGLAMENTOS IMPORTANTES

² Art¶³culo 23. (P¶erdida de la evaluaci¶on)En el caso de extrav¶³o por parte del docente de cualquier evaluaci¶on o documento sujeto aevaluaci¶on, el estudiante tendr¶a derecho a que se le asigne una nota equivalente al promediode todas las evaluaciones del curso u optar por repetir la prueba, en un plazo m¶aximo de cincod¶³as h¶abiles despu¶es de la noti¯caci¶on del extrav¶³o.

El director de la unidad acad¶emica deber¶a informar al Consejo Acad¶emico de Unidad sobreesta situaci¶on, con el ¯n de tomar las medidas que correspondan, si fuere el caso.

² Art¶³culo 24. (Plagio).Se considera plagio la reproducci¶on parcial o total de documentos ajenos present¶andolos comopropios. En el caso que se compruebe el plagio por parte del estudiante, perder¶a el curso. Sireincide ser¶a suspendido de la carrera por un ciclo lectivo, y si la situaci¶on se repite una vezm¶as, ser¶a expulsado de la Universidad.

² Art¶³culo 25. (COPIA)Se considera copia todo documento o medio no autorizado utilizado de manera subrepticia porel estudiante durante una prueba evaluativa.

De comprobarse la copia en la realizaci¶on de una evaluaci¶on, esta ser¶a cali¯cada con nota decero y el estudiante perder¶a el porcentaje correspondiente a esa evaluaci¶on, independientementede la eventual sanci¶on disciplinaria establecida en la normativa institucional.

2.7 Sobre las ausencias

² Art¶³culo 26. (Ausencia del estudiante a una evaluaci¶on)El estudiante que por enfermedad, u otra causa de fuerza mayor, no pueda efectuar una eval-uaci¶on consignada en el programa, debe presentar al profesor, por escrito, la justi¯caci¶on conlos documentos probatorios en un tiempo l¶³mite de cinco d¶³as h¶abiles a partir de la fecha enque se realiz¶o la evaluaci¶on. Si procede repetir la evaluaci¶on, de com¶un acuerdo se ¯jar¶a lafecha y hora de su aplicaci¶on, la que se realizar¶a dentro de los ocho d¶³as h¶abiles siguientes a lapresentaci¶on de la justi¯caci¶on. En caso de no aceptarse la justi¯caci¶on, el estudiante puederealizar el tr¶amite de apelaci¶on correspondiente.

² Art¶³culo 27. (Ausencia del docente a una evaluaci¶on)Si una evaluaci¶on no se realiza en la fecha prevista, por ausencia del docente, los estudiantesdeber¶an levantar un acta consignando la ausencia. ¶Esta ser¶a presentada a la Direcci¶on de laUnidad Acad¶emica, quien tomar¶a las medidas del caso para que la evaluaci¶on se realice decom¶un acuerdo, en fecha posterior.

² Art¶³culo 28. (Ausencia del docente al curso)Si un docente se ausenta de las clases, por diferentes razones, deber¶a tomar las medidas quecorrespondan para garantizar el cumplimiento del programa del curso.

Page 27: Crestomatía

2.8. SOBRE LAS EVALUACIONES EXTRAORDINARIAS 27

2.8 Sobre las evaluaciones extraordinarias

² Art¶³culo 29. (Prueba extraordinaria)La prueba extraordinaria es la oportunidad que se brinda a un estudiante de demostrar el logrode los objetivos de un curso en el que no obtuvo el rendimiento m¶³nimo requerido para suaprobaci¶on. Tendr¶an derecho a realizar la prueba extraordinaria los estudiantes cuya nota ¯nalreportada en el acta sea igual a 6.0 y menor a 7.0.

² Art¶³culo 30. (Cancelaci¶on de los derechos por concepto de prueba extraordinaria)Para realizar la prueba extraordinaria el estudiante deber¶a cancelar los derechos correspondien-tes estipulados por la Instituci¶on. El monto correspondiente ser¶a determinado por el Programade Gesti¶on Financiera y se recali¯car¶a cada a~no seg¶un los criterios que se de¯nan para esosefectos. El recibo de pago deber¶a ser presentado al profesor al momento de la prueba.

Se exime de la cancelaci¶on de los derechos por concepto de prueba extraordinaria a los es-tudiantes que por su condici¶on socio-econ¶omica, gozan de la exoneraci¶on del pago total dematr¶³cula.

² Art¶³culo 31. (Situaciones en las que no se aplican pruebas extraordinarias)No se realizar¶an pruebas extraordinarias en aquellos cursos de naturaleza pr¶actica, laborato-rios, seminarios y talleres, as¶³ como en la pr¶actica profesional supervisada, que requieren deldesarrollo progresivo de habilidades, destrezas y aptitudes por parte de los estudiantes duranteel ciclo lectivo. Esto deber¶a estar de¯nido en el plan de estudios y se~nalarse en el programa decurso correspondiente.

En los cursos en que as¶³ se determine, se har¶a una ¶unica evaluaci¶on extraordinaria, en las fechasestablecidas en el Calendario Universitario.

² TRANSITORIO AL Art¶³culo 31Las unidades acad¶emicas tendr¶an un plazo de un mes a partir de la publicaci¶on de este reglamen-to para que comuniquen cu¶ales son los cursos en los que, por su naturaleza, no se aplican lasevaluaciones extraordinarias.

² Art¶³culo 32. (Per¶³odo entre la comunicaci¶on de la nota ¯nal y la realizaci¶on de la pruebaextraordinaria)

El per¶³odo que transcurra entre la comunicaci¶on de la nota ¯nal del curso y la realizaci¶on dela evaluaci¶on extraordinaria deber¶a ser de al menos ocho d¶³as h¶abiles.

² TRANSITORIO ALArt¶³culo 32En tanto existan cursos trimestrales, el per¶³odo que transcurra entre la comunicaci¶on de la nota¯nal del curso y la realizaci¶on de la evaluaci¶on extraordinaria ser¶a de entre cinco y ocho d¶³ash¶abiles, seg¶un se de¯na en el Calendario Universitario.

Page 28: Crestomatía

28 CAP¶ITULO 2. REGLAMENTOS IMPORTANTES

² Art¶³culo 33. (Aprobaci¶on y reporte de la prueba extraordinaria)La prueba extraordinaria se aprueba con una nota igual o mayor a 7.0. Si la evaluaci¶on esaprobada, en el acta se consignar¶a la nota de 7.0, independientemente de la nota obtenida en laevaluaci¶on. De obtenerse una nota inferior a 7.0, se reporta la nota ¯nal obtenida en el curso.

² Art¶³culo 34. (Entrega de las evaluaciones cali¯cadas.)Los docentes entregar¶an a los estudiantes la evaluaci¶on cali¯cada y la nota correspondientedurante los 5 d¶³as h¶abiles posteriores a la realizaci¶on de la misma.

2.9 Sobre las evaluaci¶ones por su¯ciencia

² Art¶³culo 35. (De¯nici¶on)La evaluaci¶on por su¯ciencia es el servicio que se ofrece a los estudiantes regulares para de-mostrar el dominio de los contenidos de un curso o de una destreza determinada.

² Art¶³culo 36. (Criterios para realizar evaluaciones por su¯ciencia)Los criterios para de¯nir los cursos que podr¶an ser aprobados por su¯ciencia ser¶an establecidospor cada unidad acad¶emica, de acuerdo con la naturaleza del curso y las exigencias de los planesde estudio.

² Art¶³culo 37. (Programaci¶on de las evaluaciones por su¯ciencia)Las evaluaciones por su¯ciencia ser¶an programadas por las unidades acad¶emicas dos veces ala~no.

² Art¶³culo 38. (Solicitud y n¶umero de veces que se puede presentar la evaluaci¶on por su¯ciencia)El interesado presentar¶a por escrito la solicitud respectiva a la Direcci¶on de la unidad acad¶emicay tendr¶a la opci¶on de presentar la evaluaci¶on por su¯ciencia para un curso una ¶unica vez.

² Art¶³culo 39. (Resoluci¶on sobre la solicitud)La Direcci¶on de la unidad acad¶emica deber¶a decidir sobre las solicitudes en un plazo no mayor detreinta d¶³as naturales y proceder¶a al nombramiento de los tribunales correspondientes; pondr¶aa disposici¶on de los solicitantes los contenidos y objetivos del curso con al menos 15 d¶³as deantelaci¶on a la evaluaci¶on.

² Art¶³culo 40. (Fallo del tribunal)Los fallos del tribunal de evaluaciones por su¯ciencia ser¶an inapelables. El tribunal levantar¶aun acta, la cual ser¶a enviada a la Direcci¶on de la unidad acad¶emica para que realice el tr¶amitecorrespondiente ante el Departamento de Registro en un plazo m¶aximo de dos semanas despu¶esde la fecha de realizaci¶on de la prueba por su¯ciencia.

Page 29: Crestomatía

2.10. DE LAS CALIFICACIONES 29

2.10 De las cali¯caciones

² Art¶³culo 41. (Retiro justi¯cado ordinario y extraordinario)El estudiante podr¶a hacer retiro justi¯cado ordinario o extraordinario de un curso cuando as¶³ losolicite ante el Departamento de Registro, seg¶un los procedimientos establecidos y de acuerdocon las fechas establecidas en el Calendario Universitario.

² Art¶³culo 42. (Cancelaci¶on de derechos)El monto de los derechos a cancelar por concepto de retiro justi¯cado extraordinario de cursoslo determinar¶a el Programa de Gesti¶on Financiera y se recali¯car¶an cada a~no seg¶un los criteriosque de¯na la Instituci¶on para estos efectos.

² Art¶³culo 43. (Del reporte de incompleto en los cursos)Cuando por situaciones especiales un estudiante no puede cumplir con alguno de los requeri-mientos del curso, podr¶a solicitar justi¯cadamente al profesor que le reporte un incompleto enel acta correspondiente.

De aceptarse la solicitud el estudiante contar¶a con 22 d¶³as h¶abiles despu¶es de la ¯nalizaci¶ondel curso para cumplir con el requerimiento pendiente. El profesor proceder¶a de inmediato areportar la nota correspondiente.

En el caso de los trabajos de graduaci¶on la vigencia del incompleto podr¶a extenderse m¶as all¶ade los 22 d¶³as, a criterio del Consejo Acad¶emico de Unidad.

² Art¶³culo 44. (Matr¶³cula condicionada)El estudiante podr¶a matricular en forma condicionada aquellos cursos para los cuales el cursocali¯cado con incompleto es requisito. La matr¶³cula quedar¶a en ¯rme cuando se informe alDepartamento de Registro la aprobaci¶on del curso reportado con incompleto.

² Art¶³culo 45. (Plazo para entregar las actas ordinarias y extraordinarias de cali¯caciones)Una vez concluido el periodo de evaluaciones ¯nales establecido en el Calendario Universitario,el profesor contar¶a con 5 d¶³as h¶abiles para entregar a la Direcci¶on de la unidad acad¶emica lasactas correspondientes.

² TRANSITORIO AL Art¶³culo 45Mientras no entre en funcionamiento el sistema automatizado, la unidad acad¶emica contar¶acon tres d¶³as h¶abiles para remitir las actas ordinarias y extraordinarias de cali¯caciones alDepartamento de Registro.

² Art¶³culo 46. (Modi¯caci¶on de las actas de cali¯caciones)Las modi¯caciones a las actas de cali¯caci¶on podr¶an ser tramitadas con la ¯rma del profesordel curso y del Director de la unidad acad¶emica solamente cuando existiese un error compro-bado. Ante la imposibilidad de tener acceso al profesor, el director, previo acuerdo del consejoacad¶emico de la unidad, est¶a facultado a realizar modi¯caciones en un acta de cali¯caciones.

Page 30: Crestomatía

30 CAP¶ITULO 2. REGLAMENTOS IMPORTANTES

2.11 Sobre la retenci¶on de la escolaridad

² Art¶³culo 47. (De¯nici¶on)La retenci¶on de escolaridad, seg¶un procedimientos de¯nidos al efecto, es una dispensa que laInstituci¶on otorga a un estudiante, para suspender temporalmente sus estudios. El tiempom¶aximo de retenci¶on ser¶a de dos a~nos.

² Art¶³culo 48. (Causas que ameritan la retenci¶on de escolaridad)Son causas que ameritan la retenci¶on de la escolaridad:

a) Realizar estudios en otras instituciones de educaci¶on superior y programas acad¶emicosamparados por convenios ¯rmados con la Universidad Nacional.

b) Problemas de salud.

c) Problemas derivados de una discapacidad

d) Problemas socioecon¶omicos o laborales.

e) Otros debidamente justi¯cados.

Todas las causales se~naladas deben ser debidamente documentadas.

² Art¶³culo 49. (Requisitos para la retenci¶on de escolaridad)Son condiciones necesarias para que el estudiante pueda ser objeto de retenci¶on de escolaridad:

a) Ser estudiante regular.

b) Haber cursado m¶as del 50% de los cursos en los que solicitar¶a la retenci¶on de escolaridad.

c) Tener un rendimiento acad¶emico m¶³nimo de 7.0 como promedio ponderado en el His-torial Acad¶emico.

² Art¶³culo 50. (Reporte en las actas de curso en caso de retenci¶on de escolaridad)Los profesores de los cursos matriculados por un estudiante al que se le haya otorgado laretenci¶on de escolaridad, reportar¶an en el acta de cali¯caciones R.E. (Retenci¶on de Escolaridad).

² Art¶³culo 51. (Regreso a los cursos.)Si el plan de estudios no ha sufrido modi¯caciones en cuanto a cursos, cr¶editos, objetivos y horasde trabajo, durante el per¶³odo en el cual el estudiante permaneci¶o con retenci¶on de escolaridad,a su regreso solicita a la Direcci¶on de la unidad acad¶emica la matr¶³cula por inclusi¶on.

En el caso de cursos que requieran el desarrollo de habilidades y destrezas y cuando se hayandado modi¯caciones en el plan de estudios correspondiente la unidad acad¶emica valorar¶a lost¶erminos de la reinserci¶on del estudiante.

La Universidad y la unidad acad¶emica no asumir¶an ninguna responsabilidad de reinserci¶on sidurante la ausencia del estudiante el plan de estudios correspondiente se cierra o se declaraterminal.

Page 31: Crestomatía

2.12. SOBRE LOS RECURSOS DE APELACION 31

2.12 Sobre los recursos de apelacion

² Art¶³culo 52. (Revisi¶on del resultado de las evaluaciones)Cuando un estudiante se considere perjudicado en el resultado de sus evaluaciones tendr¶aderecho, en un plazo de cinco d¶³as h¶abiles posteriores al reporte de la nota, a solicitar, justi¯-cadamente, revisi¶on ante el profesor, quien deber¶a dar respuesta en un plazo de cinco d¶³as. Si setrata de las evaluaciones ¯nales y el profesor acepta la revisi¶on, contar¶a con cinco d¶³as h¶abilespara reportar el acta de correcci¶on de nota ante la unidad acad¶emica. La unidad acad¶emicatendr¶a un plazo de cinco d¶³as h¶abiles para trasladar el acta de correcci¶on ante el Departamentode Registro.

² Art¶³culo 53. (Apelaci¶on de la decisi¶on del profesor)Agotada la v¶³a de revisi¶on ante el profesor, el estudiante podr¶a apelar por escrito ante elDirector de la unidad acad¶emica, en el t¶ermino de cinco d¶³as h¶abiles. Este conformar¶a enlos siguientes tres d¶³as h¶abiles, un tribunal integrado por tres acad¶emicos, comunic¶andolo porescrito a sus integrantes, con copia al estudiante. El profesor involucrado no podr¶a ser partedel tribunal.

² Art¶³culo 54. (Funci¶on del tribunal de apelaci¶on)El tribunal examinar¶a los antecedentes y atestados de la apelaci¶on y consultar¶a a las partesinvolucradas para dar el fallo en un plazo no mayor de cinco d¶³as h¶abiles posterior a su nom-bramiento. El fallo indicar¶a si se modi¯ca o mantiene la nota apelada. La decisi¶on del tribunales inapelable y ser¶a comunicada al estudiante con copia al profesor del curso y al Director dela unidad acad¶emica, para que se act¶ue en consecuencia.

² Art¶³culo 55. (Reprogramaci¶on de la prueba extraordinaria)En el caso de que un estudiante obtenga, como resultado de su apelaci¶on, el derecho a realizarexamen extraordinario, este le deber¶a ser reprogramado.

² Art¶³culo 56. (Matr¶³cula provisional por apelacion en proceso)Si un estudiante tiene una apelaci¶on pendiente durante el periodo de matr¶³cula podr¶a matric-ularse provisionalmente en el curso o cursos siguientes que se establecen en el plan de estudios.Si la apelaci¶on no es favorable, la Direcci¶on de la unidad acad¶emica anular¶a la matr¶³cula quecorresponda.

² Art¶³culo 57. (Recursos contra las decisiones de retenci¶on de la escolaridad.)Las resoluciones del director de la unidad acad¶emica que otorguen o denieguen la retenci¶on deescolaridad, pueden ser objeto de los recursos ordinarios establecidos en el Estatuto Org¶anico.

Page 32: Crestomatía

32 CAP¶ITULO 2. REGLAMENTOS IMPORTANTES

2.13 Del mejoramiento del proceso de ense~nanza apren-

dizaje

² Art¶³culo 58. (Evaluaci¶on del desarrollo del curso)El profesor deber¶a evaluar con los estudiantes, antes de ¯nalizar el ciclo lectivo, el desarrollo delcurso. Las observaciones resultantes se incorporar¶an en el informe ¯nal del curso que el profesorbrinde a la Direcci¶on de la unidad acad¶emica y se conocer¶an en la secci¶on, ¶area o c¶atedracorrespondiente para su valoraci¶on y posible incorporaci¶on en el per¶³odo lectivo siguiente. Elinforme deber¶a incluir tambi¶en las estad¶³sticas de aprobaci¶on y deserci¶on, y en el caso de haberestudiantes con necesidades educativas especiales, un informe espec¶³¯co.

El docente ser¶a responsable de introducir cambios en el programa y en la ejecuci¶on del cursopara mantener el programa actualizado e introducir innovaciones pedag¶ogicas y de contenido.

² Art¶³culo 59. (Seguimiento de la actividad docente)La Direcci¶on de la unidad acad¶emica ser¶a la responsable de velar por el cumplimiento de losprogramas de los cursos, las horas de atenci¶on a los estudiantes, el horario en que se impartenlos cursos y la calidad de los mismos. Asimismo, de mantener actualizadas estad¶³sticas respectoa: deserci¶on, niveles de repitencia y otros aspectos asociados al proceso ense~nanza aprendizaje.Las Decanaturas dan seguimiento y act¶uan en apoyo del director de unidad en acciones parael mejoramiento de la docencia.

² Art¶³culo 60. (Evaluaci¶on del docente)El docente ser¶a evaluado mediante la aplicaci¶on de instrumentos, en concordancia con el modelopedag¶ogico de la instituci¶on. La unidad acad¶emica dar¶a seguimiento a los resultados y contar¶acon el programa de desarrollo profesional institucional para contribuir al mejoramiento delproceso ense~nanza aprendizaje. El docente deber¶a acogerse a las opciones que le ofrece la UNApara tal efecto. La Vicerrector¶³a Acad¶emica validar¶a, cada dos a~nos, el sistema de evaluaci¶ondel docente.

² TRANSITORIO AL Art¶³culo 60Este art¶³culo se podr¶a aplicar totalmente hasta que se apruebe por parte de CONSACA elmodelo pedag¶ogico de la Universidad y se ponga en pr¶actica por el programa de desarrolloprofesional.

² Art¶³culo 61. (Procesos de autoevaluaci¶on y de mejoramiento de la actividad docente)Las unidades acad¶emicas establecer¶an procesos de autoevaluaci¶on y mejoramiento de los planesde estudio. Anualmente formular¶an estrategias para alcanzar sus metas de mejoramiento enaspectos tales como: repitencia de cursos, deserci¶on, n¶umero de graduados, limitada innovaci¶oncurricular, entre otros. Las Decanaturas, en coordinaci¶on con la Direcci¶on de Docencia, velar¶anpor el seguimiento y consecuci¶on de las metas planteadas.

Page 33: Crestomatía

2.14. SOBRE DISPOSICIONES FINALES 33

² Art¶³culo 62. (Divulgacion de las normas.)La Universidad Nacional garantizar¶a que este reglamento sea conocido por parte de docentesy estudiantes mediante diversas estrategias de comunicaci¶on y de procesos de inducci¶on ycapacitaci¶on a las asociaciones estudiantiles.

2.14 Sobre disposiciones ¯nales

² Art¶³culo 63. (Procedimientos relacionados con este reglamento)Le corresponde a la Vicerrector¶³a Acad¶emica la aprobaci¶on de los procedimientos relacionadoscon la ejecuci¶on de este Reglamento. Estos ser¶an publicados en la Gaceta Universitaria.

² Art¶³culo 64. (Derogatoria)Este reglamento deroga el aprobado en las sesiones 868 y 871 del 24 de julio y 8 de agosto de1985, y todas sus reformas, as¶³ como cualquier otra disposici¶on que se le oponga.

² Art¶³culo 65. (Vigencia)Este reglamento entrar¶a a regir a partir de su publicaci¶on en la Gaceta Universitaria. Noobstante, los cursos que iniciaron con antelaci¶on a la entrada en vigencia de este reglamento,continuar¶an rigi¶endose por las normas que estaban vigentes al inicio de dichos cursos.

2.15 Ejercicios del cap¶³tulo

1. >A partir de cu¶ando comienzan a regir las normas generales para la evaluaci¶on del procesode ense~nanza-aprendizaje?

2. >C¶omo procede el redondeo en la cali¯caci¶on ¯nal?

3. >Con cu¶antos d¶³as de anticipaci¶on se debe comunicar una evaluaci¶on?

4. >Cu¶al es el plazo que tiene un profesor para entregar las pruebas realizadas?

5. >Qui¶enes tienen derecho a realizar la prueba de reposici¶on o extraordinaria?

6. >En qu¶e tipo de curso no se aplica la prueba de reposici¶on?

7. >C¶omo se puede justi¯car la ausencia a una prueba de evaluaci¶on?

8. >Cu¶antas veces puede repetir un curso un estudiante?

9. >Cu¶al es el debido proceso para que un estudiante apele una cali¯caci¶on?

10. >Cu¶al es el plazo para un retiro justi¯cado de un curso?

11. >En qu¶e caso se puede hacer un retiro justi¯cado?

12. >Que sucede si ha pasado el primer mes de clase y se desea retirar justi¯cadamente?

13. >Cu¶ando debe ser presentado al estudiante, para su an¶alisis, el programa del curso?

Page 34: Crestomatía

34 CAP¶ITULO 2. REGLAMENTOS IMPORTANTES

14. Cu¶al es el objetivo de las pruebas de reposici¶on?

15. >Puede un profesor realizar pruebas en el momento que el desee?

16. >Qu¶e pasa si un profesor no asiste a aplicar una prueba destinada a los estudiantes?

17. >Qu¶e es un examen por su¯ciencia?

18. >Con cuanto tiempo cuenta un estudiante para prepararse ante una eventual prueba reposi-ci¶on?

19. >Debe o no debe el profesor de dar a conocer el plan de estudio a los estudiantes y si esas¶³, en qu¶e momento?

20. >Al anunciarse una evaluaci¶on con cu¶anto tiempo de anticipaci¶on debe de avisar el profesory qu¶e debe de dar a conocer?

21. >Con cu¶anto tiempo cuenta el profesor para entregar los ex¶amenes ya cali¯cados y cu¶alesson los otros dos procesos que los profesores tienen que realizar adem¶as de cali¯car?

22. >Cu¶antas pruebas de reposici¶on puede presentar ¶el estudiante por curso, cu¶al es el plazoque tiene el profesor para noti¯car al estudiante sobre si tiene que realizar la prueba dereposici¶on y qu¶e pasar¶a con respecto a la cali¯caci¶on del curso que se est¶e llevando?

23. >Podr¶a matricularse o no un estudiante en un curso sin haber aprobado los cursos consid-erados como requisito del mismo?

24. >Qu¶e puede hacer un estudiante si siente perjudicado con sus notas y cu¶anto tiempo tienepara manifestar est¶a inconformidad?

25. >Qui¶en o qui¶enes forman parte de Tribunal de Apelaci¶on y qui¶en no puede estar en ¶el?

Page 35: Crestomatía

Cap¶³tulo 3

Historia de la computaci¶on

Referencias:http://www.geocities.com/dzofeifa/

http://mx.geocities.com/aqilesboy2003/historiadelacomputacion/index.html

² Uno de los primeros dispositivos mec¶anicos para contar fue el ¶abaco, cuya historia se remonta alas antiguas civilizaciones griega y romana. Este dispositivo es muy sencillo, consta de cuentasensartadas en varillas que a su vez est¶an montadas en un marco rectangular. Al desplazar lascuentas sobre varillas, sus posiciones representan valores almacenados, y es mediante dichasposiciones que este representa y almacena datos. A este dispositivo no se le puede llamarcomputadora por carecer del elemento fundamental llamado programa.

² Otro de los inventos mec¶anicos fue la Pascalina inventada por Blaise Pascal (1623-1662) deFrancia y la de Gottfried Wilhelm von Leibniz (1646{1716) de Alemania. Con estas m¶aquinas,los datos representaban mediante las posiciones de los engranajes, y los datos se introduc¶³anmanualmente estableciendo dichas posiciones ¯nales de las ruedas, de manera similar a comoleemos los n¶umeros en el cuentakil¶ometros de un autom¶ovil.

² La primera computadora fue la m¶aquina anal¶³tica creada por Charles Babbage, profesormatem¶atico de la Universidad de Cambridge en el siglo XIX. La idea que tuvo Charles Babbagesobre un computador naci¶o debido a que la elaboraci¶on de las tablas matem¶aticas era un procesotedioso y propenso a errores. En 1823 el gobierno Brit¶anico lo apoyo para crear el proyecto deuna m¶aquina de diferencias, un dispositivo mec¶anico para efectuar sumas repetidas.

Mientras tanto Charles Jacquard (franc¶es), fabricante de tejidos, hab¶³a creado un telar quepod¶³a reproducir autom¶aticamente patrones de tejidos leyendo la informaci¶on codi¯cada enpatrones de agujeros perforados en tarjetas de papel r¶³gido. Al enterarse de este m¶etodoBabbage abandon¶o la m¶aquina de diferencias y se dedic¶o al proyecto de la m¶aquina anal¶³tica quese pudiera programar con tarjetas perforadas para efectuar cualquier c¶alculo con una precisi¶onde 20 d¶³gitos. La tecnolog¶³a de la ¶epoca no bastaba para hacer realidad sus ideas.El mundo noestaba listo, y no lo estar¶³a por cien a~nos m¶as.

35

Page 36: Crestomatía

36 CAP¶ITULO 3. HISTORIA DE LA COMPUTACI ¶ON

² En 1944 se construy¶o en la Universidad de Harvard, la Mark I, dise~nada por un equipo encabeza-do por Howard H. Aiken. Esta m¶aquina no est¶a considerada como computadora electr¶onicadebido a que no era de prop¶osito general y su funcionamiento estaba basado en dispositivoselectromec¶anicos llamados relevadores.

² En 1947 se construy¶o en la Universidad de Pennsylvania la ENIAC (Electronic NumericalIntegrator And Calculator) que fue la primera computadora electr¶onica, el equipo de dise~nolo encabezaron los ingenieros John Mauchly y John Eckert. Esta m¶aquina ocupaba todo uns¶otano de la Universidad, ten¶³a m¶as de 18 000 tubos de vac¶³o, consum¶³a 200 KW de energ¶³ael¶ectrica y requer¶³a todo un sistema de aire acondicionado, pero ten¶³a la capacidad de realizarcinco mil operaciones aritm¶eticas en un segundo.

² El proyecto, auspiciado por el departamento de Defensa de los Estados Unidos, culmin¶o dos a~nosdespu¶es, cuando se integr¶o a ese equipo el ingeniero y matem¶atico h¶ungaro John Von Neumann(1903{1957). Las ideas de Von Neumann resultaron tan fundamentales para su desarrolloposterior, que es considerado el padre de las computadoras. La EDVAC (Electronic DiscreteVariable Automatic Computer) fue dise~nada por este nuevo equipo. Ten¶³a aproximadamentecuatro mil bulbos y usaba un tipo de memoria basado en tubos llenos de mercurio por dondecirculaban se~nales el¶ectricas sujetas a retardos.

² La idea fundamental de Von Neumann fue permitir que en la memoria coexistan datos coninstrucciones, para que entonces la computadora pueda ser programada en un lenguaje, y nopor medio de alambres que el¶ectricamente interconectaban varias secciones de control, comoen la ENIAC.

² Todo este desarrollo de las computadoras suele divisarse por generaciones y el criterio que sedetermin¶o para determinar el cambio de generaci¶on no est¶a muy bien de¯nido, pero resultaaparente que deben cumplirse al menos los siguientes requisitos:

1. La forma en que est¶an construidas.

2. Forma en que el ser humano se comunica con ellas.

3.1 Primera Generaci¶on de Computadores

² En esta generaci¶on hab¶³a un gran desconocimiento de las capacidades de las computadoras,puesto que se realiz¶o un estudio en esta ¶epoca que determin¶o que con veinte computadorasse saturar¶³a el mercado de los Estados Unidos en el campo de procesamiento de datos. Estageneraci¶on abarco la d¶ecada de los cincuenta. Y se conoce como la primera generaci¶on. Estasm¶aquinas ten¶³an las siguientes caracter¶³sticas:

1. Estas m¶aquinas estaban construidas por medio de tubos de vac¶³o.

2. Eran programadas en lenguaje de m¶aquina.

Page 37: Crestomatía

3.2. SEGUNDA GENERACI ¶ON DE COMPUTADORES 37

² En esta generaci¶on las m¶aquinas son grandes y costosas (de un costo aproximado de ciento demiles de d¶olares).

En 1951 aparece la UNIVAC (UNIVersAl Computer), fue la primera computadora comercial,que dispon¶³a de mil palabras de memoria central y pod¶³an leer cintas magn¶eticas, se utiliz¶opara procesar el censo de 1950 en los Estados Unidos.

² En las dos primeras generaciones, las unidades de entrada utilizaban tarjetas perforadas, re-tomadas por Herman Hollerith (1860{1929), quien adem¶as fund¶o una compa~n¶³a que con el pasodel tiempo se conocer¶³a como IBM (International Bussines Machines). Despu¶es se desarroll¶opor IBM la IBM 701 de la cual se entregaron 18 unidades entre 1953 y 1957.

² Posteriormente, la compa~n¶³a Remington Rand fabric¶o el modelo 1103, que compet¶³a con la701 en el campo cient¶³¯co, por lo que la IBM desarrollo la 702, la cual present¶o problemas enmemoria, debido a esto no dur¶o en el mercado. La computadora m¶as exitosa de la primerageneraci¶on fue la IBM 650, de la cual se produjeron varios cientos. Esta computadora queusaba un esquema de memoria secundaria llamado tambor magn¶etico, que es el antecesor delos discos actuales. Otros modelos de computadora que se pueden situar en los inicios de lasegunda generaci¶on son: la UNIVAC 80 y 90, las IBM 704 y 709, Burroughs 220 y UNIVAC1105.

² La primera generaci¶on coincide con el inicio de la computaci¶on comercial, las computadoras deesta generaci¶on se caracterizan por su limitada capacidad de memoria y procesamiento. Eje-cutaban los procesos secuencialmente: toda la informaci¶on deber¶³a ser almacenada en memoriaantes de que el programa fuera ejecutado y no se pod¶³a alimentar a la computadora con otrainformaci¶on hasta que el programa actual terminara. Como la lectura de las tarjetas era un pro-ceso mec¶anico, la diferencia que exist¶³a entre la velocidad de c¶alculo y las velocidades de lecturade tarjetas o de impresi¶on era signi¯cativa. Esto ocasionaba, bajo el esquema secuencial quela unidad central de procesamiento de la computadora permanecer¶³a inactiva la mayor partedel tiempo. Esta situaci¶on motiv¶o medios alternos de almacenamiento que fueran mejores. Esentonces cuando se inicia el desarrollo de dos medios magn¶eticos de almacenamiento: la cintay el disco, en esta generaci¶on empiezan a desarrollarse los primeros lenguajes de programaci¶on.

3.2 Segunda Generaci¶on de Computadores

² Cerca de la d¶ecada de 1960, las computadoras segu¶³an evolucionando, se reduc¶³a su tama~no ycrec¶³a su capacidad de procesamiento. Tambi¶en en esta ¶epoca se empez¶o a de¯nir la forma decomunicarse con las computadoras, que recib¶³a el nombre de programaci¶on de sistemas. Lascaracter¶³sticas de la segunda generaci¶on son las siguientes:

1. Est¶an construidas con circuitos de transistores.

2. Se programan en nuevos lenguajes llamados lenguajes de alto nivel.

Page 38: Crestomatía

38 CAP¶ITULO 3. HISTORIA DE LA COMPUTACI ¶ON

² En esta generaci¶on las computadoras se reducen de tama~no y son de menor costo. Aparecenmuchas compa~n¶³as y las computadoras eran bastante avanzadas para su ¶epoca como la serie5000 de Burroughs y la ATLAS de la Universidad de Manchester. Algunas de estas computa-doras se programaban con cintas perforadas y otras m¶as por medio de cableado en un tablero.Los programas eran hechos a la medida por un equipo de expertos: analistas, dise~nadores,programadores y operadores que se manejaban como una orquesta para resolver los problemasy c¶alculos solicitados por la administraci¶on.

² El usuario ¯nal de la informaci¶on no ten¶³a contacto directo con las computadoras. Esta situaci¶onen un principio se produjo en las primeras computadoras personales, pues se requer¶³a saberlas"programar" (alimentarle instrucciones) para obtener resultados; por lo tanto su uso estabalimitado a aquellos audaces pioneros que gustaran de pasar un buen n¶umero de horas escribiendoinstrucciones, "corriendo" el programa resultante y veri¯cando y corrigiendo los errores o bugsque aparecieran. Adem¶as, para no perder el "programa" resultante hab¶³a que "guardarlo"(almacenarlo) en una grabadora de casette, pues en esa ¶epoca no hab¶³a discos °exibles y muchomenos discos duros para las PC; este procedimiento pod¶³a tomar de 10 a 45 minutos, seg¶un elprograma.

² El panorama se modi¯c¶o totalmente con la aparici¶on de las computadoras personales conmejores circuitos, m¶as memoria, unidades de disco °exible y sobre todo con la aparici¶on deprogramas de aplicaci¶on general en donde el usuario compra el programa y se pone a trabajar.Aparecen los programas procesadores de palabras como el c¶elebre Word Star, la impresionantehoja de c¶alculo (spreadsheet) Visicalc y otros m¶as que de la noche a la ma~nana cambian laimagen de la PC. El sortware empieza a tratar de alcanzar el paso del hardware. Pero aqu¶³aparece un nuevo elemento: el usuario.

² El usuario de las computadoras va cambiando y evolucionando con el tiempo. De estar total-mente desconectado a ellas en las m¶aquinas grandes pasa la PC a ser pieza clave en el dise~notanto del hardware como del software. Aparece el concepto de human interface que es la relaci¶onentre el usuario y su computadora. Se habla entonces de hardware ergon¶omico (adaptado a lasdimensiones humanas para reducir el cansancio), dise~nos de pantallas antirre°ejos y tecladosque descansen la mu~neca.

² Con respecto al software se inicia una verdadera carrera para encontrar la manera en queel usuario pase menos tiempo capacit¶andose y entren¶andose y m¶as tiempo produciendo. Seponen al alcance programas con men¶us (listas de opciones) que orientan en todo momento alusuario (con el consiguiente aburrimiento de los usuarios expertos); otros programas ofrecentoda una artiller¶³a de teclas de control y teclas de funciones (atajos) para efectuar toda suertede efectos en el trabajo (con la consiguiente desorientaci¶on de los usuarios novatos). Se ofrecenun sinn¶umero de cursos prometiendo que en pocas semanas hacen de cualquier persona unexperto en los programas comerciales. Pero el problema "constante" es que ninguna soluci¶onpara el uso de los programas es "constante". Cada nuevo programa requiere aprender nuevoscontroles, nuevos trucos, nuevos men¶us. Se empieza a sentir que la relaci¶on usuario{PC no est¶aacorde con los desarrollos del equipo y de la potencia de los programas. Hace falta una relaci¶onamistosa entre el usuario y la PC.

Page 39: Crestomatía

3.3. TERCERA GENERACI ¶ON DE COMPUTADORES 39

² Las computadoras de esta generaci¶on fueron: la Philco 212 (esta compa~n¶³a se retir¶o del mercadoen 1964) y la UNIVAC M460, la Control Data Corporation modelo 1604, seguida por la serie3000, la IBM mejor¶o la 709 y sac¶o al mercado la 7090, la National Cash Register empez¶o aproducir m¶aquinas para proceso de datos de tipo comercial, introdujo el modelo NCR 315.La Radio Corporation of America introdujo el modelo 501, que manejaba el lenguaje COBOL,para procesos administrativos y comerciales. Despu¶es sali¶o al mercado la RCA 601. La segundageneraci¶on se inicia cuando aparece las primeras computadoras con transistores, sustituyendoa los computadores que funcionaban con tubos al vac¶³o. La tecnolog¶³a de los transistoresincrementaron signi¯cativamente la velocidad de procesamiento.

² Entonces se idea un modelo de procesamiento conocido con el nombre de procesamiento porlotes (Batch), bajo este modelo, se pod¶³an efectuar operaciones de entrada y salida de datossimult¶aneamente con el proceso del calculo del computador. Esta informaci¶on era almacenadaen cintas magn¶eticas hasta que el computador se desocupara y pudiera procesar la informa-ci¶on. Al termino del proceso, los resultados eran almacenados en otra cinta magn¶etica, hastaque pudieran ser impresos. La implantaci¶on de este modelo requer¶³a un computador auxiliarque controlara la entrada y salida de informaci¶on, as¶³ como la interacci¶on con el computadorprincipal.

3.3 Tercera generaci¶on de Computadores

² Con los progresos de la electr¶onica y los avances de comunicaci¶on con las computadoras en lad¶ecada de los 1960, surge la tercera generaci¶on de las computadoras. Se inaugura con la IBM360 en abril de 1964 Las caracter¶³sticas de esta generaci¶on fueron las siguientes:

1. Su fabricaci¶on electr¶onica esta basada en circuitos integrados.

2. Su manejo es por medio de los lenguajes de control de los sistemas operativos.

² La IBM produce la serie 360 con los modelos 20, 22, 30, 40, 50, 65, 67, 75, 85, 90, 195 queutilizaban t¶ecnicas especiales del procesador, unidades de cinta de nueve canales, paquetes dediscos magn¶eticos y otras caracter¶³sticas que ahora son est¶andares (no todos los modelos usabanestas t¶ecnicas, sino que estaba dividido por aplicaciones). El sistema operativo de la serie 360,se llam¶o OS que contaba con varias con¯guraciones, inclu¶³a un conjunto de t¶ecnicas de manejode memoria y del procesador que pronto se convirtieron en est¶andares.

² En 1964 CDC introdujo la serie 6000 con la computadora 6600 que se consider¶o durante algunosa~nos como la m¶as r¶apida. En la d¶ecada de 1970, la IBM produce la serie 370 (modelos 115,125, 135, 145, 158, 168). UNIVAC compite son los modelos 1108 y 1110, m¶aquinas en granescala; mientras que CDC produce su serie 7000 con el modelo 7600. Estas computadoras secaracterizan por ser muy potentes y veloces. A ¯nales de esta d¶ecada la IBM de su serie 370produce los modelos 3031, 3033, 4341. Burroughs con su serie 6000 produce los modelos 6500y 6700 de avanzado dise~no, que se reemplazaron por su serie 7000. Honey{Well participa consu computadora DPS con varios modelos.

Page 40: Crestomatía

40 CAP¶ITULO 3. HISTORIA DE LA COMPUTACI ¶ON

² A mediados de la d¶ecada de 1970, aparecen en el mercado las computadoras de tama~no medi-ano, o minicomputadoras que no son tan costosas como las grandes (llamadas tambi¶en comomainframes que signi¯ca tambi¶en, gran sistema), pero disponen de gran capacidad de proce-samiento. Algunas minicomputadoras fueron las siguientes: la PDP{8 y la PDP{11 de DigitalEquipment Corporation, la VAX (Virtual Address eXtended) de la misma compa~n¶³a, los mo-delos NOVA y ECLIPSE de Data General, la serie 3000 y 9000 de Hewlett{Packard con variosmodelos el 36 y el 34, la Wang y Honey{Well {Bull,

² Siemens de origen alem¶an, la ICL fabricada en Inglaterra. En la Uni¶on Sovi¶etica se utiliz¶o laUS (Sistema Uni¯cado, Ryad) que ha pasado por varias generaciones. La era del silicio hab¶³allegado, varios circuitos integrados de transistores pod¶³an ser incluidos en una pastilla de silicioque no superaba el cent¶³metro cuadrado de tama~no. Los bene¯cios que se experimentaronfueron: mayor velocidad, menos calor, m¶as memoria, menos tama~no y menos costo. En estageneraci¶on se disminuyo el tiempo de ocio introduciendo el modelo de procesamiento concur-rente. Bajo este esquema, varios programas pueden residir simult¶aneamente en la memoria,pero uno solo utiliza el procesador en un momento dado. Los lenguajes de programaci¶on seclasi¯caron en tres tipos: Los comerciales, de los cuales el COBOL y RPG eran los que hab¶³antenido mayor aceptaci¶on. Los cient¶³¯cos, en donde el FORTRAN era el de mayor uso, y elPASCAL el favorito en los principales centros de ense~nanza y los de uso general entre los cualesdestacan el PL/1, el BASIC y el C. Cuarta Generaci¶on de Computadores

² Aqu¶³ aparecen los microprocesadores que es un gran adelanto de la microelectr¶onica, son cir-cuitos integrados de alta densidad y con una velocidad impresionante. Las microcomputadorascon base en estos circuitos son extremadamente peque~nas y baratas, por lo que su uso seextiende al mercado industrial. Aqu¶³ nacen las computadoras personales que han adquiridoproporciones enormes y que han in°uido en la sociedad en general sobre la llamada "revoluci¶oninform¶atica". En 1976 Steve Wozniak y Steve Jobs inventan la primera microcomputadorade uso masivo y m¶as tarde forman la compa~n¶³a conocida como la Apple que fue la segundacompa~n¶³a m¶as grande del mundo, antecedida tan solo por IBM; y esta por su parte es a¶un delas cinco compa~n¶³as m¶as grandes del mundo.

² En 1981 se vendieron 800 000 computadoras personales, al siguiente subi¶o a 1 400 000. Entre1984 y 1987 se vendieron alrededor de 60 millones de computadoras personales, por lo queno queda duda que su impacto y penetraci¶on han sido enormes. Con el surgimiento de lascomputadoras personales, el software y los sistemas que con ellas de manejan han tenido unconsiderable avance, porque han hecho m¶as interactiva la comunicaci¶on con el usuario. Surgenotras aplicaciones como los procesadores de palabras, las hojas electr¶onicas de c¶alculo, paquetesgr¶a¯cos, etc. Tambi¶en las industrias del software de las computadoras personales crece congran rapidez, Gary Kildall y William Gates se dedicaron durante a~nos a la creaci¶on de sistemasoperativos y m¶etodos para lograr una utilizaci¶on sencilla de las microcomputadoras (son loscreadores de CP/M y de los productos de Microsoft).

² No todo son microcomputadoras, por supuesto, las minicomputadoras y los grandes sistemascontin¶uan en desarrollo. De hecho las m¶aquinas peque~nas rebasaban por mucho la capacidad de

Page 41: Crestomatía

3.4. QUINTA GENERACI ¶ON DE COMPUTADORES 41

los grandes sistemas de 10 o 15 a~nos antes, que requer¶³an de instalaciones costosas y especiales,pero ser¶³a equivocado suponer que las grandes computadoras han desaparecido; por el contrario,su presencia era ya ineludible en pr¶acticamente todas las esferas de control gubernamental,militar y de la gran industria. Las enormes computadoras de las series CDC, CRAY, Hitachio IBM por ejemplo, eran capaces de atender a varios cientos de millones de operaciones porsegundo.

² Esta es la generaci¶on del microcomputador actual. Debido al gran desarrollo logrado en laminiaturizaci¶on de los circuitos integrados, fue posible llevar el poder de la computaci¶on hastael desarrollo de Laptops. Se desarrollaron las computadoras personales que se caracterizaronprincipalmente por su bajo costo y su simplicidad de uso. Una de las ¶areas que ha desarrolladoen esta generaci¶on es la referente a la comunicaci¶on hombre{maquina o Interfase Amistosa. Sehan dise~nado interfases gra¯cas, como iconos para representar acciones, ventanas para visualizarla informaci¶on, etc.

3.4 Quinta Generaci¶on de Computadores

² En vista de la acelerada marcha de la microelectr¶onica, la sociedad industrial se ha dado ala tarea de poner tambi¶en a esa altura el desarrollo del software y los sistemas con que semanejan las computadoras. Surge la competencia internacional por el dominio del mercadode la computaci¶on, en la que se per¯lan dos l¶³deres que, sin embargo, no han podido alcanzarel nivel que se desea: la capacidad de comunicarse con la computadora en un lenguaje m¶ascotidiano y no a trav¶es de c¶odigos o lenguajes de control especializados.

² Jap¶on lanz¶o en 1983 el llamado "programa de la quinta generaci¶on de computadoras", con losobjetivos expl¶³citos de producir m¶aquinas con innovaciones reales en los criterios mencionados.Y en los Estados Unidos ya est¶a en actividad un programa en desarrollo que persigue objetivossemejantes, que pueden resumirse de la siguiente manera:

1. Procesamiento en paralelo mediante arquitecturas y dise~nos especiales y circuitos de granvelocidad.

2. Manejo de lenguaje natural y sistemas de inteligencia arti¯cial

² El futuro previsible de la computaci¶on es muy interesante, y se puede esperar que esta cienciasiga siendo objeto de atenci¶on prioritaria de gobiernos y de la sociedad en conjunto.

² Modelo de Von Neumann Las computadoras digitales actuales se ajustan al modelo propuestopor el matem¶atico John Von Neumann. De acuerdo con ¶el, una caracter¶³stica importante deeste modelo es que tanto los datos como los programas, se almacenan en la memoria antes deser utilizados.

Page 42: Crestomatía

42 CAP¶ITULO 3. HISTORIA DE LA COMPUTACI ¶ON

3.5 Ejercicios del cap¶³tulo

1. >Qu¶e objeto es considerado la primera m¶aquina para realizar c¶alculos?

2. >A qui¶en se le considera el padre de la computaci¶on antigua?

3. >Qui¶en es considerado el padre de la computaci¶on actual?

4. >Qui¶en es el creador de la MARK I? >En que a~no se construy¶o la MARK I?

5. >Con que prop¶osito se desarrolla la MARK I?

6. >Cu¶ando y d¶onde se construy¶o la primer computadora moderna, c¶omo se llamaba y qui¶enesla crearon?

7. >C¶omo surgi¶o la idea Charles Babbage para crear la primera computadora?

8. >En qu¶e consist¶³a la maquina anal¶³tica de Charles Babbage?

9. >En qu¶e a~no se present¶o la primera computadora electr¶onica y cu¶al era su dimensi¶on otama~no?

10. >En qu¶e d¶ecada se da la primera generaci¶on de computadoras y cu¶ales fueron sus carac-ter¶³sticas?

11. Cite algunas caracter¶³sticas de las primera generaci¶on de computadoras.

12. >Qu¶e signi¯ca el concepto de \human interfase"?

13. >Cu¶al fue la primera computadora comercial y en que a~no fue su comercializaci¶on?

14. Cu¶al fue la computadora mas exitosa durante la primera generaci¶on de computadoras?

15. >Cu¶al son las caracter¶³sticas mas sobresalientes en la segunda generaci¶on de computadores?

16. >Cu¶al fue el cambio m¶as importante que sufrieron las computadoras durante la segundageneraci¶on?

17. Qu¶e caracter¶³sticas ten¶³an las computadoras de la tercera generaci¶on?

18. >Cu¶al fue el logro de Siemens y por qu¶e se dijo que hab¶³a llegado la era del silicio?

19. >En qu¶e forma el silicio se convirti¶o en el mejor aliado de la computaci¶on?

20. Con referencia a la computaci¶on moderna: >cu¶al fue la idea principal de Von Neumann?

21. .>Cite los principales aportes ala computaci¶on que se dieron durante la cuarta generaci¶on?

22. >Qu¶e ventajas trajo la cinta y el disco?

23. >Qu¶e de relevante se destac¶o con el surgimiento de las computadoras personales?

24. >En que consiste el modelo de procesamiento conocido con el nombre de procesamientopor lotes (Batch)?

25. >Cu¶al es el gran avance que se da en la cuarta generaci¶on?

26. >Cu¶ales son los objetivos de la quinta generaci¶on?

27. >Por qu¶e es m¶as f¶acil la quinta generaci¶on para el usuario que no tiene ninguna formaci¶onen computaci¶on?

28. >En qu¶e consiste el programa de la quinta generaci¶on dise~nado por Jap¶on?

Page 43: Crestomatía

Cap¶³tulo 4

Organizaci¶on de una computadora

Referencias bibliogr¶a¯cas:Joyanes Aguilar, Luis.

Fundamentos de programaci¶on.Algoritmos, Estructura de Datos y Objetos.

Tercera edici¶on, 2004. McGrawHill.

² Una computadora consta de dos partes: hardware y software. El hardware consta de las partesf¶³sicas, tangibles de la computadora. El software consta de programas, tambi¶en llamadosaplicaciones, que contienen instrucciones que la computadora ejecuta.

² (Hardware) Una computadora necesita disponer de un conjunto de funcionalidades que pro-porcionen la capacidad de:

1. aceptar la entrada

2. visualizar o presentar la salida

3. almacenar la informaci¶on en un formato consistente l¶ogicamente (tradicionalmente bina-rio)

4. ejecutar operaciones aritm¶eticas o l¶ogicas sobre los datos

5. monitorear, controlar y dirigir las operaciones globales y de secuencia del sistema.

² La siguiente ¯gura ?? representa los componentes m¶as importantes que soportan estas capaci-dades.

43

Page 44: Crestomatía

44 CAP¶ITULO 4. ORGANIZACI ¶ON DE UNA COMPUTADORA

² (El procesador) El procesador (UCP o bien CPU) es el dispositivo interior de la computadoraque ejecuta las instrucciones del programa. El procesador o chip s¶olo puede ejecutar instruc-ciones simples como c¶alculos aritm¶eticos sencillos o desplazamientos de n¶umeros por diferentesposiciones. Sin embargo la velocidad a la que realizan ¶estos c¶alculos es muy grande, lo que lepermite ejecutar instrucciones que realizan c¶alculos complejos.

² La UCP dirige y controla el proceso de informaci¶on realizado por la computadora: procesa omanipula la informaci¶on almacenada en memoria, recupera informaci¶on desde memoria (datos oinstrucciones) y almacena los resultados de estos procesos en memoria para su uso posterior. LaUCP consta de dos componentes: unidad de control (UC) y unidad aritm¶etico-l¶ogica (UAL).La UC coordina las actividades de la computadora y determina que operaciones se debenrealizar y en que orden, adem¶as controla y sincroniza todo el proceso de la computadora. LaUAL realiza operaciones aritm¶eticas y l¶ogicas, tales como suma, resta, multiplicaci¶on, divisi¶on ycomparaciones. Los datos en la memoria central se pueden leer (recuperar) o escribir (cambiar)por la UCP.

² (El microprocesador) El microprocesador es un chip (circuito integrado) que controla yrealiza las funciones y operaciones con los datos. El microprocesador representa a la UnidadCentral de Proceso. La velocidad de un microprocesador se mide en megahercios (MHz) ymanipulan palabras de 4 a 64 bits. Los microprocesadores hist¶oricos van desde 8080 hastael 80486/80586 del fabricante Intel. Los microprocesadores de segunda generaci¶on de Intelson los Pentium, Pentiun MMX, Pentium II con velocidades desde 233 hasta 450 MHz. Losmicroprocesadores de tercera generaci¶on son los Pentium III con frecuencias de 450 y 500 MHzhasta 933 MHz y 1 GHz. En el a~no 2000 Intel lanz¶o la siguiente generaci¶on, Pentium 4, conuna nueva microarquitectura dise~nada para ser m¶as r¶apida y escalar mejor a los procesadores

Page 45: Crestomatía

45

actuales. En la actualidad fabrican microprocesadores con frecuencias desde 1.3 GHz hasta 3GHz.

² (Dispositivos de entrada y salida (E/S)) Los dispositivos de E/S permiten la comunicaci¶onentre la computadora y el usuario. Los dispositivos de entrada sirven para introducir datos enla computadora para su proceso. Los datos se leen de los dispositivos de entrada y se almacenanen la memoria central. Los dispositivos de entrada convierten la informaci¶on de entrada ense~nales el¶ectricas que se almacenan en la memoria central. Dispositivos de entrada t¶³picos sonlos teclados, l¶apices ¶opticos, joystick, lectores de c¶odigos de barra, esc¶aneres, micr¶ofonos, etc.Actualmente el dispositivo de entrada m¶as com¶un es el rat¶on (mouse) que mueve un punteroelectr¶onico sobre la pantalla que facilita la interacci¶on usuario-m¶aquina.

² Los dispositivos de salida permiten representar los resultados (salida) del proceso de los datos.El dispositivo de salida t¶³pico es la pantalla (CRT) o monitor. Otros dispositivos de salida sonimpresoras, trazadores gr¶a¯cos (plotters), reconocedores de voz, altavoces, etc. Los dispositivosde E/S y los dispositivos de almacenamiento secundario o auxiliar se conocen tambi¶en con elnombre de dispositivos perif¶ericos, ya que normalmente son externos a la computadora. Estosdispositivos son unidad de discos (disquetes, CD-ROM, DVDs, cintas), videoc¶amaras, etc.

² (La memoria) La unidad de memoria almacena la informaci¶on en un formato l¶ogicamenteconsistente. Normalmente, tanto las instrucciones como los datos se almacenan en ¶areas dememoria distintas y separadas. La memoria se divide en dos categor¶³as: memoria principaly memoria auxiliar. La memoria principal (central) contiene el programa en ejecuci¶on y losresultados de los c¶alculos intermedios de la computadora, se conoce normalmente como memoriaRAM (random access memory). La memoria auxiliar o de almacenamiento secundario constade dispositivos utilizados para almacenar los datos de modo permanente. Cuando se necesitanlos datos se pueden recuperar de estos dispositivos. El programa se almacena en memoriaauxiliar de modo permanente y cuando se ha de ejecutar se trans¯ere a la memoria centralmediante ¶ordenes al sistema operativo.

² (Memoria central (interna)) Con el prop¶osito de almacenar datos, una computadora consta deuna gran colecci¶on de peque~nos circuitos electr¶onicos capaces de almacenar un bit (un bit esun circuito o un d¶³gito que puede tener exactamente dos valores: cero o uno). Estos circuitospueden estar en dos estados: uno para "encendido" y otro para apagado". La memoria centralse utiliza para almacenar informaci¶on. Se divide a su vez en memoria RAM y memoria ROM.La memoria RAM (Random Access Memory) es normalmente vol¶atil, lo que signi¯ca que todocuanto se almacena o guarda ella se pierde cuando se apaga la computadora. En general, lainformaci¶on almacenada en memoria puede ser de dos tipos: las instrucciones de un programay los datos con los que operan las instrucciones.

² Para que un programa se pueda ejecutar debe ser colocado en la memoria central en unaoperaci¶on denominada carga (load) del programa. Despu¶es cuando se ejecuta el programa,cualquier dato a procesar se debe tambi¶en colocar en la memoria mediante instrucciones delprograma. En la memoria hay tambi¶en datos diversos y espacios de almacenamiento temporalque necesita el programa cuando se ejecuta con el ¯n de poder funcionar adecuadamente. La

Page 46: Crestomatía

46 CAP¶ITULO 4. ORGANIZACI ¶ON DE UNA COMPUTADORA

memoria RAM puede ser est¶atica o din¶amica seg¶un sea su proceso de fabricaci¶on. Las memoriasactuales se clasi¯can en DRA; SDRAM; EDRAM, etc.

² Con el objetivo de que el procesador pueda obtener los datos de la memoria central m¶asr¶apidamente, la mayor¶³a de los procesadores actuales utilizan con frecuencia una memoria de-nominada cach¶e, que sirve para almacenamiento intermedio de datos entre el procesador y lamemoria principal. En la actualidad, la memoria cach¶e se incorpora casi siempre al proce-sador. La memoria central de una computadora es una zona de almacenamiento organizada encentenares o millares de unidades de almacenamiento individual o celdas. Consta de un con-junto de celdas de memoria (llamadas tambi¶en palabras). El n¶umero de celdas de la memoriadepende del tipo y modelo de la computadora; hoy d¶³a el n¶umero suele ser 32, 64, 128, etc,millones de celdas. Cada celda de memoria consta de un cierto n¶umero de bits.

² La unidad elemental de memoria se llama byte (8 bits). Un byte tiene la capacidad de almacenarun car¶acter de informaci¶on, y est¶a formado por un conjunto de unidades m¶as peque~nas dealmacenamiento llamadas bits, que son d¶³gitos binarios (0 o 1). La memoria de un PC actualvar¶³a en el rango de 64/128 a 256/512 millones de bytes. La memoria ROM (Read OnlyMemory), es una memoria de solo lectura que contiene instrucciones fundamentales que nose pueden modi¯car o perder de modo accidental por el usuario, tales como las instruccionesnecesarias para cargar inicialmente al software cuando se enciende la m¶aquina y cualesquieraotras instrucciones que el fabricante requiere que est¶en accesibles cuando el computador est¶afuncionando. LA ROM no es vol¶atil, por lo tanto su contenido no se pierde cuando se apagala energ¶³a.

² Existen dos conceptos importantes asociados a cada celda o posici¶on de memoria: su direcci¶ony su contenido. Cada celda tiene asociada una ¶unica direcci¶on que indica su posici¶on relativaen memoria y mediante la cual se puede acceder a la posici¶on para almacenar o recuperarinformaci¶on. La informaci¶on almacenada en una posici¶on de memoria es su contenido. Lasiguiente ¯gura 4.1 muestra una memoria de computadora de 1000 posiciones en memoria condirecciones de 0 a 999. El contenido de estas direcciones de memoria pueden ser palabras de 8,16, 32 y 64 bits dependiendo de la computadora con la que se est¶e trabajando. Por ejemplo,si se trabaja con una m¶aquina de 16 bits, cada posici¶on de memoria puede alojar 16 d¶³gitos (0o 1). Siempre que una nueva informaci¶on se almacena en una posici¶on, se destruye cualquierinformaci¶on que tuviera anteriormente y no se puede recuperar. La direcci¶on de una celda espermanente y ¶unica, el contenido puede cambiar mientras se ejecuta el programa.

² Como el byte es una unidad elemental de almacenamiento, se utilizan m¶ultiplos para de¯nir eltama~no de la memoria central:

1. Kilobyte (KB) = 1024 bytes ( 210)

2. Megabyte (MB) = 1024 Kbytes ( 220)

3. Gigabyte (GB) =1024 Mbytes (230)

4. Terabyte (TB) = 1024 Gbytes (240)

Page 47: Crestomatía

47

Figura 4.1: Memoria central de una computadora

² (Memoria auxiliar (externa)) Las unidades, perif¶ericos o dispositivos de almacenamientoson dispositivos que act¶uan como medio de soporte para almacenar los datos, temporal opermanentemente, que necesita manipular la CPU durante el proceso en curso y que no puedecontener la memoria principal. Las tecnolog¶³as han evolucionada muy r¶apidamente y se hanconseguido dispositivos de almacenamiento masivos de datos. Estos dispositivos se clasi¯canen dos grandes grupos: discos y cintas magn¶eticas.

² (Discos) Los discos son dispositivos formados por componentes electromagn¶eticos o por com-ponentes ¶opticos que permiten un acceso r¶apido a bloques f¶³sicos de datos. La informaci¶on seregistra en la super¯cie del disco y se accede a ella por medio de cabezas de lectura/escrituraque se mueven sobre la super¯cie. Su principal caracter¶³stica es el acceso directo a la informa-ci¶on y se les conoce tambi¶en como unidades de almacenamiento masivo. Los discos magn¶eticosse clasi¯can en disquetes y discos duros y los discos ¶opticos en CD-ROM y DVD. Los discosmagn¶eticos pueden ser duros, de gran capacidad de almacenamiento (20 a 100 GB), o discos°exibles (360 KB a 1,44 MB). La

capacidad de almacenamiento var¶³a en funci¶on de la intensidad de su capa ferromagn¶etica. Losdiscos duros suelen estar ¯jos en los sistemas y normalmente no se pueden extraer, aunque cadavez es m¶as frecuente encontrar discos duros removibles utilizados como copias de seguridad.

² Los discos ¶opticos di¯eren de los discos magn¶eticos en que los ¶opticos utilizan un haz del¶aser para grabar la informaci¶on. Son dispositivos de almacenamiento que emplean la mismatecnolog¶³a que los dispositivos compactos de audio para almacenar informaci¶on digital, por loque resultan muy resistentes al paso del tiempo, poseen gran capacidad de almacenamiento yson transportables y compatibles entre computadoras. La llegada de los CD-ROM al mercadohizo posible el desarrollo de la multimedia, es decir, la capacidad de integrar medios de todotipo (texto, im¶agenes y sonido). Estos discos permiten almacenar 650 o 700 MB de informaci¶ony hay de solo lectura CD-R o de lectura y escritura CD-RW. Los DVD son dispositivos de altacapacidad de almacenamiento, interactivos y con total compatibilidad con los medios existentes.Tiene adem¶as la gran ventaja de que su formato sirve tanto para las computadoras como paralos dispositivos electr¶onicos de consumo y pueden almacenar el equivalente de 7 a 26 CDs

Page 48: Crestomatía

48 CAP¶ITULO 4. ORGANIZACI ¶ON DE UNA COMPUTADORA

convencionales. Un disco °ash (°ash disk) es un peque~no almac¶en de memoria m¶ovil de tama~nopeque~no que se puede transportar como llavero, se puede utilizar en cualquier computadora quedisponga de un puerto USB y pueden almacenar desde 16 Mb hasta 256 Mb precios m¶odicos.

² (Cintas magn¶eticas) Las cintas magn¶eticas son los primeros dispositivos de almacenamientode datos que se utilizaron y, por ello han sido los m¶as empleados para almacenar copias deseguridad. Poseen una gran capacidad de almacenamiento pero tienen la desventaja de serdispositivos de acceso secuencial, lo que signi¯ca que la unidad de lectura debe explora lacinta hasta encontrar la informaci¶on espec¶³¯ca, por lo que su rapidez de acceso a los datos esmenor que en los discos. A mayor capacidad de almacenamiento, mayor longitud de cinta y enconsecuencia, mayor tiempo de acceso. En general, las cintas son medios removibles, ¯ables yecon¶omicos con altas capacidades de almacenamiento. Software

² Las operaciones que debe realizar el hardware son especi¯cadas por una lista de instrucciones,llamadas programas o software. El software se divide en dos grandes grupos: software delsistema y software de aplicaciones. El software del sistema es el conjunto de programas indis-pensables para que la m¶aquina funcione, se denominan programas del sistema. Estos progra-mas son b¶asicamente, el sistema operativo, los editores de texto, los compiladores / int¶erpretes(lenguajes de programaci¶on) y los programas utilitarios.

Uno de los programas m¶as importantes es el sistema operativo que dirige las operaciones glob-ales de la computadora, instruye a la computadora para ejecutar otros programas y controla elalmacenamiento y recuperaci¶on de archivos. Los sistemas operativos pueden ser: monousuar-ios, multiusuarios, o tiempo compartido, o monotarea o multitarea. Los sistemas operativosm¶as populares son Windows 2000, Windows XP, UNIX, Linux.

² El sistema operativo consta de varios componentes importantes: kernel del sistema (componentecentral), sistema de administraci¶on de memoria (asigna un ¶area de memoria para cada programaque se est¶a ejecutando), administrador del sistema de archivos (organiza y controla el uso de losdiscos), controladores de dispositivos (controlan los dispositivos de hardware conectados a lacomputadora), y bibliotecas del sistema (contiene todos los tipos de programas utilitarios). Unprograma de computadora es un conjunto de instrucciones internas utilizadas para ejecutarseen una computadora y que produzca un resultado concreto. El proceso de escribir un programao software se denomina programaci¶on, y el conjunto de instrucciones que se pueden utilizar paraescribir un programa se llama lenguaje de programaci¶on.

² (Lenguajes de programaci¶on) Los lenguajes de programaci¶on sirven para escribir progra-mas que permitan la comunicaci¶on usuario/m¶aquina. Unos programas especiales llamadostraductores (compiladores o int¶erpretes) convierten las instrucciones escritas en lenguajes deprogramaci¶on en instrucciones escritas en lenguaje m¶aquina (0,1) que la computadora puedaentender. Los programas utilitarios facilitan el uso de la computadora, por ejemplo un editor detexto. Los programas que realizan tareas concretas, n¶ominas, contabilidad, an¶alisis estad¶³stico,etc, se denominan programas de aplicaci¶on. Los principales tipos de lenguajes de programaci¶onutilizados en la actualidad son tres:

1. lenguaje m¶aquina

Page 49: Crestomatía

49

Figura 4.2: Emsamblador.

2. lenguaje de bajo nivel o ensamblador

3. lenguajes de alto nivel

² (Lenguajes m¶aquina) Son aquellos que est¶an escritos en lenguajes directamente legibles porla m¶aquina, ya que sus instrucciones son cadenas binarias (series de 1 y 0's) que especi¯can unaoperaci¶on, y las posiciones de memoria implicadas en la operaci¶on se denominan instruccionesde m¶aquina o c¶odigo m¶aquina.

² Las instrucciones en lenguaje m¶aquina dependen del hardware de la computadora y por tantodi¯eren de una computadora a otra. Las ventajas de programar en lenguaje m¶aquina se re¯eren,fundamentalmente a la posibilidad de cargar un programa sin necesidad de traducci¶on posterior,lo que supone una velocidad de ejecuci¶on superior a cualquier otro lenguaje de programaci¶on.Sin embargo, actualmente los inconvenientes superan las ventajas, entre ellos podemos listar:

1. di¯cultad y lentitud en la codi¯caci¶on

2. poca ¯abilidad

3. di¯cultad de veri¯car y poner a punto los programas

4. los programas solo son ejecutables en el mismo procesador

Para que el usuario pueda evitar los lenguajes m¶aquina se crearon otros lenguajes con instruc-ciones similares al lenguaje humano, denominados lenguajes de bajo y alto nivel.

² (Lenguajes de bajo nivel) Los lenguajes de bajo nivel son m¶as f¶aciles de utilizar que loslenguajes m¶aquina pero, al igual que ellos, dependen de la m¶aquina en particular. El lenguajede bajo nivel por excelencia es el lenguaje ensamblador, sus instrucciones son conocidas comonemot¶ecnicos, por ejemplo; ADD, SUB, DIV, etc. Un programa escrito en lenguaje ensam-blador no puede ser ejecutado directamente por la computadora, sino que requiere una fase detraducci¶on al lenguaje m¶aquina (ver Fig. 4.2). El programa original escrito en lenguaje ensam-blador se denomina programa fuente y el programa traducido en lenguaje m¶aquina de conocecomo programa objeto. El traductor de programas fuente a objeto es un programa llamadoensamblador. Es importante no confundir el programa ensamblador (encargado de realizarla traducci¶on) con el lenguaje ensamblador (lenguaje de programaci¶on con una estructura ygram¶atica de¯nidas).

² Los lenguajes ensamblador tienen como ventajas que son m¶as f¶aciles de codi¯car, y su velo-cidad de c¶alculo, y como desventajas: la dependencia total de la m¶aquina lo que impide la

Page 50: Crestomatía

50 CAP¶ITULO 4. ORGANIZACI ¶ON DE UNA COMPUTADORA

transportabilidad de los programas, y que la formaci¶on de programadores en este lenguaje esm¶as compleja ya que exige conocer no s¶olo las t¶ecnicas de programaci¶on sino tambi¶en el interiorde la m¶aquina. Actualmente las aplicaciones desarrolladas en lenguaje ensamblador est¶an rela-cionadas principalmente con aplicaciones de tiempo real, control de procesos y de dispositivoselectr¶onicos.

² (Lenguajes de alto nivel) Los lenguajes de alto nivel son los m¶as utilizados por los pro-gramadores ya que est¶an dise~nados para que sean m¶as f¶aciles de entender que los lenguajesm¶aquina y ensamblador. Los programas escritos en lenguajes de alto nivel no dependen dela m¶aquina por lo tanto son portables o transportables y pueden ser ejecutados con poca oninguna modi¯caci¶on en diferentes tipos de computadoras. Las principales ventajas de estoslenguajes son:

1. El tiempo de formaci¶on de los programadores es relativamente corto comparado con otroslenguajes.

2. La escritura d e programas se basa en reglas sint¶acticas similares a los lenguajes humanos,por ejemplo: READ, WRITE, PRINT, etc.

3. Las modi¯caciones y puestas a punto de los programas son m¶as f¶aciles.

4. Reducci¶on del coste de los programas.

5. Transportabilidad.

² Sus principales desventajas son:1. Se requieren diferentes traducciones del programa fuente para llegar al programa objeto.

2. No se aprovechan los recursos internos de la m¶aquina, que se explotan mejor en lenguajesm¶aquina y ensamblador.

3. Hay un incremento en la ocupaci¶on de memoria.

4. Requieren un mayor tiempo de ejecuci¶on.

² Al igual que con los lenguajes ensambladores, los programas fuente escritos en lenguajes de altonivel tienen que ser traducidos por programas traductores llamados compiladores e int¶erpretes.Existen actualmente numerosos lenguajes de programaci¶on, entre ellos: C, C++, COBOL,PASCAL, Visual BASIC, Java, C#, Prolog, LISP, SQL, Delphi, Power Builder, HTML, etc.Traductores de lenguaje Los traductores de lenguaje son programas que traducen los programasfuente escritos en lenguaje de alto nivel a c¶odigo m¶aquina. Se clasi¯can en:

1. Int¶erpretes

2. Compiladores

² (Int¶erpretes) Un int¶erprete es un traductor que toma un programa fuente, lo traduce y acontinuaci¶on lo ejecuta. Actualmente son muy populares la versi¶on interpretada del lenguajeSmalltalk (lenguaje orientado a objetos). Los int¶erpretes han vuelto a renacer con la aparici¶onde Java, ya que para entender el c¶odigo en bytes (bytecode) al que traduce un compilador Javase necesita un int¶erprete.

Page 51: Crestomatía

4.1. HISTORIA DE LOS LENGUAJES DE PROGRAMACI ¶ON 51

Figura 4.3: Edici¶on de un programa.

² (Compiladores) Un compilador es un programa que traduce un programa en lenguaje de altonivel, tal como un programa C, C++ o Java en un programa de un lenguaje m¶as sencillo quela computadora puede comprender.

² La compilaci¶on es el proceso de traducci¶on de programas fuente a programas objeto. El pro-grama objeto obtenido de la compilaci¶on ha sido traducido normalmente a c¶odigo m¶aquina.Para conseguir el programa m¶aquina real se debe utilizar un programa llamado montador oenlazador (linker). El proceso de montaje conduce a un programa de lenguaje m¶aquina directa-mente ejecutable. El proceso de ejecuci¶on de un programa escrito (ver Fig. 4.3) en un lenguajede programaci¶on y mediante un compilador suele tener los siguientes pasos:

1. Escritura del programa fuente con un editor.

2. Introducir el programa fuente en memoria.

3. Compilar el programa.

4. Veri¯car y corregir errores de compilaci¶on.

5. Obtenci¶on del programa objeto.

6. El enlazador obtiene el programa ejecutable.

7. Ejecutar el programa.

4.1 Historia de los lenguajes de programaci¶on

² La historia de la inform¶atica se ha caracterizado fundamentalmente en la existencia de cen-tenares de lenguajes de programaci¶on, a¶un cuando s¶olo unas decenas de ¶estos han tenidoimpacto signi¯cativo y s¶olo unos pocos son utilizados en la industria, los negocios y la ciencia.

Page 52: Crestomatía

52 CAP¶ITULO 4. ORGANIZACI ¶ON DE UNA COMPUTADORA

Muchos de los lenguajes actuales tienen sus ra¶³ces en los lenguajes que nacieron a ¯nales delos 50 y primeros a~nos de los 60, tales como COBOL (1960), FORTRAN IV (1961), BASIC(1964), LOGO (1967). Estos lenguajes representaron la primera alternativa a los lenguajesensambladores. En la d¶ecada de los setenta y primeros a~nos de los ochenta emergieron nuevoslenguajes como Pascal (1971) y C (1972) y Ada (1979), que se convirtieron en dominantes,desplazando a otros como ALGOL y BASIC. Otros lenguajes como COBOL y FORTRAN,lograron adaptarse y se mantuvieron como lenguajes de referencia en el mundo de los nego-cios y en el campo cient¶³¯co, respectivamente, con versiones actualizadas y estandarizadas pororganizaciones como ANSI.

² Todos estos lenguajes anteriores segu¶³an el estilo de programaci¶on estructurada y se conoc¶³ancomo lenguajes de programaci¶on imperativos o estructurados. En paralelo con el desarrollode estos lenguajes surgieron dos nuevos estilos o paradigmas de programaci¶on: programaci¶onfuncional y programaci¶on orientada a objetos. Posteriormente a principios de los ochentaapareci¶o C++ como lenguaje imperativo con propiedades de orientaci¶on a objetos, este ha sidoel lenguaje de programaci¶on orientada a objetos por excelencia en la d¶ecada de los noventa. En1995 Sun presenta o¯cialmente Java, un lenguaje orientado a objetos y con una funcionalidadmuy dirigida a la red Internet. En el a~no 2000 Microsoft present¶o C ++, que est¶a relacionadodirectamente con C, C++ y Java. C ++ representa en la primera d¶ecada del siglo XXI a unlenguaje de programaci¶on con la mayor¶³a de las grandes propiedades que todo buen lenguajedebe cumplir.

4.2 Ejercicios del cap¶³tulo

1. >Cu¶al es la parte m¶as importante de la computadora?

2. >Cual es diferencia entre hardware y software?

3. >Qu¶e son datos de entrada?

4. >Para qu¶e sirve el sistema operativo?

5. >Qu¶e es un disco duro?

6. >Qu¶e son las cintas magn¶eticas y cu¶al es su desventaja?

7. >Cu¶ales son algunas funciones de la UCP y cu¶ales son los dos de sus componentes?

8. >Qu¶e es un microprocesador?

9. >C¶omo se mide la capacidad de un microprocesador y su importancia?

10. >Qu¶e es un dispositivo de entrada y de salida?

11. Cite las partes en que se divide el microprocesador

12. Es el dispositivo interior de la computadora que ejecuta las instrucciones del programa.>El concepto anterior se re¯ere a?

13. >Qu¶e es la memoria de un computador? Explique los 2 tipos.

Page 53: Crestomatía

4.2. EJERCICIOS DEL CAP¶ITULO 53

14. >Qu¶e signi¯ca, en el lenguaje de m¶aquina, los valores 0 y el 1?

15. >Cu¶ales son las ventajas y desventajas del lenguaje ensamblador?

16. >Qu¶e es la memoria auxiliar (externa)?

17. >Cu¶ales fueron los primeros dispositivos computacionales de almacenamiento de datos?

18. >Qu¶e es un lenguaje de programaci¶on?

19. >Cu¶al es una de las ventajas de programar en lenguaje de m¶aquina?

20. >Qu¶e es el lenguaje de programaci¶on de bajo nivel?

21. >Qu¶e es el lenguaje de alto nivel?

22. Mencione el nombre de 3 dispositivos de entrada. Anote 3 dispositivos de salida.

23. >Cu¶ales son algunas caracter¶³sticas de la memoria RAM?

24. >Cu¶al es la clasi¯caci¶on de las memorias RAM?

25. Mencione el nombre de 4 lenguajes de programaci¶on.

Page 54: Crestomatía

54 CAP¶ITULO 4. ORGANIZACI ¶ON DE UNA COMPUTADORA

Page 55: Crestomatía

Cap¶³tulo 5

Introducci¶on a la orientaci¶on a objetos

Hay varios conceptos que son propios de la orientaci¶on a objetos y otros inherentes a la tecnolog¶³a.Aunque no todos son exclusivos de los sistemas orientados a objetos est¶an bien apoyados por elparadigma.A diferencia del paradigma estructurado, que propone modelar a la realidad como una serie de

procedimientos secuenciales, la orientaci¶on a objetos propone representar todo lo que conocemosen t¶erminos de entidades (objetos) que interact¶uan y se relacionan entre s¶³. Estas entidades puedenrepresentar absolutamente cualquier cosa, desde algo f¶³sico y tangible como una persona, una factura oun auto, hasta cosas intangibles como la imaginaci¶on, un proceso qu¶³mico o un algoritmo matem¶atico.La mayor¶³a de los programadores que tienen conocimientos de paradigmas estructurados tienden a

encarar la orientaci¶on a objetos como un agregado m¶as a aquellos, o s¶olo como una forma ligeramentedistinta de hacer lo mismo. Seg¶un iremos viendo a lo largo del curso, la realidad nos dicta que paraser buenos programadores orientados a objetos deberemos entender y modelar la realidad de unamanera distinta.

5.1 Objetos

² Informalmente, un objeto representa una entidad del mundo real1. Entidades F¶³sicas: (Ej.: Veh¶³culo, Casa, Producto)

2. Entidades Conceptuales: (Ej.: Proceso Qu¶³mico, Transacci¶on Bancaria)

3. Entidades de Software:(Ej.: Lista Enlazada, Interfaz Gr¶a¯ca)

² De¯nici¶on Formal (Rumbaugh):

\Un objeto es un concepto, abstracci¶on o cosa con un signi¯cado y l¶³mites claros en elproblema en cuesti¶on"

² La orientaci¶on a objetos es un paradigma de programaci¶on que facilita la creaci¶on de softwarede calidad por sus factores que potencian el mantenimiento, la extensi¶on y la reutilizaci¶ondel software generado bajo este paradigma. Orientado a objetos signi¯ca que el software se

55

Page 56: Crestomatía

56 CAP¶ITULO 5. INTRODUCCI ¶ON A LA ORIENTACI ¶ON A OBJETOS

organiza como una colecci¶on de objetos discretos que contienen tanto estructuras de datos comocomportamiento.

² La programaci¶on orientada a objetos trata de amoldarse al modo de pensar del hombre yno al de la m¶aquina. Esto es posible gracias a la forma racional con la que se manejan lasabstracciones que representan las entidades del dominio del problema, y a propiedades comola jerarqu¶³a o el encapsulamiento.

² El elemento b¶asico de este paradigma no es la funci¶on (elemento b¶asico de la programaci¶onestructurada), sino un ente denominado objeto. Un objeto es la representaci¶on de un conceptopara un programa, y contiene toda la informaci¶on necesaria para abstraer dicho concepto:los datos que describen su estado y las operaciones que pueden modi¯car dicho estado, ydeterminan las capacidades del objeto.

² Podemos de¯nir objeto como \el encapsulamiento de un conjunto de operaciones (m¶etodos)que pueden ser invocados externamente, y de un estado que recuerda el efecto de los servicios".[Piattini et al., 1996].

² Un objeto adem¶as de un estado interno, presenta una interfaz para poder interactuar con elexterior (ver P¶ag. 60). Es por esto por lo que se dice que en la programaci¶on orientada a objetos\se unen datos y procesos", y no como en su predecesora, la programaci¶on estructurada, en laque estaban separados en forma de variables y funciones.

² Un objeto consta de:1. Tiempo de vida: La duraci¶on de un objeto en un programa siempre est¶a limitada enel tiempo. La mayor¶³a de los objetos s¶olo existen durante una parte de la ejecuci¶on delprograma. Los objetos son creados mediante un mecanismo denominado instanciaci¶on, ycuando dejan de existir se dice que son destruidos.

2. Estado: Todo objeto posee un estado, de¯nido por sus atributos. Con ¶el se de¯nen laspropiedades del objeto, y el estado en que se encuentra en un momento determinado desu existencia.

3. Comportamiento: Todo objeto ha de presentar una interfaz, de¯nida por sus m¶etodos,para que el resto de objetos que componen los programas puedan interactuar con ¶el.

4. Identidad: la identidad de un objeto le permite ser distinguido de entre otros y esto seda gracias al nombre que cada objeto posee.

² Nota: El equivalente de un objeto en el paradigma estructurado ser¶³a una variable. As¶³ mismola instanciaci¶on de objetos equivaldr¶³a a la declaraci¶on de variables, y el tiempo de vida de unobjeto al ¶ambito de una variable.

² Para modelar un objeto, debemos preguntarnos:1. >Qu¶e tiene el objeto?

2. >Qu¶e hace el objeto?,

Page 57: Crestomatía

5.2. ATRIBUTOS 57

3. >para qu¶e fue dise~nado?

² Ejemplo bicicleta:

1. Asiento, marco, ruedas, frenos

2. Mueve, aumentaVelocidad, disminuyeVelocidad, detiene

5.2 Atributos

² La de¯nici¶on de objetos implica la descripci¶on de atributos, comportamientos, operaciones ymensajes. Un objeto encapsula tanto datos como los procesos que se aplican a esos datos.Esta importante caracter¶³stica permite construir clases de objetos e inherentemente construirbibliotecas de objetos y clases reutilizables. El paradigma de orientaci¶on a objetos es tanatractivo para tantas organizaciones de desarrollo de software debido a que la reutilizaci¶on esun atributo important¶³simo en la ingenier¶³a del software.

² >Qu¶e son los atributos? Es el conjunto de caracter¶³sticas propias de un objeto dentro de lade¯nici¶on de un problema. Se re¯ere a los datos que forman parte de un tipo de objeto.

² Ejemplo: Perro atributos o caracter¶³sticas: nombre, peso, edad, tama~no, raza, color etc.

² Pensar en t¶erminos de objetos es muy parecido a c¶omo lo har¶³amos en la vida real. Por ejemplovamos a pensar en un auto para tratar de modelizarlo en un esquema de POO. Dir¶³amos que elauto es el elemento principal que tiene una serie de caracter¶³sticas, como podr¶³an ser el color,el modelo o la marca. Adem¶as tiene una serie de funcionalidades asociadas, como pueden serponerse en marcha, parar o aparcar. El auto ser¶³a el objeto, los atributos, propiedades ser¶³ancaracter¶³sticas como el color o el modelo y los m¶etodos ser¶³an las funcionalidades asociadascomo ponerse en marcha o parar.

² Por dar otro ejemplo vamos a ver c¶omo modelar¶³amos en un esquema de OO una fracci¶on,es decir, esa estructura matem¶atica que tiene un numerador y un denominador que divide alnumerador, por ejemplo 3/2.

La fracci¶on ser¶a el objeto y tendr¶a dos atributos, el numerador y el denominador. Luego podr¶³atener varios m¶etodos como simpli¯carse, sumarse con otra fracci¶on o n¶umero, restarse con otrafracci¶on, etc.

Estos objetos se podr¶an utilizar en los programas, por ejemplo en un programa de matem¶aticashar¶as uso de objetos fracci¶on y en un programa que gestione un taller de autos utilizar¶as objetosauto. Los programas Orientados a objetos utilizan muchos objetos para realizar las accionesque se desean realizar y ellos mismos tambi¶en son objetos. Es decir, el taller de autos ser¶a unobjeto que utilizar¶a objetos auto, herramienta, mec¶anico, recambios, etc.

Page 58: Crestomatía

58 CAP¶ITULO 5. INTRODUCCI ¶ON A LA ORIENTACI ¶ON A OBJETOS

5.3 M¶etodos

² >Qu¶e son los m¶etodos? Son las funcionalidades asociadas a los objetos. Cuando estamosprogramando las clases las llamamos m¶etodos. Los m¶etodos son como funciones que est¶anasociadas a un objeto.

1. Especi¯can la forma en que se controlan los datos de un objeto.

2. Son el conjunto de acciones que pueden llevar a cabo un objeto en un momento determi-nado.

² Ejemplo: Perro

m¶etodos o comportamientos: comer, dormir, jugar, haceRuido, ladrar, etc.

5.4 Estado del objeto

² El estado de un objeto viene dado, b¶asicamente, por el estado de sus campos.\ : : :abarca todas las propiedades (normalmente est¶aticas) del mismo m¶as los valoresactuales (normalmente din¶amicos) de cada una de esas propiedades", [Booch96, p98].

² El estado de un objeto es una de las posibles condiciones en que el objeto puede existir El estadonormalmente cambia en el transcurso del tiempo El estado de un objeto es implementado porun conjunto de propiedades (atributos), adem¶as de las conexiones que puede tener con otrosobjetos

² El estado de un objeto se puede caracterizar por el valor de uno o varios de los atributos.² El valor concreto de un atributo de un objeto se llama estado.² El estado de un objeto cambia con el tiempo y est¶a de¯nido por un conjunto de propiedades(atributos), por los valores de esas propiedades y por las relaciones que dicho objeto puedetener con otros objeto

5.5 Comportamiento del objeto

² El comportamiento es la forma en la que el objeto act¶ua y reacciona en t¶erminos de los cambiosen su estado y de las operaciones que con ¶el se realizan. El comportamiento de un objeto esuna funci¶on de su estado as¶³ como de la operaciones que se realicen sobre ¶este. El estado deun objeto representa los resultados acumulados de su comportamiento.

\es como act¶ua y reacciona un objeto, en t¶erminos de sus cambios de estado y pasode mensajes , [Booch96, p101]."

Page 59: Crestomatía

5.6. IDENTIDAD DEL OBJETO 59

² El comportamiento de un objeto determina c¶omo ¶este act¶ua y reacciona frente a las peticionesde otros objetos Es modelado por un conjunto de mensajes a los que el objeto puede responder(operaciones que puede realizar). El comportamiento se determina mediante sus m¶etodos.

5.6 Identidad del objeto

² Por lo general un profesional de sistemas no tiene problemas para describir en qu¶e consiste elestado y el comportamiento de un objeto. Pero hay un tercer factor cr¶³tico que es la iden-tidad, que frecuentemente se pasa por alto. De acuerdo con algunos autores la identidad esla propiedad de un objeto que lo distingue de todos los dem¶as objetos. La identidad es eseaspecto ¶unico de un objeto que controla c¶omo se asocia su comportamiento al estado. Enlenguajes de programaci¶on modernos, tales como C++, Visual Basic, Java o C#, tal aspecto esla localizaci¶on del objeto en memoria. En otras palabras, la identidad est¶a de¯nida en t¶erminosde una direcci¶on en memoria. Cualquier proceso que utilice la una clase carga en memoria, almomento de la ejecuci¶on, una sola copia del c¶odigo y con ella es posible afectar su identidad.

² La identidad es en entonces lo que hace que un objeto se destaque o se distinga de los dem¶as.\aquella propiedad de un objeto que lo distingue de los dem¶as objetos. [Booch96,p106]."

² El concepto de identidad se re¯ere al hecho de que cada objeto es ¶unico en el mundo, por m¶asque su conjunto de atributos y sus valores sean exactamente iguales a los de otros objetos. Porejemplo, dos autos del mismo modelo, color, motor, salidos de la misma l¶³nea de producci¶onel mismo d¶³a no dejan de ser dos autos diferentes, por m¶as que su conjunto de atributos y susvalores sean iguales. La ¶unica posibilidad de que dos objetos sean iguales es que sean el mismoobjeto.

5.7 Mensajes

² Los mensajes son simples llamadas a las funciones o m¶etodos del objeto con el se quiere comu-nicar para decirle que haga cualquier cosa.

² Mediante el denominado paso de mensajes, un objeto puede solicitar de otro objeto que realiceuna acci¶on determinada o que modi¯que su estado. El paso de mensajes se suele implementarcomo llamadas a los m¶etodos de otros objetos 1

² \Es una solicitud que se le env¶³a a un objeto para que lleve a cabo una acci¶on, la cualhace que se produzca una operaci¶on que ejecuta el m¶etodo apropiado". [Martin94,p19].

1Desde el punto de vista de la programaci¶on estructurada, esto corresponder¶³a con la llamada a funciones.

Page 60: Crestomatía

60 CAP¶ITULO 5. INTRODUCCI ¶ON A LA ORIENTACI ¶ON A OBJETOS

² Una solicitud invoca una operaci¶on espec¶³¯ca, con uno o m¶as objetos como par¶ametros.

² Ejemplos: Cuando se trabaja con pseudo-c¶odigo el m¶etodo se invoca escribiendo el nombre delobjeto seguido de un punto y luego el m¶etodo deseado.

elAsistente.lee , elProfesor.explica, elNi~no.duerme etc.

5.8 Interfaz del objeto

² Es el conjunto de ¶ordenes a las que el objeto puede responder. Se re¯ere a la forma en que noscomunicamos con el objeto, sin necesidad de conocer la implementaci¶on.

² La interfaz especi¯ca las operaciones y los tipos que el objeto soporta y especi¯ca, por tanto,las solicitudes que pueden ser enviadas.

² Usualmente adem¶as del conjunto de conductas propias de cada objeto se deben tener otras,que permitan cambiar el estado de los atributos.

5.9 Abstracci¶on

² Podr¶³amos conceptualizarlo como ignorancia selectiva. La abstracci¶on nos ayuda a trabajarcon cosas complejas. Se enfoca en lo importante. Ignora lo que no es importante (simpli¯ca).

² Abstracci¶on es pues la caracterizaci¶on de un objeto de acuerdo a las propiedades que nosinteresen en un instante de tiempo. Una abstracci¶on denota la esencia de una idea mientrasque una instancia denota una manifestaci¶on concreta.

² Las caracter¶³sticas escogidas son relativas a la perspectiva del observador.

² Representan las caracter¶³sticas esenciales de un objeto, sin preocuparse de las restantes carac-ter¶³sticas.

² Una abstracci¶on se centra en la vida externa de un objeto, de modo que se separe el compor-tamiento de un objeto de su implementaci¶on.

Page 61: Crestomatía

5.10. >QU¶E ES UNA CLASE? 61

Abstracci¶on [Booch96, p46].

² Una clase es una abstracci¶on en la que se enfatizan las caracter¶³sticas relevantes y se suprimenotras caracter¶³sticas. Es importante enfatizar que una clase debe capturar una y solo unaabstracci¶on clave

² Otro ejemplo de abstracci¶on

5.10 >Qu¶e es una clase?

² La forma m¶as sencilla de entender el concepto de clase es si la vemos como una agrupaci¶on deobjetos con caracter¶³sticas similares. Por ejemplo, un auto ES UN tipo particular de veh¶³culomotorizado, con lo cual dentro de su comportamiento podemos encontrar \arrancar" y \frenar",

Page 62: Crestomatía

62 CAP¶ITULO 5. INTRODUCCI ¶ON A LA ORIENTACI ¶ON A OBJETOS

entre otros. Ahora bien, una motocicleta tambi¶en ES UN veh¶³culo motorizado, y tiene dentrode su comportamiento \arrancar" y \frenar". El conjunto de atributos tambi¶en es compartidoentre una motocicleta y un autom¶ovil, aunque sus valores no coincidan necesariamente. Porejemplo, ambos tienen el atributo \cantidad de ruedas", s¶olo que el auto tiene 4 y la motocicleta2.

² Una clase es una abstracci¶on que enfatiza las caracter¶³sticas relevantes y suprime otras carac-ter¶³sticas (simpli¯caci¶on)

² Una clase es una descripci¶on de un grupo de objetos con:

1. Propiedades en com¶un (atributos)

2. Comportamiento similar (operaciones)

² Una clase es una de¯nici¶on abstracta de un objeto. Podemos observar sobre una clase que:

1. De¯ne la estructura y el comportamiento compartidos por los objetos

2. Sirve como modelo para la creaci¶on de objetos

3. Los objetos pueden ser agrupados en clases

² Otra forma ¶util de ver una clase es como una plantilla, plano o molde de un conjunto deentidades a partir del cual se crear¶an luego instancias particulares (los objetos). La interacci¶onde las entidades en el mundo real se produce entre objetos, no entre clases. Las clases no tienen\vida" en el mundo real, los objetos s¶³. Para poder interactuar con alguna clase deberemoscrear una instancia particular de ella, con un conjunto de valores de¯nidos para los atributos.A este proceso se lo conoce como \instanciaci¶on de un objeto".

² Una clase es una agrupaci¶on de datos (variables o campos) y de funciones (m¶etodos) que operansobre esos datos. A estos datos y funciones pertenecientes a una clase se les denomina variablesy m¶etodos o funciones miembro. La clase es el patr¶on o modelo para crear objetos.

² Sobre las clases debemos tener presente que:

1. Engloba todas las caracter¶³sticas de un conjunto particular de objetos.

2. Es un conjunto de objetos que tienen una estructura com¶un y un comportamiento com¶un.Por tanto la clase es una abstracci¶on del concepto objeto.

3. Un objeto es una instancia de una clase [Booch].

4. Describen un conjunto de objetos que comparten los mismos atributos, operaciones yrelaciones.

² Un ejemplo de una clase se muestra a continuaci¶on:

Page 63: Crestomatía

5.11. INSTANCIACI ¶ON DE UNA CLASE 63

Clase: CursoEstado (Atributos)NombreUbicaci¶onD¶³as OfrecidosHorario de InicioHorario de T¶ermino

Comportamiento (M¶etodos)Agregar un AlumnoBorrar un AlumnoEntregar un Listado del CursoDeterminar si est¶a Completo

² Algunos otros ejemplos de clases son:

1. Martillo.

2. Persona.

3. Carro.

4. Perro.

5. Factura.

6. Organizaci¶on.

7. Libro.

8. Celular.

9. Silla.

5.11 Instanciaci¶on de una clase

² Instancia y objeto son sin¶onimos. Es una manifestaci¶on concreta de una abstracci¶on a la quese le puede aplicar un conjunto de operaciones y que puede tener un estado que almacena losefectos de la operaci¶on.

² Un objeto es una entidad concreta que existe en el tiempo y el espacio, una clase representas¶olo una abstracci¶on.

² Crear un objeto a partir de una clase se llama "instanciar".

² Por ejemplo, un objeto de la clase fracci¶on es 3/5. El concepto o de¯nici¶on de fracci¶on ser¶³a laclase, pero cuando ya estamos hablando de una fracci¶on en concreto 4/7, 8/1000 o cualquierotra, la llamamos objeto.

Page 64: Crestomatía

64 CAP¶ITULO 5. INTRODUCCI ¶ON A LA ORIENTACI ¶ON A OBJETOS

² Cada objeto se diferencia por su estado espec¶³¯co y por la posibilidad de realizar una serie deoperaciones.

² (Ejemplo) Suponga que tenemos un molde para hacer queques. El molde corresponde a laclase. Ah¶³ se determinan los atributos importantes del queque. Cada queque realizado con esemolde es una instanciaci¶on de esta clase.

² Una sola clase puede generar muchos objetos² (Ejemplo) Cuando una persona desea ingresar a la universidad debe llenar un formulario. Elformulario vac¶³o puede pensarse como una clase. Cuando un estudiante particular llena elformulario, este corresponde a un objeto de esa clase

² (Diferencia entre Objeto-Clase)La clase es la abstracci¶on del objeto y el objeto tiene un estado de¯nido en relaci¶on a la clase.A partir de una clase se puede de¯nir un n¶umero de objetos, cada uno de ellos tendr¶a un estadoparticular propio.

5.12 Encapsulaci¶on

² Los campos, propiedades, m¶etodos y eventos son solamente la mitad de la ecuaci¶on de laprogramaci¶on orientada a objetos. Para que la programaci¶on orientada a objetos sea aut¶enticalos objetos deben admitir tres cualidades: encapsulaci¶on, herencia y polimor¯smo. En esteapartado estudiamos el primer concepto.

² >Qu¶e es la encapsulaci¶on? La encapsulaci¶on signi¯ca que un grupo de propiedades, m¶etodosy otros miembros relacionados se tratan como si de una sola unidad u objeto se tratase. Losobjetos pueden controlar c¶omo se cambian propiedades o se ejecutan m¶etodos. Por ejemplo,un objeto puede validar valores antes de permitir cambios en la propiedad. La encapsulaci¶on,adem¶as, facilita la posibilidad de realizar cambios en la implementaci¶on pasado alg¶un tiempo,mediante una actividad denominada ocultaci¶on de datos que permite ocultar los detalles deimplementaci¶on de los objetos.

"...el proceso mediante el cual se ocultan todos los detalles de un objeto que nocontribuyen a sus caracter¶³sticas esenciales"[Booch96, p55]. "...el resultado(o actode ocultar los detalles) de implementaci¶on de un objeto respecto de su usuario ",[Mart¶³n94, p19].

² (Encapsulaci¶on) Es la capacidad que tienen los objetos de construir una c¶apsula a su alrede-dor, ocultando la informaci¶on que contienen (aquella que es necesaria para su funcionamientointerno, pero innecesaria para los dem¶as objetos). Este principio es el que vale para que laspersonas puedan ver televisi¶on sin ser t¶ecnicos en reparaci¶on de televisores o bien manejar unauto sin ser mec¶ancio, etc.

Page 65: Crestomatía

5.13. MODIFICADORES DE ACCESO 65

² Ventajas de la Encapsulaci¶on:1. El consumidor accede solo las funciones que necesita.

2. El desarrollador puede modi¯car algunas funciones sin variar la forma de utilizar unaclase.

5.13 Modi¯cadores de acceso

² Los modi¯cadores de acceso permiten de¯nir el nivel de acceso (visibilidad) de los miembros(atributos o m¶etodos) de una clase. Es necesario determinar el nivel de ocultamiento que tienenlos miembros de una clase (atributos, m¶etodos).

² Los cuatro tipos m¶as comunes de ocultamiento son:1. P¶ublicos: Cualquier clase puede \ver" los miembros p¶ublicos de otra clase es decir puedenser accedidos con total libertad por todos los usuarios.

2. Privados: S¶olo la clase puede ver sus propios miembros privados, es decir solamente sepueden invocar desde la propia clase.

3. Protegidos: como las privadas pero permitiendo el acceso a las clases herederas.

4. Amigables: son accesibles desde todas las clases de un mismo paquete.

5.14 Herencia y polimor¯smo

² Los campos, propiedades, m¶etodos y eventos son solamente la mitad de la ecuaci¶on de laprogramaci¶on orientada a objetos. Para que la programaci¶on orientada a objetos sea aut¶enticalos objetos deben admitir tres cualidades: encapsulaci¶on, herencia y polimor¯smo.

² Herencia: describe la posibilidad de crear nuevas clases basadas en una clase existente. Lanueva clase hereda todas las propiedades, m¶etodos y eventos de la clase base, y puede per-sonalizarse con propiedades y m¶etodos adicionales. Por ejemplo, se puede crear una clasedenominada \Cami¶on" basada en la clase \Veh¶³culo". La clase \Cami¶on" hereda, por ejem-plo la propiedad \Color" de la clase \Veh¶³culo" y puede tener propiedades adicionales como"FourWheelDrive".

² Polimor¯smo: signi¯ca que puede tener m¶ultiples clases que se pueden utilizar de formaintercambiable, si bien cada clase implementa las mismas propiedades o los mismos m¶etodosde maneras diferentes. El polimor¯smo es esencial en la programaci¶on orientada a objetospuesto que permite utilizar elementos con los mismos nombres, independientemente del tipo deobjeto que se est¶e utilizando en ese momento. Por ejemplo, dada una clase base \Veh¶³culo",el polimor¯smo permite al programador de¯nir diferentes m¶etodos \Arrancar" para cualquier

Page 66: Crestomatía

66 CAP¶ITULO 5. INTRODUCCI ¶ON A LA ORIENTACI ¶ON A OBJETOS

n¶umero de clases derivadas. El m¶etodo \Arrancar" de una clase derivada denominada \Ca-mi¶onDiesel" puede ser totalmente diferente del m¶etodo con el mismo nombre en la clase base.Otros procedimientos o m¶etodos pueden utilizar el m¶etodo \Arrancar" de las clases derivadasexactamente de la misma forma, con independencia del tipo de objeto \Veh¶³culo" que se est¶eutilizando en ese momento

.

5.15 Sobrecarga, reemplazo y sombreado

² La sobrecarga, el reemplazo y el sombreado son conceptos similares que pueden confundirsef¶acilmente. Aunque las tres t¶ecnicas permiten crear miembros con el mismo nombre, existenalgunas diferencias importantes.

² Los miembros sobrecargados se utilizan para proporcionar diferentes versiones de una propiedado m¶etodo que tienen el mismo nombre, pero que aceptan un n¶umero diferente de par¶ametros,o par¶ametros con diferentes tipos de datos.

Los atributos y m¶etodos reemplazados se utilizan para reemplazar un atributo o m¶etodo hereda-dos que no son apropiados en una clase derivada. Los miembros reemplazados deben aceptarel mismo tipo de datos y n¶umero de argumentos. Las clases derivadas heredan los miembrosreemplazados.

Los miembros sombreados se utilizan para reemplazar localmente un miembro que tiene un¶ambito m¶as amplio. Cualquier tipo puede sombrear cualquier otro tipo. Por ejemplo, puededeclarar un propiedad que sombree un m¶etodo heredado con el mismo nombre. Los miembrossombreados no se pueden heredar.

5.16 Ejercicios del cap¶³tulo

1. >Qu¶e es un objeto?

2. >Cu¶al es la estructura de un objeto?

3. >Qu¶e es un atributo?

4. >Qu¶e es un m¶etodo?

5. >Qu¶e es el estado de un objeto?

6. >Qu¶e se entiende por comportamiento del objeto?

7. >Qu¶e se entiende por identidad del objeto?

8. >Qu¶e se entiende por interfaz del objeto?

9. >Qu¶e es una clase de objetos?

10. >Qu¶e es una instancia de una clase?

Page 67: Crestomatía

5.16. EJERCICIOS DEL CAP¶ITULO 67

11. >Qu¶e se entiende por encapsulaci¶on?

12. >Qu¶e son los modi¯cadores acceso? D¶e algunos ejemplos.

13. >Qu¶e es herencia en orientaci¶on a objetos?

14. >Qu¶e es polimor¯smo en orientaci¶on a objetos?

15. Explique los conceptos de sobrecarga, reemplazo y sombreado

16. En cuanto a la herencia: >C¶omo se clasi¯can los m¶etodos?

17. >C¶omo se comunican los objetos?

18. Que representa una abstracci¶on de datos?

19. >C¶omo pueden ser los atributos?

20. >Qu¶e son los m¶etodos de una clase?

21. >Qu¶e tipos de m¶etodos existen?

22. >Para que se usan las clases?

23. Comente: >como se usan los objetos en una Clase? Todos los objetos contenidos en unaclase tienen el mismo formato y comportamiento, son diferentes ¶unicamente en los datosque contienen sus variables.

24. >Que es un diagrama de clase?

25. >Para que se utilizan los diagramas de clases?

Page 68: Crestomatía

68 CAP¶ITULO 5. INTRODUCCI ¶ON A LA ORIENTACI ¶ON A OBJETOS

Page 69: Crestomatía

Cap¶³tulo 6

Relaciones entre clases

6.1 Introducci¶on al UML

² UML es una gram¶atica para expresar dise~nos de software orientado a objetos. Sus siglassigni¯can, en espa~nol, Lenguaje Uni¯cado de Modelado. No es la ¶unica notaci¶on que existe,pero es el est¶andar actual del llamado Object Management Group (OMG). Por tanto, convienesaber c¶omo expresarse en este lenguaje, advirtiendo que los lenguajes son din¶amicos y que, aveces, no se utilizan de la misma forma por diferentes autores. Nosotros aprovecharemos UMLpara profundizar en los conceptos del software orientado a objetos.

² \UML es un lenguaje visual para especi¯car, construir y documentar sistemas" (OMG - ObjectManagement Group)

² UML se expresa a trav¶es de elementos de construcci¶on, de relaciones y de diagramas quecontienen elementos y relaciones. Conocer esta estructura general ayuda a la comprensi¶on dellenguaje en su conjunto y facilita prescindir de los detalles, hasta que no sean necesarios.

² El UML es un lenguaje de Modelado Uni¯cado creado por G. Booch, Rambaught, Ivar Jacobson, el cual nos permite modelar a trav¶es de simbolog¶³a diferentes tipos de diagramas que facilitanla lectura gr¶a¯ca de la soluci¶on del problema.

² Est¶a compuesto por una notaci¶on muy espec¶³¯ca y por las reglas sem¶anticas relacionadas parala construcci¶on de sistemas de software.

² El UML soporta un conjunto rico en elementos de notaci¶on gr¶a¯cos. Describe la notaci¶on paraclases, componentes, nodos, actividades, °ujos de trabajo, casos de uso, objetos, estados yc¶omo modelar la relaci¶on entre esos elementos.

² El UML provee bene¯cios signi¯cativos para los ingenieros de software y las organizaciones alayudarles a construir modelos rigurosos, trazables y mantenibles, que soporten el ciclo de vidade desarrollo de software completo.

² Algunas ventajas de usar UML son:

69

Page 70: Crestomatía

70 CAP¶ITULO 6. RELACIONES ENTRE CLASES

1. Comunicaci¶on mejorada

2. Ocultando/resaltando hechos

3. Seleccionando la vista para la interfaz/implementaci¶on

4. Buena estandarizaci¶on

² Cuando hablamos de clases no podemos hacerlo en forma independiente, siempre tenemos quehacerlo con base a un tipo de relaci¶on entre ellas. UML es un lenguaje visual de modeladoy documentaci¶on de sistemas, tan utilizado en el mundo de desarrollo orientado a objetosque se ha convertido casi en un est¶andar \de facto". En este apartado estudiaremos algunosfundamentos del UML y su uso en la descripci¶on de relaciones entre clases.

6.2 Tipos de Datos

² Se re¯ere al tipo de informaci¶on que puede contener un identi¯cador. Los tipos de datos serelacionan directamente con los atributos. La relaci¶on con los m¶etodos no es tan directa, peroigualmente se requiere la asignaci¶on de tipos de datos.

² Al almacenar informaci¶on, es necesario diferenciar de qu¶e tipo es, para que el computadorpueda identi¯car adecuadamente las secuencias de bytes.

² (Char) El tipo de dato m¶as sencillo es el car¶acter, que ser¶³a un solo elemento de una colecci¶onde 256 s¶³mbolos, que puede incluir:

1. letras may¶usculas y min¶usculas

2. s¶³mbolos especiales como . , ; / & # ? ¤ + [ )3. La representaci¶on de los d¶³gitos decimales como s¶³mbolo y no como valor, etc.

La identi¯caci¶on que se utilizar¶a para este tipo de datos es char.

² Por ejemplo se declara el atributo \tama~noCamisa : char" y puede contener \p", \m", o \g".² (String) El tipo char se ampl¶³a a un tipo m¶as ¶util llamdo cadena de caracteres.² Consiste en la reuni¶on de una secuencia de caracteres. Esta secuencia se puede utilizar con unasola referencia. Se identi¯car¶a con la palabra string.

² Ejemplo:

nombreEstudiante : string.

Este atributo puede contener \Armando Carro Matos"

² La representaci¶on de n¶umeros tiene dos tipos diferentes, dependiendo si el n¶umero tiene deci-males o no.

Page 71: Crestomatía

6.3. REPRESENTACI ¶ON DE CLASES MEDIANTE UML 71

1. (int) Si el n¶umero no tiene decimales se le llama int. Ejemplos: 45, ¡3, 3545.2. (°oat) Si tiene decimales se le llama °oat. Ejemplos: 45.3, ¡3:785234, 3545.0.

² (Boolean) Un ¶ultimo tipo de dato es para valores l¶ogicos, es decir, que puede valer solo falsoo verdadero. Este tipo se identi¯ca con el nombre de boolean.

² En los lenguajes de programaci¶on se manejan otros tipos de datos y m¶as adelante de¯niremosotros m¶as. Adem¶as, los nombres utilizados tambi¶en pueden variar.

² Sin embargo, estos tipos de datos son su¯cientes por el momento.

6.3 Representaci¶on de clases mediante UML

² Las clases se pueden utilizar para capturar el vocabulario del sistema que se est¶a desarrollando.El modelado de un sistema implica identi¯car las cosas que son importantes desde un ciertopunto de vista particular.

² Una clase es la de¯nici¶on de un conjunto de objetos que comparten los mismos atributos,operaciones, relaciones y sem¶antica.

² Las clases se representan gr¶a¯camente con una caja dividida en tres zonas:1. La primera secci¶on contiene el nombre de la clase

2. La segunda secci¶on muestra la estructura (atributos)

3. La tercera secci¶on muestra el comportamiento (operaciones)

² En algunas ocasiones, para simpli¯car el diagrama, las clases se representan con una caja quecontiene s¶olo el nombre.

² El n¶umero de instancias que pueden crearse de una clase es su multiplicidad. Generalmentela multiplicidad de una clase es ilimitada, en un sistema suele haber muchas instancias uobjetos de una clase ejecut¶andose. Sin embargo, a veces es necesario restringir a un n¶umerodeterminado el n¶umero de instancias de una clase. En estos casos, la multiplicidad se escribeen la esquina superior derecha de la clase.

² Modi¯cadores de Acceso: UML permite especi¯car dos caracter¶³sticas importantes de los ele-mentos (atributos y operaciones) de una clase: la visibilidad y el alcance. El alcance es untema que se estudiar¶a en posteriores cursos.

² Visibilidad: los elementos de una clase pueden ser p¶ublicos, protegidos o privados.1. Los elementos p¶ublicos son visibles para los objetos de todas las clases del sistema. Unelemento p¶ublico va precedido del signo +.

Page 72: Crestomatía

72 CAP¶ITULO 6. RELACIONES ENTRE CLASES

2. Los elementos protegidos s¶olo son visibles dentro de la clase y de las clases hijas. Unelemento protegido va precedido del signo #.

3. Los elementos privados solamente son visibles dentro de la clase. Un elemento privado vaprecedido del signo ¡.

² Seguidamente se muestran algunos ejemplos de representaci¶on de una clase:

Curso¡ Nombre¡ Ubicaci¶on¡ Horario¡ Carrera+ AgregarEst()+ BorrarEst()+ GetNombre()

BOLATipoColorMaterialRebotar()Rodar()In°ar()Desin°ar()

² Otro ejemplo de clase es el que se obtiene cuando se considera una Cuenta Corriente queposee como caracter¶³stica el Balance. Suponga adem¶as, que puede realizar las operaciones de:Depositar, Girar y CalcBalance. Esta clase se puede representar por:

Cuenta¡ int balance+ void depositar(°oat monto)+ bool girar(°oat monto)+ °oat CalcBalance()

² (Ejemplo) Se cuenta con tres tipos diferentes de ¶arboles: del bosque lluvioso, tropicales yornamentales. Cada ¶arbol posee un nombre com¶un y un nombre cient¶³¯co. Adem¶as tiene la¶epoca de °orecimiento, la altura y la circunferencia del tronco, el cual permite calcular la edaddel ¶arbol. Adem¶as debe registrar el tama~no y el color de las hojas. De¯na el diagrama de clasecompleto correspondiente.

² El diagrama de clase completo se muestre en la Fig. 6.1.

6.4 Relaciones

² Se puede asegurar que los pilares b¶asicos de la orientaci¶on a objetos son:

1. Abstracci¶on

2. Herencia

3. Encapsulamiento

4. Relaciones

Page 73: Crestomatía

6.4. RELACIONES 73

¶Arbol-nombreComun: string-nombreCienti¯co: string-Tipo: string-epocaFlorecimiento: string- altura: °oat- circunferenciaTallo: °oat- zona: string- tama~noHojas: °oat- colorHojas: string+ calcularA~nos()+establecerNombreCienti¯co()+establecerNombreComun()+establecerEpocaFlorecimiento()+establecerAltura()+establecerCircunferenciaTallo()+establecerZona()+establecerTama~noHojas()+establecerColorHojas()+obtenerNombreCienti¯co()+obtenerNombreComun()+obtenerEpocaFlorecimiento()+obtenerAltura()+obtenerCircunferenciaTallo()+obtenerZona()+obtenerTama~noHojas()+obtenerColorHojas()

Figura 6.1: Clase ¶arbol.

Page 74: Crestomatía

74 CAP¶ITULO 6. RELACIONES ENTRE CLASES

² Nos dedicaremos en este apartado a estudiar las relaciones. Estas relaciones se indicar¶an enforma de un diagrama. Un diagrama es una representaci¶on gr¶a¯ca de un conjunto de elementos,que la mayor¶³a de las veces se dibuja como un conjunto conexo de nodos (elementos) y arcos(relaciones). Los buenos diagramas hacen comprensibles y accesibles el sistema.

² Tenemos b¶asicamente cinco tipos de relaciones que son:1. de dependencia

2. de asociaci¶on

3. de agregaci¶on

4. de composici¶on

5. de herencia

6.5 Relaci¶on de dependencia

² Una dependencia es una relaci¶on sem¶antica entre dos elementos, en la cual un cambio a unelemento (el elemento independiente) puede afectar a la sem¶antica del otro elemento (el ele-mento dependiente). Gr¶a¯camente, una dependencia se representa como una l¶³nea discontinuadirigida, que incluye a veces una etiqueta.

² Una dependencia es una relaci¶on de uso que declara que un cambio en la especi¯caci¶on de unelemento puede afectar a otro elemento que la utiliza, pero no a la inversa. La mayor¶³a de lasveces, las dependencias se utilizar¶an en el contexto de las clases, para indicar que una claseutiliza a otra como argumento en la signatura de una operaci¶on.

² Podr¶³a decirse que una de las relaciones m¶as d¶ebiles son las asociaciones de dependencia. Ladependencia es muy interesante ya que se realiza entre objetos que tiene una relaci¶on de uso.

² Por ejemplo considere el caso de un objeto Persona usa un objeto Lapicero. Aqu¶³ vemos quePersona depende de Lapicero en el sentido de que necesita emplear el m¶etodo Escribir() de este¶ultimo.

² Este tipo de reslaci¶on se representa en UML con una l¶³nea discontinua que conecta a lasrespectivas clases. En el caso del ejemplo anterior tenemos:

personahace uso de¡¡¡¡¡¡¡¡ ! lapicero

² Se puede notar en este ejemplo como existe una °echa discontinua y dirigida hacia la claseLapicero.

² Otro ejemplo es un objeto Aplicaci¶on que hace uso de una Ventana.

Page 75: Crestomatía

6.6. RELACI ¶ON DE ASOCIACI ¶ON 75

Aplicaci¶onhace uso de¡¡¡¡¡¡¡¡ ! Ventana

² Un cambio en la clase independiente (Aplicaci¶on) puede afectar a la clase dependiente (Ven-tana).

² Otro ejemplo, es el caso de que exista un objeto ecuaci¶on, donde este objeto va a depender deuna clase que realiza los c¶alculos. Entonces tenemos dos clases donde se da una relaci¶on dedependencia. La clase \Ecuaci¶on" depende de la clase \Math". Vemos que la clase ecuaci¶ondepende de la clase \Math", ya que la clase \Ecuaci¶on" necesita de \Math" para que le realiceciertos c¶alculos, ya sea estos, sacar ra¶³z, elevar a potencia, obtener el logaritmo natural, obtenerel seno de un ¶angulo., etc.

Ecuaci¶onhace uso de¡¡¡¡¡¡¡¡ ! Math

² Por lo general esta clase a la que va dirigida la °echa no tiene atributos, ya que lo ¶unico quehace es dar un servicio y se le da el nombre de clase \degenerada" ya que no tiene estado. Laclase Math simplemente contiene una colecci¶on de funciones matem¶atica para realizar c¶alculos.Posteriormente veremos como un objeto Ecuaci¶on solicita informaci¶on a trav¶es del paso demensajes a la clase Math. En este tipo de relaci¶on no existe la multiplicidad o cardinalidad(esto se explicar¶a despu¶es). Ejemplo:

² Es una relaci¶on de utilizaci¶on en la que un cambio en el estado de un objeto (el independiente)afecta el estado del otro (el dependiente), pero no viceversa. La clase Ecuaci¶on (dependiente)usa a la clase Math (independiente).

6.6 Relaci¶on de asociaci¶on

² Son relaciones estructurales entre instancias, que especi¯can que los objetos de un elementoest¶an conectados con los objetos de otro.

² La relaci¶on de asociaci¶on es la relaci¶on m¶as importante y com¶un. Re°eja una relaci¶on entredos clases independientes que se mantiene durante la vida de los objetos de dichas clases o almenos durante un tiempo prolongado

² En la notaci¶on UML la asociaci¶on se representa mediante una linea que une las clases rela-cionadas. Adem¶as pueden a~nadirse los siguientes elementos:

1. El nombre de la relaci¶on

2. Las cardinalidades (o multiplicidades)

3. En caso de que la relaci¶on no sea bidireccional, el sentido de la misma mediante una °echa.Esto es lo normal.

Page 76: Crestomatía

76 CAP¶ITULO 6. RELACIONES ENTRE CLASES

4. Los roles en los extremos (el papel que cumple una clase para la otra). Si la relaci¶on esunidireccional basta con indicar en el extremo ¯nal

² Rol: Identi¯cado como un nombre a los ¯nales de la l¶³nea, describe la sem¶antica de la relaci¶on enel sentido indicado. Cada asociaci¶on tiene dos roles; cada rol es una direcci¶on en la asociaci¶on.El rol puede estar representado en el nombre de la clase.

² Explicamos este concepto mediante las siguientes ¯guras. Observamos en la siguientes ¯gurascomo un profesor est¶a relacionado con un departamento.

Profesor Administra un À Departamento

Profesor Dirige un À Departamento

² En la primera situaci¶on vemos que se da una relaci¶on de dirigencia, y normalmente la dirigen-cia recae sobre una persona "El que dirige el departamento". Normalmente el que dirige eldepartamento es un persona que en este caso es un profesor Cuando dibujamos o modelamoscon ayuda del UML una clase, solo vamos a poner el rect¶angulo con el nombre de la clasedentro. Por ejemplo la clase PROFESOR, la pondr¶³amos as¶³: Esta clase PROFESOR podr¶³atener alg¶un tipo de relaci¶on con la clase DEPARTAMENTO. Decimos alg¶un tipo de relaci¶onya que pueden existir varias.

² Multiplicidad: Describe la cardinalidad de la relaci¶on, es decir, cu¶antos objetos de esa clasepueden participar en la relaci¶on dada

² En UML, la cardinalidad de las relaciones indica el grado y nivel de dependencia, se anotanen cada extremo de la relaci¶on y ¶estas pueden ser:

1. uno o muchos: 1 : : :¤ (1::n)

2. o muchos: 0 : : :¤ (0::n)

3. n¶umero ¯jo: m (m denota el n¶umero).

4. Uno y s¶olo uno: 1

5. Cero o uno: 0 : : : 1

6. Desde M hasta N (enteros naturales): M : : :N

7. Cero o muchos: ¤

8. La multiplicidad m¶³nima ¸ 1 establece una restricci¶on de existencia² En el diagrama de la Fig. 6.2 se muestra la cardinalidad sobre la relaci¶on Contrata entre la clasePatr¶on y la clase Empleado.

² Los tipos de asociaciones entre clases presentes en un diagrama est¶atico pueden ser de dosnaturalezas:

Page 77: Crestomatía

6.6. RELACI ¶ON DE ASOCIACI ¶ON 77

Figura 6.2: Cardinalidad sobre una relaci¶on.

Figura 6.3: Relaci¶on de asociaci¶on.

1. Asociaci¶on Binaria: Representa una relaci¶on sencilla entre dos clases, no muy fuerte (esdecir, no se exige dependencia existencial ni encapsulamiento). Se indica como una l¶³neas¶olida que une dos clases.

2. Asociaci¶on n{aria: Es una asociaci¶on entre tres o m¶as clases. Se representa como undiamante del cual salen l¶³neas de asociaci¶on a las clases.

² La notaci¶on UML es °exible. No es necesario indicar todos los elementos de la relaci¶on, dependedel nivel de detalle que nos interese y/o la fase de analisis/dise~no en la que nos encontremos.

² En la Fig. 6.3 un diagrama de clases y algunas relaciones de asociaci¶on.

² Cuando se trata de una relaci¶on de asociaci¶on los objetos son normalmente creados y destruidosde manera independiente el uno del otro.

² Atributos de los enlaces: propiedades de los enlaces de una asociaci¶on. Opcionales en losenlaces uno-a-uno y uno-a-muchos. Altamente recomendables en los enlaces muchos{a{muchos.Ver Fig. 6.4.

Page 78: Crestomatía

78 CAP¶ITULO 6. RELACIONES ENTRE CLASES

Figura 6.4: Atributos de los enlaces.

Figura 6.5: Agregaci¶on.

6.7 Relaciones de agregaci¶on/composici¶on

² Agregaci¶on: es una relaci¶on que modela una relaci¶on del tipo todo/parte. La agregaci¶on esun tipo especial de asociaci¶on donde se a~nade el matiz sem¶antico de que la clase de donde partela relaci¶on representa el \todo" y las clases relacionadas \partes" de ¶esta clase.

² Una relaci¶on de agregaci¶on vincula una clase ya ensamblada con una clase componente. Estambi¶en una relaci¶on de composici¶on menos fuerte (no se exige dependencia existencial) y sedenota por un rombo sin rellenar en un o de los extremos. En la Fig. 6.5 se muestra un ejemplode relaci¶on de agregaci¶on.

² Composici¶on: es una variaci¶on de la agregaci¶on en la que se descata una relaci¶on estrechade pertenencia de la parte al todo; la parte componente s¶olo puede formar parte de una partecompuesta a la vez. La composici¶on es un tipo de agregaci¶on que a~nade el matiz de que laclase \todo" controla la existencia de las clases \parte". Es decir, normalmente la clase \todo"crear¶a al principio las clases \parte" y al ¯nal se encargar¶a de su destrucci¶on.

² La composici¶on es una asociaci¶on fuerte, que implica tres cosas:

1. Dependencia existencial: El elemento dependiente desaparece al destruirse el que lo con-tiene y, si es de cardinalidad 1, es creado al mismo tiempo.

2. Hay una pertenencia fuerte: Se puede decir que el objeto contenido es parte constitutivay vital del que lo contiene.

3. Los objetivos contenidos no son compartidos, esto es, no hacen parte del estado de otroobjeto.

² La composici¶on se denota dibujando un rombo (s¶olido) del lado de la clase que contiene a laotra en la relaci¶on. Ver Fig. 6.6.

Page 79: Crestomatía

6.8. RELACI ¶ON DE HERENCIA 79

Figura 6.6: Composici¶on.

² Agregaci¶on y composici¶on son relaciones que de¯nen una relaci¶on PARTE{TOTAL. Si larelaci¶on es fuerte, tal que objetos de la clase PARTE son dependiente de la existencia dela clase TOTAL entonces la relaci¶on es composici¶on. La clase TOTAL, tiene la responsabilidadde la creaci¶on y destrucci¶on de objetos de sus componentes. Al contrario, si la existencia deobjetos de la clase PARTE es independiente de la esistencia de objetos de la clase TOTAL,entonces la relaci¶on es agregaci¶on.

6.8 Relaci¶on de herencia

² GENERALIZACI¶ON: es un proceso de abstracci¶on en el cual un conjunto de clases existentes,que tienen atributos y m¶etodos comunes, es referido por una clase gen¶erica a un nivel mayorde abstracci¶on. La relaci¶on de generalizaci¶on denota una relaci¶on de herencia entre clases. Serepresenta dibujando un tri¶angulo sin rellenar en el lado de la superclase. La subclase heredatodos los atributos y mensajes descritos en la superclase.

² Si se tiene una relaci¶on en la que un objeto posee atributos y operaciones similares a otro,entonces son objetos de la misma clase, pero si uno de los objetos \posee" atributos o bienoperaciones \extras" o de diferente comportamiento, se tiene una relaci¶on de generalizaci¶on.

² La clase con mayor re¯namiento es llamada \clase de especializaci¶on o subclase" la otra, la demenor re¯namiento es llamada \clase de generalizaci¶on o superclase". Una clase sin superclasesse denomina una clase ra¶³z. Una clase sin subclases es una clase hoja.

² HERENCIA: un concepto derivado de la relaci¶on de generalizaci¶on, indica que la subclase \here-da" (posee o puede acceder) los atributos, operaciones y relaciones de la superclase. Puedeexplotarse (con cuidado) conceptos de polimor¯smo.

² La relaci¶on herencia se caracteriza porque la etiqueta que une las clases es siempre \es un tipode". Normalmente se omite dicha etiqueta.

² Una generalizaci¶on da a lugar al polimor¯smo entre clases de una jerarqu¶³a de generalizaciones.Un objeto de una subclase puede sustituir a un objeto de la superclase en cualquier contexto.

Page 80: Crestomatía

80 CAP¶ITULO 6. RELACIONES ENTRE CLASES

Figura 6.7: Relaci¶on de generalizaci¶on.

Figura 6.8: Herencia m¶ultiple.

Lo inverso no es cierto Una operaci¶on de la subclase con igual signatura que una operaci¶on dela superclase la anula y sustituye.

² En la Fig. 6.7 se da un ejemplo de relaci¶on de generalizaci¶on o herencia.² Una clase puede tener cero, una (herencia simple) o m¶as superclases (herencia m¶ultiple) Unejemplo de herencia m¶ultiple se muestra en la Fig. 6.8.

6.9 Modelando relaciones mediante UML

² Hasta ahora hemos estudiando las relaciones entre clases. Sin embargo es conveniente aclararesto no abarca todo lo que es UML. Aunque no se estudiar¶an en este texto, es bueno indicarque los diagramas empleados por UML son:

Page 81: Crestomatía

6.9. MODELANDO RELACIONES MEDIANTE UML 81

1. Diagrama de Casos de Uso

2. Diagrama de Clases

3. Diagrama de Actividades

4. Diagrama de Iteraci¶on

(a) Diagrama de Secuencia

(b) Diagrama de Colaboraci¶on

² Un diagrama de clases muestra las clases que componen el sistema y las relaciones que existenentre ellos. Este diagrama se utiliza para modelar la vista de dise~no estructural de un sistema.

² Un diagrama de clases es una estructura est¶atica que muestra el conjunto de clases y objetoimportantes que forman parte de un sistema, junto con las relaciones existentes entre clasesy objetos. Muestra de una manera est¶atica la estructura de informaci¶on del sistema y lavisibilidad que tiene cada una de las clases, dada por sus relaciones con los dem¶as en el modelo

² >Qu¶e es un modelo? Una representaci¶on en alg¶un medio que captura los aspectos importantesdel sistema modelado desde un determinado punto de vista. Un modelo de un sistema softwarees realizado en un lenguaje de modelado.

² Prop¶osito de los modelos:1. Capturar y precisar requerimientos de un dominio de conocimiento, que sea comprensiblepor todos los participantes del proyecto.

2. Pensar sobre un dise~no de un sistema.

3. Capturar decisiones de dise~no de un sistema.

4. Explorar posibles soluciones a un problema econ¶omicamente.

5. Generar productos de trabajo ¶utiles.

6. Documentar.

² El modelado mediante diagrama de clases describe1. Tipos de objetos (clases)

2. Relaciones est¶aticas entre objetos

² Una vista es un subconjunto de construcciones de modelado que se enfocan en un aspectoparticular del sistema. En este curso nos enfocaremos en la Vista Est¶atica conformada por elDiagrama de clases.

² Nota: En cursos posteriores se estudiar¶an otras vistas correspondientes a situaciones talescomo comportamiento din¶amico y gesti¶on del modelo.

² Dado un sistema de la vida real, >c¶omo se decide qu¶e clases usar?

Page 82: Crestomatía

82 CAP¶ITULO 6. RELACIONES ENTRE CLASES

Figura 6.9: Diagrama de clases.

1. Los t¶erminos usados por los usuarios y desarrolladores para describir el sistema son clasescandidatas.

2. Para cada clase, >cu¶ales son sus responsabilidades?

3. >Qu¶e atributos y operaciones necesita cada clase para llevar a cabo sus responsabilidades?

Ejemplo 6.1 Elaborar un diagrama de clases que muestre las relaciones entre las clasesUniversidad, Departamento, Estudiante, Curso y Profesor.

Soluci¶on: La solicitud para la elaboraci¶on de un diagrama de clases normalmente es un textoextenso del que se debe extraer los detalles relevantes que permitan identi¯car las clases y lasrelaciones entre ellas. En este caso, en virtud de que no existe tal enunciado, la respuesta no es¶unica. Lo que el ejercicio pretende es dejar volar la imaginaci¶on de estudiante para que pongaen pr¶actica lo aprendido a lo largo del cap¶³tulo. Se propone entonces el diagrama de clases dela Fig.

Ejemplo 6.2 Realizar un diagrama de clases para un aeropuerto.

Soluci¶on:

La solicitud para la elaboraci¶on de un diagrama de clases normalmente es un texto extenso delque se debe extraer los detalles relevantes que permitan identi¯car las clases y las relacionesentre ellas. En este caso, en virtud de que no existe tal enunciado, la respuesta no es ¶unica. Loque el ejercicio pretende es dejar volar la imaginaci¶on de estudiante para que ponga en pr¶acticalo aprendido a lo largo del cap¶³tulo. Se propone entonces el diagrama de clases de la Fig. 6.10.Se deja como ejercicio al estudiante colocar las etiquetas sobre las relaciones.

Ejemplo 6.3 Supongamos que se requiere desarrollar el control de una m¶aquina de entregade caf¶e autom¶atica. La m¶aquina debe permitir a una persona entregar una cantidad de dineroen monedas de 100, 200 o 500, escoger uno de los productos de acuerdo a su precio (caf¶e negro,caf¶e claro, caldo), escoger (si es pertinente) un nivel de az¶ucar y entregar el producto y lasvueltas. El dinero que los usuarios introducen se guarda en un recipiente aparte al disponible

Page 83: Crestomatía

6.9. MODELANDO RELACIONES MEDIANTE UML 83

Figura 6.10: Diagrama de clases para un aeropuerto.

par avueltas, el cual se encuentra ordenado por denominaci¶on. Existen estados de error de lam¶aquina, cuando detecta un mal funcionamiento, no existencia de vueltas o no existencia deingredientes. El usuario puede en cualquier momento antes de escoger el az¶ucar cancelar laoperaci¶on, mediante un bot¶on existente para este objetivo. Elaborar un diagrama de clasespara este problema.

Soluci¶on: Un diagrama de clases es el que se muestra en la Fig. 6.11

² Consejos pr¶acticos para modelar:1. No comenzar construyendo diagramas de clases; primero, es necesario comprender el pro-blema.

2. Intentar mantener el Modelo sencillo.

3. Seleccionar con cuidado los nombres.

4. No introducir punteros o referencias a otros objetos como atributos.

5. Intentar evitar asociaciones n{arias.

6. No intentar establecer el grado de multiplicidad perfecto al principio.

7. No introducir atributos de enlace dentro de la clase.

8. Utilizar asociaciones cuali¯cadas donde sea posible.

9. Intentar evitar generalizaciones profundamente anidadas.

10. Intentar asociaciones uno a uno.

11. No se sorprenda si su modelo requiere una revisi¶on.

12. Documentar siempre los Modelos de Objetos.

Page 84: Crestomatía

84 CAP¶ITULO 6. RELACIONES ENTRE CLASES

Figura 6.11: Diagrama de clases.

6.10 Ejercicios del cap¶³tulo

1. >Qu¶e son las relaciones?

2. >Qu¶e es el UML?

3. >Qu¶e signi¯ca UML?

4. >Qu¶e prescribe y describe el UML?

5. >Para que se puede usar el UML?

6. >Qu¶e hace el modelo de Objetos?

7. >Qu¶e se persegu¶³a con la creaci¶on de UML?

8. >Qu¶e realiza el modelador de objetos para re¯nar los diagramas de clases?

9. >Cuales son las relaciones que se utilizan en el modelado de diagrama de clases?

10. Involucra identi¯car los elementos que son importantes desde tu punto de vista, los cualesintegran el vocabulario del sistema que se esta modelando y cada uno de ellos ser¶a distintode los dem¶as y contara con un conjunto de propiedades.>C¶omo de¯nir¶³a esta idea?

11. >Que es un diagrama de estado?

12. >Que identi¯ca un estado?

13. Investigue: En la notaci¶on UML,>c¶omo se representa el estado y cu¶ales son sus compar-timientos?

Page 85: Crestomatía

6.10. EJERCICIOS DEL CAP¶ITULO 85

14. Obtener el modelo conceptual de un sistema de informaci¶on muy simpli¯cado de unabiblioteca. En ella aparecen socios, que se dan de alta en la biblioteca y a partir de esemomento pueden tomar prestados libros de la misma. Un socio est¶a caracterizado por unn¶umero de socio, un nombre y una direcci¶on; adem¶as, en cada momento se puede saber eln¶umero de libros que un socio tiene prestados, y si tiene m¶as de diez libros. Por su parte,de cada libro se conoce su c¶odigo, t¶³tulo, autor y si est¶a o no disponible; adem¶as se puedesaber en cualquier momento la localizaci¶on del libro en la biblioteca, as¶³ como la signaturadel mismo. Un libro puede ser cambiado de lugar, y se le puede cambiar igualmente susignatura; de hecho, siempre que se cambia la signatura de un libro es porque se cambiade lugar. Los libros se prestan a los socios, y como consecuencia aparece la noci¶on depr¶estamo; un pr¶estamo estar¶a caracterizado, adem¶as de por el c¶odigo del libro prestadoy el n¶umero de socio, por la fecha del mismo. Por otra parte tambi¶en se va a llevarcontrol de los socios que tengan prestados m¶as de 10 libros, de lo cual se encargar¶a laaplicaci¶on program SNF, haciendo que estos socios pasen a especializarse temporalmenteen socios no ¯ables.

15. Obtener el modelo conceptual de un sistema que gestiona las matriculas de los estudiantesen una universidad. Una persona viene caracterizada por su dni, nombre, direcci¶on y esta-do civil, y ¶esta puede convertirse en estudiante al darse de alta como tal en la universidad.Como estudiante podr¶a matricularse de las asignaturas que se imparten en la universidad,que tendr¶an un c¶odigo, un nombre, un profesor responsable y un curso asignado. Unavez matriculado, el estudiante podr¶a recibir una beca, y en su nueva condici¶on de becariotendr¶a asignado un nuevo c¶odigo y se conocer¶a el importe de la misma; al ¯nalizar elcurso, la condici¶on de becario acabar¶a. Una vez el estudiante se matricula, tanto si recibebeca como si no, deber¶a examinarse de las asignaturas en las que se encuentra matriculadohasta que ¯nalice el curso y vuelva a matricularse de nuevo, o bien deje la universidad ycon ello deje de ser estudiante. Adem¶as, convendr¶a tener una serie de aplicaciones talescomo dar de alta a nuevas personas y asignaturas, llevar a cabo la matriculaci¶on de estu-diantes en asignaturas, registrar las notas obtenidas por los estudiantes al examinarse decualquier asignatura en la que est¶an matriculados y una serie de listados tales como losalumnos matriculados en una asignatura, las asignaturas en las que se ha matriculado unalumno y el listado de notas por asignatura (actas).

16. Realizar el diagrama de clases correspondiente al siguiente sistema: Se trata de un sistemade reservas de un hotel. El hotel permite hacer reservas de habitaciones y de ello se encargael Administrativo de Reservas, y de forma alternativa el cliente la puede hacer tambi¶enpor Internet. Siempre que se solicita la reserva de una habitaci¶on, se comprueba si lapersona es cliente del hotel, en cuyo caso solo hay que completar los datos de la reserva(fecha de entrada, fecha de salida, tipo de habitaci¶on, etc.). Si la persona no es cliente delhotel, adem¶as, hay que darlo de alta e introducir sus datos personales. Una reserva puedeser anulada en cualquier momento, pero si se realiza con menos de 24 horas de antelaci¶on,se penaliza al cliente carg¶andole una cantidad equivalente al 50% del costo de una nocheen la habitaci¶on reservada. Una vez el cliente llega al hotel, el Recepcionista compruebasu reserva y los datos del cliente y procede a registrarlo. Una vez concluida la estancia, el

Page 86: Crestomatía

86 CAP¶ITULO 6. RELACIONES ENTRE CLASES

Recepcionista procede a facturar la estancia.

17. Realizar el el diagrama de clases del siguiente sistema: Se trata de una empresa de ventade autos de segunda mano con las siguientes caracter¶³sticas: Los autos los suministrandistintos proveedores, nos interesa conocer la marca, modelo, matricula, precio de compra,de venta. . . Los autos pueden ser turismos, industriales y todoterrenos. Adem¶as puedennecesitar ser reparados, por lo que se debe tener un control de las reparaciones hechas, quepueden ser mec¶anicas, el¶ectricas o de chapa. En la empresa habr¶a dos tipos de vendedores:Asalariados y por comisi¶on. De los asalariados nos interesa saber tambi¶en el salario y delos que van con comisi¶on los autos que han vendido. Adem¶as se tendr¶a un control de losclientes, tanto de los que han comprado un auto, como de los interesados en alg¶un tipode auto que podr¶an hacer reservas. Los autos pueden estar en distintas exposiciones, ydebemos saber en todo momento donde se encuentra cada auto. Se necesitan operacionespara realizar una venta de un auto, para reparar los autos que los necesiten, para comprarnuevos autos a los proveedores, etc. Tambi¶en interesa tener operaciones que nos devuelvanque cliente compr¶o un cierto auto, que se realicen listados de los autos que se encuentranen stock en un momento dado

. . . Un centro de instalaciones deportivas quiere hacer una aplicaci¶on de reservas. En elcentro existen instalaciones deportivas (piscinas, canchas de futbol, gimnasios y pistas detesis). El centro en cuesti¶on tiene socios, de los cuales se almacenan su nombre, direcci¶on,ciudad, provincia, tel¶efono y cuota. Adem¶as, existen una serie de art¶³culos que se puedenreservar si el socio lo requiere (balones, redes y raquetas). Cada instalaci¶on es reservadapor un socio en una fecha dada desde una hora de inicio hasta una hora de ¯n. Cadareserva puede tener asociada uno o varios art¶³culos deportivos que se alquilan a parte.Por ejemplo, si yo quiero hacer una reserva para jugar al tenis, tengo que reservar unainstalaci¶on polideportiva y si lo necesito, las raquetas. Realizar el diagrama de clases.

18. Realizar el Diagrama de Clases que modele Expresiones aritm¶eticas sencillas. Por ejemplo:(3x+ 2y) ¤ 5 + (4x+ 7y) = 10.

19. Hacer el Diagrama de Clases que modele el siguiente sistema: Un directorio puede contenermuchos otros directorios y puede estar contenido opcionalmente dentro de otro directorio.Todo directorio posee exactamente un usuario que sea su propietario y hay muchos usuariosque est¶an autorizados para utilizar el directorio.

20. Se desea automatizar un aparcamiento con capacidad para 400 autom¶oviles, de acuer-do a los siguientes requisitos: Los usuarios del aparcamiento dispondr¶an de una tarjetamec¶anica donde ¯gura registrado su c¶odigo de identi¯caci¶on. A su llegada al aparcamien-to, el usuario introducir¶a la tarjeta en el lector correspondiente, lo que hace que se elevela barrera situada en la entrada. Esta barrera permanece levantada un cierto tiempo,descendiendo luego autom¶aticamente. Para salir del aparcamiento se procede de igualforma con la barrera situada a la salida. Tanto las entradas como las salidas deben quedarregistradas con objeto de realizar peri¶odicamente una facturaci¶on a los usuarios, seg¶un eltiempo de aparcamiento consumido. Estas facturas se emitir¶an a petici¶on del operador.El sistema debe tener en cuenta la ocupaci¶on del aparcamiento, controlando un sem¶aforosituada a la entrada. Si hay plazas libres, el sem¶aforo debe estar verde, pasando a rojo si

Page 87: Crestomatía

6.10. EJERCICIOS DEL CAP¶ITULO 87

el aparcamiento se llena. Adem¶as, cuando el aparcamiento est¶e lleno no debe permitirsela entrada a nuevos veh¶³culos. Realizar el diagrama de clases para este problema.

21. Construir el diagrama de clases correspondiente a este sistema: Una compa~n¶³a de seguri-dad tiene una serie de centrales de alarma distribuidas por zonas dentro de una ciudad.Cada central de alarma est¶a conectada con una serie de edi¯cios. Dentro de cada edi¯ciose dispone de dos tipos de alarmas: alarma de incendios y alarma de robo. Cada alarmaest¶a conectada con una serie de sensores (de robo y de fuego). Cuando se activa un sensorde fuego, la alarma correspondiente suena y la compa~n¶³a de seguridad avisa a los bomberosy a la polic¶³a, mientras que si se activa un sensor de robo se avisa ¶unicamente a la polic¶³a.

Page 88: Crestomatía

88 CAP¶ITULO 6. RELACIONES ENTRE CLASES

Page 89: Crestomatía

Cap¶³tulo 7

Introducci¶on a los algoritmos

Para un ingeniero, el computador es una herramienta con la que desarrolla su trabajo, raz¶on por lacual debe saber c¶omo utilizarla, esto es, c¶omo programarla.

La invenci¶on de algoritmos es la tarea primordial en computaci¶on; el objetivo es tomar un pro-blema, descomponerlo en partes m¶as simples e imaginar una secuencia de pasos mediante la cualuna m¶aquina pueda generar una soluci¶on, y para ello se requiere tanto analizar el problema comosintetizar una soluci¶on; o sea, un razonamiento bastante avanzado. Estos procesos se pueden dividiren etapas bien de¯nidas, y el prop¶osito del presente cap¶³tulo es explicar claramente los pasos de modoque el lector los reconozca cuando se utilicen en cap¶³tulos posteriores y pueda aplicarlos a problemasnuevos.

7.1 >Qu¶e es un Algoritmo?

² Un algoritmo es un conjunto ¯nito de instrucciones o pasos que sirven para ejecutar una tareao resolver un problema. De un modo m¶as formal, un algoritmo es una secuencia ¯nita deoperaciones realizables, no ambiguas, cuya ejecuci¶on da una soluci¶on de un problema.

² Sistema por el cual se llega a una soluci¶on, teniendo en cuenta que debe de ser: de¯nido, ¯nitoy preciso. Por preciso entendemos que cada paso a seguir tiene un orden; ¯nito implica quetiene un determinado numero de pasos, o sea que tiene un ¯n; y de¯nido que si se sigue elmismo proceso mas de un vez llegaremos al mismo resultado.

² Condiciones que debe cumplir un algoritmo

1. Ser ¯nito: El algoritmo debe acabar tras un n¶umero ¯nito de pasos

2. Estar bien de¯nido: Todas las ejecuciones del algoritmo con los mismos datos de entradadeben devolver los mismos datos de salida

² Desde un punto de vista simpli¯cado podemos pensar de un algoritmo como una receta parahacer un proceso.

89

Page 90: Crestomatía

90 CAP¶ITULO 7. INTRODUCCI ¶ON A LOS ALGORITMOS

² La principal raz¶on para que las personas aprendan a programar es para utilizar el computadorcomo una herramienta para la resoluci¶on de problemas. Ayudado por un computador, laresoluci¶on de un problema se puede dividir en tres fases:

1. An¶alisis del problema: requiere que el problema sea de¯nido y comprendido claramentepara que pueda ser analizado con todo detalle. Para poder de¯nir con precisi¶on el problemase requiere que las especi¯caciones de entrada y salida sean descritas en detalle. El an¶alisisdebe responder dos preguntas: >Qu¶e informaci¶on debe proporcionar la resoluci¶on delproblema? >Que datos se necesitan para resolver el problema?

2. Dise~no o desarrollo del algoritmo: procedimiento paso a paso para solucionar el problemadado.

3. Resoluci¶on del algoritmo en el computador: Se necesita codi¯car el algoritmo en un lengua-je de programaci¶on (en este pr¶oximo curso se usar¶a C para este prop¶osito). Es decir, seconvertir¶a el algoritmo en programa, luego ejecutarlo y comprobar que el programa solu-ciona verdaderamente el problema.

² La palabra algoritmo deriva de la traducci¶on al lat¶³n de la palabra ¶arabe (Mohammed) al-Khowrizm, s. IX, nombre del matem¶atico ¶arabe que enunci¶o reglas paso a paso para sumar,restar, multiplicar y dividir n¶umeros decimales. Por extensi¶on: secuencia ordenada de pasossin ambigÄuedades que resuelve un problema.

² Notaciones para describir algoritmos1. M¶etodo informal: el lenguaje natural (que empleamos a diario) es comprensible e intuitivopero impreciso o ambig¶uo.

2. M¶etodos formales: De este tipo se destacan:

(a) Pseudoc¶odigo: Lenguaje natural limitado y sin ambigÄuedad

(b) Diagramas de °ujo u organigramas: utiliza un conjunto de s¶³mbolos para representarcada estructura de control y mediante l¶³neas de °ujo se indica el orden en que serealiza el °ujo l¶ogico del algoritmo

(c) Diagramas de Nassi-Schneiderman o Diagramas N-S: Los pasos sucesivos se escribenen cajas con distintas formas seg¶un la estructura de control que representen.

..

Ejemplo 7.1 Haga un algoritmo para leer las p¶aginas de un libro.

Soluci¶on:

1. Inicio.2. Abrir el libro en la 1 p¶agina3. Leer la p¶agina4. >Es la ¶ultima que deseo leer?

Page 91: Crestomatía

7.2. >QU¶E ES UN PROGRAMA DE COMPUTADORA? 91

S¶³: Ve al paso 7No: Ve al paso 5

5. Pasar a la siguiente p¶agina6. Ve al paso 37. Cerrar el libro8. Fin

Ejemplo 7.2 Elaborar un algoritmo para cambiar una llanta pinchada.

Soluci¶on:

1. Inicio2. Si no tenemos gato, o no hay llanta de repuesto,

o cualquiera de estas dos cosas est¶a inservible,llamar a la estaci¶on de servicio y saltar al punto11;en caso contrario continuar el proceso

3. Levantar el coche con la gata hidr¶aulica4. A°ojar y sacar los tornillos de las ruedas5. Si no todos los tornillos est¶an quitados,

saltar al punto 4; en caso contrariocontinuar el proceso

6. Quitar la rueda7. Poner la llanta de repuesto8. Poner tornillos y apretarlos9. Si no todos los tornillos est¶an apretados,

saltar al punto 8; en caso contrariocontinuar el proceso

10.Bajar la gata hidr¶aulica11. Fin

7.2 >Qu¶e es un programa de computadora?

² Un programa de computadora es un algoritmo que le dice a la computadora los pasos espec¶³¯cospara llevar acabo una tarea. Los algoritmos son rigurosamente de¯nidos para que la computa-dora pueda interpretarlos. El orden en que se ejecuta cada uno de los pasos que constituyenun algoritmo es fundamental. El orden m¶as b¶asico es de arriba hacia abajo, ejecut¶andose unainstrucci¶on tras otra de un c¶odigo. Pero un algoritmo puede variar en su °ujo u orden deejecuci¶on de pasos dependiendo de los valores de inicio o que entran durante su ejecuci¶on. El°ujo es manejado por las estructuras de control.

Page 92: Crestomatía

92 CAP¶ITULO 7. INTRODUCCI ¶ON A LOS ALGORITMOS

² De esta forma un programa es un algoritmo expresado en un lenguaje especial que el computa-dor reconoce. Cada paso del algoritmo (o acci¶on) se traduce en una serie de instrucciones queespeci¯can las operaciones que debe hacer el computador.

² Los algoritmos no son directamente interpretables por la computadora, deben ser traducidos aun lenguaje de programaci¶on concreto.

² Sintaxis: Veamos primero el concepto en su m¶as amplio signi¯cado. La sintaxis es una subdis-ciplina de la lingÄu¶³stica y parte importante del an¶alisis gramatical. Se encarga del estudio de lasreglas que gobiernan la combinatoria de constituyentes y la formaci¶on de unidades superioresa estos, como los sintagmas y oraciones. La sintaxis, por tanto, estudia las formas en que secombinan las palabras, as¶³ como las relaciones sintagm¶aticas y paradigm¶aticas existentes entreellas.

² En un lenguaje de programaci¶on las expresiones se deben construir respetando una serie dereglas sint¶acticas. Los lenguajes de programaci¶on normalmente cuentan con un programa querevisa la estructura sint¶actica de los programas escritos por los usuarios y que les ayuda acorregir los errores detectados.

² Sem¶antica: El t¶ermino sem¶antica, se re¯ere a los aspectos del signi¯cado la interpretaci¶on deun determinado simb¶olico, lenguaje o representaci¶on formal. En principio cualquier medio deexpresi¶on (c¶odigo, lenguaje de programaci¶on, ...) admite una correspondencia entre expresionesde s¶³mbolos o palabras y situaciones o conjuntos de cosas encontrables o en el mundo f¶³sico oabstracto que puede ser descrito por dicho medio de expresi¶on. Los lenguajes de programaci¶onbrindan poca ayuda para corregir los errores sem¶anticos. Puede ser que el programa no presenteerrores sint¶acticos pero no hace lo que se supone debe hacer (hay problemas sem¶anticos).

7.3 Dise~nando un buen algoritmo

² Seguidamente se muestran 8 recomendaciones para conseguir un buen algoritmo que resuelveun problema dado.

² Clari¯car el problema: Entender el problema signi¯ca podemos enunciarlo de una maneraclara y precisa.

² Plani¯car primero la interfaz con el usuario: Antes de dise~nar el algoritmo, convieneplani¯car la interfaz con el usuario, es decir, la forma como el programa ha de interactuar conel usuario durante su ejecuci¶on; esto le ayudar¶a al programador a formar una imagen mentalde los pasos requeridos en el algoritmo.

² Dividir el problema hasta hacerlo trivial y entonces vencerlo: La etapa anterior delproceso de dise~no {plani¯car las entradas y salidas{ sirvi¶o para aclarar los pasos del algoritmogeneral, y al mismo tiempo dej¶o ver la forma como ¶este se desglosa en una serie de cincotareas principales. La primera de ellas es trivial, pero las otras, sobre todo la tarea 4, s¶on m¶as

Page 93: Crestomatía

7.3. DISE ~NANDO UN BUEN ALGORITMO 93

complejas, y ser¶a necesario descomponer cada una en subtareas que sean lo bastante sencillascomo para programadas con facilidad; es decir, debemos seguir el precepto de divide y vencer¶as.

² Dise~no descendente: En el proceso de dise~no descendente se trata primero las tareas princi-pales, o de nivel superior, del problema, y s¶olo entonces se descomponen ¶estas en tareas cadavez m¶as peque~nas. El t¶ermino descendente implica un dise~no estrati¯cado en el que las tareasprincipales se dividen en tareas inferiores o de nivel m¶as bajo, lo cual produce un esquemajer¶arquico.

² Emplear diagramas: A estas alturas, el algoritmo est¶a adquiriendo tal complejidad que resul-ta dif¶³cil visualizar lo que est¶a sucediendo, y visual¶³zar es aqu¶³ la palabra clave. La programaci¶ones una actividad visual adem¶as de verbal, y los programadores deben tener im¶agenes mentalesde c¶omo funcionan los algoritmos y de c¶omo se manipulan los datos. Debemos adquirir elh¶abito de dibujar esquemas de los algoritmos y los datos.

² Aprovechar el trabajo anterior: El desglose jer¶arquico de los problemas de computaci¶ontiene muchas ventajas. Resulta evidente que nos ayuda a resolver problemas dif¶³ciles, pero algomenos obvio es que nos lleva a damos cuenta de que los algoritmos para resolver problemasimportantes en computaci¶on tienen muchas veces algunas partes en com¶un. Una vez quehayamos acumulado un "juego de herramientas" de "piezas" algor¶³tmicas comunes, podremosarmar muchos programas conectando entre s¶³ partes que ya hayamos construido; por lo menos,podremos hacerlo si hemos tenido cuidado en construirlas como m¶odulos individuales que sepuedan conectar a otros con facilidad. As¶³ pues, una de las lecciones m¶as importantes parala resoluci¶on de problemas es que el desglose jer¶arquico de los problemas en componentes nospuede llevar a algoritmos de f¶acil construcci¶on constituidos por "piezas intercambiables dealgoritmos"; esto es mucho m¶as f¶acil que volver a inventar la rueda cada vez que dise~nemos unprograma. La programci¶on orientada a objetos es muy provechosa en el proceso de aprovecharle trabajo anterior.

² Estructurar los datos: La estructura de un problema determina la estructura de los algorit-mos (por lo regular habr¶a m¶as de uno) que resuelven ese problema y, a su vez, la naturalezade un algoritmo dado determina la forma como deben organizarse los datos para facilitar unasoluci¶on.

² No contentarse con la primera idea: Todos tendemos a sentir un orgullo exagerado porcualquier cosa que creamos (y esto puede decirse de los hijos adem¶as de los algoritmos quedise~namos). Una vez que hemos logrado, contra viento y marea, que un algoritmo funcione,estaremos tentados a contemplarlo y felicitamos por nuestra astucia; quiz¶a hasta nos resintamoscuando otro programador critique nuestro algoritmo. A pesar de ello, debemos tener presenteque casi siempre existe un mejor algoritmo. De hecho, esto es lo m¶as excitante de la com-putaci¶on: casi siempre tenemos la oportunidad de mejorar nuestro trabajo. Desde luego, hayque enorgullecerse de la primera soluci¶on a un problema, pero m¶as tarde debemos dedicar eltiempo necesario a pensar de nuevo en la soluci¶on, buscando otras formas de atacar el problema,pues es posible que encontremos algo mejor.

Page 94: Crestomatía

94 CAP¶ITULO 7. INTRODUCCI ¶ON A LOS ALGORITMOS

7.4 Depuraci¶on de programas

² Los errores humanos dentro de la programaci¶on de computadores son muchos y aumentanconsiderablemente con la complejidad del problema. El proceso de identi¯car y eliminar errores,para dar paso a una soluci¶on sin errores se le llama depuraci¶on.

² La depuraci¶on es la piedra angular de ser un programador. El primer signi¯cado del verbodepurar es remover errores, pero el signi¯cado que realmente interesa es ver a lo interno dela ejecuci¶on de un programa mediante su examen. Un programador que no puede depurarefectivamente est¶a en serios problemas.

² La depuraci¶on trata de la ejecuci¶on de programas, no de los programas mismos. Si se compraalgo de una compa~n¶³a de software grande, usualmente no se consigue ver el programa. Peroinclusive ah¶³ aparecer¶an lugares donde el c¶odigo no se ajuste a la documentaci¶on.

² Por lo general, cuando se comete un error, se examina el c¶odigo que se escribi¶o y se buscauna pista de c¶omo puede estar ocurriendo el error. Inevitablemente, esto signi¯ca que algunasuposici¶on que se est¶a haciendo no es correcta, o que surge alguna condici¶on que no se anticip¶o.Algunas veces el truco m¶agico de ver detenidamente el c¶odigo fuente funciona.

² El tema de la depuraci¶on est¶a m¶as ligado al contenido del siguiente curso.² Seguidamente se estudian algunos de los elementos m¶as importantes que se emplean en laconstrucci¶on de algoritmos.

7.5 Identi¯cadores

² Los identi¯cadores representan los datos de un programa (constantes, variables, tipos de datos).Un identi¯cador es una secuencia de caracteres que sirve para identi¯car una posici¶on en lamemoria en el computador, que nos permite accesar a su contenido.

² Un identi¯cador es una secuencia de caracteres que permite identi¯car de forma ¶unica a cadaelemento/objeto de un algoritmo. No todos los caracteres son v¶alidos por lo que normalmentese usan letras, d¶³gitos y subrayado ( ).

² Algunas restricciones son (generalmente):1. El primer car¶acter debe ser una letra

2. No puede haber espacio dentro de un identi¯cador. Esto ser¶a considerado como dosidenti¯cadores.

3. Pueden tener cualquier longitud dentro del l¶³mite que imponga el compilador

4. Las palabras reservadas (tales como if, while, for, do, else, etc) del lenguaje no puedenutilizarse como identi¯cadores

Page 95: Crestomatía

7.6. VARIABLES 95

5. Algunos lenguajes no distinguen entre caracteres en may¶usculas y min¶usculas (Pascal,Modula-2) y otros s¶³ (C, Java).

6. Un identi¯cador no puede contener espacios en blanco ni otro car¶acter distinto a loscitados: * , : /. no son v¶alidos

Ejemplo 7.3 Veamos algunos ejemplos de identi¯cadores no v¶alidos.

salario Brutoa~noactual100m¶³nimo%2007xywedad Promedio

² Algunos consejos sobre identi¯cadores:

1. Usar identi¯cadores representativos (Por ejemplo, nombre, apellidos y Edad son mas sig-ni¯cativos para la lectura que n, a y E.

2. No sacri¯car la legibilidad por la longitud de los identi¯cadores.

7.6 Variables

² >Qu¶e es una variable?² Es un espacio en la memoria de la computadora que permite almacenar temporalmente undato durante la ejecuci¶on de un proceso, su contenido puede cambiar durante la ejecuci¶on delprograma. Para poder reconocer una variable en la memoria de la computadora, es necesariodarle un nombre con el cual podamos identi¯carla dentro de un algoritmo.

² >Qu¶e se necesita para tener una variable en un programa? Es necesario declarar la variable.La declaraci¶on de una variable consiste en asignarle nombre (identi¯cador) y tipo a cada unade las variables que el programa va a utilizar.

² La declaraci¶on de las variables en un algoritmo hace que el computador reserve el espacio enmemoria para las variables.

Ejemplo 7.4 Seguidamente se muestra la declaraci¶on de algunas variables.

real salario;entera edad;cadena nombreCiudad;caracter respuesta;

Page 96: Crestomatía

96 CAP¶ITULO 7. INTRODUCCI ¶ON A LOS ALGORITMOS

² El tipo de variable le dice al computador como puede representar los datos, y de qu¶e tama~noes el espacio en memoria que debe reservar para la variable.

² Todos los datos tienen un tipo asociado con ellos. Un dato puede ser un simple car¶acter, talcomo b, un valor int tal como 35. El tipo de dato determina la naturaleza del conjunto devalores que puede tomar una variable.

² >Qu¶e tipos se pueden usar? A continuaci¶on citamos solo algunos de los m¶as usados:1. Entero (int): para almacenar datos Z.

2. Real (float): para almacenar datos IR.

3. Cadena (string): para almacenar m¶as de un car¶acter Ascii o Unicode.

4. Car¶acter (char): para almacenar un car¶acter Ascii o Unicode.

5. Booleanos (bool): para almacenar datos cuyo valor es Verdadero (True) o False (False).

² Algunos tipos de datos simples son:1. Datos num¶ericos (int, °oat) : Permiten representar valores de forma num¶erica, esto incluyea los n¶umeros enteros y los reales. Este tipo de datos permiten realizar operacionesaritm¶eticas comunes.

2. Datos L¶ogicos (bool): Son aquellos que solo pueden tener dos valores (cierto o falso)ya que representan el resultado de una comparaci¶on entre otros datos (num¶ericos o al-fanum¶ericos).

3. Datos Alfanum¶ericos (String): Es una secuencia de caracteres alfanum¶ericos que permitenrepresentar valores identi¯cables de forma descriptiva, esto incluye nombres de personas,direcciones, etc. Es posible representar n¶umeros como alfanum¶ericos, pero estos pierdensu propiedad matem¶atica, es decir no es posible hacer operaciones con ellos. Este tipo dedatos se representan encerrados entre comillas.

² En este texto adoptamos una estructura sint¶actica semejante a la de C para la declaraci¶on devariables, a saber:

< tipo de dato > < lista de identi¯cadores de variables >;

Ejemplo 7.5 Veamos algunas declaraciones de variables al estilo C.

°oat salario;int edad;string nombreCiudad;char respuesta;

² Podemos establecer una clasi¯caci¶on de las variables como sigue:

Page 97: Crestomatía

7.7. ASIGNANDO DATOS A UNA VARIABLE 97

1. Por su contenido

(a) Variables num¶ericas: Son aquellas en las cuales se almacenan valores num¶ericos, po-sitivos o negativos, es decir almacenan n¶umeros del 0 al 9, signos (+ y ¡) y el puntodecimal. Ejemplo:

iva = 0.15;pi = 3.1416;costo = 2500

(b) Variables L¶ogicas: Son aquellas que solo pueden tener dos valores (cierto o falso) estosrepresentan el resultado de una comparaci¶on entre otros datos.

(c) Variables Alfanum¶ericas: Esta formada por caracteres alfanum¶ericos (letras, n¶umerosy caracteres especiales). Ejemplo:

letra = 'a'apellido = 'lopez'direccion = 'Av. Segunda'

2. Por su uso

(a) Variables de Trabajo: Variables que reciben el resultado de una operaci¶on matem¶aticacompleta y que se usan normalmente dentro de un programa. Ejemplo:

Suma = a+ b=c

(b) Contadores: Se utilizan para llevar el control del numero de ocasiones en que se realizauna operaci¶on o se cumple una condici¶on. Con los incrementos generalmente de unoen uno.

(c) Acumuladores: Forma que toma una variable y que sirve para llevar la suma acumu-lativa de una serie de valores que se van leyendo o calculando progresivamente.

7.7 Asignando datos a una variable

² >C¶omo se ingresan datos a una variable? Los programadores tiene dos maneras de hacer quelos programas almacenen datos en memoria, ellos son:

1. La operaci¶on de asignaci¶on

2. La operaci¶on de lectura

² >Instrucci¶on de asignaci¶on? La usan los programadores, para ordenarle al computador quealmacene el resultado de una evaluaci¶on de una expresi¶on o una constante en una variable enmemoria. La instrucci¶on se indica por un = o bien una °echa Ã:

< variable >Ã expresion< variable >= expresion

La expresi¶on puede ser aritm¶etica, o una constante o variable.

Page 98: Crestomatía

98 CAP¶ITULO 7. INTRODUCCI ¶ON A LOS ALGORITMOS

Ejemplo 7.6 Algunos ejemplos de asignaci¶on son:

edad = 12;total = edad+ 2007;pueblo =0 La Garita0;

² La asignaci¶on se puede clasi¯car de la siguiente forma:1. Simples: Consiste en pasar un valor constante a una variable.

(a = 15)

2. Contador: Consiste en usarla como un veri¯cador del numero de veces que se realiza unproceso.

(a = a+ 1)

3. Acumulador: Consiste en usarla como un sumador en un proceso

(a = a+ b)

4. De trabajo: Donde puede recibir el resultado de una operaci¶on matem¶atica que involucremuchas variables

(a = c+ b ¤ 2=4).² Cuando la instrucci¶on de asignaci¶on se ejecuta:

se eval¶ua la expresi¶on a la derecha del operador de asignaci¶on (=) el resultado deesta evaluaci¶on se le da como valor a la variable que est¶a a la izquierda del operador

Luego de haberse efectuado esta asignaci¶on de valores a la variable de la izquierda este valorsustituye cualquier otro que hubiera tenido con anterioridad la variable.

² Otros operadores de asignaci¶on: Tenemos tambi¶en otros operadores de asignaci¶on com-puestos:

+ =;¡ =; ¤ =; = =;

Ejemplo 7.7 Considere el siguiente caso:

Cambiar peso = peso + 10;Por peso += 10;

² Operadores de incremento (++) y decremento (¡¡)

Ejemplo 7.8 Considere el siguiente caso:

Page 99: Crestomatía

7.7. ASIGNANDO DATOS A UNA VARIABLE 99

Cambiar peso = peso + 1;Por peso+ = 1;O por peso+ + ;

² Tenemos otros operadores de asignaci¶on compuestos en una expresi¶on:1. Por ejemplo:

c = b++;

Se asigna a c el valor de b y luego se incrementa b

2. Por ejemplo:c = ++ b;

Se incrementa el valor de b y luego se asigna a c

Ejemplo 7.9 Considere las siguientes asignaciones

a = 3;b = (a++) ¤ 5;

b = 3 ¤ 5 = 15a = a+ 1 = 4

a = 3;b = (+ + a) ¤ 5;

a = a+ 1 = 4b = 4 ¤ 5 = 20

² Prioridad de los operadores

Predencia

() []++ ¡¡ +(unario) -(unario)

* / %> >=&k

= += -= *= /= %= &=

² >Operaci¶on de lectura? Se utiliza en los programas para ordenarle al computador que debedetener la realizaci¶on del programa y esperar a que se digite el dato por el teclado.

Leer (nombreVariable)

El programador usa esta instrucci¶on para suministrarle al programa los datos que el computadorno puede calcular por s¶³ mismo y son necesarios.

Page 100: Crestomatía

100 CAP¶ITULO 7. INTRODUCCI ¶ON A LOS ALGORITMOS

Ejemplo 7.10 Algunos casos de lectura pueden ser:

Leer(nombreCiudad)Leer(edad)Leer(salario)

² Es importante indicar ahora que tambi¶en existe la operaci¶on de escritura: esta consiste enmandar por un dispositivo de salida (monitor o impresora) un resultado o mensaje. Esteproceso se representa en un pseudo c¶odigo como sigue:

Escribir(\El resultado es:", R);

Donde \El resultado es:" es un mensaje que se desea aparezca y R es una variable que contieneun valor.

7.8 Constantes

² Una constante es un dato num¶erico o alfanum¶erico que no cambia durante la ejecuci¶on delprograma.

² Una constante es un objeto de datos que contiene un valor invariable conocido por su identi¯-cador. Es necesario inicializar las constantes al principio del algoritmo. Esto determina el tipode la constante.

Ejemplo 7.11 Algunos ejemplos de constantes son:

PI=3.14;SALUDO=\Hola mundo";MAXIMO=500;RESPUESTA='S';

7.9 Palabras reservadas

² Algunos identi¯cadores tienen un uso especial en los lenguajes de programaci¶on. Estos identi¯-cadores son conocidos como palabras claves o palabras reservadas (key words o reserved words),ya que el programador no puede darle un uso diferente al que el lenguaje les con¯ere.

Ejemplo 7.12 Por ejemplo:

1. class su objetivo es informarle al compilador que el identi¯cador Persona describe unaclase

2. string permite \informar" que los atributos almacenar¶an cadenas de caracteres.

Page 101: Crestomatía

7.10. COMENTARIOS 101

7.10 Comentarios

² Los programas que escribimos deben ser leidos por seres humanos. A¶un cuando hallamos escritoun programa peque~no, despu¶es de que ha transcurrido un tiempo importante, es posible quenos cueste decir con facilidad qu¶e cosa exactamente hace el algoritmo que escribimos. Estasituaci¶on puede ser aliviada si incluimos peque~nos comentarios a lo largo del programa parafacilitar su entendimiento. A esto le llamamos comentar o documentar un programa.

² Un comentario es texto que se incluye en el c¶odigo fuente con el objetivo de facilitar su legibil-idad a los programadores. No tienen signi¯cado alguno para la ejecuci¶on de una aplicaci¶on osea son ignorados por el compilador.

Ejemplo 7.13 // identi¯caci¶on de la clase// atributos...// int es equivalente a entero// m¶etodo de consulta o acceso .../* Esto es un comentario que ejempli¯ca c¶omose escriben comentarios que ocupen varias l¶³neas */

7.11 Expresiones y operadores

² Las expresiones son combinaciones de constantes, variables, s¶³mbolos de operaci¶on, par¶entesisy nombres de funciones especiales. Por ejemplo:

a+ (b+ 3)=c

² Cada expresi¶on toma un valor que se determina tomando los valores de las variables y constantesimplicadas y la ejecuci¶on de las operaciones indicadas.

² Una expresi¶on consta de operadores y operandos. Seg¶un sea el tipo de datos que manipulan,se clasi¯can las expresiones en:

1. Aritm¶eticas

2. Relaci¶onales

3. L¶ogicas

² Operadores: Son elementos que relacionan de forma diferente, los valores de una o m¶asvariables y/o constantes. Es decir, los operadores nos permiten manipular valores.

² Operadores Aritm¶eticos: Los operadores aritm¶eticos permiten la realizaci¶on de operacionesmatem¶aticas con los valores (variables y constantes). Pueden ser utilizados con tipos de datosints o reales. Si ambos son enteros, el resultado es entero; si alguno de ellos es real, el resultadoes real.

Page 102: Crestomatía

102 CAP¶ITULO 7. INTRODUCCI ¶ON A LOS ALGORITMOS

² Operadores Aritm¶eticos:+ Suma¡ Resta¤ Multiplicaci¶on= Divisi¶on

Mod M¶odulo

Ejemplo 7.14 Algunos ejemplos de operaciones son:

7=2 da 3

7:0=2 da 3.5

12 mod 7 da 5

4 + 2 ¤ 5 da 14

² Prioridad de los operadores aritm¶eticos: Todas las expresiones entre par¶entesis se eval¶uanprimero. Las expresiones con par¶entesis anidados se eval¶uan de dentro hacia fuera, el par¶entesismas interno se eval¶ua primero.

² Dentro de una misma expresi¶on los operadores se eval¶uan en el siguiente orden.1. ^: Exponenciaci¶on

2. ¤, /, mod: Multiplicaci¶on, divisi¶on, modulo.3. +, ¡ : Suma y resta.

Los operadores en una misma expresi¶on con igual nivel de prioridad se eval¶uan de izquierda aderecha.

Ejemplo 7.15 A continuaci¶on se muestran algunas operaciones aritm¶eticas:

4 + 2 ¤ 5 = 14.23 ¤ 2=5:0 = 9:2.46=5:0 = 9:2.

3 + 5 ¤ (10¡ (2 + 4)) = 23.3 + 5 ¤ (10¡ 6) = 3 + 5 ¤ 4 = 3 + 20 = 23.3:5 + 5:09¡ 14:0=40 = 5:09.3:5 + 5:09¡ 3:5 = 8:59¡ 3:5 = 5:09.2:1 ¤ (1:5 + 3:0 ¤ 4:1) = 28:98.2:1 ¤ (1:5 + 12:3) = 2:1 ¤ 13:8 = 28:98.

Page 103: Crestomatía

7.11. EXPRESIONES Y OPERADORES 103

² Operadores relaci¶onales: Se utilizan para establecer una relaci¶on entre dos valores. Comparaestos valores entre si y esta comparaci¶on produce un resultado de certeza o falsedad (verdaderoo falso).

² Los operadores relacionales comparan valores del mismo tipo (num¶ericos o alfanum¶ericos).² Tienen el mismo nivel de prioridad en su evaluaci¶on. Los operadores relacionales tiene menorprioridad que los aritm¶eticos.

² Operadores Relaci¶onales> Mayor que< Menor que

¸; >= Mayor o igual que·; <= Menor o igual que6=; <>; != Diferente;Distinto== Igual de comparaci¶on

Ejemplo 7.16 Suponga que a = 10, b = 20 y c = 30. Veamos el valor de verdad de algunasexpresiones,

a+ b > c nos da Falso.

a¡ b < c nos da Verdadero.a¡ b == c nos da Falso.a ¤ b6= c nos da Verdadero.

Ejemplo 7.17 Veamos algunos casos de expresiones no v¶alidas:

a < b < c

10 < 20 < 30

True < 30

² Operadores l¶ogicos: Estos operadores se utilizan para establecer relaciones entre valoresl¶ogicos. Estos valores pueden ser resultado de una expresi¶on relacional.

And Y &&Or O jjNot Negaci¶on !

Ejemplo 7.18 Algunos casos de uso de operadores l¶ogicos son:

(a < b) and (b < c)(10 < 20) and (20 < 30)True and True

Page 104: Crestomatía

104 CAP¶ITULO 7. INTRODUCCI ¶ON A LOS ALGORITMOS

² Prioridad de los operadores l¶ogicos

NotAndOr

² Prioridad de los operadores en general

1. ( )2. ^3. *, /, Mod, Not4. +, ¡, And5. >, <, >=, <=, <>, =,Or

Ejemplo 7.19 Suponga que se tienen las siguientes asignaciones:

a = 10; b = 12; c = 13; d = 10

Calculemos los valores de verdad de las siguientes expresiones

1. ((a > b) or (a < c)) and ((a = c) or (a >= b)) nos da False.

2. ((a >= b) or (a < d)) and ((a >= d) and (c > d)) nos da False.

3. not (a == c) and (c > b) nos da False.

Ejemplo 7.20 Suponga que I y J son variables enteras cuyos valores son 6 y 12 respectiva-mente >Cu¶ales de las siguientes condiciones son verdaderas?

1. 2 ¤ I <= J2. 2 ¤ I ¡ 1 < J3. (I > 0) AND (I · 10)4. (I > 25) OR((I < 50) AND (J < 50))

5. (I < 4) OR (J > 5)

6. NOT (I > 6)

Soluci¶on:

1. Como se nos dice que el valor obtenido tiene que ser menor o igual que el valor de J , eneste caso la condici¶on es True, porque 12 = 12. Demostraci¶on:

2 ¤ I · J2 ¤ 6 · 1212 · 12 (VERDADERO)

Page 105: Crestomatía

7.12. EJERCICIOS DEL CAP¶ITULO 105

2. 2¤6¡1 = 11, como nos dice que el valor obtenido en la operaci¶on tiene que ser estrictamentemenor que el valor de J , aqu¶³ la condici¶on es True, porque 11 < 12.

3. Tenemos dos condiciones unidas por la uni¶on AND, entonces como se cumple que 6 > 0y tambi¶en se cumple que 6 < 10,la condici¶on es True, por la uni¶on de dos condicionesverdaderas.

4. Primero observamos la condici¶on indicada entre par¶entesis,6 < 50 es verdadera, 12 < 50tambi¶en es verdadera;la condici¶on primera I > 25 es falsa ya que 6 < 25, por lo tantotenemos False OR True, seg¶un la condici¶on que las une, OR, el resultado es True.

5. En este caso tenemos que la primera condic¶on es falsa porque 6 > 4 y la segunda condici¶ones verdadera porque 12 > 5, al igual que en el caso anterior tenemos (False OR True), porlo tanto la condici¶on es True.

6. La condici¶on 6 > 6 es falsa, ser¶³a v¶alida si fueseI ¸ 6, as¶³ que tenemos una condici¶on falsanegada (NOT False), por lo tanto la condici¶on es True.

7.12 Ejercicios del cap¶³tulo

1. >Cu¶ales son las operaciones b¶asicas de cualquier lenguaje de programaci¶on?

2. Invesigue: >C¶omo almacena una computadora la informaci¶on?

3. Investigue qu¶e hace un compilador y en qu¶e di¯ere de un int¶erprete.

4. Investigue las caracter¶³sticas de un lenguaje de programaci¶on de alto nivel.

5. Verdadero o falso: La mejor manera de escribir un programa en es simplemente iniciar elc¶odigo. Explique su respuesta.

6. Explique las tres principales ventajas de la programaci¶on orientada a objetos.

7. >C¶omo y por qu¶e los m¶etodos facilitan la depuraci¶on?

8. Explique las ideas b¶asicas del desarrollo de programas de arriba abajo y de abajo-arriba.

9. D¶e tres usos para los comentarios en los programas e invente un ejemplo donde se usecada uno de ellos.

10. Explique la manera b¶asica en la que la programaci¶on orientada a objetos di¯ere de laprogramaci¶on estructurada.

11. >Cu¶al de los siguientes son identi¯cadores legales? Para aquellos que no lo sean, expliquepor qu¶e no es as¶³.

(a) if .

(b) EstaRutina

(c) esa rutina

(d) 3a rutina

(e) una cantidad

Page 106: Crestomatía

106 CAP¶ITULO 7. INTRODUCCI ¶ON A LOS ALGORITMOS

(f) una-cantidad3

(g) total a pagar

(h) 3mejoresrutinas

(i) chequen¶umer02345 pagado

(j) r¶ecord

(k) datosestudiante.dat

(l) No# de registros

(m) n¶umero de enteros

12. Verdadero o falso: todos los tipos de datos usados en un programa deben ser declaradosen una secci¶on espec¶³¯ca. Si la respuesta es falso, explique por qu¶e es as¶³.

13. Investigue >Cu¶ales son los tipos de datos num¶ericos principales en C y cu¶al es el el rangode valores en cada uno?

14. Explique la idea e importancia de esconder lo que se encuentra dentro de un m¶etodo delresto del algoritmo. Tambi¶en, investigue las ideas de variables globales y locales, y c¶omoest¶an relacionadas con las caracter¶³sticas internas de una subrutina.

15. Explique qu¶e es una variable y c¶omo se relaciona la naturaleza de una variable con la ideade un tipo de datos.

16. Investigue las caracter¶³sticas de un tipo de datos ordinal. Liste

(a) los tipos ordinales (m¶as frecuentes) prede¯nidos en C y

(b) dos funciones prede¯nidas en C que se usen con elementos ordinales.

17. Investigue las diferentes operaciones aritm¶eticas que se pueden hacer con enteros y n¶umerosreales en C.

18. Explique los tres factores que se usan para determinar el orden en que las operacionesaritm¶eticas deben ser realizadas.

19. D¶e la soluci¶on y tipo de datos para los siguientes ejemplos:

(a) 6+10

(b) 10/2

(c) % 2

(d) (10 % 3) * 2.0

(e) 2.0 % 1.0

(f) 5*4

(g) 5* (4 / 2)

(h) 5.0+1.23456

(i) 5 % 10

(j) (10 * ((42 % 5)+ 17) / 6

(k) 20 % 6

20. Investigue: >Cu¶antos caracteres ASCII hay? Explique los contenidos de las diferentessecciones del c¶odigo ASCII.

21. Explique por qu¶e las sangr¶³as (indentaciones) son importantes en la programaci¶on? Puededar un ejemplo en que se interprete dos piezas de c¶odigo debido a las sangr¶³as? De seras¶³, explique c¶omo es que el sangrado hace la diferencia. Sino es as¶³, explique por qu¶e no.

22. Explique lo qu¶e hace un enunciado de asignaci¶on. >Cu¶ales son los dos requerimientos paraque un enunciado de ¶estos funcione?

Page 107: Crestomatía

7.12. EJERCICIOS DEL CAP¶ITULO 107

23. >Qu¶e hace un enunciado de Entrada/Salida? D¶e cuatro ejemplos de enunciados de E/S yexplique lo que cada enunciado hace.

24. Eval¶ue cada una de las siguientes expresiones booleanas, esto es, diga si. son verdaderaso falsas. Marque, el lugar en cada enunciado donde podr¶³a detener la evaluaci¶on porqueel valor veritativo sea ya claro.

(a) 6 > 4

(b) (6 > 4) AND (5 > 3)

(c) (6 > 4) OR (5 > 3)

(d) (6 > 7) OR (5 > 3)

(e) (6 > 7) OR (5 > 3) OR FALSE(6 > 7) AND (5 > 3)) OR (17%3 == 5)

25. Encontrar los valores de 'las siguientes expresiones:

(a) 25=7

(b) 25%7

(c) (¡25)=7(d) 25=7

(e) 25%7

(f) (¡25)=7(g) ¡25%7(h) 5%7

(i) ¡45%7(j) 25=7

(k) 25%7

(l) (¡25)=7

26. Si A = 6, B = 2 y C = 3, encontrar los valores de las siguientes expresiones:

(a) A¡B + C(b) A ¤B=C(c) A=B ¤ C

(d) A ¤B%C(e) A+B%C

(f) A=B=C

27. >Qu¶e se obtiene en las variables A, B despu¶es de la ejecuci¶on de las siguientes instruc-ciones?:

(a) A = 5

(b) B = A+ 6

(c) A = A+ 1

(d) B = A¡ 5

28. >Qu¶e se obtiene en las variables A, B y C despu¶es de ejecutar las instrucciones siguientes?:

(a) A = 3

(b) B = 20

(c) C = A+B

(d) B = A+B

(e) A = B

29. >Qu¶e se obtiene en A y B tras la ejecuci¶on de?:

(a) A = 10

(b) B = 5

(c) A = B

(d) B = A

30. Escribirlas siguientes expresiones en forma de expresiones algor¶³tmicas:

Page 108: Crestomatía

108 CAP¶ITULO 7. INTRODUCCI ¶ON A LOS ALGORITMOS

(a)m+ 4

n

(b)m+ n

p¡ q + r(c)

senx+ cos3 x

tanx

(d)m+ 4

p¡ q2

(e)m+ p=n

q=s¡ r=3(f)

¡b+pb2 ¡ 4ac2a

31. Encontrar el valor de la variable VALOR despu¶es de la ejecuci¶on de las siguientes opera-ciones:

(a) V ALOR = 4:0 ¤ 5(b)

X = 3:0Y = 2:0V ALOR = XY ¡ Y

32. Determinar los valores de las variables entereas A, B, C y D despu¶es de la ejecuci¶on delas siguientes instrucciones:

(a) A = l

(b) B = 4

(c) C = A+B

(d) D = A¡B(e) A = C + 2 ¤B

(f) B = C +B

(g) C = A ¤B(h) D = B +D

(i) A = D + C

Page 109: Crestomatía

Cap¶³tulo 8

Algoritmos secuenciales y condicionales

8.1 Estructuras secuenciales

La estructura secuencial es aquella en la que una acci¶on (instrucci¶on) sigue a otra en secuencia.Las tareas se suceden de tal modo que la salida de una es la entrada de la siguiente y as¶³sucesivamente hasta el ¯n del proceso. Una estructura secuencial se representa de la siguienteforma:

f // InicioAccion1;Accion2;

.

.Acci¶onN;

g // Fin

² Al trabajar con m¶etodos podemos suponer que la lectura o escritura de los datos se lleva acabo en alg¶un momento. Los datos se reciben entonces v¶³a par¶ametros.

² Los resultados de los m¶etodos se muestran de dos formas:1. Si el algoritmo devuelve un ¶unico valor, esto se hace con un comando denominado Returno Retorne. Ya veremos m¶as adelante c¶omo. Normalmente estos m¶etodos se invocan porescritura o asignaci¶on. A este tipo de m¶etodos se les denomina funciones.

2. Si el algoritmo no devuelve ning¶un valor, la descripci¶on del m¶etodo empieza con la palabrareservada void (nulo en Espa~nol) que indica la nulidad de los valores retornados. Estosm¶etodos se invocan normalmente para efecturar una operaci¶on. A este tipo de m¶etodosse les denomina procedimientos.

109

Page 110: Crestomatía

110 CAP¶ITULO 8. ALGORITMOS SECUENCIALES Y CONDICIONALES

3. Si el m¶etodo debe devolver m¶as de un valor, esto se hace mediante par¶ametros por refe-rencia que discutiremos despu¶es (ver P¶ag. 127). A este tipo de m¶etodos se les denomina(tambi¶en) procedimientos.

8.2 Diagramas de °ujo de datos

² El diagrama de °ujo de datos (DFD) consiste en representar gr¶a¯camente hechos, situaciones,movimientos o relaciones de todo tipo, por medio de s¶³mbolos.

² Podemos a¯rmar que el diagrama de °ujo representa la forma m¶as tradicional para especi¯carlos detalles algor¶³tmicos de un proceso. Se utilizan principalmente en programaci¶on, econom¶³a yprocesos industriales; estos diagramas utilizan una serie de s¶³mbolos con signi¯cados especiales.

² Un diagrama de °ujo es una representaci¶on gr¶a¯ca de un algoritmo o de una parte del mismo.Los diagramas de °ujo ayudan en la comprensi¶on de la operaci¶on de las estructuras de control.Se utilizan para representar gr¶a¯camente las operaciones a ejecutar en un algoritmo. Cadainstrucci¶on simple tiene un s¶³mbolo que la identi¯ca. La uni¶on entre s¶³mbolos por l¶³neas danel concepto de °ujo indicando as¶³ el orden de ejecuci¶on de las instrucciones o s¶³mbolos.

² La ventaja de utilizar un algoritmo es que se lo puede construir independientemente de unlenguaje de programaci¶on, pues al momento de llevarlo a c¶odigo se lo puede hacer en cualquierlenguaje. Dichos diagramas se construyen utilizando ciertos s¶³mbolos de uso especial como sonrect¶angulos, diamantes, ¶ovalos, y peque~nos c¶³rculos, estos s¶³mbolos est¶an conectados entre s¶³por °echas, conocidas como l¶³neas de °ujo. A continuaci¶on se detallar¶an estos s¶³mbolos.

1. Terminal: Representa el inicio y ¯n de un programa.

2. Proceso: Son acciones que el programa tiene que realizar.

3. Decisi¶on: Indica operaciones l¶ogicas o de comparaci¶on, as¶³ como expresiones.

4. Entrada/Salida: Nos permite ingresar datos, de un perif¶erico, as¶³ como mostrar-los.

5. Entrada: Para indicar el ingreso o lectura de datos:

6. Salida: Es usado para mostrar datos o resultados.

7. Conector: Se coloca al principio y ¯n de un pedazo de programa, enlaza dos partescualquiera de un programa.

8. L¶³nea de °ujo o indicador de direcci¶on.

Ejemplo 8.1 Elabore un algoritmo que sume dos n¶umeros suministrados por el usuario.

Soluci¶on: Designemos con A y B los n¶umeros que se van a sumar. El DFD se muestra en laFig. 8.1.

Page 111: Crestomatía

8.2. DIAGRAMAS DE FLUJO DE DATOS 111

Figura 8.1: DFD para la suma de dos n¶umeros.

Figura 8.2: DFD para el algoritmo que calcula el ¶area de un tri¶angulo.

Ejemplo 8.2 Dise~nar un diagrama de °ujo para calcular y mostrar el ¶area de un tri¶angulo.El diagrama deber¶a de solicitar los datos necesarios y mostrar el resultado.

Soluci¶on: En este caso los datos son la base y la altura del tri¶angulo en cuesti¶on. Los

denotamos con b y h respectivamente. Calculamos luego el ¶area A =b£ h2

y ¯nalmente

desplegamos el resultado. El DFD de este problema se muestra en la Fig. 8.2.

Ejemplo 8.3 Dise~nar un diagrama de °ujo para convertir de grados cent¶³grados a gradosFahrenheit. El diagrama deber¶a de solicitar los datos necesarios y mostrar el resultado.

Soluci¶on:

En este caso es necesario un solo dato: la temperatura en grados Celsius y que denotamos conC. La salida se calcula mediante la f¶ormula de conversi¶on que se puede conseguir en muchoslibros de matem¶aticas o f¶³sica. Denotamos esa cantidad con F . El DFD se muestra en laFig. 8.3.

Page 112: Crestomatía

112 CAP¶ITULO 8. ALGORITMOS SECUENCIALES Y CONDICIONALES

Figura 8.3: DFD para conversi¶on de grados cent¶³grados a grados Fahrenheit.

Ejemplo 8.4 Dibujar un diagrama de °ujo para el problema de calcular el precio y la cantidada devolver por la compra de un producto.

Soluci¶on: Las variables a usar son las siguientes:

1. precioKg: precio por cada kilo

2. peso: para indicar el peso de la cantidad por vender.

3. entregada: para idicar la cantidad entregada a la persona a la que se le paga

4. precio: monto total a pagar por el peso adquirido

5. devuelta: para guardar la cantidad devuelta al momento de la compra.

El DFD para este problema se muestra en la Fig. 8.4.

8.3 Problemas secuenciales

² Hasta ahora nuestras descripciones de algoritmos se han expresado en espa~nol ordinario. Sinembargo los programas deben ser escritos en un lenguaje que pueda entender la computadora.Es natural, por lo tanto, describir los algoritmos en un lenguaje que se parezca m¶as al lenguajeutilizado para escribir programas de computadora, es decir un lenguaje de pseudoprogramaci¶on,una imitaci¶on del c¶odigo de las computadoras o como se le conoce un pseudoc¶odigo.

² El pseudoc¶odigo se concibi¶o para superar las dos principales desventajas del diagrama de °ujo:el diagrama de °ujo es lento de crear y di¯cil de modi¯car sin un nuevo redibujo. Por otraparte el pseudoc¶odigo es m¶as f¶acil de utilizar ya que es similar al espa~nol -o al ingl¶es, catal¶an,vasco o gallego.

² Al contrario que los lenguajes de programaci¶on de alto nivel como C, Pascal o BASIC, no existeun conjunto de reglas que de¯nan con precisi¶on lo que es y lo que no es pseudoc¶od¶³go. Var¶³a deun programador a otro. El pseudoc¶odigo es una mezcla de lenguaje natural y s¶³mbolos, t¶erminosy otras caracter¶³sticas com¶unmente utilizadas en uno o m¶as lenguajes de alto nivel. T¶³picamente

Page 113: Crestomatía

8.3. PROBLEMAS SECUENCIALES 113

Figura 8.4: DFD.

se encuentran las caracter¶³sticas en diferentes pseudoc¶odigos que se pueden encontrar en librosde texto de programaci¶on.

² Los DFD son ¶utiles para algoritmo cortos, sin embargo para problemas largos, tales esquemas sevuelven dif¶³ciles de manejar. Normalmente los programadores inician su vida en programaci¶oncon el empleo de DFD pero pronto este estilo de representaci¶on es abandonado y cambiadopor el pseudoc¶odigo. En este texto presentaremos todav¶³a m¶as algorimos en formato DFD, sinembargo se insta al estudiante para que trate de escribir sus algoritmos usando pseudoc¶odigo.

² Para escribir algoritmos es necesarios disponer de un lenguaje claro y que no deje margen a laambiguedad (lenguajes libre de contexto). Para esto debemos de¯nir una sintaxis y sem¶anticaque nos permita una ¶unica interpretaci¶on de las instrucciones del algoritmo.

Ejemplo 8.5 Suponga que un individuo quiere invertir su capital en un banco y desea sabercuanto dinero ganar¶a despu¶es de un mes si el banco paga a raz¶on de 2% mensual.

Soluci¶on: Podemos distinguir los siguientes pasos:

An¶alisis

Datos de entradaCapital a invertir (cap invertir)Inter¶es pagado por el banco = 2% mensual

Page 114: Crestomatía

114 CAP¶ITULO 8. ALGORITMOS SECUENCIALES Y CONDICIONALES

Datos de salidaGanancia obtenida en un mes (ganancia)

void Ganancia()

f // Inicioint cap invertir;°oat ganancia;Escribir(\>Cu¶al es el capital?");Leer(cap invertir);ganancia = cap invertir ¤0:02 ;Escribir(ganancia);

g // Fin

Ejemplo 8.6 Un vendedor recibe un sueldo base mas un 10% extra por comisi¶on de susventas, el vendedor desea saber cuanto dinero obtendr¶a por concepto de comisiones por las tresventas que realiza en el mes y el total que recibir¶a en el mes tomando en cuenta su sueldo basey comisiones.

Soluci¶on: Podemos distinguir los siguientes pasos:

Datos de entrada

1. Sueldo base del vendedor ( sueldo base)

2. Comision por venta = 10% de las ventas

3. realizo 3 ventas : V enta1, V enta2 y V enta3

Datos de salida

1. Valor de la comision de las ventas (comision)

2. Sueldo a recibir (sueldo recibir)

Consideraciones: Para calcular el valor de la comision, se debe conocer el total de las ventas. Eltotal de las ventas es la suma acumulativa de cada una de las ventas. La comision correspondeal 10% del total acumulado de las ventas El sueldo a recibir es la suma del sueldo base m¶as lacomision de las ventas.

E c¶odigo es como sigue:

void CalculeSueldo()

f // Inicioint sueldo base; venta1; venta2; venta3 ;int total venta ;

Page 115: Crestomatía

8.3. PROBLEMAS SECUENCIALES 115

°oat comision; sueldo recibir ;Escriba(\D¶e el sueldo base y las 3 ventas":);Leer(sueldo base, venta1, venta2, venta3);total venta = venta1 + venta2 + venta3 ;comision = total venta ¤ 0:10;sueldo recibir = sueldo base+ comision;Escribir( sueldo recibir; comision);

g // Fin

Ejemplo 8.7 Una tienda ofrece un descuento del 15% sobre el total de la compra y un clientedesea saber cuanto deber¶a pagar ¯nalmente por su compra.

Soluci¶on: Podemos distinguir los siguientes pasos:

Datos de entrada

1. El total de la compra ( total compra)

2. Descuento ofrecido por la tienda = 15% sobre el total de la compra

Datos de salida: Total a pagar por la compra ( total pagar)

Consideraciones

1. El descuento es el 15 del valor total comprado

2. Descuento = total compra ¤ 0:15El algoritmo es:

Algoritmof // Inicio

int total compra;°oat descuento, total pagar;Escriba(\D¶e el total de la compra");Leer(total compra);descuento = total compra ¤ 0:15 ;total pagar = total compra¡ descuento ;Escribir(total pagar);

g // Fin

Ejemplo 8.8 Un departamento de climatolog¶³a ha realizado recientemente su conversi¶on alsistema m¶etrico. Dise~nar un algoritmo para realizar las siguientes conversiones:

1. Leer la temperatura dada en la escala Celsius e imprimir en su equivalente Fahrenheit (laf¶ormula de conversi¶on es \F = 9=5C + 32").

Page 116: Crestomatía

116 CAP¶ITULO 8. ALGORITMOS SECUENCIALES Y CONDICIONALES

2. Leer la cantidad de agua en pulgadas e imprimir su equivalente en mil¶³metros (25.5 mm= 1 pulgada).

Soluci¶on:

void SistemaMetrico(°oat grados C, pulgadas)f

°oat grados F ; // Temperatura en grados Fahrenheit°oat milimetros; // Cantidad de agua en mil¶³metrosgrados F = (9=5) ¤ grados C + 32;Print(grados C,\ grados Celsius = ", grados F ,\ grados Fahrenheit.");milimetros = pulgadas ¤ 25:5;Print( pulgadas,\ pulgadas = ", milimetros,\ mil¶³metros.");

g

Ejemplo 8.9 El costo de un autom¶ovil nuevo para un comprador es la suma total del costodel veh¶³culo, del porcentaje de la ganancia del vendedor y de los impuestos locales o estatalesaplicables (sobre el precio de venta). Suponer una ganancia del vendedor del 12% en todas lasunidades y un impuesto del 6% y dise~nar un m¶etodo para leer el costo total del autom¶ovil ydevolver el costo para el consumidor.

Soluci¶on: El c¶odigo es como sigue:

°oat ComprarAuto(°oat costo total)f

°oat costo comprador :;//costo del veh¶³culo nuevo para el comprador (en colones)°oat ganancia, impuestos;ganancia = costo total ¤ 0:12;impuestos = costo total ¤ 0:06;costo comprador = costo total + ganancia+ impuestos;Return(costo comprador)

g

Ejemplo 8.10 Realizar un m¶etodo que calcule el factorial de un n¶umero entero no negativo.

Soluci¶on:

Recordemos que 0! = 1; 1! = 1, 2! = 2 ¤ 1 = 2; 3! = 3 ¤ 2 ¤ 1 = 6, etc. El c¶odigo solicitado escomo sigue:

int Factorial (int n)f

Page 117: Crestomatía

8.3. PROBLEMAS SECUENCIALES 117

int i f ;f = 1;for(i = 2; i · n; i++)f = f ¤ i;

Return(f);g

Ejemplo 8.11 Realizar el dise~no y programa capaces de calcular el combinatorio de dosn¶umeros a y b:

C(a; b) =a!

b! ¤ (a¡ b)!Soluci¶on: Usaremos, en este problema, el m¶etodo Factorial desarrollado en el Ejemplo 8.10.

°oat Combinatorio(°oat a, b)f// dos n¶umero entero positivos, a > 0, b ¸ 0 y a > b .if((b == 0) or (a == b) )combi = 1

elsecombi = Factorial(a)=(Factorial(b) ¤ Factorial(a¡ b));

Return(combi);g

Ejemplo 8.12 El siguiente es el men¶u de un restaurante ( en el a~no1980) de bocadillos.Dise~nar un m¶etodo capaz de leer el n¶umero de unidades consumidas de cada alimento ordenadoy calcular la cuenta total.

1. Bocadillo de jam¶on (250 colones)

2. Bocadillo de queso (200 colones)

3. Papas fritas (100 colones)

4. Refresco (175 colones)

5. Cerveza (125 colones)

Soluci¶on:

°oat Menu()f

int jamon; // Cantidad de bocadillos de jam¶onint queso; // Cantidad de bocadillos de quesoint papas; // Cantidad de papas fritasint refrescos; //Cantidad de refrescos

Page 118: Crestomatía

118 CAP¶ITULO 8. ALGORITMOS SECUENCIALES Y CONDICIONALES

int cervezas; // Cantidad de cervezas°oat total; // La cuenta totalPrint( \Introduzca la cantidad servida de ...");Print( \... bocadillos de jam¶on: ");Read(jamon);Print( \... bocadillos de queso: ");Read(queso);Print( \... patatas fritas: ");Read(papas),Print( \... refrescos: ");Read(refrescos);Print( \... cervezas: ");Read(cervezas);total = jamon ¤ 250 + queso ¤ 200 + papas ¤ 100+

refrescos ¤ 175 + cerveza ¤ 125;Return( total);

g

Ejemplo 8.13 Dise~nar un m¶etodo que lea dos valores reales y muestre los resultados desumar, restar, dividir y multiplicar dichos n¶umeros.

Soluci¶on:

void Operaciones()f

°oat i, j; // Valores con los que se hacen las operaciones°oat suma; // Resultado de sumar \i" mas \j"°oat resta; // Resultado de restar \i" menos \j"°oat division; // Resultado de dividir \i" entre \j"°oat multiplicacion; //Resultado de multiplicar \i" por \j"Print( \Introduzca el primer valor: ");Read(i);Print(\Introduzca el segundo valor: ");Read(j);suma = i+ j;resta = i¡ jdivision = i=j;multiplicacion = i ¤ j;Print(i, \ + ", j, \ = ", suma);Print(i, \ ¡ ", j, \ = ", resta);Print(i, \ = ", j, \ = ", division);Print(i, \ ¤ ", j, \ = ", multiplicacion);

g

Page 119: Crestomatía

8.3. PROBLEMAS SECUENCIALES 119

Ejemplo 8.14 Queremos conocer los datos estad¶³sticos de una asignatura, por lo tanto, nece-sitamos un m¶etodo que lea el n¶umero de reprobados, aprobados, notables y sobresalientes deuna asignatura, y nos devuelva:

1. El tanto por ciento de alumnos que han superado la asignatura.

2. El tanto por ciento de reprobados, aprobados, notables y sobresalientes de la asignatura.

Soluci¶on:

void Estadisticas()f

reprobados; // N¶umero de reprobados de la asignaturaaprobados; // N¶umero de aprobados de la asignaturanotables; // N¶umero de notables de la asignaturasobresalientes; // N¶umero de sobresalientes de la asignatura°oat aptos; // Porcentaje de alumnos que han superado la asignatura°oat p rep; // Porcentaje de reprobados°oat p apr; // Porcentaje de aprobados°oat p not; // Porcentaje de notables°oat p sob; // Porcentaje de sobresalientesint alumnos;Print(\>Cu¶antos alumnos reprobados?: ");Read(reprobados);Print(\>Cu¶antos alumnos aprobados?: ");Read(aprobados);Print(\>Cu¶antos alumnos notables?: ");Read(notables);Print(\>Cu¶antos alumnos sobresalientes?: ");Read(sobresalientes);alumnos = reprobados + aprobados + notables + sobresalientes;aptos = (aprobados + notables + sobresalientes) ¤100= alumnosPrint(\El ", aptos, \% de alumnos ha superado la asignatura.");p rep = reprobados ¤100= alumnos;p apr = aprobados ¤100= alumnos;p not = notables ¤100= alumnos;p sob = sobresalientes ¤100= alumnos;Print(\Hay un ", p rep, \% de alumnos reprobados.");Print(\Hay un ", p apr, \% de alumnos aprobados.");Print(\Hay un ", p not, \% de alumnos notables.");Print(\Hay un ", p sob, \% de alumnos sobresalientes.");

g

Page 120: Crestomatía

120 CAP¶ITULO 8. ALGORITMOS SECUENCIALES Y CONDICIONALES

8.4 Ejercicios sobre algoritmos secuenciales

1. Un alumno desea saber cual ser¶a su nota ¯nal en el curso de Introducci¶on a la progra-maci¶on. Dicha nota se compone de los siguientes porcentajes:

(a) 55% del promedio de sus tres notas parciales.

(b) 30% de la nota del examen ¯nal.

(c) 15% de la nota de un trabajo ¯nal.

2. Un profesor conoce la cantidad de hombres y mujeres del curso de Algoritmos, desea saberque porcentaje de hombres y que porcentaje de mujeres hay en su grupo de estudiantes.

3. Dada un cantidad en pesos, obtener la equivalencia en d¶olares, asumiendo que la unidadcambiar¶³a es un dato desconocido.

4. La presi¶on, el volumen y la temperatura de una masa de aire se relacionan por la formula:

masa = (presi¶on ¤ volumen)=(0:37 ¤ (temperatura + 460))

Escribir un algoritmo que calcule dicha f¶ormula.

5. Calcular el numero de pulsaciones que una persona debe tener por cada 10 segundos deejercicio, si la formula es:

Num. pulsaciones =220¡ edad

10

6. Calcular el nuevo sueldo de un empleado siobtuvo un incremento del 25% sobre su sueldoanterior.

7. En un hospital existen tres ¶areas: Ginecolog¶³a, Pediatr¶³a, Traumatolog¶³a. El presupuestoanual del hospital se reparte conforme a la siguiente tabla:

¶Area Porcentaje del presupuestoGinecolog¶³a 40%Traumatolog¶³a 30%Pediatr¶³a 30%

Obtener la cantidad de dinero que recibir¶a cada ¶area, para cualquier monto presupuestado.

8. El due~no de una tienda compra un art¶³culo a un precio determinado. Obtener el precioen que lo debe vender para obtener una ganancia del 30%.

9. Todos los lunes, mi¶ercoles y viernes, una persona corre la misma ruta y cronometra lostiempos obtenidos. Determinar el tiempo promedio que la persona tarda en recorrer laruta en una semana cualquiera.

10. Tres personas deciden invertir su dinero para fundar una empresa. Cada una de ellasinvierte una cantidad distinta. Obtener el porcentaje que cada quien invierte con respectoa la cantidad total invertida.

Page 121: Crestomatía

8.5. ESTRUCTURAS DE CONDICIONALES 121

11. Un alumno desea saber cual ser¶a su promedio general en los tres cursos m¶as dif¶³ciles quecursa y cual ser¶a el promedio que obtendr¶a en cada una de ellas. Estas materias se eval¶uancomo se muestra a continuaci¶on:

(a) La cali¯caci¶on de Matem¶aticas se obtiene de la siguiente manera:

i. Examen 90%

ii. Promedio de tareas 10%

iii. En esta materia se pidi¶o un total de tres tareas.

(b) La cali¯caci¶on de F¶³sica se obtiene de la siguiente manera:

i. Examen 80%

ii. Promedio de tareas 20%

iii. En esta materia se pidi¶o un total de dos tareas.

(c) La cali¯caci¶on de Programaci¶on se obtiene de la siguiente manera:

i. Examen 85%

ii. Promedio de tareas 15%

iii. En esta materia se pidi¶o un promedio de tres tareas.

8.5 Estructuras de condicionales

Ejemplo 8.15 Desarrolle un DFD que permita leer dos valores distintos, determinar cu¶al delos dos valores es el mayor y escribirlo.

Soluci¶on:

Soluci¶on: Designemos con A y B las variables que se deben leer. El primer condicionallo empleamos para asegurarnos de que el usuario est¶a introduciendo dos valores distintos.Seguidamente preguntamos cu¶al es el mayor y lo imprimimos. El DFD se muestra en la Fig. 8.5.

Ejemplo 8.16 Desarrolle un DFD que permita leer tres valores y almacenarlos en las va-riables A, B y C respectivamente. El algoritmo debe imprimir cu¶al es el mayor y cu¶al es elmenor. Recuerde constatar que los tres valores introducidos por el teclado sean valores dis-tintos. Presente un mensaje de alerta en caso de que se detecte la introducci¶on de valoresiguales.

Soluci¶on: En la Fig. 8.6 se presenta una soluci¶on parcial al problema planteado. >Qu¶e falta?Se deja al estudiante completar los detalles.

² Las estructuras condicionales comparan una variable contra otro(s) valor(es), para que en baseal resultado de esta comparaci¶on, se siga un curso de acci¶on dentro del programa. Cabemencionar que la comparaci¶on se puede hacer contra otra variable o contra una constante,seg¶un se necesite. Existen dos tipos b¶asicos, las simples y las m¶ultiples.

Page 122: Crestomatía

122 CAP¶ITULO 8. ALGORITMOS SECUENCIALES Y CONDICIONALES

Figura 8.5: DFD.

Figura 8.6: DFD.

Page 123: Crestomatía

8.5. ESTRUCTURAS DE CONDICIONALES 123

² (Simples): Las estructuras condicionales simples se les conoce como \Tomas de decisi¶on".

if (condici¶on)f

Acci¶on(es)g // Fin si

² (Dobles): Las estructuras condicionales dobles permiten elegir entre dos opciones o alternativasposibles en funci¶on del cumplimiento o no de una determinada condici¶on.

if (condici¶on) fAcci¶on(es)

g else fAcci¶on(es)

g // Fin si

En la que:

1. if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Indica el comando de comparaci¶on

2. Condici¶on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Indica la condici¶on a evaluar

3. entonces . . . . . . . . . . . . . . . . .Precede a las acciones a realizar cuando se cumple la condici¶on

4. acci¶on(es) . . . . . . . . . . . . . . . Son las acciones a realizar cuando se cumple o no la condici¶on

5. g else f . . . . . . . . . . . . . .Precede a las acciones a realizar cuando no se cumple la condici¶on² Dependiendo de si la comparaci¶on es cierta o falsa, se pueden realizar una o mas acciones.(M¶ultiples o anidadas): Las estructuras de comparaci¶on m¶ultiples, son tomas de decisi¶onespecializadas que permiten comparar una variable contra distintos posibles resultados, ejecu-tando para cada caso una serie de instrucciones especi¯cas. La forma com¶un es la siguiente:

if (condici¶on) fAcci¶on(es)

g else fif (condici¶on) f

Acci¶on(es)g else f

Acci¶on(es)g // Fin Si

g // Fin Si

² (Estructura condicional de m¶ultiples casos): Switch/case/default

Page 124: Crestomatía

124 CAP¶ITULO 8. ALGORITMOS SECUENCIALES Y CONDICIONALES

Int opc;Switch (opc)f // Inician los casos

case 1:Escriba (\Elegiste la opci¶on 1");break; // si esta es la opci¶on, break hace que salga del switch

case 3:Escriba (\Elegiste la opci¶on 3");break;

case 2006:Escriba (\Elegiste la opci¶on 2006");break;

defaultEscriba (\Que bonita es la inform¶atica");

g // Fin En CasoEjemplo 8.17 (Selecci¶on Simple) Un hombre desea saber cuanto dinero se genera por con-cepto de intereses sobre la cantidad que tiene en inversi¶on en el banco. El decidir¶a reinvertirlos intereses siempre y cuando estos excedan a $ 7000, y en ese caso desea saber cuanto dinerotendr¶a ¯nalmente en su cuenta.

Soluci¶on:

{ Datos de Entrada:

Capital en Inversi¶on ( cap inv)Valor del Inter¶es ( p interes)

{ Datos de Salida:

Saldo en la cuenta (saldo)

{ Consideraciones: Se debe calcular el valor del inter¶es generado por el capital

void CalcInteres()f // Inicio

int cap inv ;°oat p interes, interes calculado, saldo;Escriba(\D¶e inter¶es y capital de inversi¶on");Leer( p interes, cap inv);saldo = cap inv ;interes calculado = cap inv ¤ p interes ;if ( interes calculado > 7000) f

saldo = cap inv + interes calculado;g; // Fin SiEscribir(saldo);

g // Fin

Page 125: Crestomatía

8.5. ESTRUCTURAS DE CONDICIONALES 125

Ejemplo 8.18 Determinar si un alumno aprueba a reprueba un curso, sabiendo que aprobarasi su promedio de las tres cali¯caciones es mayor o igual a 4.0; reprueba en caso contrario.

Soluci¶on:

void CalcProm()f // Inicio

°oat Nota1, Nota2, Nota3 ;°oat Promedio;String Mensaje ;Escribir(\D¶e las notas:");Leer(Nota1; Nota2; Nota3);Promedio = (Nota1 +Nota2 +Nota3)=3;if ( promedio >= 4:0) f

Mensaje = \Alumno Aprobado"g else f

Mensaje = \Alumno Reprobado"g; // Fin siEscribir( Mensaje);

g // Fin

Ejemplo 8.19 En un almac¶en se hace un 20% de descuento a los clientes cuya compra superelos $1000 >Cual ser¶a la cantidad que pagar¶a una persona por su compra?

Soluci¶on:

void CantPorPagar()f // Inicio

int Compra°oat Descuento, Tot Pagar;Escriba(\D¶e el monto de la compra:");Leer(Compra);if ( Compra > 1000) f

Descuento = Compra ¤ 0:2;g else f

Descuento = 0 ;g // Fin siTot Pagar = CompraDescuento;Escribir(Tot pagar);

g // Fin

Ejemplo 8.20 Un obrero necesita calcular su sueldo, el cual se obtiene de la sig. manera: sitrabaja 40 horas o menos se le paga $1600 por hora trabajada, si trabaja mas de 40 horas sele paga $1600 por cada una de las primeras 40 horas trabajadas y $2000 por cada hora extra.

Page 126: Crestomatía

126 CAP¶ITULO 8. ALGORITMOS SECUENCIALES Y CONDICIONALES

Soluci¶on:

void CalcSueldo()f // Inicio

int Hora trabajada, Hora extra, Sueldo;Escriba("D¶e las horas trabajadas:");Leer(Hora trabajada);if ( Hora trabajada > 40) f

Hora extra = Hora trabajada ¡40 ;Sueldo = Hora extra ¤ 2000 + 40 ¤ 1600;

g else fSueldo = Hora trabajada ¤ 1600 ;

g // Fin-ifEscribir(Sueldo);

g // Fin

Ejemplo 8.21 Dise~nar un algoritmo que dado dos circunferencias (coordenadas en el planox e y y su radio) calcule cu¶antos puntos tienen en com¶un dichas circunferencias (cero, uno, doso in¯nitos).

Nota: Para realizar este programa, se debe calcular la suma de los radios r1 y r2; y la distanciaentre los dos centros ( (x1; y1) y (x2; y2)) de las circunferencias utilizando las siguientes f¶ormulas:

Suma radios = r1 + r2

Distancia =q(x1 ¡ x2)2 + (y1 ¡ y2)2

Soluci¶on: Si la distancia es cero y los radios son iguales es que se trata de la misma circun-ferencia y todos sus puntos coinciden (in¯nitos puntos de corte). Si la distancia es cero y losradios no son iguales entonces no existe ning¶un punto de corte. En otro caso, si la distancia esmenor que la suma de los radios, entonces existen dos puntos de corte. Si la distancia es iguala la suma de los radios, entonces s¶olo existe un punto de corte. Por ultimo, si la distancia esmayor que la suma de los radios, entonces no existe ning¶un punto de corte. El c¶odigo es comosigue:

string PuntosDeCorte(°oat x1, y1 ; // (Coordenadas del centro de la primera circunferencia)°oat r1; // (Radio de la primera circunferencia)°oat x2, y2; // (Coordenadas del centro de la segunda circunferencia)°oat r2: REAL;// (Radio de la segunda circunferencia))

f°oat suma radios;

Page 127: Crestomatía

8.6. PAR¶AMETROS POR VALOR O POR REFERENCIA 127

°oat distancia;suma radios = r1 + r2;distancia = Sqrt((x1¡ x2) ¤ (x1¡ x2) + (y1¡ y2) ¤ (y1¡ y2));if(distancia == 0 )if(r1 == r2 )Return("Existen in¯nitos puntos de corte.")

elseReturn("No hay puntos de corte.")

else if(distancia6= 0)if(suma radios < distancia )Return("Existen 2 puntos de corte.")

elseif(suma radios == distancia )Return("Existe 1 punto de corte.")

elseReturn("No hay puntos de corte.")

g

8.6 Par¶ametros por valor o por referencia

² Un par¶ametro que se recibe en un m¶etodo por valor es aquel que simplemente se usa paraingresar un valor. La comunicaci¶on de datos se da en un solo sentido.

² Para aclarar esta idea, considere este ejemplo: cuando usted env¶³a una fotocopia de su c¶edulaa un amigo y este la corta por la mitad, este hecho no afecta su verdadera c¶edula. No hayninguna consecuencia \fatal", pues se trata de una copia.

² Un par¶ametro por referencia proporciona una comunicaci¶on de ida y vuelta. Volviendo alejemplo de la c¶edula, suponga ahora que usted le da su c¶edula (de pl¶astico) a un amigo.Cualquier da~no que este le in¯era a esta, s¶³ es importante porque se trata de su verdaderodocumento de identi¯caci¶on.

² Cuando queremos comunicar con uno o varios par¶ametros un dato, este o estos deben ser deltipo por referencia. Simplemente anteponemos (yuxtaponemos) el s¶³mbolo & al nombre delpar¶ametro en el encabezado (y solo ah¶³). En el cuerpo del m¶etodo, no se usa &.

² Si una variable se pasa a un m¶etodo y no debe ser cambiada por este, entonces la variablese debe pasar por medio de valor y no por medio de referencia. De esta regla tenemos queexceptuar a los vectores y matrices.

² Para pasar una variable simple por referencia, se deber¶a adjuntar un signo \&" al nombre deltipo de datos en la lista de par¶ametros del m¶etodo:

Page 128: Crestomatía

128 CAP¶ITULO 8. ALGORITMOS SECUENCIALES Y CONDICIONALES

int AlgunMetodo(°oat paraml, // Paso por valorchar & param2 ) // Paso por referencia

f. . .g

Ejemplo 8.22 Haga un m¶etodo que reciba dos n¶umeros reales e intercambie sus valores.

Soluci¶on: En este caso debemos notar que el m¶etodo debe regresar (v¶³a par¶ametros) dosvalores: recibe dos valores y devuelve dos valores.

void Intercambie(°oat & a, & b)f°oat aux;aux = a;a = b;b = aux;

g

Si en otro m¶etodo se escribe el siguiente c¶odigo,

°oat a = 3;°oat b = 5;Intercambie(a, b);Escriba(a)

en la pantalla se despliega 5, pues despu¶es de invocar el m¶etodo a queda valiendo 5.

8.7 Ejercicios del cap¶³tulo

1. >Qu¶e es un Diagrama de °ujo?

2. >Qu¶e es el pseudocodigo? El pseudoc¶odigo es un lenguaje de especi¯caci¶on de algorit-mos; es una forma de describir un algoritmo mediante palabras, facilitando la posteriorcodi¯caci¶on del programa seg¶un un lenguaje de programaci¶on escogido.

3. >En qu¶e etapa de la programaci¶on es utilizado el diagrama de objetos y explique cu¶al essu funci¶on?

4. D¶e la de¯nici¶on de algoritmo.

5. Investigue en qu¶e consiste el dise~no modular.

6. Especi¯que cual es la diferencia entre lenguaje algor¶³tmico y lenguaje inform¶atico.

Page 129: Crestomatía

8.7. EJERCICIOS DEL CAP¶ITULO 129

7. Investigue qu¶e es la traza de un algoritmo.>Cu¶al es la funcion principal de la traza de unAlgoritmo?

8. Investigue: >Cu¶ales son los m¶etodos m¶as usuales para representar un algoritmo?

9. Responder a las siguientes preguntas brevemente:

(a) >Cu¶al es la diferencia entre algoritmo y programa?

(b) En programaci¶on, >cu¶al es la diferencia entre lenguaje y pseudolenguaje?

(c) >Cu¶al es el problema principal que surge al usar el lenguaje natural para expresar unalgoritmo?

(d) >Qu¶e requisitos debe cumplir un algoritmo bien elaborado?

(e) >Qu¶e diferencia hay entre una constante simb¶olica y una literal?

(f) Investigue: >Cu¶ales son las dos diferencias fundamentales entre un compilador y unint¶erprete?

(g) Investigue: >Qu¶e es un lenguaje simb¶olico? Se~nala uno que lo sea y otro que no.

10. Sean los datos a, b, c y d. Elabore diagramas de °ujo independientes para leer los datos,resolver e imprimir el resultado de cada uno de los siguientes incisos:

(a) Escribir los datos en orden inverso.

(b) Escribir los datos en orden inverso, omitiendo el segundo dato.

(c) Calcular:a+ b¡ c

d

(d) Calcular:(a¡ b)2 ¡ (a¡ b)3

c2 + d¡ a11. Elabore un diagrama de °ujo que teniendo como datos de entrada el radio y la altura

de un cilindro calcule el ¶area total y el volumen del cilindro. Ayuda: Se debe tener encuenta que el ¶area de un cilindro es igual a la suma de las ¶areas de los dos c¶³rculos m¶as el¶area del rect¶angulo formado por la longitud de la circunferencia y la altura del cilindro yque el volumen se obtiene multiplicando la super¯cie de la base del c¶³rculo por la alturadel cilindro.

12. Un sistema de ecuaciones lineales: (ax+ by = cdx+ ey = f

Elabore un diagrama de °ujo que lea dos conjuntos de coe¯cientes (a, b, c, y d e y f) yescriba los valores de x e y.

13. Una persona recibe un pr¶estamo de $10,000.00 de un banco y desea saber cu¶anto pagar¶ade inter¶es al terminar el mes si el banco le cobra una tasa del 2% mensual.

(a) Resuelva este caso particular.

(b) Generalice este problema para un monto cualquiera de capital y para una tasa cual-quiera.

Page 130: Crestomatía

130 CAP¶ITULO 8. ALGORITMOS SECUENCIALES Y CONDICIONALES

14. Escribir un algoritmo que lea dos n¶umeros y los escriba en forma ascendente.

15. Una persona enferma, que pesa 70 kg, se encuentra en reposo y desea saber cuantascalor¶³as consume su cuerpo durante todo el tiempo que realice una misma actividad. Lasactividades que tiene permitido realizar son ¶unicamente dormir o estar sentado en reposo.Los datos que tiene son que estando dormido consume 1.08 calor¶³as por minuto y estandosentado en reposo consume 1.66 calor¶³as por minuto.

16. Escribir un algoritmo que escriba el nombre de un articulo, clave, precio original y suprecio con descuento. El descuento lo hace en base a la clave, si la clave es 01 el descuentoes del 10% y si la clave es 02 el descuento es del 20% (solo existen dos claves).

17. Hacer un algoritmo que calcule el total a pagar por la compra de camisas. si se comprantres camisas o m¶as se aplica un descuento del 20% sobre el total de la compra y si sonmenos de tres camisas un descuento del 10%

18. En un supermercado se hace una promoci¶on, mediante la cual el cliente obtiene un des-cuento dependiendo de un numero que se escoge al azar. si el numero escogido es menorque 74 el descuento es del 15% sobre el total de la compra, si es mayor o igual a 74 eldescuento es del 20%. Obtener cuanto dinero se le descuenta.

19. Una compa~n¶³a de seguros esta abriendo un Depto. de ¯nanzas y estableci¶o un programapara captar clientes, que consiste en lo siguiente: si el monto por el que se efect¶ua la ¯anzaes menor que $50 000 la cuota a pagar ser¶a por el 3% del monto, y si el monto es mayorque $50 000 la cuota a pagar ser¶a el 2% del monto. La a¯anzadora desea determinar cualser¶a la cuota que debe pagar un cliente.

20. Determinar la cantidad de dinero que recibir¶a un trabajador por concepto de las horasextras trabajadas en una empresa, sabiendo que cuando las horas de trabajo exceden de40, el resto se consideran horas extras y que estas se pagan al doble de una hora normalcuando no exceden de 8; si las horas extras exceden de 8 se pagan las primeras 8 al doblede lo que se pagan las horas normales y el resto al triple.

21. Escribir algoritmos en pseudoc¶odigo que calculen y escriban por pantalla:

(a) el m¶aximo de tres n¶umeros introducidos por teclado;

(b) las horas, minutos y segundos de un tiempo expresado s¶olo en segundos introducidopor teclado;

22. Escribir un algoritmo que, a partir de dos puntos en (x1; y1) y (x2; y2), muestre la ecuaci¶onde la recta en la forma ax+ by + c = 0.

23. Los ingredientes para 4 personas de la receta de \pastel de manzana dan¶es" son los indi-cados seguidamente. Realizar un algoritmo que calcule los ingredientes para un n¶umerovariable de personas que se recibe como par¶ametro.

(a) 675 gramos de manzanas

(b) gramos de mantequilla

(c) 150 gramos de az¶ucar

(d) 100 gramos de migas de pan

Page 131: Crestomatía

8.7. EJERCICIOS DEL CAP¶ITULO 131

(e) 150 mililitros de leche

24. Realiza un algoritmo que lea dos n¶umeros complejos por teclado (parte real e imaginaria)y calcule la suma y la multiplicaci¶on de ambos.

25. Dadas las siguientes declaraciones de variables siguientes y los valores iniciales indicados:VARIABLES

int color, lima, marron, amarillo, rojo, naranja;°oat negro, blanco, verde, azul, morado, crayon;color = 2; negro = 2.5;crayon = ¡1:3; marronrojo = 3; morado = 0.3E1;

evaluar el valor ¯nal de las variables despu¶es de ejecutar de forma independiente lassentencias de asignaci¶on siguientes. Nota: suponer que las incompatibilidades de tipos seresuelven impl¶³citamente e indicar d¶onde se producen.

(a) blanco = color * 2.5 / morado

(b) verde = color / morado

(c) naranja = color¤(¡12) DIV rojo(d) azul = (color + marron) / (crayon + 0.3)

(e) lima = rojo DIV color + rojo MOD color¡356(f) morado = marron / rojo * color

26. En las siguientes instrucciones, usar sentencias m¶as claras que hagan lo mismo, sabiendoque var1 y var2 son de tipo l¶ogico y x e y de tipo entero:

(a) var1 = var2 == FALSE;

(b) var1 = (x < y)AND(y < x)

(c) var2 = (x <= y)OR(y <= x)

27. Dados m e n enteros positivos, dise~na un algoritmo que calcule el m¶aximo com¶un divisor.

28. Dados dos n¶umeros enteros positivos, calcula el cociente y el residuo de su divisi¶on entera,usando s¶olo los operadores aritm¶eticos de suma y resta.

29. Haga un algoritmo que calcule la parte entera de la ra¶³z cuadrada de un n¶umero entero ypositivo.

30. Escribir un algoritmo en el cual a partir de una fecha ingresada por teclado con formato(num¶erico) DIA, MES, A~NO se obtenga la fecha del siguiente d¶³a.

31. Escribir un algoritmo que calcule (eval¶ue) el valor de la funci¶on f(x) = x2 ¡ 2x¡ 1 paravalores que se encuentren en el intervalo [1; 5] con un incremento de 0:5.

32. Escribir un algoritmo que calcule el ¶area y el per¶³metro de un tri¶angulo, introduciendo lascoordenadas de cada uno de sus v¶ertices.

33. Escribir un algoritmo que calcule el ¶area y el per¶³metro de un rect¶angulo, introduciendolas coordenadas de cada uno de sus v¶ertices.

Page 132: Crestomatía

132 CAP¶ITULO 8. ALGORITMOS SECUENCIALES Y CONDICIONALES

34. Determinar si un alumno aprueba a reprueba un curso, sabiendo que aprobara si su prome-dio de tres cali¯caciones es mayor o igual a 70; reprueba en caso contrario.

35. En un almac¶en se hace un 20% de descuento a los clientes cuya compra supere los $1000> Cual ser¶a la cantidad que pagara una persona por su compra?

36. Un obrero necesita calcular su salario semanal, el cual se obtiene de la sig. manera: Sitrabaja 40 horas o menos se le paga $16 por hora Si trabaja mas de 40 horas se le paga$16 por cada una de las primeras 40 horas y $20 por cada hora extra.

37. Una persona enferma, que pesa 70 kg, se encuentra en reposo y desea saber cuantascalor¶³as consume su cuerpo durante todo el tiempo que realice una misma actividad. Lasactividades que tiene permitido realizar son ¶unicamente dormir o estar sentado en reposo.Los datos que tiene son que estando dormido consume 1.08 calor¶³as por minuto y estandosentado en reposo consume 1.66 calor¶³as por minuto.

38. Hacer un algoritmo que imprima el nombre de un art¶³culo, clave, precio original y suprecio con descuento. El descuento lo hace en base a la clave, si la clave es 01 el descuentoes del 10% y si la clave es 02 el descuento en del 20% (solo existen dos claves).

39. Hacer un algoritmo que calcule el total a pagar por la compra de camisas. Si se comprantres camisas o mas se aplica un descuento del 20% sobre el total de la compra y si sonmenos de tres camisas un descuento del 10%.

40. Una empresa quiere hacer una compra de varias piezas de la misma clase a una fabrica derefacciones. La empresa, dependiendo del monto total de la compra, decidir¶a que hacerpara pagar al fabricante. Si el monto total de la compra excede de $500 000 la empresatendr¶a la capacidad de invertir de su propio dinero un 55% del monto de la compra, pedirprestado al banco un 30% y el resto lo pagara solicitando un cr¶edito al fabricante. Si elmonto total de la compra no excede de $500 000 la empresa tendr¶a capacidad de invertirde su propio dinero un 70% y el restante 30% lo pagara solicitando cr¶edito al fabricante.El fabricante cobra por concepto de intereses un 20% sobre la cantidad que se le pague acr¶edito.

41. Calcular el total que una persona debe pagar en un llantera, si el precio de cada llanta esde $800 si se compran menos de 5 llantas y de $700 si se compran 5 o mas.

42. En un supermercado se hace una promoci¶on, mediante la cual el cliente obtiene un des-cuento dependiendo de un n¶umero que se escoge al azar. Si el n¶umero escogido es menorque 74 el descuento es del 15% sobre el total de la compra, si es mayor o igual a 74 eldescuento es del 20%. Obtener cu¶anto dinero se le descuenta.

43. Calcular el n¶umero de pulsaciones que debe tener una persona por cada 10 segundos deejercicio aerobico; la formula que se aplica cuando el sexo es femenino es:

num. pulsaciones = (220¡ edad)=10y si el sexo es masculino:

num. pulsaciones = (210¡ edad)=10

Page 133: Crestomatía

8.7. EJERCICIOS DEL CAP¶ITULO 133

44. Una compa~n¶³a de seguros esta abriendo un depto. de ¯nanzas y estableci¶o un programapara captar clientes, que consiste en lo siguiente: Si el monto por el que se efect¶ua la ¯anzaes menor que $50 000 la cuota a pagar ser¶a por el 3% del monto, y si el monto es mayorque $50 000 la cuota a pagar ser¶a el 2% del monto. La a¯anzadora desea determinar cualser¶a la cuota que debe pagar un cliente.

45. En una escuela la colegiatura de los alumnos se determina seg¶un el n¶umero de materiasque cursan. El costo de todas las materias es el mismo. Se ha establecido un programapara estimular a los alumnos, el cual consiste en lo siguiente: si el promedio obtenido porun alumno en el ultimo periodo es mayor o igual que 9, se le har¶a un descuento del 30%sobre la colegiatura y no se le cobrara IVA; si el promedio obtenido es menor que 9 deber¶apagar la colegiatura completa, la cual incluye el 10% de IVA. Obtener cuanto debe pagarun alumno.

46. Una empresa de bienes ra¶³ces ofrece casas de inter¶es social, bajo las siguientes condiciones:Si los ingresos del comprador son menores de $8000 o mas el enganche ser¶a del 15% delcosto de la casa y el resto se distribuir¶a en pagos mensuales, a pagar en diez a~nos. Si losingresos del comprador son menos de $8000 o mas el enganche ser¶a del 30% del costo dela casa y el resto se distribuir¶a en pagos mensuales a pagar en 7 a~nos. La empresa quiereobtener cuanto debe pagar un comprador por concepto de enganche y cuanto por cadapago parcial.

47. El gobierno ha establecido el programa SAR (Sistema de Ahorro para el Retiro) queconsiste en que los due~nos de la empresa deben obligatoriamente depositar en una cuentabancaria un porcentaje del salario de los trabajadores; adicionalmente los trabajadorespueden solicitar a la empresa que deposite directamente una cuota ¯ja o un porcentajede su salario en la cuenta del SAR, la cual le ser¶a descontada de su pago. Un trabajadorque ha decidido aportar a su cuenta del SAR desea saber la cantidad total de dinero queestar¶a depositado a esa cuenta cada mes, y el pago mensual que recibir¶a.

48. Una persona desea iniciar un negocio, para lo cual piensa veri¯car cuanto dinero le prestarael banco por hipotecar su casa. Tiene una cuenta bancaria, pero no quiere disponer de ellaa menos que el monto por hipotecar su casa sea muy peque~no. Si el monto de la hipotecaes menor que $1 000 000 entonces invertir¶a el 50% de la inversi¶on total y un socio invertir¶ael otro 50%. Si el monto de la hipoteca es de $ 1 000 000 o mas, entonces invertir¶a elmonto total de la hipoteca y el resto del dinero que se necesite para cubrir la inversi¶ontotal se repartir¶a a partes iguales entre el socio y el.

9) El gobierno de Costa Rica desea reforestar un bosque que mide determinado n¶umerode hect¶areas. Si la super¯cie del terreno excede a 1 mill¶on de metros cuadrados, entoncesdecidir¶a sembrar de la siguiente manera:

Porcentaje de la super¯cie del bosque Tipo de ¶arbol70% pino20% frutal10% cedro

Si la super¯cie del terreno es menor o igual a un mill¶on de metros cuadrados, entonces

Page 134: Crestomatía

134 CAP¶ITULO 8. ALGORITMOS SECUENCIALES Y CONDICIONALES

decidir¶a sembrar de la sig. manera:

Porcentaje de la super¯cie del bosque Tipo de ¶arbol50% pino30% frutal20% cedro

El gobierno desea saber el n¶umero de pinos, frutales y cedros que tendr¶a que sembrar enel bosque, si se sabe que en 10 metros cuadrados caben 8 pinos, en 15 metros cuadradoscaben 15 frutales y en 18 metros cuadrados caben 10 cedros. Tambi¶en se sabe que unahect¶area equivale a 10 mil metros cuadrados.

49. Una fabrica ha sido sometida a un programa de control de contaminaci¶on para lo cualse efect¶ua una revisi¶on de los puntos IMECA generados por la fabrica. El programa decontrol de contaminaci¶on consiste en medir los puntos IMECA que emite la fabrica encinco d¶³as de una semana y si el promedio es superior a los 170 puntos entonces tendr¶ala sanci¶on de parar su producci¶on por una semana y una multa del 50% de las gananciasdiarias cuando no se detiene la producci¶on. Si el promedio obtenido de puntos IMECAes de 170 o menor entonces no tendr¶a ni sanci¶on ni multa. El due~no de la fabrica deseasaber cuanto dinero perder¶a despu¶es de ser sometido a la revisi¶on.

50. Una persona se encuentra con un problema de comprar un autom¶ovil o un terreno, loscuales cuestan exactamente lo mismo. Sabe que mientras el autom¶ovil se deval¶ua, con elterreno sucede lo contrario. Esta persona comprara el autom¶ovil si al cabo de tres a~nosla devaluaci¶on de este no es mayor que la mitad del incremento del valor del terreno.Ay¶udale a esta persona a determinar si debe o no comprar el autom¶ovil.

51. Leer 2 n¶umeros; si son iguales que los multiplique, si el primero es mayor que el segundoque los reste y si no que los sume.

52. Leer tres n¶umeros diferentes e imprimir el numero mayor de los tres.

53. Determinar la cantidad de dinero que recibir¶a un trabajador por concepto de las horasextras trabajadas en una empresa, sabiendo que cuando las horas de trabajo exceden de40, el resto se consideran horas extras y que estas se pagan al doble de una hora normalcuando no exceden de 8; si las horas extras exceden de 8 se pagan las primeras 8 al doblede lo que se pagan las horas normales y el resto al triple.

54. Calcular la utilidad que un trabajador recibe en el reparto anual de utilidades si este sele asigna como un porcentaje de su salario mensual que depende de su antigÄuedad en laempresa de acuerdo con la sig. tabla:

Tiempo UtilidadMenos de 1 a~no 5 % del salario

1 a~no o mas y menos de 2 a~nos 7% del salario2 a~nos o mas y menos de 5 a~nos 10% del salario5 a~nos o mas y menos de 10 a~nos 15% del salario

10 a~nos o mas 20% del salario

Page 135: Crestomatía

8.7. EJERCICIOS DEL CAP¶ITULO 135

55. En una tienda de descuento se efect¶ua una promoci¶on en la cual se hace un descuentosobre el valor de la compra total seg¶un el color de la bolita que el cliente saque al pagaren caja. Si la bolita es de color blanco no se le har¶a descuento alguno, si es verde se lehar¶a un 10% de descuento, si es amarilla un 25%, si es azul un 50% y si es roja un 100%.Determinar la cantidad ¯nal que el cliente deber¶a pagar por su compra. se sabe que solohay bolitas de los colores mencionados.

56. El IMSS requiere clasi¯car a las personas que se jubilar¶an en el a~no siguiente. Existentres tipos de jubilaciones: por edad, por antigÄuedad joven y por antigÄuedad adulta. Laspersonas adscritas a la jubilaci¶on por edad deben tener 60 a~nos o mas y una antigÄuedaden su empleo de menos de 25 a~nos. Las personas adscritas a la jubilaci¶on por antigÄuedadjoven deben tener menos de 60 a~nos y una antigÄuedad en su empleo de 25 a~nos o mas.Las personas adscritas a la jubilaci¶on por antigÄuedad adulta deben tener 60 a~nos o masy una antigÄuedad en su empleo de 25 a~nos o mas. Determinar en que tipo de jubilaci¶on,quedara adscrita una persona.

57. En una fabrica de computadors se planea ofrecer a los clientes un descuento que depender¶adel numero de computadors que compre. Si las computadors son menos de cinco se lesdar¶a un 10% de descuento sobre el total de la compra; si el numero de computadors esmayor o igual a cinco pero menos de diez se le otorga un 20% de descuento; y si son 10 omas se les da un 40% de descuento. El precio de cada computador es de $11,000

58. En una llantera se ha establecido una promoci¶on de las llantas marca "Ponchadas", dichapromoci¶on consiste en lo siguiente: Si se compran menos de cinco llantas el precio es de$300 cada una, de $250 si se compran de cinco a 10 y de $200 si se compran mas de 10.Obtener la cantidad de dinero que una persona tiene que pagar por cada una de las llantasque compra y la que tiene que pagar por el total de la compra.

59. En un juego de preguntas a las que se responde "Si" o "No" gana quien responda correc-tamente las tres preguntas. Si se responde mal a cualquiera de ellas ya no se preguntala siguiente y termina el juego. Las preguntas son: 1. Colon descubri¶o Am¶erica? 2.La independencia de M¶exico fue en el a~no 1810? 3. The Doors fue un grupo de rockAmericano?

60. Un proveedor de est¶ereos ofrece un descuento del 10% sobre el precio sin IVA, de alg¶unaparato si este cuesta $2000 o mas. Adem¶as, independientemente de esto, ofrece un 5%de descuento si la marca es "NOSY". Determinar cuanto pagara, con IVA incluido, uncliente cualquiera por la compra de su aparato.

61. Una fruter¶³a ofrece las manzanas con descuento seg¶un la siguiente tabla:

NUM. DE KILOS COMPRADOS % DESCUENTO0 - 2 0%2.01 - 5 10%5.01 - 10 15%

10.01 en adelante 20%

Determinar cuanto pagara una persona que compre manzanas es esa fruter¶³a.

Page 136: Crestomatía

136 CAP¶ITULO 8. ALGORITMOS SECUENCIALES Y CONDICIONALES

62. El due~no de una empresa desea plani¯car las decisiones ¯nancieras que tomara en elsiguiente a~no. La manera de plani¯carlas depende de lo siguiente: Si actualmente sucapital se encuentra con saldo negativo, pedir¶a un pr¶estamo bancario para que su nuevosaldo sea de $10 000. Si su capital tiene actualmente un saldo positivo pedir¶a un pr¶estamobancario para tener un nuevo saldo de $20 000, pero si su capital tiene actualmente unsaldo superior a los $20 000 no pedir¶a ning¶un pr¶estamo. Posteriormente repartir¶a supresupuesto de la siguiente manera:

$5 000 para equipo de computo$2 000 para mobiliario

y el resto la mitad ser¶a para la compra de insumos y la otra para otorgar incentivos alpersonal. Desplegar que cantidades se destinaran para la compra de insumos e incentivosal personal y, en caso de que fuera necesario, a cuanto ascender¶³a la cantidad que se pedir¶³aal banco.

63. Tomando como base los resultados obtenidos en un laboratorio de an¶alisis cl¶³nicos, unmedico determina si una persona tiene anemia o no, lo cual depende de su nivel dehemoglobina en la sangre, de su edad y de su sexo. Si el nivel de hemoglobina quetiene una persona es menor que el rango que le corresponde, se determina su resultadocomo positivo y en caso contrario como negativo. La tabla en la que el medico se basapara obtener el resultado es la siguiente:

EDAD Nivel hemoglobina0¡ 1 mes 13¡ 26 g%> 1 y · 6 meses 10¡ 18 g%> 6 y · 12 meses 11¡ 15 g%> 1 y · 5 a~nos 11:5¡ 15 g%> 5 y · 10 a~nos 12:6¡ 15:5 g%> 10 y · 15 a~nos 13¡ 15:5 g%mujeres > 15 a~nos 12¡ 16 g%hombres > 15 a~nos 14¡ 18 g%

64. Una instituci¶on educativa estableci¶o un programa para estimular a los alumnos con buenrendimiento acad¶emico y que consiste en lo siguiente:

(a) Si el promedio es de 9.5 o mas y el alumno es de preparatoria, entonces este podr¶acursar 55 unidades y se le har¶a un 25% de descuento.

(b) Si el promedio es mayor o igual a 9 pero menor que 9.5 y el alumno es de preparatoria,entonces este podr¶a cursar 50 unidades y se le har¶a un 10% de descuento.

(c) Si el promedio es mayor que 7 y menor que 9 y el alumno es de preparatoria, estepodr¶a cursar 50 unidades y no tendr¶a ning¶un descuento.

(d) Si el promedio es de 7 o menor, el numero de materias reprobadas es de 0 a 3 y elalumno es de preparatoria, entonces podr¶a cursar 45 unidades y no tendr¶a

(e) descuento.

Page 137: Crestomatía

8.7. EJERCICIOS DEL CAP¶ITULO 137

(f) Si el promedio es de 7 o menor, el numero de materias reprobadas es de 4 o mas y elalumno es de preparatoria, entonces podr¶a cursar 40 unidades y no tendr¶a

(g) ning¶un descuento.

(h) Si el promedio es mayor o igual a 9.5 y el alumno es de profesional, entonces podr¶acursar 55 unidades y se le har¶a un 20% de descuento.

(i) Si el promedio es menor de 9.5 y el alumno es de profesional, entonces podr¶a cursar55 unidades y no tendr¶a descuento.

Obtener el total que tendr¶a que pagar un alumno si la colegiatura para alumnos de profe-sional es de $300 por cada cinco unidades y para alumnos de preparatoria es de $180 porcada cinco unidades.

65. Que lea tres n¶umeros diferentes y determine el n¶umero medio del conjunto de los tresn¶umeros (el n¶umero medio es aquel que no es ni mayor, ni menor).

66. Escribir un algoritmo que convierta los grados a radianes.

67. Escribir un algoritmo que pida un valor entero que equivale a una cantidad de $ y calculea cuantos billetes de 10.000, 5.000, 1.000, 500 monedas de 100, 50, 10 y 1.

68. Escribir un algoritmo que pida al usuario la velocidad en m/s y el radio de la circunferenciade la pista, y como resultado el algoritmo devuelve el tiempo que tarda el atleta en dar 2vueltas a la pista, sabiendo que el atleta descansa 1 minuto cada 1000 metros.

69. >Cu¶ales y cu¶antos son los n¶umeros primos comprendidos entre 1 y 1000?

70. Calcular el m¶aximo de n¶umeros positivos introducidos por teclado, sabiendo que metemosn¶umeros hasta que introduzcamos uno negativo. El negativo no cuenta.

71. Determinar cuales son los m¶ultiplos de 5 comprendidos entre 1 y N .

72. Al ¯nal de curso deseamos saber cu¶al ha sido el alumno de primer a~no con mejor notamedia. Se sabe que este a~no entraron 150 alumnos y que en primero todos tienen 5asignaturas. Dar el nombre y la nota media.

73. Se coloca un capital C, a un interes I, durante M a~nos y se desea saber en cuanto sehabr¶a convertido ese capital en m a~nos, sabiendo que es acumulativo.

74. Dada una fecha en formato dia/mes/a~no determinar el n¶umero de d¶³as y el nombre delmes de dicha fecha, y sacar por pantalla la fecha convertida a formato de dia "de" mes"de" a~no.

75. Calcular el valor de la serie donde N es un valor que se pasa como par¶ametro al subpro-grama que hace el c¶alculo.

Page 138: Crestomatía

138 CAP¶ITULO 8. ALGORITMOS SECUENCIALES Y CONDICIONALES

Page 139: Crestomatía

Cap¶³tulo 9

Estructuras iterativas o c¶³clicas

² Se llaman problemas repetitivos o c¶³clicos a aquellos en cuya soluci¶on es necesario utilizarun mismo conjunto de acciones que se puedan ejecutar una cantidad especi¯ca de veces. Estacantidad puede ser ¯ja (previamente determinada por el m¶etododor) o puede ser variable (estaren funci¶on de alg¶un dato dentro del m¶etodo).Los ciclos se clasi¯can en:

{ Ciclos con un Numero Determinado de Iteraciones:

For

{ Ciclos con un n¶umero Indeterminado de iteraciones:

WhileDo-While

9.1 Ciclos del tipo For

Ejemplo 9.1 Desarrolle un DFD que realice la sumatoria de los n¶umeros enteros compren-didos entre el 1 y el 10, es decir, 1 + 2 + 3 + : : :+ 10.

Soluci¶on: Si bien es cierto que este problema se puede hacer mentalmente, el DFD de laFig. 9.1 ilustra c¶omo hacerlo mediante un ciclo. >Qu¶e modi¯caci¶on se debe hacer si la suma eshasta un mill¶on?

² Ciclos del tipo For: Son aquellos en que el n¶umero de iteraciones se conoce antes de ejecutarseel ciclo. La forma de esta estructura es la siguiente:

For ( i = V alor Inicial ; condici¶on; Incremento/decremento)f

Accion 1;Accion 2;

g // Fin For

139

Page 140: Crestomatía

140 CAP¶ITULO 9. ESTRUCTURAS ITERATIVAS O C¶ICLICAS

Figura 9.1: DFD.

Donde:

1. i es una variable que lleva la cuenta de las iteraciones.

2. V alor Inicial corresponde al primer valor que tomar¶a i.

3. Valor corresponde al ¶ultimo valor permitido para continuar iterando.

4. Incremento/decremento i corresponde al avance o retroceso que tendr¶a i

Ejemplo 9.2 Calcular el promedio de un alumno que tiene 7 cali¯caciones en la materia deDise~no Estructurado de Algoritmos. Primero haga un m¶etodo sin emplear ciclos y luego otroempleando ciclos.

Soluci¶on:

Alternativa 1 (Sin considerar iteraci¶on)

void CalcProm()f // Inicio°oat Nota1, Nota2, Nota3, Nota4, Nota5, Nota6, Nota7 ;°oat Promedio ;Escriba (\D¶e las 7 notas:");Leer(Nota1; Nota2; Nota3; Nota4; Nota5; Nota6; Nota7);Promedio = (Nota1 +Nota2 +Nota3 +Nota4 +Nota5 +Nota6 +Nota7)=7;Escribir(Promedio);

g // Fin

Page 141: Crestomatía

9.1. CICLOS DEL TIPO FOR 141

Alternativa 2 (Considerar iteraci¶on)

void CalcProm()f // Inicio

°oat Nota ;°oat Promedio, Suma ;int NumNotas, iEscriba(\Cu¶antas notas va a leer:");Leer(NumNotas);Suma = 0;for (i = 1; i <= NumNotas; i++)f Escriba(\D¶e la nota", i, \: ");

Leer( Nota);Suma = Suma+Nota ;

g // Fin ParaPromedio = Suma=NumNotas ;Escribir(\Promedio = ", Promedio);

g // Fin

>Cual alternativa es m¶as interesante de implementar?, > Por qu¶e?

Ejemplo 9.3 Haga una m¶etodo que escriba los n¶umeros del 1 al 500.

Soluci¶on:

void Escriba()f // inicio

Int i ; // contadorfor( i = 1; i <= 500; i++)

Escriba(i);g// ¯n

Ejemplo 9.4 Haga una m¶etodo que escriba los n¶umeros pares del 1 al 1000.

Soluci¶on:

void ImprimePar()f // inicio

Int i; // contadorfor(i = 2; i <= 1000; i = i+ 2)Escriba(i);

g// ¯n

Page 142: Crestomatía

142 CAP¶ITULO 9. ESTRUCTURAS ITERATIVAS O C¶ICLICAS

Ejemplo 9.5 Haga una m¶etodo que escriba los n¶umeros impares del 1 al 1000.

Soluci¶on:

void ImprimeImpar()f // inicioInt i; // contadorfor( i = 1; i <= 1000; i = i+ 2)

Escriba(i);g// ¯n

Ejemplo 9.6 Leer 10 n¶umeros y obtener su cuadrado y su cubo.

Soluci¶on:

void CalcCuadCub()f // Inicio

int Numero, Cuadrado, Cubo;int i;for ( i = 1; i <= 10; i++)f Escriba(\D¶e un n¶umero: ");Leer( Numero);Cuadrado = Numero ¤Numero ;Cubo = Cuadrado ¤Numero ;Escribir(Cuadrado; Cubo);g // Fin Para

g // Fin

Ejemplo 9.7 Haga un m¶etodo que escriba los n¶umeros m¶ultiplos de 7 del 1 al 1000.

Soluci¶on:

void Escriba()f // inicio

Int i ; // contadorfor(i = 7; i <= 1000; i = i+ 7)Escriba(i);

g// ¯n

Ejemplo 9.8 Haga una m¶etodo que lea un n¶umero entero proporcionado por el usuario yescriba todos los divisores que este posee.

Page 143: Crestomatía

9.1. CICLOS DEL TIPO FOR 143

void ImprimaDivisores()f

int n; // n¶umero dado por el usuarioint i; // contadorEscriba(\D¶e un n¶umero");Lea(n);for(i = 1; i <= n; i++)f if(n%i == 0)

Escriba(i);g

g

Ejemplo 9.9 Haga una m¶etodo que calcule la suma 1 + 2 + 3 + ¢ ¢ ¢+ 100 =100Xk=1

k.

Soluci¶on:

int CalcSuma()f

int i; // contadorint suma; // acumuladorsuma = 0;for (i = 1; i <= 100; i++)suma = suma+ i;

Return(suma);g

Ejemplo 9.10 Haga un m¶etodo que calcule la suma 2 + 4 + 6 + ¢ ¢ ¢+ 1000 =500Xk=1

2k.

Soluci¶on:

int CalcSuma()f

int i;// contadorint suma; // acumuladorsuma = 0;for (i = 2; i <= 1000; i = i+ 2)suma = suma+ i;

Return(suma);g

Page 144: Crestomatía

144 CAP¶ITULO 9. ESTRUCTURAS ITERATIVAS O C¶ICLICAS

Ejemplo 9.11 Dise~nar un m¶etodo que calcule la suma de los cuadrados de los n primeros

n¶umeros enteros positivos. Dicho de otra forma queremos calcularnXi=1

i2.

int CalcSumaCuadrados(int n)f

int i;// contadorint suma; // acumuladorsuma = 0;for (i = 1; i · n; i++)suma = suma+ i ¤ i;

Return(suma);g

Ejemplo 9.12 Dise~nar un m¶etodo par calcular la suma de los primeros n t¶erminos de la serie:

1¡ 12+1

4¡ 16+1

8¡ 1

10+1

12¡ : : :

Soluci¶on:

°oat SumaSerie(int n)f

°oat suma = 1;int i, signo = ¡1;for(i = 1; i · n¡ 1; i++ )fsuma = suma+ signo=(2 ¤ i);signo = ¡signo;

gReturn(suma) ;

g

Ejemplo 9.13 Haga una m¶etodo que reciba un n¶umero entero y retorne la suma de todoslos divisores que este posee.

Soluci¶on:

int CalcSumaDiv(int n)f

int i; // contadorint suma; // acumuladorsuma = 0;

Page 145: Crestomatía

9.1. CICLOS DEL TIPO FOR 145

for(i = 1; i <= n; i++)if(n%i == 0)

suma = suma+ i; // ojo aqu¶³Return(suma);

g

Ejemplo 9.14 Haga una m¶etodo que reciba (como par¶ametro) un n¶umero entero y determinec¶uantos divisores posee.

int CuantosDiv(int n)f

int i; // contadorint suma; // acumuladorsuma = 0;for(i = 1; i <= n; i++)if(n%i == 0)suma = suma+ 1;

Return(suma);g

Ejemplo 9.15 Haga un m¶etodo que reciba un n¶umero y determine si es primo o no. Recuerdeque un n¶umero entero es primo si posee exactamente dos divisores diferentes.

Soluci¶on: Brindamos dos soluciones. La primera es la siguiente:

bool EsPrimo(int n)f

int i; // contadorint suma; // acumuladorsuma = 0;for(i = 1; i <= n; i++)if(n%i == 0)

suma = suma+ 1;if(suma == 2)Return(True);

elseReturn(False);

g

En la siguiente soluci¶on podemos emplear (mediante una invocaci¶on) el m¶etodo desarrolladoen el Ejemplo (9.14).

Page 146: Crestomatía

146 CAP¶ITULO 9. ESTRUCTURAS ITERATIVAS O C¶ICLICAS

bool EsPrimo(int n)f

if (CuantosDiv(n) == 2)Return(True);

elseReturn(False);

g

Ejemplo 9.16 Haga una m¶etodo que imprima los n¶umeros primos entre 1 y 1000.

Soluci¶on: Brindamos dos soluciones. La primera es la siguiente:

void ImprimaPrimos()fint n; // n¶umero examinadoint i; // contadorint suma; // acumuladorfor (n = 1;n <= 1000;n++)

fsuma = 0;for(i = 1; i <= n; i++)if (n%i == 0)suma = suma+ 1;

if (suma == 2)Escriba(n);

gg

La otra soluci¶on es invocando el m¶etodo desarrollado en el Ejemplo 9.15.

void ImprimaPrimos()fint n; // n¶umero examinadofor (n = 1;n <= 1000;n++)

if (EsPrimo(n)== True)Escriba(n);

g

Ejemplo 9.17 Un n¶umero se llama perfecto si este coincide con la suma de los divisoresinferiores a ¶el. Por ejemplo, el 6 es perfecto pues los divisores inferiores a ¶el son 1, 2 y 3.Notamos que se cumple la identidad 6 = 1 + 2 + 3. El 8 no es perfecto pues 86= 1 + 2 + 4.Haga un m¶etodo que determine si el n¶umero recibido es perfecto o no.

Page 147: Crestomatía

9.1. CICLOS DEL TIPO FOR 147

bool EsPerfecto(int n)f

int i; // contadorint suma; // acumuladorsuma = 0;for(i = 1; i < n; i++)if (n%i == 0)

suma = suma+ i;if (suma == n)Return(True);

elseReturn(False);

g

Se puede dar otra soluci¶on empelando el m¶etodo desarrollado en el Ejemplo (9.13).

bool EsPerfecto(int n)f

if (CalcSumaDiv(n) == 2 ¤ n)Return(True)

elseReturn(False);

g

Ejemplo 9.18 Haga una m¶etodo que determine los n¶umeros perfectos entre 1 y 1000.

Soluci¶on: Brindamos dos soluciones. La primera es la siguiente:

void ImprimaPerfectos()f

int n; // n¶umero examinadoint i; // contadorint suma; // acumuladorfor(n = 1;n <= 1000;n++)fsuma = 0;for(i = 1; i < n; i++)if (n%i == 0)suma = suma+ i;

if (suma == n)Escriba(n);

gg

Page 148: Crestomatía

148 CAP¶ITULO 9. ESTRUCTURAS ITERATIVAS O C¶ICLICAS

Podemos dar otra soluci¶on invocando el m¶etodo desarrollado en el Ejemplo (9.17). Veamos:

void ImprimaPerfectos()f

int n; // n¶umero examinadofor(n = 1;n <= 1000;n++)

if (EsPerfecto(n) == True)Escriba(n);

gg

Page 149: Crestomatía

9.1. CICLOS DEL TIPO FOR 149

9.1.1 Ejercicios usando un ciclo FOR

² Use la instrucci¶on FOR para resolver los siguientes problemas.1. Leer 10 n¶umeros e imprimir solamente los n¶umeros positivos

2. Leer 20 n¶umeros e imprimir cu¶antos son positivos, cu¶antos negativos y cu¶antos cero.

3. Leer 15 n¶umeros negativos y convertirlos a positivos e imprimir dichos n¶umeros.

4. Suponga que se tiene un conjunto de notas ¯nales de un grupo de 40 alumnos. Escribirun m¶etodo para calcule el promedio de las notas y la cali¯caci¶on ¯nal m¶as baja de

5. todo el grupo.

6. Calcular y escribir la tabla de multiplicar de un n¶umero cualquiera. Escribir el multipli-cando, el multiplicador y el producto.

7. Simular el comportamiento de un reloj digital, escribiendo la hora, minutos y segundos deun d¶³a desde las 0:00:00 horas hasta las 23:59:59 horas

9.1.2 Ejemplos adicionales

Ejemplo 9.19 >Cu¶al es el valor de la variable booleana test despu¶es de la ejecuci¶on de lossiguientes bucles?

1.

test = V ERDADfor(contador = 1; contador · N ; contador ++)test = NOT test

2.

test = (N%2 == 0);for(contador = 1; contador · N ; contador ++)test = NOT test

Soluci¶on:

1. En este caso el valor de la variable depende de si N es par o impar: Si N es un n¶umero parla variable test ser¶a VERADADERA. Si por el contrario es un n¶umero impar la variableser¶a FALSA.

2. Al contrario que en el caso anterior el valor de la variable NO depende del n¶umero N . SiN es par entonces la primera asignaci¶on (test = (NMOD2 = 0)) da a la variable test elvalor de VERDADERO. Como el bucle itera un n¶umero par de veces (ya que N es par),la variable test se queda como est¶a, es decir, test ser¶a VERDADERO. Si el n¶umero Nes impar la variable test com¶enzar¶a con el valor FALSO. Al iterar el bucle un n¶umeroimpar de veces (ya que N es impar), la variable test cambia su valor, es decir, test ser¶aVERDADERO.

Page 150: Crestomatía

150 CAP¶ITULO 9. ESTRUCTURAS ITERATIVAS O C¶ICLICAS

Ejemplo 9.20 En cada uno de los siguientes segmentos indicar el valor que se imprimir¶apara la variable w. Suponer que todas las variables son enteras.

1. w = 0;for(i = 1; i · 10; i++)w = w + 1;

Print(w);

2. w = 0;for(i = 4; i · 36; i = i+ 4)w = w + 1

Print(w);

3. w = 0;for(i = 1; i · 14; i++)for( j = 1; j · 8; j ++)w = w + 1

Print(w);

4. w = 0;for(i = 10; i ¸ 1; i¡¡)w = w + 1;

Print(w);

Soluci¶on:

1. En este caso el bucle da 10 vueltas, por lo tanto, la variable w valdr¶a 10.

2. Como el bucle est¶a de¯nido para que el incremento sea de 4, dar¶a 8 vueltas antes de llegara 32 (porque 32=4 = 8) adem¶as como w empieza en 0 y por cada vuelta se le suma 1, elresultado ser¶a: w = 9.

3. Por cada vuelta que d¶e el primer bucle, el segundo bucle de dentro da 8 vueltas w = w+1.Como el primero da 14 vueltas y por cada vuelta se le suma uno a la variable quedar¶³a:14 ¤ 8 = 112. Como comienza valiendo 0, el valor de w ser¶a 113.

4. El bucle est¶a de¯nido para que decrezca, entonces deber¶³a estar de¯nido el valor de i, parasaber si llega a 10, suponiendo que llega, el bucle dar¶³a 9 vueltas y la variable w tendr¶³ael valor de 10, ya que comienza en 0 y en cada vuelta se le suma 1.

9.2 Ciclos del tipo While

² Ciclos del tipo While: Son aquellos en que el n¶umero de iteraciones no se conoce con exactitudo bien no se conoce del todo, ya que esta dado en funci¶on de una condici¶on dentro del programa.

² While (Mientras): Esta es una estructura que repetir¶a un proceso durante \N" veces, donde\N" puede ser ¯jo o variable. Para esto, la instrucci¶on se vale de una condici¶on que es la que

Page 151: Crestomatía

9.2. CICLOS DEL TIPO WHILE 151

debe cumplirse para que se siga ejecutando. Cuando la condici¶on ya no se cumple, entonces yano se ejecuta el proceso. La forma de esta estructura es la siguiente:

while (Condici¶on)f

Acci¶on 1;Acci¶on 2;...Acci¶on N ;

g // Fin Mientras

² Es sumamente importante garantizar que, dentro de las instrucciones subordinadas al While,haya una instrucci¶on que haga la condici¶on eventulamente falsa para hacer que el ciclo termine.Si esto no ocurre, estamos ante lo que se conoce como un enciclamiento y esto hace que se d¶ela sensaci¶on de que la computadora \se peg¶o" o \se congel¶o".

² Todos los ciclos que hemos realizado con el FOR podemos reescribirlos empleando el While.

Ejemplo 9.21 Leer 10 n¶umeros y obtener su cuadrado y su cubo.

Soluci¶on:

void ImprimaCuadCub()f // Inicio

int Numero, Cuadrado, Cubo ;int i = 1;while (i <= 10)f

Escriba(\D¶e el n¶umero: ");Leer(Numero);Cuadrado = Numero ¤Numero;Cubo = Cuadrado ¤Numero;Escribir(Cuadrado; Cubo);i = i+ 1; // no olvidar incrementar el contador

g; // Fin Whileg // Fin

Ejemplo 9.22 Haga un algoritmo que lea n¶umeros del usuario mientras este no ingrese unn¶umero negativo.

Soluci¶on:

Page 152: Crestomatía

152 CAP¶ITULO 9. ESTRUCTURAS ITERATIVAS O C¶ICLICAS

void LeerNum()f

°oat n; // valor leidoEscriba(\D¶e un n¶umero");Lea(n);while (n >= 0)f

Escriba(\D¶e un n¶umero");Lea(n);

gEscriba("Dejamos de leer pues el ¶ultimo n¶umero le¶³do es negativo");

g

Ejemplo 9.23 Haga un algoritmo que lea n¶umeros del usuario mientras este no ingrese unn¶umero negativo. Al terminar debe indicarse cu¶antos n¶umeros ley¶o.

Soluci¶on:

void Cuantos()f

int suma; // acumulador°oat n; // valor le¶³dosuma = 1;Escriba(\D¶e un n¶umero");Lea(n);while (n >= 0)fEscriba(\D¶e un n¶umero");Lea(n);suma++;

g;Escriba(\Se leyeron", suma, \ numeros");Escriba("Dejamos de leer pues el numero es negativo");

g

Ejemplo 9.24 Si dividimos 4 entre 2, obtenemos 2, si tomamos ese 2 y lo dividimos entredos obtenemos 1, si tomamos ese 1 y lo dividimos entre 2 obtenemos 0.5, y continuamos as¶³sucesivamente. Si se empieza con 4, haga un programa para determinar cu¶antas veces hay quedividir para obtener un n¶umero menor que 0.00001.

Soluci¶on:

Page 153: Crestomatía

9.2. CICLOS DEL TIPO WHILE 153

int CuantasVeces()f

int i; // contador°oat x; // valor que se esta dividiendoi = 0;x = 4;while (x >= 0:00001)fx = x=2;i++;

gReturn(i);

g

Ejemplo 9.25 En cada uno de los siguientes segmentos de m¶etodos, indicar cu¶ando el ciclotermina y cu¶ando no lo hace. Suponer que todas las variables son enteras.

1.

Contador= 0;Total =0;While (Contador ¸ 0)

Total = Total + 2;

2. Contador =0;Total = 0;While (Contador <= 10)fTotal = Total +2;Contador = Contador+1;

gSoluci¶on:

1. El ciclo no acabar¶³a nunca porque Contador ser¶a siempre mayor o igual que 0, y a Totalse le sumar¶³a 2 hasta in¯nito.

2. El ciclo acabar¶³a despu¶es de dar 11 vueltas, ya que en ese instante llegar¶³a a 10 y saldr¶³adel bucle. El valor ¯nal de Total ser¶a 22 porque por cada vuelta se le suma 2. El valor¯nal de Contador ser¶a 12, porque en cada vuelta se le va sumando 1 (entonces tendr¶³amos11) y cuando vale 0 se le suma tambi¶en uno, por lo que quedar¶³a 11 + 1 = 12.

Ejemplo 9.26 Cu¶ando se ejecuta el siguiente algoritmo, >cu¶antas iteraciones del bucle serealizar¶an?

Page 154: Crestomatía

154 CAP¶ITULO 9. ESTRUCTURAS ITERATIVAS O C¶ICLICAS

Numero = 2;hecho = False;While (Not hecho)fNumero = Numero ¤ 2;if(Numero > 64)

hecho = Trueg

Soluci¶on: El bucle se ejecuta 6 veces, ya que en la quinta iteraci¶on, el valor de Numero es64. Es entonces cuando entra valiendo 128, por lo tanto hecho entra con True y el bucle acaba.

Ejemplo 9.27 Considere el siguiente m¶etodo:

void Escr(Char ch; int long)f

While long > 0fPrint(ch);Long = long ¡ 1;

gg1. Si ch tiene el valor 'X' y n¶umero el valor 5, >cu¶al ser¶³a el efecto de ejecutar cada una delas siguientes llamadas al m¶etodo?

(a) Escr(ch; 4 ¤ numero¡ 12);(b) Escr(ch,6);

(c) Escr(5,numero);

(d) Escr('/',numero);

(e) Escr('.',6);

(f) Escr('p',¡10);2. Escriba llamadas al m¶etodo \Escr" para que cuando se ejecuten produzcan las siguientessalidas:

(a) guiones sucesivos

(b) veces tantos espacios en blanco como el valor de numero

(c) el valor actual de ch 14 veces

Soluci¶on: El c¶odigo solicitado es como sigue:

1. (a) Escr(ch; 4 ¤ numero ¡ 12): Long vale 8 y el bucle While ¯nalizar¶a cuando valga 0,lo cual ocurre cuando el bucle da 8 vueltas, es decir, cuando escriba 8 veces x en lapantalla.

Page 155: Crestomatía

9.2. CICLOS DEL TIPO WHILE 155

(b) Escr(ch; 6): En este caso escribe 6 veces el valor de ch en pantalla, es decir, escribe 6x.

(c) Escr(5; numero): La llamada no es correcta, porque para ser un car¶acter tiene que irentre comillas, por lo tanto tomar¶a 5 como un entero, pero como est¶a de¯nido paraun car¶acter no har¶a nada.

(d) Escr(/,numero): En este caso la llamada es correcta, as¶³ que escribir¶a 5 / en lapantalla.

(e) Escr(.,6): Como en los casos anteriores, la llamada es correcta lo que har¶a, en estecaso, es escribir 6 . en pantalla

(f) Escr(p,¡10): La llamada en este caso es correcta, pero el procedimiento es nulo,porque no entra en bucle While, ya que ¡10 no es mayor que cero.

2. (a) guiones sucesivos: Lo que debemos escribir en este caso es: Escr('-',35)

(b) veces tantos espacios en blanco como el valor de numero: En este caso escribire-mos:Escr(' ',6 ¤ numero)

(c) el valor actual de ch 14 veces: Aqu¶³ pondr¶³amos Escr(ch,14), en este caso ch no vaentre comillas porque es una variable a la que le asignamos un valor, si lo pusi¶eramosentre comillas no escribir¶³a su valor sino 'ch'.

Ejemplo 9.28 >Qu¶e escribir¶a el siguiente bucle?

Numero = 1;While (Numero < 11)f

Numero = Numero+ 1;Print(Numero);

g

Soluci¶on: A la variable Numero en cada vuelta del bucle While se le suma 1, como entraen el bucle valiendo 1, ir¶a tomando valores desde 2 hasta 11 que ser¶a su valor ¯nal, ya que elbucle acaba cuando Numero es mayor que 11.

Ejemplo 9.29 >Cu¶antas veces se ejecutar¶a la Acci¶on 1?

Cont = 0;While(Cont<10)fCont = Cont+ 1;If(Cont == 10)Accion 1

g

Page 156: Crestomatía

156 CAP¶ITULO 9. ESTRUCTURAS ITERATIVAS O C¶ICLICAS

Soluci¶on:

La Accion 1 no se ejecutar¶a nunca porque, seg¶un el dise~no, para que se ejecute la variableCont tiene que ser igual a 10, pero la orden condicional If est¶a dentro de un bucle While quese ejecuta s¶olo si la variable Cont es menor que 10, por lo tanto, no se ejecutar¶a en ning¶unmomento ya que Cont no llega a ser nunca 10.

Para que la Accion 1 se ejecute se deber¶³a cambiar una de las ¶ordenes para que se cumpla lacondic¶on if, por ejemplo:

Cont = 0;While(Cont <= 10)fCont = Cont+ 1;if(Cont==10)Accion 1

g

Ejemplo 9.30 Dada una cantidad de dinero en euros se desea conocer el n¶umero m¶³nimo demonedas en las que se descompone dicha cantidad. Las monedas que se han de tener en cuentapara su descomposici¶on son las de 2, 1, 0.50, 0.20, 0.10, 0.05, 0.02 y 0.01 euros.

Soluci¶on:

void Cambio dinero(°oat dinero);f

// cantidad de dinero que se tiene,dinero ¸ 0.

int m2, m1, m05, m02,m01, m005, m002, m001;

// cantidad m¶³nima de monedas// en las que se descompone, de 2,1, 0.5,//0.2, 0.1, 0.05, 0.02 y 0.01.°oat resto;m2 = 0; m1 = 0; m05 = 0;m02 = 0; m005 = 0; m002 = 0;m001 = 0;resto=dineroWhile(resto ¸ 2)fresto = resto¡ 2;m2 = m2 + 1;

gWhile(resto ¸ 1)

fresto = resto¡ 1;m1 = m1 + 1;

gWhile(resto ¸ 0:5)fresto = resto¡ 0:5;m05 = m05 + 1;

gWhile(resto ¸ 0:2)fresto = resto¡ 0:2;m02 = m02 + 1;

gWhile(resto ¸ 0:1)fresto = resto¡ 0:1;m01 = m01 + 1;

gWhile(resto ¸ 0:05)

Page 157: Crestomatía

9.2. CICLOS DEL TIPO WHILE 157

fresto = resto¡ 0:05;m005 = m005 + 1;

gWhile(resto ¸ 0:02)fresto = resto¡ 0:02;m002 = m002 + 1;

gWhile(resto ¸ 0:01)

fresto = resto¡ 0:01;m001 = m001 + 1;

g// SI resto > 0 ENTONCES m001 = 1// Esto puede sustituir al ¶ultimo WhilePrint(m2;m1;m05;m02);Print(m005;m002;m001);

g

Ejemplo 9.31 Dar tres formas diferentes de cambiar el siguiente bucle de forma que se ejecute20 veces en lugar de 19. >Cu¶al de los tres cambios hace que el valor de Cont vaya desde 1 a 20?

Cont = 1;While(Cont < 20)Cont = Cont+ 1;

Soluci¶on:

Primer cambio: lo que vamos a hacer para que el bucle llegue hasta 20,en lugar de hasta 19,es poner un igual (·) al de¯nir Cont en el bucle While, de esta forma contar¶a desde 1 hasta20, quedar¶³a:

Cont = 1;While(Cont · 20)Cont = Cont+ 1;

Segundo cambio: lo que haremos ser¶a de¯nir Cont desde 0 y dejar el enunciado como estaba,as¶³ el bucle se ejecutar¶a 20 veces:

Cont = 0;While(Cont < 20)Cont = Cont+ 1;

Tercer cambio: en este caso de¯niremos Cont en el bucle While para que llegue hasta 20, loharemos poniendo que sea menor que 21:

Cont = 1;While(Cont < 21)Cont = Cont+ 1;

Page 158: Crestomatía

158 CAP¶ITULO 9. ESTRUCTURAS ITERATIVAS O C¶ICLICAS

Ejemplo 9.32 Cambiando simplemente el orden de las sentencias (sin cambiar c¶omo se haescrito ninguna de ellas), hacer que el bucle siguiente escriba los n¶umeros del 1 al 10.

Numero = 1;while(Numero < 11)f

Numero = Numero+ 1;Print(Numero);

g

Soluci¶on: Lo ¶unico que debemos hacer es cambiar la posici¶on de las sentencias que hay dentrodel bucle while. El bucle quedar¶³a:

Numero = 1;while(Numero < 11)f

Print(Numero);Numero = Numero+ 1;

g

9.3 Ciclos del tipo Do{While

² Esta es una estructura similar en algunas caracter¶³sticas, a la anterior. Repite un proceso unacantidad de veces, pero a diferencia del While, el Do{While lo hace cuando menos una vez, yaque la condici¶on se eval¶ua al ¯nal del proceso, mientras que en la estructura While puede serque nunca llegue a entrar si la condici¶on no se cumple desde un principio.

² La estructura de un ciclo Do{While es la siguiente:

Dof

instrucci¶on1;instrucci¶on2;...instrucci¶onN ;

g while (condici¶on);

² Es sumamente importante garantizar que, dentro de las instrucciones subordinadas al Do{While, haya una instrucci¶on que haga la condici¶on eventulamente falsa para hacer que el ciclotermine. Si esto no ocurre, estamos ante lo que se conoce como un enciclamiento.

Page 159: Crestomatía

9.3. CICLOS DEL TIPO DO{WHILE 159

Ejemplo 9.33 Haga un algoritmo que lea n¶umeros del usuario mientras este no ingrese unn¶umero negativo.

Soluci¶on:

void LeaNums()f

°oat n; // valor leidodofEscriba(\D¶e un n¶umero");Lea(n);

gwhile (n >= 0);Escriba("Dejamos de leer pues el ¶ultimo es negativo");

g

Ejemplo 9.34 Haga un algoritmo que lea n¶umeros del usuario mientras este no ingrese unn¶umero negativo. Al terminar debe indicarse cu¶antos n¶umeros ley¶o.

Soluci¶on:

void LeaNum()fint suma; // contador°oat n; // valor le¶³dosuma = 1;dofEscriba(\D¶e un n¶umero");Lea(n);suma++;gwhile (n >= 0);Escriba("Se leyeron \, suma, " numeros");Escriba("Dejamos de leer pues el numero es negativo");

g

Ejemplo 9.35 Desarrollar un m¶etodo que sea capaz de dibujar la una pir¶amide de asteriscosdada la altura. La pir¶amide se podr¶a dibujar de las formas siguientes seg¶un la opci¶on elegida:(ejemplo para altura 4)

Page 160: Crestomatía

160 CAP¶ITULO 9. ESTRUCTURAS ITERATIVAS O C¶ICLICAS

*

* *

* * *

* * * *

*

***

*****

*******

void Asteriscos()fint altura; int opcion

// altura da No. de ¯las de la pir¶amide;// opci¶on que se elige// (1 y 2 dibuja pir¶amides y// la opci¶on 3 para acabar el programa))

int filas, columnas, blancos;DoRead(opcion);Switch(opcion)f

Case 1:DoRead(altura);

While(altura < 0);for(filas = 1; filas · altura; filas++ )ffor(blancos = 1; blancos · altura¡ filas; blancos++)Print(' ')

for(columnas = 1; columnas · 2 ¤ filas¡ 1; columnas++)Print('*');

PrintLn; // cambia de l¶³neag; break;

2: DoRead(altura)

while(altura < 0);for(filas = 1 <; filas · altura; filas++)ffor(blancos = 1; blancos · altura¡ filas; blancos++)Print(' ');

for(columnas = 1; columnas · filas; columnas++)Print('*');

PrintLn; // cambia de l¶³neag; break;

gWhile(opcion6= 3);

g

Page 161: Crestomatía

9.4. RESUMEN 161

Ejemplo 9.36 La divisi¶on entera se puede considerar como una sucesi¶on de restas. El algo-ritmo debe de tratar de contar cuantas veces se puede restar el divisor al dividendo y dichocontador ser¶a el cociente. Cuando ya no se pueda restar m¶as sin que salga un n¶umero positivo,se tendr¶a el resto. Haga un m¶etodo que reciba el divendo y el divisor e imprima el cociente yel resto.

Soluci¶on: El c¶odigo es como sigue:

void Divisi¶onEnteraYResto(int dividendo, divisor)fint cociente; // (resultado de la divisi¶on entera)int resto; // (resto de la divisi¶on)// (Calcular el cociente y el resto)resto = dividendo;// Si dividendo < divisor entonces el dividendo es el restocociente = 0;// Si dividendo < divisor entonces el cociente es 0While(dividendo ¸ divisor)fdividendo = dividendo¡ divisor;cociente = cociente+ 1;

gPrint(\El cociente de la divisi¶on es:", cociente);Print(\El resto es:", resto);

g

9.4 Resumen

² La sentencia While es una construcci¶on de ciclo que permite al programa repetir una sentenciasiempre que el valor de una expresi¶on sea true. Cuando el valor de la expresi¶on es false, seomite cl cuerpo del ciclo y la ejecuci¶on contin¶ua con la primera sentencia despu¶es del ciclo.

² Con la sentencia While, usted construye varios tipos de ciclos que usar¶a una y otra vez. Estostipos de ciclos caen en dos categor¶³as: ciclos controlados por conteo y ciclos controlados porsuceso. En un ciclo controlado por conteo, el cuerpo del ciclo se repite un n¶umero especi¯cadode veces. Se inicializa una variable contadora antes de la sentencia While. Esta variable es lavariable de control del ciclo. La variable de control se prueba contra el l¶³mite en la expresi¶onWhile. La ¶ultima sentencia del cuerpo del ciclo incrementa la var¶³able de control. .

² Los ciclos controlados por suceso contin¶uan ejecut¶andose hasta que algo dentro del cuerpose~nala que se debe detener el proceso de iteraci¶on. Los ciclos controlados por suceso incluyenque prueban un valor centinela en los datos, el ¯nal del c¶odigo o un cambio en la variable debandera.

Page 162: Crestomatía

162 CAP¶ITULO 9. ESTRUCTURAS ITERATIVAS O C¶ICLICAS

² Los ciclos controlados por centinela son ciclos de entrada que contin¶uan con el ingreso (yproceso) de valores de datos hasta que se terminan. Para ponerlos en pr¶actica con la sentenciaWhile, se debe probar el estado del °ujo de entrada usando el nombre del objeto de °ujo comosi fuera una variable booleana. La prueba produce false cuando no hay m¶as valores de datos.

² Una bandera es una variable que se ¯ja en una parte del programa y se prueba en otra. Enun ciclo controlado por bandera, se debe establecer la bandera antes de que comience el ciclo,probada en la expresi¶on While y cambiada en alguna parte del cuerpo del ciclo.

² Contar es una operaci¶on iterativa que sigue la pista de cu¶antas veces se repite un ciclo o cu¶antasveces ocurre alg¶un suceso. Esta cuenta se puede usar en c¶alculos o para controlar el ciclo. Uncontador es una variable que se emplea para contar. Puede ser la variable de control del cicloen un ciclo controlado por conteo, un contador de iteraci¶on en un ciclo de conteo, o un contadorde suceso que cuenta el n¶umero de veces que ocurre una condici¶on particular en un ciclo.

² Sumar es una operaci¶on de iteraci¶on que mantiene un total de ejecuci¶on de ciertos valores. Escomo contar en el sentido de que la var¶³able que contiene la suma se inicializa fuera del ciclo.Sin embargo, la operaci¶on de suma agrega valores desconocidos; la operaci¶on de conteo a~nadeuna constante (1) al contador cada vez .

² Cuando dise~na un ciclo, hay siete puntos a considerar: c¶omo se inicializa, prueba y actualizala condici¶on de terminaci¶on; c¶omo se inicializa, efect¶ua y actualiza el proceso en el ciclo; y elestado del programa al salir del ciclo.

² Para dise~nar una estructura anidada, comience con el ciclo externo. Cuando llegue a dondedebe aparecer el ciclo interno, construya un m¶odulo separado y vuelva despu¶es a su dise~no.

9.4.1 Ejercicios usando un ciclo Do{While

Utilice la instrucci¶on Do{While para resolver los siguientes ejercicios.

1. Una compa~n¶³a de seguros tiene contratados a n vendedores. Cada uno hace tres ventasa la semana. Su pol¶³tica de remuneraciones es que un vendedor recibe un sueldo base,y un 10% extra por comisiones de sus ventas. El gerente de su compa~n¶³a desea sabercuanto dinero obtendr¶a en la semana cada vendedor por concepto de comisiones por lastres ventas realizadas, y cual ser¶a su remuneraci¶on ¯nal, tomando en cuenta su sueldobase y sus comisiones.

2. Una persona desea invertir su dinero en un banco, el cual le otorga un 2% de inter¶es. Cualser¶a la cantidad de dinero que esta persona tendr¶a al cabo de un a~no si la ganancia decada mes es reinvertida?.

3. Se desea obtener el promedio de g grupos que est¶an en un mismo a~no escolar; si cadagrupo puede tener n alumnos, cada alumno puede tener m materias y que en todas lasmaterias se promedian tres notas para obtener el promedio de la materia. Lo que se deseadesplegar es el promedio de los grupos, el promedio de cada grupo y el promedio de cadaalumno.

Page 163: Crestomatía

9.5. EJERCICIOS DEL CAP¶ITULO 163

9.5 Ejercicios del cap¶³tulo

1. >Cu¶ales son las cuatro fases de ejecuci¶on del ciclo?

2. >En qu¶e se asemeja un ciclo controlado por bandera y uno controlado por suceso, y enqu¶e son diferentes?

3. >Promediar un conjunto de valores introducidos por un ciclo implica sumar, contar, oambas cosas?

4. >Qu¶e tipo de ciclo usar¶³a para leer un conjunto de n¶umeros de licencia de conducir hastaque se introduce un n¶umero espec¶³¯co?

5. La sentencia While termina cuando la condici¶on de terminaci¶on se vuelve verdadera.>Verdadero o falso? .

6. El cuerpo de la sentencia While se ejecuta siempre por lo menos una vez. >Verdadero ofalso?

7. Usar un bloque como el cuerpo de la sentencia While permite colocar cualquier n¶umerode sentencias dentro de un ciclo. >Verdadero o falso?

8. Comente con sus compa~neros los siguientes conceptos:

(a) Entrada de ciclo.

(b) Iteraci¶on.

(c) Prueba de ciclo.

(d) Terminaci¶on del Ciclo.

(e) Condici¶on de terminaci¶on.

(f) Ciclo controlado por conteo. g) Ciclo controlado por suceso.

(g) Contador de iteraci¶on. .

(h) Contador de suceso.

(i) Un ciclo que se ejecuta un n¶umero espec¶³¯co de veces.

(j) Cuando el °ujo de control alcanza la primera sentencia dentro de un ciclo.

(k) Una variable que se incrementa cada vez que se encuentra una condici¶on particular.

(l) Cuando se toma la decisi¶on de si comenzar una nueva iteraci¶on o salir.

(m) Un ciclo que termina cuando se encuentra una condici¶on espec¶³fIca.

(n) La condici¶on ocasiona la terminaci¶on del ciclo.

(o) Una variable que se incrementa con cada iteraci¶on de un ciclo.

(p) Cuando el control pasa a la sentencia despu¶es del ciclo.

(q) Un solo paso por un ciclo.

9. Escriba un segmento de c¶odigo usando un ciclo While que produzca los n¶umeros de ¡10a 10.

10. Escriba un segmento de c¶odigo con un ciclo While que sume los enteros, contando desde 1,y se detenga cuando la suma sea mayor que 10 000, imprimiendo el entero que se a~nadi¶oreciente mente a la suma.

Page 164: Crestomatía

164 CAP¶ITULO 9. ESTRUCTURAS ITERATIVAS O C¶ICLICAS

11. Escriba un segmento de c¶odigo iterativo que introduzca hasta 20 puntuaciones (cali¯ca-ciones) enteras desde el teclado y produzca su promedio. Si son menos de 20 puntuaciones,el segmento debe producir a¶un el promedio correcto. Si el archivo contiene m¶as de 20 pun-tuaciones, los n¶umeros adicionales se deben ignorar.

12. Escriba un segmento de c¶odigo que imprima los d¶³as de un mes en formato de calendario.El d¶³a de la semana en que comienza el mes se representa por una variable int, starDay.Cuando starDay es cero, el mes comienza en un domingo. La variable int, days, contieneel n¶umero de d¶³as en un mes. Imprimir un encabezado con los d¶³as de la semana como laprimera l¶³nea de salida.

13. Se podr¶³a extender el c¶odigo del ejercicio anterior para imprimir un calendario para una~no anid¶andolo dentro de un ciclo que repita el c¶odigo 12 veces.

(a) >Qu¶e f¶ormula usar¶³a para calcular el nuevo d¶³a de inicio para el siguiente mes?

(b) >Qu¶e informaci¶on adicional necesitar¶³a para imprimir el calendario para cada mes?

14. Escriba un segmento de c¶odigo que d¶e como resultado los n¶umeros de Fibonacci que sonmenores que 30000. Cada n¶umero de Fibonacci es la suma de sus dos predecesores. Losprimeros dos n¶umeros de Fibonacci son 1 y 1. As¶³, la secuencia comienza con:

1; 1; 2; 3; 5; 8; 13; 21; 34; : : :

Produzca cada n¶umero en una l¶³nea separada.

15. La desviaci¶on est¶andar de un conjunto de datos da un sentido de la dispersi¶on de valoresdentro de su intervalo. Por ejemplo, un conjunto de cali¯caciones de prueba con unadesviaci¶on est¶andar peque~na indica que la mayor¶³a de las cali¯caciones de las personas es-tuvieron muy cerca del promedio. As¶³, algunos profesores emplean la desviaci¶on est¶andarcomo una manera de determinar el intervalo de valores para asignar una cali¯caci¶on par-ticular. Dise~ne y escriba un algoritmo que lea el conjunto de cali¯caciones del teclado yproduzca su media y desviaci¶on est¶andar. La f¶ormula para la desviaci¶on est¶andar es

s =

vuuuuutnnXi=1

x2i ¡Ã

nXi=1

xi

!2n(n¡ 1)

donde n es el n¶umero de valores y xi representa cada uno de los valores. As¶³, para calcularla desviaci¶on est¶andar, se deben sumar los cuadrados de cada uno de los valores y tambi¶enelevar al cuadrado la suma de los valores. Toda esta lectura y suma se puede hacer conun solo ciclo, despu¶es del cual se calculan la media y la desviaci¶on est¶andar. Use nombresde variables signi¯cativos, sangrado apropiado y comentarios adecuados.

16. Modi¯que el segmento de c¶odigo del ejercicio anterior para que tambi¶en produzca la posi-ci¶on del n¶umero de Fibonacci en la secuencia. Por ejemplo:

Page 165: Crestomatía

9.5. EJERCICIOS DEL CAP¶ITULO 165

1 12 13 24 35 56 8

17. Escriba el algoritmo para un programa de n¶omina usando un ciclo mientras con centinela.Para cada empleado, el programa debe leer el nombre, sexo, horas de trabajo, sueldopor hora e imprimir el pago. La segunda parte debe imprimir el pago promedio para lasmujeres y el pago promedio para los hombres.

18. Las potencias de 2 son: 1, 2, 4, 8,16, . . . Para obtener la siguiente potencia se multiplica laanterior por 2. Escribir el algoritmo para un programa que imprima la primera potenciade 2 que pasa de 1000.

19. Escriba un algoritmo para un programa en el que el usuario debe introducir enteros posi-tivos entre 1 y 5. El programa debe informar al usuario cuando haya escrito un n¶umeroque hace que la suma pase de 21, imprimiendo la suma y el ¶ultimo entero introducido yel mensaje "mas de 21".

20. Escriba el algoritmo para un programa que imprima la sucesi¶on completa de ULAM paraun entero de entrada, si la longitud de toda la sucesi¶on es no m¶as de 10. En caso contrarios¶olo se imprimir¶a los 10 primeros enteros de la sucesi¶on. Haga las pruebas de mano parasucesiones de menores de 10 n¶umeros iguales a 10 y mayores de 10. Ejemplo

5: 16, 8, 4, 3, 1.25: 76, 38, 19, 58, 29, 88, 44, 22, 11,34.

21. Lea las P edades de los alumnos de una clase y calcular e imprimir:

(a) Mayor edad

(b) Menor edad

(c) Edad Promedio

(d) Cu¶antas edades son mayores de 45 a~nos.

22. La constante ¼ (3.141592.. ) es muy utilizada en matem¶aticas. Un m¶etodo sencillo decalcular su valor es:

¼ = 4¡ 4=3 + 4=5¡ 4=7 + 4=9¡ 4=11 + : : :+ 4=nHacer un programa para calcular el valor de ¼. El usuario ingresa N .

23. Hacer un programa que lea N n¶umeros y calcule y muestre el cubo y la ra¶³z cuadrada decada uno de ellos.

24. Realizar un algoritmo que calcule el valor de la sumatoria:

x+x3

3+x5

5+x7

7+ : : :+

x2n+1

2n+ 1

Page 166: Crestomatía

166 CAP¶ITULO 9. ESTRUCTURAS ITERATIVAS O C¶ICLICAS

25. El valor de ex se puede aproximar por la suma :

ex = 1 + x+x2

2!+x3

3!+ : : :+

xn

n!

Realizar un algoritmo que permita entrar el valor para x y n y calcule ex.

26. Se pide calcular el seno de x de forma aproximada sumando los n primeros t¶erminos dela serie in¯nita :

senx = x¡ x3

3!+x5

5!¡ x

7

7!+ : : :

en donde x se encuentra en radianes. Realizar un algoritmo que lea x y n calcule el valordel seno de x.

27. Escriba un algoritmo que utilice una estructura for para que encuentre al m¶as peque~node diversos enteros. Suponga que el primer valor le¶³do especi¯ca el n¶umero de valoresrestantes, y que el primer n¶umero no es uno de los enteros a comparar.

28. Escriba un algoritmo que utilice una estructura for para que calcule y despliegue el pro-ducto de los enteros nones del 1 al 15.

29. Una aplicaci¶on interesante de las computadoras es el dibujo de gr¶a¯cos y gr¶a¯cas de barras(algunas veces llamadas "histogramas"). Escriba un algoritmo que lea cinco n¶umeros(cada uno entre 1 y 30). Por cada n¶umero le¶³do, su algoritmo debe desplegar una l¶³neade asteriscos adyacentes que represente dicho n¶umero. Por ejemplo, si su algoritmo lee eln¶umero siete, ¶este debe imprimir

¤ ¤ ¤ ¤ ¤ ¤ ¤30. Una empresa de ventas por correo vende cinco diferentes productos, cuyos precios al

menudeo son: producto 1: $2.98, producto 2: $4.50, producto 3: $9.98, producto 4: $4.49y producto 5; $6.87. Escriba un algoritmo que lea una serie de pares de n¶umeros de lasiguiente manera:

(a) N¶umero de producto.

(b) Cantidad vendida por un d¶³a.

Su algoritmo debe utilizar una instrucci¶on switch para ayudar a determinar el precioal menudeo de cada producto. Su algoritmo debe calcular y desplegar el valor total almenudeo de todos productos vendidos la semana anterior.

31. Escriba un algoritmo que despliegue una tabla de los equivalentes binarios, octales yhexadecimales de los n¶umeros decimales en el rango 1 a 256.

Calcule el valor de ¼ a partir de la serie in¯nita

¼ = 4¡ 43+4

5¡ 47+4

9¡ 4

11+ : : :

Despliegue una tabla que muestre el valor de ¼ por un t¶ermino de la serie, por dos t¶erminos,por tres t¶erminos, etc¶etera. >Cu¶antos t¶erminos de esta serie se deben utilizar para obtener3.14? >3.141 ? >3.1415? >3.14159?

Page 167: Crestomatía

9.5. EJERCICIOS DEL CAP¶ITULO 167

32. (Triple de Pit¶agoras) Un tri¶angulo recto puede tener lados que sean enteros. Un conjunto detres valores enteros para los lados de un tri¶angulo recto se llama Triple de Pit¶agoras. Estostres lados deben satisfacer la relaci¶on de que la suma de los cuadrados de dos de los ladoses igual al cuadrado de la hipotenusa. Encuentre todos los triples de Pit¶agoras para ladol,lado2 e hipotenusa no mayores que 500. Utilice un triple ciclo for anidado que pruebe esasposibilidades. ¶Este es un ejemplo de c¶omputo de fuerza bruta. Usted aprender¶a en cursosde computaci¶on m¶as avanzados que existen muchos problemas interesantes para los queno existen m¶etodos algor¶³tmicos conocidos m¶as que la pura fuerza bruta.

33. Una empresa paga a sus empleados como gerentes (quienes reciben un salario ¯jo semanal),los empleados por hora (quienes reciben una paga ¯ja por hora, por m¶as de las primerascuarenta horas que trabajan, y un "turno y medio", 1.5 veces su paga por hora, portiempo extra trabajado), los empleados por comisi¶on (quienes reciben $250 m¶as el 5.7%de sus ventas brutas semanales), o sus empleados a destajo (quienes reciben un monto ¯jode dinero por cada uno de los elementos que producen; en esta empresa, cada destajistatrabaja s¶olo un tipo de art¶³culo). Escriba un algoritmo para calcular la paga semanalpara cada empleado. Usted no sabe el n¶umero de empleados. Cada tipo de empleadotiene su propio c¶odigo de pago: los gerentes tienen el c¶odigo de pago 1, los empleadospor hora tiene el c¶odigo 2, los empleados por comisi¶on tienen el c¶odigo 3 y los destajistastiene el c¶odigo 4. Utilice un switch para c¶alcular el pago de cada empleado de acuerdocon su c¶odigo de pago. Dentro del switch, indique al usuario (es decir, a la plantilla deempleados) que introduzca la informaci¶on que su algoritmo necesita para calcular el pagode cada empleado, de acuerdo con su c¶odigo de pago.

34. (El problema de Peter Minuit) La leyenda cuenta que, en 1626, Peter Minuit compr¶o la islade Manhattan por $24.00 en un trueque. >Hizo una buena inversi¶on? Para responder aesta pregunta, emplee el algoritmo de inter¶es compuesto para comenzar con un dep¶ositoprincipal de $24.00 y calcular el monto de inter¶es por dep¶osito, si ese dinero se hubieramantenido depositado hasta ahora (381 a~nos hasta el 2007). Ejecute el algoritmo contasas de inter¶es del 5, 6, 7, 8, 9 y 10% para observar las maravillas del inter¶es compuesto.

Page 168: Crestomatía

168 CAP¶ITULO 9. ESTRUCTURAS ITERATIVAS O C¶ICLICAS

Page 169: Crestomatía

Cap¶³tulo 10

Hileras

² Como el estudiantes se habr¶a podido dar cuenta, las hileras son de gran utilidad en progra-maci¶on. En este cap¶³tulo estudiaremos con m¶as detalle este tipo de dato.

² Muchos lenguajes de programaci¶on cuentan con una serie de funciones que facilitan las tareasnormales a la hora de manipular hileras.

² Dependiendo del lenguaje de programci¶on habr¶a funciones m¶as o menos especializadas para elmanejo de hileras. Aqu¶³ abordaremos los m¶as frecuentes.

² En el lenguaje C se habla de la clase String. Esto se re¯ere a que cada variable de tipo Stringes en realidad una instancia del tipo de datos denominado String. Como consencuencia deeste enfoque, una instancia de esta clase cuenta con atributos y m¶etodos. Tales m¶etodos sonprecisamente los que ayudan a simpli¯car el trabajo de manipular una hilera.

² Sin embargo, en otros lenguajes se proprorcionan, por separado, funciones para el manejo dehileras. Nosotros usaremos este enfoque.

² Las cadenas de caracteres son secuencias de caracteres con longitudes que var¶³an (en algunoslenguajes) desde 1 hasta los 255 caracteres. El tipo identi¯cador de las cadenas es normalmentestring.

² Comparaci¶on de cadenas: La comparaci¶on de cadenas es una operaci¶on muy com¶un; estascomparaciones se realizan con base en el orden del c¶odigo ASCII, por ejemplo la cadena \Prue-ba" es menor a la cadena \prueba" ya que el valor del c¶odigo ASCII de P es 80 y el de p es112. Tenemos entonces que la expresi¶on:

\Prueba" < \prueba"

tiene valor de verdad True.

² Existe un caso especial de una cadena, que es cuando no tiene ning¶un caracter en ella, en esemomento decimos que es una cadena nula o vac¶³a. Se recomienda ampliamente inicializar todoslos valores de las cadenas a cadenas nulas al inicio del programa, ya que podr¶³an contener datosextra~nos e indeseables.

169

Page 170: Crestomatía

170 CAP¶ITULO 10. HILERAS

² >C¶omo se declara una hilera? Veamos:

string nombre;string direccion;string apodo =\miesti";

² >C¶omo se asigna un valor a una variable de tipo string? Cuando se declara una variable detipo hilera, esta se puede inicializar de una vez o bien esto puede efectuarse posteriormente.La asignaci¶on se puede hacer tambi¶en por lectura desde teclado. Veamos:

String Nombre, Pais, Direccion;Nombre = \Juan F¶elix ¶Avila";Pais =\Costa Rica"Direccion = \Alajuela, La Garita"string minombre;minombre =\Ana";Lea(minombre);

² >C¶omo se despliega una hilera? Una de las grandes ventajas de la hileras es que leen y seescriben \de golpe". A pesar de estar compuestas por caracteres, las hileras, poseen unadualidad que permite un tratamiento como si fuera una \entidad at¶omica" o, seg¶un convega,accesadando cada una de sus celdas por separada (ampliaremos esto m¶as adelante). Veamosun ejemplo del primer tipo:

string nombre=\Carlos";Print(nombre);

² >C¶omo se unen las hileras? En realidad el t¶ermino correcto no es unir sino concatenar y se re¯erea la construcci¶on de una nueva hilera a partir de dos hileras dadas mediante la yuxtaposici¶onde estas. Veamos un ejemplo:

string aux1=\soy", aux=\feliz";string aux3;aux3 = aux1+aux2;

Despu¶es de ejecutar este c¶odigo aux3 tendr¶a asigando \soyfeliz". Si deseamos que el resultadoquede como \soy feliz" debemos incluir un espacio adicional. Se debe escribir algo como:

string aux1=\soy", aux=\ feliz";string aux3;aux3 = aux1+aux2;

² En algunos lenguajes se utiliza la funci¶on Concat que concatena o combina dos o m¶as cadenasen una. La sintaxis es normalmene algo como

Page 171: Crestomatía

171

Concat(S1 [, S2,..., Sn]: String): String;

As¶³ por ejemplo:

string S;S = Concat('ABC', 'DEF');

deja \ABCDE" en S

² Es importante aclarar que para concatenar cadenas, en este texto, usaremos el signo +.

² El estudiante probablemente ya advirti¶o que el signo + posee entonces una dualidad o polimor-¯smo. Si las expresiones a su lado son num¶ericas, se efect¶ua una suma. Si se trata de hileras,las concatena.

² >C¶omo se acceden las hileras? Una de las caracter¶³sticas m¶as ¶utiles de las hileras es la posibilidadde acceder a cada uno de sus campos o caracteres que la componen. Declaremos, por ejemplo,una hilera:

string nombre = \Viva Costa Rica";

Esta hilera se puede representar como:

'V' 'i' 'v' 'a' ' ' 'C' 'o' 's' 't' 'a' ' ' 'R' 'i' 'c' 'a'

² Dependiendo del lenguaje de programaci¶on, hay dos formas muy utilizadas, para enumerarestos campos.

1. Suponer que el primer campo es el n¶umero 0:

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14'V' 'i' 'v' 'a' ' ' 'C' 'o' 's' 't' 'a' ' ' 'R' 'i' 'c' 'a'

2. Suponer que el primer campo es el n¶umero 1:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15'V' 'i' 'v' 'a' ' ' 'C' 'o' 's' 't' 'a' ' ' 'R' 'i' 'c' 'a'

² Nosotros optamos por el primer enfoque pues es el que se emplea en el lenguaje C que es unode los m¶as utlizados. Sin embargo, la segunda opci¶on puede resultar m¶as natural.

Page 172: Crestomatía

172 CAP¶ITULO 10. HILERAS

10.1 Longitud de una hilera (Length)

² La funci¶on Length o longitud permite determinar la longitud de una hilera es decir el n¶umerode caracteres que la componen, incluyendo los espacios en blanco. Es una funci¶on que tomacomo argumento una cadena de caracteres (string) y devuelve la longitud (integer) de esta. Porejemplo:

string aux;aux = "Costa Rica";Escriba(Length(aux));

En este caso se imprime 10.

Ejemplo 10.1 Haga un m¶etodo que reciba una hilera y escriba por separado cada uno de loscaracteres que la componen.

Soluci¶on:

void ImprimaHilera(string aux)f

int i;for(i = 0; i < Length(aux); i++)Escriba(aux[i]);

g

Ejemplo 10.2 Haga un m¶etodo que reciba una hilera y escriba por separado cada uno delos caracteres que la componen, pero empezando por el ¶ultimo caracter y terminando por elprimero.

Soluci¶on:

void ImprimaHileraInv(string aux)f

int i;for(i = Length(aux)¡ 1; i > ¡1; i = i¡ 1)Escriba(aux[i]);

g

² El concepto de acumulaci¶on que hab¶³amos estudiado cuando abordamos el tema de ciclos tomauna cognotaci¶on diferente cuando lo aplicamos a hileras. El siguiente ejemplo muestra estadiferencia y el comportamiento polim¶or¯co del s¶³mbolo +.

Page 173: Crestomatía

10.1. LONGITUD DE UNA HILERA (LENGTH) 173

Ejemplo 10.3 Haga un m¶etodo que reciba una hilera y devuela la hilera invertida, es decir,empezando por el ¶ultimo caracter y terminando por el primero.

Soluci¶on:

string CalcHileraInv(string aux)f

int i;string aux = "";for(i = Length(aux)¡ 1; i > ¡1; i = i¡ 1)aux = aux + aux[i];

Return(aux);g

² Una palabra o frase que se lee igual de izquierda a derecha, que de derecha a izquierda sedenomina un pal¶³ndromo; por ejemplo, anilina; d¶abale arroz a la zorra el abad. A veces se lesdenomina pal¶³ndrome, sin embargo este es t¶ermino en ingl¶es. Vamos a trabajar un poco estetema. Empezamos con el caso de una palabra que es un pal¶³ndromo.

Ejemplo 10.4 Haga un m¶etodo que reciba una hilera (que presumiblemente contiene unasola palabra) y determine si es un pal¶³ndromo o no.

Soluci¶on:

bool PalabraPal(string tira)f

bool es;// variable para saber si es o no esint i = 0, j;es = True; // suponemos que s¶³ esj = Length(tira)¡ 1; // apunta al ¶ultimo campowhile(i < Length(tira))fif (tira[i]6= tira[j])

es = False; // No es pal¶³ndromo.i++;j¡¡;greturn(es);

g

Debemos notar que este m¶etodo devolver¶a verdadero con palabras tales como ana y salas, porejemplo. Sin embargo devolver¶a falso para las palabras Ana y Salas pues s¶³ distingue entremay¶usculas y min¶usculas. M¶as adelante solventaremos esta situaci¶on.

Page 174: Crestomatía

174 CAP¶ITULO 10. HILERAS

Ejemplo 10.5 Haga un m¶etodo que reciba una hilera y un caracter, como par¶ametros. Elm¶etodo regresa las veces que aparece ese caracter en la hilera.

Soluci¶on:

int CuantasVeces(string tira, char x)f

int i;int suma = 0;for (i = 0; i < Length(tira)¡ 1; i++)if (tira[i] == x)

suma++;return(suma)

g

10.2 Borrando en una hilera (Delete)

² En algunas ocaciones es necesario borrar parte de una hilera. Para esto empleamos un proce-dimiento de borrado llamado Delete. Es un procedimiento que borra caracteres de una cadena.Este procedimiento posee tres par¶ametros:

1. la hilera que ser¶a sujeta de un borrado parcial

2. un valor entero que indica a partir de que posici¶on se efectur¶a el borrado y

3. otro valor entero que determina cu¶antas caracteres se borrar¶an a partir de la posici¶onmencionada.

² En el siguiente ejemplo

String aux = "Costa Rica";Delete(aux, 2, 3);Escriba(aux);

El primer valor, 2, dice a partir de qu¶e car¶acter queremos borrar y el segundo valor, 3, cu¶antoscaracteres vamos a borrar. La variable aux se modi¯ca y queda como \Ca Rica".

² Otro ejemplo es:

string SS := \Me gusta programar en Costa Rica";Delete(S,7,4);

Al terminar S contiene \Me gustogramar en Costa Rica".

Page 175: Crestomatía

10.3. BUSCANDO SUBHILERAS (POS) 175

² Observaciones:

1. Si el ¶³ndice de inicio de borrado es mayor que la longitud de la cadena ning¶un caracter esborrado.

2. Si los caracteres por borrar especi¯ca m¶as caracteres que los que restan en la cadena,entonces el resto de la cadena es borrado.

Ejemplo 10.6 Haga un m¶etodo que reciba una hilera y devuela la segunda mitad de esta, sise trata de hilera de longitud par, y la segunda mitad m¶as un caracter, en caso contrario.

Soluci¶on:

string CalcMitad(string tira)f

Delete(tira, 0, Length(tira)/2);Return(tira)

g

Ejemplo 10.7 Haga un m¶etodo que reciba una hilera y la deje de tama~no de 50 caracteres(esta es la que debe devolver el m¶etodo). Si la hilera en cuesti¶on tiene una longitud menor a50, se completa con asteriscos y si excede 50, se debe recortar.

Soluci¶on:

string Recorte(string tira)f

while (Length(tira) < 50 )tira = tira+0 ¤0;

while(Length(tira) > 50)Delete(tira, Length(tira) ¡1, 1);

Return(tira);g

10.3 Buscando subhileras (Pos)

² Muchas veces es necesario determinar la posici¶on de una hilera dentro de otra. La funci¶on Pos(abreviaci¶on de Position) recibe como par¶ametros dos hileras y devuelve la posici¶on a partirde la cual la primera hilera ocurre dentro de la segunda. Si la hilera en cuesti¶on no se halladentro de la segunda, Pos devuelve un ¡1. Por ejemplo:

Page 176: Crestomatía

176 CAP¶ITULO 10. HILERAS

String aux1, aux2;aux1 = \Costa Rica";aux2 = \Viva Costa Rica";if (Pos(aux1; aux2) > 0)Escriba(\Aparece a partir de la posici¶on", Pos(aux1; aux2) );

elseEscriba(\No aparece. Pos da ¡1");

² Otros ejemplos son:1. Pos(\mi", \mamita") da 2

2. Pos(\ma", \mam¶a") da 0

3. Pos(\mu", \mamita") da ¡1² Observaciones:

1. La funci¶on Pos es sensible a may¶usculas y min¶usculas.

2. Pos devuelve ¡1 cuando no se encuentra la subcadena.

Ejemplo 10.8 Haga un m¶etodo que reciba una hilera y reemplace cada aparici¶on del caracter'a' por el caracter 'u'. El m¶etodo regresa la hilera resultante.

Soluci¶on:

string Sustituya(string tira)f

int i;While (Pos(\a", tira) > ¡1)f

i = Pos(\a", tira);tira[i] = \u";

gReturn(tira);

g

Ejemplo 10.9 Haga un m¶etodo que reciba una hilera, borre los blancos de ¶esta y luegodevuelva la hilera resultante.

Soluci¶on:

string BorreBlancos(string tira)f

int i;

Page 177: Crestomatía

10.3. BUSCANDO SUBHILERAS (POS) 177

While (Pos(\ ", tira) > ¡1)f

i = Pos(\ ", tira);Delete(tira; i; 1);

gReturn(tira);

g

Ejemplo 10.10 Haga un m¶etodo que reciba una hilera y la reemplace todas la letras \a" porla letra \u".

Soluci¶on:

string CambiarAporU(string tira)f

int iWhile (Pos(\a", tira)> ¡1)fi = Pos(\a"; tira);tira[i] = \u";gReturn(tira);

g

Ejemplo 10.11 Haga un m¶etodo que reciba dos caracteres (e y r) y una hilera tira. Elm¶etodo debe sustituir cada aparici¶on de e por r en tira y devolver la hilera resultante.

Soluci¶on:

string ER(char e, r, string tira)f int i;

if (e6= r)while (Pos(e; tira) > ¡1)fi = Pos(e; tira);tira[i] = r;

greturn(tira);

g

Page 178: Crestomatía

178 CAP¶ITULO 10. HILERAS

Ejemplo 10.12 Haga un m¶etodo que recibe una hilera que contiene una palabra en may¶usculay cambie todas las vocales tildadas por la correspondiente sin tildar. El m¶etodo devuelve lahilera resultante.

Soluci¶on: Para este ejercicio usamos el m¶etodo ER (Ejemplo 10.11).

string QuiteTilde(string tira);f

ER(\¶A", \A", tira);ER(\¶E", \E", tira),ER(\¶I", \I", tira);ER(\¶O", \O", tira);ER(\¶U", \U", tira),Return(tira),

g

10.4 Insertando hileras (Insert)

² Cuando se necesite insertar una hilera dentro de otra usamos el procedimiento Insert. Esteprocedimiento nos ayuda a colocar una hilera dentro de otra a partir de cierta posici¶on. Sedeben indicar la subcadena a insertar, la cadena en que se va a insertar la subcadena y el puntode inserci¶on.

² La declaraci¶on es como sigue:

Insert(CadenaInsertar: String; var CadenaInicial: String; Indice: Integer);

As¶³ si tenemos una hilera llamada tira y hacemos,

tira = \soy bueno";Insert(\ muy", tira, 4);

obtenemos una hilera cuyo contenido es \soy muy bueno".

² Otro ejemplo es:

string S = \Me gusta Pascal";Insert(\Turbo" , S, 9);

al ¯nalizar, el contenido de S es \Me gusta Turbo Pascal"'.

Page 179: Crestomatía

10.5. COPIANDO HILERAS (COPY) 179

Ejemplo 10.13 Use Insert para crear un m¶etodo que reciba una hilera e inserte entre cadauno de sus caracteres originales el caracter '-'. Debe regresar la hilera resultante. Asi porejemplo, si la hilera que se recibe es \hola", devuelve \h-o-l-a".

Soluci¶on: Se debe notar que si la hilera suministrada tiene longitud posee n caracteres, lasaliente tendr¶a n+ n¡ 1 = 2n¡ 1.

string IntroduzcaGuion(string tira)fint i, j, n;i = 1;n := Length(tira);While (i < 2 ¤ n¡ 1)fInsert(\-"; tira; i);i = i+ 2;

gReturn(tira);

g

Es interesante analizar porque el siguiente c¶odigo conduce a un enciclamiento:

string IntroduzcaGuion(string tira)fint i, j;i = 1;While (i < 2 ¤ Length(tira)¡ 1)fInsert(\-"; tira; i);i = i+ 2;

gReturn(tira);

g

10.5 Copiando hileras (Copy)

² Esta funci¶on extrae una subcadena de una cadena m¶as larga. Para utilizar Copy es necesarioindicar desde qu¶e parte de la cadena mayor se desea comenzar a copiar y cu¶antos caracteres sevan a considerar. La declaraci¶on es como sigue:

Copy(S: String; Indice: Integer; CuantosCaracteres: Integer): String;

Page 180: Crestomatía

180 CAP¶ITULO 10. HILERAS

² Nota: Si Indice es mayor que la longitud de S, entonces Copy devuelve una cadena vac¶³a. SiCuantosCaracteres especi¯ca m¶as caracteres que los que posee S, entonces Copy entrega unacadena que contiene todos los caracteres de S desde la posici¶on Indice.

² De esta forma si tenemos

string S := \ABCDEF";S := Copy(S, 1, 3);

la hilera S posee al ¯nalizar el valor \BCD".

10.6 Convirtiendo hileras a may¶uscula o a min¶uscula

(UpperCase y LowerCase)

² Muchas veces es necesario saber que la hilera con la que se est¶a trabajando est¶a dada com-pletamente en may¶uscula o bien completamente en min¶uscula. Las funciones UpperCase yLowerCase nos ayudan en estas tareas.

² Las funcci¶on UpperCase toma una hilera y la convierte a may¶uscula. As¶³ si tenemos:

string s = \Mi madre";s = UpperCase(s);

al ¯nalizar este c¶odigo, s contendr¶a la hilera \MI MADRE".

² La funci¶on LowerCase se comporta en foma similar pero convirtiendo la hilera suministrada amin¶uscula. As¶³ si tenemos

string s = \Mi madre";s = LowerCase(s);

al ¯nalizar este c¶odigo, s contendr¶a la hilera \mi madre".

Ejemplo 10.14 Haga un m¶etodo que reciba una hilera (que presumiblemente contiene unasola palabra) y determine si es un pal¶³ndromo o no. El m¶etodo no debe distinguir entremay¶usculas y min¶usculas.

Soluci¶on:

bool PalabraPalNuevo(string tira)f

tira = UpperCase(tira);// Queda en may¶uscula!!bool es;// variable para saber si es o no es

Page 181: Crestomatía

10.7. CONVIRTIENDO ENTRE TIPO STRING Y TIPOS NUM¶ERICOS 181

int i = 0, j;es = True; // suponemos que s¶³ esj = Length(tira)¡ 1; // apunta al ¶ultimo campowhile(i < Length(tira))fif (tira[i]6= tira[j])

es = False; // No es pal¶³ndromo.i++;j¡¡;greturn(es);

g

Si lo pensamos un poco m¶as, podemos simpli¯car este m¶etodo anterior con la ayuda del m¶etodoPalabraPal (Ejemplo 10.4) como sigue:

bool PalabraPalNuevo(string tira)f

return(PalabraPal(UpperCase(tira)));g

Ejemplo 10.15 Haga un m¶etodo que reciba una hilera con representa una frase y determinesi es una frase pal¶³ndromo o no.

Soluci¶on: Para resolver este problema utilizaremos los m¶etodos PalabraPal (Ejemplo 10.4),BorreBlancos (Ejemplo 10.9) y QuiteTilde (Ejemplo 10.12).

bool EsFrasePal(string tira)f

string aux;aux = UpperCase(aux),aux = QuiteTilde(aux),aux = BorreBlancos(aux);return(PalabraPal(aux));

g

10.7 Convirtiendo entre tipo string y tipos num¶ericos

² Hay muchas situaciones en las que es necesario convertir de tipo string a num¶erico. Para ellomostramos 4 funciones que se hayan en algunos lenguajes de programaci¶on.

Page 182: Crestomatía

182 CAP¶ITULO 10. HILERAS

± n = StrToInt(s): esta funci¶on recibe una hilera s que represena a un n¶umero entero ydevuelve el entero n contenido en esta. Si la hilera en cuesti¶on no representa un n¶umerose genera un error de ejecuci¶on.

± s = IntToStr(n): esta funci¶on recibe un entero n y devuelve la hilera s que representa esteentero.

± x = StrToFloat(s): esta funci¶on recibe una hilera s que represena a un n¶umero real ydevuelve el real x contenido en esta. Si la hilera en cuesti¶on no representa un n¶umero segenera un error de ejecuci¶on.

± s = FlaotToStr(x): esta funci¶on recibe un real x y devuelve la hilera s que representa estereal.

² Nota: Se debe aclarar que utilizando las funciones de hileras vistas anteriormente y lo estudiadoen cap¶³tulos anteriores es posible implementar estas funciones.

Ejemplo 10.16 Haga un m¶etodo que reciba un n¶umero positivo y devuelva el correspondienteempezando por el ¶ultimo d¶³gito y terminando por el primero. De esta forma si el m¶etodo recibe2007, devolver¶a 7002.

Soluci¶on:

int InviertaNum(int n)f

string aux, tira;int i;aux = IntToStr(n);tira = \ ";for (i = Length(aux)¡ 1; i ¸ 0; i¡¡)tira = tira+ aux[i];

Return(StrToInt(tira));g

Ejemplo 10.17 Haga un m¶etodo que reciba un entero no negativo y devuelva la suma losd¶³gitos que lo componen. As¶³, por ejemplo, si el m¶etodo recibe 2007, devolver¶a 9, pues 9 =2 + 0 + 0 + 7.

Soluci¶on:

int SumeDigitos(int i)f

string tira;int n, suma = 0;tira = IntToStr(i);for (n = 0;n < Length(tira);n++)

Page 183: Crestomatía

10.7. CONVIRTIENDO ENTRE TIPO STRING Y TIPOS NUM¶ERICOS 183

suma = suma+ StrToInt(tira[n]);return(suma);

g

Ejemplo 10.18 Haga un m¶etodo que reciba un caracter que representa un d¶³gito y devuelvael valor correspondiente. NO use la funci¶on StrToInt.

int ConvCharInt(char c)f

int aux;switch(c)fcase \0": aux = 0; break;case \1": aux = 1; break;case \2": aux = 2; break;case \3": aux = 3; break;case \4": aux = 4; break;case \5": aux = 5; break;case \6": aux = 6; break;case \7": aux = 7; break;case \8": aux = 8; break;case \9": aux = 9; break;

greturn(aux);

g

Ejemplo 10.19 Haga un m¶etodo que reciba una hilera que representa un entero positivo ydevuelva el valor correspondiente. NO use la funci¶on StrToInt.

Soluci¶on: Usamos en este m¶etodo el m¶etodo ConvCharInt (Ejemplo 10.18) y el m¶etodoBorreBlancos (Ejemplo 10.9).

int ConvStrInt(string tira)f

int aux = 0;int pd = 1; nn potencia de diezint i;int tira = BorreBlancos(tira);for(i = Length(tira)¡ 1; i > ¡1; i¡¡)f

aux = aux+ConvCharInt(tira[i]) ¤ pd;pd = pd ¤ 10;

Page 184: Crestomatía

184 CAP¶ITULO 10. HILERAS

greturn(aux);

g

Nota: Se deja al estudiante como ejercicio mejorar este c¶odigo para que sirva para el caso deenteros negativos.

10.8 Ejercicios sobre hileras

1. Escriba un programa que reciba como entrada un string y se imprima ¶este al rev¶es. Con-vierta todos los caracteres en may¶usculas a min¶usculas y todos los caracteres en min¶usculasa may¶usculas.

2. Escriba un programa para crear un criptograma a partir de un string. Un criptograma esun mensaje o palabra en la que cada letra se sustituye por otra. Por ejemplo, el string:

El nombre del pajaro era squawk

podr¶³a revolverse.para formar'

jq strgwj ijq ufofwt jwf xvzfbp

Observe que los espacios no se cifran. En este caso espec¶³¯co, cada 'E' se reemplaz¶o con'j' , cada 'a' se reemplaz¶o con 'f ' , etc¶etera. Las letras may¶usculas se convierten enmin¶usculas en el criptograma.

3. Escriba un programa que reciba como entrada una oraci¶on y cuente el n¶umero de pal¶³ndromosen la misma.

4. Escriba un algoritmo que cuente el n¶umero total de vocales en una oraci¶on. Muestre lafrecuencia de cada vocal.

5. Escriba un algoritmo que inserte los caracteres '******' exactamente en la mitad de unstring.

6. Escriba un algoritmo que elimine las secuencias "por" y "POR" de un stririg.

7. Escriba un programa que reciba como entrada una l¶³nea de texto, que sustituya todos lossignos de puntuaci¶on con espacios y segmente el string en palabras individuales.

8. Escriba un algoritmo que reciba como entrada una l¶³nea de texto y lo imprima al rev¶es.Use iteradores en su soluci¶on.

9. a) Escriba un m¶etodo para escribir en orden alfab¶etico todas las letras de una palabra. Encaso de que se repita una letra, se debe imprimir tantas veces como ocurra. Por ejemplo,"pelele" debe escribirse "eeellp". b) Modi¯que el m¶etodo de la parte a) de manera que nose escriban las letras m¶as de una vez. Por ejemplo, "pelele" debe escribirse "elp".

Page 185: Crestomatía

10.8. EJERCICIOS SOBRE HILERAS 185

10. El sistema siguiente se usa para cifrar y descifrar mensajes. Cada letra del alfabeto sesustituye por la que est¶a tres posiciones adelante. As¶³, A se reemplaza por D, B por E, yas¶³ sucesivamente, siendo X sustituida por A, Y por B, y Z por C. Escriba un programapara codi¯car un mensaje de tipo string. Sugerencia: Construya una cadena que contengael alfabeto. Para cada letra del mensaje original, encuentre su posici¶on en el alfabetoy s¶umele 3; si el resultado es mayor que 26, se debe volver a empezar con el inicio delalfabeto.

11. Escriba un m¶etodo que reciba dos par¶ametros, un mensaje de tipo string y un entero nde 1 a 25. El m¶etodo debe imprimir un mensaje codi¯cado, usando un desplazamientode n posiciones. Esto es, cada l¶etra del mensaje debe sustituirse por la letra que est¶a nposiciones adelante. Al llegar al ¯nal del alfabeto se vuelve a empezar con la A, como enel ejercicio anterior.

12. Escriba un m¶etodo para implementar el siguiente esquema de codi¯caci¶on. La primeraletra del mensaje se sustituye por el resultado de desplazado una posici¶on, la segundaletra del mensaje se desplaza dos posiciones, la tercera letra se desplaza 3 posiciones, etc.Los caracteres que no son letras se reproducen sin modi¯caci¶on. As¶³,

EN EL CIRCO.

se transformar¶³a en

FP HP HOYKX.

13. Se ha codi¯cado un mensaje usando alguno de los 25 c¶odigos posibles de desplazamiento(alfabeto ingl¶es). Puede suponerse que cada palabra del mensaje contiene al menos unavocal; as¶³, el mensaje no contiene palabras como "Sr." Se ignora cu¶al es el n¶umero nde desplazamiento. Se debe rechazar cualquier n que produzca una descodi¯caci¶on queincluya palabras sin vocales. Escriba un m¶etodo que imprima las descodi¯caciones norechazadas.

14. Se ha codi¯cado un mensaje usando uno de los 25 c¶odigos de desplazamiento. El mensajepodr¶³a contener una palabra sin vocales, como "Sr." Escriba un programa que produzcael m¶³nimo de palabras sin vocales. (En caso de empate, debe imprimir todas las descodi-¯caciones con el n¶umero m¶³nimo de palabras sin vocales. )

15. Suponga que frase es una variable del tipo string. Escriba un m¶etodo que reciba frasecomo un par¶ametro de valor e imprima cada una de las palabras en frase, donde unavariable se de¯na como una cadena de caracteres que termine con un car¶acter no letra.(Puede suponer que el ¶ultimo car¶acter en una frase es un signo de puntuaci¶on.)

16. En cierto teclado, la tecla de la letra t tiene la tendencia a pegarse. Escriba un m¶etodoque reciba un mensaje de cadena y reimprima el mensaje de manera que la letra t nuncaocurra m¶as de dos veces consecutivas en el mensaje. Despu¶es, el m¶etodo debe imprimirtodas las palabras del mensaje revisado que contengan dos letras t consecutivas.

17. Escriba un programa que convierta n¶umeros romanos en sus equivalentes decimales. Su-ponga un m¶aximo de diez d¶³gitos romanos escogidos de la lista:

Page 186: Crestomatía

186 CAP¶ITULO 10. HILERAS

M{1000, D{500, C{100, L{50, X{10, V{5, I{1

18. Escribir un m¶etodo que lea una frase y determine la frecuencia de aparici¶on de cada vocalcon respecto al total de caracteres de la frase.

19. Escribir un m¶etodo que lea una frase y a continuaci¶on visualice cada palabra de la fraseuna debajo de otra, seguida cada palabra del n¶umero de letras que compone cada palabra.

20. Escribir un m¶etodo que lea una frase y sustituya todas las secuencias de dos o m¶as blancospor un solo blanco y visualice la frase.

21. Escribe un m¶etodo que lea del teclado una cadena y muestre en la pantalla la cantidad deconsonantes y de vocales que contiene.

22. Escribe un m¶etodo que lea del teclado una cadena y construya y muestre en la pantallaotra cadena en la que cada vocal haya sido reemplazada por un punto.

Page 187: Crestomatía

Cap¶³tulo 11

Vectores y matrices

² Hasta ahora se han manejado tipos de datos elementales (int, char, etc.), que est¶an prede¯nidospor el lenguaje de programaci¶on. Existen adem¶as los llamados tipos de datos compuestos. Eneste cap¶³tulo se ver¶an dos tipos de datos compuestos: los vectores y las matrices.

11.1 Vectores

² Al igual que se declara una variable de un cierto tipo, es posible declarar una secuencia de Nvariables del mismo tipo. Estos se conocen como vectores, arreglos o (del ingl¶es) arrays.

² >C¶omo se declaran? La declaraci¶on es como sigue:

tipo dato nombre array [cantidad elementos];

² En la declaraci¶on anterior se de¯ne un vector llamado nombre array con una cantidad deelementos (cantidad elementos) de igual tipo (tipo dato) que ocupan posiciones consecutivasen la memoria. Ejemplos:

int sumandos [100]; //declara 100 n¶umeros enteros intboolean lluvia semana [7]; //declara 7 booleanas°oat precios articulos [1000]; //declara 1000 n¶umeros decimales °oatchar dni [9]; //declara 9 caracteres char

² >C¶omo se adiciona informaci¶on o se llena un vector?Ejemplo:

°oat notas[3] = f30; 40; 100g;

o en forma equivalente:

187

Page 188: Crestomatía

188 CAP¶ITULO 11. VECTORES Y MATRICES

notas[0]=30;notas[1]=40;notas[2]=100;

² >C¶omo se acceden?

°oat notas[3] = f30; 40; 100g;Print(Notas[2]);

imprime 100

Ejemplo 11.1 Haga un m¶etodo que lea un vector de 20 campos, escriba un mensaje de\terminado" y luego escriba el vector.

void leaescriba ()f°oat v[20];int i; // Declaraci¶on de variablesFor (i = 0; i < 20; i++;)fPrint ('Deme el campo', i+ 1,':'); //lee los valores del vectorRead(v[i]);// Leer el vector

gPrint(\Terminado");//Escribir el mensajeFor (i = 0; i < 20; i++)Print ('v [', i,'] =', v[i]); //Escribir el vector

g

Nota: Es recomendable siempre noti¯car, al usuario de su programa, cu¶al es el dato que seest¶a solicitando. Sin embargo, por simpli¯cidad, se puede hacer la lectura de un vector comosigue:

For (i = 0; i < 20; i++;)Read(v[i]);// Leer el vector

Ejemplo 11.2 Haga un m¶etodo que lea 50 n¶umeros y devuelva cu¶antos de esos n¶umeros sonm¶as grandes que el promedio (de ellos).

Int mayoresapromedio ()f°oat v[50];int aux = 0;int i;

Page 189: Crestomatía

11.1. VECTORES 189

int suma = 0; //Declaraci¶on de variablesFor (i = 0; i < 50; i++)f

Print ('Deme el n¶umero ',i+ 1, ':');Read (v[i]); //Lectura del vectorsuma = suma+ v[i]; //suma los n¶umeros que contiene el vector

g;For (i = 0; i < 50; i++;)

If (v[i] > suma=50) //si el n¶umero es m¶as grande que el promedioaux = aux+ 1;

return(aux);//devuelve la cantidad de n¶umeros que cumplieron la condici¶ong

Nota: Es un error com¶un, en el manejo de vectores, confundir la posici¶on con el contenido.Prevenimos al estudiante de esta situaci¶on.

Ejemplo 11.3 Haga un m¶etodo que lea 20 n¶umeros y devuelva el mayor. Use un vector.

Soluci¶on: El problema se puede resolver sin la ayuda de un vector, sin embargo se brindauna soluci¶on que nos permita usar esta estructura.

Float numeromayor ()f

int i;°oat aux;°oat v[20];for(i = 0; i < 20; i+ 1)fPrint('deme el numero ', i+ 1,':');Read(v[i])

g;aux = v[0];//supongamos que el mayor es el primero.For (i = 1; i < 20; i++)if (v[i] > aux)aux = v[i];

return (aux)//devuelve el n¶umero mayor.g

Ejemplo 11.4 Haga un m¶etodo que lea 500 valores reales, calcule su suma y luego despliegueeste valor seguido de los 500 valores previamente le¶³dos.

Soluci¶on:

Page 190: Crestomatía

190 CAP¶ITULO 11. VECTORES Y MATRICES

void procese ()f

°oat v[500], suma = 0;int i;for(i = 0; i < 500; i++)fRead (v[i]); //Lectura del vectorsuma = suma+ v[i]; //Suma los valores del vector

for(i = 0; i < 500; i++)Print(v[i]);

Print (suma); // Escribe la suma de los valores del vectorg

Ejemplo 11.5 Haga un m¶etodo que lea 600 n¶umeros y retorne la posici¶on donde encontr¶o eln¶umero m¶aximo la primera vez.

Float primeravez ()f

°oat v[600];int i, pm;//pm es la posici¶on del m¶aximoFloat em;//el mayorfor(i = 0; i < 600; i++)

Read (v[i]); //lee el vectorem = v[0];pm = 0; // se supone que el mayor es el primeroFor(i = 1; i < 600; i++)If (v[i] > em); //pregunta si hay uno mayorfem = v[i];pm = i;g

return(pm);//devuelve pmg

>Y si preguntara por la ¶ultima vez que ocurre el m¶aximo? >Y si fuera el m¶³nimo? Se deja estocomo ejercicio al estudiante.

Ejemplo 11.6 Haga un m¶etodo que lea 2000 n¶umeros y luego los escriba empezando por el¶ultimo y terminando por el primero.

Soluci¶on:

Page 191: Crestomatía

11.1. VECTORES 191

void invertido()f°oat v[2000];int i;//declaraci¶on de variablesfor(i = 0; i < 2000; i++)Read(v[i])//lectura del vector

for(i = 1999; i >= ¡1; i¡¡)Print(v[i]);//imprime el vector

g

² Recordemos ahora >c¶omo intercambiar los valores de dos variables si se desconocen sus valores?Suponga que tenemos dos variables num¶ericas y hacemos:

Read(a);Red(b);

Lo que muchas veces los estudiantes sugieren para hacer esto es:

a = b;b = a;

Sin embargo esto conduce a que las dos variables tengan el mismo valor. Lo que se puede haceres utilizar una variable auxiliar

aux = b;b = a;a = aux;

Emplearemos esta idea en el siguiente ejemplo.

Ejemplo 11.7 Haga un m¶etodo que lea un vector de 2000 posiciones invierta la primera y laultima posici¶on y luego lo vuelva a desplegar.

Soluci¶on:

void cambextremos ()g

°oat v[2000];°oat aux;int i;//declaracion de variablesfor(i = 0; i < 2000; i++)

Read(v[i]);//lectura del vectorv[0] = aux;//guarda el valor del primer campo en aux

Page 192: Crestomatía

192 CAP¶ITULO 11. VECTORES Y MATRICES

v[0] = v[1999];//le da el valor del primer campo al ultimo campov[1999] = aux;// da el valor de aux al ¶ultimo campofor(i = 0; i < 2000; i++)Print(v[i])//imprime el vector

g

Ejemplo 11.8 Realizar un m¶etodo que permita reestructurar un vector a partir de un ele-mento dado seg¶un el siguiente ejemplo:

Vector inicial: 3-20-8-40Valor de reorganizaci¶on: 8Vector ¯nal: 8-40-3-20

Soluci¶on: El c¶odigo es como sigue:

void Reorganizar(°oat V [], °oat W [], int n, °oat x)f

int i, k;i = 1;while((x <> V [i]) and (i <= n))

i = i+ 1;k = 1;for(j = i; j · n; j ++)fW [k] = V [j];k = k + 1;

gg

11.2 Matrices

² Hasta ahora hemos visto los arreglos unidimensionales, tambi¶en llamados vectores.² >C¶omo se declaran? Un array bidimensional o matriz se declara de la siguiente manera:

tipo dato nombre array [cant elem ¯las] [cant elem columnas];

En total, la matriz tiene una cantidad de elementos igual a

(cant elem ¯las) * (cant elem columnas)

Page 193: Crestomatía

11.2. MATRICES 193

² Ejemplos de algunas declaraciones:

int multiplos[5] [10];boolean lluvia anual[12] [31];°oat A[2] [3];

² En la ¶ultima declaraci¶on, A es el nombre de la matriz en este caso .[2] = es para indicar el n¶umero de la ¯la.

[3]= es para indicar el n¶umero de columnas.

² La matriz A se puede ver como:A[0][0] A[0][1] A[0][2]

A[1][0] A[1][1] A[1][2]

² Generalizando, se pueden de¯nir arrays multidimensionales, aunque las m¶as usadas son las dedos dimensiones. La declaraci¶on de un arreglo multidimensional es como sigue:

tipo dato nombre array [N1][N2] : : : [Nn];

² >C¶omo se llena o se lee una matriz bidimensional? Para leer la matriz por ¯la, se usan dosciclos anidados:

°oat A[5][4];int i, j;For (i = 0; i < 5; i++)For (j = 0; j < 4 : j ++)Read(A[i][j]);

² Si se quiere que la lectura sea por columnas, solamente se intercambian los ciclos.

°oat A[5][4];int i, j;For (j = 0; j < 4 : j ++)For (i = 0; i < 5; i++)Read(A[i][j]);

² >C¶omo se acceden los valores de una matriz? Se escribe el nombre de la matriz seguido por la¯la y la columna en donde est¶a localizado el valor deseado. Algunos ejemplos son:

Print(A[0][0]);Print(A[4][3] );

Page 194: Crestomatía

194 CAP¶ITULO 11. VECTORES Y MATRICES

En el segundo caso se escribe el valor ubicado en la quinta ¯la (¯la 4), cuarta columna (columna3). De nuevo recordamos que la primera ¯la es la cero, la segunda es la uno y as¶³ sucesivamente.De forma an¶aloga se procede con las columnas.

² >C¶omo se imprimen? La impresi¶on se hace normalmente con la ayuda de un par de ciclos (unoanidado dentro de otro). Escribimos, por ejemplo:

for(i = 0; i < 5; i++)for(j = 0; j < 4 : j ++)

Print(A[i][j]);

Ejemplo 11.9 Haga un m¶etodo que lea una matriz real de tama~no 10 ¯las y 15 columnas,calcule el promedio de los n¶umeros y luego diga cuantos n¶umeros son mayores que el promedio.

Soluci¶on:

Int maypro ()f

int i, mayores = 0;°oat A[10][15], suma = 0;//declaraci¶on de variablesfor(i = 0; i < 10; i++)for(j = 0; j < 15; j ++)fRead(A[i][j])//lee la matrizsuma = suma+A[i][j];//suma todos los valores de la matriz

gsuma = suma=150; //suma es ahora el promedio de los valores de la matrizfor(i = 0; i < 10; i++)for(j = 0; j < 15; j ++)if (A[i][j] > suma) // si alg¶un valor es mayor que el promediomayores++; return (mayores); g

Ejemplo 11.10 Haga un m¶etodo que lea una matriz entera de 10 ¯las y 15 columnas, des-pliegue el valor m¶aximo y la primera posici¶on en la que este ocurre.

Soluci¶on:

void MaxValor ()f

int i, j;int em, f , c ;//em representa el numero mayor, f representa las ¯las, c representa las columnasint A[10][15];//declaraci¶on de variablesfor(i = 0; i < 10; i++)

Page 195: Crestomatía

11.2. MATRICES 195

for(j = 0; j < 15; j ++)Read(A[i][j])//lee la matriz

em = A[0][0];f = 0; c = 0;//suponer que el mayor es el primero y esta en la posici¶on 0,0for(i = 0; i < 10; i++)for(j = 0; j < 15; j ++)if (A[i][j] > em)//pregunta si el siguiente e mayorfem = A[i][j];f = i;c = j;//actualizar Pos. del mayor

gPrint('maximo'=,em);Print( 'posion', f ,', ', c);// Posici¶on del mayor

g

Ejemplo 11.11 Haga un m¶etodo que lea las notas de 10 estudiantes. En el curso se hicieron3 ex¶amenes parciales y un examen corto. Cada parcial vale 30% y el examen corto 10%. Paracada estudiante se debe imprimir su nota ¯nal. Use una matriz.

Soluci¶on:

Nota: El problema se puede resolver sin usar matrices. Sin embargo en esta soluci¶on lasusamos por solicitud del enunciado.

void notaestud ()f

°oat A[10][5];int i, j; //declaracion de variablesfor(i = 0; i < 10; i++)for(j = 0; j < 4; j ++)Read(A[i][j]);//lee la matriz

for(i = 0; i < 10; i++)fA[i; 4] = A[i][0] ¤ 0:30 +A[i][1] ¤ 0:30 +A[i][2] ¤ 0:30 + A[i][3] ¤ 0:10;//calcula lanota ¯nalPrint (A[i][4]);

gg

Ejemplo 11.12 Haga un m¶etodo que lea una matriz de tama~no 10*10 (cuadrada) y devuelvala suma de los elementos de la diagonal principal.

Page 196: Crestomatía

196 CAP¶ITULO 11. VECTORES Y MATRICES

Nota: A la suma de los elementos de la diagonal (principal) de una matriz cuadrada se lellama traza de la matriz.

Soluci¶on:

°oat sumediagonal()f

int i,j;°oat A[10][10], suma = 0;//declaracion de variablesfor(i = 0; i < 10; i++)for(j = 0; j < 10; j ++)Read(A[i][j]);// se lee la matriz

for(i = 0; i < 10; i++)suma = suma+A[i][i];//suma los elementos de la diagonal de la matriz

return(suma)// suma de los elementos de la diagonalg

² Una matriz es sim¶etrica si al intercambiar las ¯las con las columnas se obtiene la misma matriz.Considere el siguiente caso por ejemplo.26664

3 2 1 72 5 3 21 3 7 47 2 4 8

37775

Ejemplo 11.13 Haga un m¶etodo que lea una matriz cuadrada real de tama~no 10*10 y de-vuelva True si la matriz en cuesti¶on es sim¶etrica y, False si no.

Soluci¶on: Para determinar la simetr¶³a de la matriz le¶³da, empezamos suponiendo que s¶³ loes y luego buscamos evidencia que contradiga este supuesto. Si tal evidencia no aparece, lamatriz es sim¶etrica.

bool essimetrica ()f

°oat A[10][10];bool ok;int i, j;for(i = 0; i < 10; i++)for(j = 0; j < 10; j ++)Read(A[i][j]); //lee la matriz

ok = True;//supone que la matriz es sim¶etricafor(i = 0; i < 10; i++)for(j = 0; j < 10; j ++)

Page 197: Crestomatía

11.2. MATRICES 197

if (A[i][j]6= A[j][i])ok = false;//si no se cumple, la matriz no es sim¶etrica

return(ok)//devuelve si la matriz es sim¶etrica o nog

² Un matriz entera y cuadrada se denomina m¶agica si la suma por ¯las, por columnas y pordiagonales produce, en cada caso, la misma cantidad. El siguiente es un ejemplo de un cuadradom¶agio de tama~no 3£ 3. 264 4 9 2

3 5 78 1 6

375

Ejemplo 11.14 Haga un m¶etodo que lea una matriz entera 10*10 y determine si es uncuadrado m¶agico.

Soluci¶on:

bool cuadragico ()f°oat A[10][10];int i,j;int vm; //valor magicoint aux;bool es;//declaraci¶on de variablesfor(i = 0; i < 10; i++)for(j = 0; j < 10; j ++)

Read(A[i][j]); //leemos la matrizvm = 0;for(i = 0; i < 10; i++)

vm = vm+A[0][i]; //hallamos el valor m¶agicoes = true;for(i = 0; i < 10; i++)f

aux = 0;for(j = 0; j < 10; j ++)aux = aux+A[i][j]; //suma por ¯las

if (aux6= vm) //es = false; //si se cumple la condici¶on entonces el cuadrado no es m¶agico

gfor(j = 0; j < 10; j ++)f

Page 198: Crestomatía

198 CAP¶ITULO 11. VECTORES Y MATRICES

aux = 0;for(i = 0; i < 10; i++)faux = aux+A[i][j]; //suma por columnasif (aux6= vm)es = false;

ggaux = 0;for(i = 0; i < 10; i++)

aux = aux+A[i][i]; //suma de diagonal principalif (aux6= vm)

es = false;aux = 0;for(i = 0; i < 10; i++)

aux = aux+A[i][9¡ i]; //suma de diagonal secundariaif (aux6= vm)

es = false;return (es);g

11.3 Pasando vectores como argumentos

² En algunos lenguajes (como C++) es imposible pasar un vector por valor; los arrays siemprepasan por referencia. Por tanto, nunca se usa el signo & cuando se declara un array como unpar¶ametro. Cuando un array pasa como argumento, su direcci¶on base, o sea la direcci¶on dememoria del primer elemento del array, es transmitida al m¶etodo. El m¶etodo sabe d¶onde seubica el array actual del invocador, y puede acceder a cualquier elemento del array.

² A continuaci¶on se muestra un m¶etodo que anula un array tipo °oat unidimensional de cualquiertipo:

void PurosCeros(°oat arr[], int numElementos)f

int i;for (i = 0; i < numElementos; i++)

arr[i] = 0;g

Nota: El estudiante debe observar que no es necesario que m¶etodo devuelva ning¶un valorpues el par¶ametro fue pasado por referencia. Cualquier modi¯caci¶on hecha al vector dentro delm¶etodo ser¶a permanente para el vector enviado como par¶ametro.

Page 199: Crestomatía

11.3. PASANDO VECTORES COMO ARGUMENTOS 199

² En la lista de par¶ametros, la declaraci¶on arr no incluye un tama~no entre los corchetes. Si seincluye un tama~no, en algunos lenguajes, el compilador lo ignorar¶a. El compilador s¶olo quieresaber que se trata de un vector tipo °oat, pero no un vector °oat de alg¶un tama~no particular.Por tanto, se deber¶a incluir en el m¶etodo PurosCeros un segundo par¶ametro (el n¶umero deelementos del vector) a fm de que el ciclo For funcione correctamente.

² El c¶odigo puede invocar el m¶etodo PurosCeros para un vector tipo °oat de cualquier tama~no.El siguiente fragmento de c¶odigo hace llamadas de funci¶on para anular dos vectores de tama~nosdistintos.

void UseVector()f

°oat velocidad[30];°oat angulo[9000];PurosCeros(velocidad, 30);PurosCeros(angulo, 9000);

g

² Un error com¶un es pasar un elemento de array a un m¶etodo cuando la intenci¶on fue el pasodel array completo. Por ejemplo, nuestra funci¶on PurosCeros espera que la direcci¶on base deun vector tipo °oat sea transmitida como el primer argumento. En el si guiente fragmento dec¶odigo, la llamada es un error.

°oat velocidad[30];PurosCeros(velocidad[30], 30);// Error

² Primero que nada, velocidad [30] denota un elemento del vector sencillo, o sea un solo n¶umeroy no un vector completo. Adem¶as, no hay ning¶un elemento del vector con un ¶³ndice de 30. Los¶³ndices para el array velocidad son de 0 al 29.

² Algunos lenguajes de programaci¶on permiten que se pasen arrays por valor o por referencia.Recuerde que en el paso por valor, una copia del argumento es transmitida al m¶etodo. Cuandoun vector es pasado por valor, se copia el vector completo. No s¶olo se requiere espacio extraen el m¶etodo para guardar la copia; el propio copiado toma su tiempo. El paso por referencias¶olo requiere que se pase la direcci¶on del argumento al m¶etodo; de esta manera, si un vector espasado por referencia, se pasa ¶unicamente la direcci¶on del primer componente del vector. As¶³,el paso de vectores grandes por referencia ahorra espacio de memoria y tiempo.

² En muchos de los ejemplos que se han visto hasta ahora, los vectores y matrices son le¶³dos dentrodel m¶etodo que los utiliza. Enviando el vector o la matriz como par¶ametro por referencia sepuede ahora suponer que el vector o matriz es le¶³do(a) por alg¶un otro m¶etodo y no distraernoscon la lectura de estos.

Page 200: Crestomatía

200 CAP¶ITULO 11. VECTORES Y MATRICES

Ejemplo 11.15 Haga un m¶etodo que reciba un vector de n¶umeros reales y devuelva cu¶antosde esos n¶umeros son m¶as grandes que el promedio (de ellos).

Int MayoresAlPromedio(°oat v[], int numElementos)fint aux = 0;int i;int suma = 0; //Declaraci¶on de variablesFor (i = 0; i < numElementos; i++)

suma = suma+ v[i]; //suma los n¶umeros que contiene el vectorFor (i = 0; i < numElementos; i++;)

If (v[i] > suma=numElementos) //si el n¶umero es m¶as grande que el promedioaux = aux+ 1;

return(aux);//devuelve la cantidad de n¶umeros que cumplieron la condici¶ong

Nota: El estudiante puede notar la ventaja de este enfoque pues el m¶etodo es ¶util para cualquiervector de n¶umeros reales.

Ejemplo 11.16 Haga un m¶etodo que lea una matriz cuadrada y devuelva la suma de loselementos de la diagonal principal.

Soluci¶on:

°oat SumeDiagonal(°oat A[][], Tam) //f//Recibe la matriz cuadrada y su tama~no

int i,j;suma = 0;//declaracion de variablesfor(i = 0; i < Tam; i++)for(j = 0; j < Tam; j ++)Read(A[i][j]);// se lee la matriz

for(i = 0; i < Tam; i++)suma = suma+A[i][i];//suma los elementos de la diagonal de la matriz

return(suma)// suma de los elementos de la diagonalg

Ejemplo 11.17 Haga un m¶etodo que reciba un vector n¶umeros reales, determine el valorm¶aximo y la primera aparici¶on de este valor. El m¶etodo debe devolver v¶³a par¶ametros porreferencia ese valor m¶aximo y esa primera aparci¶on de dicho valor.

Page 201: Crestomatía

11.3. PASANDO VECTORES COMO ARGUMENTOS 201

void Hallevalor(°oat v[], °oat &max, int &p );f // max y p vienen \vac¶³os"

int i; // contadormax = v[0];p = 0;for(i = 0; i < 20; i++)fif (max < v[i])fmax = v[i];p = i;g

gg//max y p se van \llenos"

Ejemplo 11.18 Dise~nar un m¶etodo que acepte como par¶ametro un vector del n¶umeros realespositivos y que puede contener elementos duplicados. El m¶etodo debe reemplazar cada elementorepetido por ¡1 y regresar el vector modi¯cado, adem¶as del n¶umero de modi¯caciones hecho.Soluci¶on:

void REPETICION(°oat V [] :; int n)fint i, j;int contador;contador = 0;for(i = 1; i · n¡ 1; i++)for(j = i+ 1; j · n; j ++)if((V [i] = V [j]) And (V [j] <> ¡1))fV [j] = ¡1;contador = contador + 1;g

for(i = 1; i · n; i++)Print(V [i]);

Print(contador);g

Ejemplo 11.19 Dise~nar un m¶etodo que devuelva True si los dos arrays dados como entradason iguales y False,en otro caso

Soluci¶on:

Page 202: Crestomatía

202 CAP¶ITULO 11. VECTORES Y MATRICES

El c¶odigo solicitado es como sigue: bool SonIguales(°oat v[], w[]; int n, m)f // dos vectores y sus correspondientes tama~nos)

bool igual = True;if(n == m)

i = 0;While((i <= n) and (igual))fif(v[i] <> w[i])

igual = False;i = i+ 1;

gelseigual= False;

Return(igual)g

Ejemplo 11.20 Dise~nar un

1. m¶etodo llamado SIGMA para calcular la suma de los n elementos de un vector X (X y nson los par¶ametros).

2. un m¶etodo llamado PROD para calcular el producto de los \n" elementos de un vector X(de nuevo X y n son los par¶ametros).

Soluci¶on:

1. °oat SIGMA(°oat X[]; int n)f

int i;int suma = 0;for(i = 0; i · n; i++)suma=suma + X[i];

Return (suma) ;g

2. °oat PROD(°oat X[]; int n)f

int i;°oat producto = 1;for(i = 0; i · n; i++)

producto = producto ¤X[i];Return(producto)

g

Page 203: Crestomatía

11.3. PASANDO VECTORES COMO ARGUMENTOS 203

Ejemplo 11.21 Contruir un m¶etodo para determinar si todos los elementos dentro de unamatriz cuadrada son distintos entre si o no.

Soluci¶on: Suponemos que el m¶etodo recibe como par¶ametros la matriz y su tama~no. Elc¶odigo es como sigue:

bool Distintos(var A[][], bool n)fint i, j, k, z;bool p = True;for(i = 1; i · n; i++)ffor(j = 1; j · n; j ++)ffor(k = 1; k · n; k ++)ffor(z = 1; z · n; z ++)fif((i6= k) or (j6= z))fif(A[i; j] == A[k; z])p = False;

gg

gg

gReturn(p);

g

Ejemplo 11.22 Se desea un m¶etodo que permute las columnas de una matriz cuadrada A,modi¯c¶andola y devolviendo el resultado en la misma matriz. La modi¯caci¶on consiste encambiar las columnas de A de orden, la primera con la ¶ultima, la segunda con la pen¶ultima yas¶³ sucesivamente (hasta la \mitad").

Soluci¶on:

El c¶odigo es como sigue:

void Intercambia(A[],n)fint i, primero, ultimo, aux;primero = 1;ultimo = n;

Page 204: Crestomatía

204 CAP¶ITULO 11. VECTORES Y MATRICES

While(primero < ultimo)ffor(i = 1; i · n; i++)faux = A[i; primero];A[i; primero] = A[i; ultimo];A[i; ultimo] = aux;

gprimero = primero+ 1;ultimo = ultimo¡ 1;g

g

11.4 Ordenanci¶on de vectores

² Muchas veces se hace necesario ordenar un vector en forma ascendente o bien en forma descen-dente. Hay muchos m¶etodos para lograr este prop¶osito.

² En estea secci¶on mencionaremos dos formas que son f¶aciles de explicar, sin embargo es buenoadvertir que hay m¶etodos m¶as so¯sticados para ordenar un vector.

² Sup¶ongase que deseamos ordenar el siguiente vector4 2 7 1

El procedimiento es como sigue:

¤ Buscamos el valor m¶aximo del vector original y lo intercambiamos con la ¶ultima posici¶on.4 2 1 7 ¡! 4 2 1 7

¤ Desestimamos ahora la ¶ultima posici¶on y realizamos la misma operaci¶on, pero esta vezcon vector de longitud una unidad menor. Obtenemos as¶³:

4 2 1 ¡! 1 2 4

¤ Desestimamos ahora la ¶ultima posici¶on y realizamos la misma operaci¶on, pero esta vezcon vector de longitud una unidad menor. Obtenemos as¶³:

1 2 ¡! 1 2

Por lo tanto, el vector ordenado es:1 2 4 7

Page 205: Crestomatía

11.4. ORDENANCI ¶ON DE VECTORES 205

Ejemplo 11.23 Haga un m¶etodo que reciba un vector de n¶umeros reales y los ordene demenor a mayor.

void OrdeneVector(°oat v[], int Tam)f

int i, j, p;°oat max;for(i = Tam¡ 1; i > 0; i¡¡)fmax = v[0];// suponemos que el m¶aximo es el primerop = 0;// posici¶on del m¶aximofor(j = 0; j <= i; j ++)if (max < v[j])fmax = v[j];p = j;

gaux = v[i];v[i] = v[p];v[p] = aux;

gg

² Otra forma de ordenar un vector es recorrer el vector \varias veces" e ir preguntando si la posi-ci¶on actual es menor que la siguiente (cuando sea posible). En el caso negativo se intercambianlos valores en cuesti¶on. Si el vector en cuesti¶on es de tama~no n, el vector se debe explorar n¡2veces. Al terminar (<y probablemente antes!) el vector quedar¶a ordenado.

Ejemplo 11.24 Hagamos un m¶etodo que reciba un vector y su dimensi¶on o tama~no. Elm¶etodo debe ordenenar el vector.

Soluci¶on:

void OrdeneVector(°oat v[], int tam)f // Inicio

for(i = tam¡ 2; i >= 0; i¡¡)for(j = 0; j <= i; j ++)if (v[j] > v[j + 1])faux = v[j];v[j] = v[j + 1];v[j + 1] = aux;

gg // Fin

Page 206: Crestomatía

206 CAP¶ITULO 11. VECTORES Y MATRICES

11.5 Ejercicios del cap¶³tulo

1. Escribir un m¶etodo para leer un vector de 30 componentes. Se desea calcular e imprimirel promedio de las componentes.

2. Escribir un m¶etodo para leer dos vectores, ambos de longitud k y luego calcular e imprimirel vector c que sea la suma de a y b sabiendo que c(i) = a(i) + b(i).

3. Escribir un m¶etodo para crear un vector de N componentes donde cada V (I) = I.

4. Escribir un m¶etodo para leer un vector de n componentes y luego hallar la suma y elpromedio de los elementos que est¶an en las posiciones pares y en los lugares impares, porseparado. Imprimir el resultado.

5. Escribir un m¶etodo que genere aleatoriamente un vector de tama~no 20 con n¶umeros entre0 y 10. Deje en un vector A todos los n¶umeros negativos y en un vector B todos lospositivos o iguales a cero.

6. Escribir un m¶etodo para sumar las matrices A y B (ambas de dimensi¶on 10£ 4), dejarlaen C. Imprimir C.

7. Escribir un m¶etodo que reciba un vector con 10 elementos num¶ericos enteros ya almace-nados e indique cu¶antos de ellos son m¶ultiplos de 3.

8. (Para investigar) Dado un vector de n¶umeros reales:

(a) Escriba un m¶etodo max que nos devuelva el m¶aximo de los valores incluidos en elvector.

(b) Escriba un m¶etodo min que nos devuelva el m¶³nimo de los valores incluidos en elvector.

(c) Escriba un m¶etodo media que nos devuelva la media de los valores incluidos en elvector.

(d) Escriba un m¶etodo varianza que nos devuelva la varianza de los valores incluidos enel vector.

(e) Escriba un m¶etodo mediana que nos devuelva la mediana de los valores incluidos enel vector.

(f) Escriba un m¶etodo moda que nos devuelva la moda de los valores incluidos en elvector

(g) Escriba un m¶etodo percentil(n) que nos delvuelva el valor correspondiente al percentiln en el conjunto de valores del vector.

9. Dado un vector, implemente un m¶etodo que inserte un elemento en una posici¶on dada delvector. Nota: Insertar un elemento en el vector desplaza una posici¶on hacia la derechaa los elementos del vector que han de quedar detr¶as del elemento insertado. Adem¶as, lainserci¶on ocasiona la \desaparici¶on" del ¶ultimo elemento del vector.

10. Implemente un m¶etodo llamado secuencia que realice la b¶usqueda de la secuencia en ordencreciente m¶as larga dentro de un vector de enteros. El m¶etodo ha de devolver tanto laposici¶on de la primera componente de la secuencia como el tama~no de la misma.

Page 207: Crestomatía

11.5. EJERCICIOS DEL CAP¶ITULO 207

11. Una cadena de ADN se representa como una secuencia circular de bases (adenina, timina,citosina y guanina) que es ¶unica para cada ser vivo, por ejemplo:

A T GT CA T G

Dicha cadena se puede representar como un vector de caracteres recorri¶endola en sentidohorario desde la parte superior izquierda:

A T G C G T A T

Se pide dise~nar una clase que represente una secuencia de ADN e incluya un m¶etodobooleano que nos devuelva true si dos cadenas de ADN coinciden.

Muy importante: La secuencia de ADN es c¶³clica, por lo que puede comenzar en cual-quier posici¶on. Por ejemplo, las dos secuencias siguientes coinciden:

A T G C G T A T

A T A T G C G T

12. Dado un vector de n¶umeros reales, escriba un m¶etodo que ordene los elementos del vectorde mayor a menor.

13. Dado un vector de n¶umeros reales, escriba un m¶etodo que ordene los elementos del vectorde tal forma que los n¶umeros pares aparezcan antes que los n¶umeros impares. Adem¶as, losn¶umeros pares deber¶an estar ordenados de forma ascendente, mientras que los n¶umerosimpares deber¶an estar ordenados de forma descendente. Esto es, el vector f1,2,3,4,5,6gquedar¶a como f2,4,6,5,3,1g.

14. Para generar n¶umeros pseudoaleatorios, se puede utilizar la funci¶on random(). Dichafunci¶on genera una secuencia de n¶umeros pseudoaleatorios que se supone sigue una dis-tribuci¶on uniforme (esto es, todos los valores aparecer¶an con la misma probabilidad).Escriba un programa que compruebe si el generador de n¶umeros pseudoaleatorios generarealmente n¶umeros aleatorios con una distribuci¶on uniforme. Sugerencia: Genere ungran cantidad de n¶umeros aleatorios (entre 0 y 100, por ejemplo) y compruebe que ladistribuci¶on resultante del n¶umero de veces que aparece cada n¶umero es (m¶as o menos)uniforme. Por ejemplo, mida la dispersi¶on de la distribuci¶on resultante utilizando unamedida como la varianza.

15. Crear un programa modular para jugar a las 7 y media. Se trata de un juego de cartas(con baraja espa~nola) en el que el objetivo es alcanzar una puntuaci¶on de 7.5. Cada cartadel 1 al 7 tiene su valor nominal y cada ¯gura (sota, caballo y rey) vale 0.5 puntos. Nota:Para barajar, mezcle los elementos de un vector de cartas intercambiando en repetidasocasiones cartas elegidas al azar con la ayuda de la funci¶on random().

16. Escribir un m¶etodo que lea 10 n¶umeros por teclado. Luego lea dos m¶as e indique si estosest¶an entre los anteriores.

Page 208: Crestomatía

208 CAP¶ITULO 11. VECTORES Y MATRICES

17. Escribir un m¶etodo que lea una matriz de 3 ¯las y 3 columnas de valores enteros. Acontinuaci¶on, el m¶etodo debe pedir el n¶umero de una ¯la. El m¶etodo deber¶a devolver elm¶aximo de esa ¯la.

18. Escribir un m¶etodo que lea una matriz de n¶umeros enteros y que devuelva la suma de loselementos positivos de la matriz y la suma de los elementos negativos.

19. Escribir un m¶etodo que lea una matriz de enteros de 4 ¯las y 4 columnas y a continuaci¶onintercambie la ¯la i con la ¯la j, siendo i y j dos valores introducidos por teclado.

20. Se dice que una matriz tiene un punto de silla si alguna posici¶on de la matriz es el menorvalor de su ¯la y a la vez el mayor de su columna. Escribir un m¶etodo que tenga comoentrada una matriz de n¶umeros enteros y calcule la posici¶on de un punto de silla (si esque existe).

21. Escribir un m¶etodo que calcule la media de los elementos de un vector.

22. Escribir un m¶etodo que calcule y devuelva la suma al cuadrado de las componentes de unvector.

23. Escribir un m¶etodo que calcule el producto escalar de dos vectores. Si v y w son los

vectores y n su tama~no, el producto escalar se calcula comonXi=1

vi ¤ wi.

24. Escribir el m¶etodo prod vec esc que calcule el producto de un escalar por un vector (de-vuelve el vector resultante de multiplicar todas las componentes del vector inicial por un

n¶umero):nXi=1

®vi.

25. Escribir el m¶etodo suma vec esc que calcule el vector resultante de sumar a cada una de

las componentes de un vector dado, un n¶umero:nXi=1

®+ vi.

26. Escribir un m¶etodo para para leer un vector de n componentes. Hallar e imprimir el mayory el menor elemento y el rango (Rango = Mayor ¡ Menor).

27. Escribir un m¶etodo para leer dos n¶umeros X y K y un vector A de dimensi¶on N . Ordenarel vector e insertar el n¶umero X en la posici¶on K del vector de manera que siempre quedeordenado.

28. Escribir un m¶etodo para leer una matriz A de orden M £N y un n¶umero K. Multiplicartodos los elementos de la matriz por el n¶umero K.

29. Leer una matriz C cuadrada de tama~no P . Escribir los elementos de la diagonal principal,secundaria, de la matriz triangular superior y de la matriz triangular inferior.

Page 209: Crestomatía

Cap¶³tulo 12

Creaci¶on e instanciaci¶on de clases

² Una vez que se han estudiados los elementos b¶asicos de la programaci¶on, el estudiante est¶aahora en condiciones de crear clases completar e instanciarlas.

² Debemos recordar que crear una clase es semejante a construir un molde para producir alg¶unobjeto, por ejemplo un queque. Desarrollar un molde puede tomar mucho tiempo, sin embargohasta este momento, ning¶un queque se ha producido. La buena noticia es que una vez hechoel molde podemos crear tantos objetos (<queques!) como se quiera y utilizar sus m¶etodos sinmolestarse en saber exactamente (<ocultando!) c¶omo fueron implementados.

² La sint¶axis para crear una clase es la siguiente: clase NombreClase

f// Declaraci¶on de atributos// Constructor(es)// Destructor// M¶etodos Get (Obtenga)// M¶etodos Set (Haga)// M¶etodos adicionales de la clase

g

² La declaraci¶on de los atributos se re¯ere a la consignaci¶on de todas aquellas \variables globales"propias de la clase. Dentro de un m¶etodo de la clase, al referirse a los atributos, se sabr¶a quese trata de uno ellos, pues no ¯guran ni como par¶ametro ni como variable.

² Ocasionalmente se cae en la tentaci¶on de declarar un par¶ametro o bien una variable local con unidenti¯cador id¶entido a un atributo. Normalmente se recomienda no hacerlo, sin embargo debequedar claro que a nivel local (dentro del m¶etodo) el identi¯cador se reconoce como par¶ametroo bien como variable y no como atributo. Si se desea, hacer menci¶on a un atributo en talsituaci¶on, se emplea la palabra reservada This seguido de un punto y del indenti¯cador delatributo. Explicaremos esto m¶as adelante mediante un ejemplo.

209

Page 210: Crestomatía

210 CAP¶ITULO 12. CREACI ¶ON E INSTANCIACI ¶ON DE CLASES

² El m¶etodo constructor es el que permite comunicarle a la computadora que debe reservarmemoria para todos los atributos de acuerdo con su tipo. Adem¶as este m¶etodo permite darlos valores iniciales a esos atributos. Normalmente las clases poseen dos tipos de m¶etodosconstructores: con p¶arametros y sin ellos.

² Los m¶etodos constructores sin par¶ametros permiten asignar memoria y valores inciales a losatributos sin requerir los valores inciales de estos: el desarrollador de la clase asigna los valoresiniciales de los atributos.

² Los m¶etodos constructores con par¶ametros son m¶as °exibles en el sentido que le permiten alprogramador que emplea la clase indicar cu¶ales deben ser los valores por asignarse.

² Los m¶etodos constructores SIEMPRE se denominan igual a la clase. Este es un requisitoindispensable. Si la clase posee varios m¶etodos constructores, el compilador sabr¶a cu¶al empleardependiendo del n¶umero de par¶ametros que encuentre, esto es, empleamos lo que se conocecomo polimor¯smo.

² El m¶etodo destructor permite indicar como disponible la memoria asignada a un objeto. Cier-tamente podr¶³amos interpretar esto como \borrar" el objeto. Si se crean pocos objetos de unaclase, normalmente no es necesario emplear el m¶etodo destructor, sin embargo si se instancianmuchos objetos y estos simplemente se dejan de lado una vez que se usan, puede caerse en unproblema de insu¯ciencia de memoria por parte del computador.

² Debe crearse un m¶etodo Get para cada uno de los atributos. Siguiendo la ¯losof¶³a de ocul-tamiento de la informaci¶on, es importante que los valores asignados a un atributo sean accedidosa trav¶es de un m¶etodo y no directamente. Si la clase cuenta con n atributos, debe entonces,escribirse n m¶etodos Get que devuelvan el valor asignado a un atributo.

² Debe crearse un m¶etodo Set para cada uno de los atributos. Siguiendo la ¯losof¶³a de ocultamien-to de la informaci¶on, es importante que los valores asignados a un atributo sean modi¯cadosa trav¶es de un m¶etodo y no directamente. Si la clase cuenta con n atributos, debe entonces,escribirse n m¶etodos Set que modi¯can el valor asignado a un atributo.

² Hasta aqu¶³ se han completado la parte rutinaria que se escribe cuando se declara una clase.Seguidamente se deben escribir los m¶etodos \espec¶³¯cos" o \propios" de la clase desarrolla-da. Cada uno estos m¶etodos implenta alguna funci¶on o acci¶on propia de la clase que se est¶amodelando. Los siguientes ejemplos explican mejor esta idea.

Ejemplo 12.1 Desarrollar la clase para el objeto cuadrado, implementando, adem¶as de losrutinarios, m¶etodos para el ¶area y el per¶³metro.

Page 211: Crestomatía

211

Soluci¶on:

En el caso de un cuadrado el principal atributo es la medida de su lado. Con base en ¶el podemosdeterminar el ¶area y el per¶³metro del cuadrado. La descripci¶on de la clase es como sigue.

clase Cuadradof // inicio de la clase

// Atributos°oat l;// Constructor sin par¶ametrosCuadrado()fl = 1;g// Constructor con par¶ametrosCuadrado(°oat x)fl = x;g// M¶etodo Get para l°oat GetL()f

Retunr(l);g

// M¶etodo Set para lvoid SetL(°oat x)f

l = x;g// M¶etodos espec¶³¯cos de la clase// M¶etodo para calcular el ¶area// °oat CalcArea()fReturn(l ¤ l);

g// M¶etodo para calcular el per¶³metro// °oat CalcPer¶³metro()fReturn(4 ¤ l);

g//

g // ¯n de la clase

² >C¶omo se instancia un objeto de la clase cuadrado?² Los objetos derivados de una clase se crean en forma semejante a la forma en que se declaranlas variables. Utilizamos para este prop¶osito la palabra reservada New. El operador New creauna instancia de una clase y devuelve una referencia a ese objeto. A continuaci¶on instanciamosun objeto llamado MiCuadrado de la clase cuadrado empleando para ello el constructor sinpar¶ametros.

cuadrado MiCuadrado = New Cuadrado();

² De igual forma se puede instanciar un nuevo objeto TuCuadrado de la clase cuadrado y conlado 10, empleando para ello el constructor con par¶ametro.

cuadrado TuCuadrado = New Cuadrado();

² >C¶omo empleamos los m¶etodos de los objetos instanciados? Para este prop¶osito empleamos unsimple punto seguido del nombre del m¶etodo invocado. Veamos algunos ejemplos:

{ Print(MiCuadrado.CalcArea()); // Se imprime 1.

Page 212: Crestomatía

212 CAP¶ITULO 12. CREACI ¶ON E INSTANCIACI ¶ON DE CLASES

{ MiCuadrado.SetL(5); // Se cambia el lado del cuadrado a 5

{ Print(MiCuadrado.CalcArea()); // Se imprime 25.

{ TuCuadrado.SetL(10); // Se cambia el lado del cuadrado a 10

{ Print(TuCuadrado.CalcArea()); // Se imprime 100.

{ MiCuadrado.SetL(TuCuadrado.GetL()); // los dos cuadrados son ahora congruentes

Ejemplo 12.2 Desarrollar la clase para el objeto c¶³rculo, implementando, adem¶as de losrutinarios, m¶etodos para el ¶area y el per¶³metro.

Clase Circulof

°oat r; //radio//contructor sin par¶ametroscirculo ()f

r = 1;g// contructor con par¶ametroscirculo (°oat x)fr = x;

g°oat GetR ()fReturn(r)

gvoid set SetR(°oat x )f

r = xg// M¶etodos espec¶³¯cos de la clase°oat CalcArea()f

Return(¼ ¤ r ¤ r)g°oat CalcPerimetro()f

Return(2 ¤ ¼ ¤ r)g

g //se termina la clase

Ejemplo 12.3 Para la clase Circulo del ejemplo 12.2 escriba las instrucciones para:

1. crear un objeto llamado MiCirculo de radio 1.

2. crear un objeto llamado TuCirculo de radio 10

3. escribir el ¶area de MiCirculo

4. modi¯car el radio de TuCirculo para que sea congruente con MiCirculo.

Soluci¶on:

Las instrucciones son como sigue:

1. circulo MiCirculo = New Circulo();

2. circulo TuCirculo = New Circulo(10);

3. Print(MiCirculo.CalcArea());

4. TuCirculo.SetR(MiCirculo.GetR());

Page 213: Crestomatía

213

Ejemplo 12.4 Desarrollar la clase para el objeto Tri¶angulo, implementando (adem¶as delos rutinarios), un m¶etodo que determine si las longitudes corresponden efectivamente a untri¶angulo, uno para el ¶area, uno para el per¶³metro y un m¶etodo para clasi¯car el tri¶angulo deacuerdo con sus lados.

Soluci¶on:

Se sabe que todo tri¶angulo est¶a compuesto por tres lados que posee una determinada longitud.Designamos entonces el nombre de la clase como clase Tri¶angulo. La descripci¶on de la clase escomo sigue:

clase Tri¶angulof // Inicio de la clase

°oat a; // lado No. 1°oat b; // lado No. 2°oat c; // lado No. 3// M¶etodo constructor sin par¶ametrosTriangulo( )f

a = 0; b = 0; c = 0;g// M¶etodo constructor con par¶ametrosTriangulo(°oat x, °oat y, °oat z)fa = x; b = y; c = z;

g// M¶etodos Setvoid SetA(°oat x)fa = xg

void SetB (°oat y)fb = yg

void SetC(°oat z)fc = zg

// M¶etodos Get°oat GetA ()f return(a) g

°oat GetB ()f return(b) g

°oat GetC ()f return(c) g

bool EsTri¶angulo( )fif ( (a > 0) and (b > 0) and (c > 0) and

(a < b+ c) and (b < a+ c) and (c < a+ b))

Page 214: Crestomatía

214 CAP¶ITULO 12. CREACI ¶ON E INSTANCIACI ¶ON DE CLASES

return(True)else

return(False)g°oat Per¶³metro ( )f Return(a+ b+ c) g°oat Area ()f°oat s, aux = ¡1 ;s = (a+ b+ c)=2;if (EsTri¶angulo() )

aux = sqrt(s ¤ (s¡ a) ¤ (s¡ b) ¤ (s¡ c));return(aux);

// Note que regresa ¡1 si no es un tri¶angulog

string TipoTri¶angulo()fstring aux = 'No es tri¶angulo';if(EsTri¶angulo())if((a == b) and (a == c) and ((b== c)) )aux = 'Equil¶atero'

elseif((a == b) or (a == c) or (b == c))aux = 'Is¶osceles'

elseaux = 'Escaleno'

gg // ¯n de la clase tri¶angulo

Ejemplo 12.5 Para la clase Tri¶angulo del ejemplo 12.4 escriba las instrucciones para:

1. crear un objeto Tri¶angulo llamado T1 con el constructor sin par¶ametros.

2. crear un objeto Tri¶angulo llamado T2 en las que las medidas de sus lados son 3,4 y 5,respectivamente.

3. crear un objeto Tri¶angulo llamado T3 en las que las medidas de sus lados son 1,1 y 7,respectivamente.

4. crear un objeto Tri¶angulo llamado T4 en las que las medidas de sus lados son 4,4 y 4,respectivamente. par¶ametros

5. cambiar las medidas del objeto T1 a 3,4,6

6. calcular los per¶³metros de los cuatro objetos tri¶angulo.

7. calcular las ¶areas de los cuatro objetos tri¶angulo creados.

Page 215: Crestomatía

215

8. imprimir el tipo de tri¶angulo a que pertenece cada tipo de objeto tri¶angulo.

Soluci¶on: Las instrucciones para conseguir lo solicitado son como sigue:

1. Tri¶angulo T1 = new Tri¶angulo( );

2. Tri¶angulo T2 = new Tri¶angulo(3,4,5);

3. Tri¶angulo T3 = new Tri¶angulo(1,1,7);

4. Tri¶angulo T4 = new Triangulo(4,4,4);

5. T1.SetA(3); T1.SetB(4); T1.SetC(6);

6. Print(T1.Per¶³metro()); Print(T2.Per¶³metro());Print(T3.Per¶³metro()); Print(T4.Per¶³metro());

7. Print(T1.Area()); Print(T2.Area()); Print(T3.Area()); Print(T4.Area());

El el caso del tri¶angulo T3, se escribe¡1 cuando se pregunta por su ¶area como un indicativode que las medidas proporcionadas no corresponden a las medidas de un tri¶angulo.

Ejemplo 12.6 Desarrollar la clase para el objeto Par¶abola. La clase debe tener un construc-tor que genere la par¶abola y = x2, un constructor para una par¶abola con coe¯cientes arbitrarios,los m¶etodos tipo Get, los de tipo Set, un m¶etodo calcule el discriminante, uno que indique laintersecci¶on con el eje y, uno que imprima la intersecci¶on con en el eje x en el caso de que existao en su defecto; un mensaje de no intersecci¶on con tal eje y ¯nalmente un m¶etodo que indiquela concavidad.

clase Par¶abolaf// Inicio de la clase

°oat a, b, c;// Suponemos y = ax2 + bx+ cPar¶abola() // Generar y = x2

f a = 1; b = 0; c = 0;gPar¶abola(°oat u, v, w)fif(u6= 0)a = u

elsea = 1;

// rede¯nimos para que sea par¶abolab = v; c = w;g

°oat GetA()fReturn( a)g

°oat GetB()

fReturn( b)g°oat GetC()fReturn( c)g

void SetA(°oat v)fif( v6= 0)a = v

elsePrint('Error'); // no se modi¯ca

gvoid SetB(°oat v)f b = vg

void SetC(°oat v)f c = vg

°oat Discriminante()fReturn( b ¤ b¡ 4 ¤ a ¤ c)g

°oat Intersecci¶onEjeY()fReturn(c)g

Page 216: Crestomatía

216 CAP¶ITULO 12. CREACI ¶ON E INSTANCIACI ¶ON DE CLASES

void Intersecci¶onEjeX()f°oat aux;aux = Discriminante();if(aux > 0)f

Print((¡b+ Sqrt(aux)) = (2 ¤ a));Print((¡b¡ Sqrt(aux)) = (2 ¤ a));

gelseif(aux == 0)

Print(¡b=(2 ¤ a))

elsePrint('No corta el eje x');

gstring Concavidad()fif( a > 0)Print('Abre hacia arriba')

elsePrint('Abre hacia abajo');

gg// Fin de la clase

Ejemplo 12.7 Para la clase Par¶abola del ejemplo 12.6 escriba las instrucciones para:

1. crear un objeto Par¶abola llamado P1 con el constructor sin par¶ametros.

2. crear un objeto Par¶abola llamado P2 que represente y = 5x2 + 2x.

3. crear un objeto Par¶abola llamado P3 que represente y = ¡x2 ¡ 4.4. intentar cambiar el coe¯ciente de x2 para P1 a 0 (>qu¶e pasa?)

5. imprimir la concavidad de P2.

6. imprimir la intersecci¶on de P3 con el eje x.

Soluci¶on: El c¶odigo solicitado es como sigue:

1. Para crear un objeto Par¶abola llamado P1 con el constructor sin par¶ametros.

Par¶abola P1 = New Par¶abola();

2. Para crear un objeto Par¶abola llamado P2 que represente y = 5x2 + 2x.

Par¶abola P2 = New Par¶abola(5, 2, 0);

3. Para crear un objeto Par¶abola llamado P3 que represente y = ¡x2 ¡ 4.Par¶abola P3 = New Par¶abola(¡1; 0;¡4);

4. Para intentar cambiar el coe¯ciente de x2 para P1 a 0 (>qu¶e pasa?)

P1.SetA(0);

Se escribe un mensaje de error y el valor del coe¯ciente de x2 queda inalterado.

5. Para imprimir la concavidad de P2.

Print(P2.Concavidad());

6. Para imprimir la intersecci¶on de P3 con el eje x.

Print(P3.Intersecci¶onEjeX());

Page 217: Crestomatía

217

Ejemplo 12.8 Suponga que a, b y c son variables enteras y que si es una variable booleana.Considere adem¶as las siguientes declaraciones:

bool uno(int x, y);. . .

void dos(int &x, &y). . .

int tres(int x);. . .

>Cu¶ales de las siguientes llamadas a los m¶etodos desde el cuerpo del programa principal, sonv¶alidas y por qu¶e?

1. if(si == uno(a; b)). . .

2. si = dos(c; 5);

3. if(tres(a))

4. dos(a; b+ 3);

5. dos(a; tres(a))

6. b = tres(dos(a; 5))

7. si = uno(c; 5);

8. dos(tres(b); c);

9. dos(4; c)

Soluci¶on:

1. La llamada est¶a bien, porque est¶a llamando a una funci¶on, ya que est¶a utilizando variasl¶³neas (a los procedimientos se les llama en una sola l¶³nea) y adem¶as lo est¶a utilizandocomo l¶ogico. Las variables coinciden con el tipo que son, es decir, tanto `acomo`b sonENTEROS. Por lo tanto la llamada es CORRECTA.

2. En este caso la variable si es l¶ogica. La asignaci¶on que le est¶a haciendo es un procedimiento,pero a los procedimientos se les llama solos no con asignaci¶on, por lo tanto la llamada esINCORRECTA.

Page 218: Crestomatía

218 CAP¶ITULO 12. CREACI ¶ON E INSTANCIACI ¶ON DE CLASES

3. Est¶a llamando a una funci¶on, porque se utilizan varias l¶³neas. Entre SI y tres se necesita unl¶ogico, pero la funci¶on tres devuelve un entero, por lo tanto la llamada es INCORRECTA.

4. La llamada al procedimiento es CORRECTA. Tanto a como b+ 3 son enteros, as¶³ que secorresponden con el tipo de variables de¯nidas en la cabecera del procedimiento.

5. Como se llama en una sola l¶³nea y s¶olo la llamada es a un procedimiento. El par¶ametroa est¶a bien y se corresponde con x. tres(a) es la llamada a una funci¶on que devuelve unentero, luego el tipo se corresponde con la y que tambi¶en es un entero. Por lo tanto lallamada es CORRECTA.

6. Se trata de la llamada a una funci¶on, ya que va en una asignaci¶on, pero dentro de lafunci¶on hay una llamada a un procedimiento lo cual est¶a mal porque los procedimientosse llaman solos. Por lo tanto, en este caso, la llamada es INCORRECTA.

7. Estamos llamando a una funci¶on que para que se corresponda con el tipo de la variablesi debe ser de tipo l¶ogico, lo cual la funci¶on uno, que es la que est¶a asignada, lo cumple,adem¶as tanto c como 5 son enteros. Por todo esto la llamada es CORRECTA.

8. Es una llamada a un procedimiento, porque lo llama s¶olo, pero est¶a mal porque en elprimer par¶ametro est¶a haciendo una llamada a una funci¶on y se debe corresponder conuna sola variable. En este caso la llamada es INCORRECTA.

9. Es una llamada a un procedimiento, pero est¶a mal porque &x s¶olo se puede correspondercon una variable y no con una constante como en este caso, por lo tanto la llamada esINCORRECTA.

12.1 Ejercicios del cap¶³tulo

Nota: Algunos de los problemas que se proponen seguidamente son bastante extensos y hansido aplicados como proyectos o tareas en otros cursos. La selecci¶on de los problemas no hasido exhaustiva por lo que el estudiante no se debe asustar por el nivel de algunos ejerciciospropuestos. Debe consultar con su profesor(a) cuando tenga dudas.

1. Escriba una clase Automovil. Debe contener 2 atributos: peso y numeroDeEjes. Estosatributos deben ser accesibles solo para esta clase y sus subclases. Debe contener lossiguientes m¶etodos: constructor con 2 argumentos, constructor con 0 argumentos quedebe llamar al otro constructor e inicializar todos los valores en 2 ejes y 600 kilos. Debenexistir \getters" y \setters" para cada atributo de la clase. Deben existir adem¶as unm¶etodo para obtener el peso distribuido por cada eje.

2. Considere un problema en el cual se deban realizar c¶alculos sobre ¯guras geom¶etricasplanas simples, tales como rect¶angulos. Escriba una clase (cRect) que contenga los si-guientes miembros:

(a) privados: - lado mayor (lama) y lado menor (lame): reales.

Page 219: Crestomatía

12.1. EJERCICIOS DEL CAP¶ITULO 219

(b) p¶ublicos:

i. un constructor void, tal que inicialice los lados en uno.

ii. un constructor que reciba los valores de los dos lados del rect¶angulo.

iii. los get y los set correspondientes.

perimetro un m¶etodo que eval¶ue el per¶³metro de rect¶angulo.

area un m¶etodo que eval¶ue el ¶area del rect¶angulo.

muestra un m¶etodo que muestra los lados mayor y menor.

3. Suponga que le piden realizar operaciones aritm¶eticas exactas entre fracciones enteras,para lo cual Ud. debe construir una clase que lo permita. Dise~ne y escriba una clase

(cFrac) tal que manipule la fracci¶onp

qmediante los enteros (p; q) que de¯nen la fracci¶on

y habilite al usuario realizar las siguientes operaciones en otras clases:

(a) que el constructor sin par¶ametros de¯na la fraccion (0; 1), es decir0

1.

(b) un constructor que reciba dos valores enteros a y b.

(c) un m¶etodo que sume con otra fracci¶on.

(d) un m¶etodo que reste con otra fracci¶on.

(e) un m¶etodo que multiplique por otra fracci¶on.

(f) un m¶etodo que divida entre otra fracci¶on.

(Los cuatro m¶etodos anteriores deben regresar una cFrac)

(g) un m¶etodo que indica si la fracci¶on es mayor que otra.

(h) un m¶etodo que indica si la fracci¶on es menor que otra.

(i) un m¶etodo que indica si la fracci¶on es igual a otra.

Las fracciones siempre deben presentarse y manejarse simpli¯cadas, es decir si existenfactores enteros comunes entre el numerador y denominador deben ser eliminados, detal forma que la fracci¶on se maneje en su forma m¶as simple. Por ejemplo, si se de¯necFrac(12,18 ), entonces a nivel interno p = 2, q = 3, ya que

12

18=µ6 ¤ 26 ¤ 3

¶=2

3:

El m¶etodo de simpli¯caci¶on debe estar encapsulado en la clase como privado y debellamarse luego de usar el segundo constructor propuesto y despu¶es de cada operaci¶onentre fracciones.

4. Escriba una clase que contenga como miembros privados una tercia de n¶umeros enterosno negativos, los cuales representan un ¶angulo (cAngulo) en grados sexagesimales (0 : 0 :0359 : 59 : 59), la tercia puede ser de la forma (g;m; s), correspondientes su valor engrados, minutos y segundos, donde

g = 0359;m = 059;s = 059:

Implemente m¶etodos que permitan ejecutar las siguientes acciones:

Page 220: Crestomatía

220 CAP¶ITULO 12. CREACI ¶ON E INSTANCIACI ¶ON DE CLASES

(a) Crear un objeto con los par¶ametros (gg;mm; ss). Con valores por omisi¶on (0; 0; 0).

(b) Sumar dos ¶angulos.

(c) Restar dos ¶angulos.

(d) Multiplicar un ¶angulo por un n¶umero real entre 0 y 1.

(e) Dividir un ¶angulo entre un entero [2; 30].

(f) Incrementa un segundo.

(g) Decrementa un segundo.

(h) Incrementa un minuto.

(i) Decrementa un minuto.

(j) Incrementa un grado.

(k) Decrementa un grado.

(l) Escribe ¶angulo actual a pantalla

Recuerde que en todos los casos el dato interno para la tercia (g, m, s) debe mantenerseen los rangos correctos, es decir:

(0; 10; 50) + (2; 30; 32) = (2; 41; 12)(3; 22; 33) + (4; 44; 30) = (8; 7; 3)

En caso que una suma exceda el l¶³mite superior, entonces se reinicia la numeraci¶on en cerorespetando el remanente, es decir:

(340; 10; 20) + (40; 30; 30) = (20; 40; 50)

En el caso de la resta, el producto y la divisi¶on debe utilizarse una l¶ogica similar.

5. Un astr¶onomo luego de entender que los n¶umeros enteros tienen un tama~no m¶aximodependiendo del n¶umero de bits que se utilicen para representarlos, ha decidido darleuna beca a Ud. para escriba una clase que maneje n¶umeros enteros \astron¶omicos", esdecir n¶umeros decimales mucho muy grandes. Para esto el astr¶onomo ha concluido quedebe manejar cantidades decimales enteras de hasta 30 d¶³gitos y requiere de m¶etodossolo para sumar y multiplicar. Es claro que luego de hacer una multiplicaci¶on entre dosn¶umeros de este tama~no, el resultado podr¶³a alcanzar hasta 60 d¶³gitos. Implemente unaclase (cGranint) que permita hacer las operaciones solicitadas. Utilice las tablas de sumay multiplicaci¶on manuales y una representaci¶on de cadenas para los n¶umeros.

6. Un cerrojo con combinaci¶on tiene las siguientes propiedades b¶asicas: la combinaci¶on (unasecuencia de tres n¶umeros) est¶a oculta; el cerrojo se puede abrir proporcionando la com-binaci¶on; y la combinaci¶on se puede cambiar, pero solamente por alguien que conocela combinaci¶on actual. Dise~ne una clase con m¶etodos p¶ublicos abrir y cambiarComb, yatributos privados para almacenar la combinaci¶on. La combinaci¶on deber¶³a asignarse enel constructor.

7. Se dispone de la clase Coche declarada de la siguiente manera:

Page 221: Crestomatía

12.1. EJERCICIOS DEL CAP¶ITULO 221

public class Cochef

private int color;private String modelo;public static ¯nal int ROJO=1;public static ¯nal int VERDE=2;public static ¯nal int AZUL=3;

gSe pide a~nadir a esta clase un constructor al que se le pasen como par¶ametros un n¶umeroentero (el color del coche) y un string (el modelo). El constructor deber¶a comprobarsi el valor del color coincide con alguna de las constantes de arriba. En caso a¯rmativo,almacenar¶a el color y el modelo en los campos correspondientes. En caso negativo, lanzar¶auna excepci¶on ColorErroneo, que ha sido declarada aparte.

Escribir un m¶etodo para la clase Coche indicada arriba que muestre el modelo del cochey su color en letra (rojo, verde, o azul).

8. Un intervalo cerrado [a; b] sobre los n¶umeros reales viene dado por dos n¶umeros reales ay b . Escribir una clase Intervalo para representar intervalos de n¶umeros reales. La clasedebe contener al menos los siguientes m¶etodos:

(a) °oat longitud(): Devuelve la longitud del intervalo. Se llama longitud del intervalo alvalor b¡ a.

(b) bool vac¶³o(): Devuelve true si el intervalo est¶a vac¶³o o false. El intervalo se dice vac¶³osi b < a.

(c) Intervalo intersecci¶on(Intervalo) devuelve un nuevo intervalo, resultado de la uni¶ondel intervalo actual con el que se pasa como par¶ametro. El intervalo actual no debequedar modi¯cado. La intersecci¶on de dos intervalos es el intervalo que contiene todoslos valores comunes a los dos intervalos. Por ejemplo la intersecci¶on de los intervalos[3:2; 5] y [1; 4] ser¶³a el nuevo intervalo [3:2; 4], mientras que la intersecci¶on de[3:2; 5] y[7; 9] ser¶³a el intervalo vac¶³o (que podemos representar por ejemplo como[¡1; 0].

(d) Un m¶etodo String toString() que devuelve un String representando el intervalo comopor ejemplo "[3:3; 4:89]".

Escribir una clase Principal con un m¶etodo main que de¯na tres intervalosa = [1; 5],b = [2; 4], c = [3; 6], los muestre mediante toString() y calcule y muestre por pantalla elintervalo que se obtiene al hacer la intersecci¶on de los 3 intervalos.

9. Escribir una clase Media que sirva para calcular la media de una secuencia de n¶umeros.Debe disponer de los siguientes m¶etodos, adem¶as de los atributos y constructor que seconsideren necesarios:

(a) a~nade: Recibe como par¶ametro un nuevo elemento de la secuencia.

(b) media: no tiene par¶ametros, y devuelve la media de los n¶umeros a~nadidos hasta ahoraen forma de n¶umero real (°oat).

Page 222: Crestomatía

222 CAP¶ITULO 12. CREACI ¶ON E INSTANCIACI ¶ON DE CLASES

Escribir adem¶as un programa principal en el que se vaya leyendo n¶umeros enteros deteclado y a~nadi¶endolos a un objeto de tipo Media, hasta que el usuario escriba un n¶umeronegativo, momento en el que se mostrar¶a por pantalla la media de los valores introducidos.

10. Escribir una clase Televisi¶on. En la televisi¶on nos interesa el nombre de cada canal quepuede sintonizar, el n¶umero que corresponde al canal y el n¶umero del canal que se est¶aviendo en este momento. La clase debe contener:

(a) Atributos: Un array de valores de tipo String con los nombres de los canales que sepueden ver en la televisi¶on. El String de la posici¶on 0 corresponde al nombre de laemisora que se puede ver en el canal n¶umero 1, el de la posici¶on 1 corresponde alcanal n¶umero 2, y as¶³ sucesivamente. Un entero (mayor o igual que 1) que representael canal actual que se est¶a viendo.

(b) M¶etodos

i. Un constructor que recibe como par¶ametro una array con los valores de tipo Stringconteniendo los nombres de los canales que se pueden ver en la televisi¶on y quesirve para inicializar el atributo descrito en el punto (a). El objeto guardar¶a est¶ainformaci¶on y ¯jar¶a como canal actual el 1.

ii. nombreCanal: recibe como par¶ametro un n¶umero de canal (un entero) y devuelvasu nombre (un String). Si el canal no existe se devolver¶a la cadena "no sintoniza-do".

iii. n¶umCanales: Sin par¶ametros, devuelve el n¶umero de canales de la televisi¶on.

iv. v¶alido: recibe como par¶ametro un entero y devuelve true si el valor correspondea un canal de la televisi¶on, es decir si es mayor o igual que 1 y menor o igual a lalongitud del array de canales, o false en caso contrario.

v. canal: sin par¶ametros, devuelve un entero representando el canal actual.

vi. cambia: recibe un par¶ametro de tipo entero con el n¶umero de canal al que se deseacambiar. Modi¯ca el atributo que indica el canal actual y no devuelve nada. Siel canal propuesto no es v¶alido, el m¶etodo no har¶a nada.

vii. cambia (el mismo nombre que el anterior): recibe como par¶ametro un String conel nombre de la cadena y cambia el canal que corresponde al nombre (suponemosque hay uno a lo sumo). Modi¯ca el atributo que indica el canal actual y nodevuelve nada. Si el canal no se encuentra en el array el m¶etodo no har¶a nada.

Escribir tambi¶en un programa principal que utilice la clase anterior. El programa usar¶aun objeto de tipo Televisi¶on, inicializada con los canales "Tele L¶on", "Canal Eto", "CanalPlas" y "TeleJava". El programa mostrar¶a el nombre del canal actual, y le pedir¶a alusuario el n¶umero del canal al que se se desea cambiar. Este proceso se repetir¶a hasta queel usuario introduzca el valor 0. Ejemplo:

(a) Canal actual: 1.- Tele L¶on

(b) >Nuevo canal? 3

(c) Canal actual: 3.- Canal Plas

(d) >Nuevo canal? 2

Page 223: Crestomatía

12.1. EJERCICIOS DEL CAP¶ITULO 223

(e) Canal actual: 2.- Canal Java

(f) >Nuevo canal? 0

(g) Televisi¶on apagada

11. Debe escribir una clase Ascensor para representar el movimiento de un ascensor cuandose le llama desde una planta (no nos ocupamos de los botones de dentro del ascensor).Para representar el estado del ascensor necesitamos conocer en cada momento:

(a) El piso en el que se encuentra (un n¶umero mayor o igual que 0).

(b) Si tiene las puertas abiertas o cerradas.

(c) Si hay alg¶un bot¶on de llamada pulsado, y si lo hay a qu¶e piso corresponde. Nuncapuede haber m¶as de un bot¶on pulsado; el ascensor s¶olo atiende" a una pulsaci¶on cadavez.

La clase debe contener los atributos que se consideren necesarios y al menos los siguientesm¶etodos:

(a) Un constructor sin par¶ametros. Al crearse un objeto de tipo Ascensor, ¶este debeencontrarse en la planta 0, con las puertas cerradas y se supone que no hay ning¶unbot¶on

(b) de llamada pulsado.

(c) puertasAbiertas: devuelve true si las puertas est¶an abiertas, y false si est¶an cerradas.

(d) pisoActual: Devuelve el piso en el que se encuentra el ascensor.

(e) libre: Devuelve true si no hay bot¶on pulsado, o false si s¶³ lo hay.

(f) pulsado: Recibe como par¶ametro un entero n indicando el n¶umero de piso en el quese ha pulsado el bot¶on de llamada. Si el ascensor no est¶a libre no hace nada. Si s¶³

(g) est¶a libre, apunta que el bot¶on pulsado es n (con lo que deja de estar libre). Encualquier caso el piso actual no cambia, ni tampoco se abren/cierran las puertas.mueve: M¶etodo sin par¶ametros que simula el movimiento del ascensor. Si el ascensorest¶a libre no har¶a nada. Si hay alguno pueden darse dos situaciones:

i. El piso de llamada corresponde con el piso actual. En este caso se abren laspuertas (para que entr¶e quien llam¶o) y se indica que no hay ning¶un bot¶on pulsado(porque la

ii. llamada ya ha sido atendida).

iii. El piso de llamada es distinto al piso actual. En este caso el ascensor se asegurade que tiene las puertas cerradas y se mueve un piso en la direcci¶on adecuada.Por ejemplo, si

iv. estaba en el 3 y se le llama desde el 6, tras la llamada a este m¶etodo el ascensorse encontrar¶a en el piso 4.

v. Un m¶etodo sin par¶ametros toString que devuelve un String indicando en qu¶e pisose encuentra el ascensor, si est¶a libre u ocupado, y si tiene las puertas abiertas ocerradas, lo que se representar¶a respectivamente por "] [" y por "[ ]".

Page 224: Crestomatía

224 CAP¶ITULO 12. CREACI ¶ON E INSTANCIACI ¶ON DE CLASES

Escribir adem¶as un programa principal que utilice la clase Ascensor. El programa debemostrar en cada momento el piso del ascensor, si est¶a libre o ocupado y si las puertasest¶an abiertas o cerradas. Despu¶es de mostrar el estos datos el programa presentar¶a unmen¶u que permitir¶a mover el ascensor, pulsar un bot¶on o salir del programa. El procesose repetir¶a hasta que el usuario decida acabar, como en el siguiente ejemplo:

(a) Piso 0 - Libre - [ ]

(b) - Salir

(c) - Mover

(d) - Pulsar

(e) 2

(f) Piso en el que se pulsa el bot¶on de lla-mada: 2

(g) Piso 0 - Ocupado - [ ]

(h) - Salir

(i) - Mover

(j) - Pulsar

(k) 1

(l) Piso 1 - Ocupado - [ ]

(m) - Salir

(n) - Mover

(o) - Pulsar

(p) 1

(q) Piso 2 - Ocupado - [ ]

(r) - Salir

(s) - Mover

(t) - Pulsar

(u) 1

(v) Piso 2 - Libre - ] [

(w) - Salir

(x) - Mover

(y) - Pulsar

(z) 0

12. Elaborar una clase llamada Paciente con los siguientes atributos o propiedades:

(a) Nombre

(b) Edad

(c) Sexo

(d) Estado civil (soltero, casado, viudo, divorciado, uni¶on libre)

(e) Operaciones Quir¶urgicas (cantidad de operaciones que se le han hecho al pacientedurante su vida)

(f) N¶umero de consultas: ser¶a un entero que se incrementar¶a por cada consulta nueva.

(g) Expediente: Ser¶a un arreglo de 10 casillas para almacenar las n consultas del pa-ciente.Cada elemento del arreglo ser¶a un objetos de tipo clase Consulta.

La clase Consulta tambi¶en se deber¶a de elaborar y contendr¶a los siguientes atributos ypropiedades:

(a) Fecha de consulta

(b) Descripci¶on de Enfermedad

(c) Receta

Se deber¶a de de¯nir un constructor que asigne los valores correspondientes a cada propiedady adem¶as un m¶etodo para obtener los datos de la consulta como una cadena en la quecada dato este separado con un gui¶on.

Programar para la clase Paciente los siguientes constructores:

Page 225: Crestomatía

12.1. EJERCICIOS DEL CAP¶ITULO 225

(a) Constructor por defecto: el cual incializar¶a los atributos o propiedades a los valorespor defecto.

(b) Constructor que reciba los valores generales: nombre, edad, sexo, estado civil y ope-raciones quir¶urgicas como par¶ametros e inicialice ¶estos atributos o propiedades dela clase. Los atributos restantes se deber¶an inicializar a trav¶es del constructor pordefecto.

Programar para la clase Paciente los siguientes m¶etodos:

(a) Un m¶etodo llamado obtdatos sin par¶ametros para obtener los datos generales delpaciente como una cadena, separando por comas cada dato.

(b) Un m¶etodo llamado altaConsulta que reciba como par¶ametro un objeto de tipo Con-sulta y que permita dar de alta una consulta dentro del expediente y adem¶as actualiceel

(c) n¶umero de consultas.

(d) Un m¶etodo llamado listarConsulta sin par¶ametros que liste o escriba todas las con-sultas del expediente.

Escribir un programa principal para probar cada uno de los constructores y m¶etodos dela clase Paciente.

13. Se desea de¯nir e implementar la clase CLibro que contiene informacion relativa a un librode texto de la asignatura de Laboratorio de Programacion 2. Los atributos de esta claseson:

(a) nombreLibro: una cadena de caracteres para almacenar el nombre del libro.

(b) ISBN: un atributo de tipo natural donde se almacena el ISBN del libro.

(c) autores: una lista con los autores del libro.

La clase CLibro debera contar en su interfaz con los siguientes m¶etodos:

(a) Constructor sin par¶ametros, que crear¶a un libro "vac¶³o" (sin autores, con nombrevac¶³o y con ISBN igual a cero, inicialmente).

(b) Destructor.

(c) Metodo para asignar/cambiar nombre al libro,

(d) Metodo para AsignarNombre

(e) Metodo para asignar/cambiar ISBN al libro,

(f) Metodo para AsignarISBN;

(g) M¶etodo para a~nadir un autor al libro, situ¶andolo al ¯nal de la lista de los autores queya existen.

(h) M¶etodo para copiar un libro en otro libro; recibir¶a como parametro un objeto de lamisma clase CLibro cuyo atributos, incluyendo la lista de autores completa, con todossus datos, deber¶an copiarse en el objeto actual; previamente deber¶a eliminar la listade autores que hubiera en ese momento en el objeto actual. El encambezado es algocomo

void CopiarLibro(CLibro &otroLibro);

Page 226: Crestomatía

226 CAP¶ITULO 12. CREACI ¶ON E INSTANCIACI ¶ON DE CLASES

14. Elaborar una clase llamada Estudiante con los siguientes atributos :

(a) Numero de control: validar que sea un n¶umero de control valido de 8 d¶³gitos con-siderando las siguientes reglas:

i. Los primeros 2 d¶³gitos son el a~no de ingreso a la escuela.

ii. Los siguientes 2 d¶³gitos son el n¶umero de sede que para Heredia debe ser 45.

iii. Los siguientes 4 d¶³gitos es un consecutivo por cada alumno.

Ejemplo de no. ctrl. valido: 05450131

(b) Edad

(c) Sexo: solo deber¶a de aceptar valores validos: F o M

(d) Carrera: validar que la carrera sea un valor valido: INF, ADM, MAT, IEQ.

(e) N¶umero de materias cursadas: ser¶a un entero que se incrementar¶a por cada materiacursada.

(f) Kardex: Ser¶a un arreglo de 50 casillas para almacenar las n materias cursadas delEstudiante. Nota: El kardex, es un documento que se emplea administrativamenteen las escuelas y que incluye datos generales de la escuela y del alumno adem¶as de lascali¯caciones otenidas en los ciclos lectivos y el promedio de las mismas. Al mismotiempo la cali¯cacion ¯nal obtenida al ¯nal de cada ciclo escolar.

Cada elemento del arreglo ser¶a un objeto de tipo clase Materia. La clase Materia tambi¶ense deber¶a de elaborar y contendr¶a los siguientes atributos:

(a) Clave de la materia: se formar¶a de manera autom¶atica con las 3 letras de la carrera,un gui¶on y las 3 letras iniciales del nombre, el semestre y la primera letra del tipo decurso. Por ejemplo: ISC-PRO2R

(b) Nombre de la materia

(c) Tipo de curso: puede ser Ordinario, Repetici¶on, Especial.

(d) Semestre: validar que sea un semestre valido en el rango (1..12)

(e) Promedio ¯nal: validar que sea una cali¯caci¶on valida en el rango (0..100)

Para la clase Materia:

(a) Se deber¶a de de¯nir un constructor que asigne los valores correspondientes a cadapropiedad considerando sus respectivas validaciones y la generaci¶on de la clave de la

(b) materia.

(c) Elaborar un m¶etodo para obtener los datos de cada Materia como una cadena en laque cada dato este separado por espacios.

(d) Elaborar un m¶etodo para generar o crear la clave de la materia.

(e) Elaborar m¶etodos para cambiar el promedio, semestre y tipo de curso de una materia.

Programar para la clase Estudiante los siguientes constructores considerando las respec-tivas validaciones:

(a) Constructor por defecto: el cual incializar¶a los atributos o propiedades a los valorespor defecto.

Page 227: Crestomatía

12.1. EJERCICIOS DEL CAP¶ITULO 227

(b) Constructor que reciba los valores generales: no. ctrl., nombre, edad, sexo, carreracomo par¶ametros e inicialice ¶estos atributos o propiedades de la clase. Los atributosrestantes se deber¶an inicializar a trav¶es del constructor por defecto.

Programar para la clase Estudiante los siguientes m¶etodos:

(a) Un m¶etodo llamado obtdatos sin par¶ametros para obtener los datos generales delEstudiante como una cadena, separando por comas cada dato.

(b) Un m¶etodo llamado altaMateria que reciba como par¶ametro un objeto de tipo Materiay que permita dar de alta una materia dentro del kardex y adem¶as actualice el

(c) n¶umero de materias cursadas.

(d) Un m¶etodo llamado eliminaMateria que reciba como par¶ametro la clave de una ma-teria, la busque y la elimine del arreglo kardex.

(e) Un m¶etodo ConsultaKardex sin par¶ametros que liste todas las materias del kardexcon su respectiva informaci¶on.

(f) Un m¶etodo llamado obtPromedio sin par¶ametros para calcular el promedio ¯nal detodas las materias dentro del kardex.