




























































































Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Prepara tus exámenes
Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Prepara tus exámenes con los documentos que comparten otros estudiantes como tú en Docsity
Encuentra los documentos específicos para los exámenes de tu universidad
Estudia con lecciones y exámenes resueltos basados en los programas académicos de las mejores universidades
Responde a preguntas de exámenes reales y pon a prueba tu preparación
Consigue puntos base para descargar
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Comunidad
Pide ayuda a la comunidad y resuelve tus dudas de estudio
Ebooks gratuitos
Descarga nuestras guías gratuitas sobre técnicas de estudio, métodos para controlar la ansiedad y consejos para la tesis preparadas por los tutores de Docsity
Acerca de las bases fundamentales de la programación
Tipo: Resúmenes
1 / 321
Esta página no es visible en la vista previa
¡No te pierdas las partes importantes!





























































































de otras titulaciones científicas. El primero, en sus primeras incursiones en su nueva carrera, tiende a identificar el aprendizaje de la informática, con el dominio de un lenguaje de programación y un conocimiento más o menos profundo de la estructura interna de la máquina. El segundo, sin embargo, aspira a que le enseñen el manejo del ordenador y la utilización de algunos paquetes de software que le vayan a resultar útiles para su futura profesión, además de alguna introducción elemental a la programación. Para ambos en este texto, hay un mensaje común: la Informática es mucho más que una serie de paradigmas ó filosofías de la programación y hay que aceptar que con su advenimiento, al árbol luliano de la ciencia, le ha brotado una nueva rama que con una cierta influencia anglosajona venimos llamando Ciencias de la Computación y con este nuevo bagaje tiene que iniciar su formación universitaria.
Desde el punto de vista del estudiante de Informática, la filosofía de este texto esta en la línea de proporcionar un texto introductorio, que adapte los conocimientos de un estudiante español de primer ciclo, a las ideas desarrolladas por el Comité que elaboro el “ACM/IEEE Joint Curriculum”, que constituye uno de los esfuerzos más saludables que existen, de enlazar las necesidades profesionales, con los contenidos académicos. Para el universitario que ha elegido otra rama científica, este libro aspira a proporcionarle una cultura informática básica, que le permita por un lado poderla aplicar en su respectivo campo de conocimiento y por otro, al conocer sus principios básicos, poder hacer frente a las posibilidades que nos ofrecen los ordenadores, conociendo tanto sus fantásticas potencialidades, como sus limitaciones.
Para tratar de cumplir, estos objetivos un tanto generalistas, apresurémonos a indicar, que este libro ha sido escrito, intentando abstraernos de cualquier lenguaje de programación concreto y en la medida de lo posible de cualquier máquina o sistema operativo de los que utilizamos diariamente. Esta tarea ha sido especialmente difícil, pues los autores tienen sus propias preferencias y profesionalmente están marcados, como todo el mundo, por sus experiencias personales. Esperamos que esta profilaxis haya sido fructífera, ya que estamos convencidos de que la única manera de introducir a un estudiante en la Informática, es tratando de separar constantemente lo que hay de contingente, en materia de útiles informáticos en el mercado en cada momento y lo que hay de nuevo para permanecer, por un cierto tiempo, en el acervo de la cultura informática. A pesar de lo anterior, es evidente que la programación debe probarse y experimentarse, mas allá de su cuerpo teórico, y para ello es necesario, que el estudiante maneje una máquina concreta, un sistema operativo determinado, adquiera ciertas habilidades de programación con un lenguaje de alto nivel razonablemente actual y maneje los últimos paquetes de software que le resulten útiles; esto tendrá lugar en el Laboratorio. Por ello no queda otro remedio que tomar decisiones en la planificación del curso; así el estudiante podrá trabajar sobre una terminal de un gran ordenador o moverse en al campo de la informática de PC o de Apple,
manejar DOS, UNIX u otro sistema, aprender C, Pascal, Fortran, Modula ó C++. Sin embargo, el libro si ha conseguido sus objetivos debe ser igual de útil para cualquiera que sea la decisión tomada.
Este texto se ha elaborado pensando en un curso introductorio de nivel de primer ciclo, para estudiantes de Ciencias o Ingeniería. El material que aquí se presenta , asume que el estudiante va a recibir en paralelo un curso de carácter práctico, en el que se le explicará y ejercitará en un lenguaje de programación de alto nivel. Ello supone que en el laboratorio y frente al ordenador, el interesado acabará habituándose a una cierta máquina, a un sistema operativo, a un lenguaje y seguramente a un entorno de programación, que debe ser el complemento práctico de los conceptos aquí desarrollados.
El material que aquí presentamos está dividido en 7 Capítulos y un anexo. El Capítulo 1 trata de recoger los conceptos que se consideran imprescindibles para poder enfrentarse a un ordenador y al proceso de programación. En nuestra opinión todo el contenido allí desarrollado tiene la vitola de fundamental y en consecuencia estos conceptos no deberían ser orillados en un curso de introducción.
El Capítulo 2 dedicado al Soporte Lógico de la máquina puede considerarse como una profundización de los aspectos relacionados con el software, vistos en el Capítulo anterior; por tanto este capítulo puede evitarse si el número de créditos asignados al curso no fuera suficiente. Sin embargo el capítulo puede ser de utilidad como referencia durante las clases prácticas donde constantemente se usarán y practicarán módulos pertenecientes a este soporte lógico.
El Capítulo 4 está dedicado a la representación interna de información en el ordenador, éste es un tópico que debe ser tratado en cualquier curso, sin embargo la profundidad con la que ello se haga, dependerá de la orientación que se pretenda dar en cada caso. En consecuencia queda al criterio del profesor la selección del material que considere oportuno para sus objetivos finales.
Los Capítulos 3 (Algoritmos y Programas) y Capítulo 5 (Estructuras de Datos) constituyen el núcleo de un curso de Introducción a la Programación. De hecho, el texto se mueve constantemente bajo el principio de Programación = Algoritmo + Estructuras de Datos y de esta forma se ha estructurado el material con la intención que el estudiante termine su lectura habiendo conseguido una cierta destreza en las técnicas y metodología de la programación estructurada. Es posible que se considere que algunas de las estructuras descritas superen los niveles de algunos cursos, especialmente en lo que se refiere a las estructuras dinámicas. No existe ninguna dificultad en evitar este material, en una primera lectura, aunque consideramos que los recursos que el uso de punteros proporciona no deben ser
Valencia, Septiembre de 1995
LOS AUTORES
La Informática, definida por la Real Academia como el conjunto de conocimientos científicos y técnicos que hacen posible el tratamiento automático de la información por medio de computadoras, requiere previamente contestar a determinadas preguntas sobre el funcionamiento de estas máquinas.
En este primer capítulo se pretende dar los conceptos mínimos e imprescindibles, para que el lector tenga una visión panorámica del contenido del libro, de forma que cuando se adentre en los próximos capítulos sepa enmarcar el sentido e importancia de cada uno de ellos.
De forma genérica y en una primera aproximación, un computador puede definirse como una “ máquina digital, electrónica, programable para el procesamiento de información ”. Notemos por tanto, que el computador^1 , en cuanto a “ máquina ” se refiere, está en la categoría de los molinos de vientos, telares, etc., que pueden funcionar correcta e incorrectamente. “ Digital ” significa que estas máquinas trabajan almacenando información, en forma de códigos, que representan las letras o dígitos de los números. “ Electrónica ” sugiere que está construida usando componentes electrónicos de estado sólido, conocidos por circuitos integrados. Programable significa que admite la posibilidad de ejecutar instrucciones a demanda de una sucesión de órdenes preestablecidas. Un ejemplo de máquina programable, son las lavadoras automáticas actuales ó los más tradicionales carrillones.
(^1) Al definir computador como un tipo de máquina (femenino), podríamos utilizar la palabra computadora, como se hace en Sudamérica. Por las funcionalidades de la máquina, el término “computador/a”, que proviene del latín computare, debería ser preferido al más popular de ordenador (ordenar es sólo una de las múltiples funciones que la máquina es capaz de llevar a cabo). En este libro usaremos libremente cualquiera de estos tres sinónimos.
Llamaremos algoritmo a un conjunto de pasos y acciones, que especifican de forma no ambigua y finita, la secuencia de operaciones a realizar para procesar datos con un determinado objetivo. (Este concepto abarca, desde un método de resolución de ecuaciones, hasta la ejecución de una receta de cocina). Hagamos dos aclaraciones previas: a) La algorítmica existe con anterioridad al desarrollo de los computadores actuales (el propio origen de la palabra proviene de un matemático árabe que describió en el siglo VIII el método manual con el cual dividimos dos números). b) Una vez encontrada este conjunto de instrucciones que resuelven el problema, éstas se pueden ejecutar sin que sea necesaria la comprensión de los principios en los que se basa el algoritmo. Así cuando dividimos dos números o construimos una pajarita a partir de una cuartilla, nos limitamos a ejecutar una serie de acciones en un determinado orden, sin preocuparnos demasiado por sus correspondientes bases teóricas.
Para el caso en que el procesador sea un computador, la forma de expresión de este algoritmo se llama programa. Cada paso del algoritmo se expresa en el programa, por medio de un conjunto de instrucciones escritas en un determinado lenguaje. Uno de los aspectos más llamativos de los computadores es el hecho de que con un reducido número de instrucciones básicas, pueda llevarse a cabo una gran cantidad de tareas.
El conjunto de pasos que constituyen el programa debe escribirse de forma muy precisa. La ambigüedad inmanente a los lenguajes naturales (español, inglés, etc.) los invalida para expresar algoritmos, por ello existe un cierto tipo de lenguajes que
reúne la suficiente precisión como para expresar algoritmos: son los llamados lenguajes de programación. Estos lenguajes tienen, como todo lenguaje una sintaxis (cómo agrupar las símbolos y elementos propios del lenguaje para formar frases válidas) y una semántica (qué significa cada frase válida de este lenguaje) diferenciándose de los lenguajes naturales en cuatro características:
Un mismo algoritmo puede expresarse en diferentes lenguajes y ejecutarse en distintos ordenadores. Contar con un algoritmo es una condición necesaria para la obtención de un programa, aunque no es suficiente, ya que su realización requiere además, creatividad y conocimientos sobre los recursos físicos y lógicos del ordenador. La fase de conversión del algoritmo a programa se denomina codificación , ya que el algoritmo escrito en un lenguaje específico de programación se denomina código.
Para que se puedan procesar los datos por medio de un programa, el conjunto de instrucciones que lo constituyen debe ser accesible para la máquina y en consecuencia, ésta debe tener la capacidad de almacenarlo internamente, al objeto que pueda efectuar el control de las operaciones que constituyen el algoritmo. Aunque todavía no hayamos profundizado en el concepto de computador, sí que podemos deducir que éste tiene que ser capaz de trabajar y reconocer simultáneamente tanto las instrucciones, que determinan lo que hay que hacer, como los datos que se van a procesar. Este requisito es tan fundamental, que la forma como éste se ha venido plasmando, conceptual y técnicamente a lo largo de la historia, permite rastrear los orígenes de la informática.
En 1982, la revista TIME nombró “hombre del año” a la computadora. La noticia supuso un impacto cultural importante y oficializó el hecho de que esta máquina es un personaje más de la historia de la humanidad. Aunque considerada como un paradigma de la etapa moderna y con sólo 30 años de verdadera historia
Fig. 1.2 Representación en un ábaco del número 1610
Calculadoras mecánicas
A medida que las distintas otras ramas científicas se desarrollaron, se puso en evidencia la necesidad de optimizar la capacidad de cálculo habida cuenta de lo dificultoso de las operaciones que se tenían que llevar a cabo. Ello hizo que muchos matemáticos se plantearan el desarrollo de instrumentos que facilitaran al menos teóricamente esta labor. Así, John Napier, que recordamos por los logaritmos neperianos, publicó un estudio en 1617 que describía la utilización de cuentas con una marca especial, para realizar multiplicaciones y divisiones (la obra matemática de Napier condujo mucho más adelante al desarrollo de la regla de cálculo, venerable instrumento que durante muchos años fue para algunos de nosotros la “máquina” primaria para llevar a cabo cálculos complejos). En 1642, Blaise Pascal inventó la primera “sumadora” real, parecida a las calculadoras mecánicas que se popularizarian en nuestros años sesenta. Se trataba de una compleja combinación de ruedas, engranajes y ventanas a través de las cuales aparecían los números. A finales del siglo XVII, otro famoso matemático, Gottfried Leibnitz, desarrolló una máquina parecida, pero más avanzada; podía sumar, restar, multiplicar y dividir mecánicamente, e incluso sacar raíces cuadradas.
A pesar de la ingeniosidad de estos planteamientos mecánicos, hasta 1820 no se pudo disponer de la tecnología que permitiera la aparición de las primeras máquinas comerciales capaces de efectuar las cuatro operaciones matemáticas básicas. Esta es una constante en la historia de las máquinas de calcular, el decalaje existente entre los diseños originales y las disponibilidades tecnológicas para llevarlos a la práctica. En la máquina de Leibnitz, se produce un avance respecto al ábaco, puesto que el algoritmo esta ya incorporado en la propia estructura de la máquina y además respecto a la de Pascal supone un incremento en flexibilidad, pues el usuario puede seleccionar, la operación que desea llevar a cabo. Sin embargo, en su tiempo no pasaron de ser meras curiosidades, sin posibilidad de aplicación práctica.
Las tarjetas perforadas y los computadores mecánicos
A comienzos del siglo XIX se producen aportaciones, curiosamente ligadas a la resolución de problemas de naturaleza no numérica. En 1801, Joseph Jacquard, inventó un telar controlado mediante instrucciones almacenadas según un código representado en tarjetas perforadas; de esta forma, el algoritmo que segue la máquina podrá cambiarse fácilmente para conseguir un dibujo distinto sobre la tela. La máquina de Jacquard incorporó varios elementos básicos que constituyen los computadores actuales.
La idea de usar en tarjetas perforadas, para guardar tanto números como instrucciones datos indujo, en 1835, a Charles Babbage, a inventar un computador digital matemático de tipo mecánico que recibió el nombre de máquina analítica. Babbage utilizó las tarjetas perforadas para programar su máquina, que podía utilizar los resultados de un cálculo como entrada del siguiente y que era capaz de manejar cálculos repetitivos, que más adelante llamaremos bucles. Un logro, aun más significativo, de la máquina analítica fue que, en vez de seguir las instrucciones del programa en la secuencia prefijada, podía saltar de una a otra (los programadores actuales hablamos de bifurcaciones condicionales). Aunque los computadores actuales están basados en muchos de los principios que Babbage utilizó, en su tiempo no existía ningún procedimiento que pudiera mover su cada vez más complejo artilugio mecánico. Una vez más, la tecnología no era la adecuada para el desarrollo teórico propuesto y el trabajo de Babbage se saldó con un fracaso, sólo mitigado por el apoyo de Ada Lovelace, hija de Lord Byron, considerada como la primera programadora de la historia y en cuyo honor el lenguaje de programación ADA lleva su nombre.
El concepto de la tarjeta perforada para almacenar programas y datos llegó a prender, y Herman Hollerith para procesar el censo de 1890 en EEUU la recuperó con notable éxito (consiguió un ahorro de tiempo de varios meses) al incorporarla a máquinas alimentadas eléctrica y no mecánicamente. Hollerith puso las bases de
Otro avance tecnológico posterior, los circuitos integrados , permitieron integrar en un único sustrato de silicio cientos de transistores (actualmente esta integración es ya del orden de millones, en los llamados chips^2 ), con lo que quedaron sentadas las bases de los computadores actuales. A pesar de que quedaban muchos problemas por resolver, a principios de los años sesenta, las ideas y las tecnologías estaban ya maduras y se trataba de seguir una evolución, cuyos resultados no han dejado de sorprendernos hasta ahora. El computador es uno de los elementos claves de la actual revolución científico-industrial y su papel, en la historia de la humanidad, no será menor que el que jugaron en su día, la rueda, el motor de explosión o la energía nuclear.
John von Neumann^3 (1903-1957), que había colaborado en el diseño de varios computadores durante la Segunda Guerra Mundial, publica en 1946 un artículo que esboza los principios generales de diseño de un computador en su sentido actual:
De esta forma el programa pasa a estar “dentro” del computador, y así el cambio de un programa a otro sólo implica un cambio en el valor de posiciones de memoria, en contraposición con lo hecho hasta la fecha que requería cambios manuales de clavijas. Estos principios, enriquecidos con importantes aportaciones tecnológicas,
(^2). La forma que adoptan estos circuitos encapsulados con sus conectores, los asemeja a las pulgas ( chip en inglés), por lo que esta denominación es la que ha terminado por imponerse.
(^3) Von Neumann y sus colaboradores describieron una máquina constituida por dos órganos, uno constituido por
las unidades de control, de aritmética y de entrada salida y otro formado por la memoria. En esta máquina la memoria ocupaba 4096 palabras o posiciones de memoria cada una de 40 bits. Cuando una palabra se interpretaba como dato, estos 40 bits representaban un número en notación binaria y cuando lo hacía como instrucción, cada palabra contenía 2 instrucciones de 20 bits. Los datos eran todos enteros y las operaciones aritméticas que podía efectuar eran suma, resta, multiplicación, división y valor absoluto, de forma que el resultado de cualquiera de ellas se situaba en un registro llamado acumulador. A cada posición de memoria podía asignársele el valor contenido en el acumulador, de forma que se reemplazaba el valor anterior almacenado en esta posición de memoria. El flujo de control del programa era el de pasar de una instrucción a la siguiente, pudiendo ser interrumpida esta secuencialidad a través de un salto incondicional (goto) de forma que la siguiente instrucción a ser ejectuada era la de la palabra de memoria que se mencionaba en la instrucción del salto incondicional.
se han mantenido vigentes hasta nuestros días en lo que llamamos máquina de von Neumann, y cuyo esquema general es el de la Figura 1.3.
Las unidades funcionales de una máquina de von Neumann son cinco: Unidad de Control (UC), Unidad Aritmético-Lógica (ALU), Unidad de Entrada , Unidad de Salida y Memoria (principal y secundaria). Por su disposición y función, se llama unidad de central de proceso (CPU = Central Process Unit) al conjunto formado por la UC y la ALU, donde reside la ‘inteligencia’ de la máquina, es decir, la capacidad de procesamiento de la información. La memoria es el lugar donde se almacenan los datos y las instrucciones de forma permanente o transitoria. Un vistazo al esquema de la Figura 1.3., justifica que llamemos periféricos al conjunto de unidades de E/S y de memoria masiva ó auxiliar.
Fig. 1.3 Esquema de una máquina de von Neumann
Veamos ahora con más detalle las unidades funcionales:
UNIDAD DE ENTRADA (E). Son los dispositivos por donde se introducen los datos e instrucciones. En estas unidades se transforman las informaciones de entrada, en señales binarias de naturaleza eléctrica. Son unidades de entrada: el