Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
Co py ri gh t © 2 00 0. D ig it al ia . Al l ri gh ts r es er ve d. M ay n ot b e re pr od uc ed i n an y fo rm w it ho ut p er mi ss io n fr om t he pu bl is he r, e xc ep t fa ir u se s pe rm it te d un de r U. S. o r ap pl ic ab le c op yr ig ht l aw . EBSCO Publishing : eBook Academic Collection (EBSCOhost) - printed on 1/27/2016 3:27 PM via UNIVERSIDAD ESTATAL A DISTANCIA AN: 318031 ; Llopis Pascual, Fernando, Perez Lopez, Ernesto, Ortuno Ortin, Fernando.; Introduccion a la programacion : algoritmos y C/C++ Account: s1093037 Fernando Ortuño Ortín INTRODUCCIÓN A LA PROGRAMACIÓN. ALGORITMOS Y C/C++ UNIVERSIDAD DE ALICANTE Fernando Llopis Pascual, Ernesto Pérez López Co py ri gh t © 2 00 0. D ig it al ia . Al l ri gh ts r es er ve d. M ay n ot b e re pr od uc ed i n an y fo rm w it ho ut p er mi ss io n fr om t he p ub li sh er , ex ce pt f ai r us es p er mi tt ed u nd er U .S . or ap pl ic ab le c op yr ig ht l aw . EBSCO Publishing : eBook Academic Collection (EBSCOhost) - printed on 1/27/2016 3:27 PM via UNIVERSIDAD ESTATAL A DISTANCIA AN: 318031 ; Llopis Pascual, Fernando, Perez Lopez, Ernesto, Ortuno Ortin, Fernando.; Introduccion a la programacion : algoritmos y C/C++ Account: s1093037 © Fernando Llopis Pascual, Ernesto Pérez López, Fernando Ortuño Ortín Publicaciones de la Universidad de Alicante I.S.B.N.: 84-7908-573-8 Depósito Legal: MU-1833-2000 Fotocomposición e impresión: Compobell, S.L. Murcia Diseño Gráfico: Alfredo Candela Ninguna parte de esta publicación puede ser reproducida, almacenada o transmitida en manera alguna o por ningún medio, ya sea eléctrico, químico, mecánico, óptico, de grabación o de fotocopia, sin permiso previo del editor.Co py ri gh t © 2 00 0. D ig it al ia . Al l ri gh ts r es er ve d. M ay n ot b e re pr od uc ed i n an y fo rm w it ho ut p er mi ss io n fr om t he p ub li sh er , ex ce pt f ai r us es p er mi tt ed u nd er U .S . or ap pl ic ab le c op yr ig ht l aw . EBSCO Publishing : eBook Academic Collection (EBSCOhost) - printed on 1/27/2016 3:27 PM via UNIVERSIDAD ESTATAL A DISTANCIA AN: 318031 ; Llopis Pascual, Fernando, Perez Lopez, Ernesto, Ortuno Ortin, Fernando.; Introduccion a la programacion : algoritmos y C/C++ Account: s1093037 ÍNDICE PROLOGO 7 1. INTRODUCCIÓN. COMPUTADORES Y PROGRAMAS 13 2. TIPOS DE DATOS ELEMENTALES 29 3. LENGUAJE ALGORÍTMICO. CONCEPTO DE PROGRAMA . 47 4. INTRODUCCIÓN AL LENGUAJE C++ 93 5. FUNCIONES BÁSICAS DE ENTRADA-SALIDA EN C++ ... 113 6. ESTRUCTURAS DE CONTROL 125 7. PROGRAMACIÓN MODULAR 157 8. ESTRUCTURAS DE DATOS I: VECTORES Y MATRICES ... 207 9. ESTRUCTURAS DE DATOS II: CADENAS DE CARACTERES 237 10. ESTRUCTURAS DE DATOS III: REGISTROS, UNIONES Y TIPOS ENUMERADOS 257 11. ESTRUCTURAS DE DATOS IV: FICHEROS 279 Co py ri gh t © 2 00 0. D ig it al ia . Al l ri gh ts r es er ve d. M ay n ot b e re pr od uc ed i n an y fo rm w it ho ut p er mi ss io n fr om t he p ub li sh er , ex ce pt f ai r us es p er mi tt ed u nd er U .S . or ap pl ic ab le c op yr ig ht l aw . EBSCO Publishing : eBook Academic Collection (EBSCOhost) - printed on 1/27/2016 3:27 PM via UNIVERSIDAD ESTATAL A DISTANCIA AN: 318031 ; Llopis Pascual, Fernando, Perez Lopez, Ernesto, Ortuno Ortin, Fernando.; Introduccion a la programacion : algoritmos y C/C++ Account: s1093037 6 Fernando Llopís Pascual, Ernesto Pérez López y Fernando Ortuño Ortín 12. ESTRUCTURAS DE DATOS V: ESTRUCTURAS DINÁMICAS 321 ANEXO I. ENTRADA Y SALIDAEN C 373 ANEXO H. COMPLEJIDAD DE UN ALGORITMO 381 BIBLIOGRAFÍA 397 Co py ri gh t © 2 00 0. D ig it al ia . Al l ri gh ts r es er ve d. M ay n ot b e re pr od uc ed i n an y fo rm w it ho ut p er mi ss io n fr om t he p ub li sh er , ex ce pt f ai r us es p er mi tt ed u nd er U .S . or ap pl ic ab le c op yr ig ht l aw . EBSCO Publishing : eBook Academic Collection (EBSCOhost) - printed on 1/27/2016 3:27 PM via UNIVERSIDAD ESTATAL A DISTANCIA AN: 318031 ; Llopis Pascual, Fernando, Perez Lopez, Ernesto, Ortuno Ortin, Fernando.; Introduccion a la programacion : algoritmos y C/C++ Account: s1093037 PROLOGO Es destacable la importancia que tienen, en la formación del alumno que cursa estudios en informática, las asignaturas de primer ciclo más relaciona- das con los temas de programación. Aunque la difusión de la informática ha aumentado en los últimos años, en la mayoría de los casos, estas asignaturas son la primera toma de contacto que el alumno tiene con la resolución de pro- blemas a través de la realización de programas. La enseñanza de la materia de las asignaturas introductorias a la progra- mación ha sufrido una evolución a lo largo del tiempo, determinada por el cambio que se ha producido en la tecnología informática. Es por ello, que el enfoque docente con que se debe abordar la enseñanza de dicha materia en un contexto universitario debe ser coherente con esta evolución. Existe un prin- cipio básico en este enfoque: «el objetivo de las asignaturas de primer ciclo, más relacionadas con temas de programación, es conseguir que el alumno alcance un cierto dominio en el desarrollo de programas, sea cual sea la mag- nitud de los mismos». Con el fin de alcanzar este objetivo, es necesario que el alumno sea capaz de: • Escribir programas en un tiempo razonable, que funcionen correcta- mente, que estén bien documentados y sean legibles. • Abordar eficazmente la división de los programas de gran magnitud en módulos y especificar adecuadamente los mismos. • Razonar sobre la corrección y eficiencia de las soluciones desarrolla- das y compararlas con distintas soluciones alternativas. • Identificar problemas desconocidos con familias de problemas conoci- dos y ser capaces de aplicar la solución algorítmica correspondiente. Co py ri gh t © 2 00 0. D ig it al ia . Al l ri gh ts r es er ve d. M ay n ot b e re pr od uc ed i n an y fo rm w it ho ut p er mi ss io n fr om t he p ub li sh er , ex ce pt f ai r us es p er mi tt ed u nd er U .S . or ap pl ic ab le c op yr ig ht l aw . EBSCO Publishing : eBook Academic Collection (EBSCOhost) - printed on 1/27/2016 3:27 PM via UNIVERSIDAD ESTATAL A DISTANCIA AN: 318031 ; Llopis Pascual, Fernando, Perez Lopez, Ernesto, Ortuno Ortin, Fernando.; Introduccion a la programacion : algoritmos y C/C++ Account: s1093037 Fernando Llopis Pascual, Ernesto Pérez López y Fernando Ortuño Ortín Además, el alumno debe darse cuenta del hecho de que programar no es sólo escribir programas que funcionen, sino conseguir que esos programas satisfagan otras características como puedan ser su claridad, modificabilidad, eficiencia, etc. Por ello se tratará que el alumno se de cuenta de lo erróneo de la frase: «... pero si el programa funciona y es suficiente». Además, es importante que la enseñanza universitaria de fundamentos de programación forme al alumno de tal forma que le prepare para el estudio crí- tico de cualquier lenguaje de programación, así como para la asimilación de los cambios futuros. Este planteamiento no implica en ningún caso que deba sacrificarse el aprendizaje y uso de lenguajes de programación concretos, sino que por el contrario este uso debe completar la formación teórica del alumno. El diseño de lenguajes de programación es un campo que evoluciona con- tinuamente. Los lenguajes nacen, envejecen y mueren [Pratt98], y por ello se debe evitar una excesiva dependencia de esta asignatura con respecto a algún lenguaje de programación en concreto, ésta debe plantearse de forma que un cambio del lenguaje de programación utilizado no afecte a los fundamentos de la propuesta para la asignatura. Evidentemente, tampoco se puede obviar el aprendizaje de lenguajes de programación, porque esto facilita la comprensión de muchos conceptos y además se ha de conseguir que los alumnos adquieran cierto nivel de progra- mación para estar preparados para las asignaturas del siguiente curso. Asíel planteamiento que se propone se basa en la introducción de una base teórica y genérica, para después pasar a estudiar lenguajes de programación en concreto. El primer bloque de estudio debe conseguir que el alumno apren- da a programar en general y por ello se estudiarán diferentes herramientas y técnicas independientes de los lenguajes de programación. El segundo bloque se centrará en la aplicación de los conceptos vistos en el primer bloque utili- zando lenguajes de programación. De entre los paradigmas de programación disponibles cabe comentar cuál podría ser el más adecuado para la iniciación a la programación. De los tres paradigmas de programación, imperativo, declarativo y orientado a objetos, realmente dos, ya que el tercero se puede aplicar tanto a lenguajes imperativos como declarativos, se ha seleccionado el imperativo por varios motivos. Princi- palmente debido a que consideramos más sencillo que el alumno comprenda los algoritmos como una secuencia ordenada de pasos, que permiten realizar una serie de tareas, porque es algo más natural a su conocimiento. Además los para- digmas declarativos y orientados a objetos son estudiados en otras asignaturas. No obstante, cabe indicar que han aparecido propuestas en las que se indi- ca que es más recomendable introducirse a la programación a través del modelo orientado a objetos [Arnold98]. Por otra parte hemos contrastado la 8 Co py ri gh t © 2 00 0. D ig it al ia . Al l ri gh ts r es er ve d. M ay n ot b e re pr od uc ed i n an y fo rm w it ho ut p er mi ss io n fr om t he p ub li sh er , ex ce pt f ai r us es p er mi tt ed u nd er U .S . or ap pl ic ab le c op yr ig ht l aw . EBSCO Publishing : eBook Academic Collection (EBSCOhost) - printed on 1/27/2016 3:27 PM via UNIVERSIDAD ESTATAL A DISTANCIA AN: 318031 ; Llopis Pascual, Fernando, Perez Lopez, Ernesto, Ortuno Ortin, Fernando.; Introduccion a la programacion : algoritmos y C/C++ Account: s1093037 Introducción a la programación. Algoritmos y C/C++ dificultad que tienen los alumnos de entender algunos de los conceptos de dicho modelo en la asignatura Programación Orientada a Objetos, pero quizá esto pueda ser debido a que el planteamiento es diferente, ya que en este caso se trata de estudiar la programación orientada a objetos cuando el alumno se ha acostumbrado a trabajar de forma procedural. Otra de las cuestiones más debatidas y que más controversias provoca en la enseñanza de la programación, es la elección del primer o primeros len- guajes de programación. Ello se puede comprobar al observar los diversos lenguajes de programación que se enseñan, o incluso a que su estudio no se realice en clases de teoría sino únicamente en las clases prácticas. En base a los objetivos propuestos los lenguajes de programación ideales deberían cumplir las siguientes características: • Ser un lenguaje de propósito general. • Debe facilitar los hábitos de programación estructurada y programa- ción modular. • Debe posibilitar al usuario la definición de tipos de datos adicionales. • Debe existir un estándar de dicho lenguaje. • Además sería recomendable que estuviera difundido, que existieran versiones de dicho lenguaje para los entornos más utilizados por los alumnos (Linux/Unix, Windows) y que sus requisitos mínimos de eje- cución no fuesen especialmente elevados. También es positivo que dis- pusiesen de suficiente documentación y bibliografía. La evolución y cambios que han sufrido los lenguajes de programación en la enseñanza han sido enormes. De hecho si miramos hacia atrás, no es extraño ver que lenguajes como el FORTRAN, COBOL y BASIC eran utilizados en asignaturas de programación en muchas universidades. Hoy en día, quizá sólo el FORTRAN se sigue utilizando en la Universidad en ámbitos muy concretos. Con respecto a los lenguajes introductorios, cabe indicar que el lenguaje Pascal ha sido el más utilizado, no obstante su uso hoy en día está empezan- do a decaer y su sustituto natural, el Modula-2 (o Modula-3) no ha consegui- do ni mucho menos ocupar su lugar. Pascal se diseñó para ser una herramienta para la enseñanza de conceptos de programación, no obstante herramientas basadas en lenguaje Pascal (más bien en Object Pascal la versión orientada a objetos de Pascal) tienen actual- mente una gran aceptación en la industria (Borland Delphi). Del lenguaje Pascal cabe decir que es un lenguaje sencillo de aprender, y facilita la adqui- sición de hábitos de programación estructurada y la comprensión de otros len- guajes de programación no tan sencillos. 9 Co py ri gh t © 2 00 0. D ig it al ia . Al l ri gh ts r es er ve d. M ay n ot b e re pr od uc ed i n an y fo rm w it ho ut p er mi ss io n fr om t he p ub li sh er , ex ce pt f ai r us es p er mi tt ed u nd er U .S . or ap pl ic ab le c op yr ig ht l aw . EBSCO Publishing : eBook Academic Collection (EBSCOhost) - printed on 1/27/2016 3:27 PM via UNIVERSIDAD ESTATAL A DISTANCIA AN: 318031 ; Llopis Pascual, Fernando, Perez Lopez, Ernesto, Ortuno Ortin, Fernando.; Introduccion a la programacion : algoritmos y C/C++ Account: s1093037 Fernando Llopis Pascual, Ernesto Pérez López y Fernando Ortuño Ortín Quizá los mayores defectos de Pascal son: • No disponer del concepto de módulos compilados de forma indepen- diente, problema ya resuelto en Modula-2. • El lugar donde se deben definir las variables del programa principal, tan alejadas de su código y que pueden ser utilizadas como variables globales por las funciones y procedimientos que se declaran a conti- nuación. • Pascal standard en cierta forma ha sido absorbido por el estándar de hecho, el Turbo-Pascal, tanto es así que hay más libros disponibles de Turbo-Pascal que de Pascal y algunos compiladores de Pascal han asu- mido algunas de las especificaciones del Turbo-Pascal. • Otro de los problemas que tiene Pascal, es que difícilmente puede seguir siendo utilizado en otras asignaturas de cursos superiores, como Tipos Abstractos de Datos o Programación orientada a Objetos. En algunas Universidades se ha optado por el lenguaje C. De C cabe decir muchas cosas, sobre todo que es un lenguaje que no deja indiferente. Sus detractores dicen de él que es un lenguaje difícil de entender y que dificulta la utilización de la programación estructurada. Sobre el primer aspecto cabe indicar que estoy de acuerdo parcialmente con él, creo que es tan fácil o difí- cil de entender como el Pascal, exceptuando un aspecto que ciertamente com- plica mucho su comprensión, como es la gestión de los parámetros por valor y por referencia y la utilización en algunos comandos de la variable o de la dirección de la variable. Es este aspecto el que pienso que crea cierta frustra- ción en los alumnos, y se desmoralizan al no saber claramente cuando deben colocar los símbolos & y * delante de cada variable. Por otro lado, cabe des- tacar que C tiene la ventaja de disponer una continuación o mejora del mis- mo, C++, C orientado a objetos, que puede ser utilizada en cursos posteriores. Cuando hablamos de futuro, cabe hablar de dos lenguajes de programa- ción, Ada y Java. Ada es un buen lenguaje de programación, que cubre muchos de los requisitos solicitados, pero tiene una complejidad que lo aleja de lo recomendable en un curso de iniciación y además está poco difundido y se dispone de poca bibliografía sobre él. Su viabilidad dependerá de la acep- tación del nuevo estándar Ada95. Java es un lenguaje de tercera generación con características de programación orientada a objetos, multiplataforma, y especialmente preparado para el desarrollo de aplicaciones en Internet. Java está basado en gran medida en el C++, pero con una gestión de memoria menos propensa a errores de programación. No obstante, Java tiene una efi- ciencia considerablemente menor que el C++, debido a ser un lenguaje Ínter- 10 Co py ri gh t © 2 00 0. D ig it al ia . Al l ri gh ts r es er ve d. M ay n ot b e re pr od uc ed i n an y fo rm w it ho ut p er mi ss io n from t he p ub li sh er , ex ce pt f ai r us es p er mi tt ed u nd er U .S . or ap pl ic ab le c op yr ig ht l aw . EBSCO Publishing : eBook Academic Collection (EBSCOhost) - printed on 1/27/2016 3:27 PM via UNIVERSIDAD ESTATAL A DISTANCIA AN: 318031 ; Llopis Pascual, Fernando, Perez Lopez, Ernesto, Ortuno Ortin, Fernando.; Introduccion a la programacion : algoritmos y C/C++ Account: s1093037 Introducción a la programación. Algoritmos y C/C++ 11 pretado o seudointerpretado. Su popularidad ha experimentado un gran creci- miento en los últimos años, de hecho hay propuestas que lo tratan como un buen lenguaje introductorio a la programación [Arnold98]. Nosotros hemos seleccionado como lenguaje de programación el C++ ya que tiene una serie de ventajas sobre los lenguajes ya comentados, por un lado asume las ventajas del lenguaje C y disminuye sus inconvenientes en los aspectos más complicados tales como la gestión de parámetros, asemejándo- se más a Pascal en este aspecto, así como ofrece una serie de mejoras que lo hacen más sencillo de utilizar que el C, en aspectos tales como la entrada/sali- da, definición de tipos, gestión de memoria dinámica... Por otra parte, permi- te no trabajar obligatoriamente en programación orientado a objetos entendida como tal. De hecho lo que se va a estudiar del lenguaje C++ va a ser realmente un C++ -00, es decir un lenguaje C «mejorado». La estructura del libro es la siguiente: • Los primeros tres capítulos se dedican a ver nociones generales de los fundamentos de la programación, empezando por explicar los concep- tos de programación utilizando un lenguaje algorítmico, en castellano, del cual disponemos de una versión ejecutable que permitirá al alumno el desarrollo y posterior prueba de los algoritmos que desarrolle. Tam- bién se estudian otras formas de representación de algoritmos. • Los siguientes 9 capítulos se dedican a ofrecer una visión del lenguaje de programación C++, pero sin incidir en los conceptos de programa- ción orientada a objetos. Este estudio engloba los conceptos de progra- mación así como las estructuras principales que permite este lenguaje, comentando cual es la forma más adecuada de utilizarlas y los errores más frecuentes que los programadores de C/C++ cometen. • Por último hemos incluido dos anexos que hemos considerado de inte- rés, el primero detalla las funciones de entrada/salida del C, ya que en los temas propiamente dichos se comentan las de C++. El segundo ane- xo contiene una pequeña introducción al concepto de complejidad de un programa y a la importancia que éste tiene. Por último destacar que el libro contiene multitud de ejercicios resueltos, muchos de los cuales han sido extraídos de los enunciados de los exámenes de la asignatura Fundamentos de Programación que se han realizado en los últimos años. Los autores Co py ri gh t © 2 00 0. D ig it al ia . Al l ri gh ts r es er ve d. M ay n ot b e re pr od uc ed i n an y fo rm w it ho ut p er mi ss io n fr om t he p ub li sh er , ex ce pt f ai r us es p er mi tt ed u nd er U .S . or ap pl ic ab le c op yr ig ht l aw . EBSCO Publishing : eBook Academic Collection (EBSCOhost) - printed on 1/27/2016 3:27 PM via UNIVERSIDAD ESTATAL A DISTANCIA AN: 318031 ; Llopis Pascual, Fernando, Perez Lopez, Ernesto, Ortuno Ortin, Fernando.; Introduccion a la programacion : algoritmos y C/C++ Account: s1093037 This page intentionally left blank Co py ri gh t © 2 00 0. D ig it al ia . Al l ri gh ts r es er ve d. M ay n ot b e re pr od uc ed i n an y fo rm w it ho ut p er mi ss io n fr om t he p ub li sh er , ex ce pt f ai r us es p er mi tt ed u nd er U .S . or ap pl ic ab le c op yr ig ht l aw . EBSCO Publishing : eBook Academic Collection (EBSCOhost) - printed on 1/27/2016 3:27 PM via UNIVERSIDAD ESTATAL A DISTANCIA AN: 318031 ; Llopis Pascual, Fernando, Perez Lopez, Ernesto, Ortuno Ortin, Fernando.; Introduccion a la programacion : algoritmos y C/C++ Account: s1093037 1. INTRODUCCIÓN. COMPUTADORES Y PROGRAMAS 1.1. Informática: Definición Una de las mayores paradojas con las que se puede encontrar una perso- na encargada de explicar una disciplina es la de tener que buscar definicio- nes a muchos de los temas que va a tratar. En nuestro caso el problema se complica al máximo, pues la palabra informática era desconocida hace rela- tivamente pocos años, este nombre fue inventado para sustituir al inglés «Computer Science», con el objeto de enfatizar la información como objeto de esta nueva ciencia frente a la máquina que la manipula, el computador. La Informática, término francés proveniente de la contracción de las pala- bras «information» y «automatique», se ocupa, como ambas palabras indican, del tratamiento automático de la información. La información podemos definirla como el conjunto de datos necesarios para plantear y resolver cualquier problema. Según Charles Babbage, las tareas básicas para el tratamiento automático de la información son: • Entrada de datos • Tratamiento o proceso de los mismos • Salida de resultados Dicho tratamiento se realiza mediante una herramienta que ha recibido diversos apelativos: ordenador (traducción de la palabra francesa «ordina- teun>), computador (traducción del término inglés «computer»), etc. y deberá estar compuesta de unidades especializadas, capaces de realizar automática- mente las tareas citadas. Co py ri gh t © 2 00 0. D ig it al ia . Al l ri gh ts r es er ve d. M ay n ot b e re pr od uc ed i n an y fo rm w it ho ut p er mi ss io n fr om t he p ub li sh er , ex ce pt f ai r us es p er mi tt ed u nd er U .S . or ap pl ic ab le c op yr ig ht l aw . EBSCO Publishing : eBook Academic Collection (EBSCOhost) - printed on 1/27/2016 3:27 PM via UNIVERSIDAD ESTATAL A DISTANCIA AN: 318031 ; Llopis Pascual, Fernando, Perez Lopez, Ernesto, Ortuno Ortin, Fernando.; Introduccion a la programacion : algoritmos y C/C++ Account: s1093037 14 Fernando Llopis Pascual, Ernesto Pérez López y Fernando Ortuño Ortín 1.2. Computadores u ordenadores Un ordenador es un dispositivo capaz de ejecutar cálculos y tomar deci- siones lógicas a velocidades mucho más elevadas que un ser humano. Un ordenador se encarga del proceso de una serie de datos bajo el control de un conjunto de instrucciones o programa de ordenador. Para ello un ordenador dispone de los siguientes componentes: Computador Elementos Periféricos Dispositivos de Entrada Dispositivos de Salida Dispositivos de Almacenamiento f Unidad de Procesamiento Unidad Central de Proceso i [ Memoria Central •Dispositivos de Entrada: permiten que la computadora reciba datos del mundo exterior; por ejemplo, teclado, ratón, lápiz óptico, etc. •Dispositivos de Salida: permiten a la computadora enviar datos al mundo exterior; por ejemplo, pantallas de tubos de rayos catódicos (CRT), impresoras, altavoces. •Memoria Central: encargada de memorizar la información que se introduzca en la máquina, distinguiendo entre datos (o parte de la infor- mación que va a manipular la máquina) y el conjunto de instrucciones (que indican a la máquina lo que debe hacer con los datos). •Memoria Central: encargada de memorizar la información que seUnidad de Procesamiento: realiza el cómputo y la transformación de datos. •Memoria Central: encargada de memorizar la información que seUnidad de Procesamiento: realiza el cómputo y la transformación deDispositivos de Almacenamiento: guarda los datos para su uso posterior. Entrada Unidad Central de Proceso Salida Almacenamiento (Memoria Externa) Co py ri gh t © 2 00 0. D ig it al ia . Al l ri gh ts r es er ve d. M ay n ot b e re pr od uc ed i n an y fo rm w it ho ut p er mi ss io n fr om t he p ub li sh er , ex ce pt f ai r us es p er mi tt ed u nd er U .S . or ap pl ic ab le c op yr ig ht l aw . EBSCO Publishing : eBook Academic Collection (EBSCOhost) - printed on 1/27/2016 3:27 PM via UNIVERSIDAD ESTATAL A DISTANCIA AN: 318031 ; LlopisPascual, Fernando, Perez Lopez, Ernesto, Ortuno Ortin, Fernando.; Introduccion a la programacion : algoritmos y C/C++ Account: s1093037 Introducción a la programación. Algoritmos y C/C++ 15 1.3. Evolución de los ordenadores Procesamiento por lotes. Los primeros ordenadores solo podían ejecutar un trabajo a la vez de forma secuencial. Multiprogramación. Permite que diferentes trabajos pudieran compartir los diferentes recursos del ordenador de forma simultánea. Tiempo compartido. Es un caso especial de multiprogramación, a través del cual varios usuarios tienen acceso al ordenador simultáneamente a través de varios dispositivos de E/S (terminales). Ordenadores personales. Los ordenadores se hicieron lo suficientemen- te económicos para popularizar su uso en la industria. Redes de ordenadores. Varios ordenadores enlazados entre ellos, de for- ma que pudieran compartir sus recursos. Cliente/Servidor. Red en la cual un ordenador principal almacena los pro- gramas y los datos que se utilizan en una serie de ordenadores, normalmente menos potentes. 1.4. Programación del ordenador Los ordenadores sólo saben realizar un cierto número de operaciones ele- mentales, pero para procesar una información necesitan tener almacenadas en memoria unas instrucciones muy precisas y exactas que le indiquen en cada momento que operación ha de hacer. Este conjunto de instrucciones necesarias para resolver un problema, orde- nadas en una secuencia adecuada, es lo que se llama programa. Podemos pues, definir un programa como un conjunto ordenado de ins- trucciones que guían a la computadora para que realice una tarea específica a través de sus operaciones. El programa, por tanto, indica a la máquina: — lo que debe hacer, — en qué orden debe hacerlo y — con qué datos ha de trabajar El programa puede encontrarse en forma directamente asimilable para la computadora (lenguaje máquina) o puede requerir de una traducción hecha por otros programas antes de ser utilizado (lenguaje de alto nivel). Cuando nos referimos a los programas en general hablamos de software. Lo que un ordenador sea capaz de hacer dependerá, no sólo, del hardware, sino también del software. Digamos que si el primero es la máquina, la parte física, Co py ri gh t © 2 00 0. D ig it al ia . Al l ri gh ts r es er ve d. M ay n ot b e re pr od uc ed i n an y fo rm w it ho ut p er mi ss io n fr om t he p ub li sh er , ex ce pt f ai r us es p er mi tt ed u nd er U .S . or ap pl ic ab le c op yr ig ht l aw . EBSCO Publishing : eBook Academic Collection (EBSCOhost) - printed on 1/27/2016 3:27 PM via UNIVERSIDAD ESTATAL A DISTANCIA AN: 318031 ; Llopis Pascual, Fernando, Perez Lopez, Ernesto, Ortuno Ortin, Fernando.; Introduccion a la programacion : algoritmos y C/C++ Account: s1093037 16 Fernando Llopis Pascual, Ernesto Pérez López y Fernando Ortuño Ortín y representa la fuerza, el segundo es la inteligencia, la parte lógica, parte inma- terial o modificable de los sistemas, de ahí su apelativo de soft (blando). Hay que distinguir entre el Software Básico o Sistema Operativo, necesa- rio para gestionar el ordenador, y el Software de Usuario o conjunto de pro- gramas que realiza el usuario para resolver problemas. El software, y más concretamente como desarrollar correctamente softwa- re de usuario, es el objetivo de esta asignatura. 1.5. Representación de la información En el tratamiento de la información hay un aspecto de especial importan- cia: la forma de representar la misma en el ordenador. Para que la información sea inteligible para el ordenador hemos de repre- sentarla de una forma diferente a nuestra forma natural de escritura, para ello, codificaremos la información utilizando un conjunto de reglas. Toda la información empleada por los ordenadores está codificada, exis- tiendo distintos códigos, pero todos ellos basados en la denominada codifica- ción binaria o sistema binario (base 2), en el cual únicamente existen dos símbolos: los dígitos O y 1. La razón para emplear esta codificación binaria es que todos los dispositi- vos del ordenador, y todos los medios de almacenamiento de datos, están basados fundamentalmente en el empleo de componentes electrónicos biesta- bles, es decir, que sólo poseen dos estados posibles. Impulsos Eléctricos Releo Interruptor Válvula o Transistor Estado O Estado 1 Esta dualidad de estados parece recomendar un sistema binario para la representación de la información. Umversalmente se adopta el siguiente criterio: se representa la presencia de una señal por el símbolo 1 y la ausencia de la misma por 0. Un dígito binario (binary digit) se denomina bit, y es la unidad de infor- mación mínima representable en un ordenador, pues la memoria central está formada por millones de pequeños circuitos que sólo son capaces de memo- rizar una cosa: si hay o no carga eléctrica. Co py ri gh t © 2 00 0. D ig it al ia . Al l ri gh ts r es er ve d. M ay n ot b e re pr od uc ed i n an y fo rm w it ho ut p er mi ss io n fr om t he p ub li sh er , ex ce pt f ai r us es p er mi tt ed u nd er U .S . or ap pl ic ab le c op yr ig ht l aw . EBSCO Publishing : eBook Academic Collection (EBSCOhost) - printed on 1/27/2016 3:27 PM via UNIVERSIDAD ESTATAL A DISTANCIA AN: 318031 ; Llopis Pascual, Fernando, Perez Lopez, Ernesto, Ortuno Ortin, Fernando.; Introduccion a la programacion : algoritmos y C/C++ Account: s1093037 Introducción a la programación. Algoritmos y C/C++ 17 El bit es una unidad de datos demasiado pequeña, por lo que normalmen- te los bits se manejan en grupo. Los bytes y las palabras son las formas más comunes de agruparlos. Un byte está constituido por 8 bits, con los cuales podemos hacer hasta 28=256 combinaciones o representaciones diferentes. Una palabra es una agrupación de 8, 16, 24, 32 ó 64 bits, su tamaño depende del modelo del ordenador. Este conjunto de bits puede ser manipu- lado en una sola operación. En los procesadores, los registros que almacenan los datos tienen el tamaño de una palabra. El conjunto de caracteres codificable en un ordenador se denomina juego de caracteres, y está compuesto por: — letras o caracteres alfabéticos — dígitos o caracteres numéricos — caracteres especiales y de puntuación — caracteres de control. Cada carácter se podrá representar utilizando un byte, mediante alguna de sus múltiples combinaciones de bits. Una vez que la información está codificada diremos que está en el len- guaje de la máquina. Un código de caracteres muy conocido es el American Standard Codefor Information Interchange (ASCII). Los usuarios no necesitan conocer el código de caracteres utilizado por el ordenador, puesto que la información se introduce en forma alfabética y numérica decimal y se extrae de la misma forma, existiendo unos dispositivos especiales encargados de codificarla al código binario que corresponda, a la entrada, y decodificarla a la salida. 1.6. Evolución de los lenguajes de programación La «historia» de los lenguajes de programación puede ser dividida en cua- tro, o cinco según otros autores, generaciones. Las tres primeras generaciones siguen una sucesión en el tiempo, mientras que la cuarta y la quinta han ido evolucionado de forma paralela. 1.6.1. Lenguajes de bajo nivel. Primera generación de lenguajes La tecnología de ordenadores más antigua se sitúa en los años previos a la Segunda Guerra Mundial. Estas máquinas tenían como objetivo la resolución Co py ri gh t © 2 00 0. D ig it al ia . Al l ri gh ts r es er ve d. M ay n ot b e re pr od uc ed i n an y fo rm w it ho ut p er mi ss io n fr om t he p ub li sh er , ex ce pt f ai r us es p er mi tt ed u nd er U .S . or ap pl ic ab le c op yr ig ht l aw . EBSCO Publishing : eBook Academic Collection (EBSCOhost) - printed on 1/27/2016 3:27 PM via UNIVERSIDAD ESTATAL A DISTANCIA AN: 318031 ; Llopis Pascual, Fernando, Perez Lopez, Ernesto, Ortuno Ortin, Fernando.; Introduccion a la programacion : algoritmos y C/C++ Account: s109303718 Fernando Llopis Pascual, Ernesto Pérez López y Fernando Ortuño Ortín de problemas numéricos, por ello básicamente se les consideraba calculado- ras electrónicas. Los lenguajes que formaron parte de esta generación fueron el lenguaje máquina y el lenguaje ensamblador. Se entiende por: — Instrucción, una cadena de unos y ceros que permiten al procesador reconocer una operación elemental y ejecutarla. — Lenguaje de máquina, el conjunto de instrucciones que puede ejecutar el procesador y las reglas para su codificación. Lenguaje máquina Utiliza una notación binaria. Consta de un número limitado de instruccio- nes, teniendo cada una un código de operación y una o varias direcciones de memoria central, donde están ubicados los operandos y el resultado, codifi- cados, por supuesto, en binario. Veamos un ejemplo de lenguaje máquina sencillo, basado en un ordenador imaginario: Código 001 010 Ol1 100 101 110 111 Operación Cargar Sumar Restar Bifurcar Comparar Almacenar Parar Para realizar un programa, en lenguaje máquina, hay que hacer las siguien- tes etapas: 1. Descomponer el tratamiento del problema en operaciones elementales de la máquina. 2. Asignar un lugar en la memoria central para cada instrucción, cada dato y cada resultado. 3. Codificar cada instrucción como una serie de dígitos binarios, de acuerdo a la tabla de instrucciones de máquina del procesador, y tam- bién codificar los datos en el sistema binario.Co py ri gh t © 2 00 0. D ig it al ia . Al l ri gh ts r es er ve d. M ay n ot b e re pr od uc ed i n an y fo rm w it ho ut p er mi ss io n fr om t he p ub li sh er , ex ce pt f ai r us es p er mi tt ed u nd er U .S . or ap pl ic ab le c op yr ig ht l aw . EBSCO Publishing : eBook Academic Collection (EBSCOhost) - printed on 1/27/2016 3:27 PM via UNIVERSIDAD ESTATAL A DISTANCIA AN: 318031 ; Llopis Pascual, Fernando, Perez Lopez, Ernesto, Ortuno Ortin, Fernando.; Introduccion a la programacion : algoritmos y C/C++ Account: s1093037 Introducción a la programación. Algoritmos y C/C++ 19 Por ejemplo, el siguiente programa, en lenguaje máquina, resta un núme- ro de otro y el resultado lo almacena en una posición de memoria. Memoria Central Dirección Contenido 0 1 2 3 4 5 6 7 8 00000 00001 00010 00011 00100 00101 00110 00111 01000 00100101 01100110 11000100 11100000 00000000 00000111 00000010 00000000 00000000 — _ programa — datos — memoria libre Este modo de programación, directamente en lenguaje máquina, fue el pri- mero que se utilizó, y presenta las siguientes características. • Las instrucciones en lenguaje máquina están influenciadas por la arqui- tectura del ordenador en cuestión, existiendo una instrucción en len- guaje máquina por cada operación que realiza directamente el hardware del ordenador. Esto significa: — que hay que conocer detalladamente el funcionamiento del ordena- dor, y lo que ocurre exactamente en cada operación, o sea, que es dependiente del hardware. — que cada tipo de procesador tiene su propio lenguaje, cambiar de ordenador significa tener que volver a realizar los programas, es decir, que no es portable. • La tercera etapa de programación es mecánica y tediosa, siendo eleva- do el riesgo de cometer errores, pues es fácil cambiar un O por un 1. Además los programas se convierten en algo prácticamente indescifra- ble, incluso para su propio autor, y por supuesto incomunicables para otro programador. • En definitiva, el hombre se convierte en esclavo de la máquina, pues debe adaptarse a las características de la misma. Es fácil ver lo complicado y tedioso que resulta programar en lenguaje máquina, para evitar, en la medida de lo posible, estas dificultades se crearon los lenguajes ensambladores.Co py ri gh t © 2 00 0. D ig it al ia . Al l ri gh ts r es er ve d. M ay n ot b e re pr od uc ed i n an y fo rm w it ho ut p er mi ss io n fr om t he p ub li sh er , ex ce pt f ai r us es p er mi tt ed u nd er U .S . or ap pl ic ab le c op yr ig ht l aw . EBSCO Publishing : eBook Academic Collection (EBSCOhost) - printed on 1/27/2016 3:27 PM via UNIVERSIDAD ESTATAL A DISTANCIA AN: 318031 ; Llopis Pascual, Fernando, Perez Lopez, Ernesto, Ortuno Ortin, Fernando.; Introduccion a la programacion : algoritmos y C/C++ Account: s1093037 20 Fernando Llopis Pascual, Ernesto Pérez López y Fernando Ortuño Ortín Lenguaje ensamblador Introdujo el direccionamiento simbólico de instrucciones y direcciones, facilitando la programación. La misión de un ensamblador es la de simplificar la programación de un determinado ordenador, manteniendo un control directo del hardware del mis- mo, por lo que cada tipo de ordenador tiene su propio ensamblador, que no está demasiado lejos del código máquina. Veamos sus características: • Uso de abreviaturas o nemotécnicos para representar los códigos de operaciones de las instrucciones. El ensamblador incluye un conjun- to de instrucciones que guarda una relación biunívoca con las ins- trucciones del código máquina. En otras palabras, para cada una de las instrucciones en código máquina existe una instrucción en ensam- blador. Para el lenguaje máquina de nuestro ejemplo, podemos definir las siguien- tes equivalencias: Código 001 010 Ol1 100 101 110 111 Abreviatura CAR ALM SUM RES BC BNC PAR Operación Cargar Almacenar Sumar Restar Bifurcar si es cero Bifurcar si no es cero Parar •Uso de direccionamiento simbólico, según esto las direcciones de memoria se representan por símbolos, y se definen al escribir el pro- grama como un grupo de caracteres o etiquetas escritas a la izquierda de las instrucciones. Estas etiquetas serán las direcciones simbólicas que representan las posiciones en memoria de una instrucción o un dato. •Conversión automática de datos, de forma que podemos utilizar la notación decimal, en vez de la representación binaria, para la escritura de los mismos.Co py ri gh t © 2 00 0. D ig it al ia . Al l ri gh ts r es er ve d. M ay n ot b e re pr od uc ed i n an y fo rm w it ho ut p er mi ss io n fr om t he p ub li sh er , ex ce pt f ai r us es p er mi tt ed u nd er U .S . or ap pl ic ab le c op yr ig ht l aw . EBSCO Publishing : eBook Academic Collection (EBSCOhost) - printed on 1/27/2016 3:27 PM via UNIVERSIDAD ESTATAL A DISTANCIA AN: 318031 ; Llopis Pascual, Fernando, Perez Lopez, Ernesto, Ortuno Ortin, Fernando.; Introduccion a la programacion : algoritmos y C/C++ Account: s1093037 Introducción a la programación. Algoritmos y C/C+ + El ejemplo anterior resuelto en lenguaje ensamblador sería: C: A: B: A B C Veamos que ventajas hemos conseguido: • El uso de símbolos nemotécnicos para las instrucciones permite escri- bir y leer con mayor facilidad los programas. • El programador no tiene que preocuparse durante la confección del programa de las direcciones a las que hace referencia, pues gracias al uso de etiquetas será el ordenador el que calcule posteriormente esas direcciones en memoria. Además, queda resuelto el problema que se planteaba cuando se insertaba o eliminaba una instrucción en el pro- grama, pues al estar trabajando con direcciones absolutas de memoria, esto hacía que casi todas las direcciones resultasen incorrectas después de insertar o eliminar una instrucción. • Ahora bien, como la unidad de control sólo puede interpretar las ins- trucciones almacenadas en binario en la memoria, es necesario traducir a lenguaje máquina cualquier programa escrito en lenguaje ensambla- dor, para que éste se pueda ejecutar. La correspondencia directa entre los elementos del lenguaje máquina y los del lenguaje ensamblador posibilita la traducción automática por el propio ordenador. El proceso de traducción, llamado ensamblaje se realiza mediante un programa llamado ensamblador. Esta traducción automática hace algunas verificaciones sobre el programa, detecta códigos nemotécnicos de operaciones inexistentes para la máquina y direcciones simbólicasno definidas. Además evita errores de escritura en binario. Un ensamblador es un programa que lee, como datos de entrada, un pro- grama escrito en lenguaje ensamblador y produce, como resultado, un pro- grama en lenguaje máquina, detectando e informando de los errores encontrados durante el proceso de traducción. 21 LOAD SUB STR STOP 0 7 2 Co py ri gh t © 2 00 0. D ig it al ia . Al l ri gh ts r es er ve d. M ay n ot b e re pr od uc ed i n an y fo rm w it ho ut p er mi ss io n fr om t he p ub li sh er , ex ce pt f ai r us es p er mi tt ed u nd er U .S . or ap pl ic ab le c op yr ig ht l aw . EBSCO Publishing : eBook Academic Collection (EBSCOhost) - printed on 1/27/2016 3:27 PM via UNIVERSIDAD ESTATAL A DISTANCIA AN: 318031 ; Llopis Pascual, Fernando, Perez Lopez, Ernesto, Ortuno Ortin, Fernando.; Introduccion a la programacion : algoritmos y C/C++ Account: s1093037 Fernando Llopis Pascual, Ernesto Pérez López y Fernando Ortuño Ortín El término ensamblador hace referencia tanto al lenguaje de programación como al programa que traduce un programa escrito en lenguaje ensamblador a lenguaje máquina. A pesar de estas ventajas, sigue siendo grande la adecuación del hombre a las características de la máquina, y es necesario hacer de nuevo todos los pro- gramas cuando se cambia de tipo de ordenador. El lenguaje máquina y el ensamblador se denominan lenguajes de bajo nivel por lo fuertemente con- dicionados que ambos están por la arquitectura del computador que los sopor- ta. Es decir, son lenguajes orientados a la máquina. Para evitar los inconvenientes que presentaban los lenguajes de bajo nivel, se crearon otros lenguajes de programación no ligados a las características de la máquina, y por tanto, útiles para cualquier computador. 1.6.2. Lenguajes de alto nivel Su desarrollo comenzó a mediados de los años 50. Se había puesto de manifiesto que la mayor limitación de los ordenadores se encontraba a nivel software y no a nivel hardware, ya que escribir programas en lenguajes de bajo nivel era una tarea larga, difícil y cara. Un lenguaje de alto nivel es un lenguaje orientado hacia la resolución de una determinada clase de problemas, mientras que un lenguaje de bajo nivel es un lenguaje orientado a una determinada clase de máquinas. Los lenguajes de alto nivel tienen las siguientes características: • Son lenguajes de programación cuya estructura y vocabulario está más cercano al lenguaje natural que los de bajo nivel, pero con una sintaxis muy rígida que evita las ambigüedades propias de los lenguajes natu- rales. Esto es posible debido al uso de tan sólo unas pocas palabras tomadas del lenguaje natural, las llamadas palabras reservadas, que junto con unas reglas sintácticas permite obtener programas dotados de una estructura clara y que no difieren mucho de la forma de expresar- nos que tenemos normalmente. • Los programas escritos en lenguajes de alto nivel deben traducirse a lenguaje máquina. La rígida sintaxis de que están dotados permite que el proceso sea automático, realizándose las tres fases descritas en la programación en lenguaje máquina. • Elevado rendimiento, pues se produce más de una instrucción de máquina por cada sentencia de alto nivel, siendo éste proporcional al número de instrucciones máquina que puede generar una sentencia. A mayor rendimiento se dice que el lenguaje es de mayor nivel. 22 Co py ri gh t © 2 00 0. D ig it al ia . Al l ri gh ts r es er ve d. M ay n ot b e re pr od uc ed i n an y fo rm w it ho ut p er mi ss io n fr om t he p ub li sh er , ex ce pt f ai r us es p er mi tt ed u nd er U .S . or ap pl ic ab le c op yr ig ht l aw . EBSCO Publishing : eBook Academic Collection (EBSCOhost) - printed on 1/27/2016 3:27 PM via UNIVERSIDAD ESTATAL A DISTANCIA AN: 318031 ; Llopis Pascual, Fernando, Perez Lopez, Ernesto, Ortuno Ortin, Fernando.; Introduccion a la programacion : algoritmos y C/C++ Account: s1093037 Introducción a la programación. Algoritmos y C/C++ 23 Nuestro anterior ejemplo en el que se restaba un número, por ejemplo IMPUESTOS de otro, el SUELDO, y el resultado lo almacenaban en otro, el LIQUIDO, empleando un lenguaje de alto nivel, como es el COBOL, se redu- ce a una sola sentencia, muy próxima al lenguaje natural: SUBTRACT IMPUESTOS FROM SUELDO GIVING LIQUIDO o bien, otra forma de expresarlo, mediante una notación matemática presente en casi todos los lenguajes, y por supuesto en el lenguaje C, podría ser: LIQUIDO = SUELDO - IMPUESTOS En consonancia con sus características, presentan las siguientes ventajas: • La productividad del programador es mayor, puesto que: — se requiere menos tiempo para aprenderlo por ser de gran rendi- miento, con lo cual hay menos instrucciones que en código máquina. — es más fácil de aprender por tener una notación orientada a los pro- blemas. — es más fácil detectar y corregir los errores, por ser un lenguaje pró- ximo al natural y estructurado. — es autodocumentado debido a la potencia expresiva del lenguaje, esto junto con su estructuración hace que la programación deje de ser algo artesanal, repleta de trucos, para pasar a ser algo científico, dotado de una metodología, lo cual permite que los programas pue- dan ser entendidos por cualquier programador. • Es independiente de la arquitectura del ordenador que lo soporta. • La persona que desarrolla el programa no tiene porque saber nada acer- ca del ordenador en que se ejecutará el mismo, ni por supuesto su códi- go máquina o ensamblador. • Los programas son portables, es decir, el código fuente puede funcio- nar sobre otros tipos de ordenadores, en el peor de los casos bastará con hacer unos retoques. Sin embargo, siempre existen ciertos inconvenientes, aunque por fortuna éstos son menores que las ventajas: • La orientación del lenguaje al problema es un objetivo que se logra sin demasiadas trabas, especialmente en los lenguajes de propósito espe- cial como el COBOL. La independencia de una máquina particular no se logra tan fácilmente. Existe una versión estándar que deben cumplir los lenguajes de las diferentes casas comerciales, pero además cada uno tiene sus propias especificaciones. Co py ri gh t © 2 00 0. D ig it al ia . Al l ri gh ts r es er ve d. M ay n ot b e re pr od uc ed i n an y fo rm w it ho ut p er mi ss io n fr om t he p ub li sh er , ex ce pt f ai r us es p er mi tt ed u nd er U .S . or ap pl ic ab le c op yr ig ht l aw . EBSCO Publishing : eBook Academic Collection (EBSCOhost) - printed on 1/27/2016 3:27 PM via UNIVERSIDAD ESTATAL A DISTANCIA AN: 318031 ; Llopis Pascual, Fernando, Perez Lopez, Ernesto, Ortuno Ortin, Fernando.; Introduccion a la programacion : algoritmos y C/C++ Account: s1093037 Fernando Llopis Pascual, Ernesto Pérez López y Fernando Ortuño Ortín • Hay un proceso adicional, que conlleva un tiempo, requerido para la traducción del programa en lenguaje de alto nivel al código de la máquina, pero este tiempo es infinitamente menor que el que emplea- ríamos si tuviéramos que escribir el programa en código máquina. • Hay una mayor ocupación de la memoria, pues el lenguaje tiene una serie de sentencias que generan unas instrucciones máquina no opera- tivas creando un código máquina no optimizado, con lo cual el tiempo de ejecución es mayor que si el programa se hubiera realizado directa- mente en código máquina. Este problema carece hoy día de importan- cia debido a la cantidad de memoria central disponible, por su bajo coste, y a la velocidad de los procesadores. De todas formas se ha pres- tado mucha atención a la optimización del código que se genera. A pesar de estos inconvenientes, hoy en día se programa todo con lengua- jes de alto nivel, incluso programas verdaderamente complicados como pue- den ser los sistemas operativos, pues ésta es la única forma de poder acabarlo y probarlos en un tiempo razonable. Por ejemplo, casi todo el desarrollo del sistema operativo UNIX ha sido escrito en el lenguaje C. La experienciaindi- ca que sólo un pequeño porcentaje es crítico bajo el punto de vista de la velo- cidad de ejecución. Una vez localizados los puntos críticos, son reescritos en lenguaje ensamblador. Los lenguajes de alto nivel se pueden encasillar dentro de las tres siguien- tes generaciones. Segunda generación de lenguajes Es a principio de los años cincuenta cuando aparecen notaciones simbóli- cas (lenguajes A-0 y Speedcoding), pero el verdadero avance se produjo con la aparición del FORTRAN en 1957, un lenguaje orientado a entornos mate- máticos. Otros lenguajes dentro de esta generación son: ALGOL, fue el lenguaje académico de computo estándar en la década de los sesenta y principios de los setenta. Nunca tuvo éxito en EEUU, y un éxi- to relativo en Europa, pero si influyó en lenguajes que fueron desarrollados posteriormente. COBOL, lenguaje desarrollado para que pudiera ser utilizado en aplica- ciones comerciales y cuya forma de texto fuera similar al lenguaje inglés. COBOL fue el lenguaje estándar para las aplicaciones comerciales desde entonces hasta hoy en día. COBOL sigue siendo bastante utilizado en deter- minados ámbitos, aunque está empezando a decaer notablemente su uso. LISP, lenguaje desarrollado para aplicaciones de inteligencia artificial. 24 Co py ri gh t © 2 00 0. D ig it al ia . Al l ri gh ts r es er ve d. M ay n ot b e re pr od uc ed i n an y fo rm w it ho ut p er mi ss io n fr om t he p ub li sh er , ex ce pt f ai r us es p er mi tt ed u nd er U .S . or ap pl ic ab le c op yr ig ht l aw . EBSCO Publishing : eBook Academic Collection (EBSCOhost) - printed on 1/27/2016 3:27 PM via UNIVERSIDAD ESTATAL A DISTANCIA AN: 318031 ; Llopis Pascual, Fernando, Perez Lopez, Ernesto, Ortuno Ortin, Fernando.; Introduccion a la programacion : algoritmos y C/C++ Account: s1093037 Introducción a la programación. Algoritmos y C/C++ BASIC, en 1965 aparece BASIC un lenguaje orientado a ordenadores pequeños, con pocas instrucciones y fácil de aprender. BASIC fue desarrolla- do para satisfacer las necesidades del cálculo numérico no científico, no obs- tante se ha extendido mucho más que su meta original. Tercera generación de lenguajes La creciente complejidad, tamaño e importancia de los sistemas y aplica- ciones, las necesidades de fabilidad en los programas y, al mismo tiempo, la falta de adecuación de los métodos tradicionales a dichas necesidades hizo que la situación llegara a ser crítica. Esto lleva a la Organización del Tratado del Atlántico Norte (OTAN) a patrocinar una conferencia en 1968 cuyo objetivo principal es discutir lo que se había denominado como «crisis del software». La «crisis del software» se refiere a un conjunto de problemas encontra- dos en el desarrollo del software de ordenadores. Algunos lenguajes destaca- dos dentro de la tercera generación son los siguientes: PASCAL, nacido tras la crisis del software a principios de los años 70, como resultado del esfuerzo de buscar mejores notaciones, estructuras de con- trol claras y facilidades de definición y manejo de datos que hagan más fácil la tarea de obtener programas correctos, claros y modificables. En definitiva, era el primer lenguaje construido especialmente con las propuestas formula- das por la programación estructurada. C, empezó como un lenguaje orientado a sistemas (implementación de sis- temas operativos), pero sus características de lenguaje de alto nivel que sopor- ta estructuras de datos sofisticadas y la posibilidad de estructurar programas mediante funciones (subprogramas), así como su eficiencia y las facilidades propias de los lenguajes de bajo nivel lo han hecho muy popular y ha sido aplicado a diferentes áreas. PROLOG es un lenguaje para la programación lógica, separan la lógica (lo que el programa tiene que hacer) y el control (cómo tiene que hacerlo). A finales de los años setenta aparece un nuevo concepto de programación, la programación orientada a objetos. Esta forma de programación tiende a plan- tear las aplicaciones de acuerdo a las clases y objetos (datos) del dominio en lugar de sobre las acciones a ejecutar (procesos), e introduce nuevos conceptos como los de clase, objeto y herencia. Los lenguajes más representativos de esta programación son el Smalltalk, el Eiffel y el más popular, el C++. El C++ fue desarrollado como un lenguaje que conservaba la eficiencia del lenguaje C, pero incorporando los elementos de la programación orientada a objetos. En estos últimos años cabe hablar de la aparición de un lenguaje cuyo uso se está extendiendo a gran velocidad de forma paralela a la popularidad de Internet, este lenguaje es JAVA. Es un lenguaje de tercera generación con 25 Co py ri gh t © 2 00 0. D ig it al ia . Al l ri gh ts r es er ve d. M ay n ot b e re pr od uc ed i n an y fo rm w it ho ut p er mi ss io n fr om t he p ub li sh er , ex ce pt f ai r us es p er mi tt ed u nd er U .S . or ap pl ic ab le c op yr ig ht l aw . EBSCO Publishing : eBook Academic Collection (EBSCOhost) - printed on 1/27/2016 3:27 PM via UNIVERSIDAD ESTATAL A DISTANCIA AN: 318031 ; Llopis Pascual, Fernando, Perez Lopez, Ernesto, Ortuno Ortin, Fernando.; Introduccion a la programacion : algoritmos y C/C++ Account: s1093037 Fernando Llopis Pascual, Ernesto Pérez López y Fernando Ortuño Ortín características de programación orientada a objetos, multiplataforma, y espe- cialmente preparado para el desarrollo de aplicaciones en Internet. Cuarta Generación de lenguajes Intentan incrementar el mayor nivel de abstracción posible. Estos lengua- jes, sobre todo, están orientados a la gestión y en especial al tratamiento de bases de datos. Algunos de estos lenguajes de programación tienen su propia estructura, y otros realmente lo que hacen es el permitir al programador crear programas en un lenguaje de tercera generación utilizando muchas menos sentencias. En la actualidad se habla de lenguajes de quinta generación, basa- dos en LISP y PROLOG. 1.7. Compilación e interpretación Los programas escritos en lenguaje de alto nivel son traducidos al código máquina por unos programas especiales llamados compiladores e intérpretes. El compilador analiza el programa —programa fuente—, comprobando su sintaxis e indicando los errores de escritura, si los hubiera, y luego genera el programa en lenguaje máquina —programa objeto—. El programa objeto puede ser ya ejecutado o necesitar, según el compila- dor que se esté usando, de otro proceso además de la compilación, llamado enlazado ("link"), en donde al programa objeto se le unen una serie de módu- los de librería, tales como operaciones aritméticas o manejo de gráficos, nece- sarios para crear el programa ejecutable. Un intérprete es un programa que analiza y ejecuta un programa sentencia a sentencia. Como los compiladores, los intérpretes analizan la estructura de cada sentencia del programa fuente, sin embargo no generan código objeto y llevan a cabo un conjunto de acciones equivalentes a las instrucciones de la sentencia. Estudio comparativo: — Los intérpretes son más cortos y mas simples que los compiladores, por tanto ocupan menos memoria y son más baratos, razón por la cual hace algunos años, estuvieron más extendidos en el entorno de los microor- denadores, cuando estos tenían menos prestaciones. — En los intérpretes, la optimización es prácticamente imposible y los diagnósticos de error son limitados en comparación con los que pro- porcionan los compiladores, mucho más sofisticados. — Los lenguajes compilados son más eficientes que los interpretados, entendiendo por eficiencia la rapidez de ejecución. 26 Co py ri gh t © 2 00 0. D ig it al ia . Al l ri gh ts r es er ve d. M ay n ot b e re pr od uc ed i n an y fo rm w it ho ut p er mi ss io n fr om t he p ub li sh er , ex ce pt f ai r us es p er mi tt ed u nd er U .S . or ap pl ic ab le c op yr ig ht l aw . EBSCO Publishing : eBook Academic Collection (EBSCOhost) - printed on 1/27/2016 3:27 PM via UNIVERSIDAD ESTATAL A DISTANCIAAN: 318031 ; Llopis Pascual, Fernando, Perez Lopez, Ernesto, Ortuno Ortin, Fernando.; Introduccion a la programacion : algoritmos y C/C++ Account: s1093037 Introducción a la programación. Algoritmos y C/C++ La razón es la siguiente, cada vez que se vuelve a ejecutar una instrucción, en un lenguaje interpretado, se tiene que efectuar el proceso de traducción de la misma, mientras que en un lenguaje compilado la traducción de todo el pro- grama fuente se efectúa una sola vez, construyendo un programa objeto. 1.8. Sistemas Operativos Lo usual, nada más recibir un ordenador es hacerlo funcionar. Para ello es imprescindible que introduzcamos un programa en la memoria del mismo y lo ejecutemos. Esto puede hacerse desde el teclado de un terminal, pero, ¿cómo es capaz el ordenador de interpretar que lo que realmente queremos hacer es poner en marcha ese determinado programa? Necesitamos, pues, la ayuda de otro programa dentro del ordenador que esté diseñado para activar y coordinar toda la circuitería y el conjunto de dispositivos mecánicos que lo componen y nos facilite su utilización. Vemos que para cargar un programa en la memoria del ordenador necesi- tamos la ayuda de otro programa. Evidentemente, dentro del ordenador debe haber un software que nos facilite la utilización del mismo. Sin su software, un ordenador es básicamente un conjunto de circuitos electrónicos y de partes mecánicas sin utilidad. Con su software, un ordena- dor puede almacenar, procesar y recuperar información. Veamos esa parte del software de un computador que transforma el hard- ware en algo útil: el Sistema Operativo. El sistema operativo es el nivel más bajo del software de un ordenador y actúa directamente sobre el hardware. Como su nombre indica es un progra- ma o conjunto de programas que trabajan en conjunto para realizar dos fun- ciones: por una parte se encarga de controlar el hardware y gestionar sus recursos, por otra parte proporciona una visión simplificada de la máquina, ocultando a los usuarios la complejidad de las anteriores tareas. Veamos cada una de estas funciones. 1.8.1. El Sistema Operativo como máquina virtual La arquitectura, conjunto de instrucciones, organización de la memoria, E/S, etc., de los ordenadores en el nivel del lenguaje máquina es primitiva y muy difícil de programar, especialmente en la entrada/salida. Está claro que el programador, cuando está realizando un programa para resolver un problema de usuario, no desea verse envuelto, por ejemplo, en el control del disco duro, lo único que desea conocer es una abstracción del dis- co, simple y de alto nivel, con la cual trabajar. Para él, un disco es un sopor- 27 Co py ri gh t © 2 00 0. D ig it al ia . Al l ri gh ts r es er ve d. M ay n ot b e re pr od uc ed i n an y fo rm w it ho ut p er mi ss io n fr om t he p ub li sh er , ex ce pt f ai r us es p er mi tt ed u nd er U .S . or ap pl ic ab le c op yr ig ht l aw . EBSCO Publishing : eBook Academic Collection (EBSCOhost) - printed on 1/27/2016 3:27 PM via UNIVERSIDAD ESTATAL A DISTANCIA AN: 318031 ; Llopis Pascual, Fernando, Perez Lopez, Ernesto, Ortuno Ortin, Fernando.; Introduccion a la programacion : algoritmos y C/C++ Account: s1093037 28 Fernando Llopis Pascual, Ernesto Pérez López y Fernando Ortuño Ortín te magnético que contiene un conjunto de ficheros, en donde cada fichero tie- ne un identificativo por el cual puede referenciarse para ser leído y/o escrito. Por ello, una de las funciones del sistema operativo es la de actuar direc- tamente sobre el hardware, ocultando la verdad del mismo al usuario, presen- tándole una máquina virtual, más simple y amigable, que sea más fácil de manejar que el hardware real. 1.8.2. El Sistema Operativo como Administrador de Recursos Podemos considerar el ordenador como un conjunto de recursos, necesarios para la ejecución de los procesos. Los recursos pueden ser físicos —procesa- dor, memoria, periféricos, etc.— y pueden ser lógicos —programas, ficheros de datos, etc.—. Una de las misiones de los sistemas operativos es hacer un uso eficiente de estos recursos entre los diversos programas que compiten por ellos, ofreciendo una distribución ordenada y controlada de los mismos. 1.9. Esquema general de un Sistema Informático Veamos a continuación un esquema de los diversos niveles que configuran un sistema informático, descendiendo desde la vista que contempla el usuario hasta los dispositivos físicos de la máquina. SOFTWARE Programas de Usuario Programas del Sistema y Utilidades Sistema Operativo Lenguaje Máquina FIRMWARE Microprogramación HARDWARE Monitores, teclados. Impresoras, discos, Elfírmware o microprogramación es un ente intermedio entre el hardwa- re y el software, a un nivel más bajo que el sistema operativo. Es un softwa- re almacenado permanentemente en memorias de sólo lectura (ROM Read Only Memory).Co py ri gh t © 2 00 0. D ig it al ia . Al l ri gh ts r es er ve d. M ay n ot b e re pr od uc ed i n an y fo rm w it ho ut p er mi ss io n fr om t he p ub li sh er , ex ce pt f ai r us es p er mi tt ed u nd er U .S . or ap pl ic ab le c op yr ig ht l aw . EBSCO Publishing : eBook Academic Collection (EBSCOhost) - printed on 1/27/2016 3:27 PM via UNIVERSIDAD ESTATAL A DISTANCIA AN: 318031 ; Llopis Pascual, Fernando, Perez Lopez, Ernesto, Ortuno Ortin, Fernando.; Introduccion a la programacion : algoritmos y C/C++ Account: s1093037 2. TIPOS DE DATOS ELEMENTALES 2.1. Introducción Recordemos que la función principal de un ordenador es el tratamiento automático de la información, que consiste en la manipulación de una serie de datos bajo el control de un conjunto de instrucciones, aplicadas en un orden determinado, lo que se conoce como programa. Dicha manipulación puede realizarse independientemente del lenguaje de programación utilizado, las diferencias que habrá entre unos lenguajes y otros radican en: • Los tipos de datos empleados • Las operaciones permitidas sobre esos tipos de datos • La forma en la que se especifica el orden en el que se van a ejecutar las operaciones. Hemos diferenciado dos aspectos fundamentales datos y programas. En este tema se realizará una introducción a los tipos de datos y sus ope- raciones, y en el siguiente tema nos centraremos en los aspectos fundamenta- les de los programas. 2.2. Dato Objeto Un ordenador dispone de una serie de dispositivos donde se almacena información, tanto en la memoria central y en los registros del procesador, como en los dispositivos de almacenamiento externo, disco duro, diskette, Co py ri gh t © 2 00 0. D ig it al ia . Al l ri gh ts r es er ve d. M ay n ot b e re pr od uc ed i n an y fo rm w it ho ut p er mi ss io n fr om t he p ub li sh er , ex ce pt f ai r us es p er mi tt ed u nd er U .S . or ap pl ic ab le c op yr ig ht l aw . EBSCO Publishing : eBook Academic Collection (EBSCOhost) - printed on 1/27/2016 3:27 PM via UNIVERSIDAD ESTATAL A DISTANCIA AN: 318031 ; Llopis Pascual, Fernando, Perez Lopez, Ernesto, Ortuno Ortin, Fernando.; Introduccion a la programacion : algoritmos y C/C++ Account: s1093037 30 Fernando Llopis Pascual, Ernesto Pérez López y Fernando Ortuño Ortín CD, etc. La estructura en la que se almacena la información en estos disposi- tivos suele ser muy simple, un conjunto de bits agrupados en bytes. Es evidente que, trabajar directamente sobre esta forma de almacenamien- to es complicado, por ello los lenguajes de programación disponen de organi- zaciones de datos que permiten almacenar información mucho más compleja que una serie de bits, pero mucho más sencillas de utilizar. Para hablar de esa información procesada por un programa introducire- mos un nuevo concepto, el término dato objeto, que utilizaremos para refe- rirnos a la agrupación en tiempo de ejecución de uno o más datos en una computadora. Así un dato objeto representa un ente que contiene información, es como un recipiente para los valores de los datos, un lugar dondelos valores de los datos pueden ser almacenados y más tarde recuperados. De todos los datos objeto que un programa utilizará, cabe diferenciar aque- llos que explícitamente define el programador (constantes, variables, tablas, registros, ficheros, etc.) y aquellos que define el sistema de forma automática y que no son accesibles por el programador, pero son necesarios para la eje- cución del programa (pila de llamadas a subprogramas). En este tema vamos a hablar de los datos objeto que define el programa- dor. Todo dato objeto viene caracterizado por tres atributos que son nombre, tipo y valor. 2.2.1. Nombre o identificador Al igual que para las personas el nombre de un dato objeto sirve para iden- tificar univocamente al dato objeto dentro del conjunto de datos objetos del programa. Así, mediante este atributo el objeto puede ser referenciado duran- te la ejecución del programa, distinguiéndole de los demás. Cada lenguaje tiene una serie de normas, más o menos restrictivas, para definir los nombres. Generalmente, el nombre o identificador, se formará mezclando letras y números, siempre con la condición de que el primer carác- ter sea una letra y no se utilicen signos de puntuación, a excepción del sím- bolo de subrayado. Indentificadores válidos: A, SALDO, A3, b23, num, saldo_medio. Identificadores no válidos: 23b, 454, Saldo+, * a+, Nota/Numero. Co py ri gh t © 2 00 0. D ig it al ia . Al l ri gh ts r es er ve d. M ay n ot b e re pr od uc ed i n an y fo rm w it ho ut p er mi ss io n fr om t he p ub li sh er , ex ce pt f ai r us es p er mi tt ed u nd er U .S . or ap pl ic ab le c op yr ig ht l aw . EBSCO Publishing : eBook Academic Collection (EBSCOhost) - printed on 1/27/2016 3:27 PM via UNIVERSIDAD ESTATAL A DISTANCIA AN: 318031 ; Llopis Pascual, Fernando, Perez Lopez, Ernesto, Ortuno Ortin, Fernando.; Introduccion a la programacion : algoritmos y C/C++ Account: s1093037 Introducción a la programación. Algoritmos y C/C++ Es muy recomendable, a ser posible, elegir un nombre significativo que describa la información que va a contener el dato objeto, por ejemplo, es pre- ferible utilizar como identificadores lado, área, diámetro que l,a,d, pues ello incrementará considerablemente la legibilidad del programa. 2.2.2. Tipo de datos Quizá sea el atributo más importante de un dato objeto, ya que indica la clase de datos a la que pertenece. El tipo de datos se define como el conjunto de valores, que pueden tomar los objetos pertenecientes a este tipo de datos, y el conjunto de operaciones que se pueden realizar sobre estos valores. El valor es el contenido del dato objeto en un instante dado, siendo el úni- co atributo susceptible de ser modificado a lo largo de la ejecución del pro- grama. Los datos objetos se definen al principio del programa, en lo que se cono- ce como parte declaratoria del programa, antes de ser utilizados. Según lo que hemos comentado hasta ahora, las distintas clases de tipos de datos tienen diferentes conjuntos de posibles valores y diferentes representa- ciones en el ordenador, y lo que es más importante, admiten distintas opera- ciones. Podemos dividir los tipos de datos en dos clases: Tipos de datos simples o elementales, sólo permiten almacenar un valor. Tipos de datos estructurados, permiten almacenar más de un valor. Se construyen a partir de los tipos de datos elementales. Los datos elementales suelen estar presentes en todos los lenguajes de pro- gramación, aunque su representación en el ordenador suele cambiar de unos lenguajes a otros, e incluso, dentro de un mismo lenguaje, puede cambiar de unos compiladores a otros, sin embargo, el resto de características, como son el conjunto de valores y de operaciones, son análogas para todos los lengua- jes. Son tipos de datos predefinidos, casi todos ellos, por lo que se les deno- mina también tipos estándar, pero también hay otros que los define el programador. En cuanto a los tipos estructurados, hay que decir que siempre los tiene que definir el programador. 31 Co py ri gh t © 2 00 0. D ig it al ia . Al l ri gh ts r es er ve d. M ay n ot b e re pr od uc ed i n an y fo rm w it ho ut p er mi ss io n fr om t he p ub li sh er , ex ce pt f ai r us es p er mi tt ed u nd er U .S . or ap pl ic ab le c op yr ig ht l aw . EBSCO Publishing : eBook Academic Collection (EBSCOhost) - printed on 1/27/2016 3:27 PM via UNIVERSIDAD ESTATAL A DISTANCIA AN: 318031 ; Llopis Pascual, Fernando, Perez Lopez, Ernesto, Ortuno Ortin, Fernando.; Introduccion a la programacion : algoritmos y C/C++ Account: s1093037 32 Fernando Llopis Pascual, Ernesto Pérez López y Fernando Oríuño Ortín Podemos considerar la siguiente clasificación: Datos simples Predefinidos o estándar Definidos por el usuario entero real carácter lógico puntero enumerado subrango Datos Estructurados Vectores Registros Listas, Pilas. Ficheros 2.2.2.1. Tipos de datos Predefinidos Son los que se hallan, por defecto, en la mayoría de lenguajes de progra- mación. Tipo numérico entero. Sus valores son un subconjunto de los números enteros, cuyo rango o tamaño entre [-MAXINT, MAXINT] depende del lenguaje, de la computado- ra utilizada y del sistema operativo, siendo MAXINT el mayor número que puede almacenar un dato objeto de tipo entero. Los datos de este tipo se expresan mediante una cadena de dígitos que pue- de ir precedida de signo (+ o -) y sin punto decimal. En el caso de no indicar nada se entiende que el número es positivo. Se representan en el ordenador en el formato de coma fija, ya que, aunque no se represente, está implícita a la derecha del mismo. Ejemplo: 1998 -14 +21368 Tipo numérico real. Los valores que puede tomar un dato de tipo real son un subconjunto de los números reales, limitado no sólo en cuanto al tamaño, sino también en cuanto a la precisión o cantidad de decimales que posee.Co py ri gh t © 2 00 0. D ig it al ia . Al l ri gh ts r es er ve d. M ay n ot b e re pr od uc ed i n an y fo rm w it ho ut p er mi ss io n fr om t he p ub li sh er , ex ce pt f ai r us es p er mi tt ed u nd er U .S . or ap pl ic ab le c op yr ig ht l aw . EBSCO Publishing : eBook Academic Collection (EBSCOhost) - printed on 1/27/2016 3:27 PM via UNIVERSIDAD ESTATAL A DISTANCIA AN: 318031 ; Llopis Pascual, Fernando, Perez Lopez, Ernesto, Ortuno Ortin, Fernando.; Introduccion a la programacion : algoritmos y C/C++ Account: s1093037 Introducción a la programación. Algoritmos y C/C++ Se expresan de dos maneras diferentes denominadas notación en punto flo- tante y notación exponencial o científica. Punto flotante: Un valor consiste en una cadena de dígitos, que puede ir precedida de signo, y un punto decimal, que puede ocupar cualquier posición, seguido de uno o más dígitos. Es necesario escribir siempre ambas partes, entera y fraccionaria, para distinguir estos valores de los enteros. Ejemplo: 78.45 -321.0 +0.7 0.0 Científica o exponencial, tiene la forma: mantisa E exponente Siendo la cantidad representada igual a la mantisa multiplicada por 10 ele- vado al exponente, donde mantisa es un número real y exponente un número entero. Ejemplos: 0.7845E2 (= 0.7845 x 102 = 75.45; -120000E-4 +0.0005E+3 Tipo carácter. El conjunto de valores que puede tomar un dato de este tipo es el formado por todos los caracteres o símbolos recogidos en la tabla de códigos utilizada, a saber: • Caracteres alfabéticos: 'A', 'B', 'C, '£>', ..., 'Z'.'a', 'b', 'c', 'd1, ..., 'z' • Dígitos numéricos: 'O', T, ?', '3', ..., '9' • Caracteres especiales y de puntuación:'' (espacio o carácter blanco),'+', Se expresan, usualmente, poniendo el carácter entre apóstrofos (comillas simples). Tipo booleano o lógico. Sus posibles valores son sólo dos: FALSO y CIERTO, y son el resultado de establecer comparaciones entre valores de otros tipos de datos. 2.2.2.2. Tipos de datos definidos por el programador Los tipos de datos enumerado y subrango son también conocidos como datos definidospor el programador, por ser éste quien define el tipo de datos, 33 Co py ri gh t © 2 00 0. D ig it al ia . Al l ri gh ts r es er ve d. M ay n ot b e re pr od uc ed i n an y fo rm w it ho ut p er mi ss io n fr om t he p ub li sh er , ex ce pt f ai r us es p er mi tt ed u nd er U .S . or ap pl ic ab le c op yr ig ht l aw . EBSCO Publishing : eBook Academic Collection (EBSCOhost) - printed on 1/27/2016 3:27 PM via UNIVERSIDAD ESTATAL A DISTANCIA AN: 318031 ; Llopis Pascual, Fernando, Perez Lopez, Ernesto, Ortuno Ortin, Fernando.; Introduccion a la programacion : algoritmos y C/C++ Account: s1093037 Fernando Llopis Pascual, Ernesto Pérez López y Fernando Ortuño Ortín y por consiguiente el conjunto de valores posibles que puede tomar un obje- to de estos tipos de datos. En realidad son tipos de datos algo especiales, ya que se trata de subcon- juntos de los tipos simples que hemos estudiado, pero agrupando los valores siguiendo el criterio del programador. Tipo subrango o intervalo. Un tipo subrango se define a partir de otro tipo de datos que sea ordinal y finito, lo que excluye a los reales, especificando dos constantes de ese tipo, que actúan como límite inferior y superior del subconjunto de valores del nue- vo tipo. Ejemplo: 1.. 10 consta de los enteros 1, 2, 3, 4, 5, 6, 7, 8, 9 y 10. 'J'.. 'Nr consta de los caracteres 'J', 'K', 'L', 'M', «N1. 'a'.. 'z' consta de los caracteres comprendidos entre la V y la 'z', inclu- sive. 'O'.. '9' consta de los caracteres comprendidos entre el 'O' y el '9', inclu- sive. Tipo enumerado. Un tipo enumerado se define enumerando los posibles valores que puede tomar un objeto de este tipo de datos, se hace mediante una lista de identifi- cadores, entre paréntesis y separados por comas, elegidos de forma que su significado haga que el programa sea más legible. Dichos valores no son, en ningún caso, cadenas de caracteres. Un tipo enumerado es un tipo ordinal, de forma que el sistema le asocia a cada identificador, y en el orden en que están enumerados, un valor entero empezando por O y llegando hasta el valor n-1, suponiendo definidos n iden- tificadores para el nuevo tipo de datos. Las variables de tipo enumerado tomarán como valor alguno de estos iden- tificadores, pero el sistema los tratará según los valores enteros asociados, de forma que estos identificadores no son tratados como cadenas de caracteres, por ejemplo, si tuviéramos que visualizar por pantalla uno de estos identifi- cadores, se visualizaría el valor entero asociado y no el identificador. Ej.: calificación = (suspenso, aprobado, notable, sobresaliente, matricula); sexo = (varón, mujer); días - (lunes, martes, miércoles, jueves, viernes, sábado, domingo); 34 Co py ri gh t © 2 00 0. D ig it al ia . Al l ri gh ts r es er ve d. M ay n ot b e re pr od uc ed i n an y fo rm w it ho ut p er mi ss io n fr om t he p ub li sh er , ex ce pt f ai r us es p er mi tt ed u nd er U .S . or ap pl ic ab le c op yr ig ht l aw . EBSCO Publishing : eBook Academic Collection (EBSCOhost) - printed on 1/27/2016 3:27 PM via UNIVERSIDAD ESTATAL A DISTANCIA AN: 318031 ; Llopis Pascual, Fernando, Perez Lopez, Ernesto, Ortuno Ortin, Fernando.; Introduccion a la programacion : algoritmos y C/C++ Account: s1093037 Introducción a la programación. Algoritmos y C/C++ 35 2.2.3. Valor. Operador de asignación El valor es la información que en un instante determinado almacena el dato objeto. Los valores que puede tomar un dato objeto están condicionados al tipo de dato al que pertenece el objeto y suelen ser el resultado de una ope- ración de asignación, Para asignar valores a los objetos se utiliza el operador de asignación :=, siendo su sintaxis: identificador := valor Así, por ejemplo, si declaramos el objeto nota de tipo entero y le asigna- mos el valor 7 con la instrucción nota := 7, el objeto nota almacenará el valor 7, perdiendo cualquier información que tuviera anteriormente y manteniendo sólo la última que se le asignó. Otras posibles representaciones del operador de asignación son: nota <— 7 nota = 7 2.3. Datos objeto según su comportamiento. Los datos objeto pueden comportarse durante la ejecución de un programa como constantes o como variables. 2.3.7. Constantes Un dato objeto se dice que es una constante cuando su valor no cambia durante la ejecución del programa. Puede representarse como un valor entero o real, por ejemplo, y entonces hablamos de constante literal: 1000, 3.1416. Pero a veces es conveniente representar una constante mediante un identi- ficador o nombre simbólico, ello se consigue declarando la constante. La forma de declarar una constante, denominada simbólica, es indicando su nombre y el valor correspondiente, siendo innecesario indicar el tipo de la constante, pues éste viene determinado por el valor de la misma. Por ejemplo: kilómetro = 1000; pi = 3.1416 Co py ri gh t © 2 00 0. D ig it al ia . Al l ri gh ts r es er ve d. M ay n ot b e re pr od uc ed i n an y fo rm w it ho ut p er mi ss io n fr om t he p ub li sh er , ex ce pt f ai r us es p er mi tt ed u nd er U .S . or ap pl ic ab le c op yr ig ht l aw . EBSCO Publishing : eBook Academic Collection (EBSCOhost) - printed on 1/27/2016 3:27 PM via UNIVERSIDAD ESTATAL A DISTANCIA AN: 318031 ; Llopis Pascual, Fernando, Perez Lopez, Ernesto, Ortuno Ortin, Fernando.; Introduccion a la programacion : algoritmos y C/C++ Account: s1093037 36 Fernando Llopis Pascual, Ernesto Pérez López y Fernando Ortuño Ortín Auna constante se le asigna el valor de forma previa a la ejecución, al ini- cio del programa, y una vez asignado éste no varía. 2.3.2. Variables Variables son todos aquellos datos objeto cuyos valores no tienen por qué ser los mismos a lo largo de la vida de un programa, sino que pueden cambiar durante la ejecución del mismo. La declaración de una variable se hace indicando su nombre o identifica- dor y el tipo de datos al que pertenece. Por ejemplo, podemos definir una variable de tipo entero y otra real, de la siguiente forma: radio: entero; circunferencia: real; A una variable se le pueden asignar diferentes valores en distintas par- tes del programa, pero en un momento dado sólo tendrá uno. De esta for- ma cambia la información que representa la variable, pero nunca cambia el tipo de datos asociado a la misma, pues los valores que se asignan a la variable deberán pertenecer al conjunto de valores permitidos para su tipo de datos. El uso de variables nos permite definir algoritmos de carácter general para la resolución de problemas, en los cuales el valor de los objetos varia- bles se concreta en el momento de ejecutar el programa. Las variables se pueden entender como cajas con nombres, que se crean en el momento de la declaración, y en las que podemos introducir valores que pueden ser alterados a lo largo del programa. La definición de las dos variables anteriores supondría la reserva en memoria de esta dos cajas, con espacio suficiente para representar un valor entero y otro real, pero en el momento de la definición no tienen asignado ningún valor. radio Asignamos un valor a la variable radio, por ejemplo 10. radio \ circunferencia 10 circunferencia Co py ri gh t © 2 00 0. D ig it al ia . Al l ri gh ts r es er ve d. M ay n ot b e re pr od uc ed i n an y fo rm w it ho ut p er mi ss io n fr om t he p ub li sh er , ex ce pt f ai r us es p er mi tt ed u nd er U .S . or ap pl ic ab le c op yr ig ht l aw . EBSCO Publishing : eBook Academic Collection (EBSCOhost) - printed on 1/27/2016 3:27 PM via UNIVERSIDAD ESTATAL A DISTANCIA AN: 318031 ; Llopis Pascual, Fernando, Perez Lopez, Ernesto, Ortuno Ortin, Fernando.; Introduccion a la programacion : algoritmos y C/C++ Account: s1093037 Introducción a la programación. Algoritmos y C/C++ 37 Calculamos el valor de la variable circunferencia, en función de la varia- ble radio, mediante la expresión: circunferencia = 2 *pi * radio Esto
Compartir