Cartilla - Autoestudio - V9 Programacion y Estructura de Datos
Cartilla - Autoestudio - V9 Programacion y Estructura de Datos
Cartilla - Autoestudio - V9 Programacion y Estructura de Datos
PRESENTACIN.....................................................................................................5 INTRODUCCIN: ...................................................................................................6 I. COMPETENCIAS..................................................................................................7 a. BSICAS...........................................................................................................7 b. GENRICAS O TRANSVERSALES.................................................................7 c. ESPECFICAS...................................................................................................7 II. MAPA DE CONCEPTOS .....................................................................................8 1 METODOLOGA DE LA PROGRAMACIN.........................................................9 1.1 INTRODUCCIN............................................................................................9 1.2 CONOCIMIENTOS PREVIOS......................................................................10 1.3 DESEMPEOS.............................................................................................10 1.4 RUBRICA DE EVALUACIN........................................................................11 1.5 TEMTICAS..................................................................................................12 1.1 Lenguajes de Programacin ........................................................................12 1.2 La informacin y su procesamiento .............................................................17 1.3 Algoritmos....................................................................................................22 1.4 Diagramas de Flujo.......................................................................................23 1.5 Pseudocdigo................................................................................................27 2.6 INTERACTIVIDADES DE APRENDIZAJE...................................................28 1.6 INTERACTIVIDAD INDIVIDUAL...................................................................29 1.7 INTERACTIVIDAD COLABORATIVA...........................................................29 1.8 INTERACTIVIDAD DE APOYO Y COMPLEMENTARIA..............................29 1.9 BIBLIOGRAFIA ............................................................................................30 1.10 CIBERGRAFIA............................................................................................30 1.11 AUTOEVALUACIN...................................................................................31 1.12 GLOSARIO..................................................................................................33 2 DATOS Y OPERACIONES BSICAS.................................................................36 2.1 INTRODUCCIN..........................................................................................36 2.2 CONOCIMIENTOS PREVIOS......................................................................36 2.3 DESEMPEOS.............................................................................................37 2.4 RUBRICA DE EVALUACIN........................................................................38 2.5 TEMTICAS..................................................................................................40 2.1 Arquitectura de Hardware de los Computadores..........................................40 2.2 Tipos de datos ..............................................................................................44 2.3 Variables ......................................................................................................45 2.4 Constantes .................................................................................................45 2.5 Operadores .................................................................................................46 2.6 Palabras Reservadas....................................................................................48 2.6 INTERACTIVIDADES DE APRENDIZAJE...................................................48 2.7 INTERACTIVIDAD INDIVIDUAL...................................................................48 2.8 INTERACTIVIDAD COLABORATIVA...........................................................49 2.9 INTERACTIVIDAD DE APOYO Y COMPLEMENTARIA..............................49
2.10 BIBLIOGRAFA...........................................................................................50 2.11 CIBERGRAFA............................................................................................50 2.12 AUTOEVALUACIN...................................................................................51 2.13 GLOSARIO..................................................................................................53 3 LENGUAJE DE PROGRAMACIN C++.............................................................56 3.1 INTRODUCCIN .........................................................................................56 3.2 CONOCIMIENTOS PREVIOS......................................................................57 3.3 DESEMPEOS.............................................................................................57 3.4 RUBRICA DE EVALUACIN........................................................................58 3.5 TEMTICAS..................................................................................................60 3.1 Lenguaje C++................................................................................................60 3.2 Tipos de variables.........................................................................................67 3.3 Palabras Reservadas ...................................................................................70 3.4 Constantes y enumeraciones........................................................................70 4.6 INTERACTIVIDADES DE APRENDIZAJE...................................................71 3.5 INTERACTIVIDAD INDIVIDUAL...................................................................71 3.6 INTERACTIVIDAD COLABORATIVA...........................................................72 3.7 INTERACTIVIDAD DE APOYO Y COMPLEMENTARIA..............................72 3.8 BIBLIOGRAFA.............................................................................................72 3.9 CIBERGRAFA..............................................................................................73 3.10 AUTOEVALUACIN...................................................................................74 3.11 GLOSARIO..................................................................................................76 4 OPERADORES, EXPRESIONES Y SENTENCIAS............................................79 4.1 INTRODUCCIN..........................................................................................79 4.2 CONOCIMIENTOS PREVIOS......................................................................79 4.3 DESEMPEOS.............................................................................................79 4.4 RUBRICA DE EVALUACIN........................................................................81 4.5 TEMTICAS .................................................................................................82 4.1 Operadores...................................................................................................82 4.2 Expresiones...................................................................................................85 4.3 Reglas de precedencia y asociatividad.........................................................87 4.4 Sentencias.....................................................................................................88 4.5 INTERACTIVIDADES DE APRENDIZAJE ..................................................89 4.6 INTERACTIVIDAD INDIVIDUAL...................................................................90 4.7 INTERACTIVIDAD COLABORATIVA...........................................................90 4.8 INTERACTIVIDAD DE APOYO Y COMPLEMENTARIA.............................90 4.9 BIBLIOGRAFIA.............................................................................................90 4.10 CIBERGRAFIA............................................................................................91 4.11 AUTOEVALUACIN...................................................................................92 4.12 GLOSARIO..................................................................................................94 5 CONTROL DE FLUJO DE EJECUCIN.............................................................96 5.1 INTRODUCCIN..........................................................................................96 5.2 CONOCIMIENTOS PREVIOS......................................................................96 5.3 DESEMPEOS.............................................................................................96 5.4 RUBRICA DE EVALUACIN........................................................................98
2
5.5 TEMTICAS .................................................................................................99 5.1 Bifurcaciones.................................................................................................99 5.2 Bucles..........................................................................................................101 5.3 Sentencia Break, continue, goto.................................................................105 5.4 INTERACTIVIDADES DE APRENDIZAJE.................................................107 5.5 INTERACTIVIDAD INDIVIDUAL.................................................................107 5.6 INTERACTIVIDAD COLABORATIVA.........................................................107 5.7 INTERACTIVIDAD DE APOYO Y COMPLEMENTARIA...........................108 5.8 BIBLIOGRAFA...........................................................................................108 5.9 CIBERGRAFA............................................................................................108 5.10 AUTOEVALUACIN.................................................................................109 5.11 GLOSARIO................................................................................................110 6 ARRAYS............................................................................................................112 6.1 INTRODUCCIN........................................................................................112 6.2 CONOCIMIENTOS PREVIOS....................................................................112 6.3 DESEMPEOS...........................................................................................112 6.4 RUBRICA DE EVALUACIN......................................................................114 6.5 TEMTICAS................................................................................................115 6.1 Vectores: ....................................................................................................115 6.2 Matrices.......................................................................................................118 6.3 Mtodos de ordenacin de datos................................................................120 7.6 INTERACTIVIDADES DE APRENDIZAJE.................................................122 6.4 INTERACTIVIDAD INDIVIDUAL.................................................................122 6.5 INTERACTIVIDAD COLABORATIVA.........................................................122 6.6 INTERACTIVIDAD DE APOYO Y COMPLEMENTARIA............................122 6.7 BIBLIOGRAFA...........................................................................................123 6.8 CIBERGRAFA............................................................................................123 6.9 AUTOEVALUACIN...................................................................................124 6.10 GLOSARIO................................................................................................125 7 ESTRUCTURAS EN LENGUAJE C..................................................................127 7.1 INTRODUCCIN........................................................................................127 7.2 CONOCIMIENTOS PREVIOS....................................................................127 7.3 DESEMPEOS...........................................................................................128 7.4 RUBRICA DE EVALUACIN......................................................................129 7.5 TEMTICAS................................................................................................130 7.1 Apuntadores o punteros..............................................................................130 Estructuras.......................................................................................................133 7.6 INTERACTIVIDADES DE APRENDIZAJE.................................................135 7.2 INTERACTIVIDAD INDIVIDUAL.................................................................135 7.3 INTERACTIVIDAD COLABORATIVA.........................................................135 7.4 INTERACTIVIDAD DE APOYO Y COMPLEMENTARIA............................135 7.5 BIBLIOGRAFA...........................................................................................136 7.6 CIBERGRAFA............................................................................................136 7.7 AUTOEVALUACIN...................................................................................138 7.8 GLOSARIO..................................................................................................139
3
8 LISTAS, PILAS Y COLAS..................................................................................141 8.1 INTRODUCCIN........................................................................................141 8.2 CONOCIMIENTOS PREVIOS....................................................................141 8.3 DESEMPEOS...........................................................................................142 8.4 RUBRICA DE EVALUACIN......................................................................143 8.5 TEMTICAS................................................................................................145 8.1 Listas...........................................................................................................145 PILAS...............................................................................................................149 COLAS.............................................................................................................152 8.6 INTERACTIVIDADES DE APRENDIZAJE.................................................156 8.2 INTERACTIVIDAD INDIVIDUAL.................................................................156 8.3 INTERACTIVIDAD COLABORATIVA.........................................................157 8.4 INTERACTIVIDAD DE APOYO Y COMPLEMENTARIA............................157 8.5 BIBLIOGRAFA...........................................................................................157 8.6 CIBERGRAFA............................................................................................157 8.7 AUTOEVALUACIN...................................................................................159 8.8 GLOSARIO..................................................................................................160 REFERENCIAS BIBLIOGRFICAS....................................................................163
PRESENTACIN
Apreciados participantes: La presente cartilla didctica del curso Programacin y Estructura de Datos del programa Tcnico Profesional en Mantenimiento Informtico de la CIDE, pretende motivar a los estudiantes hacia la comprensin, la apropiacin y uso de lenguajes de programacin acorde al perfil del egresado de esta carrera y necesidades del mercado. El documento comprende ocho unidades temticas con sus respectivas interactividades individuales, colaborativas y de profundizacin acorde a las condiciones y modelo virtual de la Corporacin. En cada una de ellas se presentan conceptos, recursos, ejercicios y actividades evaluativas orientadas a alcanzar los objetivos de formacin y lograr los desempeos del modulo. Los enlaces y documentos sugeridos orientan el trabajo y brindan la pauta para consultar otros libros relacionados a la programacin estructurada. Se recomienda a los participantes desarrollar las actividades de profundizacin y recurrir al apoyo audiovisual de los diferentes videos recomendados en las interactividades. Esperamos que a travs de los contenidos y actividades propuestas, el educando con el apoyo y orientacin del tutor, se aproxime al conocimiento tecnolgico y sus implicaciones en la vida cotidiana y lo vuelva competitivo acorde a la dinmica actual de la sociedad. Nos resta invitarlos a tomar los conocimientos que presenta el curso como oportunidad de mejorar sus competencias y reflejar los aprendizajes en su vida profesional y personal.
INTRODUCCIN:
Como parte de la cotidianidad del hombre, la tecnologa tiene lugar en la resolucin de problemas y satisfaccin de necesidades individuales y sociales. El concepto tecnologa no solo se refiere a los artefactos (diseado por los humanos) tangibles del entorno y no tangibles -como los programas de computador-; es ms que productos, es conocimiento, procesos, productos y una forma de vida. El curso PROGRAMACIN Y ESTRUCTURA DE DATOS est orientada fundamentalmente al estudio, anlisis y manejo de estructuras de datos en un lenguaje de programacin y a la aplicacin de distintas estrategias para la resolucin de problemas de la lgica computacional. Para la consecucin de los propsitos de formacin, se propone desde las temticas iniciales, recorrer los fundamentos tericos y conceptuales de la lgica computacional y las caractersticas de los lenguajes programacin. En las siguientes unidades se incorpora conceptos importantes como el uso de bifurcaciones, bucles, arrays y apuntadores como recursos poderosos en programacin, as como mtodos de recorrido, bsqueda, ordenamiento y actualizacin sobre todas las estructuras de datos. Estas temticas sern trabajadas desde el lenguaje de programacin c++ considerando su robustez, acceso a recursos de hardware y software y porque servir de base para el aprendizaje de otros lenguajes que el estudiante desee aprender. El curso Programacin y Estructura de Datos , adems de aportar al estudiante y futuro profesional los esquemas y paradigmas de la lgica computacional, puede ayudar a transferir estos aprendizajes a la vida cotidiana, mejorando aquellas tareas que puedan ser automatizadas a nivel laboral y personal.
I.
a. BSICAS
COMPETENCIAS
1. Reconocer las caractersticas de la programacin y estructura de datos que fundamentan el pensamiento lgico matemtico. 2. Resolver problemas lgico- matemticos propios del campo computacional acorde a las fases de programacin, traducindolos a un lenguaje de alto nivel. 3. Mantener una comunicacin cortes y fluida con sus pares y tutor a travs de los recursos de la plataforma virtual. b. GENRICAS O TRANSVERSALES 1. Relacionar los fundamentos tericos y tcnicos de la programacin y estructura de datos con la prctica para la resolucin de problemas y necesidades informticas. 2. Asumir una posicin tica y crtica sobre su aprendizaje en cada unidad temtica desde la interaccin con sus pares y respectivos registros en la mediaciones pedaggicas de la plataforma 3. Promover la capacidad creativa, innovadora e investigativa que mejoren los conocimientos. c. ESPECFICAS 1. Resolver problemas con computadores, aplicando el Paradigma lgico matemtico y lenguaje de programacin C, adquiridos en el mdulo de programacin y estructura de datos 2. Desarrollar habilidades para disear, ejecutar e interpretar programas usando lenguaje c++, con el paradigma orientado a objetos. 3. Realizar proyectos comunes con compaeros del programa respetando las normas, tiempos y pautas fijadas por el docente. 4. Actuar con autonoma y responsabilidad personal en su proceso de aprendizaje en los foros, wikis, blogs y otras mediaciones en la plataforma virtual.
II.
MAPA DE CONCEPTOS
UNIDAD N
1 METODOLOGA DE LA PROGRAMACIN
1.1 INTRODUCCIN
Como lo cita Joyanes en el prologo de su libro ... algoritmos y datos, han permanecido invariables a lo largo de la corta historia de [a informtica/computacin, pero la interrelacin entre ellos s que ha variado y continuar hacindolo. (JOYANES & RODRIGUEZ, 2003), partiendo de esta referencia, las temticas: Lenguajes de programacin, La Informacin y su Procesamiento y Algoritmos propone el estudio de los datos como insumo en los procesos informticos. Desde el reconocimiento de los conceptos propios de programacin se busca retomar con los participantes la terminologa en el campo de la computacin. Los textos y actividades parten de los saberes previos de los educandos especialmente de los conocimientos en las partes fsicas y lgicas de los equipos de cmputo. Con relacin a las temticas de tipos de lenguajes y programacin orientada a objetos, las interactividades propuestas en la unidad buscan despertar el inters y entusiasmo de los participantes en los esquemas que rigen el uso y funcionamiento de los equipos de cmputo. Las actividades estn orientadas al estudio, anlisis y manejo de estructuras de datos, reconociendo las distintas estrategias de diseo de algoritmos. Los recursos complementarios amplan los saberes aprendidos por los participantes en el uso de estructuras de datos fundamentales y avanzados, analizando su organizacin fsica y lgica. Como complemento a los objetivos propuestos para esta unidad las temticas: Diagramas de Flujo y Pseudocdigo pretenden dar a los educandos herramientas para disear algoritmos. Estos esquemas (grficos y nemotcnicos) se basan en la utilizacin de diversos smbolos y palabras para representar operaciones especficas, para resolver un problema, con indicacin expresa o de orden lgico en que deben realizarse, partiendo de una planificacin expresa y de fcil interpretacin.
1.2
CONOCIMIENTOS PREVIOS Cules han sido los avances en el siglo XXI ms significativos en tecnologa? Qu es un lenguaje de programacin? Cul es la caracterstica de la informacin en un computador? Qu es un algoritmo? Qu importancia tiene el uso de algoritmos en el desarrollo del pensamiento lgico-matemtico? Porque es importante el uso de herramientas como DFD y pseudocdigo como instancias previas a programar? DESEMPEOS El alumno evala sus aprendizajes sobre los tipos de lenguajes de programacin y paradigma de programacin orientada a objetos vistos durante la unidad 1. Los estudiantes participan en los wikis y discusiones abiertas en la plataforma virtual. El estudiante reconoce las caractersticas de la informacin y su procesamiento en los equipos de cmputo. Los alumnos resuelven diferentes problemas de la lgica matemtica a travs de actividades individuales y grupales. El educando realiza consultas sobre soluciones a problemas propios de la programacin con el propsito de reforzar los conceptos de anteriores mdulos. Los equipos conformados en unidad 1, participan en las actividades colaborativas virtuales dispuestas en la plataforma del curso. Los estudiantes interactan en los foros y discusiones abiertas en la plataforma virtual.
1.3
10
RUBRICA DE EVALUACIN INTERACTIVIDAD UNIDAD N: 01 Construir un glosario de trminos de los conceptos ms representativos El alumno realiza un documento con 10 ejercicios usando algoritmos, diagramas de flujo o pseudocdigos Hacer una presentacin de los algoritmos www.virtual.unal.edu.co en DFD Del video www.youtube.com/watch? v=nZBUXP6DOlA crear un documento con las ideas ms importantes. Incluya los ejemplos A travs del foro publicado en unidad 2, Responder las preguntas orientadoras. Algunas sugerencias son Qu aplicabilidad daramos a los aprendizajes adquiridos en nuestra vida laboral y personal?, Cul es la importancia de la metodologa de la programacin para el perfil profesional del tcnico profesional en mantenimiento informtico? Crear una interactividad (puedes usar Power Point, http://prezi.com/, http://www.knovio.com/) y exponga uno de los problemas propuestos desarrollados en algoritmo, pseudocdigo y DFD.
1.4
Excelente
Entreg el 100% de las actividades propuestas evidenciando el alcance de los desempeos de la unidad
Insuficiente
Entrego menos del 30% de las interactividades
Cumpli con menos del 30% de la interactividad ajustando un criterio de los solicitados
11
1.5 1.1
Los programadores escriben instrucciones en diferentes lenguajes de programacin, algunos comprensibles de forma directa por el computador y otros requieren pasos intermedios de traduccin. Hoy en da existen varios tipos de lenguajes de programacin acorde a lo que se desee programar, pero en esencia parten de la siguiente clasificacin:
1.1.1
Lenguajes de Maquina
Se pueden utilizar muchos lenguajes para programar una computadora. El ms bsico es el lenguaje de maquina una coleccin de instrucciones muy detallada que controla los circuitos y envi de seales de la maquina. Son aquellos cuyas instrucciones son directamente entendibles por la computadora y no necesitan traduccin posterior para que la CPU pueda comprender y ejecutar el programa. Las instrucciones en lenguaje maquina se expresan en trminos de la unidad de memoria ms pequea el bit (dgito binario 0 1). (ACHURY, 2004) Muy pocos programas se escriben actualmente en lenguaje de maquina por dos razones importantes: primero, porque el lenguaje de maquina es muy incomodo para trabajar y segundo por que la mayora de las maquinas se pide programar en diversos tipos de lenguajes que son lenguajes de alto nivel, cuyas instrucciones son ms compatibles con los lenguajes y la forma de pensar humanos como los es el lenguaje C que adems es de propsito general.
1.1.2
Lenguajes Ensambladores
Tambin conocidos como lenguajes de bajo nivel. Son ms fciles de usar que los lenguajes mquina, pero al igual que ellos dependen de la mquina. El lenguaje de bajo nivel por excelencia es el ensamblador (assembly language) el cual fue desarrollado en la dcada del 50.
12
En este lenguaje las instrucciones se escriben en cdigos alfabticos conocidos como mnemotcnicos para las operaciones y direcciones simblicas. Cada instruccin del lenguaje de mquina, le corresponde una notacin simblica, para los cdigos de operacin, los operandos y la representacin de datos. Por ejemplo: nemotcnicos tpicos de operaciones aritmticas son: en ingls. ADD, SUB. DIV. etc.. Una instruccin tpica de suma serie: ADD, M, N, E
Podra entenderse sumar el nmero contenido en la posicin de memoria M al nmero almacenado en la posicin de memoria N y situar el resultado en la posicin de memoria E Si la misma operacin se escribiese en lenguaje de maquina seria mas complejo de recordar la instruccin que usando los nemotcnicos. As el programador escribe nombres simblicos en lugar de direcciones de memoria. Esto ahorra tiempo y complejidad, los errores son ms fciles de identificar y los programas ms sencillos de modificar. El programa original escrito en lenguaje ensamblador se denomina programa fuente y el programa traducido en lenguaje mquina se conoce como programa objeto, ya directamente inteligible por la computadora.
Figura 1-1 Programa Ensamblador. Adaptacin figura 1.16 (Pg 23; JOYANES & RODRIGUEZ, 2003)
13
Si bien estos lenguajes produjeron mejoras, cada instruccin de lenguaje mquina se corresponde con otra en lenguaje ensamblador y depende de las marcas y modelos de computadoras para las que fueron hechos, ya que no pueden transportarse de unas a otras. De ah que aparecieran los lenguajes de Alto Nivel.
1.1.3
Son aquellos en los que las instrucciones o sentencias a la computadora son escritas con palabras similares a los lenguajes humanos (ingls) que facilita la escritura y comprensin para el programador. Este lenguaje es independiente de la estructura del computador (Hardware), es decir son transportables, por tanto el uso del lenguaje de alto nivel ofrece tres ventajas importantes: sencillez, uniformidad y portabilidad. Los programas hechos en este lenguaje se les conoce como programa fuente y se requiere de un traductor (programa) llamado compilador para que el programa fuente se transforme a cdigo mquina; a este programa transformado se le conoce como programa objeto; al proceso de traduccin se le conoce como compilacin; luego es requerido de un enlace para que el programa sea ejecutable. Entre los lenguajes de programacin de alto nivel vamos a mencionar los ms conocidos como: FORTRAN: Formula Translator. Fue el primer lenguaje de alto nivel que se desarroll, en 1954, patrocinado por la IBM, un comit comenz a elaborar un lenguaje cientfico matemtico. A partir de all se desarrollaron varias versiones. COBOL: Common Business Oriented Language. Fue diseado, este lenguaje para el procesamiento de datos de tipo comercial, patrocinado en 1960, por el departamento de defensa de los EEUU. As como FORTRAN no es sencillo de aplicar a problemas de gestin, COBOL no es apto para el clculo de expresiones matemticas complejas. BASIC: Beginner's All-purpose Symbolic Instructor. Es un lenguaje interactivo, muy popular, de gran difusin en microcomputadoras, ya que es bastante fcil de usar. Fue creado pensando en estudiantes y graduados de los campos universitarios. PASCAL: en honor a Blaise Pascal, este lenguaje lleva su nombre y fue creado en 1969. Es el primer lenguaje de programacin estructurada y puede ser utilizado tanto para aplicaciones cientficas como administrativas,
14
y su aplicacin fundamental es en la enseanza de la programacin para estudiantes de computacin. C: es el lenguaje de programacin de propsito general asociado, de modo universal, al sistema operativo UNIX, como lo seala Joyanes (2003), la popularidad, eficacia y potencia de C se ha producido porque este lenguaje no est prcticamente asociado a ningn sistema operativo, ni a ninguna mquina en especial. Esta es la razn fundamental por la cual C es conocido como el lenguaje de programacin de sistemas por excelencia . C naci en el ao 1978, con la publicacin de The C Programming Language por Brian Kernighan y Dennis Ritchie (Prentice Hall, 1978). La popularidad de C fue creciendo a lo largo de los aos junto a la creacin de compiladores por grupos no involucrados en su diseo hicieron necesario pensar en la estandarizacin de la definicin del lenguaje C. C es un lenguaje de alto nivel, que permite programar con instrucciones de lenguaje de propsito general. Tambin C se define como un lenguaje de programacin estructurado de propsito general; aunque en su diseo tambin prim el hecho de fuera especificado como un lenguaje de programacin de Sistemas, lo que proporciona una enorme cantidad de potencia y flexibilidad. (JOYANES & RODRIGUEZ, 2003) En sus caractersticas ms representativas que lo mantienen como uno de los ms populares, estn: Es un lenguaje poderoso y flexible. Se utiliza para desarrollar software en la mayora de los modernos sistemas computacionales Se puede utilizar C para desarrollar sistemas operativos, compiladores, sistemas de tiempo real y aplicaciones de comunicaciones. Es portable, eso significa que al ser escrito para un tipo de computadora puede trasladarse a otra con pocas o ninguna modificacin. -propiedad conocida como portabilidad-. Una vez que se aprende C no tiene que aprenderse un nuevo lenguaje. No es necesario reescribir un problema para ejecutarse en otra computadora.
15
1.1.4
La teora de la programacin orientada a objetos se formul originalmente como parte del proceso de crear lenguajes destinados a simular la vida real. El programa Simula realizado en 1967 por dos noruegos, fue creado como una herramienta para crear simulaciones. (Bjarn Stoustroup, creador del C++, reconoci que Simula es la fuente de la nocin de las clases segn se aplican en C++). un mtodo de implementacin en el que los programas se organizan como colecciones cooperativas de objetos, cada uno de los cuales representan una instancia de alguna clase, y cuyas clases son todas miembros de una jerarqua de clases unidas mediante relaciones de herencia 1 En esta definicin de Booch se destacan tres conceptos: 1- utiliza objetos como bloques de construccin lgicos (jerarqua de objetos); 2- cada objeto es una instancia de una clase y 3- las clases se relacionan unas con otras por medio de relaciones de herencia. El concepto de objeto, al igual que los tipos abstractos de datos o tipos definidos por el usuario, es una coleccin de elementos de datos, junto con las funciones asociadas para operar sobre esos datos. Sin embargo, la potencia real de los objetos reside en el modo en que los objetos pueden definir otros objetos. Este proceso, ya comentado, se denomina herencia y es el mecanismo que ayuda a construir programas que se modifican tcnicamente y se adaptan a aplicaciones diferentes. (JOYANES & RODRIGUEZ, 2003) En los lenguajes orientados a objetos la idea primordial es combinar en una sola unidad datos y funciones que operan sobre esos datos. Tal unidad se denomina objeto. Por lo tanto, dentro de los objetos se encuentran los datos de los lenguajes de programacin tradicionales, como nmeros, arrays, cadenas y registros, as como subrutinas que operan sobre ellos. Los objetos, como las personas, tienen caractersticas internas (propiedades privadas), tienen tambin caractersticas que presentan al mundo (propiedades pblicas). Puede decir a los objetos lo que tienen que hacer, y lo hacen, a su manera (mtodos y eventos, respectivamente). Adems, muchos objetos comparten algunas de las mismas caractersticas comunes (HERENCIA).
Booch Grady: Anlisis y Diseo Orientado a Objetos con aplicaciones 2da Edicin. Addison Wesley/ Daz de Santos. 1995
16
Un programa puede parecer orientado a objetos, pero si cualquiera de estos elementos no existe no es un programa orientado a objetos. Especficamente, la programacin sin herencia es distinta de la programacin orientada a objetos; se denomina programacin con tipos abstractos de datos o programacin basada en objetos. (JOYANES & RODRIGUEZ, 2003)
Figura 1-2 El modelo objeto. Fuente (Pg 577;JOYANES & RODRIGUEZ, 2003)
La mayor parte de los lenguajes de programacin de utilizacin comercial de hoy, incluidos C++, Delphi, y Visual Basic, son lenguajes POO hbridos, lo cual significa que aplican algunos (aunque no necesariamente todos) de los conceptos POO y permiten tambin la construccin de programas de procedimientos convencionales. Como mnimo para construir programas POO, un lenguaje necesita proporcionar facilidades para el objeto y para volver a usar el cdigo, u alguna capacidad para crear objetos nuevos a ampliados dentro del lenguaje basado en objetos existentes. 1.2 La informacin y su procesamiento
Las computadoras (ordenadores) son herramientas esenciales en muchas reas: industria, gobierno, ciencia, educacin... en realidad en casi todos los campos de nuestras vidas. (JOYANES & RODRIGUEZ, 2003) Una computadora (o computador en nuestro contexto) es un dispositivo capaz de ejecutar clculos y tomar decisiones lgicas a velocidades muy superiores que la
17
mente humana y en volumen que con el pasar de los aos aumenta de manera exponencial. Cualquier equipo electrnico desarrolla el procesamiento de datos bajo el control de un conjunto de instrucciones que se conocen como programas. Los programas guan, a travs de conjuntos ordenados de acciones, las acciones del dispositivo preescritas por personas que se les conoce como programadores de computador. Como lo referencia Joyanes (2003), un computador dispone de un conjunto de funcionalidades que le permiten estar en la capacidad de: 1- Aceptar la entrada, 2- Visualizar o presentar la salida. 3- Almacenar la informacin en un formato consistente lgicamente (tradicionalmente binario). 4- Ejecutar operaciones aritmticas o lgicas bien sobre datos de entrada o bien sobre datos de salida. 5- Monitorizar, controlar y dirigir las operaciones globales y de secuencia del sistema. Un esquema representativo es el siguiente
Figura 1-3: Unidades Fundamental de un computador- Fuente (pag 5; JOYANES & RODRIGUEZ, 2003)
Cuando un usuario interacta con una computadora, proporciona una entrada; en respuesta. La computadora procesa la entrada devolviendo una salida valiosa al usuario. La entrada puede ser en formato de rdenes o instrucciones dadas: texto, nmeros o imgenes escaneadas. La salida puede ser el resultado; clculos en una hoja de clculo, una carta impresa en una impresora o un auto
18
movindose por la pantalla en un juego de carreras de autos. (pag 5; JOYANES & RODRIGUEZ, 2003) En Informtica, los datos e informacin no son sinnimos. Un dato es un smbolo lingstico o numrico que representa ya sea algo concreto como abstracto. "1, 2, 3" son datos. En el momento de enlazar datos como por ejemplo, "1, 2, 3" = "ventas diarias de enero 1, 2, 3", los datos se convierten en informacin. Es habitual confundir datos con informacin. El termino dato se asocia a la representacin de algn hecho, concepto o entidad real, en cambio el concepto de informacin implica datos procesados y organizados. Como procesamiento, podemos decir que es la accin (cualquiera que sea), que se ejecuta, en este caso sobre los datos, y que logra en ellos una transformacin. Uniendo estas dos definiciones podemos concluir que el procesamiento de Datos es cualquier ordenacin o tratamiento de datos, o los elementos bsicos de informacin, mediante el empleo de un sistema. Un sistema en general se define como un conjunto de componentes conectados e interactivos, que tiene un propsito y una unidad total. En consecuencia, sistema de procesamiento de informacin es un sistema que transforma datos brutos en informacin organizada, significativa y til.
La informacin y su procesamiento contemplan que los datos pueden ser interpretados codificados en diferentes formatos. Este procesamiento es el trmino usado para denominar las operaciones desarrolladas sobre un conjunto de
19
datos de imagen para mejorarlas de alguna forma, para ayudar a su interpretacin o para extraer algn tipo de informacin til de ella. Por tanto el procesamiento de informacin es entendida como las acciones mediante las cuales la Unidad de Informacin toma los datos que requiere para procesar la informacin. Las entradas pueden ser manuales o automticas. Las manuales son las que ingresan de forma directa por los responsables de la unidad o el usuario. Las entradas automticas son datos o informacin que provienen de unidades o mdulos. Esto ltimo se denomina interfaces automticas. Las unidades tpicas de entrada de datos a las computadoras son las terminales, las cintas magnticas, las unidades de diskette, los cdigos de barras, los escneres, la voz, los monitores sensibles al tacto, el teclado y el mouse, bases de datos, entre otras. Cuando se habla de procesamiento de informacin debe tenerse en cuenta la recuperacin y transmisin de la informacin. La recuperacin define como la capacidad de la maquina para efectuar clculos de acuerdo con una secuencia de operaciones preestablecida. Se realizan con datos ingresados o almacenado en el computador. La salida o transmisin de la Informacin se define como la capacidad del equipo para sacar la informacin procesada o bien datos de entrada al exterior. Algunos ejemplos de unidades de salida son: las impresoras, diskettes, memorias, los plotters, entre otros. Fases En La Resolucin De Problemas Para resolver un problema usando un programa de computador se requiere principalmente de creatividad. Joyanes (2003) sugiere una serie de pasos que deberan seguir todos los programadores Anlisis del problema Diseo del algoritmo. Codificacin. Compilacin y ejecucin Verificacin. Depuracin Mantenimiento Documentacin
Estas fases segn el autor constituyen el ciclo de vida del software. Las fases o etapas usuales son:
20
Anlisis. El problema se analiza teniendo presente la especificacin de 10& requisitos dados por el cliente de la empresa o por la persona que encarga el programa. Diseo. Una vez analizado el problema se disea una solucin que conducir a un algoritmo que resuelva el problema. Codificacin (implementacin), La solucin se escribe en la sintaxis del lenguaje de alto nivel (por ejemplo. C) y se obtiene un programa. Compilacin, ejecucin y verificacin. El programa se ejecuta se comprueba rigurosamente y se eliminan todos los errores (denominados < bugs, en ingls) que puedan aparecer. Depuracin y mantenimiento. El programa se actualiza y modifica cada vez que sea necesario de modo que se cumplan rodas las necesidades de cambio de sus usuarios. Documentacin. Escritura de las diferentes fases del ciclo de vida del software esencialmente el anlisis, diseo y codificacin unidos a manuales de usuario y de referencia, as como normas para el mantenimiento. (JOYANES & RODRIGUEZ, 2003)
Figura 1-5 Anlisis del Problema. Fuente (JOYANES & RODRIGUEZ, 2003)
Un programa se escribe en un lenguaje de programacin y a la actividad de expresar un algoritmo en forma de programa se le denomina programacin. Un programa consta de una secuencia de instrucciones, cada una de las cuales especifica las operaciones que debe realizar el computador.
21
1.3
Algoritmos
El conjunto de instrucciones que especifican la secuencia de operaciones a realizar para resolver un sistema especfico o clase de problema se denomina algoritmo. En otras palabras, un algoritmo es una frmula para la resolucin de un problema. La importancia de un algoritmo radica en desarrollar un razonamiento lgico matemtico a travs de la comprensin y aplicacin de metodologas para la resolucin de problemticas, estas problemticas bien pueden ser de la propia asignatura o de otras disciplinas como matemticas, qumica y fsica que implican el seguimiento de algoritmos, apoyando as al razonamiento critico deductivo e inductivo. (BAOS & HERNNDEZ, 2012) La palabra algoritmo se deriva de la traduccin al latn de la palabra rabe alkhowarizmi, nombre de un matemtico y astrnomo rabe que escribi un tratado sobre manipulacin de nmeros y ecuaciones en el siglo IX. La solucin a cualquier problema de cmputo involucra la ejecucin de una serie de acciones en orden especfico. Un procedimiento para resolver un problema en trminos de: a) Las acciones a ejecutarse y b) el orden en el cual estas acciones deben ejecutarse se llama algoritmo. Fases para crear un algoritmo Un algoritmo debe producir un resultado en tiempo finito. Los mtodos que utilizan algoritmos se denominan mtodos algortmicos, para los mtodos que requieren interpretacin se denominan mtodos heursticos. Los mtodos algortmicos se pueden implementar en computadoras. A continuacin se listan las fases para hacer algoritmos. Definicin del Problema: En esta etapa se deben establecer los resultados y objetivos que se desea para poder saber si los datos que se tienen son suficientes para lograr los fines propuestos Anlisis: Una vez definido el problema se debern organizar los datos de tal manera que sean susceptibles de usar en los clculos siguientes. Diseo: En esta etapa se proponen soluciones a los problemas a resolver, por lo que se realiza una toma de decisiones aplicando los conocimientos adquiridos y utilizando los datos existentes
22
Prueba de Escritorio: Se consideran resultados previstos para datos conocidos a fin de que al probar cada una de sus partes podamos ir comprobando que el algoritmo sirve o requiere modificarse. Veamos el siguiente ejemplo de algoritmo: Elaborar un algoritmo el cual calcule e imprima el sueldo de un empleado, teniendo como datos de entrada: nombre, horas trabajadas y cuota por hora. 1.- inicio 2.- pedir horas, pedir nombre, pedir horas trabajadas y cuota por hora (N,H,C) 3.- multiplicar el numero de horas trabajadas por la cuota por hora (S=H*C) 4.- mostrar resultados (S) 5.- fin Ejemplo 2: Escribe un algoritmo para obtener el rea de un tringulo, tomando en cuenta que el rea: (base * altura)/2. 1.- inicio 2.- pedir la base y la altura (B,H) 3.- multiplicar la base y la altura y dividirlas entre 2 (A=B*H/2) 4.- mostrar resultados (A) 5.- fin 1.4 Diagramas de Flujo
Los diagramas de flujo -tambin conocidos como flujogramas- son una representacin grfica mediante la cual se representan las distintas operaciones de que se compone un procedimiento o parte de l, estableciendo su secuencia cronolgica. Clasificndolos mediante smbolos segn la naturaleza de cada cual.2 Es decir, son una mezcla de smbolos y explicaciones que expresan
2
Palacios Echeverra, Alfonso J. Microanlisis Administrativo, Concepto y Tcnicas Usuales, Publicaciones del Instituto Latinoamericano de Investigacin
23
secuencialmente los pasos de un proceso, de forma tal que este se comprenda ms fcilmente. Es empleado para representar la solucin de un algoritmo empleando figuras geomtricas, donde cada una de ellas representa en particular una tarea especfica que realizar. Los smbolos utilizados han sido normalizados por el Instituto Norteamericano de Normalizacin (ANSI) y los ms frecuentemente empleados son:
Smbolo Significado Inicio / Fin Indica el inicio o fin del diagrama de flujo Operacin / Accin Para que se emplea?
Entrada / Salida Indica la entrada y salida de datos. Documento Representa cualquier tipo de documento que entra, se utilice, se genere o salga del procedimiento Decisin Indica un punto dentro del flujo de decisin a partir de la comparacin de valores Proceso no Repeticin de pasos a representado- Ciclos travs de ciclos
Smbolo
Significado Conector
Para que se emplea? Conector dentro de pgina. Representa la continuidad del diagrama dentro de la misma pgina. Enlaza dos pasos no consecutivos en una misma hoja Representa la continuidad del diagrama en otra pgina. Representa una conexin o enlace con otra hoja diferente en la que continua el diagrama de flujo.
Conector de Pagina
Algunas observaciones para tener en cuenta: Todo diagrama debe tener un inicio y un fin. Se deben usar solamente lneas de flujos horizontales o verticales. Se debe evitar el cruce de lneas utilizando los conectores. Se deben usar conectores solo cuando sea necesario. No deben quedar lneas de flujo sin conectar. Se deben trazar los smbolos de manera que se puedan leer de arriba hacia abajo y de izquierda a derecha. Todo texto escrito dentro de un smbolo deber ser escrito claramente, evitando el uso de muchas palabras. Evitar la terminologa de un lenguaje de programacin o maquina. Utilizar comentarios ya sea al margen o mediante el smbolo grafico comentarios para que este sea entendible por cualquier persona que lo consulte. Si el diagrama abarca ms de una hoja es conveniente enumerarlo e identificar de donde viene y a donde se dirige. (ACHURY, 2004)
Ejemplo DFD Representar a travs de un DFD el clculo y resultado 2 nmeros cualesquiera 1) Anlisis del problema: Nos piden sumar dos nmeros (sin importar si son naturales, enteros, reales o irreales) por lo tanto no existe ninguna restriccin numrica. El resultado de dicha suma se debe imprimir o mostrar en pantalla.
25
Para el caso de nuestro DFD debemos recordar que cuando manejamos variables (valores no definidos) siempre debemos definir las condiciones iniciales del programa, en este caso a, b y c, donde a y b almacenaran los valores ingresados y c guardara el resultado de dicha suma. 2) Diseo del algoritmo INICIO Recibir numero 1 y guardarlo en a Recibir numero 2 y guardarlo en b C=a+b Mostrar c FIN 3) Diagrama de Flujo de datos
1.5
Pseudocdigo
26
El pseudocdigo es un lenguaje de especificacin de algoritmos, su uso da paso a la codificacin final. Proviene de la unin de los lenguajes de programacin y un idioma nativo (espaol o ingls o cualquier otro idioma), usado en la programacin estructurada para el diseo de un programa. Se puede decir, que el pseudocdigo es un lenguaje de especificaciones de algoritmos. Representa, de forma narrativa, los pasos que debe seguir un algoritmo para solucionar un problema determinado, utilizando en su sintaxis, palabras que indican el proceso a realizar. El pseudocdigo se ideo para superar las desventajas del Diagrama de Flujo- que es lento de crear y difcil de modificar sin un nuevo dibujo- y la facilidad de uso al ser similar al lenguaje natural. El pseudocdigo no puede ser ejecutado por un computador. El pseudocdigo es fcil de modificar si se descubren errores en la lgica del programa, en cambio, en muchas ocasiones suele ser difcil el cambio en la lgica una vez se escribe o codifica en el lenguaje de programacin. El pseudocdigo necesita usar smbolos que ya poseen un significado preciso y predefinido conocido como palabras clave. Es necesario que exista una palabra clave para la seleccin y otra para la iteracin condicional, as como para las instrucciones adicionales y otras estructuras de control. Otra ventaja del pseudocdigo es la facilidad de migracin o traduccin de manera sencilla a lenguajes estructurados como Pascal, FORTRAN, C++, Java, C#, etc. El pseudocdigo original utiliza para representar las acciones sucesivas palabras reservadas en ingls -similares a sus homnimas en los lenguajes de programacin-, tales como start, end, stop, lf-then-else, while-end., repeat-untll, etc. Ejemplo: Realizar el pseudocdigo de un programa que permita calcular el rea de un rectngulo. Entorno: BASE, ALTURA, AREA son nmero enteros INICIO escribir Introduzca la base y la altura leer BASE, ALTURA calcular AREA = BASE * ALTURA escribir El rea del rectngulo es AREA FIN Como se mencion, el pseudocdigo naci para remplazar la sintaxis de los lenguaje de programacin- sus palabras reservadas se conservaron o fueron muy similares-. Su uso se ha extendido en la comunidad hispana aplicando o traduciendo alguno trminos: inicio, fin, parada, leer, escribir, si-entonces - si,
27
mientras, repetir, hasta_que, etc. Sin duda, el uso de la terminologa del pseudocdigo en espaol ha facilitado y facilitar considerablemente el aprendizaje y uso diario de la programacin (JOYANES & RODRIGUEZ, 2003) Veamos otro ejemplo con palabras de pseudocdigo en espaol: Ejemplo: Realizar el pseudocdigo que permita al usuario introducir por teclado dos notas, calculando la suma y el producto de las notas. Programa: Suma, Producto Entorno: NOTA1, NOTA2, SUMA, PRODUCTO son nmeros enteros INICIO escribir Introduzca las notas leer NOTA1,NOTA2 calcular SUMA = NOTA1 + NOTA2 calcular PRODUCTO = NOTA1 * NOTA2 escribir La suma de las dos notas es: SUMA escribir El producto de las dos notas es :PRODUCTO FIN
2.6
INTERACTIVIDADES DE APRENDIZAJE Hacer una presentacin de los algoritmos www.virtual.unal.edu.co/cursos/ingenieria/2001839/modulo1/cap _02/leccion103.htm en DFD Ejercicios: Hacer el algoritmo de: o 1. Programa que calcule e imprima la suma de los N primeros nmeros naturales. o 2. Programa que genere la lista de los N primeros nmeros primos. o 3. Programa que obtenga e imprima la lista de los divisores de un nmero N entero positivo. o 4. Programa que calcule el mximo comn divisor de dos nmeros enteros positivos por el algoritmo de Euclides. o 5. Programa que obtenga e imprima la lista de caracteres del cdigo ASCII correspondiente a los nmeros desde 32 al 126. o 6. Programa que obtenga el producto de dos nmeros enteros positivos mediante sumas sucesivas. o 7. Programa que obtenga el cociente y el resto de dos nmeros enteros positivos mediante restas.
28
o 8. Programa que evale un polinomio de grado N. Los datos de entrada son el valor de la variable y de los coeficientes. o 9. Programa que calcule e imprima los nmeros perfectos menores que 1000 (un nmero es perfecto si la suma de sus divisores excepto el mismo es igual al propio nmero).
1.6
INTERACTIVIDAD INDIVIDUAL El alumno realiza un documento con 10 ejercicios usando algoritmos, diagramas de flujo o pseudocdigos Construir un glosario de trminos de los conceptos ms representativos Del video http://www.youtube.com/watch?v=nZBUXP6DOlA crear un documento con las ideas ms importantes. Incluya los ejemplos. INTERACTIVIDAD COLABORATIVA A travs del foro publicado en la unidad , Responder las preguntas orientadoras. Algunas sugerencias son Qu aplicabilidad daramos a los aprendizajes adquiridos en nuestra vida laboral y personal?, Cul es la importancia de la metodologa de la programacin para el perfil profesional del tcnico profesional en mantenimiento informtico?
1.7
1.8
INTERACTIVIDAD DE APOYO Y COMPLEMENTARIA Crear una interactividad (puedes usar Power Point, http://prezi.com/, http://www.knovio.com/) y exponga uno de los problemas propuestos desarrollados en algoritmo, pseudocdigo y DFD. RECURSOS Capitulo 2: Resolucin de problemas de computadora y Capitulo 3: estructura general de un programa del libro de (JOYANES & RODRIGUEZ, 2003) http://es.scribd.com/doc/12390775/IntroducciOn-a-LaProgramacion-Algoritmos-y-Dfd www.virtual.unal.edu.co/cursos/ingenieria/2001839/modul o1/cap_02/leccion103.htm http://www.youtube.com/watch?v=nZBUXP6DOlA http://www.youtube.com/watch? v=05Cr1USPWyY&NR=1&feature=endscreen
Lecturas Disciplinares
1. 2.
1. 1. 2. 3.
29
http://www.slideshare.net/munisipalidad/pseudoco digo-12636452#btnNext 1.9 BIBLIOGRAFIA JOYANES, L., & RODRIGUEZ, L. (2003). FUNDAMENTOS DE PROGRAMACION. LIBRO DE PROBLEMAS (Tercera ed.). Madrid: McGraw-Hill. 1.10 CIBERGRAFIA ACHURY, R. (14 de Marzo de 2004). Scribd. Recuperado el 10 de Noviembre de 2012, de http://es.scribd.com/doc/12390775/IntroducciOn-a-LaProgramacion-Algoritmos-y-Dfd
30
1.11 AUTOEVALUACIN La autoevaluacin del estudiante sobre los temas trabajados en esta unidad, es entendida como el momento donde compara, analiza y valora la informacin y aprendizajes obtenidos teniendo como referentes los objetivos y desempeos alcanzados en cada una de las interactividades. Por tanto lo invitamos a desarrollar la siguiente matriz cualitativa Temtica
1.1 Conceptos Bsicos sobre Programacin y Estructura de Datos. 1.2 La informacin y su procesamiento
1.3
Algoritmos
de
31
Temtica
1.5 Pseudocdigo
Que sabia
32
1.12 GLOSARIO Es un conjunto finito de pasos definidos, estructurados en el tiempo y formulados con base a un conjunto finito de reglas no ambiguas, que proveen un procedimiento para dar la solucin o indicar la falta de esta a un problema en un tiempo determinado. El Instituto Nacional Estadounidense de Estndares (ANSI, por sus siglas en ingls: American National Standards Institute) es una organizacin sin nimo de lucro que supervisa el desarrollo de estndares para productos, servicios, procesos y sistemas en los Estados Unidos. Un marco de referencia que contiene los procesos, las actividades y las tareas involucradas en el desarrollo, la explotacin y el mantenimiento de un producto de software, abarcando la vida del sistema desde la definicin de los requisitos hasta la finalizacin de su uso Es el proceso por el cual la informacin de una fuente es convertida en smbolos para ser comunicada. En otras palabras, es la aplicacin de las reglas de un cdigo. Traducir un lenguaje de alto nivel a cdigo absoluto o lenguaje binario. El dato es una representacin simblica (numrica, alfabtica, algortmica, entre otros) de un atributo o caracterstica de una entidad. Los datos describen hechos empricos, sucesos y entidades. El debugging o depuracin es el proceso metodolgico para encontrar y reducir bugs (errores) o defectos en un programa informtico o en una pieza de hardware. Un Diagrama Flujo de Datos es una representacin estructurada y grfica que describe cmo circula la informacin a travs de un sistema y los diferentes procesos de transformacin a los que se ve sometida. Un diagrama o grfico es un tipo de grfico de informacin que representa datos numricos tabulados. Los diagramas se utilizan generalmente para facilitar el entendimiento de largas cantidades de datos y la relacin entre diferentes partes de los
33
Algoritmo
ANSI
Ciclo de vida
Codificacin
Compilar
Dato
Depuracin
DFD
Diagramas
datos. Entrada En teora de la informacin, el trmino entrada se refiere a la informacin recibida en un mensaje, o bien al proceso de recibirla Una estructura de control permite controlar el flujo de la ejecucin de instrucciones. Con estas estructuras, el programador puede determinar el orden en que se ejecutarn las instrucciones que estn dentro de estas estructuras. En programacin, una funcin es un grupo de instrucciones con un objetivo en particular y que se ejecuta al ser llamada desde otra funcin o procedimiento. Una funcin puede llamarse mltiples veces e incluso llamarse a s misma (funcin recurrente). Un Gigabyte es una unidad de medida aproximadamente igual a 1 billn de bytes. El gigabyte se utiliza para cuantificar memoria o capacidad de disco. Dejar una marca, texto escrito, dibujo o figura en un papel u otro soporte por medio de procedimientos mecnicos o digitales. En computacin, la funcin de imprimir puede ser realizada por una impresora. En informtica, el trmino se aplica tambin en otros casos: * Mostrar algo en pantalla. * Capturar algo de la pantalla En sentido general, la informacin es un conjunto organizado de datos procesados, que constituyen un mensaje que cambia el estado de conocimiento del sujeto o sistema que recibe dicho mensaje. Un Kilobyte (abreviado como KB o Kbyte) es una unidad de medida equivalente a mil bytes de memoria de ordenador o de capacidad de disco. Un Megabyte, cuando se utiliza para describir el almacenamiento de datos, son 1.048.576 (2 a la vigsima potencia) bytes. El megabyte se abrevia con frecuencia como M
Estructura de control
Funcin
Gigabyte
Imprimir
Informacin
Kilobyte
Megabyte
34
o MB. Mtodo Palabra que proviene del trmino griego methodos (camino o va) y se refiere al medio utilizado para llegar a un fin. Su significado original seala el camino que conduce a un lugar. Combinacin de nmeros y operadores o de expresiones matemticas a las que se aplican unas reglas para obtener un resultado: en una operacin combinada, hay que establecer una prioridad para operar: primero los parntesis, despus las multiplicaciones o divisiones y por ltimo las sumas o restas. Un proceso es un conjunto de actividades o eventos (coordinados u organizados) que se realizan o suceden (alternativa o simultneamente) bajo ciertas circunstancias con un fin determinado. En informtica, procesos que permiten verificar y revelar la calidad de un producto software. En ciencias de la computacin, y anlisis numrico el pseudocdigo (o falso lenguaje) es una descripcin informal de alto nivel de un algoritmo informtico de programacin, compacto e informal, que utiliza las convenciones estructurales de un lenguaje de programacin verdadero En informtica es el proceso de transmitir la informacin por un objeto (el uso de verbo). Esencialmente, es cualquier dato que sale de un sistema En programacin, las variables son espacios reservados en la memoria que, como su nombre indica, pueden cambiar de contenido a lo largo de la ejecucin de un programa. Una variable corresponde a un rea reservada en la memoria principal del computador
Operacin
Proceso
Prueba
Pseudocdigo
Salida
Variable
35
UNIDAD N
El trmino arquitectura de hardware es, en el campo de la informtica, una descripcin de la construccin y distribucin fsica de los componentes de la computadora. La arquitectura de una computadora explica la situacin de sus componentes y permite determinar las posibilidades de que un sistema informtico, con una determinada configuracin, pueda realizar las operaciones para las que se va a utilizar (Fundacin Wikimedia, Inc., 2012). La estructura de la computadora o computador (trmino ms usado en nuestro contexto) explica las caractersticas de sus componentes y sus funciones mediados por las demandas del mercado y necesidades del usuario. Como parte de esos componentes, el participante del curso identifica conceptos relacionados a los tipos de datos y variables y su relacin en los procesos aritmtico lgicos del computador. En esa misma lnea, las actividades ubican al educando en los temas anteriores y como el equipo hace uso de los diferentes tipos de memoria y sistemas numricos (binario y hexadecimal) En el contexto de los lenguajes de programacin, el uso de constantes, operadores y palabras reservadas marca la pauta en el diseo de programas sea si hablamos del lenguaje c++, java, php u otros de alto nivel. A travs de ejemplos y ejercicios que involucran la utilizacin de estas temticas, se pretende que el educando reconozca su uso y este en la capacidad de realizar operaciones tanto aritmticas, relacionales y lgicas. Los recursos complementarios propuestos amplan los saberes aprendidos por los participantes en el uso de estructuras de datos fundamentales y avanzados, analizando su organizacin fsica y lgica.
2.2
CONOCIMIENTOS PREVIOS Cul es la estructura fsica y lgica de un computador? Cmo utilizar los operadores en la programacin? Qu consideraciones se debe tener en cuenta a la hora de programar? Qu son las palabras reservadas en un lenguaje de programacin?
36
2.3
DESEMPEOS Los alumnos reconocen, a travs de actividades prcticas, las diferencias entre datos, variables y constantes en lenguajes de programacin. El estudiante identifica los componentes de hardware y la arquitectura de los computadores para desarrollar actividades de programacin. El educando desarrolla actividades de investigacin para ampliar sus conocimientos y aplicacin de los conceptos vistos en la unidad 3. El alumno convierte expresiones algebraicas, aritmticas y lgicas a expresiones algortmicas, considerando la jerarqua de operadores, para realizar las tareas solicitadas. Los equipos conformados en unidad 1, participan en las actividades colaborativas virtuales dispuestas en la plataforma del curso. El educando evala su proceso de aprendizaje sobre los temas vistos en la unidad. Los estudiantes participan en el chat sobre el uso de variables, constantes y operadores en la plataforma virtual
37
2.4
INTERACTIVIDAD UNIDAD N: 02 Crear un portafolio de recursos digitales donde se relacionen sitios de informacin sobre arquitectura de hardware. Crear una matriz comparativa entre los tipos de datos. Consultar la siguiente presentacin http://www.wiziq.com/tutorial/35182Variables-Constantes-y-Operadores y acorde a los temas de Variables, Constantes y Operadores Qu informacin ud complementaria? Expresar sus aportes en un documento. Publicar a travs de un servidor gratuito (scribd, issuu, slideshare) Ejemplos de palabras reservadas de lenguajes de programacin de alto nivel. Participar en un chat o videconferencia sobre los aprendizajes obtenidos en esta unidad. Algunas preguntas orientadoras son Qu saberes puede ud relacionar con aprendizajes en otros modulo vistos a lo largo de la carrera? Cules similitudes encuentra entre el concepto de operador con los aplicados en Hojas de clculo?
Excelente
Entreg el 100% de las actividades propuestas evidenciando el alcance de los desempeos de la unidad
Insuficiente
Entrego menos del 30% de las interactividades
38
INTERACTIVIDAD UNIDAD N: 02 Usar algn servicio de nube (google drive, sky drive, drop box) y subir los archivos generados durante el curso y compartirlos con los pares y docente tutor.
Excelente
Cumpli con el 100% de la interactividad bajo los criterios y tiempos definidos
Insuficiente
Cumpli con menos del 30% de la interactividad ajustando un criterio de los solicitados
39
2.5 2.1
Los computadores son mquinas elctricas ampliamente implantadas en la sociedad. Lo primero, son un tipo de herramienta, solo eso, que podemos utilizar para facilitarnos el trabajo. Lo segundo, se han diseado para procesar informacin, guardarla, manipularla y recuperarla cuando se necesite. Una vez desarrollados los computadores y dada su versatilidad de programacin, se han aplicado a una gran cantidad de tareas nuevas; tareas que, por otra parte, solo es concebible actualmente si se dispone de ellos. Esquema de un PC El diagrama que representa los componentes bsicos de un computador puede visualizarse en la siguiente figura:
40
En electrnica el computador se le denomina sistema microprogramable. Algunos de sus perifricos son: La mayora de los elementos fundamentales de los que depende el funcionamiento de un computador se encuentran en el interior de una caja, sujetos a un bastidor metlico y protegidos del exterior por una carcasa, generalmente tambin metlica. Si retiramos dicha carcasa podremos ver el interior del PC, como se muestra en la figura 3-2.
En el interior del PC se encuentran los siguientes componentes: Fuente de alimentacin. Placa base o tarjeta madre, a la que se acoplan el microprocesador, la memoria RAM, la tarjeta grfica y la tarjeta de sonido. El disco duro. La unidad de disco 3 (hoy da en desuso). La unidad ptica, ya sea de tipo CD-ROM o DVD. Uno de los circuitos ms importantes es la Placa Base, tambin conocida Tarjeta Madre o Mainboard Est formada por una placa de circuito impreso rectangular, de dimensiones un poco mayores a un papel de tamao A4.
41
La Informacin Digital La informacin que percibimos y manejamos es de tipo analgico: un texto, una imagen, un sonido Sin embargo, el computador slo entiende de ceros y unos, es decir de informacin digital. Para digitalizar una informacin analgica es necesario asignar a cada dato analgico un conjunto de ceros y unos, de acuerdo con unas reglas. Para convertir en sistema binario (0 y 1) un nmero decimal como 150 hay que dividirlo por 2 hasta su mnima expresin. Luego se escribe, en orden inverso, los residuos, veamos la figura 3-2:
42
Para realizar la operacin inversa, es decir, un nmero binario en decimal hay que proceder como se indica a continuacin
Para convertir los caracteres del alfabeto y otros smbolos a lenguaje computacional, cada uno se le asigna una combinacin de ceros y unos que se representan el cdigo ASCII (American Standar Code for Information Interchange).
43
2.2
Tipos de datos
Los datos tienen un tipo asociado con ellos. Un dato puede ser un carcter, tal como z, un valor numrico entero como 43. Recordando la teora de conjuntos en matemticas, la naturaleza del dato determina el conjunto de valores que puede tomar una variable.
Un valor en dato simple almacena en el nivel ms bajo de abstraccin, lo que significa que las operaciones con tipos de datos simples son generalmente ms rpidas y eficientes que las operaciones realizadas con tipos de datos complejos. Como ejemplo de conjuntos de datos donde se pueden definir uno o varios valores encontramos: Boolean (booleano), null (nulo), Number (nmero), String (cadena) y undefined (no definido). Los tipos estructurados de datos se componen de otros tipos de datos ms simples previamente declarados o predefinidos en el lenguaje 3. Los datos estructurados o estructuras de datos pueden recolectar varios valores simultneamente. Cul es su principal caracterstica?, que fijan en la memoria una cantidad especfica. El array es el primer tipo estructurado que permite agrupar otros datos de igual tipo bajo un mismo identificador. En los arrays pueden definirse vectores, matrices, tablas y estructuras multidimensionales. Un carcter identifica el contenido de la variable que se declare como carcter. Su longitud es de 1 byte. Entero se refiere a valores de tipo entero. Ocupa 2 bytes. Real indica que la variable recibe datos de tipo real con aproximadamente 6 dgitos de precisin. Su longitud en bytes es de 4. Doble define variables que aceptan datos de tipo real con 12 dgitos de precisin. Cada variable ocupa 8 bytes de memoria.
3
44
2.3
Variables Una variable es un identificador que puede tomar diferentes valores dependiendo del tipo que esta se declare (POZO, 2002). Es decir, una variable tiene como principal caracterstica cambiar su valor durante la ejecucin de un programa. Caractersticas de las variables: Tomando las referencias de Joyanes (2003) se puede decir: Una variable es una posicin de memoria donde se puede almacenar un valor para uso de un programa. Cada variable tiene un nico nombre el cual no puede ser cambiado. Dos o ms variables pueden tener el mismo contenido, pero no el mismo nombre. El nombre de una variable comenzar siempre por una letra, pudiendo contener a continuacin tanto letras como nmeros. Las letras en las variables pueden ser tanto maysculas como minsculas. No se admiten nombres de variables incluyendo espacios en blanco ni smbolos especiales como guiones, puntos, comas, comillas, etc. ni smbolos matemticos ni palabras clave (que veremos ms adelante, y que incluyen inicio, fin, verdadero, falso, entonces...). El nombre de una variable ser lo suficientemente largo como para impedir que pueda confundirse con otra variable por tener nombre similar, as como para aportar una indicacin de cul es el contenido o funcin que cumple.
2.4
Constantes En programacin, la constante es aquel valor que durante la ejecucin de un programa no cambie o pueda ser alterado.
45
Una constante corresponde a una longitud fija de un rea reservada en la memoria principal del ordenador, donde el programa almacena valores fijos. Por ejemplo: El valor de pi = 3.1416 El nombre de una constante se declara o define previamente. Todas las constantes que se declaran en un programa son definidas de la misma forma, indicando de cada una de ellas: Su nombre (mediante un identificador). El valor que simboliza (mediante una expresin). 2.5 Operadores Un operador es un smbolo que indica al compilador que realice manipulaciones lgicas o Tipos de Datos y operadores matemticas especficas. Operadores Aritmticos Pseudocdigo + * / % Modulo Nombre del Operador suma. resta. multiplicacin divisin Mdulo o resto de Divisin entera
Cuando se aplica el smbolo / a un entero o a un carcter, cualquier residuo se trunca. Por ejemplo 5/3 ser 1 en divisin entera. El smbolo menos hace el efecto de multiplicar su nico operando por-1 es decir, cualquier nmero precedido por un signo menos cambia de signo. Incremento y decremento x=x+1 x=x-1 aumenta el valor de x en 1 decrementa el valor de x en 1
46
1.- parntesis 2.- elevar a potencias 3.- multiplicacin y divisin 4.- suma y resta Operadores Relacinales Pseudocdigo > < >= <= < > o != = Nombre del Operador Mayor que Menor que Mayor o igual que Menor o igual que Diferente Igual
Operadores Lgicos: Estos operadores se utilizan para establecer relaciones entre valores lgicos. Estos valores pueden ser resultado de una expresin relacional. Operadores Lgicos And Y Or O Not Negacin Operador And Operando1 V V F F Operador Or Operando1 V V F F Operador Not Operando V F Operador AND AND AND AND Operador OR OR OR OR Resultado F V
47
Operando2 V F V F Operando2 V F V F
Resultado V F F F Resultado V V V F
2.6
Palabras Reservadas Son palabras que tienen en el lenguaje, un significado especial y que tienen como condicin que no se pueden utilizar por el programador para nombrar a las variables, funciones, procedimientos, objetos y dems elementos de programacin que cree. La razn que se reserve algunas palabras es que el propio lenguaje de programacin las utiliza, por esta razn, las palabras reservadas no pueden ser empleadas como identificadores definidos por el usuario. Cada lenguaje de programacin tiene su propio grupo de palabras reservadas, pero en general coinciden algunas de las siguientes: and, array, begin, case, const, default, do, else, end, file, for, function, goto, if, in, label, mod, not, of, or, repeat, return, then, to, type, until, void, while, etc.
2.6
INTERACTIVIDADES DE APRENDIZAJE Construir un portafolio de recursos digitales donde se relacionen sitios de informacin sobre arquitectura de hardware. Crear un programa que determine si dos nmeros enteros positivos son amigos (Dos nmeros son amigos si la suma de los divisores del primero excepto el mismo es igual al segmento y viceversa). Crear un programa que convierta nmeros de sistema decimal en Binario y Hexadecimal. Crear un programa que pase nmeros de sistema Binario a Hexadecimal. Crear un Programa que imprime la tabla de multiplicar de un nmero entero positivo Crear un Programa que ingresen 2 nmeros enteros positivo M y N y calcula e imprime los mltiplos de N, inferiores a M, que sean capicas. INTERACTIVIDAD INDIVIDUAL Crear una matriz comparativa entre los tipos de datos. Consultar la siguiente presentacin http://www.wiziq.com/tutorial/35182Variables-Constantes-y-Operadores y acorde a los temas de Variables,
2.7
48
Constantes y Operadores Qu informacin ud complementaria? Expresar sus aportes en un documento. Publicar a travs de un servidor gratuito (scribd, issuu, slideshare) Ejemplos de palabras reservadas de lenguajes de programacin de alto nivel. INTERACTIVIDAD COLABORATIVA
2.8
Participar en un chat o videoconferencia sobre los aprendizajes obtenidos en esta unidad. Algunas preguntas orientadoras son Qu saberes puede ud relacionar con aprendizajes en otros modulo vistos a lo largo de la carrera? Cules similitudes encuentra entre el concepto de operador con los aplicados en Hojas de clculo?
2.9
INTERACTIVIDAD DE APOYO Y COMPLEMENTARIA Usar algn servicio de nube (google drive, sky drive, drop box) y subir los archivos generados durante el curso y compartirlos con los pares y docente tutor. RECURSOS Capitulo 1: Computadoras y lenguajes de Programacin, capitulo 2: Resolucin de problemas de computadora y capitulo 3: estructura general de un programa de (JOYANES & RODRIGUEZ, 2003) Capitulo 1 Conceptos de Computacin del libro (DEITEL & DEITEL, 1998) http://es.scribd.com/doc/12390775/IntroducciOn-a-LaProgramacion-Algoritmos-y-Dfd http://www.wiziq.com/tutorial/35182-VariablesConstantes-y-Operadores http://www.francetudiant.com/videos/como-funcionanlas-computadoras-xsvguQquSug http://ullmedia.udv.ull.es/view_item.php? item=9SS4D77MK8W5&type=videos&collection=21 http://www.youtube.com/watch?v=twEXpQYpdKU http://www.wiziq.com/tutorial/35182-VariablesConstantes-y-Operadores http://www.youtube.com/watch?v=QI6dCTp8F9w http://goanimate.com/videos/0vlhHSlv7CGs
Lecturas Disciplinares
3.
49
2.10 BIBLIOGRAFA DEITEL, H., & DEITEL, P. (1998). Como Programar en C/C++ (Segunda ed.). Prentice Hall. JOYANES, L., & RODRIGUEZ, L. (2003). FUNDAMENTOS DE PROGRAMACION. LIBRO DE PROBLEMAS (Tercera ed.). Madrid: McGraw-Hill.
2.11 CIBERGRAFA ACHURY, R. (14 de Marzo de 2004). Scribd. Recuperado el 10 de Noviembre de 2012, de http://es.scribd.com/doc/12390775/IntroducciOn-a-LaProgramacion-Algoritmos-y-Dfd Fundacin Wikimedia, Inc. (29 de Noviembre de 2012). Wikipedia. Recuperado el 1 de Diciembre de 2012, de http://es.wikipedia.org/wiki/Arquitectura_de_computadoras
50
2.12 AUTOEVALUACIN La autoevaluacin del estudiante sobre los temas trabajados en esta unidad, es entendida como el momento donde compara, analiza y valora la informacin y aprendizajes obtenidos teniendo como referentes los objetivos y desempeos alcanzados en cada una de las interactividades. Por tanto lo invitamos a desarrollar la siguiente matriz cualitativa Temtica
2.1. Arquitectura de Hardware de los Computadores 2.2. Tipos de datos
Que sabia
2.3.
Variables
2.4
Constantes
2.5
Operadores
2.6
Palabras
51
Temtica
Reservadas
Que sabia
52
2.13 GLOSARIO Es aquella seal que es continua por ejemplo la red elctrica es una seal sinusoidal tericamente perfecta pero al ser continua es analgica. Otro ejemplo de seal analgica es el ruido. (Acrnimo ingls de American Standard Code for Information Interchange Cdigo Estndar Estadounidense para el Intercambio de Informacin), pronunciado generalmente [ski] o [sci], es un cdigo de caracteres basado en el alfabeto latino, tal como se usa en ingls moderno y en otras lenguas occidentales. Es un sistema de numeracin en el que los nmeros se representan utilizando solamente las cifras cero y uno (0 y 1). Es el que se utiliza en las computadoras, debido a que trabajan internamente con dos niveles de voltaje, por lo cual su sistema de numeracin natural es el sistema binario (encendido 1, apagado 0). El tipo de dato lgico o booleano es en computacin aquel que puede representar valores de lgica binaria, esto es 2 valores, valores que normalmente representan falso o verdadero. Se utiliza normalmente en la programacin, estadstica, electrnica, matemticas (lgebra booleana), etc. En informtica, un buffer de datos es una ubicacin de la memoria en un Disco o en un instrumento digital reservada para el almacenamiento temporal de informacin digital, mientras que est esperando ser procesada. El bus es la va de comunicacin para los datos y seales de control en la estructura de un computador, entre la CPU y los diferentes rganos que se le deben poner si se tratan de las pistas o cintas de cobre impresas en la placa principal se llama bus del sistema. El bus esta formado bsicamente por tres: bus de datos, bus de direcciones y bus de control. Es el conjunto de circuitos integrados diseados con base a la arquitectura de un procesador (en algunos casos diseados como parte integral de esa arquitectura), permitiendo que ese tipo de procesadores funcionen en una placa base
Anlogo
ASCII
Binario
Booleano
buffer
bus
chipset
53
Core i
Los procesadores Intel Core i son el ms nuevo lanzamiento de Intel y estn diseados para ofrecer alto rendimiento en la ejecucin de videos de alta definicin y tareas con grficos 3D. En el mercado se encuentras i3, i5 e i7 que se refieren al numero de procesadores y mejora de desempeos(velocidad ) presentes en el computador Double Data Rate: significa doble tasa de transferencia de datos en espaol. Son mdulos de memoria RAM compuestos por memorias sncronas (SDRAM), disponibles en encapsulado DIMM, que permite la transferencia de datos por dos canales distintos simultneamente en un mismo ciclo de reloj
DDR
Es un conjunto de dispositivos destinados a la generacin, transmisin, procesamiento o almacenamiento de seales digitales. Tambin, y a diferencia de un sistema Digital- sistema analgico, un sistema digital es una combinacin de dispositivos diseados para manipular cantidades fsicas o informacin que estn representadas en forma digital; es decir, que slo puedan tomar valores discretos. HDMI Interfaz Multimedia De Alta Definicin, es una norma de audio y vdeo digital cifrado sin compresin apoyada por la industria para que sea el sustituto del euroconector O sistema hexadecimal (a veces abreviado como Hex, no confundir con sistema sexagesimal) es un sistema de numeracin que emplea 16 smbolos. Su uso actual est muy vinculado a la informtica y ciencias de la computacin, pues los computadores suelen utilizar el byte u octeto como unidad bsica de memoria; Corresponde a las siglas de (institute of electrical and electronics engineers) en espaol instituto de ingenieros elctricos y electrnicos, una asociacin tcnico-profesional mundial dedicada a la estandarizacin, entre otras cosas Es el mayor fabricante de circuitos integrados del mundo, segn su cifra de negocio anual. La compaa estadounidense, es la creadora de la serie de procesadores x86, los procesadores ms comnmente encontrados en la mayora de las computadoras personales es una empresa multinacional de
54
Hexadecimal
IEEE
Intel
Microsoft
origen
estadounidense,
fundada el 4 de abril de 1975 por Bill Gates y Paul Allen. Dedicada al sector del software, tiene su sede en Redmond, Washington, Estados Unidos. Microsoft desarrolla, fabrica, licencia y produce software y equipos electrnicos, siendo sus productos ms usados el sistema operativo Microsoft Windows y la suite Microsoft Office NULL no es un valor. Es un estado que indica que el valor de ese item es desconocido o no existente. No es cero o blanco o una cadena vaca y no se comporta como ninguno de esos valores. El sistema numrico en base 8 se llama octal y utiliza los dgitos 0 a 7. Es una palabra, nmero o frase que se lee igual hacia adelante que hacia atrs. Si se trata de un nmero, se llama capica. Es una gama de microprocesadores de quinta generacin con arquitectura x86 producidos por Intel Corporation. Frecuentemente llamado conector Cinch, es un tipo negro de conector elctrico comn en el mercado audiovisual Serial ATA o SATA (acrnimo de Serial Advanced Technology Attachment) es una interfaz de transferencia de datos entre la placa base y algunos dispositivos de almacenamiento, como puede ser el disco duro, lectores y regrabadores de CD/DVD/BR La tarjeta madre es un tablero que contiene todos los conectores que se necesitan para conectar las dems tarjetas del computador. Una tarjeta madre alberga los conectores del procesador, memoria RAM, Bios, puertas en serie, puertas en paralelo, expansin de la memoria, pantalla, teclado, disco duro, enchufes. El trmino Video Graphics Array (VGA) se utiliza tanto para denominar a una pantalla de computadora analgica estndar, al conector VGA de 15 clavijas D subminiatura, a la tarjeta grfica que se comercializ por primera vez en 1988 por IBM
Null
SATA
Tarjeta Madre
VGA
55
UNIDAD N
3.1
Que es el lenguaje de programacin C++? Por qu es importante para un tcnico en informtica aprender este lenguaje? Cules son sus caractersticas y ventajas frente a otros lenguajes de alto nivel? las respuestas a estas preguntas se abordan en esta temtica que busca familiarizar a los participantes con la historia de C Y C++ y comprender el entorno de desarrollo de este lenguaje. Conocer un vocabulario y una gramtica no equivale a saber un idioma, su dominio depende de saber combinar sus elementos, estructuras, expresiones clave en un contexto determinado. As mismo ocurre con los lenguajes de programacin, conocer su sintaxis, sentencias y estructuras no equivale a saber programar, pero son condicin necesaria para empezar hacerlo. Concatenando las temticas previas y a travs de actividades terico-practicas, el educando aplicar los diferentes tipos de variables diferenciando aquellas palabras propias del lenguaje C.
56
3.2
CONOCIMIENTOS PREVIOS Qu es el lenguaje C? Que palabras clave o reservadas usadas en los pseudocdigos coinciden con las del lenguaje C? Cules ejemplos desarrollados en c, existen en el mercado informtico?
3.3
DESEMPEOS Los alumnos identifican las caractersticas (antecedentes y funciones) del lenguaje de programacin c. El estudiante conceptualiza los diferentes tipos de variables del lenguaje de programacin en su contexto. El educando complementa sus saberes mediante consultas en internet sobre ejemplos de programas sencillos en c++. Los equipos conformados en unidad 1, participan en las actividades colaborativas virtuales dispuestas en la plataforma del curso. El alumno evala sus aprendizajes sobre los temas relacionados al lenguaje c, tipos de variables, constantes vistos durante la unidad 3. Los estudiantes aportan al debate sobre aplicaciones construidas en lenguaje c en la plataforma virtual.
57
RUBRICA DE EVALUACIN INTERACTIVIDAD UNIDAD N: 03 Crear un algoritmo o flujograma para acceder y ejecutar un programa escrito en lenguaje c. Desarrollar un programa en c que diferencie las caractersticas de las variables en longitud y uso de memoria. Publicar una presentacin que contenga ejemplos de variables (vlidos y no validos), palabras reservadas y constantes en c++. Compilar un programa en c++ que quiera modificar la edad para alcanzar la mayora de edad, imprima en pantalla el valor de la constante y termine despus de 3 intentos. Aportar en el debate Programas Construidos en Lenguaje C++, acorde a las pautas, tiempos y reglas fijadas con anterioridad por el tutor.
3.4
Excelente
Entreg el 100% de las actividades propuestas evidenciando el alcance de los desempeos de la unidad
Insuficiente
Entrego menos del 30% de las interactividades
Participar en una miniolimpiada de programacin para resolver problemas frecuentes de algebra, fsica o qumica
Particip en un 100% del debate publicado en la plataforma, contribuyendo con excelentes ideas Cumpli con el 100% de la interactividad bajo los criterios y
Particip en un 60% del debate publicado en la plataforma, con algunos comentarios Cumpli con el 60% de la interactividad omitiendo 1 o dos criterios
Particip menos de un 30% del debate publicado en la plataforma, con escasos argumentos
Cumpli con menos del 30% de la interactividad ajustando un criterio de los solicitados
58
INTERACTIVIDAD UNIDAD N: 03
Excelente
tiempos definidos
Insuficiente
59
3.5 3.1
TEMTICAS Lenguaje C++ La finalidad de aprender un lenguaje de programacin es mejorar como programador, es decir, ser ms eficaz en el diseo e implementacin de los sistemas nuevos y en el mantenimiento de los antiguos. (STROUSTRUP, 2001)
C++ es un lenguaje de programacin orientado a objetos que toma la base del lenguaje C y que fue diseado a mediados de los aos 80 por Bjarne Stroustrup. Tanto C como C++ son lenguajes de programacin de propsito general. Los software como sistemas operativos, compiladores, aplicaciones de bases de datos, procesadores de texto, hojas de clculo hasta los juegos y dems tipos de aplicaciones especializadas, se crean con lenguajes de programacin. El C++ es un lenguaje de programacin de alto nivel de propsito general que: Soporta abstraccin de datos, Favorece la programacin orientada a objetos y Puede desarrollarse programacin genrica. Facilita un mtodo estructurado y disciplinado para el diseo de programas de computacin.
Una de las propiedades del C++ es la reutilizacin del cdigo en archivos conocidos como libreras de usuario. Los programadores, despus de programar por un tiempo, desarrollan sus propias libreras para aquellas rutinas que hacen frecuentemente. El lenguaje C++ soporta diversos estilos de programacin. Retomando a Stroustrup (2001), todos, los estilo de programacin, se basan en una comprobacin esttica de tipos rigurosa y la mayora pretende alcanzar un alto nivel de abstraccin y una representacin directa de las ideas del programador. Para obtener el mximo beneficio de C++, debe dedicar tiempo a aprender e interiorizar estilos y tcnicas de programacin adecuados a C++. Lo mismo puede decirse de los programadores habituados a usar versiones anteriores y menos expresivas de C++.
60
3.1.1 Antecedentes y Funciones C evolucion a partir de dos lenguajes previos, BCPL y B. BCPL. Fue desarrollado en 1967 por Martin Richards, como un lenguaje para escribir software y compiladores de sistemas operativos (DEITEL & DEITEL, 1998). El lenguaje C fue derivado del lenguaje B por Dennis Ritchie, de los Laboratorios Bell. C al inicio se hizo muy conocido como lenguaje de desarrollo del sistema operativo UNIX. Hoy da, virtualmente todos los sistemas principales estn escritos en C o C++. A lo largo de las ltimas dos dcadas, C se ha hecho disponible para la mayor parte de los computadoras. C es independiente del hardware. Con un diseo cuidadoso, es posible escribir programas en C que sean porttiles hacia la mayor parte de las computadoras. C utiliza muchos de los conceptos importantes de BCPL y de B, adems de aadir los tipos de datos y otras caractersticas poderosas. (DEITEL & DEITEL, 1998) El libro en 1978 de Kemighan y de Ritchie, titulado The e Programming Language, logr captar la atencin sobre este lenguaje. Este texto se convirti en una de las publicaciones cientficas sobre computadores de mayor xito a la fecha. La expansin rpida de C sobre diferentes tipos de computadores (denominadas a veces plataformas de hardware) trajo consigo muchas variantes. Pese a tener caractersticas similares, no eran compatibles. Esta falta de estandarizacin se converta en un problema para los programadores, que necesitaban digitar cdigos que pudieran funcionar en varios equipos y sistemas operativos que denoto la necesidad de tener una versin estndar de C. En 1983, se cre el comit tcnico X3J11, bajo el American National Standards Committee on Computers and Information Processing (X3), para "proporcionar una definicin no ambigua e independiente de mquina del lenguaje (DEITEL & DEITEL, 1998). En 1989 el estndar o norma qued aprobado. El documento se conoce como ANSI/ISO 9899: 1990 y las copias de este se pueden solicitar en el American National Standards Institute, cuya direccin se menciona en el prefacio de este texto. La segunda edicin de Kemighan y Ritchie, que se public en 1988, refleja esta versin que se conoce como ANSI C, la cual ahora se utiliza en todo el mundo (Ke88).
61
62
C++ es heredero directo del lenguaje C que, a su vez, se deriva del lenguaje B [Richards, 1980]. C se mantiene como un subconjunto de C++. Otra fuente de inspiracin, como seala su autor Bjarne Stroustrup (Stroustrup, 1997) fue Simula 67 [Dahl, 1972] del que tom el concepto de clase (con clases derivadas y funciones virtuales). Bjarne Stroustrup desarroll C++ al principio de la dcada de los ochenta. Stroustrup dise C++ como un mejor C. En general, C estndar es un subconjunto de C++ y la mayora de los programas C son tambin programas C++ (la afirmacin inversa no es verdadera). C++ adems de aadir propiedades a C, presenta caractersticas y propiedades de programacin orientada a objetos, que es una tcnica de programacin muy potente. Las caractersticas ms notables que han ido incorporndose a C++ son: herencia mltiple, genericidad, plantillas, funciones virtuales, excepciones, etc. C++ ha ido evolucionando ao a ao y como su autor ha explicado: evolucion siempre para resolver problemas encontrados por los usuarios y como consecuencia de conversaciones entre el autor, sus amigos y sus colegas (STROUSTRUP, 2001) 4 C++ es un lenguaje estandarizado. En 1998, un comit de ANSI/ISO (American Nacional Standard Institute/International Organization for Standardization) adopt una especificacin del lenguaje conocida como Estndar C++ de 1998, oficialmente tiene el ttulo ISO/ANSI C++ Standard (ISO/IEC 14882:1998) [Standard98]. En 2003 una segunda versin del Estndar vio la luz y fue adoptada tambin como [Standard03]. El estndar est disponible en Internet como archivo PDF con el nmero de documento 14882 en http://www.ansi.org donde se puede adquirir. La nueva edicin es una revisin tcnica, significando que se ordena la primera edicin fijacin de tipos, reduccin de ambigedades y similares, pero no cambian las caractersticas del lenguaje. (Scribd, 2006) El lenguaje C++ es un lenguaje orientado a objetos que se ha hecho muy popular y con una gran difusin en el mundo del software. Libreras y Funciones
Opciones gratuitas buenas puede encontrar en el sitio del fabricante de software Borland. Tambin puede encontrar y descargar un compilador excelente Dev-C++ en software libre que puede compilar cdigo C y tambin cdigo C++, en www.bloodshed.net y en www.download.com puede asimismo encontrar diferentes compiladores totalmente gratuitos. Otros numerosos sitios puede encontrar en software gratuito en numerosos sitios de la red. Los fabricantes de software y de computadoras (IBM, Microsoft, HP...) ofrecen versiones a sus clientes aunque normalmente no son gratuitos
63
Las libreras son archivos que en C contienen las funciones, en otras palabras son las acciones que C nos permite hacer Una librera es un conjunto de recursos (algoritmos) prefabricados, que pueden ser utilizados por el programador para realizar determinadas operaciones. La idea central de librera es precisamente la de ser un mdulo de software preconstruido -generalmente por terceros- para cuya utilizacin no es necesario conocer los detalles ntimos de su funcionamiento, sino su interfaz. Es decir, que respuestas nos puede dar y cmo hay que preguntar -a la librera- para obtenerlas. A manera de conclusin, el trmino librera se usa para referirse a los mdulos objeto .obj / .o (resultados de compilacin) agrupados en un solo archivo que pueden tener extensiones como: .lib, .bpl .h .a, .dll, etc. Estos archivos permiten ser una alternativa muy conveniente para el desarrollo de programas grandes, sin mencionar, que en la industria del software optimiza procesos, tiempos y costos. Ejemplos: alloc.h Contiene las funciones para obtener y liberar memoria. conio.h Es la librera que contiene las funciones de entrada salida desde la consola. ctype.h Contiene funciones que indican caractersticas de los caracteres, por ejemplo, si est en mayscula o en minscula, si es un dgito hexa valido, etc. errno.h Declara una lista de constantes de error que devuelven las funciones de entrada salida. cntl.h Define los flags para los modos de apertura de un fichero. stdlib.h Conjunto de funciones estndar. math.h Conjunto de funciones matemticas. string.h Funciones de manejo de cadenas.
3.1.2 Proceso para la obtencin de un programa fuente Para elaborar un programa en C y obtener un archivo ejecutable se siguen los siguientes pasos:
64
Se escribe el cdigo fuente, un fichero de texto que contiene el cdigo del programa. Se compila el programa y se obtiene el fichero objeto. Se enlaza el fichero objeto con las funciones de bibliotecas utilizadas en el programa para obtener el fichero ejecutable (.exe)
Un programa en C++, as como un algoritmo tiene una estructura. En la creacin del programa intervienen libreras, funciones, y otras partes ms que en un algoritmo no se pueden llegar a usar por complejidad. Revisemos, como lo dice POZO (2002), la estructura de un programa en C. Archivo De Cabecera Libreras indica que se tengan en cuenta las funciones y tipos definidos en la librera que se escoja, por ejemplo tenemos: #include < nombre de librera> Por lo general en c++ usamos iostream que son las siglas iniciales de: [input output stream] o stdio. Cabecera De Funcin Funcin Principal Debajo de la cabecera principal del programa, se coloca la cabecera de funcin, sta funcin es obligatoria en cada programa porque indica el comienzo del programa: main ( ) Y se requiere de los parntesis despus de la palabra restringida main Cuerpo Desarrollo Despus de colocar main ( ) la programacin va en el cuerpo del programa, se debe indicar cual es el cuerpo, es decir los limites. En un programa los limites son marcados por las llaves , es decir { } { .... ....... }
65
Por ultimo tenemos las sentencias, es decir nuestra programacin, lo que va a hacer el programa al compilarlo y ejecutarlo. Todo eso va a ir en el cuerpo es decir DENTRO de los limites que establecimos (las llaves principales del programa) Al final tenemos que, la estructura de un programa en C++ es as: - Estructura #include <iostream.h> #include <stdio.h> main ( ) { .... ....... } Errores: Los errores de programacin pueden clasificarse en varios tipos, dependiendo de la fase en que se presenten. Errores de sintaxis: son errores en el programa fuente. Pueden deberse a palabras reservadas mal escritas, expresiones errneas o incompletas, variables que no existen, etc. Los errores de sintaxis se detectan en la fase de compilacin. El compilador, adems de generar el cdigo objeto, nos dar una lista de errores de sintaxis. De hecho nos dar slo una cosa o la otra, ya que si hay errores no es posible generar un cdigo objeto. Avisos: adems de errores, el compilador puede dar tambin avisos (warnings). Los avisos son errores, pero no lo suficientemente graves como para impedir la generacin del cdigo objeto. No obstante, es importante corregir estos avisos, ya que el compilador tiene que decidir entre varias opciones, y sus decisiones no tienen por qu coincidir con lo que nosotros pretendemos, se basan en las directivas que los creadores del compilador decidieron durante su creacin. Errores de enlazado: el programa enlazador tambin puede encontrar errores. Normalmente se refieren a funciones que no estn definidas en ninguno de los ficheros objetos ni en las libreras. Puede que hayamos olvidado incluir alguna librera, o algn fichero objeto, o puede que hayamos olvidado definir alguna funcin o variable, o lo hayamos hecho mal. Errores de ejecucin: incluso despus de obtener un fichero ejecutable, es posible que se produzcan errores. En el caso de los errores de ejecucin normalmente no obtendremos mensajes de error, sino que simplemente el programa terminar
66
bruscamente. Estos errores son ms difciles de detectar y corregir. Existen programas auxiliares para buscar estos errores, son los llamados depuradores (debuggers). Estos programas permiten detener la ejecucin de nuestros programas, inspeccionar variables y ejecutar nuestro programa paso a paso. Esto resulta til para detectar excepciones, errores sutiles, y fallos que se presentan dependiendo de circunstancias distintas. Errores de diseo: finalmente los errores ms difciles de corregir y prevenir. Si nos hemos equivocado al disear nuestro algoritmo, no habr ningn programa que nos pueda ayudar a corregir los nuestros. Contra estos errores slo cabe practicar y pensar.
3.2
Tipos de variables
Existen varios tipos de variables, y cada uno corresponde a un tamao mximo de un nmero, un carcter o incluso una verdad. Cuanto mayor sea el nmero que pueda admitir, ms espacio en memoria ocupar. Bool Por lo general utiliza 1 byte de memoria, valores: true o false. Char Utiliza generalmente 1 byte de memoria, permite almacenar un carcter, valores; 256 caracteres. Unsigned short int Utiliza generalmente 2 bytes de memoria, valores: de 0 a 65 535 Short int Utiliza generalmente 2 bytes de memoria, valores: de -32768 a 32767. Unsigned long int Utiliza generalmente 4 bytes de memoria, valores: de 0 a 4 294 967 295. Long int Utiliza generalmente 4 bytes de memoria, valores: de -2 147 483 648 a 2 147 483 647.
67
Int (16 bits) Utiliza generalmente 2 bytes de memoria, valores: de -32 768 a 32 767. Int (32 bits) Utiliza generalmente 4 bytes de memoria, valores: de -2 147 483 648 a 2 147 483 647. Unsigned int (16 bits) Utiliza generalmente 2 bytes de memoria, valores: de 0 a 65 535. Unsigned int (32 bits) Utiliza generalmente 2 bytes de memoria, valores: de 0 a 4 294 967 295. Double Utiliza generalmente 8 bytes de memoria, valores: de 2.2e-308 a 3.4e-38. Float Utiliza generalmente 4 bytes de memoria, valores: de 1.2e-308 a 3.4e-38. El tamao de las variables en memoria puede variar de un PC a otro.
68
#include <stdio.h> using namespace std; #define flotante 83.45 //constante #define erre 'r' //constante int main () { double resultado; //variable resultado = flotante * flotante; printf("resultado= %.2f\n",resultado); printf("Constante erre: %s\n",erre); return 0; }
#include <iostream> // biblioteca para uso de cout using namespace std; int main() // funcin principal { int i = 1; // variable para bucles bool sumar = true; // Siguiente operacin es suma o resta bool terminado = false; // Condicin de fin cout << i; // muestra el valor en pantalla terminado = (i == 23); // Actualiza condicin de fin cout << endl; // Cambio de lnea return 0; }
// Inicializacin de cadenas #include <stdio.h> #include <string.h> using namespace std; int main () { string cadena="Esta es una cadena"; //aunque tambien valdra: string cadena("Esta es una cadena); printf("%s\n",cadena); cadena="Cambiamos el contenido"; printf("%s\n",cadena); return 0; }
69
3.3
Palabras Reservadas
Las palabras reservadas son identificadores predefinidos reservados que tienen significados especiales y no se pueden utilizar como identificadores de sus programas.
auto bool break case catch char class const continue default delete do double else enum extern float for friend goto if inline int long new operator private protected public register return short signed sizeof static struct switch tempate template this throw try typedef union unsigned void volatile while
3.4
Constantes y enumeraciones
Las variables pueden cambiar de valora lo largo la ejecucin de un programa, o bien en ejecuciones distintas de un mismo programa. Un programa adems de usar variables tambin utiliza constantes, es decir, valores que siempre son los mismos. El ejemplo ms frecuente es la constante del nmero Pi, que equivale 3.141592654. Este valor, puede aparecer de forma reiterada en varias sentencias de un programa. En C existen distintos tipos de constantes: Constante numrica, Son valores numricos, enteros o de punto flotante. Se permiten tambin constantes octales (nmeros enteros en base 8) y hexadecimales (base 16). Constante carcter. Cualquier carcter individual encerrado entre apstrofos (tal como 'a', 'Y', ')', '+', etc.) es en realidad un nmero entero pequeo (entre 0 y 255, o entre -128 y 127, segn los sistemas). Existe un cdigo, llamado cdigo ASCII, que establece una equivalencia entre cada carcter y un valor numrico correspondiente.
70
Cadena de caracteres. Un conjunto de caracteres alfanumricos encerrados entre comillas es tambin un tipo de constante del lenguaje C, como por ejemplo: "espacio", "Esto es una cadena de caracteres", etc. Constante simblica: tienen un nombre (identificador) y en esto se parecen a las variables. Sin embargo, no pueden cambiar de valor a lo largo de la ejecucin del programa. En C se pueden definir mediante el preprocesador o por medio de la palabra clave const. En C ++ se utiliza preferentemente esta segunda forma.
En el lenguaje C++ existe una clase especial de constantes denominadas enumeracin. Las variables con enumeraciones o enumeradas se conocen con la abreviatura enum (palabra reservada), este tipo de variables tienen la caracterstica de que su rango de valores es un conjunto de constantes enteras denominadas constantes de enumeracin. Por ejemplo: enum dia { D, L, Ma, Mi, J, V, S } diaY; La variable dia, tipo enum, toma los valores D, L, Ma, Mi, J, V, S. Este tipo de variables pueden adoptar un conjunto de seis valores enteros 0, 1, 2, 3, 4, 5, 6 (enumeradores). Acorde a la sintaxis, se define la variable diaY de este tipo (variable enumerada). Cada enumeracin distinta constituye un tipo de enumerando diferente. Ejemplo: enum Calificacion {APTO, NO-APTO} c1; enum Evolucion {SUBE, BAJA, IGUAL} c2;
4.6
INTERACTIVIDADES DE APRENDIZAJE Crear un algoritmo o flujograma para acceder y ejecutar un programa escrito en lenguaje c. Hacer un programa en C++ usando diferentes tipos de variables. Crear un cuadro comparativo con las ventajas y fortalezas del lenguaje c++. Incluir un glosario de bibliotecas y palabras reservadas. INTERACTIVIDAD INDIVIDUAL
3.5
71
Desarrollar un programa en c que diferencie las caractersticas de las variables en longitud y uso de memoria. Publicar una presentacin que contenga ejemplos de variables (vlidos y no validos), palabras reservadas y constantes en c++. Compilar un programa en c++ que quiera modificar la edad para alcanzar la mayora de edad, imprima en pantalla el valor de la constante y termine despus de 3 intentos.
3.6
INTERACTIVIDAD COLABORATIVA Aportar en el debate Programas Construidos en Lenguaje C++ , acorde a las pautas, tiempos y reglas fijadas con anterioridad por el tutor. INTERACTIVIDAD DE APOYO Y COMPLEMENTARIA Participar en una miniolimpiada de programacin para resolver problemas frecuentes de algebra, fsica o qumica
3.7
Lecturas Disciplinares
RECURSOS 6. Capitulo 1: Conceptos de Computacin del libro (DEITEL & DEITEL, 1998) 7. El capitulo 2: Recorrido por C++ de (STROUSTRUP, 2001) 8. El capitulo 7 Como escribir un programa en C (BECERRA, 1991) 9. 3. http://es.scribd.com/doc/2551829/Tipos-de-datos-en-C 10. http://www.youtube.com/watch?v=OJXxPoHSHcs 11. http://www.youtube.com/watch?v=ImLE6FFVioQ 12. http://www.youtube.com/watch?v=6PPs1hVFxAI 13. http://www.youtube.com/watch?v=twEXpQYpdKU
3.8 BIBLIOGRAFA BECERRA, C. (1991). Lenguaje C para todos los niveles. Bogot: ARFO. DEITEL, H., & DEITEL, P. (1998). Como Programar en C/C++ (Segunda ed.). Prentice Hall. STROUSTRUP, B. (2001). El Lenguaje de Programacin C++. Madrid: ADDISONWESLEY.
72
3.9
CIBERGRAFA
Scribd. (26 de Julio de 2006). Recuperado el 10 de Diciembre de 2012, de http://es.scribd.com/doc/52944613/28/C-EL-ORIGEN-DE-C-COMOLENGUAJE-UNIVERSAL POZO, S. (31 de Marzo de 2002). Departamento de Ciencias de la Computacin . Recuperado el 27 de Noviembre de 2012, de decsai.ugr.es/~jfv/ed1/c+ +/cursoCpp.pdf VARGAS, L. (22 de Junio de 2006). Olimpiada Mexicana de Informtica. Recuperado el 10 de Noviembre de 2012, de http://www.olimpiadadeinformatica.org.mx/archivos/apuntes/EstructurasDat os.pdf
73
3.10 AUTOEVALUACIN La autoevaluacin del estudiante sobre los temas trabajados en esta unidad, es entendida como el momento donde compara, analiza y valora la informacin y aprendizajes obtenidos teniendo como referentes los objetivos y desempeos alcanzados en cada una de las interactividades. Por tanto lo invitamos a desarrollar la siguiente matriz cualitativa Temtica
3.1 Lenguaje C++
Que sabia
de
74
Adicionalmente, invitamos a tener en cuenta los ejercicios de autoevaluacin propuesto en el libro de (DEITEL & DEITEL, 1998) pginas 18 y 19.
75
3.11 GLOSARIO es un estndar publicado por el Instituto Nacional Estadounidense de Estndares (ANSI), para el lenguaje de programacin C. C es un lenguaje de programacin creado en 1972 por Dennis M. Ritchie en los Laboratorios Bell como evolucin del anterior lenguaje B, a su vez basado en BCPL. es un lenguaje de programacin diseado a mediados de los aos 1980 por Bjarne Stroustrup. La intencin de su creacin fue el extender al exitoso lenguaje de programacin C con mecanismos que permitan la manipulacin de objetos. El char es para denominar variables tipo carcter (character en ingls). Es decir, smbolos simples como: a, $, T, 9, !, et En programacin, una constante es un valor que no puede ser alterado durante la ejecucin de un programa.
Ansi c
C++
Char
Constante
Define
es una directiva del preprocesador de C que sirve para definir constantes literales o macros Es un espacio o escenario informtico en donde operan determinados comandos, funciones o caractersticas comunes.
Entorno
Error
Comnmente conocido como bug (bicho), es un error o falla en un programa de computador o sistema de software que desencadena un resultado indeseado. Float es un tipo de dato que almacena valores numricos con decimales la directiva #include indica, al preprocesador, que debe incluir, antes de la compilacin, en el cdigo fuente del programa, el contenido de la librera
Float
Include
Int
76
lmites de cada uno de sus tamaos. A su vez, esos tamaos dependen de la plataforma, del compilador, y del nmero de bits que use por palabra de memoria Iostream Es un componente de la biblioteca estndar (STL) del lenguaje de programacin C++ que es utilizado para operaciones de entrada/salida. alto Un lenguaje de alto nivel permite al programador escribir las instrucciones de un programa utilizando palabras o expresiones sintcticas muy similares al ingls. Es un conjunto de subprogramas utilizados para desarrollar software. Las bibliotecas contienen cdigo y datos, que proporcionan servicios a programas independientes, es decir, pasan a formar parte de stos. La funcin main es imprescindible en cualquier programa C/C++ representa el punto de inicio de su ejecucin
Lenguaje nivel
Librera
Main
Multiprocesado Se denomina multiprocesador a un computador que cuenta con r dos o ms microprocesadores (CPUs) Multitarea en informtica, modo de funcionamiento disponible en algunos sistemas operativos, mediante el cual una computadora procesa varias tareas al mismo tiempo Es un lenguaje pensado en facilitar el aprendizaje de programacin a sus alumnos, utilizando la programacin estructurada y estructuracin de datos. Sin embargo con el tiempo su utilizacin excedi el mbito acadmico para convertirse en una herramienta para la creacin de aplicaciones de todo tipo.
Pascal
Poo
La programacin orientada a objetos o POO (OOP segn sus siglas en ingls) es un paradigma de programacin que usa los objetos en sus interacciones, para disear aplicaciones y programas informticos. Est basado en varias tcnicas, incluyendo herencia, cohesin, abstraccin, polimorfismo, acoplamiento y encapsulamiento Se define como la caracterstica que posee un software para ejecutarse en diferentes plataformas, el cdigo fuente del software es capaz de reutilizarse en vez de crearse un nuevo cdigo
Portabilidad
77
cuando el software pasa de una plataforma a otra significa "standard input-output header" (cabecera estandar E/S), es la biblioteca estndar del lenguaje de programacin C, el archivo de cabecera que contiene las definiciones de macros, las constantes, las declaraciones de funciones y la definicin de tipos usados por varias operaciones estndar de entrada y salida. Un proceso puede informalmente entenderse como un programa en ejecucin.
Stdio
Tarea
Uml
Es un lenguaje grfico para visualizar, especificar, construir y documentar un sistema. Es un sistema operativo portable, multitarea y multiusuario; desarrollado, en principio, en 1969, por un grupo de empleados de los laboratorios Bell de AT&T,
Unix
78
UNIDAD N
4.1
INTRODUCCIN
Como segunda fase en la apropiacin de caractersticas y usos del lenguaje de programacin C++, se plantean las temticas de operadores y expresiones. Se pretende desarrollar en los participantes la capacidad para usar los operadores propios del lenguaje as como y sus expresiones a travs de actividades prcticas y creando programas sencillos. Como eje de trabajo se abordan las reglas de precedencia o fuerza de vinculacin propios del lenguaje c para optimizar la escritura, el desarrollo de operaciones lgicas y aritmticas; los fundamentos tericos, las actividades prcticas darn cuenta de su uso y funcionalidad en la resolucin de problemas basados principalmente en matemticas. Con relacin a las sentencias en C++, se plantean los contenidos para responder a preguntas como: Qu uso tienen las sentencias en c++?, Cmo se clasifican?, Qu aspecto se debe tener presente en su sintaxis? Lo anterior se complementa con ejemplos prcticos y sencillos que servirn de base para el posterior uso de bifurcaciones y bucles de la siguiente unidad.
4.2
CONOCIMIENTOS PREVIOS Conoce algo de la sintaxis en C++? Cules son los errores ms frecuentes en programacin? Cmo se aplican los conceptos vistos en algoritmos en un programa en C++?
4.3
DESEMPEOS
79
El estudiante apropia conceptos relacionados a las operaciones en el lenguaje c. Los alumnos se familiarizaran con las reglas de sintaxis para la creacin de programas en c++. El educando desarrolla actividades de investigacin con el propsito de reforzar los conceptos de la unidad 5. Los participantes del curso en sus equipos de trabajo, generan acuerdos y normas para la presentacin de actividades grupales. El alumno evala sus aprendizajes sobre el uso de operadores, expresiones, reglas de precedencia y expresiones en el lenguaje de programacin c++. Los estudiantes participan en los wikis y discusiones abiertas en la plataforma virtual.
80
RUBRICA DE EVALUACIN INTERACTIVIDAD UNIDAD N: 04 Crear un programa donde se haga uso de los diferentes operadores en c++. Buscar en YouTube 5 videos que explique el uso de expresiones y sentencias en el lenguaje de programacin c++ y crear un documento que referencie sus ttulos, enlaces y sinopsis. Publicar un documento que explique a travs de ejemplos las reglas de precedencia y asociatividad en el lenguaje c. A travs del wiki Lo ms bsico del c aportar conceptos y ejemplos de cmo se trabajan estos operadores en c++. Crear un mapa conceptual que resuma los temas trabajados en la unidad 5, usar preferiblemente ilustraciones y mentefactos.
4.4
Excelente
Entreg el 100% de las actividades propuestas evidenciando el alcance de los desempeos de la unidad
Insuficiente
Entrego menos del 30% de las interactividades
Particip en el 100% del wiki contribuyendo con excelentes ideas Cumpli con el 100% de la interactividad bajo los criterios y tiempos definidos
Particip en el 80% del wiki con sus aportes Cumpli con el 80% de la interactividad omitiendo uno que otro criterio
Particip con el 60% del wiki con algunos comentarios Cumpli con el 60% de la interactividad omitiendo 1 o dos criterios
Particip en el 40% del wiki en algunas ocasiones Cumpli con el 40% de la interactividad omitiendo dos o mas criterios
Particip menos del 30% en el wiki con escasos argumentos Cumpli con menos del 30% de la interactividad ajustando un criterio de los solicitados
81
4.5 4.1
TEMTICAS Operadores
Los operadores son elementos que disparan ciertos clculos cuando son aplicados a variables o a otros objetos en una expresin. Existe una divisin en los operadores respecto al nmero de operandos que afectan. Segn esta clasificacin pueden ser unitarios, binarios o ternarios, los primeros inciden a un solo operando, los segundos a dos y as sucesivamente Operadores aritmticos Son usados para crear expresiones matemticas. Existen dos operadores aritmticos unitarios, '+' y '-' que tienen la siguiente sintaxis:
+ <expresin> - <expresin>
Asignan valores positivos o negativos a la expresin a la que se aplican. En cuanto a los operadores binarios existen varios. '+', '-', '*' y '/', tienen un comportamiento anlogo, en cuanto a los operandos, ya que admiten enteros y de coma flotante. Sintaxis:
<expresin> <expresin> <expresin> <expresin> + * / <expresin> <expresin> <expresin> <expresin>
El operador de mdulo '%', devuelve el resto de la divisin entera del primer operando entre el segundo. Por esta razn no puede ser aplicado a operandos en coma flotante.
<expresin> % <expresin>
Ejemplo: Tomemos la siguiente divisin 5 / 2, el resultado es 2,5. Si la variable que almacena el resultado se define como entera el resultado que se almacena ser 2. Pero que pasa con el residuo? Si usamos el modulo 5 % 2, la variable almacena el residuo, en este caso 5. Operadores Unitarios. Se trata de operadores que trabajan sobre variables, pues implican una asignacin. Estos son los operadores '++' y '--'. El primero incrementa el valor del operando y el segundo lo decrementa, ambos en una unidad. Hay dos
82
formas de utilizarlos, dependiendo de que se use el operador en la forma de prefijo o de sufijo. Sintaxis:
<variable> ++ (post-incremento) ++ <variable> (pre-incremento) <variable>-- (post-decremento) -- <variable> (pre-decremento)
En su forma de prefijo, el operador es aplicado antes de que se evale el resto de la expresin; en la forma de sufijo, se aplica despus de que se evale el resto de la expresin. Ejemplo, - tomados del texto de POZO (2002) Las siguientes variables a = 100 y b= 10:
c = a + ++b;
Aqu se aplica el pre-incremento y b valdr 11 a continuacin se evala la expresin "a+b", que dar como resultado 111, y por ltimo se asignar este valor a c, que valdr 111.
c = a + b++;
En este segundo ejemplo primero se avala la expresin "a+b", que dar como resultado 110, y se asignar este valor a c, que valdr 110. Finalmente se aplica en post-incremento, y b valdr 11. Operadores de asignacin Existen varios operadores de asignacin, el ms evidente y el ms usado es el "=", pero no es el nico. Aqu hay una lista: "=", "*=", "/=", "%=", "+=", "-=", "<<=", ">>=", "&=", " ^=" y "|=". Y la sintaxis es:
<variable> <operador de asignacin> <expresin>
Operador coma La coma tiene una doble funcin, por una parte separa elementos de una lista de argumentos de una funcin. Por otra, puede ser usado como separador en expresiones "de coma". Ambas funciones pueden ser mezcladas, pero hay que aadir parntesis para resolver las ambigedades. Sintaxis:
E1, E2, ..., En
83
En una expresin "de coma", cada operando es evaluado como una expresin, pero los resultados obtenidos anteriormente se tienen en cuenta en las subsiguientes evaluaciones.
func(i, (j = 1, j + 4), k);
Llamar a la funcin con tres argumentos: (i, 5, k). La expresin de coma (j = 1, j+4), se evala de izquierda a derecha, y el resultado se pasar como argumento a la funcin. Operadores de igualdad Los operadores de igualdad son "==", (dos signos = seguidos) y "!=", que comprueban la igualdad o desigualdad entre dos valores aritmticos. Sintaxis:
<expresin1> == <expresin2> <expresin1> != <expresin2>
Se trata de operadores de expresiones lgicas, es decir, el resultado es "true" o "false". En el primer caso, si las expresiones 1 y 2 son iguales el resultado es "true", en el segundo, si las expresiones son diferentes, el resultado es "true". Para hacer comparaciones entre una constante y una variable, se debe poner en primer lugar la constante, por ejemplo:
if(a == 123) ...
Operadores lgicos Los operadores "&&", "||" y "!" relacionan expresiones lgicas, formando a su vez nuevas expresiones lgicas. Sintaxis:
<expresin1> && <expresin2> <expresin1> || <expresin2> !<expresin>
El operador "&&" equivale al "AND" o "Y"; devuelve "true" slo si las dos expresiones evaluadas son "true" o distintas de cero, en caso contrario devuelve "false" o cero. Si la primera expresin evaluada es "false", la segunda no se evala. Generalizando, con expresiones AND con ms de dos expresiones, la primera expresin falsa interrumpe el proceso e impide que se contine la evaluacin del resto de las expresiones. Esto es lo que se conoce como "cortocircuito", y es muy importante. Operadores relacionales
84
Los operadores son "<", ">", "<=" y ">=", que comprueban relaciones de igualdad o desigualdad entre dos valores aritmticos. Sintaxis:
<expresin1> <expresin1> <expresin1> <expresin1> < <expresin2> < <expresin2> <= <expresin2> >= <expresin2>
Si el resultado de la comparacin resulta ser verdadero, se retorna "true", en caso contrario "false". El significado de cada operador es evidente: > mayor que < menor que >= mayor o igual que <= menor o igual que
4.2
Expresiones
Una expresin es una combinacin de variables o constantes, y operadores. La expresin es equivalente al resultado que proporciona al aplicar sus operadores a sus operandos. Por ejemplo, 1+5 es una expresin formada por dos operandos (1 y 5) y un operador (el +); esta expresin es equivalente al valor 6, lo cual quiere decir que all donde esta expresin aparece en el programa, en el momento de la ejecucin es evaluada y sustituida por su resultado. Una expresin puede estar conformada por varias expresiones sencillas, y puede contener parntesis de varios niveles agrupando distintos trminos. En C existen distintos tipos de expresiones. Expresiones Aritmticas Estn formadas por variables o constantes, y distintos operadores aritmticos e incrementales (+ , - , *, /, % , + + , - - ). Como se ha dicho, tambin se pueden emplear parntesis de tantos niveles como se desee, y su interpretacin sigue las normas aritmticas convencionales. (POZO, 2002) Por ejemplo en la siguiente expresin cuadrtica
85
Se escribe, en C en la forma: x- (-b+sqrt ((b*b) - (4*a*c))) / (2*a); Donde, estrictamente hablando, slo lo que est a la derecha del operador de asignacin (=) es una expresin aritmtica. El conjunto de la variable que est a la izquierda del signo (=), el operador de asignacin, la expresin aritmtica y el carcter (;) constituyen una sentencia. En la expresin anterior aparece la llamada a la funcin de librera sqrt), que tiene como valor de retorno la raz cuadrada de su nico argumento. (GARCA, RODRGUEZ, & GOI, 2004) Expresiones Lgicas Los elementos con los que se forman estas expresiones son valores lgicos; verdaderos (true, o distintos de 0) y falsos (false, o iguales a 0), y los operadores lgicos ||, & & y !. Tambin se pueden emplear los operadores relacionales (< , >, <=, >=, = >, ! =) para producir estos valores lgicos a partir de valores numricos. Estas expresiones equivalen siempre a un valor 1 (true) o a un valor 0 (false). Por ejemplo: a - ((b>c) && (c>d | | ( (c ==e) I I (e==b)); Donde de nuevo la expresin lgica es lo que est entre el operador de asignacin (=) y el (;). La variable a valdr 1 si b es mayor que e y e mayor que d, si e es igual a e e es igual a b. (GARCA, RODRGUEZ, & GOI, 2004) Expresiones Generales Una de las caractersticas ms importantes en C es su flexibilidad para combinar expresiones y operadores de distintos tipos en una expresin que se podra llamar general, aunque es una expresin absolutamente ordinaria de C. El resultado de una expresin lgica es siempre un valor numrico (1 0); esto permite que cualquier expresin lgica pueda aparecer como sub-expresin en una expresin aritmtica. Recprocamente, cualquier valor numrico puede ser considerado como un valor lgico: true si es distinto de 0 y false si es igual a 0. Esto permite introducir cualquier expresin aritmtica como sub-expresin de una expresin lgica. Por ejemplo: (a - b*2.) && (c != d) A su vez, el operador de asignacin (=), adems de introducir un nuevo valor en la variable que figura a su izquierda, deja tambin este valor disponible para ser utilizado en una expresin ms general. (GARCA, RODRGUEZ, & GOI, 2004)
86
4.3
El resultado de una expresin depende del orden en que se ejecutan las operaciones. El siguiente ejemplo ilustra claramente la importancia del orden. Considrese la expresin: 3+4*2 Si se realiza primero la suma (3+4) y despus el producto (7*2), el resultado es 14; si se realiza primero el producto (4*2) y luego la suma (3+8), el resultado es 11. Con objeto de que el resultado de cada expresin quede claro e inequvoco, es necesario definir las reglas que definen el orden con el que se ejecutan las expresiones de C. Existe dos tipos de reglas para determinar este orden de evaluacin: las reglas de precedencia y de asociatividad. Adems, el orden de evaluacin puede modificarse por medio de parntesis, pues siempre se realizan primero las operaciones encerradas en los parntesis ms interiores. Los distintos operadores de C se ordenan segn su distinta precedencia o prioridad; para operadores de la misma precedencia o prioridad, en algunos el orden de ejecucin es de izquierda a derecha, y otros de derecha a izquierda (se dice que se asocian de izda a dcha, o de dcha a izda). A este orden se le llama asociatividad. (GARCA, RODRGUEZ, & GOI, 2004) En la siguiente tabla se muestra la precedencia -disminuyendo de arriba a abajo- y la asociatividad de los operadores de C. En dicha Tabla se incluyen tambin algunos operadores que no han sido vistos hasta ahora.
Operadores Asociatividad Izquierda a derecha
() [] -> :: . Operadores unitarios: ! ~ + - ++ -- & (direccin de) * (puntero Derecha a izquierda a) sizeof new delete .* ->* Izquierda a derecha * (multiplicacin) / % Izquierda a derecha + - (operadores binarios) Izquierda a derecha << >> Izquierda a derecha < <= > >= Izquierda a derecha == != Izquierda a derecha & (bitwise AND) Izquierda a derecha ^ (bitwise XOR) Izquierda a derecha | (bitwise OR) Izquierda a derecha && Izquierda a derecha
87
La tabla muestra las precedencias de los operadores en orden decreciente, los de mayor precedencia en la primera fila. Dentro de la misma fila, la prioridad se decide por el orden de asociatividad.
4.4
Sentencias
El elemento que nos falta para empezar a escribir programas que funcionen son las sentencias. Existen sentencias de varios tipos, que nos permitirn enfrentarnos a todas las situaciones posibles en programacin. Estos tipos son: Bloques Expresiones Llamada a funcin Asignacin Nula
Bloques Una sentencia compuesta o un bloque es un conjunto de sentencias, que puede estar vaca, encerrada entre llaves "{}". Sintcticamente, un bloque se considera como una nica sentencia. Tambin se usa en variables compuestas, como veremos en el captulo de variables II, y en la definicin de cuerpo de funciones. Los bloques pueden estar anidados hasta cualquier profundidad. (POZO, 2002) Expresiones Una expresin seguida de un punto y coma (;), forma una sentencia de expresin. La forma en que el compilador ejecuta una sentencia de este tipo evaluando la expresin. Cualquier efecto derivado de esta evaluacin se completar antes de ejecutar la siguiente sentencia. (POZO, 2002) Llamadas a funcin
88
Segn POZO (2002), es la manera de ejecutar las funciones que se definen en otras partes del programa o en el exterior de ste, ya sea una librera estndar o particular. Consiste en el nombre de la funcin, una lista de parmetros entre parntesis y un ";". Por ejemplo, para ejecutar la funcin usaramos una sentencia como sta: Mayor(124, Mayor(12, 1234)); Aqu se llama dos veces a la funcin "Mayor", la primera vez como una sentencia, la segunda como una expresin, que nos proporciona el segundo parmetro de la sentencia. En realidad, el compilador evala primero la expresin para obtener el segundo parmetro de la funcin, y despus llama a la funcin. Asignacin Las sentencias de asignacin responden al siguiente esquema:
<variable> <operador de asignacin> <expresin>;
La expresin de la derecha es evaluada y el valor obtenido es asignado a la variable de la izquierda. El tipo de asignacin depender del operador utilizado, estos operadores. La expresin puede ser, por supuesto, una llamada a funcin. De este modo podemos escribir un ejemplo con la funcin "Mayor" que tendr ms sentido: m = Mayor(124, 1234); Nula La sentencia nula consiste en un nico ";". Sirve para usarla en los casos en los que el compilador espera que aparezca una sentencia, pero en realidad no pretendemos hacer nada.
4.5
INTERACTIVIDADES DE APRENDIZAJE Crear un programa donde se haga uso de los diferentes operadores en c++. Usar un programa para hacer mapas conceptuales. En lnea pueden consultar alguno de estos http://www.relpe.org/herramientas/mapasmentales/
89
4.6
INTERACTIVIDAD INDIVIDUAL Buscar en YouTube 5 videos que explique el uso de expresiones y sentencias en el lenguaje de programacin c++ y crear un documento que referencie sus ttulos, enlaces y sinopsis. Publicar un documento que explique a travs de ejemplos las reglas de precedencia y asociatividad en el lenguaje c.
4.7
INTERACTIVIDAD COLABORATIVA A travs del wiki Lo ms bsico del c aportar conceptos y ejemplos de cmo se trabajan estos operadores en c++.
4.8
INTERACTIVIDAD DE APOYO Y COMPLEMENTARIA Crear un mapa conceptual que resuma los temas trabajados en la unidad 5, usar preferiblemente ilustraciones y mentefactos. RECURSOS 10. Lectura capitulo 2 Introduccin a la computacin (DEITEL & DEITEL, 1998) 11. Texto del capitulo 2: Recorrido por C++ del libro de (STROUSTRUP, 2001) 4. Consultar el texto digital de Salvador Pozo (POZO, 2002) 14. http://www.youtube.com/watch?v=onEilMRlR4E 15. http://www.youtube.com/watch?v=_MSWkbWz9kc 16. http://www.youtube.com/watch?v=_MSWkbWz9kc 17. http://www.youtube.com/watch?v=2y11TNNlIPs
Lecturas Disciplinares
4.9
BIBLIOGRAFIA
BECERRA, C. (1991). Lenguaje C para todos los niveles. Bogot: ARFO. DEITEL, H., & DEITEL, P. (1998). Como Programar en C/C++ (Segunda ed.). Prentice Hall. STROUSTRUP, B. (2001). El Lenguaje de Programacin C++. Madrid: ADDISONWESLEY.
90
4.10 CIBERGRAFIA Scribd. (26 de Julio de 2006). Recuperado el 10 de Diciembre de 2012, de http://es.scribd.com/doc/52944613/28/C-EL-ORIGEN-DE-C-COMOLENGUAJE-UNIVERSAL GARCA, J., RODRGUEZ, J., & GOI, R. (28 de Abril de 2004). Tecnun. Recuperado el 10 de Diciembre de 2012, de Universidad de Navarra: http://www.tecnun.es/asignaturas/Informat1/AyudaInf/aprendainf/ansic/leng_ c.pdf POZO, S. (31 de Marzo de 2002). Departamento de Ciencias de la Computacin . Recuperado el 27 de Noviembre de 2012, de decsai.ugr.es/~jfv/ed1/c+ +/cursoCpp.pdf
91
4.11 AUTOEVALUACIN La autoevaluacin del estudiante sobre los temas trabajados en esta unidad, es entendida como el momento donde compara, analiza y valora la informacin y aprendizajes obtenidos teniendo como referentes los objetivos y desempeos alcanzados en cada una de las interactividades. Por tanto lo invitamos a desarrollar la siguiente matriz cualitativa Temtica
4.1 Operadores
UNIDAD 4 OPERADORES, EXPRESIONES Y SENTENCIAS Que sabia Que Aprend Como lo aplicare Recursos para tener en cuenta
4.2
Expresiones
de y
4.4
Sentencias
92
Adicionalmente, invitamos a tener en cuenta los ejercicios de autoevaluacin propuesto en el libro de DEITEL, 1998) pginas 46 y 47
(DEITEL &
93
4.12 GLOSARIO Es conocido por su nombre en ingls ampersand, proveniente a su vez de la expresin and per se and, es decir, y por s mismo, y, usada como parte de la retahla para la memorizacin del alfabeto. En informtica el asterisco se emplea habitualmente como una expresin regular para denotar cero o ms repeticiones de un patrn; este uso se realiza a menudo en el diseo de DTDs Un bloque de instrucciones es un conjunto de instrucciones que se ejecutan una detrs de otra y que se encuentran entre llaves. es una compaa de software, ubicada en Austin, Texas, Estados Unidos que toma caracteres de la entrada estndar (teclado) pone caracteres en la salida estndar (pantalla); Es un entorno de desarrollo integrado (IDE) para programar en lenguaje C/C++. Usa MinGW que es una versin de GCC (GNU Compiler Collection) como su compilador Valor lgico. Falso o 0 Una funcin es un modulo de un programa separado del cuerpo principal, que realiza una tarea especifica y que puede regresar un valor a la parte principal del programa u otra funcin o procedimiento que la invoque. O corchete. Son utilizados para delimitar el cuerpo del programa representacin de procesos, modelos o sistemas que conforman un conglomerado mayor o supra-sistema, que pretende el anlisis de interaccin de ellos, a fin de mantener una relacin flexible que les permita cumplir su funcin particular y coadyuvar para cumplir la funcin del supra-sistema. Los parntesis pueden servir en la mayor parte de los lenguajes de programacin para forzar prioridades entre las operaciones de una expresin, de una forma anloga a su uso en matemtica.
Ampersand
asterisco
funcin
llaves
Modelo
parntesis
94
posicin
preprocesado Es un programa separado que es invocado r el compilador antes de que comience la traduccin real. printf
Numerosos lenguajes de programacin implementan una funcin printf (print formatted), para mostrar una cadena con formato. Esta, originaria del lenguaje de programacin C, normas o parmetros acorde al tipo de lenguaje de programacin empleado para su funcionamiento La sentencia return puede utilizarse dentro de una funcin para terminar su ejecucin. La funcin scanf() (scan-format, analizar con formato), en realidad representa a una familia de funciones que analizan una entrada de datos con formato y cargan el resultado en los argumentos que se pasan por referencia a dicha funcin o funciones A la forma visible de un lenguaje de programacin se le conoce como sintaxis. La mayora de los lenguajes de programacin son puramente textuales, es decir, utilizan secuencias de texto que incluyen palabras, nmeros y puntuacin, de manera similar a los lenguajes naturales escritos. Valor Verdadero. 1 El programa se ejecuta pero puede tener problemas de funcionamiento.
regla return
scanf
sintaxis
True warning
95
UNIDAD N
Como documentos orientadores de esta unidad se recomienda el captulo 12 Toma de decisiones y capitulo 17 Instrucciones repetitivas del libro de (BECERRA, 1991) y capitulo 6 Expresiones y sentencias (STROUSTRUP, 2001)
5.2
CONOCIMIENTOS PREVIOS Por qu cree que el uso de sentencias if / else se constituye el principio fundamental en informtica? Qu ejemplos de programas sencillos requieren el uso de bucles? Qu riesgos o errores frecuentes se presentan con el uso de condiciones y ciclos en programacin?
5.3
DESEMPEOS El estudiante reconoce el uso de condiciones y ciclos, acorde a la sintaxis del lenguaje de programacin. Los alumnos resuelven diferentes problemas de la lgica matemtica que exigen el uso de sentencias if / ifelse en el lenguaje c.
96
El educando realiza consultas en internet o textos sobre soluciones a problemas que usan bucles acorde a la estructura de programacin en c++. Los equipos conformados en unidad 1, participan en las actividades colaborativas virtuales dispuestas en la plataforma del curso. El alumno evala sus aprendizajes sobre bifurcaciones, bucles y sentencias de control trabajados durante la unidad 6. Los estudiantes interactan en los foros y discusiones abiertas en la plataforma virtual.
97
5.4
INTERACTIVIDAD UNIDAD N: 05 El alumno crea programas en lenguaje C++ donde se haga uso de bifurcaciones. En google imgenes (https://www.google.com.co/imghp? hl=es-419&tab=wi) buscar ejemplo bucle y escoger alguna de las imgenes de un DFD de un ciclo y traducirlo en lenguaje c++. En el siguiente enlace decsai.ugr.es/ hay ejemplos de sentencias break, continue, goto; utilizar uno de ellos y desarrollar un programa en c++. A travs de la plataforma participar en el foro publicado en la unidad 6 por el docente tutor. Crear una interactividad (puede usar Power Point, http://prezi.com/, http://www.knovio.com/) y exponga uno de los problemas propuestos y desarrollados en c++.
Excelente
Entreg el 100% de las actividades propuestas evidenciando el alcance de los desempeos de la unidad
Insuficiente
Entrego menos del 30% de las interactividades
Particip en el 100% del foro contribuyendo con excelentes ideas Cumpli con el 100% de la interactividad bajo los criterios y tiempos definidos
Particip en el 80% del foro con sus aportes Cumpli con el 80% de la interactividad omitiendo uno que otro criterio
Particip con el 60% del foro con algunos comentarios Cumpli con el 60% de la interactividad omitiendo 1 o dos criterios
Particip en el 40% del foro en algunas ocasiones Cumpli con el 40% de la interactividad omitiendo dos o mas criterios
Particip menos del 30% en el foro con escasos argumentos Cumpli con menos del 30% de la interactividad ajustando un criterio de los solicitados
98
5.5 5.1
TEMTICAS Bifurcaciones
En programacin, cuando en un algoritmo existe una condicin de la cual depende que a continuacin se ejecuten unas instrucciones u otras, se dice que existe una bifurcacin. Operador Condicional El operador condicional es un operador con tres operandos (ternario) que tiene la siguiente forma general:
expresion _1 ? expresion _ 2 : expresion _ 3;
Aqu se evala la expresion_1. Si el resultado de dicha evaluacin es true (!=0), se ejecuta expresion_2; si el resultado es false (= 0), se ejecuta expresion_3. Sentencia IF La sintaxis o estructura general de la sentencia condicional if es la siguiente: if (expresin) sentencia_1; Esta sentencia de control permite ejecutar o no una sentencia simple o compuesta segn se cumpla o no una determinada condicin. Se evala expresin. Si el resultado es true (!=0), se ejecuta sentencia; si el resultado es false (=0), se salta sentencia y se prosigue en la lnea siguiente. Hay que recordar que sentencia puede ser una sentencia simple o compuesta (bloque { ... }).
if ( x == 1 ) printf (la variable x vale uno\n); if ( x>=2 && x<=10 ) printf (x est entre 2 y 10\n);
Sentencia if ... Else
99
Esta sentencia permite realizar una bifurcacin, ejecutando una parte u otra del programa segn se cumpla o no una cierta condicin. Esta es su sintaxis:
if (expresion) sentencia_1; else
El funcionamiento de esta estructura es sencillo. Se evala una condicin, si es verdadera ejecuta un cdigo, si es falsa, ejecuta otro cdigo (o contina con la ejecucin del programa).
int edad; printf(Ingrese su edad: \n); scanf(%d, &edad); if (edad>=18) { printf(Usted es mayor de edad. \n); } else { printf(Usted es menor de edad. \n); };
Sentencia if ... Else mltiple Esta sentencia permite realizar una ramificacin mltiple, ejecutando una entre varias partes del programa segn se cumpla una entre 11 condiciones. La forma general es la siguiente: if (expresion_1) sentencia_1; else if (expresion 2) sentencia_2; else if (expression 3) sentencia_3; else if ( ... ) sentencia n En esta sentencia se evala expresion_1. Si el resultado es true, se ejecuta sentencia_1. Si el resultado es fa/se, se salta sentencia_1 y se evala expresion 2. Si el resultado es true se ejecuta sentencia _ 2, mientras que si es false se evala expresion _ 3 Y as sucesivamente. Si ninguna de las expresiones o condiciones true se ejecuta expresion_n que es la opcin por defecto (puede ser la sentencia vaca, y en ese caso puede eliminarse junto con la palabra else). Todas las sentencias pueden ser simples o compuestas. (DEITEL & DEITEL, 1998)
100
5.2
Bucles
Estos tipos de sentencias son el ncleo de cualquier lenguaje de programacin, y estn presentes en la mayor parte de ellos. Nos permiten realizar tareas repetitivas, y se usan en la resolucin de la mayor parte de los problemas. Bucle While Una estructura de repeticin le permite al programador especificar que se repita una accin, en tanto cierta condicin se mantenga verdadera (DEITEL & DEITEL, 1998) El ciclo while se utiliza al programar en C para lograr que el computador ejecute de manera repetida durante una cantidad de veces un conjunto de instrucciones. La instruccin while hace que el computador repita una parte del cdigo mientras la condicin es verdadera La sintaxis es la siguiente:
while (<condicin>) <sentencia>
"while" - en ingls significa "mientras" debe hacer cumplir la sentencia hasta llegar a la condicin, si no se especifica condicin se asume que es "true", y el bucle se ejecutar indefinidamente. Si la primera vez que se evala la condicin resulta falsa, la sentencia no se ejecutar ninguna vez. Ejemplo:
while (i ++ < 10);
{
float nota; printf( "\n Introduzca nota (real): " ); scanf( "%f", ¬a );
101
/* Si la primera nota introducida por el usuario es correcta, el bucle no itera ninguna vez. */ while ( nota < 0 || nota > 10 ) { printf( "\n ERROR: Nota incorrecta, debe ser >= 0 y <= 10\n" ); printf( "\n Introduzca nota (real): " ); scanf( "%f", ¬a ); } /* Mientras que el usuario introduzca una nota incorrecta, el bucle iterar. Y cuando introduzca una nota correcta, el bucle finalizar. */ if ( nota >= 5 ) printf( "\n APROBADO" ); else printf( "\n SUSPENDIDO" ); } return 0;
Bucle Do While Las estructura de repeticin do/while es similar a la estructura while. En la estructura while, la condicin de continuacin de ciclo se prueba al principio del ciclo, antes de ejecutarse el cuerpo del mismo. La estructura do/while prueba la condicin de continuacin del ciclo, despus de ejecutar el cuerpo del ciclo y, por lo tanto, el cuerpo del ciclo se ejecutar por lo menos una vez. Cuando termina do/while, la ejecucin continuar con el enunciado que aparezca despus de la clusula while. Note que en la estructura do/while no es necesario utilizar llaves, si en el cuerpo existe slo un enunciado. (DEITEL & DEITEL, 1998) Esta sentencia va un paso ms all que el "while". La sintaxis es la siguiente:
do <sentencia> while(<condicion>);
La sentencia es ejecutada repetidamente mientras la condicin resulte verdadera. Si no se especifica condicin se asume que es "true", y el bucle se ejecutar indefinidamente. A diferencia del bucle "while", la evaluacin se realiza despus de ejecutar la sentencia, de modo que se ejecutar al menos una vez.
#include <stdio.h> void main() { int numero; do
102
{ /* se lee el numero */ printf("Introduzca un numero: ");scanf("%d", &numero); if ((numero % 2) == 0) else printf("El numero %d es par.\n", numero); printf("El numero %d es par.\n", numero);} while (numero != 0) }
Bucle For La estructura de repeticin for maneja de manera automtica todos los detalles de la repeticin controlada por contador. La sintaxis es:
for ( [<inicializacin>]; [<condicin>] ; [<incremento>] ) <sentencia>
La sentencia es ejecutada repetidamente hasta que la evaluacin de la condicin resulte falsa. Antes de la primera iteracin se ejecutar la iniciacin del bucle, que puede ser una expresin o una declaracin. En este apartado se iniciarn las variables usadas en el bucle. Estas variables pueden ser declaradas en este punto, pero en ese caso tendrn validez slo dentro del bucle "for". Despus de cada iteracin se ejecutar el incremento de las variables del bucle. Ejemplo:
#include<stdio.h> #include<conio.h> int main() { int x=0; for(x=0;x<=5;x++) { printf("%d ",x); } getch(); } //Este programa mostrar en pantalla 0 1 2 3 4 5
Como se desarrolla el ciclo? x=0 -> Indica el inicio del ciclo. Puede ser cualquier variable y cualquier valor de inicio.
103
x<=5 ->Indica el fin del ciclo. Cuando la condicin deja de cumplirse el ciclo termina. Cuando el ciclo no es menor o igual a 5 el ciclo termina. x++ -> Indica que la variable x aumenta de uno en uno. Para aumentar de dos en dos: x+=2, de tres: x+=3.
Sentencia Switch Cuando se usa la sentencia "switch" el control se transfiere al punto etiquetado con el "case" cuya expresin constante coincida con el valor de la variable del "switch", a partir de ese punto todas las sentencias sern ejecutadas hasta el final del "switch", es decir hasta llegar al "}" (POZO, 2002) Las etiquetas marcan solamente los puntos de entrada despus de una ruptura de la secuencia de ejecucin, pero no las salidas. Esta caracterstica nos permite ejecutar las mismas sentencias para varias etiquetas distintas, y se puede eludir usando la sentencia de ruptura "break" al final de las sentencias incluidas en cada "case". (POZO, 2002) Si no se satisface ningn "case", el control parar a la siguiente sentencia despus de la etiqueta "default". Esta etiqueta es opcional y si no aparece se abandonar el "switch". Sintaxis:
switch (<variable>) { case <expresin constante>: <sentencia>[... <sentencia>] [break;] . . . [default : <sentencia>] }
104
El ejemplo ilustra el uso del "break", si la primera sentencia no se cumple - primer "case"-, la ejecucin contina en la siguiente sentencia, ignorando el resto de los "case" hasta el "break".
5.3
Estos tipos de sentencias permiten romper la ejecucin secuencial de un programa. Sentencia de ruptura "break" El uso de esta sentencia dentro de un bucle pasa el control a la primera sentencia despus de la sentencia de bucle. Lo mismo se aplica a la sentencia "switch". Sintaxis:
Break
Ejemplo:
y = 0; x = 0; while(x < 1000)
105
En este ejemplo el bucle no terminara nunca si no fuera por la lnea del "break", ya que x no cambia. Despus del "break" el programa continuara en la lnea "x = 1". (POZO, 2002) Sentencia Continue La sentencia continue se usa para ignorar una iteracin dentro de un ciclo controlado por for o por while. Pasa el control al final de la sentencia de bucle, justo al punto donde se evala la condicin para la permanencia en el bucle. Sintaxis:
continue
Ejemplo:
y = 0; x = 0; while(x < 1000) { x++; if(y >= 100) continue; y++; }
En este ejemplo la lnea "y++" slo se ejecutara mientras "y" sea menor que 100, en cualquier otro caso el control pasa a la lnea "}", con lo que el bucle volvera a evaluarse. (POZO, 2002) Sentencia goto Tomando como referencia a Deitel (1998), La instruccin de salto goto se puede usar en un programa, para transferir incondicionalmente el control del mismo a la primera instruccin despus de una etiqueta, o dicho de otra forma, al ejecutar una instruccin goto, el control del programa se transfiere (salta) a la primera instruccin despus de una etiqueta. Una etiqueta se define mediante su nombre (identificador) seguido del carcter dos puntos (:). Ejemplo
#include <stdio.h> int main() {
106
int n, a; a = 0; do { printf( "Introduzca un numero entero: " ); scanf( "%d", &n ); if ( n == 0 ) { printf( "ERROR: El cero no tiene opuesto.\n" ); goto etiqueta_1; /* En el caso de que n sea un cero, control de programa salta a la primera instruccin despus de etiqueta_1. */ } printf( "El opuesto es: %d\n", -n ); a += n; } while ( n >= -10 && n <= 10 ); etiqueta_1: printf( "Suma: %d", a ); return 0; }
5.4
INTERACTIVIDADES DE APRENDIZAJE El alumno crea programas en lenguaje c++ donde se haga uso de bifurcaciones- usando la sentencia if/ if-else Retomar ejemplos de bucles vistos en algoritmos o diagramas de flujo y traducirlos a c++ INTERACTIVIDAD INDIVIDUAL En google imgenes (https://www.google.com.co/imghp?hl=es-419&tab=wi) buscar ejemplo bucle y escoger alguna de las imgenes de un DFD de un ciclo y traducirlo en lenguaje c++. En el siguiente enlace http://decsai.ugr.es/~jfv/ed1/c/cdrom/cap4/cap46.htm hay ejemplos de sentencias break, continue, goto; utilizar uno de ellos y desarrollar un programa en c++.
5.5
5.6
INTERACTIVIDAD COLABORATIVA A travs de la plataforma participar en el foro publicado en la unidad 6 por el docente tutor. Algunas preguntas orientadoras y sugeridas son Qu aplicabilidad daramos a los aprendizajes adquiridos en nuestra vida laboral y personal?, Cul es la importancia del uso de bifurcaciones, bucles y sentencias de control en los programas?
107
5.7
INTERACTIVIDAD DE APOYO Y COMPLEMENTARIA Crear una interactividad (puede usar Power Point, http://prezi.com/, http://www.knovio.com/) y exponga uno de los problemas propuestos y desarrollados en c++. RECURSOS 12. Capitulo 12 Toma de decisiones y capitulo 17 Instrucciones repetitivas del libro de (BECERRA, 1991) 13. Capitulo 6 Expresiones y sentencias del libro de (STROUSTRUP, 2001) 5. Consultar el texto digital de Salvador Pozo (POZO, 2002) 18. http://www.youtube.com/watch?v=gIQVgG0HS64 19. https://www.google.com.co/imghp?hl=es-419&tab=wi ) 20. http://www.youtube.com/watch?v=ubsy8Gm4pH4
Lecturas Disciplinares
5.8
BIBLIOGRAFA
BECERRA, C. (1991). Lenguaje C para todos los niveles. Bogot: ARFO. DEITEL, H., & DEITEL, P. (1998). Como Programar en C/C++ (Segunda ed.). Prentice Hall. STROUSTRUP, B. (2001). El Lenguaje de Programacin C++. Madrid: ADDISONWESLEY.
5.9
CIBERGRAFA
GARCA, J., RODRGUEZ, J., & GOI, R. (28 de Abril de 2004). Tecnun. Recuperado el 10 de Diciembre de 2012, de Universidad de Navarra: http://www.tecnun.es/asignaturas/Informat1/AyudaInf/aprendainf/ansic/leng_ c.pdf POZO, S. (31 de Marzo de 2002). Departamento de Ciencias de la Computacin . Recuperado el 27 de Noviembre de 2012, de decsai.ugr.es/~jfv/ed1/c+ +/cursoCpp.pdf
108
5.10 AUTOEVALUACIN La autoevaluacin del estudiante sobre los temas trabajados en esta unidad, es entendida como el momento donde compara, analiza y valora la informacin y aprendizajes obtenidos teniendo como referentes los objetivos y desempeos alcanzados en cada una de las interactividades. Por tanto lo invitamos a desarrollar la siguiente matriz cualitativa Temtica
5.1 Bifurcaciones
Que sabia
5.2
Bucles
Adicionalmente, invitamos a tener en cuenta los ejercicios de autoevaluacin propuesto en el libro de DEITEL, 1998) pginas 136 y 137
(DEITEL &
109
5.11 GLOSARIO AND Break Bucle Operador lgico Y provoca que se termine la ejecucin de una iteracin o para salir de la sentencia Es la repeticin de algunas instrucciones, lo cual se logra con: for, while, do-while, Funciona de la siguiente manera: Evala una condicin de resultar cierta, realiza una accin o bloque de acciones, luego vuelve a evaluar la condicin y si nuevamente resulta cierta, realiza la (s) accin (es). Cuando la condicin de cmo resultado falso, se sale del ciclo y contina con la ejecucin normal del programa. El cdigo fuente de un programa informtico (o software) es un conjunto de lneas de texto que son las instrucciones que debe seguir la computadora para ejecutar dicho programa. Por tanto, en el cdigo fuente de un programa est descrito por completo su funcionamiento. Variable que permite "contar" el numero de iteraciones en un ciclo o programa Variables que decrecen su valor numrico. Sintaxis i-- o --i Por defecto Sentencia tipo bucle donde la accin se realizara al menos una vez, ya que primero entra al ciclo y luego valida la condicin, a diferencia del while simple donde primero se valida la condicin End Of File. Fin de archive Accin para identificar sentencias en la programacin Es una sucesin numrica donde el numero siguiente es el resultado de la suma de los dos anteriores, es decir: 0- 1 -1-2-35-8-13-21-34, La funcin getchar retorna el carcter siguiente desde el stream de entrada apuntado por stream. Un histograma es un grfico que muestra la frecuencia con que aparecen en una array dado, valores dentro de subintervalos especificados de su intervalo. Sentencia condicionante "si" Sentencia tipo bifurcacin que traduce en espaol Si En caso
Ciclo
Cdigo
contador decremento default do while EOF etiqueta fibonacci getchar histograma if if else
110
contrario Variable que incrementan el valor numrico. Sintaxis i++ o ++i En programacin un mdulo es una porcin de un programa de computadora. De las varias tareas que debe realizar un programa para cumplir con su funcin u objetivos, un mdulo realizar, comnmente, una de dichas tareas (o varias, en algn caso). Operador lgico O Calcula la raz cuadrada del valor no negativo de x El programa se ejecuta pero puede tener problemas de funcionamiento.
111
UNIDAD N
6 ARRAYS
6.1 INTRODUCCIN
La estructura array tipo vector, son arreglos unidimensionales de datos. En un vector se pueden almacenar distintos valores de un mismo tipo en una sola variable. La forma que el usuario accede a los arreglos unidimensionales es el directo, es decir, podemos llamar cualquier elemento del vector sin tener que consultar a los elementos anteriores o posteriores. Para lograrlo, recurrimos al ndice del arreglo que define el nmero de posiciones en memoria y nos da la posicin relativa de los datos registrados. Los arrays multidimensionales son estructuras de datos que almacenan los valores en ms de una dimensin. As como en los vectores, para acceder a las posiciones se utiliza un ndice. Los arrays de multidimensiones guardan sus valores en filas y columnas (haciendo una analoga a las hojas de clculo) y por ello necesitaremos dos ndices para acceder a cada una de sus posiciones. Dicho de otro modo, las matrices son como un contenedor que guarda ms valores
6.2 6.3
CONOCIMIENTOS PREVIOS Qu ejemplos trabajados en algoritmos pueden servir para los temas de vectores? Qu papel cumplen los ndices en los arrays unidimensionales y multidimensionales? Qu es la programacin estructurada?
DESEMPEOS Los alumnos reconocen, a travs de actividades prcticas, las diferencias entre el uso de vectores y matrices en lenguajes de programacin. El estudiante identifica los mtodos ms representativos para el ordenamiento de datos en programas computacionales.
112
El educando desarrolla actividades de investigacin para ampliar sus conocimientos y aplicacin de los conceptos vistos en la unidad 7. El alumno convierte expresiones algebraicas, aritmticas y lgicas que exigen el registro da datos en vectores y matrices en el lenguaje de programacin c. Los equipos conformados en la unidad 1, participan en las actividades colaborativas virtuales dispuestas en la plataforma del curso. El educando evala su proceso de aprendizaje sobre los temas vistos en la unidad 7. Los estudiantes participan en el chat en la plataforma virtual del CIDE, sobre los mtodos de ordenamiento de datos ms efectivos.
113
6.4
INTERACTIVIDAD UNIDAD N: 06 Crear un portafolio con recursos en la web con ejemplos de programas donde se relacionen usos de arrays tipo vector. Crear un documento de gua que explique la estructura y como registran los datos en una matriz. Consultar el video www.youtube.com/ y acorde al de temas de vectores y matrices Qu informacin adicional le aporta? Qu dudas le deja? Expresar sus aportes en un documento. Distribuir en los equipos de trabajo los mtodos de ordenacin de datos y participar en chats o videconferencia sustentando los aprendizajes y compartiendo con sus pares caractersticas de estos temas. Usar algn servicio de nube (google drive, sky drive, drop box) y subir los archivos generados durante el curso y compartirlos con los pares y docente tutor.
Excelente
Entreg el 100% de las actividades propuestas evidenciando el alcance de los desempeos de la unidad
Superior
Entreg todas las interactividades en un 80%
Aceptable
Entreg el 40% de las interactividades
Insuficiente
Entrego menos del 30% de las interactividades
Particip en el 100% del video/chat contribuyendo con excelentes ideas Cumpli con el 100% de la interactividad bajo los criterios y tiempos definidos
Particip con el 60% del video/chat con algunos comentarios Cumpli con el 60% de la interactividad omitiendo 1 o dos criterios
Particip menos del 30% en el video/chat con escasos argumentos Cumpli con menos del 30% de la interactividad ajustando un criterio de los solicitados
114
6.5
TEMTICAS
Los arrays permiten agrupar datos usando un nico identificador. Todos los elementos de un array son del mismo tipo, y para acceder a cada elemento se usan ndices.
6.1
Vectores:
Un arreglo tipo vector es un grupo de posiciones en memoria relacionadas entre s, por el hecho de que todas tienen el mismo nombre y son del mismo tipo. Para referirse a una posicin en particular o elemento dentro del arreglo, especificamos el nombre del arreglo y el nmero de posicin del elemento particular dentro del mismo. (DEITEL & DEITEL, 1998) Un array (tambin conocido como arreglo, vector o matriz) es un modo de manejar una gran cantidad de datos del mismo tipo bajo un mismo nombre o identificador. Si necesitamos almacenar 10 datos distintos, se requerira 10 variables. El vector resuelve esa necesidad. Para acceder a una u otra se hace a travs de un subndice, que es una expresin entera escrita a continuacin del nombre entre corchetes [ ... ]. La forma general de la declaracin de un vector es la siguiente:
tipo nombre [numero_elementos] ;
Los elementos se numeran desde 0 hasta (numero_elementos-I). El tamao de un vector puede definirse con cualquier expresin constante entera. Ejemplo:
El arreglo anterior est compuesto por 10 elementos Si la variable a la definimos tipo vector, es decir a [9] (la posicin 0 cuenta), podramos representarlo as:
115
Una cadena de caracteres no es sino un vector de tipo char, con alguna particularidad que conviene resaltar. Las cadenas suelen contener texto (nombres, frases, etc.), y ste se almacena en la parte inicial de la cadena (a partir de la posicin cero del vector). Para separar la parte que contiene texto de la parte no utilizada, se utiliza un carcter fin de texto que es el carcter nulo ('\0') segn el cdigo ASCII. Este carcter se introduce automticamente al leer o inicializar las cadenas Ejemplo:
Char pas[15] = Colombia
Aqu se almacena 8 caracteres y el noveno \0, quedando 6 espacios libres Ejemplos aplicados a C++
#include<conio.h> #include<stdio.h> void main() { int i=0,num[10]; clrscr(); for (i=0;i<=9;i++) { printf("Dar dato para la localidad %d\n",i); scanf("%d",&num[i]); } for (i=0;i<=9;i++) printf("el numero en la localidad %d es %d\n",i,num[i]); getch(); }
Como se puede observar, se incorpora el ciclo for para leer y despus imprimir en pantalla los 10 datos almacenados en la variable num Tema: Tabla de Multiplicar Lenguaje C Vie 05 Sep 2008, 01:41 Aqu presento el cdigo de un Programa que muestra la tabla de multiplicar de un nmero ingresado por teclado:
#include <stdio.h>
116
main() { int a,b; printf ("Introduce el nmero:"); scanf("%d",&a); b=1; while (b<=10) { printf("%d * %d = %d\n",a,b,a*b); b++; } }
El cdigo escrito hace referencia a un programa que toma una serie de nmeros y calcula el promedio
#include <iostream.h> int main() { char Nombre[30]; // Usaremos una cadena para almacenar el // nombre (29 caracteres) int Edad; // Un entero para la edad char Telefono[8]; // Y otra cadena para el nmero de // telfono (7 dgitos) // Mensaje para el usuario cout << "Introduce tu nombre, edad y nmero de telfono" << endl; // Lectura de las variables cin >> Nombre >> Edad >> Telefono;
117
// Visualizacin de los datos ledos cout << "Nombre:" << Nombre << endl; cout << "Edad:" << Edad << endl; cout << "Telfono:" << Telefono << endl; return 0; }
Este cdigo hace referencia a un programa que lee el nombre, la edad y el nmero de telfono de un usuario y muestra los resultados en pantalla. Aqu se combina el uso de variables vector tipo carcter y entero.
6.2
Matrices
Una matriz es un vector de vectores tambin llamado array bidimensional. La manera de declarar una matriz en C++ es similar a un vector
int matriz[fils][cols];
int es el tipo de dato, matriz es el nombre del todo el conjunto de datos. La nomenclatura Fils y Cols se refiere al tamao o dimensin de la matriz. Las matrices tambin pueden ser de distintos tipos de datos como char, float, double, etc. Puede afirmarse que las matrices son un recurso de programacin sencillo y pueden considerarse como las "estructuras" de datos ms simples a nivel de estructuras. Los arrays bidimensionales son adecuados para situaciones en las que el acceso a los datos se realice de forma aleatoria e impredecible. Por el contrario, si los elementos pueden estar ordenados y se va a utilizar acceso secuencial sera ms adecuado utilizar una lista. Las matrices en c++ se almacenan al igual que los vectores en posiciones consecutivas de memoria. Usualmente uno se hace la idea que una matriz es como un tablero, pero internamente el manejo es, como su definicin lo indica, un vector de vectores, es decir, los vectores estn uno detrs del otro juntos.
118
|------|------|------|------| F I L A S | dato | dato | dato | dato | |------|------|------|------| | dato | dato | dato | dato | |------|------|------|------| | dato | dato | dato | dato | |------|------|------|------| | dato | dato | dato | dato | |------|------|------|------| | dato | dato | dato | dato | |------|------|------|------| | dato | dato | dato | dato | +------+------+------+------+ | +---- componente ( 6, 3 )
En la figura se observa que tanto las filas como las columnas se numeran tambin a partir de 0. La forma de acceder a los elementos de la matriz es utilizando su nombre, seguido de las expresiones enteras correspondientes a los dos subndices, entre corchetes. En C tanto los vectores como las matrices admiten los tipos de las variables escalares (char, int, long, float, double, etc.), y los modos de almacenamiento auto, extern y static, con las mismas caractersticas que las variables normales (escalares). No se admite el modo register. Las matrices en C se almacenan por filas, en posiciones consecutivas de memoria. En cierta forma una matriz se puede ver como un vector de vectores fila. (GARCA, RODRGUEZ, & GOI, 2004) Ejemplo de Matriz en C
#include <stdio.h> #include <stdlib.h> #define FILAS 7 #define COLS 4 int main() { float VentaSemanaQ[FILAS][COLS] = {
119
123.50, 234.60, 345.45, 321.40, 345.00, 456.65, 123.50, 234.60, 345.45, 321.40, 345.00, 456.65, 123.50, 234.60, 345.45, 321.40, 345.00, 456.65, 123.50, 234.60, 345.45, 321.40, 345.00, 456.65, 0.0, 0.0, 0.0, 0.0 }; float totales[COLS] = { 0.0, 0.0, 0.0, 0.0 }; float grantotal = 0; int f, c, t = 0 ;
puts("Ventas de cuatro semanas"); puts("------------------------"); for (f=0; f<FILAS; f++) { for (c=0; c<COLS; c++) { totales[c] += VentaSemanaQ[f][c]; printf("%8.2f } puts(""); } puts("--------------------------------------"); for (t=0; t<COLS; t++) { printf("%8.2f } printf("\n\nGran total: %10.2f\n", grantotal); system("pause"); return 0; } ", totales[t] ); grantotal += totales[t]; ", VentaSemanaQ[f][c] );
6.3
Ordenar significa reagrupar o reorganizar un conjunto de datos u objetos en una secuencia especifica. Los procesos de ordenacin y bsqueda son frecuentes en nuestra vida. Vivimos en un mundo desarrollado en donde cada vez se hace ms indispensable de contar con informacin actualizada y oportuna para realizar ciertas tareas o bien tomar decisiones, es por ello que el ordenamiento de datos es indispensable para lograr una bsqueda ms eficiente y que la informacin est lista en el momento que se precise utilizarse. 5
5
Fuente : http://fcasua.contad.unam.mx/apuntes/interiores/docs/98/3/informatica3.pdf
120
El propsito principal de un ordenamiento es el de facilitar las bsquedas o la organizacin de los datos, en este segundo caso, significa mover los datos o sus referencias para que queden en una secuencia tal que represente un orden. Cundo conviene usar un mtodo de ordenamiento?, se supondra cuando se requiere optimizar el tiempo que empleara la organizacin de un volumen considerable de datos. Tipos de ordenamientos en computacin: Ordenamiento interno: Son aquellos en los que los valores a ordenar estn en la memoria del equipo. Los externos: Son los valores que estn almacenados en una unidad de almacenamiento o memoria secundaria (disco, cinta, etc). Existen algoritmos de ordenamiento para realizar esta accin. La eficiencia de ellos se mide por el nmero de comparaciones e intercambios que tienen que hacer, es decir, se toma n como el nmero de elementos que tiene el arreglo o vector a ordenar Algoritmos de ordenamiento Internos: 1. Insercin directa. 2. Insercin binaria. 3. Insercin directa. 4. Seleccin directa. 5. Seleccin directa. 6. Burbuja. 7. Shake. 8. Intercambio directo. 9. Shell. 10. Insercin disminucin incremental. 11. Heap. 12. Tournament. 13. Ordenamiento de rbol. 14. Quick sort. 15. Sort particionado. 16. Merge sort. Algoritmos de ordenamiento externos: 1. Straight merging. 2. Natural merging. 3. Balanced multiway merging.
121
7.6
INTERACTIVIDADES DE APRENDIZAJE Crear un programa que calcule las tablas de multiplicar Desarrollar en c++ un programa que presente la escala de conversin de grados Celsius a grados Fahrenheit. Hacer un programa que sume dos matrices. Hacer un programa que lea m*n caracteres y los almacene en una matriz de m filas y n columnas. INTERACTIVIDAD INDIVIDUAL Crear un portafolio con recursos en la web con ejemplos de programas donde se relacionen usos de arrays tipo vector. Crear un documento de gua que explique la estructura y como registran los datos en una matriz. Consultar el video http://www.youtube.com/watch?v=ZvFMTXXErSE y acorde al de temas de vectores y matrices Qu informacin adicional le aporta? Qu dudas le deja? Expresar sus aportes en un documento. INTERACTIVIDAD COLABORATIVA Distribuir en los equipos de trabajo los mtodos de ordenacin de datos y participar en chats o videoconferencia sustentando los aprendizajes y compartiendo con sus pares caractersticas de estos temas.
6.4
6.5
6.6
INTERACTIVIDAD DE APOYO Y COMPLEMENTARIA Usar algn servicio de nube (google drive, sky drive, drop box) y subir los archivos generados durante el curso y compartirlos con los pares y docente tutor. RECURSOS
Fuente: http://www.monografias.com/trabajos/algordenam/algordenam.shtml#ixzz2F4ZQsLh6
122
14. Capitulo 7 Estructura de datos (JOYANES & RODRIGUEZ, 2003) 15. Capitulo 20: arreglos (BECERRA, 1991) 6. www.virtual.unal.edu.co/cursos/ingenieria/2001839/mod ulo1/cap_02/leccion103.htm 21. http://www.youtube.com/watch?v=vTt-GFxkcoM 22. http://www.youtube.com/watch?v=jytMNp9lMKY 23. http://www.youtube.com/watch?v=2JsiKyPNvfo 24. http://www.youtube.com/watch?v=KZL4Maon6PQ 25. http://www.youtube.com/watch? v=sxGO3gsvJDw&feature=related 26. http://www.youtube.com/watch?v=tige01xxEg&feature=related
6.7
BIBLIOGRAFA
BECERRA, C. (1991). Lenguaje C para todos los niveles. Bogot: ARFO. DEITEL, H., & DEITEL, P. (1998). Como Programar en C/C++ (Segunda ed.). Prentice Hall. JOYANES, L., & RODRIGUEZ, L. (2003). FUNDAMENTOS DE PROGRAMACION. LIBRO DE PROBLEMAS (Tercera ed.). Madrid: McGraw-Hill. STROUSTRUP, B. (2001). El Lenguaje de Programacin C++. Madrid: ADDISONWESLEY. 6.8 CIBERGRAFA
GARCA, J., RODRGUEZ, J., & GOI, R. (28 de Abril de 2004). Tecnun. Recuperado el 10 de Diciembre de 2012, de Universidad de Navarra: http://www.tecnun.es/asignaturas/Informat1/AyudaInf/aprendainf/ansic/leng_ c.pdf POZO, S. (31 de Marzo de 2002). Departamento de Ciencias de la Computacin . Recuperado el 27 de Noviembre de 2012, de decsai.ugr.es/~jfv/ed1/c+ +/cursoCpp.pdf VARGAS, L. (22 de Junio de 2006). Olimpiada Mexicana de Informtica. Recuperado el 10 de Noviembre de 2012, de http://www.olimpiadadeinformatica.org.mx/archivos/apuntes/EstructurasDat os.pdf
123
6.9
AUTOEVALUACIN
La autoevaluacin del estudiante sobre los temas trabajados en esta unidad, es entendida como el momento donde compara, analiza y valora la informacin y aprendizajes obtenidos teniendo como referentes los objetivos y desempeos alcanzados en cada una de las interactividades. Por tanto lo invitamos a desarrollar la siguiente matriz cualitativa Temtica
6.1 Vectores
Que sabia
6.2
Matrices
Adicionalmente, invitamos a tener en cuenta los ejercicios de autoevaluacin propuesto en el libro de DEITEL, 1998) pginas 344 y 345
(DEITEL &
124
6.10 GLOSARIO Es un medio de guardar un conjunto de objetos de la misma clase. Se accede a cada elemento individual del array mediante un nmero entero denominado ndice. 0 es el ndice del primer elemento y n-1 es el ndice del ltimo elemento, siendo n, la dimensin del array. el trmino se refiere a una Matriz representada en informtica, es decir un conjunto o agrupacin de variables del mismo tipo cuyo acceso se realiza por ndices. En programacin, una cadena de caracteres, palabra, ristra de caracteres o frase (string en ingls) es una secuencia ordenada de longitud arbitraria (aunque finita) de elementos que pertenecen a un cierto lenguaje formal o alfabeto anlogas a una frase o a una oracin. es una unidad de informacin que corresponde aproximadamente con un grafema o con una unidad o smbolo parecido, como los de un alfabeto o silabario de la forma escrita de un lenguaje natural es un funcin que limpia la pantalla es como su mnemnico lo indica, "clean screen" signos de puntuacin para asignar bloques de programacin es un nmero relacionado con mtricas o topolgicas de un objeto matemtico las propiedades
Array
Arreglo
Cadena
Carcter
La funcin getc retorna el carcter siguiente desde el stream de entrada apuntado por stream. Es un comando que lee un carcter del teclado. es una estructura de datos que mejora la velocidad de las operaciones, permitiendo un rpido acceso a los registros de un array conjunto de variables (Tambin llamado Bloque) del mismo tipo cuyo acceso se realiza por ndice o lneas
ndice
Matriz
125
ordenamiento accin de ordenar acorde a unas premisas y pautas. Suma de todos los valores numricos dividida entre el nmero de valores para obtener un nmero que pueda representar de la mejor manera a todos los valores del conjunto. Esta funcin escribe la cadena apuntado por cadena en el stream apuntado por stdout El valor de cada elemento de un array (, vector o matriz) est asignado a un nombre de la variable y a un subndice Si el argumento es un puntero nulo, la funcin system retorna un valor distinto a cero slo si el procesador de comandos est disponible. una secuencia de bits que se interpreta de acuerdo a algn tipo de datos. La palabra reservada void es utilizada para declarar funciones sin valor de retorno y tambin para indicar que una funcin especfica no requiere de parmetros.
Promedio
puts subndice
system
Valor
void
126
UNIDAD N
7 ESTRUCTURAS EN LENGUAJE C
7.1 INTRODUCCIN Los punteros o apuntadores son recursos propios de los lenguajes de programacin para llamar o ubicar datos en lugares especficos de memoria. Los apuntadores permiten simular el paso por referencia, crear y manipular estructuras dinmicas de datos. La diferencia de usar punteros a variables (que contienen valores especficos) es que en vez de contener un valor x, contienen las direcciones de las variables a las que apuntan. Los punteros, al ser variables deben ser declaradas como punteros antes de ser utilizadas. Las estructuras de datos se usan principalmente con el objetivo de organizar los datos de la memoria del equipo. A diferencia de los arrays, las estructuras permiten agrupar mltiples datos, que tengan algn grado de relacin (aunque sean de distinto tipo), permitiendo manipularlos todos juntos, usando un mismo identificador, o cada uno por separado7 Se recomienda como fuente de consulta el captulo 7 Punteros (DEITEL & DEITEL, 1998) y capitulo 7 funciones (STROUSTRUP, 2001) (DEITEL & DEITEL, 1998) y (STROUSTRUP, 2001)
7.2
CONOCIMIENTOS PREVIOS Qu son los punteros en programacin? Cmo optimizan la programacin el uso de punteros? Qu analogas podemos hacer con la estructuras de programacin? Qu errores ha cometido en programacin que deben evitarse en este captulo?
Fuente: http://c.conclase.net/curso/?cap=011
127
7.3
DESEMPEOS Los alumnos identifican las caractersticas (definicin, sintaxis y uso) de punteros y estructuras del lenguaje de programacin C. El estudiante aplica en la prctica el acceso directo a posiciones de memoria usando apuntadores y estructuras. El educando complementa sus saberes mediante consultas en internet sobre ejemplos de programas en c++. Los equipos conformados en unidad 1, participan en las actividades colaborativas virtuales dispuestas en la plataforma del curso. El alumno evala sus aprendizajes sobre los temas relacionados al lenguaje c, tipos de apuntadores y estructuras vistas durante el modulo. Los estudiantes aportan al debate en la plataforma virtual sobre la importancia de la recursividad y optimizacin de recursos en hardware al usar el lenguaje C para programar.
128
7.4
INTERACTIVIDAD UNIDAD N: 07 Desarrollar un programa en c donde se aplique el uso de apuntadores. Publicar una presentacin que muestre errores frecuentes al usar estructuras en C++ Compilar un programa en C++ usando estructuras, que registre los datos personales de estudiantes del curso (nombre, id, direccin, notas) e imprima en pantalla la informacin. Aportar en el debate optimizacin de recursos en programacin, acorde a las pautas, tiempos y reglas fijadas con anterioridad por el tutor.
Excelente
Entreg el 100% de las actividades propuestas evidenciando el alcance de los desempeos de la unidad
Insuficiente
Entrego menos del 30% de las interactividades
Cada equipo presenta un juego donde aplican los conceptos vistos durante el modulo. El docente tutor fija pautas, condiciones y criterios para esta actividad
Particip en un 100% del debate publicado en la plataforma, contribuyendo con excelentes ideas Cumpli con el 100% de la interactividad bajo los criterios y tiempos definidos
Particip en un 60% del debate publicado en la plataforma, con algunos comentarios Cumpli con el 60% de la interactividad omitiendo 1 o dos criterios
Particip menos de un 30% del debate publicado en la plataforma, con escasos argumentos
Cumpli con menos del 30% de la interactividad ajustando un criterio de los solicitados
129
7.5 7.1
El valor de cada variable est almacenado en un lugar determinado de la memoria, caracterizado por una direccin (que se suele expresar con un nmero hexadecimal). El computador mantiene una tabla de direcciones que relaciona el nombre de cada variable con su direccin en la memoria. Gracias a los nombres de las variables (identificadores), requiere que el programador se preocupe de la direccin de memoria donde estn almacenados sus datos. Sin embargo, en ciertas ocasiones es ms til trabajar con las direcciones que con los propios nombres de las variables. El lenguaje C dispone del operador direccin (&) que permite determinar la direccin de una variable, y de un tipo especial de variables destinadas a contener direcciones de variables. Estas variables se llaman punteros o apuntadores (en ingls pointers). (GARCA, RODRGUEZ, & GOI, 2004) Los punteros se declaran igual que el resto de las variables, pero precediendo el identificador con el operador de direccin, (*), que leeremos como "puntero a". Sintaxis:
<tipo> *<identificador>;
La declaracin de las variables tipo puntero debe hacerse antes de que puedan ser utilizados, ejemplo:
int *countPtr, count;
Figura 3-11 Referencia de una variable. Fuente: (DEITEL & DEITEL, 1998)
La variable countPtr, siendo del tipo int* (es decir, un apuntador a un valor entero) y se lee countPtr es un apuntador a int. Tambin, la variable count se declara como un entero, no un apuntador a un entero. El * solo se aplica a countPtr en la declaracin. Cuando el * se utiliza de esta forma en una declaracin, indica que la variable que se est declarando es un apuntador. Los apuntadores pueden ser
130
declarados para apuntar a objetos de cualquier tipo de datos. (DEITEL & DEITEL, 1998) As pues, un puntero es una variable que puede contener la direccin de otra variable. Por supuesto, los punteros estn almacenados en algn lugar de la memoria y tienen su propia direccin (ms adelante se ver que existen punteros a punteros). Se dice que un puniera apunta a una variable si su contenido es la direccin de esa variable. (GARCA, RODRGUEZ, & GOI, 2004) Como ya se ha visto, los punteros son unas variables un poco especiales, ya que guardan informacin -no slo de la direccin a la que apuntan-, sino tambin del tipo de variable almacenado en esa direccin. Esto implica que no van a estar permitidas las operaciones que no tienen sentido con direcciones de variables, como multiplicar o dividir, pero s otras como sumar o restar. Adems estas operaciones se realizan de un modo correcto, pero que no es el ordinario. As, la sentencia: p = p+1; hace que p apunte a la direccin siguiente de la que apuntaba, teniendo en cuenta el tipo de dato. Por ejemplo, si el valor apuntado p es short int y ocupa 2 bytes, el sumar 1 a p implica aadir 2 bytes a la direccin que contiene, mientras que si p apunta a un double, sumarle 1 implica aadirle 8 bytes. Tambin tiene sentido la diferencia de punteros al mismo tipo de variable. El resultado es la distancia entre las direcciones de las variables apuntadas por ellos, no en bytes sino en datos de ese mismo tipo. Las siguientes expresiones tienen pleno sentido en C: p = p + 1; p = p + i; p + = 1; p++; Ejemplo:
void main (void) ( int a, b, c; int *p1, *p2; void *p; p1 = &a; // Paso 1. La direccin de a es asignada a p I *p1 = 1; // Paso 2. p I (a) es igual a 1. Equivale a a - 1; p2 = &b; // Paso 3. La direccin de b es asignada a p2 *p2 = 2; // Paso 4. p2 (b) es igual a 2. Equivale a b - 2; p1 = p2; // Paso 5. El valor del p I - p2 *pl= 0; //Paso6.b-0 p2 = &c; // Paso 7. La direccin de e es asignada a p2 *p2 = 3; // Paso 8. e - 3 printf("%d %d %d\n", a, b, c); // Paso 9. Qu se imprime?
131
p = &p1; // Paso 10. *p = p2; // Paso 11. *pl = l; // Paso 12. printf("%d %d %d\n", }
La siguiente tabla muestra los valores en ejecucin paso a paso( se muestran en negrilla y cursiva los cambios paso a paso (GARCA, RODRGUEZ, & GOI, 2004)
Figura 3-12 Tabla de ejecucin con punteros. Fuente (Pag 42; GARCA, RODRGUEZ, & GOI, 2004)
Estos punteros pueden apuntar a objetos de cualquier tipo. Por supuesto, tambin se puede emplear el "casting" con punteros, sintaxis:
(<tipo> *)<variable puntero>
#include <iostream.h> int main() { char cadena[10] = "Hola"; char *c; int *n; void *v; c = cadena; // c apunta a cadena n = (int *)cadena; // n tambin apunta a cadena v = (void *)cadena; // v tambin
132
cout << "carcter: " << *c << endl; cout << "entero: " << *n << endl; cout << "float: " << *(float *)v << endl; return 0; }
El resultado ser:
carcter: H entero: 1634496328 float: 2.72591e+20
Vemos que tanto "cadena" como los punteros "n", "c" y "v" apuntan a la misma direccin, pero cada puntero tratar la informacin que encuentre all de modo diferente, para "c" es un carcter y para "n" un entero. Para "v" no tiene tipo definido, pero podemos hacer "casting" con el tipo que queramos, en este ejemplo con float.
Estructuras Una estructura es una forma de agrupar un conjunto de datos de distinto tipo bajo un mismo nombre o identificador. Por ejemplo, supngase que se desea disear una estructura que guarde los datos correspondientes a un alumno de primero. Esta estructura, a la que se llamar alumno, deber guardar el nombre, la direccin, el nmero de matrcula, el telfono, y las notas en las 10 asignaturas. Cada uno de estos datos se denomina miembro de la estructura. El modelo o patrn de esta estructura puede crearse del siguiente modo:
struct alumno { char nombre[31]; char direccion[21]; unsigned long no_matricula; unsigned long telefono; float notas [10]; },
El cdigo anterior crea el tipo de dato alumno, pero an no hay ninguna variable declarada con este nuevo tipo. Obsrvese la necesidad de incluir un carcter (;) despus de cerrar las llaves. Para declarar dos variables de tipo alumno en C se debe utilizar la sentencia incluyendo las palabras struct y alumno (en C++ basta utilizar la palabra alumno):
Struct alumno, alumno1, alumno 2;
donde tanto alumnol como alumno2 son una estructura, que podr almacenar un nombre de hasta 30 caracteres, una direccin de hasta 20 caracteres, el nmero de matrcula, el nmero de telfono y las notas de las 10 asignaturas. Tambin
133
podran haberse definido alumno1 y alumno2 al mismo tiempo que se defina la estructura de tipo alumno. Para ello bastara haber hecho:
struct alumno { char nombre[31]; char direccion[21]; unsigned long no_matricula; unsigned long telfono float notas[10] } alumno1, alumno2
Para acceder a los miembros se utiliza el operador punto precedido por el nombre de la estructura y seguido del nombre miembro. (GARCA, RODRGUEZ, & GOI, 2004) Por ejemplo, si se da el valor del telfono, en la sintaxis de C se escribir
Alumno1.telefono =8671090
Punteros a estructuras: Los punteros tambin pueden apuntar a estructuras. En este caso, para referirse a cada elemento de la estructura se usa el operador (->), en lugar del (.). Ejemplo:
#include <iostream.h> struct stEstructura { int a, b; } estructura, *e; int main() { estructura.a = 10; estructura.b = 32; e = &estructura; cout << "variable" << endl; cout << e->a << endl; cout << e->b << endl; cout << "puntero" << endl; cout << estructura.a << endl; cout << estructura.b << endl; return 0; }
134
cadena2 << endl; cadena1[1] << endl; cadena2[0] << endl; cadena1 + 2 << endl; cadena2 + 1 << endl; *(cadena1 + 2) << endl; *(cadena2 + 1) << endl;
Aparentemente, y en la mayora de los casos, cadena1 y cadena2 son equivalentes, sin embargo hay operaciones que estn prohibidas con los arrays, ya que son punteros constantes. (POZO, 2002)
7.6
INTERACTIVIDADES DE APRENDIZAJE Escribir un programa con una funcin que calcule la longitud de una cadena de caracteres. El nombre de la funcin ser LongitudCadena, debe devolver un "int", y como parmetro de entrada debe tener un puntero a "char". En "main" probar con distintos tipos de cadenas: arrays y punteros. Escribir un programa con una funcin que busque un carcter determinado en una cadena. El nombre de la funcin ser BuscaCaracter, debe devolver un "int" con la posicin en que fue encontrado el carcter, si no se encontr volver con los parmetros de entrada sern una cadena y un carcter. En la funcin "main" probar con distintas cadenas y caracteres. INTERACTIVIDAD INDIVIDUAL Desarrollar un programa en C donde se aplique el uso de apuntadores. Publicar una presentacin que muestre errores frecuentes al usar estructuras en C++. Compilar un programa en C++ usando estructuras, que registre los datos personales de estudiantes del curso (nombre, id, direccin, notas) e imprima en pantalla la informacin.
7.2
7.3
INTERACTIVIDAD COLABORATIVA Aportar en el debate optimizacin de recursos en programacin, acorde a las pautas, tiempos y reglas fijadas con anterioridad por el tutor. INTERACTIVIDAD DE APOYO Y COMPLEMENTARIA
7.4
135
Cada equipo presenta un juego donde aplican los conceptos vistos durante el modulo. El docente tutor fija pautas, condiciones y criterios para esta actividad RECURSOS 16. Captulo 7 Punteros y capitulo 12 estructura de datos del libro de (DEITEL & DEITEL, 1998) 17. Captulo 5 Punteros arrays y estructuras y capitulo 7 funciones del texto de (STROUSTRUP, 2001) 7. www.virtual.unal.edu.co/cursos/ingenieria/2001839/mod ulo1/cap_02/leccion103.htm 27. http://www.youtube.com/watch?v=i4ZATjVrQls 28. http://www.youtube.com/watch?v=OgX4vdtkkHQ 29. http://www.youtube.com/watch?v=lbSC5-MLrBg 30. http://polimedia.upv.es/visor/?id=3d3abe1a-8ef34d4f-aa30-025bc41d85bf
Lecturas Disciplinares
7.5
BIBLIOGRAFA
BECERRA, C. (1991). Lenguaje C para todos los niveles. Bogot: ARFO. DEITEL, H., & DEITEL, P. (1998). Como Programar en C/C++ (Segunda ed.). Prentice Hall. JOYANES, L., & RODRIGUEZ, L. (2003). FUNDAMENTOS DE PROGRAMACION. LIBRO DE PROBLEMAS (Tercera ed.). Madrid: McGraw-Hill. STROUSTRUP, B. (2001). El Lenguaje de Programacin C++. Madrid: ADDISONWESLEY. 7.6 CIBERGRAFA
GARCA, J., RODRGUEZ, J., & GOI, R. (28 de Abril de 2004). Tecnun. Recuperado el 10 de Diciembre de 2012, de Universidad de Navarra: http://www.tecnun.es/asignaturas/Informat1/AyudaInf/aprendainf/ansic/leng_ c.pdf BUSTAMANTE, P., AGUINAGA, I., AYBAR, M., & OLAIZOLA, L. (01 de Junio de 2004). Tecnun. Recuperado el 10 de Diciembre de 2012, de http://www.tecnun.es/asignaturas/Informat1/AyudaInf/aprendainf/cpp/basico/ cppbasico.pdf POZO, S. (31 de Marzo de 2002). Departamento de Ciencias de la Computacin . Recuperado el 27 de Noviembre de 2012, de decsai.ugr.es/~jfv/ed1/c+ +/cursoCpp.pdf
136
VARGAS, L. (22 de Junio de 2006). Olimpiada Mexicana de Informtica. Recuperado el 10 de Noviembre de 2012, de http://www.olimpiadadeinformatica.org.mx/archivos/apuntes/EstructurasDat os.pdf
137
7.7 AUTOEVALUACIN La autoevaluacin del estudiante sobre los temas trabajados en esta unidad, es entendida como el momento donde compara, analiza y valora la informacin y aprendizajes obtenidos teniendo como referentes los objetivos y desempeos alcanzados en cada una de las interactividades. Por tanto lo invitamos a desarrollar la siguiente matriz cualitativa Temtica
7.1 Punteros
Que sabia
7.2
Estructuras
138
7.8
GLOSARIO El trmino se refiere a una Matriz representada en informtica, es decir un conjunto o agrupacin de variables del mismo tipo cuyo acceso se realiza por ndices. Es conocido por su nombre en ingls ampersand, proveniente a su vez de la expresin and per se and, es decir, y por s mismo, y, usada como parte de la retahla para la memorizacin del alfabeto. Operador lgico Y
Arreglo
Ampersand
AND
conjunto de variables (Tambin llamado Bloque) del mismo tipo Array cuyo acceso se realiza por ndice o lneas bidimensional asterisco Borland C break clrscr corchetes Dev- C Dimensin do while EOF etiqueta En informtica el asterisco se emplea habitualmente como una expresin regular para denotar cero o ms repeticiones de un patrn; este uso se realiza a menudo en el diseo de DTDs es una compaa de software, ubicada en Austin, Texas, Estados Unidos provoca que se termine la ejecucin de una iteracin o para salir de la sentencia es un funcin que limpia la pantalla es como su mnemnico lo indica, "clean screen" signos de puntuacin para asignar bloques de programacin Es un entorno de desarrollo integrado (IDE) para programar en lenguaje C/C++. Usa MinGW que es una versin de GCC (GNU Compiler Collection) como su compilador es un nmero relacionado con las propiedades mtricas o topolgicas de un objeto matemtico Sentencia tipo bucle donde la accin se realizara al menos una vez, ya que primero entra al ciclo y luego valida la condicin, a diferencia del while simple donde primero se valida la condicin End Of File. Fin de archivo Accin para identificar sentencias en la programacin
139
funcin
ndice
modulo
OR
Una funcin es un mdulo de un programa separado del cuerpo principal, que realiza una tarea especfica y que puede regresar un valor a la parte principal del programa u otra funcin o procedimiento que la invoque. es una estructura de datos que mejora la velocidad de las operaciones, permitiendo un rpido acceso a los registros de un array En programacin un mdulo es una porcin de un programa de computadora. De las varias tareas que debe realizar un programa para cumplir con su funcin u objetivos, un mdulo realizar, comnmente, una de dichas tareas (o varias, en algn caso). Operador lgico O por
Es un programa separado que es invocado preprocesado el compilador antes de que comience la traduccin real. r printf return
Numerosos lenguajes de programacin implementan una funcin printf (print formatted), para mostrar una cadena con formato. Esta, originaria del lenguaje de programacin C, La sentencia return puede utilizarse dentro de una funcin para terminar su ejecucin. La funcin scanf() (scan-format, analizar con formato), en realidad representa a una familia de funciones que analizan una entrada de datos con formato y cargan el resultado en los argumentos que se pasan por referencia a dicha funcin o funciones A la forma visible de un lenguaje de programacin se le conoce como sintaxis. La mayora de los lenguajes de programacin son puramente textuales, es decir, utilizan secuencias de texto que incluyen palabras, nmeros y puntuacin, de manera similar a los lenguajes naturales escritos. Si el argumento es un puntero nulo, la funcin system retorna un valor distinto a cero slo si el procesador de comandos est disponible. La palabra reservada void es utilizada para declarar funciones sin valor de retorno y tambin para indicar que una funcin especfica no requiere de parmetros. El programa se ejecuta pero puede tener problemas de funcionamiento.
scanf
sintaxis
140
UNIDAD N
8.1
INTRODUCCIN
El uso de listas y pilas, como estructuras de datos, se usan principalmente con el objetivo de organizar, dinamizar y liberar memoria del equipo. Las estructuras dinmicas pueden almacenar y liberar memoria dinmicamente (DEITEL & DEITEL, 1998) optimizando el hardware y software donde se ejecute el programa. El captulo 12 estructura de datos (DEITEL & DEITEL, 1998) y capitulo 6 Expresiones y Sentencias (STROUSTRUP, 2001) Las colas son estructuras lineales de elementos homogneos, que pueden ser accedidos por alguno de los dos extremos. Tienen tambin como caractersticas poner elementos por un extremo y sacar por el opuesto. Las colas tambin se conocen como una estructura FIFO- First Input, First Output-y las operaciones de insertar o retirar se denominan dequeue y enqueue El captulo 12 estructura de datos (DEITEL & DEITEL, 1998) y capitulo 6 Expresiones y Sentencias (STROUSTRUP, 2001)
8.2
CONOCIMIENTOS PREVIOS Qu son las listas, pilas y colas en programacin? Qu relacin tiene estas estructuras memoria? con la asignacin y libracin de
Cmo crear estructuras de datos enlazadas mediante el uso de listas, pilas y colas? Qu errores ha cometido en programacin que deben evitarse en este captulo?
141
8.3
DESEMPEOS Los alumnos identifican las caractersticas (definicin, sintaxis y uso) de Listas, Pilas y Colas en el lenguaje de programacin C. Los alumnos utilizan los recursos y bibliotecas del Lenguaje C para crear estructuras dinmicas ajustables a las necesidades del programa. El educando complementa sus saberes mediante consultas en internet sobre ejemplos de estructuras dinmicas en C++. Los equipos conformados en unidad 1, participan en las actividades colaborativas virtuales dispuestas en la plataforma del curso. El alumno evala sus aprendizajes sobre los temas relacionados al lenguaje c, uso de estructuras dinmicas y programacin orientada a objetos. Los estudiantes aportan al debate en la plataforma virtual sobre la importancia de la memoria dinmicas y estructuras (lista, Pilas y Colas) para optimizar la programacin en lenguaje C.
142
8.4
RUBRICA DE EVALUACIN
INTERACTIVIDAD 8: Listas, Pilas Y Colas UNIDAD N: 08 Excelente Superior Bueno Aceptable Desarrollar un programa en C donde se Entreg el Entreg Entreg el Entreg el 40% aplique el uso de Listas. 100% de las todas las 60% de las de las Consultar el link: actividades interactividad interactividad interactividades http://www.slideshare.net/egpena/estruct propuestas es en un 80% es o fueras ura-de-datos-listas-pilas-y-colas-7075952 evidenciand de los y crear una gua explicativa en un blog. o el alcance tiempos Hacer un programa en C++ usando pilas, de los definidos colas o listas para registrar los vuelos y desempeo pasajeros de una aerolnea s de la unidad Participar en el foro Estructuras Particip en Particip en Particip en Particip en un dinmicas, acorde a las pautas, tiempos un 100% un 80% en el un 60% en el 40% en el foro y reglas fijadas con anterioridad por el en el foro foro foro debate publicado en la tutor. publicado publicado en publicado en plataforma, en en la la plataforma, la plataforma, algunas plataforma, con sus con algunos ocasiones contribuyen aportes comentarios do con excelentes ideas Cada equipo desarrolla un programa Cumpli con Cumpli con Cumpli con Cumpli con el permita realizar las funciones de el 100% de el 80% de la el 60% de la 40% de la insercin, eliminacin, bsqueda e la interactividad interactividad interactividad impresin de valores o datos o elementos interactivida omitiendo omitiendo 1 o omitiendo dos o
143
144
8.5 8.1
TEMTICAS Listas
La lista o lista enlazada es una coleccin conectada de nodos, cada uno de los cuales contiene algn dato, conectadas por enlaces de apuntador -de ah el trmino lista "enlazada". Se tiene acceso a una lista enlazada va un apuntador al primer nodo de la lista. Se puede tener acceso a los nodos subsecuentes va el apuntador de enlace almacenado en cada nodo. Por regla convencional, para marcar el fin de la lista, el apuntador de enlace, en el ltimo nodo de una lista, se define a NULL. En una lista enlazada los datos se almacenan dinmicamente -cada nodo se crea conforme sea necesario. Un nodo puede contener datos de cualquier tipo, incluyendo otras struct. Las pilas y las colas de espera tambin son estructuras lineales de datos, y como veremos, son versiones restringidas de listas enlazadas. Los rboles son estructuras no lineales de datos. (DEITEL & DEITEL, 1998) Las listas de datos pueden ser almacenadas en arreglos, es importante decir que hay varios tipos de listas: Simplemente enlazada, doblemente enlazada, circular simplemente enlazada, circular doblemente enlazada. Una lista enlazada tiene un conjunto de nodos, los cuales almacenan 2 tipos de informacin: El dato que contienen y un puntero al siguiente nodo en la lista. El ltimo nodo de la lista tiene como siguiente nodo el valor NULL. Entonces las listas enlazadas simples solo pueden ser recorridas en una direccin, apuntando al nodo siguiente, mas no a un nodo anterior. (Yabar Aizcorbe, 2009) Una lista enlazada es apropiada cuando no es predecible de inmediato el nmero de elementos de datos a representarse en la estructura. Las listas enlazadas son dinmicas, por lo que conforme sea necesario la longitud de una lista puede aumentar o disminuir. Por su parte, el tamao de un arreglo no puede ser modificado, porque la memoria del arreglo es asignada en tiempo de compilacin. Los arreglos pueden llenarse. Las listas enlazadas slo se llenan cuando el sistema no tiene suficiente memoria para satisfacer las solicitudes de asignacin dinmica de almacenamiento. (DEITEL & DEITEL, 1998) Las listas enlazadas pueden mantenerse en orden, insertando cada elemento nuevo en el punto apropiado dentro de la lista.
145
Una lista enlazada tiene punteros conectando cada nodo en direccin hacia la cola. Observemos este ejemplo:
HEAD
A continuacin se explica la creacin de un programa sencillo de lista en c++ (tomado de http://listaencpasoapaso.blogspot.com/ ) Lo primero que debemos hacer es declarar las dos librerias necesarias para el proposito=
#include<iostream> #include<stdlib.h>
luego se declara la estructura donde se guardan los nodos struct nodo{ int info; struct nodo *sgt; }; Luego ingresamos el cuerpo del programa con la funcin main(). Aqu se declaran los dos punteros que servirn en la creacion de los nodos: struct nodo *cabe; struct nodo *nuevo; Procedemos a declarar la cabeza como NULL cabe=NULL; Sugiero consulta este video http://www.youtube.com/watch? feature=player_embedded&v=5ZAaH1It19g para consultar las caractersticas de
146
// En la variable info guardaremos el contenido de los nodos. // El puntero siguiente sera para crear los nodos de la lista.
// este para la cabeza del nodo //este para los nuevos nodos que se creen.
la lista y funcin Null. Nota: si no declaras la cabeza del nodo como NULL posiblemente se generara un error en tiempo de ejecucin Ahora vamos a declarar tres variables tipo entero que nos ayudaran en la creacin de nodos. int dato; int i=1; int cant; // Esta variable para almacenar los datos que se le vallan a introducir a los nodos. //Esta es la variable del contador para crear los nodos. //Esta para la cantidad de nodos que el usuario desee.
Imprimimos un mensaje para pedir la cantidad de nodos que desea el usuario= cout<<"Entrar cantidad de nodos="; cin>>cant; Ya se haba declarado la variable "cant" que es la que nos permite saber cuntos nodos desea el usuario. El siguiente el proceso es el de mayor atencin. Iniciamos un ciclo while que depende de dos variables: i y cant anteriormente declaradas La variable cant es el final del ciclo por ejemplo si la variable cant contiene el valor de 5 entonces este ser el nmero de repeticiones del ciclo Con esta variable controlamos los nodos que se crean. while(i<=cant){ //Aqui se inicia el ciclo while. nuevo=(struct nodo *)malloc(sizeof(struct nodo)); nuevo nuevo->sgt=cabe; cout<<"Entre dato="; cin>>dato; nuevo->info=dato; cabe=nuevo; i++; } //Crea un nodo
nuevo=(struct nodo *)malloc(sizeof(struct nodo)); = esta lnea se usa para crear el nuevo nodo que vamos a usar en la primera vuelta del ciclo.
147
La parte de (struct nodo *)malloc(sizeof(struct nodo)) se usa para asignar memoria dinmicamente cuando se est ejecutando el programa. nuevo->sgt=cabe; Esta lnea asigna un nuevo valor al nodo cabeza. De esta forma crear dems nodos de forma ordenada. cout<<"Entre dato="; cin>>dato; Aqu solicitamos los datos que vamos a entrar en el nuevo nodo. nuevo->info=dato; La informacin pedida anteriormente se asigna a la variable "info" que contendr el valor del nodo nuevo. cabe=nuevo; aqui damos al apuntador cabeza la direccin de nuevo quedando as el apuntador cabeza que apuntaba a el nodo original, apuntando al nodo nuevo. Para imprimir en pantalla con la siguientes lneas. while(nuevo!=NULL){ //El apuntador nodo ira siguiendo los nodos ya para hasta encontrar NULL cout<<"\nDATO="<<nuevo->puntos; //Imprimimos los datos de cada nodo nuevo=nuevo->sgt; //Importante y no olivadar con esta sentencia corremos el apuntador al siguiente } //nodo system("pause>>null"); } El programa completo ser el siguiente: #include<iostream> #include<stdlib.h> using namespace std; //******************************* struct nodo{ int info; struct nodo *sgt; }; //************************************ main(){ struct nodo *cabe; struct nodo *nuevo; struct nodo *aux;
148
cabe=NULL; int dato; int cant, i=1, cont; cout<<"Entrar cantidad de nodos=";cin>>cant; while(i<=cant){ nuevo=(struct nodo *)malloc(sizeof(struct nodo)); nuevo->sgt=cabe; cout<<"Entre dato="; cin>>dato; nuevo->info=dato; cabe=nuevo; i++; } while(nuevo!=NULL){ cout<<"\nDATO="<<nuevo->info; nuevo=nuevo->sgt; } system("pause>>null"); }
PILAS Una pila es una versin restringida de una lista enlazada. A una pila se le pueden aadir y retirar nuevos nodos nicamente de su parte superior. Por esta razn, se conoce una pila como una estructura de datos como ltimas entradas, primeras salidas (LIFO por last-in, first-out). Se referencia una pila mediante un apuntador al elemento superior de la misma. El miembro de enlace en el ltimo nodo de la pila se define a NULL, para indicar que se trata de la parte inferior de la pila misma. (DEITEL & DEITEL, 1998) Tambin las pilas se conocen como stack ingls-, en esencia es una lista ordinal en la que el acceso a sus elementos es de tipo LIFO (del ingls Last In First Out, ltimo en entrar, primero en salir)- este concepto se aplica tanto para almacenar y recuperar datos- . La frecuencia de su uso en informtica se debe a la simplicidad y ordenacin implcita de su estructura. Las pilas son estructuras de datos lineales, como los vectores, ya que los componentes ocupan lugares sucesivos en la estructura y cada uno de ellos tiene un nico sucesor y un nico predecesor, con excepcin del ltimo y del primero, respectivamente.
149
Una pila se define formalmente como una coleccin de datos a los cuales se puede acceder mediante un extremo, que se conoce generalmente como tope (Web Design Services, 2011) Con la creacin de pilas se usa los conceptos de push y pop. Deitel nos definen estas dos funciones: Las funciones primarias utilizadas para manipular una pila son push y popo La funcin push crea un nuevo nodo y lo coloca en la parte superior de la pila. La funcin pop elimina un nodo de la parte superior de la pila, liberando la memoria que fue asignada al nodo retirado, y regresando el valor retirado (DEITEL & DEITEL, 1998). Ahora, a travs del siguiente ejemplotomado de (POZO, C++ con clase, 2002), se desea construir una pila para almacenar nmeros enteros. Algoritmo de la funcin "push": 1. Creamos un nodo para el valor que colocaremos en la pila. 2. Hacemos que nodo->siguiente apunte a Pila. 3. Hacemos que Pila apunte a nodo.
void Push(Pila *pila, int v) { pNodo nuevo; /* Crear un nodo nuevo */ nuevo = (pNodo)malloc(sizeof(tipoNodo)); nuevo->valor = v; /* Aadimos la pila a continuacin del nuevo nodo */ nuevo->siguiente = *pila; /* Ahora, el comienzo de nuestra pila es en nuevo nodo */ *pila = nuevo; }
Algoritmo de la funcin "pop": 1. Hacemos que nodo apunte al primer elemento de la pila, es decir a Pila. 2. Asignamos a Pila la direccin del segundo nodo de la pila: Pila>siguiente. 3. Guardamos el contenido del nodo para devolverlo como retorno, recuerda que la operacin pop equivale a leer y borrar. 4. Liberamos la memoria asignada al primer nodo, el que queremos eliminar.
int Pop(Pila *pila) { pNodo nodo; /* variable auxiliar para manipular nodo */ int v; /* variable auxiliar para retorno */ /* Nodo apunta al primer elemento de la pila */ nodo = *pila; if(!nodo) return 0; /* Si no hay nodos en pila retornamos 0 */ /* Asignamos a pila toda la pila menos el primer elemento */ *pila = nodo->siguiente;
150
Algoritmo de la funcin "push": 1. Creamos un nodo para el valor que colocaremos en la pila. 2. Hacemos que nodo->siguiente apunte a Pila. 3. Hacemos que Pila apunte a nodo.
void Push(Pila *pila, int v) { pNodo nuevo; /* Crear un nodo nuevo */ nuevo = (pNodo)malloc(sizeof(tipoNodo)); nuevo->valor = v; /* Aadimos la pila a continuacin del nuevo nodo */ nuevo->siguiente = *pila; /* Ahora, el comienzo de nuestra pila es en nuevo nodo */ *pila = nuevo;
151
return 0; } void Push(Pila *pila, int v) { pNodo nuevo; /* Crear un nodo nuevo */ nuevo = (pNodo)malloc(sizeof(tipoNodo)); nuevo->valor = v; /* Aadimos la pila a continuacin del nuevo nodo */ nuevo->siguiente = *pila; /* Ahora, el comienzo de nuestra pila es en nuevo nodo */ *pila = nuevo; } int Pop(Pila *pila) { pNodo nodo; /* variable auxiliar para manipular nodo */ int v; /* variable auxiliar para retorno */ /* Nodo apunta al primer elemento de la pila */ nodo = *pila; if(!nodo) return 0; /* Si no hay nodos en la pila retornamos 0 */ /* Asignamos a pila toda la pila menos el primer elemento */ *pila = nodo->siguiente; /* Guardamos el valor de retorno */ v = nodo->valor; /* Borrar el nodo */ free(nodo); return v; }
COLAS Una cola es un tipo especial de lista abierta en la que slo se pueden insertar nodos en uno de los extremos de la lista y slo se pueden eliminar nodos en el otro. Adems, como sucede con las pilas, las escrituras de datos siempre son inserciones de nodos, y las lecturas siempre eliminan el nodo ledo. Este tipo de lista es conocido como lista FIFO (First In First Out), el primero en entrar es el primero en salir. (POZO, C++ con clase, 2002) Una cola es una estructura lineal donde se introducen los datos por un extremo y los existentes se eliminan por el otro. Es importante resaltar que los elementos de la cola se eliminan en el mismo orden como se introducen, en otras palabras, el primer elemento que ingresa en la cola, ser el que se eliminar en primer orden. Por esta caracterstica reciben el nombre de FIFO (First-In, First-Out: el primero en entrar es el primero en salir).
152
Existen numerosos casos de la vida real en los cuales se usa este concepto. Ejemplo, la cola de los bancos en las que los clientes esperan para ser atendidos primera persona de la cola ser la primera en recibir el servicio, la cola de los que esperan a veces pacientemente para subir a un juego mecnico, las colas de vehculos esperando la luz verde del semforo, las colas para entrar a un cine, teatro o estadio de futbol, etctera. (Web Design Services, 2011) Las colas tienen muchas aplicaciones en sistemas de cmputo. Muchas computadoras tienen nicamente un solo procesador, de tal forma que slo un usuario puede ser servido a la vez. Las entradas de los dems usuarios son colocados en una cola. Cada entrada avanza en forma gradual hacia el frente de la cola, conforme los usuarios reciben servicio. La entrada que aparece en la parte delantera de la cola es la siguiente a recibir servicio. (DEITEL & DEITEL, 1998) 8.1.1 Cmo aadir y eliminar elementos en las colas Las operaciones a efectuarse con una cola son la de inserta y eliminar un elemento. El procedimiento de insercin se lleva a cabo por el FINAL de la cola, por el contrario, la supresin de elementos se harn por el FRENTE (primera posicin del elemento)- debe tenerse presente que el primero en entrar es el primero en salir. Ahora analicemos un algoritmo para insertar un elemento DATO al final de una estructura tipo cola. El siguiente ejemplo es tomado de (Web Design Services, 2011) FRENTE y FINAL son los punteros que indican, respectivamente, el inicio y fin de COLA. La primera vez FRENTE y FINAL tienen el valor 0, ya que la cola esta vaca. MAX es el mximo nmero de elementos que puede almacenar la cola.
1. Si (FINAL < MAX) Verifica que hay espacio libre entonces Hacer FINAL <- FINAL + 1 Actualiza FINAL} y COLA[FINAL] DATO 1.1 Si (FINAL = 1) entonces Se inserto el primer elemento de COLA Hacer FRENTE <- 1 1.2 Fin del condicional del paso 1.1 si no Escribir "Desbordamiento Cola llena"
153
2. Fin del condicional del paso 1 Tomando la misma fuente del ejemplo, se explica en el siguiente algoritmo la eliminacin de DATO en la COLA, (Web Design Services, 2011) Este algoritmo elimina el primer elemento de una estructura tipo cola y lo almacena en DATO. FRENTE y FINAL son los punteros que indican, respectivamente, el inicio y fin de la cola
1. Si (FRENTE 0) Verifica que la cola no este vaca entonces Hacer DATO COLA [FRENTE] 1.1 Si (FRENTE = FINAL) {Si hay un solo elemento} entonces Hacer FRENTE 0 y FINAL 0 Indica COLA vaca si no Hacer FRENTE FRENTE + 1 1.2 Fin del condicional del paso 1.1 si no Escribir "Subdesbordamiento Cola vaca" 2. Fin del condicional del paso 1
8.1.2
Acorde a los temas vistos en los tems anteriores se construir una cola para almacenar nmeros enteros. Se toma como referente el ejemplo de POZO (2002). Para aadir datos en la cola escribimos el siguiente cdigo:
void Anadir(pNodo *primero, pNodo *ultimo, int v) { pNodo nuevo; /* Crear un nodo nuevo */ nuevo = (pNodo)malloc(sizeof(tipoNodo)); nuevo->valor = v; /* Este ser el ltimo nodo, no debe tener siguiente */ nuevo->siguiente = NULL; /* Si la cola no estaba vaca, aadimos el nuevo a continuacin de ultimo */ if(*ultimo) (*ultimo)->siguiente = nuevo; /* Ahora, el ltimo elemento de la cola es el nuevo nodo */ *ultimo = nuevo; /* Si primero es NULL, la cola estaba vaca, ahora primero apuntar tambin al nuevo nodo */ if(!*primero) *primero = nuevo; }
154
{ pNodo nodo; /* variable auxiliar para manipular nodo */ int v; /* variable auxiliar para retorno */ /* Nodo apunta al primer elemento de la pila */ nodo = *primero; if(!nodo) return 0; /* Si no hay nodos en la pila retornamos 0 */ /* Asignamos a primero la direccin del segundo nodo */ *primero = nodo->siguiente; /* Guardamos el valor de retorno */ v = nodo->valor; /* Borrar el nodo */ free(nodo); /* Si la cola qued vaca, ultimo debe ser NULL tambin*/ if(!*primero) *ultimo = NULL; return v; }
155
/* Crear un nodo nuevo */ nuevo = (pNodo)malloc(sizeof(tipoNodo)); nuevo->valor = v; /* Este ser el ltimo nodo, no debe tener siguiente */ nuevo->siguiente = NULL; /* Si la cola no estaba vaca, aadimos el nuevo a continuacin de ultimo */ if(*ultimo) (*ultimo)->siguiente = nuevo; /* Ahora, el ltimo elemento de la cola es el nuevo nodo */ *ultimo = nuevo; /* Si primero es NULL, la cola estaba vaca, ahora primero apuntar tambin al nuevo nodo */ if(!*primero) *primero = nuevo; } int Leer(pNodo *primero, pNodo *ultimo) { pNodo nodo; /* variable auxiliar para manipular nodo */ int v; /* variable auxiliar para retorno */ /* Nodo apunta al primer elemento de la pila */ nodo = *primero; if(!nodo) return 0; /* Si no hay nodos en la pila retornamos 0 */ /* Asignamos a primero la direccin del segundo nodo */ *primero = nodo->siguiente; /* Guardamos el valor de retorno */ v = nodo->valor; /* Borrar el nodo */ free(nodo); /* Si la cola qued vaca, ultimo debe ser NULL tambin*/ if(!*primero) *ultimo = NULL; return v; }
8.6
INTERACTIVIDADES DE APRENDIZAJE Desarrollar un programa en c donde se aplique el uso de Listas. Compilar un programa en c++ usando pilas, que registre las aerolneas con vuelos nacionales (Empresa, id, aviones, vuelos) e imprima en pantalla la informacin. Cada equipo presenta un programa que apliquen los conceptos trabajados en este captulo. El docente tutor fija pautas, condiciones y criterios para esta actividad INTERACTIVIDAD INDIVIDUAL Consultar el captulo 12 del libro Cmo programar en C++ de Deitel & Deitel. Compilar un programa en c++ que haga uso de pilas.
8.2
156
8.3
INTERACTIVIDAD COLABORATIVA Aportar en el debate Programacin estructurada, acorde a las pautas, tiempos y reglas fijadas con anterioridad por el tutor. Participar en el debate publicado en la plataforma INTERACTIVIDAD DE APOYO Y COMPLEMENTARIA Compilar un programa en C++ que simule el ingreso, modificacin y anulacin de productos en la caja de un supermercado. RECURSOS 18. Capitulo 7 Punteros y capitulo 12 estructura de datos del libro de (DEITEL & DEITEL, 1998) 19. Capitulo 5 Punteros arrays y estructuras y capitulo 7 funciones del texto de (STROUSTRUP, 2001) 8. www.virtual.unal.edu.co/cursos/ingenieria/2001839/mod ulo1/cap_02/leccion103.htm 31. http://www.youtube.com/watch?v=i4ZATjVrQls 32. http://www.youtube.com/watch?v=OgX4vdtkkHQ 33. http://www.youtube.com/watch?v=lbSC5-MLrBg 34. http://polimedia.upv.es/visor/?id=3d3abe1a-8ef34d4f-aa30-025bc41d85bf
8.4
Lecturas Disciplinares
8.5
BIBLIOGRAFA
BECERRA, C. (1991). Lenguaje C para todos los niveles. Bogot: ARFO. DEITEL, H., & DEITEL, P. (1998). Como Programar en C/C++ (Segunda ed.). Prentice Hall. JOYANES, L., & RODRIGUEZ, L. (2003). FUNDAMENTOS DE PROGRAMACION. LIBRO DE PROBLEMAS (Tercera ed.). Madrid: McGraw-Hill. STROUSTRUP, B. (2001). El Lenguaje de Programacin C++. Madrid: ADDISONWESLEY. 8.6 CIBERGRAFA
GARCA, J., RODRGUEZ, J., & GOI, R. (28 de Abril de 2004). Tecnun. Recuperado el 10 de Diciembre de 2012, de Universidad de Navarra: http://www.tecnun.es/asignaturas/Informat1/AyudaInf/aprendainf/ansic/leng_ c.pdf
157
BUSTAMANTE, P., AGUINAGA, I., AYBAR, M., & OLAIZOLA, L. (01 de Junio de 2004). Tecnun. Recuperado el 10 de Diciembre de 2012, de http://www.tecnun.es/asignaturas/Informat1/AyudaInf/aprendainf/cpp/basico/ cppbasico.pdf POZO, S. (10 de Mayo de 2002). C++ con clase. Recuperado el 12 de Julio de 2013, de http://www.conclase.net/c/edd/ Web Design Services. (1 de Mayo de 2011). Recuperado el 12 de Julio de 2013, de http://nancynohemi.webuda.com/index.php? option=com_content&view=article&id=40&Itemid=41
158
8.7 AUTOEVALUACIN La autoevaluacin del estudiante sobre los temas trabajados en esta unidad, es entendida como el momento donde compara, analiza y valora la informacin y aprendizajes obtenidos teniendo como referentes los objetivos y desempeos alcanzados en cada una de las interactividades. Por tanto lo invitamos a desarrollar la siguiente matriz cualitativa Temtica
8.1 Listas
Que sabia
8.2
Pilas
8.3
Colas
159
8.8
GLOSARIO En informtica, una aplicacin es un tipo de programa informtico diseado como herramienta para permitir a un usuario realizar uno o diversos tipos de trabajos. Esto lo diferencia principalmente de otros tipos de programas como los sistemas operativos (que hacen funcionar al ordenador), las utilidades(que realizan tareas de mantenimiento o de uso general), y los lenguajes de programacin (con el cual se crean los programas informticos). Es una seal electrnica que puede estar encendida (1) o apagada (0). Es la unidad ms pequea de informacin que utiliza un ordenador. Es la unidad fundamental de datos en los ordenadores personales, un byte son ocho bits contiguos. El byte es tambin la unidad de medida bsica para memoria, almacenando el equivalente a un carcter El disco compacto (conocido popularmente como CD por las siglas en ingls de Compact Disc) es un soporte digital ptico utilizado para almacenar cualquier tipo de informacin (audio, imgenes, vdeo, documentos y otros datos) Es una aplicacin que tiene como premisa fundamental la Traduccin del lenguaje especfico de programacin (tambin conocido como Lenguaje de Alto Nivel) hacia otro que es solamente comprensible por el equipo, que se encargar de interpretarlo llevndolo a un sistema binario que se basa en la transmisin o notransmisin de energa elctrica (Lenguaje de Bajo Nivel)
Aplicacin
Bit
Byte
CD
Compilador
Computado Ordenador, mquina electrnica que trata automticamente la r informacin y que ejecuta procesos lgicos a gran velocidad. Abreviatura de Central Processing Unit (unidad de proceso central), se pronuncia como letras separadas. La CPU es el cerebro del ordenador. A veces es referido simplemente como el procesador o procesador central, la CPU es donde se producen la mayora de los clculos. Un disco duro o disco rgido (en ingls Hard Disk Drive, HDD) es un dispositivo de almacenamiento de datos no voltil que emplea un sistema de grabacin magntica para almacenar datos digitales. Pertenecen al grupo de las denominadas unidades SSD (siglas de Solid State Drive), o sea "unidades de estado slido". El DVD o Disco Verstil Digital por sus siglas en ingles Digital
160
CPU
Versatile Disc, es el nombre asignado al formato de disco ptico fsicamente similar a un CD. Un DVD se diferencia de un CD por su resistencia a cambios de temperatura y la forma de lectura de la informacin, adems en un DVD de dos caras se puede almacenar informacin por ambas caras y en distintas capas Hardware El hardware de un computador lo componen todas las partes fsicas y tangibles que componen todo el sistema que hace posible el funcionamiento del proceso de datos. Es un idioma artificial diseado para expresar procesos que pueden ser llevadas a cabo por mquinas como las computadoras. Pueden usarse para crear programas que controlen el comportamiento fsico y lgico de una mquina, para expresar algoritmos con precisin, o como modo de comunicacin humana. En informtica, dispositivo basado en circuitos que posibilitan el almacenamiento limitado de informacin y su posterior recuperacin. Un modelo es una representacin de un objeto, sistema o idea, de forma diferente al de la entidad misma. El propsito de los modelos es ayudarnos a explicar, entender o mejorar un sistema. Un modelo de un objeto puede ser una rplica exacta de ste o una abstraccin de las propiedades dominantes del objeto. se puede definir al trmino paradigma como la forma de visualizar e interpretar los mltiples conceptos, esquemas o modelos del comportamiento en todas las etapas de la humanidad en lo psicolgico y filosfico, que influyen en el desarrollo de las diferentes sociedades as como de las empresas, integradas e influenciadas por lo econmico, intelectual, tecnolgico, cientfico, cultural, artstico, y religioso Los perifricos son dispositivos electrnicos fsicos que permiten que la computadora interacte con el mundo exterior. Son considerados tambin perifricos los sistemas que almacenan o archivan la informacin. La Programacin es el proceso de disear, codificar, depurar y mantener el cdigo fuente de programas computacionales. El cdigo fuente es escrito en un lenguaje de programacin. Un protocolo es un conjunto de reglas usadas por computadoras para comunicarse unas con otras a travs de una red por medio de intercambio de mensajes. ste es una regla o estndar que controla o permite la comunicacin en su forma ms simple, puede ser definido como las reglas que dominan la sintaxis, semntica y sincronizacin de la comunicacin.
Lenguaje
Memoria
Modelo
Paradigma
Perifrico
Programaci n
Protocolo
161
RAM
Son las siglas de random access memory, un tipo de memoria de ordenador a la que se puede acceder aleatoriamente; es decir, se puede acceder a cualquier byte de memoria sin acceder a los bytes precedentes. La memoria RAM es el tipo de memoria ms comn en ordenadores y otros dispositivos como impresoras. La memoria de slo lectura, conocida tambin como ROM (acrnimo en ingls de read-only memory), es un medio de almacenamiento utilizado en ordenadores y dispositivos electrnicos, que permite slo la lectura de la informacin y no su escritura, es un software que acta de interfaz entre los dispositivos de hardware y los programas usados por el usuario Comprende el conjunto de los componentes lgicos necesarios que hacen posible la realizacin de tareas especficas, en contraposicin a los componentes fsicos, que son llamados hardware. Programa que se encarga de convertir el lenguaje de alto nivel en lenguaje mquina. El Universal Serial Bus (USB) (bus universal en serie BUS) es un estndar industrial desarrollado en los aos 1990 que define los cables, conectores y protocolos usados en un bus para conectar, comunicar y proveer de alimentacin elctrica entre computadores y perifricos y dispositivos electrnicos
ROM
USB
162
REFERENCIAS BIBLIOGRFICAS
Scribd. (26 de Julio de 2006). Recuperado el 10 de Diciembre de 2012, de http://es.scribd.com/doc/52944613/28/C-EL-ORIGEN-DE-C-COMOLENGUAJE-UNIVERSAL ACHURY, R. (14 de Marzo de 2004). Scribd. Recuperado el 10 de Noviembre de 2012, de http://es.scribd.com/doc/12390775/IntroducciOn-a-LaProgramacion-Algoritmos-y-Dfd BAOS, Y., & HERNNDEZ, A. (14 de Mayo de 2012). Universidad Autnoma del Estado de Hidalgo. Recuperado el 25 de Noviembre de 2012, de http://www.uaeh.edu.mx/docencia/P_Presentaciones/prepa1/algoritmos.pdf BECERRA, C. (1991). Lenguaje C para todos los niveles. Bogot: ARFO. BECERRA, C. (1997). Una Herramienta para la Programacin Orientada a Objetos (Tercera ed.). Bogot: Kimpres Ltda. BUSTAMANTE, P., AGUINAGA, I., AYBAR, M., & OLAIZOLA, L. (01 de Junio de 2004). Tecnun. Recuperado el 10 de Diciembre de 2012, de http://www.tecnun.es/asignaturas/Informat1/AyudaInf/aprendainf/cpp/basico/ cppbasico.pdf DEITEL, H., & DEITEL, P. (1998). Como Programar en C/C++ (Segunda ed.). Prentice Hall. Felleisen, M., & Findler, R. (2003, Septiembre 26). How to Design Programs: An Introduction to Computing and Programming . Retrieved Noviembre 24, 2012, from http://www.htdp.org/2003-09-26/Book/curriculum-Z-H-2.html Fundacin Wikimedia, Inc. (29 de Noviembre de 2012). Wikipedia. Recuperado el 1 de Diciembre de 2012, de http://es.wikipedia.org/wiki/Arquitectura_de_computadoras GARCA, J., RODRGUEZ, J., & GOI, R. (28 de Abril de 2004). Tecnun. Recuperado el 10 de Diciembre de 2012, de Universidad de Navarra: http://www.tecnun.es/asignaturas/Informat1/AyudaInf/aprendainf/ansic/leng_ c.pdf JOYANES, L., & RODRIGUEZ, L. (2003). FUNDAMENTOS DE PROGRAMACION. LIBRO DE PROBLEMAS (Tercera ed.). Madrid: McGraw-Hill. POZO, S. (10 de Mayo de 2002). C++ con clase. Recuperado el 12 de Julio de 2013, de http://www.conclase.net/c/edd/ POZO, S. (31 de Marzo de 2002). Departamento de Ciencias de la Computacin . Recuperado el 27 de Noviembre de 2012, de decsai.ugr.es/~jfv/ed1/c+ +/cursoCpp.pdf STROUSTRUP, B. (2001). El Lenguaje de Programacin C++. Madrid: ADDISONWESLEY. Universidad Tecnlogica Nacional. (24 de Marzo de 2003). Facultad Regional Rosario. Recuperado el 3 de Diciembre de 2012, de
163
http://www.frro.utn.edu.ar/repositorio/catedras/electrica/2_anio/fundamentos _informatica/apuntes/arquitectura/Tema1.pdf VARGAS, L. (22 de Junio de 2006). Olimpiada Mexicana de Informtica. Recuperado el 10 de Noviembre de 2012, de http://www.olimpiadadeinformatica.org.mx/archivos/apuntes/EstructurasDat os.pdf Web Design Services. (1 de Mayo de 2011). Recuperado el 12 de Julio de 2013, de http://nancynohemi.webuda.com/index.php? option=com_content&view=article&id=40&Itemid=41 Yabar Aizcorbe, R. (4 de Julio de 2009). Imaginemos un mundo libre. Recuperado el 10 de Julio de 2013, de http://ronnyml.wordpress.com/2009/07/04/listasenlazadas-clase-lista-en-c/
164