Está en la página 1de 143

Gua 1

Pgina 1 de 19

COMPUTACIN
Teora
Algoritmo

Gua N 1

En trminos generales, la Computacin, o tambin llamada Informtica, es la disciplina que busca establecer una base cientfica para resolver problemas mediante computadoras. Un algoritmo es un conjunto finito de instrucciones ejecutables, no ambiguas, que dirige a una actividad que termina o resuelve un problema en tiempo limitado. Por ejemplo, hay algoritmos para construir aeroplanos a escala (expresados en forma de hojas de instrucciones), para tocar msica (en forma de partituras) para preparar platos de cocina (en forma de recetas), etc. En el mbito de los equipos de computacin, los algoritmos se representan como programas dentro de las computadoras, que reciben colectivamente el nombre de software (a diferencia del equipo en s, que constituye el hardware). Para que una mquina efecte una tarea, primero debemos disear un algoritmo para llevarla a cabo y luego programarlo en la mquina. Una de las principales labores en el campo de la Computacin consiste en el desarrollo de algoritmos, por lo que una parte importante de esta ciencia se ocupa de cuestiones relacionadas con esta tarea. El estudio de los algoritmos comenz como un tema de matemticas, mucho antes de que se inventaran las computadoras actuales, y su principal objetivo era descubrir un conjunto nico de instrucciones para resolver cualquier problema de un cierto tipo; as, una vez descubierto un algoritmo para efectuar una tarea, la realizacin de sta ya no requerira entender los principios en que se basa el algoritmo, sino tan slo seguir las instrucciones. En cierto sentido, la inteligencia requerida para llevar a cabo la tarea est codificada en el algoritmo. Por ejemplo, uno de los primeros algoritmos formalizados es el de Euclides, para obtener el mximo comn divisor de dos enteros positivos: Considerar los nombres M, N y R para designar valores enteros positivos (los valores asociados a estos nombres cambiarn durante la ejecucin del algoritmo), y seguir los siguientes pasos: Obtener el nmero mayor y llamarlo M. Obtener el nmero menor y llamarlo N. Dividir M entre N y asignar el valor del resto a R. Si R es 0 seguir por el paso 8. Asignar a M el valor de N. Asignar a N el valor de R. Seguir por el paso 3. El mximo comn divisor de los valores originales de M y N es el actual valor de N. Terminar Como puede verse en el algoritmo precedente, no hace falta comprender por qu el procedimiento produce el resultado deseado, sino que basta con seguirlo. Pero para crear un algoritmo bsicamente hay que: Plantear bien el problema a resolver, establecer los recursos que se necesitarn para resolverlo (en este caso, nombres para designar valores numricos, verificando cules de ellos estarn asociados a valores que deben ingresar al algoritmo, cules a valores intermedios o de procesamiento, y cules a valores resultantes) Seguir alguna estrategia para encontrar y desarrollar la solucin (como por ejemplo individualizar, aislar y ordenar las distintas actividades para conseguir una solucin) Comprobar que la solucin obtenida es buena (para este ejemplo, seguir el algoritmo con varios pares de nmeros para los que se conoce o infiere fcilmente cul es su mximo comn divisor).
Lic. Servetto Ing. Jimnez Rey 75.01 Computacin

Gua 1

Pgina 2 de 19

Alcance de la Computacin
Se puede apreciar el alcance de la computacin o informtica, considerando algunos de sus objetos de estudio desde el punto de vista de los algoritmos: Descubrimiento de algoritmos (descubrir un algoritmo para resolver un problema equivale, en lo esencial, a descubrir una solucin para ese problema). Los estudios de esta rama de la informtica, denominada Algoritmia, se apoyan en reas como la psicologa humana de la resolucin de problemas y las teoras de la educacin. Una vez descubierto un algoritmo para resolver un problema, se debe representar de manera que se lo pueda comunicar a una mquina o a otras personas. Se debe transformar el algoritmo conceptual en un conjunto claro de instrucciones y representar estas ltimas sin ambigedad. Los estudios que se ocupan de esto se basan en conocimientos del lenguaje y la gramtica, y han dado lugar a un gran nmero de esquemas para representar algoritmos, llamados lenguajes de programacin, fundados en diversos enfoques del proceso de programacin, llamados paradigmas de programacin (v.g. programacin imperativa, programacin funcional, programacin lgica, programacin orientada a objetos). En general, la estructura algortmica de los grandes sistemas automatizados se debe guiar por un proceso de ingeniera similar al de las mquinas mismas. Por otra parte, en muchos casos, como en los entornos comerciales, en el desarrollo y elaboracin de programas no hace falta descubrir algoritmos radicalmente nuevos; ms bien, el problema principal consiste en identificar qu sistemas automatizados se necesitan y cmo estos nuevos sistemas van a interactuar con los ya existentes. La combinacin de estas dos problemticas ha dado origen a la rama de la informtica conocida como Ingeniera de Software. Otra rama importante de la informtica se ocupa del diseo y la construccin de mquinas, pero no con el objetivo de dominar los detalles de la realizacin de las mquinas actuales con circuitos electrnicos, puesto que esto es responsabilidad de la ingeniera electrnica, sino para comprender lo suficiente la tecnologa de hoy de manera de apreciar sus ramificaciones y su influencia sobre el desarrollo de la informtica. De esto se ocupa una rama de la informtica conocida generalmente bajo la denominacin de Arquitectura de Computadoras. Algo ntimamente relacionado con el diseo del equipo de cmputo es el diseo de la interfaz entre una mquina y el mundo exterior: la forma en que se insertan los algoritmos en una mquina, la forma en que se le indica a la mquina qu algoritmo debe ejecutar, etc. La resolucin de tales problemas en un entorno en el que se espera que la mquina suministre muy diversos servicios implica la coordinacin de actividades y la asignacin de recursos, temas que se estudian en la rama de la informtica dedicada a los Sistemas Operativos. La comunicacin entre mquinas y los problemas inherentes se estudian en una rama a menudo considerada en conjunto con la anterior, denominada Redes de Teleprocesamiento y Comunicacin de Datos. Un tema de singular importancia en el campo de la informtica tiene que ver con el almacenamiento y recuperacin de los datos en los sistemas de cmputo, y la combinacin de tcnicas para obtener sistemas de almacenamiento masivos centralizados que puedan dar la apariencia de tener una gran cantidad de organizaciones apropiadas para varias aplicaciones. Este tipo de problemas se estudian en la rama de la informtica que se ha dado en llamar Bases de Datos. Las tareas que se exigen a las mquinas requieren cada vez ms inteligencia, y es por ello que la informtica ha recurrido al estudio de la inteligencia humana como gua. La rama de la informtica, conocida como Inteligencia Artificial, se basa en gran medida en investigaciones de campos como la psicologa, la biologa y la lingstica para disear algoritmos que imiten el razonamiento y la percepcin de la mente humana.

Programacin de Computadoras
Como un programa es un algoritmo representado para que pueda ejecutarlo una computadora, desarrollar un programa implica descubrir la solucin al problema que debe resolver el programa, es decir, descubrir el algoritmo, y luego representarlo en forma de programa. La actividad ms importante y difcil en el proceso de creacin de software es descubrir los algoritmos, por lo que la algoritmia debe basarse necesariamente en el proceso de resolucin de problemas, un proceso imaginativo y artstico cuyas fases, definidas a grandes rasgos por el matemtico G. Polya a fines de los aos cuarenta siguen siendo los principios en que se basan los mtodos actuales para resolver problemas.
Lic. Servetto Ing. Jimnez Rey 75.01 Computacin

Gua 1

Pgina 3 de 19

Las fases de Polya para resolver problemas son: Entender el problema. Idear un plan para resolver el problema: determinar los recursos para resolver el problema y cmo utilizarlos. Llevar a cabo el plan: emplear una estrategia para resolver el problema. Evaluar la solucin en cuanto a su exactitud y a su potencial como herramienta para resolver otros problemas. Estas fases no tienen por qu seguirse linealmente, sino ms bien deben completarse en algn momento durante el proceso de resolucin, que en general implica repasar una y otra vez las fases en forma evolutiva, retrocediendo algn paso de ser necesario, hasta que la solucin sea satisfactoria.
Proceso de Resolucin de un Problema cualquiera

Para la creacin de programas, las fases anteriores pueden traducirse a: Fase de anlisis: entender el problema y definirlo claramente. Fase de diseo o algortmica: pensar cmo un procedimiento algortmico podra resolver el problema, determinar los recursos a utilizar y desarrollar y probar el algoritmo. Fase de codificacin o de programacin: representar el algoritmo en forma de programa. Fase de evaluacin: evaluar el programa en cuanto a su exactitud y a su potencial como herramienta para resolver otros problemas (probar y depurar el programa).

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua 1 Proceso de Construccin de un Programa (Esquema General)

Pgina 4 de 19

La estrategia ms comn para desarrollar algoritmos es la denominada divide y vencers, que consiste en descomponer el problema principal en una lista de problemas ms simples, que a su vez se siguen descomponiendo hasta llegar a un nivel en que los problemas sean resolubles por acciones simples de la computadora. Este proceso se denomina de refinamientos sucesivos, y es similar al que se emplea para escribir artculos o libros partiendo de borradores; para la programacin, tambin se lo llama de diseo descendente, porque parte de ideas generales y desciende hasta los detalles. El resultado de los refinamientos sucesivos es un conjunto de instrucciones paso a paso que, al completarse, resuelve el problema original, o sea, es un algoritmo, expresado en trminos de acciones esenciales llamadas primitivas de programacin no ejecutables, en un lenguaje hbrido entre un lenguaje de programacin y un lenguaje natural llamado pseudocdigo, o cdigo de documentacin interna de programas. Los enunciados de problemas a resolver, en cualquier nivel de refinamiento, deben observar la definicin de algoritmo: deben ser ejecutables por una computadora, y ser no ambiguos. Respecto a las capacidades de las computadoras, se analizan enseguida, y en cuanto a la no ambigedad, para que se cumpla este precepto es imprescindible que los enunciados sean libres de contexto, es decir, que sean autocontenidos (independientes de cualquier otro enunciado) y que se interpreten de una nica manera posible.

Capacidades de una Computadora


Es gracias a la capacidad de capturar y comunicar inteligencia mediante algoritmos que se pueden construir mquinas cuyo comportamiento simula inteligencia; as pues, el nivel de inteligencia que exhiba una mquina estar limitado por la inteligencia que se le pueda comunicar mediante programas. Si se puede hallar un algoritmo que resuelva un problema o dirija una actividad, se puede entonces construir una mquina para que la lleve a cabo programndole el algoritmo (siempre que la tecnologa lo permita); pero si no se cuenta con un algoritmo para realizar una tarea, la ejecucin de sta quedar excluida de la capacidad de cualquier mquina, por ms poderosa y moderna que sea. Para que una mquina pueda ejecutar algoritmos basta que pueda: Recibir entradas (aceptar informacin que le proporcione el usuario) Almacenar y recuperar informacin (mover y almacenar informacin en su memoria interna o en dispositivos de almacenamiento masivo) Procesar informacin (llevar a cabo operaciones aritmticas o lgicas -toma de decisiones- con la informacin) Producir salidas (proporcionar informacin al usuario)
Lic. Servetto Ing. Jimnez Rey 75.01 Computacin

Gua 1

Pgina 5 de 19

En el proceso de datos con cualquier computadora se realizan los siguientes procesos:

Por lo tanto, para que los enunciados de la solucin de un problema se puedan convertir en un programa, slo pueden referirse a alguna de estas actividades. Cada una de estas actividades se asocia a dispositivos de hardware especficos de la computadora. Los dispositivos de entrada aceptan entradas del exterior de la computadora. El dispositivo ms comn es el teclado QWERTY (llamado as por la primera fila de teclas de letras), aunque las computadoras pueden aceptar seales de entrada de muchos otros dispositivos como los dispositivos apuntadores: ratones (mice), bolas rastreadoras (trackballs), palancas de mando (joysticks), o dispositivos de lectura: lectoras pticas de cdigos de barra o de caracteres, para leer cdigos universales de productos (UPC: universal product codes) o efectuar reconocimiento ptico de caracteres (OCR: optical character recognition) respectivamente. La memoria central y los dispositivos de almacenamiento sirven para almacenar la informacin y los programas o conjunto de rdenes para que la computadora mueva, almacene, produzca, acepte o proporcione informacin. Se emplean diferentes tipos de memoria para tareas de almacenamiento a corto o largo plazo; as, en la memoria central se almacenan o cargan los programas que la computadora deba ejecutar de inmediato y la informacin necesaria para ejecutar cada orden o instruccin del programa en su oportunidad; y en la memoria auxiliar o masiva, representada por los dispositivos de almacenamiento (los dispositivos de almacenamiento ms comunes son los discos rgidos, los disquetes, los discos compactos y las cintas), se almacenan programas e informacin en forma permanente para su libre disponibilidad en cualquier momento. Metafricamente, se podra decir que la memoria central es el escritorio de trabajo de la computadora, y que los dispositivos de almacenamiento son sus bibliotecas o repositorios de programas e informacin. Un procesador o unidad central de procesamiento (UCP) (en ingls CPU), es el dispositivo que procesa informacin, llevando a cabo todos los clculos aritmticos y tomando decisiones bsicas con base en los valores de la informacin y conforme a las rdenes de un programa. La UCP es, de hecho, el cerebro de la computadora. Los dispositivos de salida envan informacin al exterior de la computadora. Los dispositivos ms comunes son monitores e impresoras. Los monitores, tambin llamados monitores de vdeo o pantallas de vdeo (VDT: video display terminal) no slo sirven para que la computadora exhiba informacin al mundo exterior sino tambin para que el usuario vea los caracteres que est ingresando a la computadora al momento de teclearlos; en ambos casos, se dice que la informacin presentada es de copia efmera (soft copy), puesto que slo puede visualizarse mientras se encuentre representada en la pantalla, y se los clasifica como dispositivos de copia efmera. Los monitores pueden ser de tubos de rayos catdicos (CRT: cathode ray tube) o de pantalla plana de cristal lquido (LCD: liquid crystal display). Las impresoras permiten obtener copias fsicas en papel de cualquier informacin, por lo que la informacin que producen es de copia permanente (hard copy); as es que desde el punto de vista de la informacin que presentan, las impresoras se clasifican como dispositivos de copia permanente. Hay muchas variedades de impresoras, pero todas corresponden a dos grupos bsicos: de impacto (de lneas o caracteres, y de matriz de puntos) y de no impacto (lser y de inyeccin de tinta).

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua 1

Pgina 6 de 19

Componentes de Hardware asociados a las Capacidades de la Computadora

Modelo de un Programa Tipo


En general, la solucin de cualquier problema por parte de una computadora responde a un esquema tipo. Como la planificacin de la solucin implica la determinacin de recursos a utilizar, todo programa consta de una seccin declarativa en la que se designan y definen los recursos que se emplean en el programa. Todos los valores que se van a procesar en el programa deben tener un nombre y un dominio, como las variables de una funcin matemtica, de ah que los recursos fundamentales de los programas se denominen precisamente variables. Tambin se puede hacer referencia a valores determinados que se usen recurrentemente en un programa mediante un nombre, como por ejemplo pi o e, para lo cual se deben definir como recursos denominados constantes, a los que tambin se les asigna un nombre, y como dominio un valor constante. Luego de determinados los recursos principales a emplear en la solucin de un problema en forma de programa, sigue el desarrollo de la solucin mediante refinamientos sucesivos. Por tanto, todo programa consta de una segunda seccin llamada seccin algortmica o de cdigo, en la que se procede a descomponer el problema a resolver en subproblemas de menor complejidad, representados por enunciados. Esta descomposicin se efecta en sucesivos pasos que determinan enunciados jerrquicamente dependientes de los anteriores, hasta llegar a enunciados de acciones esenciales o primitivas. La jerarquizacin de los enunciados se denota mediante el sangrado; de este modo, un programa se puede visualizar como un texto con enunciados con distintas sangras segn su nivel de refinamiento. Como todo programa debe quedar representado en un texto, el desarrollo de programas se hace trabajando en un editor de textos; de manera que refinar la solucin de un problema implica simplemente abrir lneas debajo de su enunciado, y con un nivel de sangrado mayor a su enunciacin, descomponerlo en una lista de enunciados de problemas ms simples. Cuando todo problema a resolver por un programa haya quedado reducido a enunciados de acciones primitivas, para concluir con la fase algortmica se debe efectuar una prueba del algoritmo: se asignan distintos valores testigo a los datos que debe procesar, y se verifica que los resultados a obtener sean correctos. La formalizacin de un programa o programacin del algoritmo que soluciona un problema implica un ltimo refinamiento expresando las acciones primitivas no ejecutables con la sintaxis del lenguaje de programacin para obtener las primitivas de programacin ejecutables. Entonces, los enunciados que realmente ejecutar la computadora sern los de la ltima jerarqua de cada problema.
Lic. Servetto Ing. Jimnez Rey 75.01 Computacin

Gua 1

Pgina 7 de 19

Una primera descomposicin de cualquier problema a resolver con un programa puede asimismo considerarse como un modelo o tipo. En general, en todo programa se debe efectuar una presentacin de su objetivo y, eventualmente, condiciones o limitaciones para su ejecucin al usuario que lo ejecute, y preparar los recursos o datos para resolver el problema. Esta primer parte de todo programa se puede denominar prlogo. Luego se debe proceder a la resolucin del problema en s, en una segunda parte, el verdadero cuerpo del programa, que se puede denominar resolucin. Finalmente, en la mayora de los programas se debe exhibir resultados, por lo que en general aparecer una tercera parte o eplogo.
Modelo de un Programa Tipo

{SECCIN DECLARATIVA} {Definicin del Objetivo} {Definicin de Recursos} {SECCIN ALGORTMICA} {Desarrollo de la Solucin} {Prlogo} {Resolucin} {Eplogo}

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua 1 Proceso de Construccin de un Programa (Esquema Detallado)

Pgina 8 de 19

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua 1

Pgina 9 de 19

COMPUTACIN
Prctica

Gua N 1

La seccin declarativa de un programa en Pascal comienza con la palabra clave program, seguida del nombre de fantasa con que se quiera designar al programa. {SECCIN DECLARATIVA} {Definicin del Objetivo} program <nombre del programa>* ;
*se usarn los parntesis angulares para denotar que en ese punto del programa, el programador debe escribir un identificador elegido por l.

Los recursos en la seccin declarativa del programa deben definirse agrupados por clase. En general, primero se declaran las constantes, precedidas por la palabra clave const, y luego las variables, precedidas por la palabra clave var. En principio, se usarn constantes y variables con dominios enteros, reales y de caracteres, que en lenguaje Pascal se denominan Integer, Real y Char, respectivamente. Para definir constantes, se debe especificar nombre y valor separados por el signo igual (=), y para definir variables, se debe especificar nombre y dominio separados por dos puntos (:). {SECCIN DECLARATIVA} {Definicin del Objetivo} Program <nombre del programa> ; {Definicin de Recursos} Const <nombre de la constante> = <valor> ; Var <nombre de la variable> : <dominio> ; {comentario}**
** es necesario incluir comentarios entre llaves que describan el significado de cada una de las variables utilizadas en el programa

Si se debe definir ms de una variable con el mismo dominio, se pueden especificar todos sus nombres separados por una coma. Por ejemplo: Var radio, superficie: Real ; {representan el radio y la superficie del crculo, respectivamente} Para escribir valores reales, se debe separar con un punto la parte entera de la parte fraccionaria. Por ejemplo: Const Pi = 3.141592653589 ; Para que la mquina pueda distinguir el valor de un carcter de un nombre de constante o variable, los valores constantes de caracteres se deben delimitar con una comilla simple; as, por ejemplo, en un programa el carcter e (como valor de una constante), se distingue del nombre de una constante llamada de igual forma, denotndolo e. Const <nombre de la constante> = e ; e = <valor> ; Los nombres de programas, constantes y variables (en general, de cualquier recurso) denominados identificadores, deben comenzar indefectiblemente con una letra, y pueden incluir letras (excepto y vocales acentuadas), dgitos y el carcter de subrayado. Los identificadores utilizados en un programa deben
Lic. Servetto Ing. Jimnez Rey 75.01 Computacin

Gua 1

Pgina 10 de 19

ser todos distintos entre s. Las convenciones comunes para designar una variable, por ejemplo, para representar el radio de un crculo son: radio, radio1, radioCirculo o radio_circulo. En los enunciados del lenguaje Pascal, es indistinto usar maysculas o minsculas, ya sea en los enunciados o en los nombres de recursos; no as en los valores constantes de caracteres. Por ejemplo, en un programa, las palabras PI, pi y Pi sern reconocidas como el mismo nombre, y en cambio los valores A y a sern considerados distintos. Tambin es equivalente declarar una variable con dominio Real, REAL o real. Los enunciados algortmicos, producto del desarrollo por refinamientos sucesivos del algoritmo que se programa, como no son ejecutables por la computadora, deben marcarse o delimitarse como no ejecutables. Para esto, Pascal permite encerrar entre llaves ({}) cualquier enunciado o comentario que quiera hacerse dentro del programa y en cualquier parte del programa. Estos enunciados o comentarios se denominan enunciados de documentacin interna, ya que precisamente cumplen esa funcin: implican la documentacin del desarrollo del programa y sirven para que cualquier programador que lea el texto del programa pueda comprenderlo y seguirlo sin mayor dificultad, es decir, contribuyen a hacer los programas ms legibles sin afectar la ejecucin. Los enunciados propios del lenguaje, ya sean de definicin del objetivo o de definicin de recursos de la seccin declarativa o sean de desarrollo de la solucin de la seccin algortmica, que son ejecutables por la computadora, deben estar delimitados unos de otros para que la mquina pueda individualizarlos. El delimitador principal de enunciados propios del lenguaje es el punto y coma (;). Para agrupar enunciados existen dos delimitadores especiales para denotar el principio y el fin de la secuencia: Begin y End, respectivamente. Por ejemplo, todos los enunciados de la seccin algortmica o de cdigo deben estar separados entre s por el punto y coma y deben estar comprendidos entre los delimitadores Begin y End ; toda la seccin algortmica o de cdigo debe terminarse con un punto final (.).
Estructura genrica de un Programa Pascal

end. {SECCIN DECLARATIVA} {Definicin del Objetivo} Program <nombre> ; {Definicin de Recursos} Const <nombre de la constante> = <valor> ; Var <nombre de la variable> : <dominio> ; {SECCIN ALGORTMICA} {Desarrollo de la Solucin} Begin {Prlogo} {Resolucin} {Eplogo} End .

Estructuras de Secuenciacin
La seccin algortmica de un programa Pascal constituye el cuerpo principal del programa y comienza con la palabra clave begin y termina con la palabra clave end y el punto final (.).
Lic. Servetto Ing. Jimnez Rey 75.01 Computacin

Gua 1

Pgina 11 de 19

Para desarrollar la solucin de un problema mediante la escritura de un programa, en la seccin algortmica del programa, comnmente se emplean: enunciados o sentencias de asignacin, o enunciados o sentencias de obtencin de datos desde el teclado (operacin de entrada o de lectura), para instanciar (darle valor a) una variable, y enunciados o sentencias para la exhibicin de resultados en pantalla (operacin de salida o de escritura). Estos enunciados se clasifican como enunciados, sentencias o estructuras de control de secuenciacin porque cuando aparecen uno despus del otro en la seccin algortmica del programa deben ejecutarse siempre una vez en el orden de secuencia en que se presenten.

Enunciados de Asignacin
Para asignar (almacenar) directamente un valor o el resultado de una expresin aritmtica a una variable, se utiliza una sentencia o enunciado de asignacin y se escribe el nombre de la variable y el valor o expresin, separados por los caracteres correspondientes a dos puntos e igual consecutivos (:=). Por ejemplo: superficie := Pi * radio * radio; Esta sentencia de asignacin permite almacenar en la posicin de memoria correspondiente a la variable denominada superficie (a la izquierda del smbolo de asignacin) el valor obtenido como resultado del clculo de la expresin aritmtica a la derecha del smbolo de asignacin. Tanto la variable superficie como el resultado de la evaluacin de la expresin aritmtica deben pertenecer al mismo dominio de valores.

Enunciados de Lectura
Para hacerle corresponder a una variable un valor que se obtiene desde el teclado, se emplean los enunciados Read (leer) y ReadLn (leer lnea), con el nombre de la variable encerrado entre parntesis como argumento. Por ejemplo: Read ( radio ); ReadLn ( radio ); La diferencia entre ambos es que el primero, al ejecutarse, no detiene la ejecucin del programa ni requiere la pulsacin de la tecla Enter () para formalizar el ingreso de un valor, mientras que el segundo s. Cuando se ingresa uno o ms valores desde el teclado en respuesta a la ejecucin de un enunciado ReadLn (que puede incluir uno o ms enunciados Read diferidos), sus representaciones aparecen reproducidas en la pantalla y posteriormente el cursor (indicador de posicin actual en pantalla, o en ingls: current position indicator) se ubica al comienzo de la prxima lnea de la pantalla. Por ejemplo: A solicitud del programa, el usuario ingresa como valor del radio 7.5 y el valor tipeado se visualiza en pantalla 7. 5 Cuando el usuario pulsa la tecla Enter, el efecto de la ejecucin del siguiente enunciado del programa, ReadLn ( radio ) ; es que a la variable radio se le asocia el valor 7.5 tipeado y el cursor se ubica al principio de la siguiente lnea de la pantalla, visualizndose 7. 5 _ Se puede ingresar valores para ms de una variable usando un mismo enunciado, tan slo separando los nombres de las variables con una coma, y los valores a ingresar por teclado con uno o ms blancos (barra espaciadora). Por ejemplo: Si se desea obtener desde el teclado una serie de valores reales mediante las sentencias ReadLn(valor1, valor2); ReadLn(valor3); Y el usuario tipea
Lic. Servetto Ing. Jimnez Rey 75.01 Computacin

Gua 1

Pgina 12 de 19

7.5 4.3 6.8 9.3 3.7 La computadora lee el valor 7.5 y lo almacena en la posicin de memoria asociada a la variable valor1, luego lee el valor 4.3 y lo almacena en la posicin de memoria asociada a la variable valor2; como se trata de una sentencia ReadLn ignora los siguientes valores de la lnea , es decir, 6.8 y 9.3 y avanza a la siguiente lnea, ejecuta la siguiente sentencia y almacena el valor 3.7 en la posicin de memoria asociada a la variable valor3. Por lo tanto, el resultado es: Valor1 = 7.5 Valor2 = 4.3 Valor3 = 3.7 Pero si se desea obtener desde el teclado la misma serie de valores reales mediante las sentencias Read(valor1, valor2); ReadLn(valor3); la computadora lee el valor 7.5 y lo almacena en la posicin de memoria asociada a la variable valor1, luego lee el valor 4.3 y lo almacena en la posicin de memoria asociada a la variable valor2; como se trata de una sentencia Read no avanza a la siguiente lnea y ejecuta la siguiente sentencia, por lo cual se almacena el valor 6.8 en la posicin de memoria asociada a la variable valor3. Por lo tanto, el resultado es: Valor1 = 7.5 Valor2 = 4.3 Valor3 = 6.8 Se puede comprender mediante el anlisis anterior la diferencia fundamental entre las sentencias Read y ReadLn. Si se desea diferir el ingreso de varios valores hasta un punto del programa en el que no se requiere el ingreso de ningn valor adicional, se puede usar el enunciado ReadLn sin ningn argumento, es decir, ReadLn ; para detener la ejecucin del programa, es decir, para provocar una interrupcin o generar una pausa en la ejecucin del programa.

Enunciados de Escritura
Para exhibir valores o resultados de expresiones aritmticas en la pantalla, se emplean los enunciados Write (escribir) y WriteLn (escribir lnea), con el valor constante, nombre de constante o variable, o expresin aritmtica encerrado entre parntesis como argumento. Por ejemplo: Write (Pi), WriteLn(superficie); WriteLn(Pi * radio * radio); La diferencia entre ambos enunciados, Write y WriteLn, es que si se usa el primero, luego de exhibido el valor o valores involucrados, el cursor queda al final del ltimo carcter exhibido; en cambio, si se usa el segundo, el cursor se ubica al comienzo de la siguiente lnea de la pantalla de salida o ventana de impresin. Por ejemplo, si el valor de la variable superficie fuera: Superficie = 24 Y se ejecuta Write (superficie), se visualizara en pantalla 24_ En cambio, si se ejecuta WriteLn (superficie), se visualizara en pantalla 24 _

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua 1

Pgina 13 de 19

Tambin se puede usar un mismo enunciado para exhibir ms de un valor, separando las representaciones con comas. Por ejemplo: Write (superficie1, , superficie2); WriteLn (superficie1, , superficie2); Cuando se use un mismo enunciado para exhibir ms de un valor o resultado, se debe tener en cuenta que todos los valores aparecern en la misma lnea de la pantalla o ventana, sin ninguna separacin o delimitacin entre ellos, por lo que a efectos de obtener exhibiciones prolijas de resultados (entendibles por el usuario) se deben escribir espacios delimitadores como valores explcitos. Por ejemplo, si los valores de las variables fueran: Superficie1 = 24 Superficie2 = 32 Y se ejecuta Write (superficie1, ,superficie2); se visualizara en pantalla 24 32_ En cambio, si se ejecuta WriteLn (superficie1, ,superficie2); se visualizara en pantalla 24 32 _ Si se desea que el cursor se desplace al comienzo de la prxima lnea de la pantalla o ventana, se puede usar el enunciado WriteLn sin ningn argumento. El efecto de la ejecucin de este enunciado es dejar una lnea en blanco en la pantalla de salida. Un inconveniente o peculiaridad de los enunciados de exhibicin de valores, es que en caso de que los valores sean reales, su representacin en pantalla resultar en notacin cientfica; por ejemplo, el valor 2079.45 se exhibira aproximadamente como 2.07945e003. Para evitar esto y editar la escritura de valores reales, a continuacin del nombre de constante o variable cuyo valor se desea exhibir, o a continuacin del valor constante o expresin encerrado entre parntesis a exhibir, se puede especificar la cantidad de caracteres con que representar el valor y la cantidad de dgitos decimales a emplear delimitadas por dos puntos. As, para que el valor de una variable llamada radio resulte exhibido con diez caracteres y cinco decimales debera escribirse Write ( radio:10:5 ) y si el radio resultara igual a 12.45673976 se visualizara por pantalla --12.45673 donde los guiones (--) representan espacios en blanco. Si los valores a exhibir no completaren la cantidad de espacios especificada, quedaran justificados a derecha (con blancos a la izquierda hasta completar la cantidad de caracteres estipulada). Y para que la superficie de un crculo con radio representado por la misma variable se exhiba de la misma forma debera escribirse Write ( (radio*radio*Pi):10:5 ). Como los enunciados de ingreso de valores desde teclado no tienen otro efecto que tomar propiamente los datos, es necesario advertir al usuario lo que el programa espera antes de usar uno de estos enunciados. Por tanto, es norma que los enunciados de lectura siempre estn precedidos por otros de escritura, especificando al usuario qu dato o datos debe ingresar. Por ejemplo: Write ( Ingrese el radio del crculo: ); ReadLn ( radio );

Ejemplo de programa para calcular la superficie de un crculo


Enunciado
Desarrollar un programa en lenguaje Pascal que solicite al usuario el ingreso desde el teclado del valor del radio de un crculo (nmero fraccionario) e informe por pantalla el resultado del clculo de la superficie del crculo. Considerar que el usuario no comete error de tipeo al ingresar el dato.
Lic. Servetto Ing. Jimnez Rey 75.01 Computacin

Gua 1

Pgina 14 de 19

Solucin
{SECCIN DECLARATIVA} {Definicin del Objetivo} Program SuperficieCirculo; {notar que el identificador elegido como nombre del programa no contiene vocales acentuadas} {Programa que calcula la superficie de un crculo} {notar que los comentarios pueden contener palabras acentuadas} {Autores: Lic. Servetto - Ing. Jimnez Rey} {Versin: 1.0. Marzo de 2007.} {Definicin de Recursos} Uses Crt; Const Pi = 3.1415926589 ; Var radio, superficie: Real; {representan el radio y la superficie del crculo, respectivamente} {SECCIN ALGORTMICA} {Desarrollo de la Solucin} Begin {Prlogo} {Limpieza de Pantalla} ClrScr; {Presentacin del programa} WriteLn ( CLCULO DE LA SUPERFICIE DE UN CRCULO );
{al ejecutarse esta sentencia se escribe en la primera lnea de la pantalla de salida la secuencia de caracteres delimitada por las comillas simples y el cursor se posiciona al principio de la siguiente lnea}

WriteLn; {el cursor salta una lnea en la pantalla de salida} {Obtencin de valores desde el teclado} {Solicitud ingreso del valor del radio por pantalla} Write ( Ingrese el radio del crculo: ); {se reproduce en pantalla la secuencia de caracteres delimitada por las comillas
simples y el valor tipeado por el usuario}

{Asignacin del valor ingresado por teclado a la variable radio} ReadLn ( radio ); {se asocia a la variable radio el valor tipeado por el usuario y el cursor se
posiciona al principio de la siguiente lnea de la pantalla de salida}

{Resolucin} {Clculo de la superficie del crculo} superficie := Pi * radio * radio;

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua 1

Pgina 15 de 19

{se asigna a la variable superficie (a la izquierda del smbolo de asignacin) el valor calculado a travs de la expresin aritmtica (a la derecha del smbolo de asignacin} {Eplogo} {Exhibicin del resultado por pantalla} WriteLn; WriteLn( La superficie es , superficie:10:5 ); {se visualiza el valor de superficie notacin decimal fraccionaria con 5 dgitos decimales} {Anuncio de finalizacin del programa} WriteLn; WriteLn (Fin del Programa.); {Generacin de pausa} ReadLn {antes del delimitador end se puede omitir el delimitador punto y coma} End.

Resultado de la Ejecucin del Programa (Visualizacin en la pantalla de salida de Pascal para una
ejecucin del programa para valor del radio = 7.50) CLCULO DE LA SUPERFICIE DE UN CRCULO {lnea en blanco} Ingrese el radio del crculo: 7.50 {lnea en blanco} La superficie es 23.56194 {lnea en blanco} Fin del Programa. _ {el cursor queda titilando en la pantalla de salida en espera que el usuario pulse la tecla Enter ; este efecto permite al usuario leer el resultado que devuelve el programa antes de que Pascal vuelva a presentarle la pantalla de edicin}

Estructuras de Seleccin Simple


Supngase que se desea desarrollar un programa para el clculo de la superficie de un rectngulo. Como los cuadrados son casos especiales de rectngulos, para calcular la superficie de un cuadrado se puede usar el mismo programa desarrollado para calcular la superficie del rectngulo, pero para que en el caso de un cuadrado el programa solicite la longitud de un nico lado y no de dos, como en el caso general, se impone consultar al usuario sobre el caso a resolver y seleccionar o decidir por una de dos opciones. Para esto el lenguaje Pascal ofrece los enunciados, sentencias o estructuras de control de seleccin o decisin simple, cuyo empleo se ejemplifica a continuacin.

Enunciado
Desarrollar un programa en lenguaje Pascal que solicite al usuario el ingreso desde el teclado de los valores de los lados de un rectngulo (nmeros fraccionarios) e informe por pantalla el resultado del clculo de la superficie del rectngulo. Considerar que el usuario no comete error de tipeo al ingresar los datos.

Solucin
{SECCION DECLARATIVA} {Definicin del Objetivo} Program SuperficieRectangulo; {Programa que calcula la superficie de un rectngulo} {Autores: Lic. Servetto Ing. Jimnez Rey. Versin 1.0. Marzo de 2007}
Lic. Servetto Ing. Jimnez Rey 75.01 Computacin

Gua 1

Pgina 16 de 19

{Definicin de Recursos} Uses Crt; Var lado1, lado2, superficie: Real; {representan los lados y la superficie del rectngulo, respectivamente} cuadradoSN: Char; {representa la respuesta a la consulta al usuario por caso especial (N para rectngulo y S para cuadrado)} {SECCION ALGORITMICA} {Desarrollo de la Solucin} Begin {Prlogo} {Limpieza de Pantalla} ClrScr; {Presentacin del programa} WriteLn ( CLCULO DE LA SUPERFICIE DE UN RECTNGULO ); WriteLn; {Obtencin de valores desde el teclado} {Solicitud ingreso del valor de un lado por pantalla} Write( Ingrese la longitud de un lado: ); {Asignacin del valor ingresado por teclado a la variable lado1} ReadLn( lado1); WriteLn; {Solicitud ingreso respuesta del usuario consulta caso especial} Write( Desea calcular la superficie de un cuadrado? Responda S o N: ); {Asignacin del valor ingresado por teclado a la variable cuadradoSN} ReadLn(cuadradoSN ); {Asignacin de valor a la variable lado2} {Caso especial} lado2:=lado1; {Caso general} If cuadradoSN = N Then begin Write( Ingrese la longitud de otro lado adyacente: ); ReadLn( lado2) end; {Resolucin} {Clculo de la superficie del rectngulo o cuadrado} superficie:=lado1 * lado2; {Eplogo} {Exhibicin del resultado por pantalla}
Lic. Servetto Ing. Jimnez Rey 75.01 Computacin

Gua 1

Pgina 17 de 19

WriteLn; WriteLn( La superficie es, superficie:10:5 ) {Anuncio de finalizacin del programa} WriteLn; WriteLn (`Fin del Programa.); {Generacin de pausa} ReadLn End. La estructura utilizada contempla acciones especiales para una alternativa de las dos posibles.

Sintaxis
If <condicin> Then {la condicin result verdadera} Begin <sentencias> End; {fin de la estructura ifthen} donde condicin es una expresin lgica cuya evaluacin puede dar como resultado un valor verdadero o falso. Las expresiones lgicas en Pascal se forman comparando los valores de las expresiones utilizando los operadores relacionales o de comparacin y los operadores lgicos (ver Anexos al final de la Gua). Otra manera de resolver el mismo problema sera empleando otra forma de la estructura de seleccin simple que contempla acciones especficas para cada una de las dos alternativas. Para esto se reemplaza el siguiente segmento de programa: {Asignacin de valor a la variable lado2} {Caso especial} lado2:=lado1; {Caso general} If cuadradoSN = N Then begin Write( Ingrese la longitud de otro lado adyacente: ); ReadLn( lado2) end; por {Asignacin de valor a la variable lado2} If cuadradoSN = S Then Else {Caso especial} lado2:=lado1 {Caso general} begin Write( Ingrese la longitud de un lado adyacente: ); ReadLn( lado2) end;
Lic. Servetto Ing. Jimnez Rey 75.01 Computacin

Gua 1

Pgina 18 de 19

Sintaxis
If <condicin> Then {la condicin result verdadera} Begin <sentencias> End Else {la condicin result falsa} Begin <sentencias> End; {fin de la estructura ifthenelse} Obsrvese que, si se considerara que el usuario puede cometer error de tipeo en el ingreso de los datos, en el primer caso, si el usuario ingresara cualquier carcter distinto a la ene mayscula (incluso la n minscula) el efecto sera equivalente a que ingresara una ese mayscula; y en el segundo, si ingresara cualquier carcter distinto a la ese mayscula (incluso la ese minscula) el efecto sera equivalente a que ingresara la ene mayscula. Esto habla del cuidado que se debe poner al escoger las condiciones de decisin o de la conveniencia de validar los valores ingresados por el usuario. En el primer caso, el enunciado precedente toma una accin especfica para un caso particular, que en la mayora de los casos resultar invalidada; y en caso de que el usuario cometa un error al responder a la consulta el programa devolver un resultado errneo. En cambio en el segundo caso, si el usuario se equivocara al responder a la consulta, tendra la chance de corregir el error ingresando nuevamente la misma longitud. Por tanto, la estructura de control ms adecuada para el problema de referencia es la empleada en el segundo caso, y slo con la condicin como est planteada, ya que de invertir la condicin (preguntar por cuadradoSN = N) e intercambiar los enunciados asociados a las clusulas then y else, se estara en una situacin funcionalmente equivalente a la del primer caso.

Problemas Guas
Los problemas guas son un medio para lograr el aprendizaje de los diferentes mecanismos de programacin. Constituyen un complemento de las clases prcticas expositivas y es fundamental resolverlos para adquirir las habilidades necesarias para el desarrollo de los trabajos prcticos.

1) Desarrollar un programa en lenguaje Pascal que solicite al usuario el ingreso desde el teclado de dos nmeros enteros positivos distintos (Num1 y Num2) y determine cul es el nmero mayor almacenando el resultado en una variable (Mayor) y cul es el nmero menor almacenando el resultado en una variable (Menor) exhibindolos por pantalla. Considerar que el usuario no comete error de tipeo en el ingreso de los datos. Disear los juegos de datos necesarios y probar el correcto funcionamiento del programa (mediante una prueba de escritorio o ejecutando el programa en la computadora). 2) Desarrollar un programa en lenguaje Pascal que solicite al usuario el ingreso desde el teclado de dos nmeros complejos distintos, pregunte al usuario si desea sumarlos o multiplicarlos y exhiba en pantalla el resultado de la operacin solicitada. Considerar que el usuario no comete error de tipeo en el ingreso de los datos. Disear los juegos de datos necesarios y probar el correcto funcionamiento del programa (mediante una prueba de escritorio o ejecutando el programa en la computadora). Observacin: Los nmeros complejos tienen la forma (a + b i) y (c + d i), respectivamente, donde a, b, c y d son los valores reales que ingresa el usuario. Se expresar el resultado como (e + f i) donde: e = (a + c) y f = (b + d) en el caso de la suma, y f = (a por d + b por c) en el caso de la multiplicacin. e = (a por c b por d) y

El programa debe contemplar la posibilidad de que la respuesta del usuario sea s o S (en el caso de la suma) y m o M (en el caso de la multiplicacin).

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua 1

Pgina 19 de 19

3) Desarrollar un programa en lenguaje Pascal que solicite al usuario el ingreso desde el teclado de dos fechas parciales distintas y exhiba en pantalla la diferencia de fechas expresada en aos y meses. Usar un solo enunciado de lectura para el ingreso desde el teclado del mes y ao correspondiente a cada fecha. Evitar visualizar en pantalla diferencia de aos y meses nulos. Considerar que el usuario no comete error de tipeo en el ingreso de los datos. Disear los juegos de datos necesarios y probar el correcto funcionamiento del programa (mediante una prueba de escritorio o ejecutando el programa en la computadora). Observacin: Las fechas ingresadas tienen la forma mes1 anio1 (la fecha ms antigua) y mes2 anio2 (la fecha ms reciente), donde mes1, anio1, mes2 y anio2 son los valores enteros que ingresa el usuario. Se debern tratar los datos como unidades de tiempo indivisibles, es decir, no se podr convertir por ejemplo, diferencia de aos a meses. Sugerencia: Para descubrir un algoritmo solucin podras pensar cul es tu edad en la fecha actual expresada en aos y meses.

Anexos
Operadores Aritmticos Binarios Operador + * / div mod Operacin Suma Resta Divisin Mdulo (Resto) Tipo de Operandos Tipo del Resultado ambos de tipo entero o real mismo que el de los operandos ambos de tipo entero o real mismo que el de los operandos ambos de tipo entero o real real entero entero ambos de tipo entero

Multiplicacin ambos de tipo entero o real mismo que el de los operandos Divisin entera ambos de tipo entero

Lgicos Operador And (binario) Operacin Tipo de Operandos expresin lgica Not (unario) negacin

conjuncin expresiones lgicas

Or (binario) disyuncin expresiones lgicas Relacionales o de Comparacin Operador = <> < <= > >= Operacin igual distinto menor menor o igual mayor mayor o igual Tipo de Operandos ambos simblicos o numricos ambos simblicos o numricos ambos simblicos o numricos ambos simblicos o numricos ambos simblicos o numricos ambos simblicos o numricos

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua N 2

Pgina 1 de 9

COMPUTACIN
Teora
Qu es informacin para una computadora?

Gua N 2

Incluso la computadora ms compleja es en realidad slo un gran volumen de bits bien organizados. David Harel, Algorithmics: The Spirit of Computing

Las computadoras se construyen a partir de dispositivos de conmutacin de encendido/apagado microscpicos capaces por s solos de almacenar una pequea cantidad de informacin; por ejemplo, una seal para indicar si una impresora est conectada o la respuesta a una pregunta de tipo s/no. Cada uno de esos minsculos dispositivos representa un bit (del ingls binary digit:dgito binario), que es la unidad de informacin ms pequea en una computadora. Un bit puede tener uno de dos valores: encendido o apagado. Tambin se pueden considerar estos valores como s o no, cero o uno, blanco o negro, etc. La informacin es digital en el mundo de las computadoras: se compone de unidades discretas (es decir, unidades que pueden contarse), por tanto, puede subdividirse. En muchas situaciones hay que reducir la informacin a unidades ms sencillas para poder usarla de manera efectiva: por ejemplo, cuando un nio como lector incipiente deletrea las letras de una palabra para poder interpretar una palabra con la cual no est familiarizado. Una computadora no entiende palabras, nmeros, imgenes, notas musicales, ni siquiera las letras del alfabeto; no puede procesar informacin sin dividirla en unidades ms pequeas. Las computadoras slo pueden procesar informacin que ha sido dividida en bits. Para representar informacin ms significativa, se deben componer bits conformando patrones segn el tipo de informacin que se trate. As, en una computadora se deben representar nmeros, smbolos e instrucciones de programa componiendo bits. Para representar nmeros se emplea el sistema de numeracin binario, un sistema que denota todos los nmeros con combinaciones de dos dgitos (0 y 1), equivalente al decimal. Para representar smbolos (caracteres alfabticos y de puntuacin) se emplean cdigos estndar de representacin como el ASCII (abreviatura de American Standard Code for Information Interchange: cdigo estndar estadounidense para el intercambio de informacin, pronunciado usualmente como asqui), que representa cada carcter como un cdigo nico de siete bits (ms un octavo cuyo valor est determinado, por cuestiones tcnicas, por los valores de los otros siete) o el UniCode, que representa cada carcter como un cdigo nico de diecisis bits, basado en el ASCII, y que permite representar caracteres especiales de todas las lenguas. Para representar instrucciones de programa, se emplean codificaciones propias del fabricante de las computadoras.

Sistema de Numeracin Binario


El sistema de numeracin binario es anlogo al decimal, slo que en lugar de tratar con diez dgitos se debe tratar con nicamente dos: 0 y 1. El conjunto de enteros positivos binarios comienza 0, 1, 10, 11, 100, 101, 110, 111, 1000, 1001, 1010, 1011, 1100, ... Pensar en el cuentakilmetros de un automvil, que en lugar de marcar en decimal marca en binario:

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua N 2

Pgina 2 de 9

cada vez que el dgito de una posicin del marcador pasa de 1 a 0, produce un cambio por arrastre en la posicin anterior (ms significativa) al dgito opuesto. Por lo tanto, a 1 debe seguir 10 (se pronuncia uno-cero). Si bien estamos acostumbrados a relacionar el valor de los nmeros con sus representaciones decimales, los nmeros son entidades abstractas independientes de cmo las representemos: el 0 en decimal y el 0 en binario, el 1 en decimal y el 1 en binario, el 2 en decimal y el 10 en binario, ... el 5 en decimal y el 101 en binario, etc., tienen el mismo valor. Las operaciones aritmticas en el sistema binario se definen igual que en el sistema decimal. Para sumar en binario se debe tener presente que en la sucesin de los nmeros naturales 0, 1, 10, 11, 100, 101, 110, 111, 1000, 1001, 1010, 1011, 1100si se suma cero a un nmero debe resultar el mismo nmero y si se le suma 1 debe obtenerse el siguiente. Esto se verifica en las siguientes sumas elementales, que son las que bsicamente tienen lugar al sumar dos nmeros binarios genricos: 0 + 0 0 Ejemplo Sumar 11011 + 1011
(1) ( 1) (1)

1 + 0 1 +

0 + 1 1

1 1 10

10 + 1 11

1 1 0 1 1 + 1 0 1 1 10 0 1 1 0 Para restar en binario, las restas elementales seran: 0 0 0 0 1 1 1 0 1 1 1 (pues se pide 1 a la posicin siguiente, es decir, se hace 10 1 = 1) 0

Toda vez que se pide 1 prestado, si la siguiente posicin del minuendo es 1, ste pasar a ser 0 (1 1 = 0); si es 0 pasar a ser 1 (10 1 = 1 ), debindose nuevamente pedir 1 a la subsiguiente posicin, que tambin pasar a ser 1 si es cero, y as sucesivamente, si hay ceros en el minuendo se transformarn en unos hasta llegar a un 1, que pasar a ser 0.

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua N 2

Pgina 3 de 9

Ejemplo Restar 11010 1011


(0) (10) (0) ( 1) (10) (0) (10)

1 1 0 1 0 1 0 1 1 0 1 1 1 1
Observacin Las computadoras no usan este procedimiento para restar, sino que suman al minuendo el complemento a dos del sustraendo, como se ver ms adelante durante el desarrollo del curso.

Cuando se debe efectuar una sustraccin en la que el sustraendo es de mayor valor absoluto e igual signo que el minuendo, se sustrae el minuendo al sustraendo y se invierte el signo del resultado: 10 - 11 = -( 11 - 10 ) = -1. Para multiplicar en binario: un nmero por dos (la base de numeracin, que se representa 10), se debe agregar un cero al nmero binario, por ejemplo, 101 * 10 = 1010, o bien correr la coma un lugar a derecha, por ejemplo 1,01 * 10 = 10,1; de igual manera que en decimal, multiplicar un nmero por diez implica agregarle un cero al nmero decimal o correr la coma un lugar a derecha un nmero por otro nmero binario distinto de la base, se repite el multiplicando desplazado a la izquierda conforme a la posicin que ocupen los unos del multiplicador, y luego se realiza la suma con los sumandos as ordenados, por ejemplo, 11010 x 101 11010 + 11010 10000010 Para dividir en binario: un nmero por la base de numeracin, se corre la coma un lugar hacia la izquierda suponiendo la coma situada a la derecha del primer dgito de la derecha del nmero binario, por ejemplo,

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua N 2

Pgina 4 de 9

101 / 10 = 10,1 o se corre la coma un lugar hacia la izquierda desde la posicin en que se encuentra la coma en el nmero, por ejemplo, 101,10 / 10 = 10,110 de la misma forma en que se procede en el sistema decimal; un nmero por otro nmero binario distinto de la base, se utiliza el conocido mtodo de las diferencias sucesivas, donde cada sustraendo se obtiene multiplicando por 1 al divisor si ste ltimo es menor o igual que el resto parcial en cuestin, o por 0, si el mismo es mayor que dicho resto, por ejemplo,

11010 101 0011 000 0110 101 001

1 0 1 101

Ejercicios Realizar las siguientes operaciones en base 2: 1. 10111 + 1001 2. 10100 - 1011 3. 100110 + 100101 + 11101 + 10010 4. 1011 - 11010 5. 1101 * 10 6. 101011 * ( -1010 ) 7. 10100,00101 + 100010,10011 8. 101001,01001 - 10101,11011 9. 10100,0101 * 1001,001 10. 100110 / 10 11. 1001,10 / 10 12. 111011 / 110

Notacin Cientfica en Base 2


Dados los siguientes nmeros en notacin cientfica binaria, hallar sus equivalentes en notacin normal: (por ejemplo: 110,111 x 1010 es equivalente a correr la coma dos lugares a la derecha, es decir, a 11011,1) 1. 1,01001 * 10101

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua N 2

Pgina 5 de 9

2. 1,01110101 * 10100 3. 1,10101 * 10 10 4. Expresar los resultados 1 a 12 del ejercicio anterior, en notacin cientfica, de manera que en la expresin la coma siempre quede a la izquierda del primer 1 significativo del nmero (para poder normalizar, es decir, establecer una nica representacin; por ejemplo si el resultado fuera 110,111 habra que expresarlo como 0,110111 * 10 11 equivalente a correr la coma tres lugares a la derecha).

Sistema de Numeracin Hexadecimal


El sistema de numeracin hexadecimal cuenta con diecisis dgitos, es decir, emplea 16 smbolos para representar nmeros: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E y F. El conjunto de enteros positivos hexadecimales comienza 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 1A, 1B, 1C, 1D, 1E, 1F, 20, ... Pensar en el cuentakilmetros de un automvil, que en lugar de marcar en decimal marca en hexadecimal: cada vez que el dgito de una posicin del marcador pasa de F a 0, produce un cambio por arrastre en la posicin anterior (ms significativa) al dgito siguiente o a 0 segn corresponda. Por lo tanto, a F debe seguir 10 (se pronuncia uno-cero). El conjunto de nmeros enteros es un conjunto ordenado: dado un nmero entero cualquiera, se puede hallar a su predecesor y a su sucesor. Las representaciones de los nmeros son independientes de sus valores, as que se puede considerar a los sistemas de numeracin como funciones de representacin o de mapeo de los nmeros como entidades abstractas a smbolos que los denoten. Se muestra en la siguiente tabla la equivalencia del sistema hexadecimal con los sistemas decimal y binario.
hexadecimal decimal binario 0 0 0 1 1 1 2 2 10 3 3 11 4 4 100 5 5 101 6 6 110 7 7 111 8 8 1000 9 9 1001 A 10 1010 B 11 1011 C 12 1100 D 13 1101 E 14 1110 F 15 1111 10 16 10000

En el interior de una computadora slo existe informacin digital binaria, formando largas sucesiones de unos y ceros. Cuando hace falta que los seres humanos manipulen nmeros binarios, sta es una ardua tarea, engorrosa en la lectura y propensa a errores de transcripcin en la escritura, por la necesidad de repetir tantas veces tan pocos dgitos, por lo cual es comn cometer muchos errores que resultan de difcil deteccin. Se recurre al sistema hexadecimal como una forma de abreviar los nmeros binarios. Ms adelante se advertir ms claramente la ventaja de sustituir nmeros binarios por hexadecimales para su manipulacin.

Cambios de Base de Numeracin


Sea (r)a la representacin r de un nmero en una base de numeracin a (las bases siempre se representan en decimal) y se desea obtener la representacin del mismo nmero en otra base b . Por ejemplo, para obtener la representacin binaria (b=2) del nmero decimal (r=23,7)a=10 con a lo sumo (4)10 dgitos fraccionarios, se debe proceder como se indica a continuacin. Se toma la parte entera de r y se efecta su divisin entera y la de los sucesivos cocientes mayores que (b)a entre (b)a : los residuos y el ltimo cociente resultan menores que (b)a y constituyen los dgitos de menor a mayor significacin de la parte entera de la representacin del nmero en la base (b)a. Luego, representando el operador para la obtencin del cociente de la divisin entera mediante la contraccin div, y el operador para la obtencin del residuo de la divisin entera mediante la contraccin mod (de mdulo): (23 mod 2 = 1)10 = (1)2 (11 mod 2 = 1)10 = (1)2
Lic. Servetto Ing. Jimnez Rey

(23 div 2 = 11)10 (11 div 2 = 5)10


75.01 Computacin

Gua N 2

Pgina 6 de 9

( 5 mod 2 = 1)10 = (1)2 ( 2 mod 2 = 0)10 = (0)2

( 5 div 2 = 2)10 ( 2 div 2 = 1)10 = (1)2

Entonces (23)10 = (1 * 2 0 + 1 * 2 1 + 1 * 2 2 + 0 * 2 3 + 1 * 2 4 ) 10 = (1 * 10 0 + 1 * 10 1 + 1 * 10 10 + 0 * 10 11 + 1 * 10 100) = (10111) 2 Se toma la parte fraccionaria de r y se efecta su multiplicacin y la de las sucesivas partes fraccionarias no nulas de los productos por (b)a : las partes enteras de los sucesivos productos resultan menores que (b)a y constituyen los dgitos de mayor a menor significacin de la parte fraccionaria de la representacin del nmero en la base (b)a (como la parte fraccionaria de los productos podra no anularse en un nmero razonable de operaciones, siempre se acota la representacin con un redondeo a una cantidad determinada de dgitos fraccionarios). Luego, 0,7 * 2 = 1,4 0,4 * 2 = 0,8 0,8 * 2 = 1,6 0,6 * 2 = 1,2 Entonces (0,7)10 = (1 * 2-1 + 0 * 2-2 + 1 * = (0,1011...) 2 Por lo tanto, (23,7) 10 = (10111, 1011...) 2 Por ejemplo, para obtener la representacin hexadecimal (b=16) del nmero decimal (r=23,7)a=10 con a lo sumo (2)10 dgitos fraccionarios, se debe proceder como se indica a continuacin. Se toma la parte entera de r y se efecta su divisin entera y la de los sucesivos cocientes mayores que (b)a entre (b)a : los residuos y el ltimo cociente resultan menores que (b)a y constituyen los dgitos de menor a mayor significacin de la parte entera de la representacin del nmero en la base (b)a.: (23 mod 16 = 7) 10 = (7) 16 Entonces (23)10 = (7 * 16 0 + 1 * 16 1) 10 = (7 * 10 0 + 1 * 10 1) 16 = (17) 16 Se toma la parte fraccionaria de r y se efecta su multiplicacin y la de las sucesivas partes fraccionarias no nulas de los productos por (b)a : las partes enteras de los sucesivos productos resultan menores que (b)a y constituyen los dgitos de mayor a menor significacin de la parte fraccionaria de la representacin del nmero en la base (b)a (como la parte fraccionaria de los productos podra no anularse en un nmero razonable de operaciones, siempre se acota la representacin con un redondeo a una cantidad determinada de dgitos fraccionarios). Luego,
Lic. Servetto Ing. Jimnez Rey 75.01 Computacin
2

2-3 + 1 * 24 + ... ) 10

= (1 * 10-1 + 0 * 10-10 + 1 * 10-11 + 1 * 10100 + ... ) 2

(23 div 16 = 1) 10 = (1) 16

Gua N 2

Pgina 7 de 9

0,7 * 16 = 11,2 0,2 * 16 = 3,2 Entonces (0,7)10 = (11 * 16-1 + 3 * 16-2 + ... ) 10 = (B * 10-1 + 3 * 10-10 + ... ) 16 = (0,B3...)16 Por lo tanto, (23,7) 10 = (17, B3...) 16 Ejercicios 1. Cambiar de base 10 a base 2 los siguientes nmeros obteniendo hasta 8 dgitos de la parte fraccionaria: a. b. c. d. e. 543 -125 27,32 -18,247 148,33333...

2. Cambiar de base 2 a base 10 los nmeros binarios resultantes de los cambios de base 10 a base 2 realizados con anterioridad (calcular la descomposicin digital). Observar los errores de redondeo que se produjeron por haber considerado hasta ocho dgitos fraccionarios en el cambio de base previo. 3. Cambiar de base 10 a base 16 los nmeros decimales del ejercicio 1, obteniendo hasta dos dgitos fraccionarios. 4. Cambiar de base 16 a base 10 los nmeros hexadecimales resultantes de los cambios de base 10 a base 16 realizados con anterioridad (calcular la descomposicin digital). Observar los errores de redondeo que se produjeron por haber considerado hasta dos dgitos fraccionarios en el cambio de base previo.

Numeracin Hexadecimal como Abstraccin de la Binaria


Ntese que para convertir el nmero decimal (23,7)10 a binario fue necesario realizar cuatro operaciones de divisin y cuatro operaciones de multiplicacin; mientras que para convertir a hexadecimal fue necesario realizar una operacin de divisin y dos operaciones de multiplicacin. Por otro lado, la representacin hexadecimal del nmero decimal 23,7 segn se vi con anterioridad es: (23,7) 10 = (17, B3...) 16 y su descomposicin hexadecimal: (23,7) 10 = (1 * 16 1 + 7 * 16 0 + 11 * 16-1 + 3 * 16-2 + ... ) 10 Si se cambia a representacin binaria la descomposicin hexadecimal se obtiene: (23,7) 10 = (1 * (2 4)1 + 7 * (2 4)0 + 11 * (2 4)-1 + 3 * (2 4)-2 + ... ) 10 (23,7) 10 = (1 * 10000 + 111 * 1 + 1011 * 0,1000 + 11 * 0,10000000 + ... ) 2 (23,7)10 = (10000 + 111 + 0,1011 + 0,00000011 + ... ) 2 (23,7) 10 = (10111 , 10110011 ... ) 2

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua N 2

Pgina 8 de 9

Si se agrega ceros a la izquierda de la coma decimal (lo cual no altera el valor de la representacin), se puede observar que cada dgito hexadecimal equivale a cuatro dgitos binarios: (23,7) 10 = (0001 0111 , 1011 0011 ... ) 2 1 7 B 3

O sea que, cuando se requiera trabajar con numeracin binaria, para ahorrar clculos y minimizar la posibilidad de cometer errores, conviene operar con numeracin hexadecimal, y finalmente convertir los resultados a binario por sustitucin directa de dgitos.

Conversin directa entre Sistemas Hexadecimal y Binario


El pasaje de binario a hexadecimal y viceversa, se hace mecnicamente, en forma directa, sin necesidad de realizar ningn clculo. Se debe tener presente las equivalencias entre las bases 2 y 16 dadas por la siguiente tabla. Cada smbolo hexadecimal equivale a 4 dgitos binarios.
Base 16 Base 2 0 0000 1 0001 2 0010 3 0011 4 0100 5 0101 6 0110 7 0111 8 1000 9 1001 A 1010 B 1011 C 1100 D 1101 E 1110 F 1111

Pasaje de binario a hexadecimal La conversin de base 2 a base 16 consiste en: Separar el nmero binario en cuartetos, a partir del dgito menos significativo (en nmeros enteros) o de la coma (en nmeros fraccionarios), pudindose completar con ceros a la izquierda o a la derecha, en caso de ser necesario. Reemplazar cada cuarteto por el dgito hexadecimal equivalente, segn la tabla. Por ejemplo, convertir a hexadecimal los binarios: a. (111010) 2 = 0011 1010 = (3A) 16 b. (11011,11011) 2 = 0001 1011 , 1101 1000 Pasaje de hexadecimal a binario La conversin de base 16 a base 2 consiste en: Reemplazar cada dgito hexadecimal por el cuarteto binario equivalente, segn la tabla. Por ejemplo, convertir a binario los hexadecimales: a. (2C8) 16 = ( 0010 1100 1000 ) 2
2

2 C 8 b. (4E , F7 ) 16 = ( 0100 1110 , 1111 0111 ) 4 E F 7

Ejercicios 1. Comprobar la correspondencia de dgitos en los cambios de base anteriores. 2. Expresar los siguientes nmeros decimales en binario con hasta ocho dgitos fraccionarios a partir de su conversin a hexadecimal

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua N 2

Pgina 9 de 9

a. 15623 b. 6931 c. 184,623 d. 12890,5 e. 6,17 3. Expresar los siguientes nmeros binarios en hexadecimal a. 101010101010 b. 10110010111011 c. 11101011,01 d. 1011111,1101011

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua N 2

Pgina 1 de 8

COMPUTACIN
Prctica
Estructura de Seleccin Mltiple

Gua N 2

Supngase que se desea resolver un problema con la computadora en el que aparece la necesidad de optar entre ms de dos alternativas, como por ejemplo, calcular la superficie de un crculo, un tringulo o un rectngulo, y distinguiendo al cuadrado como caso particular de rectngulo. Una solucin al problema con un programa usando la estructura de seleccin simple sera: {SECCIN DECLARATIVA} {Definicin del Objetivo} Program Superficies; {Programa que calcula la superficie de un crculo, tringulo, cuadrado o rectngulo} {Autores: Lic. Servetto Ing. Jimnez Rey. Versin 1.0 (marzo de 2007)} {Definicin de Recursos} Const Pi=3.141592653589; Var figura: Char; {representa la opcin elegida por el usuario: C crculo, T tringulo, R rectngulo} cuadradoSN: Char; {representa la respuesta del usuario: S o s para caso especial} radio, base, altura, lado1, lado2, superficie: Real; {representan el radio del crculo, la base y la altura del tringulo, los lados del rectngulo o cuadrado y la superficie de cualquier figura, respectivamente} {SECCIN ALGORTMICA} {Desarrollo de la Solucin} Begin {Prlogo} {Presentacin del programa}} WriteLn( CLCULO DE LA SUPERFICIE DE UNA FIGURA ); WriteLn; {Determinacin de la figura} {Solicitud de ingreso de la figura} Write( Ingrese C para un crculo, T para un tringulo ); Write( o R para un rectngulo: ); {Asignacin a figura de la opcin elegida} ReadLn( figura ); WriteLn;

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua N 2

Pgina 2 de 8

{Resolucin} {Clculo de la superficie de la figura elegida} If ( figura = C ) or ( figura = c ) Then Begin Write( Ingrese el radio: ); ReadLn( radio); superficie:=Pi * radio * radio End Else If ( figura = T ) or ( figura = t ) Then Begin Write( Ingrese base y altura: ); ReadLn( base, altura ); superficie:=base * altura / 2 End Else If ( figura = R ) or ( figura = r ) Then Begin Write( Ingrese la longitud de un lado: ); ReadLn( lado1); WriteLn; Write(Desea calcular la superficie de un cuadrado?); Write( Responda S o N: ); ReadLn( cuadradoSN ); If ( cuadradoSN = S ) or ( cuadradoSN = s ) Then lado2:=lado1 Else Begin Write( Ingrese la longitud de un lado adyacente: ); ReadLn( lado2 ) End; superficie:=lado1 * lado2 End; {Eplogo} {Exhibicin del resultado en pantalla}
Lic. Servetto Ing. Jimnez Rey 75.01 Computacin

Gua N 2

Pgina 3 de 8

WriteLn; WriteLn( La superficie es, superficie:10:5 ), {Anuncio de finalizacin} WriteLn(Fin del programa.); {Generacin de Pausa} ReadLn End. Obsrvese que aunque se induce el ingreso de letras maysculas para especificar la figura, para corregir eventuales equivocaciones se admite tambin como vlido el ingreso de minsculas mediante condiciones de seleccin compuestas. Para componer condiciones con operadores lgicos en el lenguaje Pascal, se debe encerrar a las condiciones componentes entre parntesis; esto se impone para determinar las precedencias correctas de las evaluaciones, ya que los operadores lgicos no slo se pueden emplear para comparaciones sino tambin para operaciones con patrones binarios, tal como se ver ms adelante, y la evaluacin de operaciones lgicas es ms precedente que la de expresiones relacionales. A propsito de la composicin de condiciones, recurdese que siendo A y B expresiones relacionales (de comparacin), y True y False los valores de verdad verdadero y falso (en el lenguaje Pascal son constantes predefinidas), se tiene que:

A and B

A or B

True True True True Fals False e Fals True False e Fals Fals False e e Adems, se verifican las equivalencias: not ( not A ) not ( A or B ) not ( A and B ) A or B A and B A or ( B or C ) A and ( B and C ) A or B and C A and ( B or C ) A not A and not B not A or not B B or A B and A ( A or B ) or C ( A and B ) and C ( A or B ) and ( A or C ) A and B or B and C

True True True True Fals True e Fals True True e Fals Fals False e e

Ley de doble negacin Leyes de DeMorgan Leyes conmutativas Leyes asociativas Leyes distributivas

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua N 2

Pgina 4 de 8

A or A A and A A or False A and True A or not A A and not A A or True A and False A or A and B A and ( A or B )

A A A A True False True False A A

Leyes idempotentes Leyes de identidad Leyes inversas Leyes de dominancia Leyes de absorcin

Obsrvese tambin que la solucin a un problema con mltiples opciones empleando la estructura de seleccin simple requiere anidamientos sucesivos de esta estructura que pueden hacerla difcil de interpretar. Para estos casos el lenguaje Pascal provee otra estructura de control de seleccin mltiple que simplifica la solucin: {SECCIN DECLARATIVA} {Definicin del Objetivo} Program Superficies; {Programa que calcula la superficie de un crculo, tringulo, cuadrado o rectngulo} {Autor: Lic. Servetto Ing. Jimnez Rey}} {Versin: 1.1 (marzo de 2007)} {Definicin de Recursos} Const Pi=3.141592653589; Var figura: Char; {representa la opcin elegida por el usuario: C crculo, T tringulo, R rectngulo} cuadradoSN: Char; {representa la respuesta del usuario: S o s para caso especial} radio, base, altura, lado1, lado2, superficie: Real; {representan el radio del crculo, la base y la altura del tringulo, los lados del rectngulo o cuadrado y la superficie de cualquier figura, respectivamente} {SECCIN ALGORTMICA} {Desarrollo de la Solucin} Begin {Prlogo} {Presentacin del programa}

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua N 2

Pgina 5 de 8

WriteLn( CLCULO DE LA SUPERFICIE DE UNA FIGURA ); WriteLn; {Determinacin de la figura} {Solicitud de ingreso de la figura} Write( Ingrese C para un crculo, T para un tringulo ); Write( o R para un rectngulo: ); {Asignacin a figura de la opcin elegida} ReadLn( figura ); WriteLn; {Resolucin} {Clculo de la superficie de la figura elegida} Case figura of C, c: Begin Write( Ingrese el radio: ); ReadLn( radio); superficie:=Pi * radio * radio End; T, t: Begin Write( Ingrese base y altura: ); ReadLn( base, altura ); superficie:=base * altura / 2 End; R, r: Begin Write( Ingrese la longitud de un lado: ); ReadLn( lado1); WriteLn; Write( Dese calcular la superficie de un cuadrado? Responda S o N: ); ReadLn( cuadradoSN ); If ( cuadradoSN = S ) or ( cuadradoSN = s ) Then lado2:=lado1 Else Begin Write( Ingrese la longitud de un lado adyacente: ); ReadLn( lado2 ) End; superficie:=lado1 * lado2 End; End: {del case} {Eplogo}
Lic. Servetto Ing. Jimnez Rey 75.01 Computacin

Gua N 2

Pgina 6 de 8

{Exhibicin del resultado en pantalla} WriteLn; WriteLn( La superficie es, superficie:10:5 ), {Anuncio de finalizacin} WriteLn(Fin del programa.); {Generacin de Pausa} ReadLn End. Obsrvese que empleando esta estructura el programa resulta ms fcil de seguir. Sintaxis (con omisin de else} Case <selector> of <cte1,cte2,cte3>: Begin <sentencias> End; <cte4,cte5,cte6>: Begin <sentencias> End; <,cte7>: Begin <sentencias> End; End; Para cada opcin se puede especificar uno o varios valores constantes separados por una coma. Cuando se ejecuta la estructura, se compara el valor del selector (que puede ser una expresin o una variable) con cada una de los valores constantes de las opciones en el orden en que aparezcan: Si se verifica una coincidencia se ejecuta la instruccin o bloque asociado a la opcin y luego el programa contina por la instruccin siguiente a la estructura Case. Sintaxis (con inclusin de else} Case <selector> of <cte1,cte2,cte3>: Begin <sentencias> End; <cte4,cte5,cte6>: Begin <sentencias> End;

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua N 2

Pgina 7 de 8

<,cte7>: Begin <sentencias> End; Else Begin <sentencias> End End; Si no se verifica una coincidencia, se ejecuta la instruccin o bloque a continuacin de la clusula Else y luego el programa contina por la instruccin siguiente a la estructura Case. En la estructura Case, igual que en la estructura If, el uso de la clusula Else es optativo. Cuando no se usa Else, si la expresin o variable que se evala al comienzo de la estructura no coincide con ninguno de los valores especificados en las opciones alternativas, no se ejecuta ninguna instruccin y el programa sigue por la orden siguiente a la estructura. Limitaciones de uso de la estructura de seleccin mltiple Case: Las opciones deben estar representadas indefectiblemente por valores constantes del mismo tipo que la expresin o la variable (representada por el selector) que se use entre las palabras clave Case y of. El tipo debe ser integer, char o cualquier tipo de valores que tenga un orden establecido. No admite el tipo real. Solamente admite comparaciones de igualdad entre el selector y los valores constantes de las opciones (coincidencias), es decir, no se puede realizar comparaciones de desigualdad.

Problemas Guas
Los problemas guas son un medio para lograr el aprendizaje de los diferentes mecanismos de programacin. Constituyen un complemento de las clases prcticas expositivas. Es fundamental resolver TODOS los problemas para adquirir las habilidades necesarias para el desarrollo de los trabajos prcticos. 1) Desarrollar un programa en lenguaje Pascal que solicite al usuario el ingreso desde el teclado del valor de una calificacin (entero entre 1 y 10) y exhiba en pantalla el concepto que le corresponda: 1 muy malo, 2 y 3 malo, 4 y 5 regular, 6 y 7 bueno, 8 muy bueno, 9 distinguido y 10 sobresaliente. En caso que el usuario cometa un error de tipeo en el ingreso del dato, se deber visualizar por pantalla el siguiente mensaje: Calificacin no vlida. Ingresar un valor entre 1 y 10. Vuelva a ejecutar el programa. Disear los juegos de datos necesarios y probar el correcto funcionamiento del programa (mediante una prueba de escritorio o ejecutando el programa en la computadora).

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua N 2

Pgina 8 de 8

2) Desarrollar un programa en lenguaje Pascal que solicite al usuario el ingreso desde el teclado de los tres lados de un tringulo con un nico enunciado de lectura e informe por pantalla si el tringulo es equiltero (tres lados iguales), issceles (dos lados iguales) o escaleno (tres lados desiguales). Considerar que el usuario no comete error de tipeo en el ingreso de los datos. Disear los juegos de datos necesarios y probar el correcto funcionamiento del programa (mediante una prueba de escritorio o ejecutando el programa en la computadora). 3) Desarrollar un programa en lenguaje Pascal que solicite al usuario el ingreso desde el teclado de un nmero entero entre 1 y 3999 (no se admitir el ingreso de cada uno de los dgitos componentes del nmero) y exhiba en pantalla su representacin romana. Considerar que el usuario no comete error de tipeo en el ingreso de los datos. Disear los juegos de datos necesarios y probar el correcto funcionamiento del programa (mediante una prueba de escritorio o ejecutando el programa en la computadora). Por ejemplo, si se ingresara el nmero 2586 se informara por pantalla que su representacin romana es MMDLXXXVI. Recordar que: 1 5 10 50 100 500 1000 I V X L C D M

4) Desarrollar un programa en lenguaje Pascal que solicite al usuario el ingreso desde el teclado de un nmero entero de 4 dgitos que representa un ao y exhiba en pantalla si el ao fue, es o ser bisiesto. Se debe disear el algoritmo correspondiente a la siguiente definicin: un ao es bisiesto si es divisible por 400 si es divisible por 4 pero no es divisible por 100. Considerar que el usuario no comete error de tipeo en el ingreso de los datos. Disear los juegos de datos necesarios y probar el correcto funcionamiento del programa (mediante una prueba de escritorio o ejecutando el programa en la computadora).

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua N 3

Pgina 1 de 5

COMPUTACIN
Teora
Arquitectura Bsica de una Computadora

Gua N 3

Las computadoras procesan nmeros y smbolos codificados en patrones de bits y funcionan gobernadas por instrucciones de programa, tambin codificadas en patrones de bits. Toda esta informacin debe almacenarse de manera organizada en los dispositivos de almacenamiento, de manera que la computadora pueda acceder a ella en forma rpida y confiable. Para que la unidad central de procesamiento (UCP) de una computadora pueda ejecutar un programa, tanto las rdenes del programa como los datos que ste procese deben estar almacenados en la memoria central o principal (MP). An los datos que se obtengan desde el teclado o de dispositivos de almacenamiento permanente requieren almacenarse temporalmente en la memoria principal para que un programa pueda procesarlos. La MP resulta ser, entonces, un depsito central para el almacenamiento y distribucin de la informacin involucrada en los procesos. La etapa de memorizacin en el proceso de datos la realiza la MP: almacena datos, instrucciones y los resultados del proceso realizado en circuitos electrnicos1. Cada programa comparte la MP con sus datos pero las instrucciones estn en una zona y los datos en otra. En una operacin de entrada, la MP es el destino de las instrucciones y datos provenientes del exterior (que ingresan a travs de unidades de disco o disquetes, teclado, mouse, mdem y otros). En una operacin de salida, la MP es el orgen de resultados que deben salir al exterior (a travs del monitor, impresora, unidades de disco o disquetes, mdem y otros). Una metfora que puede ayudar a comprender las funciones de los componentes de una computadora sera considerar a una computadora como a una persona trabajando en una oficina: la UCP sera la persona, la memoria central sera el escritorio en donde trabaja la persona y los dispositivos de almacenamiento permanente de informacin seran los armarios de la oficina conteniendo biblioratos con documentos. En este contexto, un programa podra ser una nota o memorando al oficinista en que se le solicita un informe sobre datos que conciernen a la oficina. Para elaborar un informe (ejecutar) segn lo solicitado en una nota (programa), el oficinista (UCP) debe tener presente la nota en su escritorio (MP) y buscar datos almacenados en biblioratos (archivos en dispositivos de almacenamiento permanente) que tambin traer temporalmente al escritorio, y eventualmente, solicitar al responsable de la nota aclaraciones o informacin faltante (obtendr informacin desde el teclado). Una vez elaborado el informe, el oficinista lo enviar a quien se lo solicitara (exhibir en la pantalla) y seguramente guardar copia de la nota y la respuesta e informe en su oficina (la informacin resultante puede guardarse en los dispositivos de almacenamiento permanente, lo mismo que los programas).

Organizacin de la Memoria Central


La memoria central o principal (MP) o dispositivo de almacenamiento principal de una computadora consiste en una vasta coleccin de circuitos capaz de almacenar un gran nmero
1

En la "motherboard", adems del microprocesador, estn las plaquetas correspondientes a la memoria principal. La exigencia de una memoria interna electrnica para instrucciones y datos a procesar, tiene que ver con la necesidad de acceder a ella rpidamente en el interior de la computadora. Como la UCP opera a velocidades electrnicas (nanosegundos), debe poder leer o escribir dicha memoria a una velocidad compatible con la suya. Si la memoria estuviera en disco dependera de los tiempos de accesos de ste (milisegundos) con lo cual se desaprovechara la rapidez del procesamiento electrnico de la UCP.

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua N 3

Pgina 2 de 5

de bits. Por cuestiones prcticas, esta reserva de bits se divide en unidades manejables llamadas celdas de igual tamao, independientes entre s. Las celdas o palabras de las primeras computadoras eran de ocho bits, por lo que surgi un nombre especfico para denominar a los grupos de bits de este tamao, byte, traducida algunas veces al castellano como octeto. Las celdas de las mquinas actuales suelen ser de 32 bits (4 bytes). El byte se constituy tambin como la unidad de medida para la capacidad de las memorias principales y los dispositivos de almacenamiento masivo o auxiliar. Actualmente, el tamao de la memoria principal y de los dispositivos de almacenamiento auxiliar suele medirse en trminos de unidades como

Nombre Kilobyte Gigabyte Terabyte Petabyte Exabyte Zettabyte Yottabyte

Smbolo Bytes KB 210 220 230 240 250 260 270 280 GB TB PB EB ZB YB

Megabyte MB

Las celdas individuales de la memoria principal de una mquina se identifican unvocamente por un nmero binario designado como su direccin (indicador de su posicin en el conjunto), de manera que la computadora puede distinguirlas cuando se le ordena que guarde o recupere informacin. Este nmero no se puede alterar pues est definido circuitalmente. As, las celdas de la memoria se encuentran no slo numeradas sino tambin ordenadas, o sea que se pueden direccionar las celdas anterior y siguiente de otra cualquiera. Por lo tanto, con relacin a cada celda se tiene dos nmeros binarios: un nmero fijo, la direccin, representado en los circuitos de la memoria , que permite acceder a una celda, y un nmero de 8 bits, el contenido informativo de la celda, la combinacin de unos y ceros almacenada en ella. Generalmente se representan las celdas de la memoria como un conjunto de casilleros verticales siendo sus direcciones nmeros binarios consecutivos, los cuales se escriben en su equivalente hexadecimal para no visualizar largas secuencias de unos y ceros. Por ejemplo, en la siguiente figura se destaca en negrita la celda de direccin (0000 0111) 2 = (07) 16 en la cual est almacenada el byte (01100001) 2 = (61) 16 (05)16 (06)16 (07)16 (08)16 (09)16 (0A)16 (0B)16 0 1 0 0 0 1 1 0 1 1 0 1 0 1 1 0 1 0 0 1 1 1 1 0 1 1 1 0 1 0 0 0 1 0 0 1 1 0 1 0 0 1 0 1 0 0 1 1 0 1 1 1 1 0 1 0

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua N 3

Pgina 3 de 5

Puede ayudar a entender mejor el concepto de byte almacenado, si se piensa que en cada celda o casillero existen llaves del tipo s/no (como las comunes de pared para encender la luz); cada una para retener un uno estar en la posicin de prendido (s) o para representar el cero estar en la posicin de apagado (no). Entonces, para una celda dada, como la que contiene el patrn 01100001, la combinacin de unos y ceros que estn formando las ocho llaves es la informacin contenida en dicha celda. La informacin que almacena cada grupo de 8 llaves puede referirse a instrucciones o a datos.

La informacin almacenada en la memoria central no es ms que un patrn de corriente elctrica que fluye por circuitos microscpicos en chips de silicio. La MP contiene circuitos para almacenar y recuperar patrones de bits de las celdas, de manera que la UCP pueda: almacenar datos en la memoria solicitando se coloque el patrn de bits en una celda de direccin especfica (operacin de almacenamiento o escritura), u obtener datos de la memoria, solicitando electrnicamente el contenido de una direccin determinada (operacin de carga o lectura). Toda vez que se almacena un patrn de bits en una celda se pierde su contenido previo, es decir, las celdas pueden ser escritas con un contenido distinto (las llaves cambian de estado para representar el nuevo valor); por lo tanto, una operacin de escritura ES destructiva. En cambio, cuando se recupera el contenido de una celda, ste sigue cargado electrnicamente en la misma; por lo tanto, es posible leer varias veces el contenido de una celda sin que ste vare; por lo tanto, una operacin de lectura NO ES destructiva. El tiempo de acceso a una celda de memoria en una computadora es siempre el mismo, no importa cul sea la direccin de la celda. Por este motivo, la memoria principal suele llamarse tambin memoria de acceso aleatorio o memoria RAM (Random Access Memory). El acceso a la memoria es aleatorio (al azar), es decir, la posicin de cualquier celda puede encontrarse en igual tiempo (para ser leda o escrita), sin bsqueda alguna. Otras designaciones de la memoria principal son: memoria voltil, debido a que como su contenido est representado electrnicamente, ste depende de la alimentacin elctrica (si se interrumpe la alimentacin elctrica, se pierde el contenido, es decir, la informacin que contiene no se conserva de manera permanente), memoria de almacenamiento primario, debido a que en ella se almacena la informacin que la UCP requiere inmediatamente para la ejecucin de un programa, mientras que cuando sta no es inmediatamente necesaria se encuentra en la memoria auxiliar o tambin llamada almacenamiento secundario o permanente, memoria interna y memoria de trabajo son otros nombres para denominarla. Los bits que contiene una celda tienen un orden similar al de las mismas celdas. La hilera de bits que contiene una celda puede considerarse como ordenada de izquierda a derecha, designndose al extremo izquierdo como extremo alto, y al extremo derecho como extremo bajo. Al bit que se encuentra en cada extremo se lo designa con el mismo nombre (bit del extremo alto o bit del extremo bajo), o tambin como bit ms significativo y bit menos significativo, respectivamente, como se muestra en el siguiente ejemplo.

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua N 3

Pgina 4 de 5

Extremo Alto 0 1 1 0 0 0 0

Extremo Bajo 1

Bit ms significativo

Bit menos significativo

Una consecuencia importante del ordenamiento tanto de las celdas como de los bits dentro de cada celda es que la coleccin completa de los bits de la memoria principal est esencialmente ordenada en una larga fila. Esto hace posible emplear segmentos de la fila determinados por un nmero entero de celdas para almacenar patrones de bits de longitud mayor que una celda. As, por ejemplo, si el tamao de celda de una memoria principal fuera de un byte, en una celda se podran representar nicamente nmeros binarios entre 0 y 28 - 1 = 255 (28 = 256 nmeros distintos en total), lo que resulta muy limitado para el clculo numrico: para poder realizar clculos con nmeros mayores se debera emplear ms de una celda para representar cada nmero. Esta es una de las razones por las que el tamao de celda de la memoria principal de las computadoras ha ido aumentando (la capacidad de representacin), as como tambin por la necesidad de aumentar la velocidad de acceso (como leer o escribir una celda de memoria tiene su costo en tiempo, ms vale leer o escribir patrones de bits ms grandes de una sola vez que tener que leer o escribir varias veces para armar un patrn). Ejercicios 1) Si la celda de memoria cuya direccin es 5 contiene el valor 8, cul es la diferencia entre escribir el valor 5 en la celda cuya direccin es 6 y pasar el contenido de la celda cuya direccin es 5 a la celda cuya direccin es 6? 2) Suponga que desea intercambiar los valores almacenados en las celdas de memoria cuyas direcciones son 2 y 3. Qu error tiene la siguiente secuencia de pasos? Paso 1. Pasar el contenido de la celda cuya direccin es 2 a la celda cuya direccin es 3. Paso 2. Pasar el contenido de la celda cuya direccin es 3 a la celda cuya direccin es 2. Disee una secuencia de pasos que intercambie correctamente el contenido de las celdas cuyas direcciones son 2 y 3. 3) Cuntas celdas puede contener la memoria principal de una computadora si la direccin de cada celda se puede representar con tres dgitos hexadecimales? 4) Cuntos bits tendra la memoria de una computadora con 4 Kb de memoria? 5) Suponga que una grfica se representa en la pantalla de un monitor mediante una matriz rectangular que contiene 1024 columnas y 768 filas de pequeos puntos (llamados pixels, del ingls, picture elements: elementos de imagen). Si se requieren ocho bits para codificar el

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua N 3

Pgina 5 de 5

estado, el color y la intensidad de cada pixel, cuntas celdas de memoria de un byte se requerirn para contener toda la grfica? 6) Con cuntos dgitos hexadecimales se representan las direcciones de una memoria de 32 Mb, si las celdas son de 2 bytes?

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua N 3

Pgina 1 de 5

COMPUTACIN
Teora (continuacin)
Codificacin de Nmeros

Gua N 3

Para que una computadora, o ms precisamente su UCP, pueda procesar un nmero, ste debe estar autocontenido en una celda de memoria. Pero como en una celda slo puede haber un patrn compuesto con ceros y unos, cmo se pueden representar el signo, y la coma (o delimitacin de la parte fraccionaria) de un nmero? Se podran enumerar varias convenciones para representar nmeros como patrones de bits de tamao fijo, pero los fabricantes de procesadores ya han adoptado estndares que optimizan el diseo de los circuitos electrnicos necesarios para ejecutar las operaciones aritmticas. Son: la notacin de complemento a 2, para nmeros enteros, y la notacin de coma flotante (o punto flotante, debido a la convencin norteamericana) para nmeros fraccionarios, que utilizan un nmero fijo de bits para representar cada uno de los valores posibles.

Notacin de Complemento a Dos para Nmeros Enteros


En esta notacin, el bit ms significativo de todo patrn implica el signo del nmero representado (0 para positivos y 1 para negativos), y la aritmtica binaria entre patrones cualesquiera de la notacin es equivalente a la aritmtica binaria de los nmeros representados. Considerando una computadora ideal con celdas de 8 bits, entonces: el patrn 00110001 representara a un nmero positivo, y el patrn 10100000 representara a un nmero negativo.
Codificacin

Los nmeros positivos se representan en su forma binaria pura, con ceros a la izquierda hasta completar la cantidad de bits del tamao del patrn, en este caso, 8. As, el nmero decimal 49 se representara con el patrn 00110001, pues haciendo la conversin a binario del decimal 49 resulta: 49 mod 16 = (1)16 Luego, (49)10 = (31)16 = (0011 0001)2 = 00110001 en notacin de complemento a dos con longitud de patrn 8 Los nmeros negativos se representan restando su magnitud al nmero 2n, siendo n el tamao del patrn en bits. As, para representar el nmero decimal -96 se procede de la siguiente manera: Se obtiene la representacin binaria del valor absoluto del nmero decimal, en este caso, de 96 96 mod 16 = (0)16 Luego, (96)10 = (60)16 = (0110 0000)2 96 div 16 = (6)16 49 div 16 = (3)16

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua N 3

Pgina 2 de 5

Se resta la representacin binaria obtenida de la representacin binaria del nmero 2n, siendo n en este caso igual a 8 (es decir, de un 1 seguido de una secuencia de ceros cuya longitud corresponde a la del patrn de bits final deseado, que en este caso es 8). 1 0000 0000 - 0110 0000 = 1010 0000 Luego, (-96)10 = 1010 0000 en notacin de complemento a dos con longitud de patrn 8 De esto se desprende que la cantidad total de nmeros representables en un patrn de n bits (de los cuales la mitad sern negativos y la otra mitad, incluyendo al 0, positivos) es 2n . Para n igual a 8, la cantidad total de nmeros representables es 256. Y los nmeros enteros representables seran desde el 2 n -1 al + 2 n -1 1. Entonces, para n igual a 8 , los nmeros enteros representables seran desde -128 a +127. Existe un lmite para el tamao de los valores que se puede representar. As, utilizando patrones de 8 bits no habr ningn patrn asociado al valor 192 por lo cual no podr obtenerse la respuesta correcta a la suma de 96 + 96 = 192 como se muestra en el siguiente ejemplo.
11

01100000 + 01100000 11000000 Observar el bit de signo del resultado: se sumaron dos valores positivos y se obtuvo un valor negativo. Si como resultado de las operaciones se obtiene un nmero N fuera de los lmites, se dice que se ha producido un desbordamiento. A este tipo de error se le denomina desborde (overflow) y puede detectarse examinando el bit de signo del patrn que representa el resultado.

Otra forma muy prctica de hallar el complemento a dos de un nmero negativo es: invirtiendo los bits del patrn de su valor absoluto (cambiando los unos por ceros y los ceros por unos) y, sumando 1 al resultado. As, el complemento a 2 del decimal -96 se obtiene: (96)10 0110 0000 patrn invertido +1 Luego, (-96)10 = 1010 0000 en notacin de complemento a dos
Lic. Servetto Ing. Jimnez Rey 75.01 Computacin

1001 1111 + 1 1010 0000

Gua N 3

Pgina 3 de 5

Decodificacin

Las tcnicas de codificacin tambin funcionan a la inversa. Si el bit de signo es 0 Se decodifica el patrn como si se tratara de una representacin binaria normal. As, para decodificar el nmero 01100000 en notacin de complemento a dos, aplicando el mtodo de la descomposicin digital: 01100000 = 0 x 20 + 0 x 21 + 0 x 22 + 0 x 23 + 0 x 24 + 1 x 25 + 1 x 26 + 0 x 27 = 0 + 0 + 0 + 0 + 0 +32 +64 = 96 Si el bit de signo es 1 Se puede obtener la magnitud del valor que representa el patrn dado (exceptuando al valor ms negativo del sistema): restando el patrn dado del nmero 2n (es decir, de un 1 seguido de tantos ceros como longitud n tenga el patrn dado). As, para decodificar el nmero 10100000 en notacin de complemento a dos: 100000000 10100000 = (01100000)2 = (96)10 8 ceros Luego, el resultado es (-96)10 invirtiendo los bits del patrn dado (cambiando los unos por ceros y los ceros por unos) y sumando 1 al resultado. As, para decodificar el nmero 10100000 en notacin de complemento a dos: patrn dado patrn invertido sumando 1 magnitud 10100000 01011111 + 1 (01100000)2 = (96)10

Luego, el resultado es (-96)10


Aritmtica en notacin de complemento a dos Suma

Para sumar valores representados en notacin de complemento a dos se sigue el mismo proceso que en la suma binaria antes descripta, excepto que todos los patrones de bits, incluido el patrn del resultado, tienen la misma longitud. Esto significa que al sumar en un sistema de notacin de complemento a dos, se deber truncar cualquier bit adicional que se genere a la izquierda del resultado por un acarreo o llevada final. Por ejemplo: Caso 1
1 1111

Caso 2 1 01100000 + 11001111 100101111 Resultado 00101111 (47) 10 (-49)10 (96)10

11001111 (-49)10 + 11001111 (-49)10 110011110 Resultado 10011110 (-98) 10

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua N 3

Pgina 4 de 5

Resta

Para restar valores representados en notacin de complemento a dos, si se sigue el mismo proceso que en la resta binaria antes descripta (Gua N 2), la solucin del problema del caso 2 requerira un proceso completamente distinto al del caso 1; en cambio, si se traduce el problema a notacin en complemento a dos, se puede calcular la respuesta correcta en todos los casos aplicando el mismo proceso de cmputo que en el caso 1. Por ejemplo, la resta (96)10 - (49)10 equivale a la suma (96)10 + (-49)10 . Esta es la ventaja de la notacin en complemento a dos: la suma de cualquier combinacin de nmeros con signo se puede efectuar con el mismo proceso. Para resolver problemas de sumas y restas bastar con dos circuitos: uno que calcule valores negativos (circuito complementador) y otro que efecte el proceso de suma descripto (circuito sumador). Debido a esta representacin, en todas las computadoras la resta o sustraccin entre nmeros enteros se realiza directa o indirectamente sumando al minuendo el complemento a 2 del sustraendo, pues o no tienen una instruccin para la resta de enteros o la tienen implementada electrnicamente de esta forma. Por lo tanto, si se solicita a la mquina efectuar la resta de (49)10 (almacenado como 00110001) de (96)10 almacenado como 01100000, primero convertira el (49)10 a (-49)10 (que se representa como 11001111) y luego ejecutara el proceso de sumar 01100000 + 11001111 para obtener 00101111 que representa a (47) 10 como se muestra a continuacin: 96 49 00110001 01100000 + 11001111 00101111 (47) 10 01100000

Adems, siendo la multiplicacin una suma repetida y la divisin una resta repetida, se pueden realizar las cuatro operaciones aritmticas con los dos circuitos. El mtodo ms utilizado en la actualidad para la representacin de enteros es el Complemento a 2 debido a la facilidad de efectuar las sumas y las restas con esta representacin. En todos los casos, las operaciones se resuelven con sumas. Este mtodo reduce la complejidad de los circuitos de la Unidad Aritmtica Lgica pues no se precisan circuitos especficos para restar.
Observacin

La notacin de complemento a 2 para patrones binarios, es equivalente a la notacin de complemento a 16 para patrones hexadecimales, por lo que si se quiere trabajar en forma abreviada con patrones hexadecimales, el clculo anterior se traducira a complementar a 16 al hexadecimal 60, reemplazando cada dgito por su complementario a F y luego sumando 1 (F - 6 = 9; F - 0 = F): 9F + 1 = A0. Ejercicios 1) Convertir las siguientes representaciones en complemento a dos a su forma decimal equivalente: a) 00011 b) 01111 c) 11100 d) 11010 e) 00000 f) 10000

2) Convertir las siguientes representaciones decimales a su forma equivalente en complemento a dos empleando patrones de ocho bits: a) 6 b) -6 c) 17 d) 13 e) 1 f) 0

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua N 3

Pgina 5 de 5

3) Suponer que una mquina almacena nmeros en notacin de complemento a dos. Cules serian los nmeros ms grande y ms pequeo que se podran almacenar si la mquina usara patrones de bits de las longitudes que se indican? a) cuatro b) seis c) ocho 4) Sumar los siguientes patrones de bits en notacin de complemento a dos y comprobar los resultados traduciendo los sumandos y la suma a notacin decimal. a) 0101 + 0010 d) 1110 + 0011 b) 0011 + 0001 e) 1010 + 1110 c) 0101 + 1010

5) Resolver los siguientes problemas en notacin de complemento a dos, teniendo en cuenta el desborde e indicando cules respuestas son incorrectas debido a este error. a) 0101 + 0011 b) 0101 + 0110 c) 1010 + 1010 d) 1010 + 0111 e) 0111 + 0001

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua N 3

Pgina 1 de 10

COMPUTACIN
Prctica
Estructuras de Repeticin

Gua N 3

Es muy comn que para resolver problemas en forma algortmica se deba repetir varias veces un bloque de instrucciones para aproximarse progresivamente a una situacin o resultado. Para proveer medios de lograr esto, el lenguaje Pascal ofrece dos estructuras sintcticas que permiten organizar la ejecucin de un bloque de rdenes, condicionando la continuidad de la repeticin de las instrucciones del bloque de diferentes maneras. Por ejemplo, para calcular el mnimo mltiplo comn de dos nmeros enteros, clculo necesario para hallar el denominador del resultado de una suma aritmtica de nmeros racionales en notacin de fracciones, se prueba de dividir ambos nmeros reiteradamente por nmeros primos ordenados a partir del 2, y si algn primo divide a alguno se lo sustituye por el cociente y se toma al primo divisor como factor del resultado. Se contina este proceso a partir de este ltimo divisor hasta que los nmeros originales, luego de varias sustituciones, acaben en la unidad. As, para realizar la suma de las fracciones 15/44 y 14/33, es necesario hallar el denominador del resultado calculando el mnimo mltiplo comn de 44 y 33: 44 22 11 11 33 2 2 3 5 7 1 1 11

As, el mnimo mltiplo comn es el nmero resultante de multiplicar los nmeros primos de la columna de la derecha que han dividido a algn nmero: 2*2*3*11=132. Finalmente, el numerador del resultado se calcula 132/44*15+132/33*14=45+56=101, y el fraccionario resultante es 101/132. Resulta fcil cuando se debe hacer en papel, pero para modelar el clculo del mnimo mltiplo comn algortmicamente se debe tener cuidado de establecer qu es lo que se repite y cmo controlar las repeticiones. Una estructura de control que permite la repeticin de una serie determinada de sentencias se denomina bucle (lazo o ciclo). Las sentencias que se repiten constituyen el cuerpo del bucle. Una posibilidad sera:

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua N 3

Pgina 2 de 10

{SECCIN DECLARATIVA} {Definicin del Objetivo} Program MinMulCom; {Programa que calcula el mnimo mltiplo comn de dos nmeros enteros} {Autor: Lic. Servetto Ing. Jimnez Rey. Versin: 1.0. Marzo de 2007.} {Definicin de Recursos} Uses Crt; Var n1, n2, divisor, producto: Integer; {representan los nmeros enteros a ingresar, los sucesivos divisores de los nmeros ingresados y mnimo comn mltiplo, respectivamente} divide: Char; {refleja si un nmero divide o no a n1 o a n2 y a sus sucesivos cocientes en cada repeticin} {SECCIN ALGORTMICA} {Desarrollo de la Solucin} Begin {Prlogo} {Limpieza de Pantalla de Salida} ClrScr; {Presentacin del Programa} WriteLn(CLCULO DEL MNIMO MLTIPLO COMN DE DOS NMEROS ); {Obtencin de datos desde el teclado} {Especificar ingreso de valores al usuario} WriteLn; Write( Ingrese los dos nmeros separados por al menos un espacio: ); {Ingresar valores desde el teclado} ReadLn( n1, n2 ); {Inicializacin de variables} divisor:=2; {se comienza a probar las divisiones enteras por 2} producto:=1;
{cada vez que se encuentre un divisor se lo multiplicar a producto}

{Resolucin} {Clculo del mnimo comn mltiplo} While (n1<>1) OR (n2<>1)


Lic. Servetto Ing. Jimnez Rey 75.01 Computacin

Gua N 3

Pgina 3 de 10

Do Begin {Inicializacin de variable} divide:=n;


{se presume que divisor no divide a n1 ni a n2}

{Probar si divisor divide a n1} If n1 mod divisor = 0 Then Begin n1:=n1 div divisor; {se sustituye el valor de n1 por el
cociente entre el valor anterior y divisor}

divide:=s {se confirma que hubo divisin} End; {Probar si divisor divide a n2} If n2 mod divisor = 0 Then Begin n2:=n2 div divisor; divide:=s End; {Verificar si divisor dividi a n1 o a n2} If divide = s Then producto:=producto*divisor {divisor es factor del resultado y an puede aparecer otra
vez}

Else divisor:=divisor+1; {divisor no es factor del resultado y se


prepara el siguiente nmero a probar (los no primos nunca resultarn divisores)}

End; {final del bloque que se repite} {Eplogo} {Exhibicin del resultado en pantalla} WriteLn; Write( El mnimo mltiplo comn es: , producto ): {Anuncio de terminacin} Writeln; Writeln(Fin del Programa.); {Generacin de pausa}
Lic. Servetto Ing. Jimnez Rey 75.01 Computacin

Gua N 3

Pgina 4 de 10

Readln End.

Sintaxis (sentencia simple) While <condicin> Do <sentencia> ; Sintaxis (sentencias compuestas: deben delimitarse entre las palabras reservadas Begin y End) While <condicin> Do Begin <sentencia 1> ; <sentencia n> ; End ;

La estructura de control While (mientras) precondiciona la ejecucin de la instruccin o bloque de instrucciones que se le asocia a que se cumpla la expresin lgica que se incluye en su cabecera. As puede suceder que la instruccin o bloque: no se ejecute nunca, o que se ejecute una o varias veces hasta que la condicin lgica deje de verificarse. Cada vez que se ejecuta la accin o acciones asociadas a la estructura es porque se ha controlado la condicin lgica previamente, que por eso que se puede denominar condicin de continuidad. Otra posibilidad de obtener el mismo resultado sera empleando otra estructura de repeticiones, la estructura Repeat (repetir) que efecta el control luego de ejecutar la accin o acciones asociadas. La versin 1.1 del programa anterior diferira de la 1.0 tan slo en la estructura repetitiva, que quedara: Repeat {Inicializacin de variable} divide:=n ; {se presume que divisor no divide a n1 ni a n2} {Probar si divisor divide a n1} If n1 mod divisor = 0 Then Begin n1:=n1 div divisor; {se sustituye el valor de n1 por el
Lic. Servetto Ing. Jimnez Rey 75.01 Computacin

Gua N 3

Pgina 5 de 10

cociente entre el valoranterior y divisor}

divide:=s {se confirma que hubo divisin} End; {Probar si divisor divide a n2} If n2 mod divisor = 0 Then Begin n2:=n2 div divisor; divide:=s End; {Verificar si divisor dividi a n1 o a n2} If divide = s Then producto:=producto*divisor {divisor es factor del resultado y an
puede aparecer otra vez}

Else divisor:=divisor+1; {divisor no es factor del resultado y se prepara


el siguiente nmero a probar (lo no primos nunca resultarn divisores)}

Until (n1=1) AND (n2=1) ; {final del bloque que se repite} Sintaxis (sentencia simple) Repeat <sentencia> Until <condicin> ; Sintaxis (sentencias compuestas: no es necesario delimitarlas entre las palabras reservadas begin/end ) Repeat <sentencia 1> ; <sentencia n> ; Until <condicin> ; En esta estructura de control la accin o acciones asociadas quedan perfectamente delimitadas entre las palabras clave Repeat (repetir) y Until (hasta que), por lo que no resultan necesarios los delimitadores usuales Begin y End. Obsrvese que la condicin de control de las repeticiones es la inversa de la empleada en la estructura While, ya que la condicin no es de continuidad sino de terminacin, es decir, para terminar con las repeticiones: por la ley de DeMorgan:

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua N 3

Pgina 6 de 10

not ((n1<>1) OR (n2<>1)) equivale a not (n1<>1) AND (n2<>1), que equivale a (n1=1) AND (n2=1) Entonces, la diferencia fundamental entre ambas estructuras es cundo se controla si hay que ejecutar o no la o las acciones asociadas: en el caso de la estructura While el control es previo y en el caso de la estructura Repeat es posterior; o sea que las acciones asociadas a la estructura Repeat siempre se ejecutarn al menos una vez. Por eso es que hay prestar especial atencin cuando se la emplea. Observar que: En el caso de ejemplo, si se ingresaren al programa dos unos como valor para n1 y n2, la estructura While no se ejecutara nunca y la estructura Repeat se ejecutara una vez innecesariamente. Por lo tanto, para el caso en cuestin es ms apropiado usar While en lugar de Repeat. En general, en todos los casos sucede lo mismo que en el presente. Siempre una de ambas estructuras resulta la ms adecuada, en atencin a alguna situacin excepcional. La clave entonces para determinar cul de ellas usar en una solucin es pensar en situaciones excepcionales o extremas y ver qu estructura permite resolver mejor tales situaciones. Cuando se depuran las estructuras repetitivas para detectar y eliminar errores se debe verificar siempre la primera y la ltima iteracin del bucle.

Bucles anidados El cuerpo del bucle puede contener cualquier tipo de sentencias: secuenciales, selectivas (simples o compuestas) o repetitivas. Cuando un bucle est contenido en otro bucle se denominan bucles anidados. Los bucles While o Repeat pueden estar anidados entre s o bien bucles While anidados con bucles Repeat o viceversa. Sintaxis

While <condicin1> Do Begin While <condicin2> Do Begin End; ... End;

While <condicin1> Do Begin Repeat Until <condicin2> ; ... End;

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua N 3

Pgina 7 de 10

Repeat While <condicin2> Do Begin End; ... Until <condicin1>;

Repeat Repeat ... Until <condicin2>; Until <condicin1>;

Ciclo infinito
Cuando la accin o acciones que se repiten dentro de una estructura repetitiva nunca dejan de ejecutarse se dice que el ciclo (o bucle) es infinito. En una estructura While se produce cuando la condicin nunca se hace falsa en las sucesivas iteraciones y en un bucle Repeat se produce cuando la condicin nunca se hace verdadera en las sucesivas iteraciones. La repeticin de sentencias en el interior del bucle requiere definir las condiciones de terminacin del bucle con sumo cuidado para evitar un bucle incorrecto o infinito.

Comparacin Estructuras de Control de Repeticin While y Repeat


Estructura de Control While Estructura de Control Repeat

La condicin se verifica antes de que se La condicin se verifica despus de que el ejecute el cuerpo del bucle. Es una estructura cuerpo del bucle.se ha ejecutado. Es una pretest. estructura postest. El cuerpo del bucle puede no ejecutarse nunca El cuerpo del bucle se ejecutar al menos una si la condicin es falsa la primera vez que se vez, independientemente del valor que pueda evala. tener la condicin. Las variables que componen la condicin deben ser inicializadas antes de alcanzar la sentencia While para que la condicin pueda evaluarse. Las variables que componen la condicin no necesitan ser inicializadas antes de alcanzar la sentencia Repeat, pues es posible asignarles valores en el cuerpo del bucle antes de evaluar la condicin.

Si la condicin es verdadera, se ejecutar el Si la condicin es verdadera, se habr cuerpo del bucle y continuar el bucle ejecutado el cuerpo del bucle pero terminar el (condicin de continuidad). bucle (condicin de terminacin). Para evitar un bucle infinito, se debe controlar Para evitar un bucle infinito, se debe controlar que la condicin contenga una variable cuyo que la condicin contenga una variable cuyo valor se modifique en el cuerpo del bucle valor se modifique en el cuerpo del bucle

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua N 3

Pgina 8 de 10

pasando a tomar el valor falso.

pasando a tomar el valor verdadero.

Si el cuerpo del bucle contiene ms de una Si el cuerpo del bucle contiene ms de una sentencia, debe delimitarse las sentencias sentencia, no es necesario delimitar las entre begin y end. sentencias entre begin y end pues estn delimitadas entre Repeat y Until.

Problemas Guas
Los problemas guas son un medio para lograr el aprendizaje de los diferentes mecanismos de programacin. Constituyen un complemento de las clases prcticas expositivas. Es fundamental resolver TODOS los problemas para adquirir las habilidades necesarias para el desarrollo de los trabajos prcticos. 1) Desarrollar un programa en lenguaje Pascal que solicite al usuario el ingreso desde el teclado de una serie de calificaciones (nmeros enteros entre 0 y 10) y exhiba en pantalla el promedio de las calificaciones. Para terminar el ingreso de la secuencia de calificaciones se deber indicar al usuario que ingrese un nmero fuera del rango de enteros entre 0 y 10. Considerar que el usuario puede cometer error de tipeo en el ingreso de los datos. El programa deber controlar el error verificando si el nmero fuera de rango ingresado realmente implica que el usuario quiere terminar el ingreso de datos o si se trata de un error; en tal caso se debe permitir la continuacin del programa. Disear los juegos de datos necesarios y probar el correcto funcionamiento del programa (mediante una prueba de escritorio o ejecutando el programa en la computadora). 2) Desarrollar una versin en lenguaje Pascal del programa anterior (para calcular el promedio de calificaciones con verificacin de error en el ingreso de los datos) que exhiba en pantalla el promedio general, el promedio sin aplazos, la calificacin ms alta y la calificacin ms baja. Disear los juegos de datos necesarios y probar el correcto funcionamiento del programa (mediante una prueba de escritorio o ejecutando el programa en la computadora). 3) Desarrollar un programa en lenguaje Pascal que solicite al usuario el ingreso desde el teclado de un nmero entero POSITIVO e informe en pantalla si el nmero ingresado es o no es primo. En caso negativo, el programa debe exhibir en pantalla al primer nmero entero que divide al ingresado. Para determinar si el nmero ingresado es o no es primo, se tendr en cuenta la definicin de nmero primo (UN NMERO ES PRIMO CUANDO SOLAMENTE ES DIVISIBLE POR S MISMO Y POR LA UNIDAD) y se deber encontrar el algoritmo correspondiente a la siguiente afirmacin: Para asumir que el nmero ingresado es primo, basta con comprobar que ningn nmero lo divide a partir del 2 y hasta el entero siguiente a su raz cuadrada. Para calcular este ltimo entero se pueden emplear funciones predefinidas en el lenguaje Pascal, como Sqrt(x) y Trunc(x). Las funciones se referencian directamente en una expresin o en una

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua N 3

Pgina 9 de 10

sentencia de asignacin y el valor calculado por la funcin es sustitudo por la referencia de la funcin. Nombre Sqrt(x) Argumento(x) Real Descripcin Calcula la raz cuadrada del nmero real y devuelve el resultado como un valor de tipo real. Ejemplo: Si Pi=3.141592, Y:=Sqrt(Pi) almacena en Y el valor 1.77245. Trunc(x) Real Trunca la parte fraccionaria del nmero real y devuelve la parte entera como un valor entero. Ejemplo: Si Pi=3.141592, Y:=Trunc(Pi) almacena en Y el valor entero 3. Considerar que el usuario no comete error de tipeo en el ingreso de los datos. Disear los juegos de datos necesarios y probar el correcto funcionamiento del programa (mediante una prueba de escritorio o ejecutando el programa en la computadora). 4) Desarrollar un programa en lenguaje Pascal que solicite al usuario el ingreso desde el teclado de dos nmeros enteros distintos e informe en pantalla cul es el mximo comn divisor. Para hallar el mximo comn divisor (mcd) de los nmeros se deber emplear el algoritmo de Euclides, es decir, dados los enteros a y b (a > b) se divide a (dividendo) por b (divisor) y se obtiene el cociente c y el resto r; si el resto r resulta distinto de cero, entonces se divide el divisor b por el resto r y se repite el proceso hasta obtener un resto igual a cero. El ltimo valor del divisor ser el mximo comn divisor mcd. Considerar que el usuario no comete error de tipeo en el ingreso de los datos. Disear los juegos de datos necesarios y probar el correcto funcionamiento del programa (mediante una prueba de escritorio o ejecutando el programa en la computadora). 5) Desarrollar un programa en lenguaje Pascal que solicite al usuario el ingreso desde el teclado de dos nmeros enteros distintos e informe en pantalla cul es el mnimo comn mltiplo. Para hallar el mnimo comn mltiplo (mcm) de los nmeros se deber dividir los sucesivos mltiplos del nmero mayor (dividendo) por el nmero menor (divisor) hasta obtener un resto r igual a cero. El ltimo valor del dividendo ser el mnimo comn mltiplo mcm. Los sucesivos mltiplos del nmero mayor se obtienen multiplicando el nmero mayor por 1, luego por 2, por 3 y as sucesivamente. Considerar que el usuario no comete error de tipeo en el ingreso de los datos. Disear los juegos de datos necesarios y probar el correcto funcionamiento del programa (mediante una prueba de escritorio o ejecutando el programa en la computadora).

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua N 3

Pgina 10 de 10

6) Desarrollar un programa en lenguaje Pascal que permita: a) Ingresar desde el teclado dos nmeros enteros fraccionarios (n1 y n2 para representar los numeradores y d1 y d2 para representar los denominadores) y la operacin a realizar (suma, resta, multiplicacin o divisin identificada por un nmero entero). b) Realizar las operaciones aritmticas bsicas (suma, resta, multiplicacin y divisin) y obtener el resultado (n para el numerador y d para el denominador). El caso de la suma ser especial. El programa admitir tantos sumandos como desee el usuario pero la suma se realizar primero con los dos nmeros ingresados y el resultado se reservar como sumando para la prxima operacin de suma, es decir, ser el prximo n1/d1. Para indicar al programador que no desea sumar ms nmeros, el usuario debe ingresar un 0 como numerador y a cualquier otro entero como denominador de un nmero a sumar, que obviamente no debe sumarse al resultado. El denominador d en el caso de la suma y de la resta se obtendr hallando el mnimo comn mltiplo de los denominadores d1 y d2. El resultado deber simplificarse hallando el mximo comn divisor mcd del numerador n y el denominador d y dividiendo n por mcd y d por mcd. c) Informar por pantalla el resultado en la forma n / d. Considerar que el usuario no comete error de tipeo en el ingreso de los datos. Disear los juegos de datos necesarios y probar el correcto funcionamiento del programa (mediante una prueba de escritorio o ejecutando el programa en la computadora). 7) Desarrollar un programa en lenguaje Pascal que solicite al usuario el ingreso desde el teclado de una serie de nmeros enteros positivos distintos (ingresados de a uno por vez) e informe por pantalla la cantidad de dgitos componentes de cada nmero. Para terminar el ingreso de la secuencia de nmeros se deber indicar al usuario que ingrese un nmero negativo o el nmero cero. (A los efectos de generalizar la solucin del problema, imaginar que se cuenta con una mquina ideal que puede almacenar un nmero entero con una cantidad cualquiera de dgitos, por ejemplo, N). Considerar que el usuario no comete error de tipeo en el ingreso de los datos. Disear los juegos de datos necesarios y probar el correcto funcionamiento del programa (mediante una prueba de escritorio o ejecutando el programa en la computadora).

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua N 4

Pgina 1 de 7

COMPUTACIN
Teora
Notacin de Coma Flotante para Nmeros Fraccionarios
La representacin con coma flotante en base 10, por ejemplo, del nmero 1148,639 consiste en descomponerlo en dos partes:

Gua N 4

una parte para representar el nmero con coma fija como un entero o como una fraccin + 0,1148639 llamada mantisa, y otra parte para representar la posicin de la coma decimal +4 llamada exponente. El valor del exponente indica que la posicin real de la coma decimal est cuatro posiciones a la derecha de la coma decimal de la mantisa. La notacin de coma flotante siempre se interpreta como una representacin de un nmero en la forma

mbe
denominada tambin notacin exponencial o notacin cientfica. Por razones prcticas, slo se suelen representar la mantisa m y el exponente e, incluyendo sus signos. As por ejemplo, el nmero anterior se podra expresar en Pascal como un valor constante: 0.1148639E 4 o 1148639E-3 o cualquier otra expresin equivalente. Dada la multiplicidad de posibilidades para expresar un mismo valor con coma flotante, es conveniente tomar como convencin una nica forma, llamada normalizada, que en el lenguaje Pascal, para exhibir valores reales, ubica al punto decimal a la derecha del primer dgito significativo y usa once dgitos en total para representar la mantisa y dos dgitos para representar el exponente: 1.1486390000E+03 Pero para la representacin interna en una computadora, los patrones de representacin se dividen en tres partes: bit de signo del nmero, exponente y mantisa. El primer bit de todo patrn, el ms significativo, se emplea para denotar el signo del nmero representado, usndose el bit 0 para los positivos y el bit 1 para los negativos 1 010 1101 (el nmero representado es negativo) 0 110 1101 (el nmero representado es positivo) A continuacin, una cantidad fija de bits se emplea para representar el exponente y los bits restantes se emplean para representar la mantisa. La mantisa es la parte fraccionaria de un nmero binario y el exponente indica cuntas posiciones hay que mover la coma (en realidad, el punto) binaria, que se asume a la izquierda de la mantisa, para obtener la notacin binaria real del nmero representado. Un nmero en esta representacin se dice normalizado, si el primer dgito de la mantisa es 1. Por ejemplo, asumiendo que una computadora tiene celdas de 8 bits, una notacin de coma flotante posible sera considerar un bit para el signo (S), tres bits para el exponente (E) y cuatro bits para la mantisa (M): S EEE MMMM El orden de almacenamiento es campo de signo (S), campo de exponente (E) y campo de mantisa (M). Considerando los siguientes patrones

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua N 4

Pgina 2 de 7

1 010 1101 0 110 1101 ambos normalizados ( pues el primer dgito de la mantisa es 1): El primer patrn, 1 010 1101, representa realmente el nmero binario fraccionario negativo 1 010 1101 - (11, 01)2 porque para decodificar el patrn se extrae la mantisa y se coloca la coma binaria a su izquierda ,1101 luego, en este caso, la coma se debe correr dos lugares a la derecha (exponente 010 positivo, bit de signo 0 en notacin de complemento a dos) ya que decodificando el exponente 010 en notacin de complemento a dos como si se tratara de una representacin binaria, representa el valor +2 11,01 y finalmente, el nmero representado con el patrn 10101101 es negativo pues el bit de signo del patrn es 1 -0,1101 pudiendo tambin expresarse el proceso como 1 010 1101 -0,1101 * 10 010 = - (11, 01)2 pues la coma se debe mover dos lugares a la derecha ya que el exponente 010 en notacin de complemento a dos representa el valor +2. El segundo patrn, 0 110 1101, representa realmente el nmero binario fraccionario positivo 0 110 1101 + (0,001101) 2 porque para decodificar el patrn se extrae la mantisa y se coloca la coma binaria a su izquierda ,1101 luego, en este caso, la coma se debe correr dos lugares a la izquierda (exponente 110 negativo, bit de signo 1 en notacin de complemento a dos) ya que decodificando el exponente 110 en notacin de complemento a dos 110 - (1000 110) - 010 el resultado representa el valor -2 0,001101 y finalmente, el nmero representado con el patrn 01101101 es positivo pues el bit de signo del patrn es 0 + 0,001101 pudiendo tambin expresarse el proceso como 0 110 1101 0,1101 * 10 110 = 0,1101 * 10 - (1000 110) = 0,1101 * 10 - 10 = (0,001101) 2 pues la coma se debe mover dos lugares a la izquierda ya que el exponente 110 en notacin de complemento a dos representa el valor -2. Pero esta representacin tiene el inconveniente de que la comparacin electrnica de dos patrones para determinar relaciones de orden de los nmeros representados (cul es menor que el otro) es muy complicada, porque implica comparar con diferente criterio las distintas partes componentes de los patrones comparados. Para que la comparacin de patrones en notacin de coma flotante sea anloga a comparar nmeros enteros, se emplea una representacin donde las relaciones de orden entre exponentes sean equivalentes a las relaciones entre mantisas. Para esto, los exponentes se representan en una notacin para nmeros enteros que se denomina notacin en exceso.

Notacin en Exceso
Es una notacin alternativa para representar nmeros enteros. Todos los valores se representan con un patrn de bits de la misma longitud. En esta notacin: si el bit ms significativo del patrn de representacin es 1 el nmero representado es positivo, y

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua N 4

Pgina 3 de 7

si el bit ms significativo del patrn de representacin es 0, el nmero representado es negativo (as, un nmero representado en un patrn cuyo bit ms significativo sea 1 ser considerado mayor que otro en el que tal bit sea 0). Por ejemplo, si para un patrn de longitud igual a tres bits, se escriben todos los diferentes patrones de bits de esa longitud en el orden en que apareceran si se estuviese contando en binario, a partir del 000: 000 001 010 011 100 101 110 111 se observa que el primer patrn con un 1 en su bit ms significativo, el patrn 100, aparece aproximadamente a la mitad de la lista. Se escoge el patrn 100 para representar el valor cero. Los patrones que le suceden (bit de signo igual a 1) representarn los valores +1, +2, +3 y los que le anteceden (bit de signo igual a 0) los valores -1, -2, -3, -4 en el sistema de notacin en exceso. Notacin en 000 Exceso Valor -4 representado 001 -3 010 -2 011 -1 100 0 101 +1 110 +2 111 +3

Si se interpretan todos los patrones del sistema de notacin en exceso empleando el sistema binario tradicional: Sistema Binario 000 001 +1 010 +2 011 +3 100 +4 101 +5 110 +6 111 +7

Valor 0 representado

y se comparan los valores representados en ambos sistemas, se comprueba que en todos los casos la interpretacin binaria excede en +4 la interpretacin en exceso. Sistema Binario 000 001 +1 (-3) + 4 +1 010 +2 (-2) + 4 +2 011 +3 (-1) + 4 +3 100 +4 0+4 +4 101 +5 1+4 +5 110 +6 2+4 +6 111 +7 3+4 +7

Valor 0 representado Exceso (-4) + 4 0

Esta es la razn por la cual este sistema de representacin de nmeros enteros se denomina notacin en exceso. Para el caso analizado en que la longitud de los patrones es igual a tres, se denomina notacin en exceso de cuatro. De manera similar, un sistema en exceso basado en patrones de longitud cinco se denominara notacin en exceso de 16 porque el patrn 10000, por ejemplo, servira para representar el 0 en lugar del valor normal 16; as como en el sistema analizado con anterioridad, el patrn 100 representa el 0 en lugar del valor normal 4, pues todo nmero representado en esta notacin con patrones de n bits, tiene un exceso de 2 n-1.
Codificacin

Con base en estas observaciones se dispone de un mtodo rpido para codificar valores enteros cuando se usa una notacin en exceso. Por ejemplo, para representar al nmero decimal positivo 58 en un patrn de 8 bits, hay que sumarle al nmero dado el exceso correspondiente, en este caso, 2 8-1 27 128. As,
Lic. Servetto Ing. Jimnez Rey 75.01 Computacin

Gua N 4

Pgina 4 de 7

58 + 128 = 186, y, luego convertir a binario el resultado usando 8 bits 1011 1010 para obtener el patrn que representa al nmero 58 en exceso de 128. Y para representar un nmero decimal negativo se procede de igual manera. As, para representar al nmero decimal negativo -115 en un patrn de 8 bits, habra que sumarle el exceso 128 -115 + 128 = 13 y, luego convertir el resultado a binario usando 8 bits 0000 1101 para obtener el patrn que representa al nmero -115 en exceso de 128.
Decodificacin

Por ejemplo, para decodificar un patrn que representa un nmero decimal positivo en notacin en exceso con longitud de 8 bits, como 1011 1010 debe restarse aritmticamente al mismo, el patrn correspondiente al 0 que representa el exceso, en este caso, 1000 0000 (2 8-1) luego 10111010 10000000 = 00111010 representando el resultado en notacin binaria el nmero decimal +58, y para decodificar un patrn que representa un nmero decimal negativo en notacin en exceso con longitud de 8 bits, como 00001101 debe restarse aritmticamente al mismo, el patrn correspondiente al 0 que representa el exceso , en este caso, 1000 0000 (2 8-1) 00001101 10000000 = - (10000000 00001101) = - 01110011 representando el resultado en notacin binaria representa el 115.

Coma Flotante Normalizada con Exponentes en Notacin en Exceso


Decodificacin

Retomando los patrones del ejemplo inicial de representacin en coma flotante: 1 010 1101 0 110 1101 El primer patrn, 10101101 representa realmente el nmero binario fraccionario negativo 10101101 - (0,001101)2 porque para decodificar el patrn: se extrae la mantisa y se coloca la coma binaria a su izquierda ,1101 luego, en este caso, la coma se debe correr dos lugares a la izquierda (el exponente 010 en notacin en exceso es negativo pues el bit de signo es 0), ya que decodificando el exponente 010 (longitud del patrn n = 3) en notacin en exceso de cuatro, se representa el exceso, es decir el valor 0, como

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua N 4

Pgina 5 de 7

2 n-1 23-1 22 4 100 y restando el exceso al patrn 010 010 100 = - (100 010) = - 010 el resultado representa el valor -2 0,001101 y finalmente, el nmero representado con el patrn 10101101 es negativo pues el bit de signo del patrn es 10101101 es 1 - (0,001101)2 pudiendo tambin expresarse el proceso como 1 010 1101 - 0,1101 * 10 (010 100 ) = - 0,1101 * 10 - (100 010 ) = - 0,1101 * 10 010 = - (0,001101)2 pues la coma se debe mover dos lugares a la izquierda ya que el exponente 010 en notacin en exceso de cuatro representa el valor -2. El segundo patrn, representa realmente el nmero binario fraccionario positivo 01101101 + (11,01)2 porque para decodificar el patrn: se extrae la mantisa y se coloca la coma binaria a su izquierda ,1101 luego, en este caso, la coma se debe correr dos lugares a la derecha ( el exponente 110 en notacin en exceso es positivo pues el bit de signo es 1), ya que decodificando el exponente 110 (longitud del patrn n = 3) en notacin en exceso de cuatro, se representa el exceso, es decir el valor 0, como 2 n-1 23-1 22 4 100 y restando el exceso al patrn 110 110 100 = 010 el resultado representa el valor +2 11,01 y finalmente, el nmero representado con el patrn 01101101 es positivo pues el bit de signo del patrn es 0 + (11,01)2 pudiendo tambin expresarse el proceso como 01101101 0,1101 * 10 110 0,1101 * 10 (110 100 ) = 0,1101 * 10 ( 010 ) = (11,01)2 pues la coma se debe mover dos lugares a la derecha ya que el exponente 110 en notacin en exceso de cuatro representa el valor +2.
Codificacin

El trmino normalizada, alude a que para que cada nmero tenga una nica representacin, el bit ms significativo de la mantisa debe ser siempre 1. As, cuando se trata de traducir un nmero binario fraccionario a notacin de coma flotante normalizada, la coma flotante se debe mover de manera que el dgito ms significativo de la mantisa quede 1. Asumiendo patrones de longitud igual a 16 bits como formato de representacin en coma flotante normalizada, considerando 1 bit para representar el signo del nmero (0 para signo positivo y 1 para signo negativo), 5 bits para representar el exponente (en notacin en exceso) y 10 bits para representar la mantisa: Para codificar el nmero binario fraccionario positivo, (10101010,1001)2 se representa el signo del nmero con el bit 0 pues el signo del nmero es positivo, luego el bit de signo ser 0 para representar el exponente, se mueve la coma flotante de manera que el dgito ms significativo de la mantisa quede 1 0,101010101001 y se determina el sentido y la cantidad de posiciones que se debe mover la coma para obtener el nmero binario original, en este caso, 8 posiciones a la derecha, por lo tanto debe representarse el nmero 8 positivo en notacin en exceso con longitud de patrn igual a 5 bits (n = 5), es decir, exceso

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua N 4

Pgina 6 de 7

de 16 (2 n-1 = 2 5 1= 2 4 = 16); para lo cual, teniendo en cuenta que el valor que representa un patrn en notacin en exceso equivale al valor que representara el patrn si se realiza una interpretacin binaria del mismo menos el exceso (en este caso 16) +8 = Valor en Notacin Binaria 16 Valor en Notacin Binaria = 8 + 16 = 24 se debe convertir el valor decimal 24 a binario con longitud de patrn 5, o sea, 01000 + 10000 = 11000 para obtener la representacin del exponente +8 en notacin en exceso de 16 11000 para representar la mantisa se copia los primeros diez dgitos del patrn 10101010,1001 a partir del primer 1 de la izquierda 10101010 10 resultando la codificacin del nmero dado (10101010,1001)2 en notacin de coma flotante normalizada 0 11000 1010101010 Observar que: los ltimos dos dgitos binarios de la mantisa del nmero 10101010,1001 no se pueden representar, es lo que se llama un error de redondeo. para determinar el exponente en notacin en exceso, a la cantidad de posiciones que se corre la coma (10101010,1001)2 0,101010101001 * 10
01000

se le suma (10000)2 = (16)10 , pudiendo tambin expresarse el proceso como (10101010,1001)2 0,101010101001*10(01000 + 10000) 0,101010101001 * 10 11000 0 11000 1010101010 Para codificar el nmero binario fraccionario negativo, (-101001,01001)2 se representa el signo del nmero con el bit 1 pues el signo del nmero es negativo, luego el bit de signo ser 1 para representar el exponente, se mueve la coma flotante de manera que el dgito ms significativo de la mantisa quede 1 - 0,10100101001 y se determina el sentido y la cantidad de posiciones que se debe mover la coma para obtener el nmero binario original, en este caso, 6 posiciones a la derecha, por lo tanto debe representarse el nmero 6 positivo en notacin en exceso con longitud de patrn igual a 5 bits (n = 5), es decir, exceso de 16 (2 n-1 = 2 5 1= 2 4 = 16); para lo cual, teniendo en cuenta que el valor que representa un patrn en notacin en exceso equivale al valor que representara el patrn si se realiza una interpretacin binaria del mismo menos el exceso (en este caso 16) +6 = Valor en Notacin Binaria 16 Valor en Notacin Binaria = 6 + 16 = 22 se debe convertir el valor decimal 22 a binario con longitud de patrn 5, o sea, 00110 + 10000 = 10110 para obtener la representacin del exponente +6 en notacin en exceso de 16 10110 para representar la mantisa se copia los primeros diez dgitos del patrn -101001,01001 a partir del primer 1 de la izquierda 10100101 00

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua N 4

Pgina 7 de 7

resultando la codificacin del nmero dado (-101001,01001)2 en notacin de coma flotante normalizada 1 10110 1010010100 Observar que: el ltimo dgito binario de la mantisa del nmero (-101001,01001)2 no se puede representar, es lo que se llama un error de redondeo. para determinar el exponente en notacin en exceso, a la cantidad de posiciones que se corre la coma (-101001,01001)2 - 0,10100101001 * 10 00110 se le suma (10000)2 = (16)10 , pudiendo tambin expresarse el proceso como (-101001,01001)2 - 0,10100101001*10(00110+10000) - 0,10100101001*10 10110 1 10110 1010010100

Ejercicios
1) Decodificar los siguientes patrones de bits en el formato de coma flotante de un byte. a) 01001010 d) 11011100 b) 01101101 e) 10101011 c) 00111001

2) Codificar los siguientes valores en el formato de coma flotante de un byte. Indicar la ocurrencia de errores de redondeo. a) 2,75 b) 5,25 c) 0,75 d) -3,5 e) -4,375 3) Cul es el valor absoluto ms grande que se puede representar en estos patrones de ocho bits? Y el ms pequeo distinto de 0? 4) Codificar los valores del ejercicio 1 en un formato de 16 bits, con exponentes en 5 bits, y en un formato de 32 bits, con exponentes en 7. 5) Representar el nmero decimal 46,5 como un nmero binario de coma flotante con 24 bits. La mantisa de fraccin normalizada tiene 16 bits y el exponente 8.

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua N 4

Pgina 1 de 6

COMPUTACIN

Gua N 4

Esta parte de los contenidos prcticos del curso contiene informacin complementaria que deber ser analizada y reflexionada por cada alumno. En caso de presentarse dificultades en su comprensin, se recomienda realizar las consultas correspondientes a la Profesora Responsable. Se ha visto que toda computadora manipula bsicamente dos tipos de informacin: rdenes y datos, pudiendo ser stos smbolos en ASCII, valores enteros en complemento a dos o valores reales con punto flotante. La precisin de los nmeros depende en cada mquina de la longitud en bits de sus celdas de memoria. Como los lenguajes de programacin no pueden estar condicionados por la arquitectura de las mquinas donde se ejecuten sus programas, proveen representaciones propias y mltiples para cada tipo de dato numrico. Por ejemplo, un programa en Pascal puede ejecutarse tanto en una computadora con celdas de 16 bits como en otra con celdas de 32 bits y no sera admisible que el mismo programa funcionara con distinta precisin en las dos mquinas; por eso el mismo lenguaje maneja sus propias representaciones, basadas en las representaciones bsicas de cada mquina. Cuando se escribe un programa en Pascal o en cualquier otro lenguaje de programacin, nunca se piensa para qu computadora se est escribiendo ni en detalles arquitectnicos, porque el programa podra ejecutarse en cualquier computadora que tenga el ambiente de desarrollo Pascal. Los programas escritos en lenguajes de programacin de alto nivel tienen la apreciable caracterstica de ser portables de una mquina a otra, porque los ambientes de desarrollo de los lenguajes tienen un traductor de programas, que traduce programas escritos en el lenguaje (archivos con extensin PAS, en el caso de Pascal) a programas con rdenes propias de la computadora en la que est el ambiente (archivos con extensin EXE, en cualquier caso). Por eso, las empresas que venden los ambientes de desarrollo (como Borland, que desarroll al IDE Turbo Pascal), tienen versiones de los mismos ambientes para distintas mquinas, de manera que cualquier programa funcione de igual manera en cualquier mquina.

Tipos Ordinales
Con excepcin de los tipos reales, todos los tipos simples o bsicos de Pascal son ordinales. Los valores de tipos ordinales son contables y ordenados, es decir, se pueden contar uno por uno en un orden especfico. Los tipos ordinales son: Nombre Boolean ShortInt Integer LongInt Byte Word Char Cantidad de Bytes 1 1 2 4 1 2 1 Codificacin Binaria Complemento a 2 Complemento a 2 Complemento a 2 Binaria Binaria ASCII Rango 0 .. 1 -128 .. 127 -32768 .. 32767 -2147483648 .. 2147483647 0 .. 255 0 .. 65535 (smbolos)

El tipo Boolean merece una mencin especial, ya que admite slo dos valores: 0 y 1, que en Pascal se representan por las constantes predefinidas False y True, respectivamente. Existen funciones y procedimientos predefinidos por el lenguaje Pascal que operan sobre tipos ordinales.

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua N 4

Pgina 2 de 6

Funciones Ordinales
Son aquellas que se aplican a argumentos o parmetros de tipo ordinal. La funcin Ord Devuelve el nmero de orden en su conjunto de un valor. Formato Ord( x ) equivale a x Resultado de Ord 31 0 -45 0 1 Ejemplos (para x de cualquier tipo entero) Argumento o Parmetro x 31 0 -45 false true

Ejemplos (para x igual al nmero de orden de un smbolo en la tabla ASCII) Argumento o Parmetro x D 8 x blanco B La funcin Chr Es la inversa de Ord. Devuelve el carcter del cdigo ASCII correspondiente al x-esimo carcter (x es un entero). Ejemplo Chr(66 ) La funcin Succ Devuelve el sucesor del valor del argumento. Formato Succ( x ) devuelve x + 1 para x de tipo ordinal. Ejemplos Argumento o Parmetro x w 346 -5 false Resultado de Succ x 347 -4 true devuelve B que es el carcter 66 del cdigo ASCII Resultado de Ord 68 56 120 32 66

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua N 4

Pgina 3 de 6

La funcin Pred Devuelve el predecesor del valor del argumento. Formato Pred( x ) Ejemplos Argumento o Parmetro x z 346 -5 true Resultado de Succ x 345 -6 false devuelve x - 1 para x de tipo ordinal.

Los valores ordinales tienen un mnimo y un mximo para cada tipo, por lo que las funciones Inc y Succ pueden producir errores de ejecucin en un programa si se aplican al ltimo o primer valor de un conjunto ordinal, respectivamente.

Procedimientos Estndar o Predefinidos


Dos procedimientos estndar que operan sobre tipos ordinales son: Incrementar un valor El procedimiento Inc incrementa un valor de tipo ordinal. Formato Inc( x ) Inc( x , y ) equivale a x:= x + 1 equivale a x:= x + y

para x e y de tipo ordinal. Decrementar un valor El procedimiento Dec decrementa un valor de tipo ordinal. Formato Dec( x ) Dec( x, y ) equivale a x:= x 1 equivale a x:= x y

para x e y de tipo ordinal. Observar que: Inc y Dec son equivalentes a Succ y Pred con la diferencia de que Inc y Dec son procedimientos mientras que Succ y Pred son funciones. La razn por la cual es conveniente utilizar Inc y Dec es mayor velocidad. Ejemplos i:=Succ(i); Para ejecutar esta sentencia de asignacin, el compilador genera cdigo para evaluar la expresin del lado derecho del smbolo de asignacin y a continuacin mueve el valor obtenido como resultado para sustituir el valor actual de la variable i del lado izquierdo del smbolo de asignacin. Por lo tanto, debe transferir un dato de una posicin a otra de la memoria. Inc(i);

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua N 4

Pgina 4 de 6

Es una sentencia que genera cdigo que permite ir directamente a la posicin de memoria de la variable i e incrementar su valor en 1. Por lo tanto, este cdigo es ms rpido que el generado por Succ pues se emplea menos tiempo en incrementar una variable que en transferir un valor de una posicin a otra de la memoria.

Tipos Reales
Los tipos reales en Pascal se basan en la representacin con punto flotante, y son: Nombre Single Real Double Extended Comp Rango 1.5E 2.9E 5.0E
-45 -39

Dgitos .. 3.4E .. 1.7E


38 38 308 4932

Cantidad de Bytes 4 6 8 10 8

7-8 11-12 15-16 19-20 19-20

-324

.. 1.7E

1.9 E (-2
63

-4932

.. 1.1E

+ 1) .. (2 63 - 1).

El tipo Comp es un entero de 64 bits. Soporta slo valores enteros en el rango (-2

63

+ 1) .. (2 63 - 1).

Problema
Desarrollar un programa en lenguaje Pascal que liste en pantalla todos los nmeros primos entre 1 y 65535 (usar el tipo Word). Optimizar la bsqueda explorando nicamente nmeros impares a partir del 2. Emplear funciones ordinales y escribir los nmeros de la lista en pantalla a lo ancho, es decir, se deber determinar la cantidad de nmeros a escribir en cada lnea usando la sentencia Write para escribir cada nmero primo (no WriteLn). Considerar que el usuario no comete error de tipeo en el ingreso de los datos.

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua N 4

Pgina 5 de 6

Apndice
Desarrollar un programa en lenguaje Pascal que solicite al usuario el ingreso desde el teclado de dos nmeros enteros distintos y permita visualizar en pantalla el mnimo mltiplo comn de los nmeros ingresados. Se deber utilizar el tipo de dato Boolean y funciones ordinales. Considerar que el usuario no comete error de tipeo en el ingreso de los datos. Disear los juegos de datos necesarios y probar el correcto funcionamiento del programa (mediante una prueba de escritorio o ejecutando el programa en la computadora). {SECCION DECLARATIVA} {Definicin del Objetivo} Program MinMulCom; {Programa que calcula el mnimo mltiplo comn de dos nmeros enteros distintos} {Autores: Lic. Servetto Ing. Jimnez Rey. Versin 1.1. Marzo de 2007.} {Definicin de Recursos} Uses Crt; Var n1, n2, divisor, producto: Integer; {nmeros ingresados, divisores sucesivos de los nmeros y mnimo comn mltiplo, respectivamente} divide: Boolean; {refleja si un nmero divide o no a n1 o a n2 y a sus sucesivos cocientes en cada repeticin} {SECCION ALGORITMICA} {Desarrollo de la Solucin} Begn {Prlogo} {Limpieza de Pantalla de Salida} ClrScr; {Presentacin del Programa} WriteLn( CLCULO DEL MNIMO MLTIPLO COMN DE DOS NMEROS ); {Preparacin de datos} {Especificar ingreso de valores al usuario} WriteLn; Write( Ingrese los nmeros separados por al menos un espacio: ); {Ingresar los valores desde el teclado} ReadLn( n1, n2 ); {Inicializacin de variables} divisor:=2; {se comienza a probar las divisiones enteras por 2} producto:=1; {cada vez que se encuentre un divisor se lo multiplicar a producto} {Resolucin}

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua N 4

Pgina 6 de 6

{Clculo del MCM} While (n1<>1) or (n2<>1) Do Begin divide:=False; {se presume que divisor no divide a n1 ni a n2} {Probar si divisor divide a n1} If n1 mod divisor = 0 Then Begin n1:=n1 div divisor; {se sustituye el valor de n1 por el cociente entre el valor viejo y divisor} divide:=True {se confirma que hubo divisin} End; {Probar si divisor divide a n2} If n2 mod divisor = 0 Then Begin n2:=n2 div divisor; divide:=True End; {Verificar si divisor dividi a n1 o a n2} If divide {equivale a divide = True} Then producto:=producto*divisor {divisor es resultado y an puede aparecer otra vez} Else divisor:=Inc(divisor); {divisor no es factor del resultado y se prepara el siguiente nmero a probar (lo no primos nunca resultarn divisores)} End; {final del bloque que se repite} {Eplogo} {Exhibicin del resultado por pantalla} WriteLn; Write( El mnimo mltiplo comn es: , producto ) {Anuncio de terminacin} WriteLn; Write( Fin del Programa. ) {Generacin de Pausa} Readln; End. factor del

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua N 5

Pgina 1 de 14

COMPUTACIN
Teora
La Unidad Central de Proceso

Gua N 5

El ncleo de una computadora digital es una coleccin de conmutadores de encendido-apagado diseado para convertir informacin de una forma a otra. El usuario proporciona a la computadora patrones de bits (Entrada) y la computadora sigue las instrucciones para transformar esa entrada en otro patrn de bits (Salida) y devolverlo al usuario. Estas transformaciones son realizadas por la U nidad Central de Proceso (UCP) o Central Processing Unit (CPU), en ingls. Toda computadora tiene una UCP que interpreta y lleva a cabo las instrucciones de los programas, efecta manipulaciones aritmticas y lgicas con los datos y se comunica con las dems partes de la computadora. Es una coleccin compleja de circuitos electrnicos que cuando se incorporan todos en un chip de silicio, como sucede en la mayora de las computadoras actuales, a este chip se lo denomina microprocesador. En una computadora personal corriente, la UCP y otros chips y componentes electrnicos se ubican en un tablero de circuitos llamado tablero madre (motherboard en ingls). Es usual referirse a la Unidad Central de Proceso como UCP, CPU, microprocesador o procesador. Las UCP pueden tener diferentes diseos; los ms conocidos son los de las familias de procesadores Motorola 68000, usados en las computadoras Apple, y las familias de procesadores Intel, usados en las computadoras compatibles con IBM. Para los usuarios de computadoras personales, los factores relevantes de las UCP son la compatibilidad y la velocidad. El software escrito para un procesador Motorola no puede ejecutarse en un procesador Intel y los procesadores Motorola tampoco pueden comprender los programas escritos para procesadores Intel; por eso, l a compatibilidad de un programa con una computadora, depende de para qu UCP fue codificado el programa. L a velocidad de una computadora est determinada, en parte, por la velocidad de su reloj interno, un dispositivo cronomtrico que produce pulsos elctricos para sincronizar las operaciones de la computadora. En general, las computadoras se describen en trminos de su velocidad de reloj, que se mide en unidades llamadas megahertz. De todas maneras, no slo la velocidad del reloj es lo que determina la velocidad de una computadora, es decir, cuan rpido puede procesar informacin; la velocidad tambin est determinada por la arquitectura del procesador, o sea, por el diseo que establece la forma que tienen y la forma en que estn dispuestos en el chip los componentes individuales de la UCP.

Estructura Tipo de una UCP


Toda UCP est dividida, desde el punto de vista conceptual, en dos unidades ms pequeas: la U nidad de C ontrol (UC), que coordina la ejecucin de programas la U nidad A ritmtico-Lgica (UAL), que realiza las operaciones solicitadas por los programas. Como la UCP es un dispositivo distinto de la memoria principal y necesita disponer de datos e instrucciones que provienen de este ltimo dispositivo, contiene celdas de memoria especiales, llamadas R egistros, usadas durante la ejecucin de cada instruccin, como se muestra en la siguiente Figura.

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua N 5

Pgina 2 de 14

Estructura Conceptual de la Unidad Central de Proceso

Jerarqua de Almacenamientos
La UCP tiene registros del mismo tamao que las celdas de memoria principal para guardar temporalmente los datos que se manipulan. En particular, estos registros contienen los operandos o entradas para los circuitos de la UAL y ofrecen un lugar para almacenar el resultado. Estos registros sirven para guardar datos que tienen aplicacin inmediata para la operacin en curso, mientras que la MP sirve para guardar los datos que se van a necesitar en un futuro cercano, y el almacenamiento masivo se usa para guardar datos que probablemente no se necesitarn en el futuro cercano. A esta jerarqua de almacenamientos se aade un nivel adicional, la memoria cach, que es una seccin de memoria de alta velocidad con tiempos de respuesta similares a los de los registros de la UCP, y en la que la UC intenta conservar una copia de la MP que es de inters en un momento dado. En un sistema as, las transferencias de datos que normalmente se haran entre los registros y la memoria central, se efectan entre los registros y la memoria cach, y los cambios se transfieren colectivamente a la MP en un momento ms oportuno. La UC, que es la que se encarga de coordinar la ejecucin de las operaciones, tambin tiene registros propios: el contador de programa, para almacenar la direccin de la celda de memoria en donde se almacena la direccin de la primera o la prxima instruccin u operacin a realizar, y el registro de instrucciones para almacenar la codificacin de la instruccin propiamente dicha una vez recuperada de la memoria central.

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua N 5

Pgina 3 de 14

Arquitectura de una Mquina Genrica

Codificacin y Almacenamiento de Programas


Como la UCP se encarga de coordinar la ejecucin de programas y de ejecutar las operaciones o instrucciones de los mismos, y c o m o las instrucciones y los datos que manipula deben encontrarse en la memoria principal, se necesitan bsicamente tres tipos de instrucciones de mquina para codificar programas: Instrucciones de Transferencia: para transferir datos entre la memoria principal y los registros de la UCP, Instrucciones Aritmtico-Lgicas: almacenados en registros, e para solicitar operaciones aritmtico- l g i c a s e n t r e d a t o s

Instrucciones de Control: para coordinar la ejecucin de las mismas instrucciones. Por ejemplo, para sumar dos nmeros contenidos en sendas celdas de memoria y dejar el resultado en otra celda de memoria, un programa tipo tendra que contener la siguiente secuencia de acciones:

1. Cargar en un registro el contenido de la celda en donde se encuentra el primer sumando 2. Cargar en otro registro el contenido de la celda en donde se encuentra el segundo sumando 3. Sumar los contenidos de los dos registros cargados y dejar el resultado en un tercer registro 4. Almacenar el contenido del tercer registro en la celda destinada para el resultado de la suma 5. Parar

Estas instrucciones deben estar codificadas y almacenadas en celdas consecutivas de la memoria, y la U C har que se ejecuten una tras otra. Las instrucciones 1,2 y 4 son instrucciones de transferencia, la 3 es una instruccin aritmtica y la 5 es una instruccin de control (indica que termin el programa). El nmero de instruccin es identificado por la UC por la direccin de la celda en donde se encuentre almacenada (un programa puede estar almacenado a partir de cualquier celda de la memoria principal, no necesariamente la primera). La versin codificada de una instruccin de mquina casi siempre consta de dos partes:

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua N 5

Pgina 4 de 14

el campo del cdigo de operacin: el patrn de bits que aparece en este campo indica cul de las operaciones elementales (como alguna de las anteriores) solicita la instruccin, y el campo del operando: los patrones de bits de este campo proporcionan informacin ms detallada sobre la operacin que se especifica en el cdigo de operacin. Por ejemplo, en el caso de la instruccin 4, indica qu registro contiene los datos por almacenar y qu celda de memoria debe recibir los datos.

Formato de una Instruccin de Mquina

Instrucciones de Transferencia*
Sirven para transferir patrones de bits a los registros internos de la UCP, ya sea directamente desde las mismas instrucciones o desde celdas de memoria determinadas por las instrucciones mediante sus direcciones, o, en sentido inverso, para transferir patrones de bits contenidos en registros de la UCP hacia celdas de memoria principal. Las instrucciones de transferencia de patrones a registros suelen denominarse instrucciones de carga (loading), y l a s d e t r a n s f e r e n c i a d e c o n t e n i d o d e r e g i s t r o s a c e l d a s d e m e m o r i a , i n s t r u c c i o n e s d e almacenamiento (strorage). Para la carga de un patrn de bits desde una instruccin misma, llamada carga inmediata, basta con codificar la identificacin de la instruccin misma (Cd.Op.), la identificacin o nmero del registro donde cargar el patrn (Nro.Reg.), y el patrn propiamente dicho (Pat.): Cd.Op., Nro.Reg., Pat. Para la carga de un patrn desde una celda de memoria, basta codificar la identificacin de la instruccin (Cd.Op.), la identificacin del registro donde cargar el contenido de la celda (Nro.Reg.) y la direccin de la celda que contiene al patrn (Dir.Celda): Cd.Op., Nro.Reg., Dir.Celda Para el almacenamiento del contenido de un registro en una celda de memoria, basta codificar la identificacin de la instruccin (Cd.Op.), la identificacin del registro que contiene el patrn a almacenar (Nro.Reg.) y la direccin de la celda donde almacenarlo (Dir.Celda ): Cd.Op., Nro.Reg., Dir.Celda.

*Tambin se pueden considerar dentro de este grupo de instrucciones a las que sirven para obtener patrones de bits o
para enviarlos hacia dispositivos de entrada salida de datos (perifricos de E/S). Se ver ms adelante en el desarrollo del curso que muchas veces estas actividades de E/S se efectan con las mismas instrucciones que solicitan transferencias de datos entre la UCP y la memoria principal.

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua N 5

Pgina 5 de 14

Instrucciones Aritmtico-Lgicas
Sirven para ordenar a la UC que solicite una actividad dentro de la UAL, que en general tendr como entrada uno o dos patrones contenidos en registros y producir un patrn como resultado que quedar tambin representado en un registro. Las instrucciones aritmticas imprescindibles en toda computadora son las sumas en complemento a dos y en coma flotante, puesto que el resto de las operaciones aritmticas bsicas pueden expresarse en funcin de la suma y se necesita una instruccin de suma especfica segn la forma de representacin de los sumandos. Para codificar una instruccin de suma basta con codificar la identificacin de la operacin (Cd.Op.), la identificacin o nmero de los dos registros donde se encuentren los sumandos (Nro.Reg.1, Nro.Reg.2) y el nmero de registro en donde debe quedar representado el resultado (Nro.Reg.Res.): Cd.Op., Nro.Reg.1, Nro.Reg.2, Nro.Reg.Res. Las instrucciones aritmticas son todas binarias (con dos operandos) y manipulan el contenido completo de los registros de entrada para producir un resultado; en cambio, las operaciones lgicas sirven para manipular (fijar o consultar) parte del contenido o patrn representado en un registro. Las operaciones lgicas son la conjuncin (and), la disyuncin (or), la disyuncin exclusiva (xor), e l desplazamiento y la rotacin de patrones. Las tres primeras son binarias y las ltimas son unarias, es decir, actan sobre un nico patrn. Las operaciones lgicas binarias actan sobre pares de bits de igual posicin en los patrones o registros de entrada y producen como resultado un nico bit en la misma posicin del patrn o registro de salida (a diferencia de la suma, que acta en forma similar pero puede producir el acarreo de un bit a la posicin izquierda, es decir, operandos de bits individuales pueden producir salidas de ms de un bit). Se muestran a continuacin las tablas que indican los resultados de las operaciones lgicas binarias. Conjuncin o Y 1 1 1 1 0 0 0 1 0 0 0 0

Observar que la nica forma en que el resultado puede ser 1 es que ambos operandos sean 1. Para extender la tabla a los casos en que los operandos son patrones de bits, bastar con aplicar las reglas bsicas a cada columna individual sin producir interaccin entre las columnas. Por ejemplo, aplicando Y a los patrones 10101010 y 11001001 1 Y 1 1 0 1 0 1 0 0 0 0 0 1 1 1 0 0 0 1 0 0 0 1 0

se obtiene como resultado el patrn 10001000. Uno de los principales usos de esta operacin es colocar ceros en una parte de un patrn sin alterar el resto del mismo; por ejemplo, asumiendo registros o patrones de 8 bits, si se quisiera poner en cero el bit ms significativo de un registro cuyo contenido se desconoce (se representa con el smbolo B un bit que puede ser 1 o 0), se podra efectuar la operacin Y entre el registro que se quiere modificar y el patrn 01111111 contenido en otro registro:

B Y 0 0

B 1 B

B 1 B

B 1 B

B 1 B

B 1 B

B 1 B

B 1 B

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua N 5

Pgina 6 de 14

la conjuncin de cualquier bit (1 o 0) con el 0 dara como resultado el primer bit igual a 0, mientras que la conjuncin de cualquier bit (1 o 0) con el 1 dara como resultado una copia del bit cuyo valor se desconoce. El patrn que se emplea para alterar parte de otro se denomina mscara. En este ejemplo, la mscara es el patrn 01111111. Disyuncin u O 1 1 1 1 0 1 0 1 1 0 0 0

Observar que la nica forma en que el resultado puede ser 0 es que ambos operandos sean 0. Y como en el caso anterior, aplicando O a los patrones 10101010 y 11001001

1 O 1 1

0 1 1

1 0 1

0 0 0

1 1 1

0 0 0

1 0 1

0 1 1

se obtiene como resultado el patrn 11101011. Uno de los principales usos de esta operacin es para obtener resultados anlogos a los de la operacin Y: reproducir parte de un patrn contenido en un registro pero fijando unos en partes determinadas. Ahora si se quiere poner un 1 en el bit ms significativo de un registro y copiar el resto, la mscara debe ser 10000000

B O 1 1

B 0 B

B 0 B

B 0 B

B 0 B

B 0 B

B 0 B

B 0 B

y la disyuncin de cualquier bit (1 o 0) con el 1 dara como resultado el primer bit igual a 1, mientras que la conjuncin de cualquier bit (1 o 0) con el 0 dara como resultado una copia del bit cuyo valor se desconoce. Disyuncin Exclusiva u OX 1 1 0 1 0 1 0 1 1 0 0 0

Observar que la nica forma en que el resultado puede ser 1 es que uno y solamente uno de los operandos sea 1, o sea, uno u otro operando pero slo uno de los dos. Y como antes, aplicando OX a los patrones 10101010 y 11001001 1 OX 1 0 0 1 1 1 0 1 0 0 0 1 1 0 0 0 0 1 0 1 0 1 1

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua N 5

Pgina 7 de 14

se obtiene como resultado el patrn 01100011. El uso fundamental de esta operacin es obtener el complemento a uno (inversin de los bits del patrn, 1 por 0 y viceversa) de un registro cualquiera, que se obtiene empleando una mscara 11111111

0 OX 1 1

1 1 0

0 1 1

1 1 0

0 1 1

1 1 0

0 1 1

1 1 0

y la disyuncin exclusiva de cualquier byte con un byte de unos da como resultado el complemento a uno del primero. Recurdese que para obtener el complemento a dos de un patrn y poder as restrselo a otro mediante la suma aritmtica, una de las formas de lograrlo es obtener el complemento a uno del patrn sustraendo y luego sumarle 1 (en este caso de patrones de 8 bits, se le sumara 00000001). Desplazamientos y Rotaciones Sirven para mover bits dentro de un registro a izquierda o a derecha, reciclndolos en el otro extremo en el caso de las rotaciones o desplazamientos circulares o desechndose los bits que se salen de un extremo en el caso de los desplazamientos simples. Estas operaciones se emplean generalmente para alinear bits. Los desplazamientos pueden ser aritmticos, si no alteran bits de signo, o lgicos, si reemplazan bits ms significativos por ceros. Para codificar una operacin lgica binaria en una computadora, alcanza con codificar la identificacin de la instruccin, la identificacin de los registros en donde se encuentran los operandos, y la identificacin del registro en donde se quiere el resultado: CdOp., Nro.Reg.1, Nro.Reg.2, Nro.Reg.Res. Para codificar una operacin lgica unaria (desplazamiento o rotacin), alcanza con codificar la identificacin de la instruccin, la identificacin o nmero del registro con el patrn a desplazar o rotar, y la magnitud del desplazamiento o rotacin (cantidad de veces a aplicar un desplazamiento o rotacin): Cd.Op., Nro.Reg., Cant.

Instrucciones de Control
Son las que sirven para dirigir la ejecucin de un programa, ya sea, mediante la instruccin de salto, ordenndole a la UC que la prxima instruccin que ejecute no sea la prxima de la secuencia de instrucciones del programa, o la instruccin de terminacin, indicndole a la UC que se termin el programa. Para ejemplificar un programa con instrucciones de salto, podra modificarse la secuencia de acciones del programa anterior para que efecte la suma slo si los sumandos son distintos de cero:

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua N 5

Pgina 8 de 14

1. Cargar en un registro el contenido de la celda en donde se encuentra el primer sumando 2. Cargar en otro registro el contenido de la celda en donde se encuentra el segundo sumando 3. Cargar en un tercer registro el valor 00000000 (asumiendo registros de 8 bits)
1
1

4. Si el contenido del primer registro es igual al del tercer registro , seguir por la instruccin 9 5. Si el contenido del segundo registro es igual al del tercer registro , seguir por la instruccin 11 6. Sumar los contenidos de los dos registros cargados y dejar el resultado en un cuarto registro 7. Almacenar el contenido del cuarto registro en la celda destinada para el resultado de la suma 8. Seguir por la instruccin 12 9. Almacenar el contenido del segundo registro en la celda destinada para el resultado de la suma 10. Seguir por la instruccin 12 11. Almacenar el contenido del primer registro en la celda destinada para el resultado de la suma 12. Parar
1

Como puede verse en el ejemplo, las instrucciones de salto pueden ser: condicionales, cuando el salto se condiciona a una comparacin previa de valores (acciones 4 y 5), o incondicionales, cuando se contina la ejecucin del programa en otra instruccin que no sea la siguiente sin ningn condicionamiento previo (acciones 8 y 10). En el primer caso, para codificar una instruccin de salto condicional, hace falta conocer, adems de la identificacin de la instruccin, los nmeros de registros que contienen los valores a comparar y la direccin de la celda de memoria que contiene la siguiente instruccin a ejecutar, en caso que haya que saltar; mientras que, en el segundo caso, para codificar una instruccin de salto incondicional, slo hace falta conocer esta ltima direccin pues siempre habr que saltar.

Lenguaje de Mquina
El lenguaje de una computadora se compone del conjunto de instrucciones que es capaz de ejecutar, todas ellas con la sintaxis vista anteriormente: cada instruccin debe especificarse en trminos de la identificacin de la operacin que solicita, y los trminos u operandos que requiere la operacin. Pero la forma especfica de las instrucciones y la cantidad de bits que ocupan en general, depende de la familia a la que pertenezca el procesador o UCP, y a otras caractersticas de la computadora a saber: La cantidad de instrucciones distintas que pueda ejecutar la computadora, que determina el tamao del cdigo de operacin o instruccin El tamao de las celdas de memoria (el mismo que el de los registros generales de la UCP), que determina el tamao del patrn a especificar para la carga inmediata a un registro La cantidad de registros generales de la UCP, que determina el tamao de los patrones para especificar nmeros de registro La capacidad de la memoria central de la computadora, que determina el tamao de los patrones para especificar direcciones de celdas

Para comparar los valores cargados en el primer y segundo registros con cero, es necesario representar el cero en un registro

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua N 5

Pgina 9 de 14

Para codificar cualquiera de estos componentes, el tamao de los cdigos debe ser siempre homogneo.

El Lenguaje de una Mquina Ideal


Se ver a continuacin cmo se podran codificar las instrucciones de un lenguaje de mquina representativo. Se describe la arquitectura de la mquina genrica a utilizar para el anlisis. Arquitectura de la Mquina La mquina tiene 16 registros de propsito general designados de R0 a RF (el indicador de nmero de registro est en base hexadecimal). Cada registro tiene un byte (8 bits) de longitud. Para identificar los registros dentro de las instrucciones, se asigna a cada uno el patrn nico de cuatro bits que representa su nmero de registro. As, R0 se identifica con 0000 (0 hexadecimal), R1 con 0001 (1 hexadecimal) y RF con 1111 (F hexadecimal). La memoria principal consta de 256 celdas. Cada celda contiene 8 bits (1 byte) de datos. Como hay 256 celdas en la memoria, a cada celda se le asigna una direccin nica que consiste en un patrn de ocho bits entre 00000000 y 11111111 (en hexadecimal: 00 a FF). Los valores de punto flotante se almacenan en 8 bits, de los cuales el primero (ms significativo o del extremo alto) se emplea para el signo, los tres siguientes para el exponente en exceso de 4 y los cuatro restantes (menos significativos o del extremo bajo) para la mantisa. Lenguaje de la Mquina Cada instruccin de mquina tiene 2 bytes de longitud (ocupa dos celdas). Los primeros cuatro bits constituyen el cdigo de operacin; los doce bits restantes constituyen los operandos de la instruccin. En la tabla que sigue constan las instrucciones de mquina en notacin hexadecimal. Se utilizan las letras R, S y T para representar un dgito hexadecimal identificador de registro que variar dependiendo de la aplicacin especfica de la instruccin. Las letras X e Y se usan en lugar de dgitos hexadecimales para representar valores o direcciones de memoria. Cdigo de Operandos Operacin 1 RXY Descripcin de la Instruccin CARGAR el registro R con el patrn de bits que est en la celda de memoria cuya direccin es XY CARGAR el registro R con el patrn de bits XY ALMACENAR el patrn de bits que est en el registro R en la celda de memoria cuya direccin es XY MOVER el patrn de bits que est en el registro R al registro S SUMAR los patrones de bits de los registros S y T como si fueran representaciones en complemento a 2 y dejar el resultado en el registro R SUMAR los patrones de bits de los registros S y T como si representaran valores en notacin de punto flotante y dejar el resultado de punto flotante en el registro R Disyuncin lgica (OR) de los patrones de bits de los registros S y T colocando el resultado en el registro R Conjuncin lgica (AND) de los patrones de bits de los registros S y T colocando el resultado en el registro R

2 3

RXY RXY

4 5

0RS RST

RST

RST

RST

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua N 5

Pgina 10 de 14

RST

Disyuncin lgica exclusiva (XOR) de los patrones de bits de los registros S y T colocando el resultado en el registro R

R0X

ROTAR el patrn de bits del registro R un bit a derecha X veces SALTAR a la instruccin situada en la celda de memoria cuya direccin es XY si el patrn de bits del registro R es igual al patrn de bits del registro nmero 0 PARAR la ejecucin

RXY

C Ejemplo de Programa

000

A continuacin se codifica el programa de suma con saltos descrito anteriormente, asumiendo que est cargado a partir de la direccin de memoria 80 (todos los cdigos se expresan en hexadecimal para simplificar su manejo). Las celdas para el almacenamiento de datos se disponen a continuacin del cdigo del programa (luego de la instruccin de parar). Los datos se asumen en complemento a dos. Celdas 80- 81 82- 83 84- 85 86- 87 88- 89 Instruccin 1198 1299 2000 B190 B294 Descripcin de la Instruccin 1. 2. 3. 4. 5. Cargar en el registro 1 el contenido de la celda en donde se encuentra el primer sumando (celda 98) Cargar en el registro 2 el contenido de la celda en donde se encuentra el segundo sumando (celda 99) Cargar en el registro 0 el valor 00 Si el contenido del primer registro es igual al del registro 0, seguir por la instruccin 9 (en direccin 90) Si el contenido del segundo registro es igual al del registro 0, seguir por la instruccin 11 (en direccin 94) Sumar los contenidos de los registros 1 y 2 y dejar el resultado en el registro 3 Almacenar el contenido del registro 3 en la celda destinada para el resultado de la suma (celda 9A) Seguir por la instruccin 12 (en direccin 96) Almacenar el contenido del registro 2 en la celda destinada para el resultado de la suma (celda 9A)

8A-8B 8C- 8D 8E- 8F 90- 91 92- 93 94- 95 96- 97

6312 339A B096 329A B096 319A C000

6. 7. 8. 9.

10. Seguir por la instruccin 12 11. Almacenar el contenido del registro 1 en la celda destinada para el resultado de la suma (celda 9A) 12. Parar

98 99 9A

0F F9 08

Celda con el primer sumando en complemento a dos (p.e. 15) Celda con el segundo sumando en complemento a dos (p.e. -7) Celda para el resultado de la suma en complemento a dos (suponiendo que ya se ejecut el programa)

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua N 5

Pgina 11 de 14

Ejecucin de Programas
La computadora ejecuta los programas almacenados en la memoria principal pasando una a una las instrucciones a la UC, que las decodifica y luego las ejecuta (segn sea el tipo de instruccin) o hace ejecutar por la UAL. El orden en que se ejecutan las instrucciones es el mismo orden con el que se encuentran almacenadas, excepto que por alguna instruccin de salto se requiera continuar la ejecucin del programa desde otra instruccin. La UC es el dispositivo que realmente ejecuta los programas. La UC cumple su cometido repitiendo una y otra vez lo que se conoce como ciclo de mquina, una secuencia de tres pasos consistente en la obtencin de una instruccin, su decodificacin y su ejecucin: En el paso de obtencin, la UC carga en el registro de instruccin el cdigo de la instruccin almacenada a partir de la direccin del contador de programa, y luego incrementa el valor de este ltimo registro de manera que su contenido represente la direccin de la siguiente instruccin del programa en orden de secuencia. En el paso de decodificacin, la unidad de control descompone el cdigo de la instruccin y prepara los circuitos para ejecutarla. En el paso de ejecucin, la unidad de control activa los circuitos para ejecutar la instruccin previamente decodificada, y en caso de que sea una instruccin de salto cuyo efecto sea continuar la ejecucin del programa desde otra instruccin distinta a la que sigue en orden de secuencia, carga en el contador de programa la direccin de la instruccin que figura como operando o trmino de la instruccin decodificada. El Ciclo de Mquina

Incremento de Productividad de Computadoras por Canalizacin


Como la rapidez con que funciona una mquina est determinada por la velocidad a la que viajan los impulsos elctricos, y sta tiene como lmite fsico a la velocidad de la luz, la nica forma de optimizar el rendimiento de las computadoras es incrementando su productividad. Una tcnica para lograr esto se denomina canalizacin (pipelining) y deviene de reemplazar al ciclo de mquina simple con un canal de ejecucin de instrucciones que al mismo tiempo conduzca a varias instrucciones en distintas fases del ciclo de mquina: mientras una se ejecuta, la siguiente se est decodificando y la que le sigue, se est obteniendo.

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua N 5

Pgina 12 de 14

Con la canalizacin, se puede incrementar la productividad de una computadora a casi el triple. El factor 3 no se alcanza siempre debido a las instrucciones de salto: al ejecutar una que efectivice un salto, las dos siguientes en estado de decodificacin y obtencin no van a ser las que correspondan.

Ejercicios
1. 2. 3. 4. 5. Qu secuencia de acontecimientos se requerir en una mquina para pasar el contenido de una celda de memoria a otra? Qu informacin debe proporcionar la UCP a los circuitos de la memoria principal para escribir un valor en una celda de memoria? La instruccin Si 0 es igual a 0, saltar al paso 7, es un salto condicional o incondicional? Explique su respuesta. Qu diferencia hay entre las instrucciones 15AB y 25AB en el lenguaje de mquina especificado? Suponga que las celdas de memoria en las direcciones 00 a 05 de la mquina descripta contienen los patrones de bits que se dan (en notacin hexadecimal) a continuacin:

Direccin 00 - 01 02 - 03 04 - 05

Contenido 1402 3417 C000

Si echamos a andar la mquina con el valor 00 en el contador de programa, qu patrn de bits habr en la celda de memoria cuya direccin es 17 hexadecimal cuando se haya detenido la mquina? 6. Suponga que las celdas de memoria en las direcciones B0 a B8 de la mquina descrita contienen los patrones de bits que se dan (en notacin hexadecimal) a continuacin:

Direccin B0 - B1 B2 - B3 B4 - B5 B6 - B7 B8

Contenido 13B8 A302 33B8 C000 0F

a) Si el contador del programa comienza con B0, qu patrones de bits habr en el registro nmero 3 cuando se haya ejecutado la primera instruccin? b) Qu patrn de bits habr en la celda de memoria B8 cuando se haya ejecutado la instruccin de parada? 7. Suponga que las celdas de memoria en las direcciones A4 a B1 de la mquina descrita contienen los patrones de bits que se dan (en notacin hexadecimal) a continuacin:

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua N 5

Pgina 13 de 14

Direccin A4 - A5 A6 - A7 A8 - A9 AA - AB AC - AD AE - AF B0 - B1

Contenido 2000 2103 2201 B1B0 5002 B0AA C000

Responda a las siguientes preguntas suponiendo que la mquina se hecha a andar con el valor A4 en el contador de programa: a) b) c) 8. Qu habr en el registro 0 la primera vez que se ejecute la instruccin de la direccin AA? Qu habr en el registro 0 la segunda vez que se ejecute la instruccin AA? Cuntas veces se ejecutar la instruccin de la direccin AA antes de que se detenga la mquina?

Suponga que las celdas de memoria en las direcciones F0 a F9 de la mquina contienen los patrones de bits que se dan (en notacin hexadecimal) a continuacin:

Direccin F0 - F1 F2 - F3 F4 - F5 F6 - F7 F8 - F9

Contenido 20C0 30F8 2000 30F9 FFFF

Si echamos a andar la mquina con F0 en su contador de programa, qu har la mquina cuando llegue a la instruccin de la direccin F8? 9. Suponga que desea aislar los tres bits centrales de una cadena de siete bits colocando ceros en los otros cuatro bits, sin alterar los tres de en medio. Qu operacin lgica deber emplear y con qu otra cadena o mscara?

10. Suponga que desea complementar los tres bits centrales de una cadena de siete bits sin alterar los otros cuatro bits. Qu mscara y qu operacin deber usar? 11. A menudo es conveniente usar una operacin lgica en vez de una numrica. Por ejemplo, la operacin lgica Y (AND) combina dos bits de la misma manera que lo hace la multiplicacin. Qu operacin lgica es casi igual a la suma de dos bits, y qu las distingue? 12. Indique el resultado de aplicar un desplazamiento circular de tres bits a la derecha a las siguientes cadenas de bits: a) 01101010 b) 00001111 c) 01111111

13. Un desplazamiento circular de tres bits a la derecha aplicado a una cadena de 8 bits equivale a un desplazamiento circular a la izquierda de cuntos bits?

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua N 5

Pgina 14 de 14

14. Escribir un programa en el lenguaje de mquina especificado que permita colocar un 1 en el bit ms significativo del patrn de la celda de memoria cuya direccin es A7 (un nmero entero en notacin de complemento a dos) sin modificar los dems bits de la celda, en caso que el nmero almacenado en dicha celda de memoria sea positivo. 15. Escribir un programa en el lenguaje de mquina especificado para que copie los cuatro bits centrales de la celda de memoria E0 en los cuatro bits menos significativos de la celda de memoria E1, colocando ceros en los cuatro bits ms significativos de esa misma celda.

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua 6

Pgina 1 de 2

COMPUTACIN
Teora
Comunicacin de la Computadora con Dispositivos Perifricos

Gua N 6

A travs de los puertos de comunicacin (conexiones que se observan en la parte trasera de las computadoras personales) con perifricos no slo pasan los datos transferidos, sino que tambin pasa otro tipo de informacin, que sirve para que la computadora y el dispositivo se comuniquen. Por ejemplo, es tpico que una computadora pueda enviar caracteres a una impresora ms rpido de lo que sta tarde en imprimirlos, por lo que si no hubiera comunicacin adicional entre la mquina y la impresora, la falta de sincronizacin hara que muchos caracteres se perdieran. Para sincronizar el funcionamiento de la UCP (electrnica y por lo tanto muy rpida) con los dispositivos perifricos (electromecnicos y por lo tanto mucho ms lentos), la mayora de los sistemas permiten una comunicacin bidireccional, llamada saludo (handshaking), entre perifricos y computadora, adems del paso de los datos. En el caso de una impresora, debe ser capaz de comunicarle a la computadora si est lista para imprimir o si est ocupada, de manera que sta espere el estado apropiado antes de enviar un carcter por el puerto. La comunicacin bidireccional (dplex) entre computadora y perifricos suele implementarse segn uno de los siguientes sistemas: semidplex o dplex completo (full duplex). El primero permite comunicacin bidireccional pero no al mismo tiempo, mientras que el segundo permite la comunicacin simultnea en ambas direcciones.

Controladores de Perifricos
Cada tipo de dispositivo perifrico o de almacenamiento masivo opera con un conjunto propio rdenes o instrucciones, conjunto que an para un mismo tipo de dispositivo pude ser distinto para aparatos de distinto fabricante. Si una UCP debiera conocer todas las rdenes posibles para todos los tipos y marcas de dispositivos, su conjunto de instrucciones tendra que ser casi infinito. Este problema tecnolgico se resuelve estableciendo protocolos de comunicacin con perifricos en un lenguaje estndar universal para cada tipo de dispositivo (como si fuera el ingls para la comunicacin diplomtica humana) y teniendo intrpretes para cada tipo de dispositivo que traduzcan las rdenes de la computadora al los dispositivos de ese tipo o familia que tenga conectados. Los intrpretes de rdenes antes mencionados son los controladores, pequeas computadoras esclavas de esa nica actividad, y tambin son necesarios cuando se requiere conectar varios dispositivos a una computadora a travs de un mismo puerto, ya que es necesario contar con circuitos adicionales que coordinen las actividades de los distintos perifricos que compiten por el uso del puerto. Con el objeto de incrementar la eficiencia de la comunicacin con los perifricos, es comn que los controladores se conecten directamente a la UCP y a la memoria central de la computadora: se dice que el controlador tiene acceso directo a memoria (DMA Controller: Direct Memory Access). En este tipo de sistemas la UCP puede preparar una lnea de texto en la memoria y luego pedirle a un controlador que la enve a una impresora; as, el controlador se encarga de enviar uno a uno los caracteres extrayndolos de la memoria mientras que la UCP queda libre para, por ejemplo, preparar otra lnea en otra rea de la memoria. Tambin es tpica la conexin con acceso directo a memoria para los controladores de dispositivos de almacenamiento masivo. El controlador se encarga de transferir registros fsicos de los dispositivos entre la memoria principal y los mismos dispositivos. La UCP le da indicaciones al controlador a travs del puerto, en trminos del registro fsico que debe leer o grabar y la direccin de memoria a partir de donde colocarlo o extraerlo. El rea de memoria empleada para la transferencia de datos entre la UCP y el controlador se denomina buffer (o memoria intermedia o temporal).

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua 6

Pgina 2 de 2

En general, cualquier lugar en donde un sistema pueda dejar datos para que otro sistema los recoja se denomina buffer. En particular, los registros generales de la UCP tambin pueden considerarse buffers entre la unidad de control y la unidad aritmtico-lgica, como asimismo entre la UCP toda y la memoria central. El proceso de transferencia de datos entre dos sistemas a travs de buffers se denomina buffering.

Comunicacin en Serie y en Paralelo


Un aspecto importante en la comunicacin entre una computadora y los dispositivos perifricos u otras computadoras es la forma en que se establece la comunicacin. Se dice que es en serie (por ejemplo con modems), cuando por los medios fsicos de comunicacin viajan unidades de un solo bit ( la comunicacin es en rfaga), y que es en paralelo (por ejemplo con impresoras), cuando viajan patrones completos, cada bit por una lnea individual. La velocidad de la comunicacin en serie se mide en bits por segundo (bps), aunque tambin se emplea como medida la velocidad con que la lnea de comunicacin transfiere estados (informacin de audio o tonos) o velocidad en baudios. Esto es factible cuando la transferencia se efecta combinando cambios en la frecuencia, amplitud (volumen) y la fase (grado en que se retrasa la transmisin) de tonos. Al representar varios bits con un solo estado, la velocidad de transferencia de bits (medida en bps) puede ser bastante mayor que la velocidad de transferencia de estados (medida en baudios).

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua 6

Pgina 1 de 7

COMPUTACIN
Prctica

Gua N 6

Subprogramas como Recurso de Programacin y como Estructuras de Control de Transferencia-Retorno


A desarrollar algoritmos con el mtodo de refinamientos sucesivos, es frecuente encontrarse con enunciados recurrentes; es decir, la solucin del problema general implica solucionar en varias oportunidades un mismo problema menor. Tambin puede suceder que un problema singular resulte de complejidad tal, que su resolucin implique un esfuerzo comparable a refinar el problema original, o que aparezca dentro de una estructura de seleccin o de repeticin y que su refinamiento in situ oscurezca el seguimiento del algoritmo completo. Para evitar la redundancia de cdigo y aislar soluciones a problemas en forma fcilmente abordable, se pueden definir subprogramas como recursos de programacin; es decir, se pueden aislar soluciones y codificarlas como programas independientes, que pueden usarse como herramientas generales para resolver problemas. Otro motivo importante para aislar soluciones es que el particionamiento o modularizacin de los programas facilitan su prueba y depuracin, ya que se pueden definir procedimientos sistemticos para detectar y solucionar errores testeando subprogramas individualmente y luego el programa principal. Esta descomposicin o particionamiento de problemas en unidades manejables llamadas mdulos es la que hace posible la resolucin de problemas grandes; sin ella, los detalles tcnicos requeridos para desarrollar un sistema de gran envergadura excederan la capacidad de comprensin de una persona. En cambio, con un diseo modular, slo es preciso dominar los detalles pertinentes al mdulo bajo consideracin. Este mismo diseo modular facilita el mantenimiento futuro porque permite hacer modificaciones en mdulos aislados. Un subprograma, llamado tambin subrutina, es una serie de instrucciones que forman una unidad de programa escrita en forma independiente del programa principal, pero asociada a l mediante un proceso de transferencia/retorno:
Programa principal Subprograma
Transf.

Ret.

El control se pasa al subprograma en el momento en que se requieren sus servicios, y se devuelve al programa principal cuando el subprograma termina. Este mecanismo puede a su vez repetirse dentro de subprogramas; es decir, un subprograma puede dividirse a su vez en mdulos o solicitar el servicio de algn mdulo especializado. La tcnica para describir los subprogramas propios vara de un lenguaje a otro, y hasta se pueden codificar subprogramas en lenguajes distintos al de un programa principal, e invocarlos en l ya traducidos al lenguaje de mquina. En fin, la modularizacin no slo constituye un medio para descomponer un problema en unidades ms simples, sino que tambin es una forma de desarrollar unidades de software especializadas en la resolucin de algn tipo de problema particular que pueden ser reutilizadas varias veces en un mismo programa y, ms an, en varios programas.
Lic. Servetto Ing. Jimnez Rey 75.01 Computacin

Gua 6

Pgina 2 de 7

Para definir subprogramas en Pascal, se deben declarar y desarrollar en la seccin declarativa de los programas, a continuacin de la declaracin de variables.

Acoplamiento Implcito (Variables Globales) y Explcito (Parmetros) de Subprogramas


Se present la modularidad como una forma de manejar la complejidad en el desarrollo de programas grandes o complejos y de facilitar futuras modificaciones. Esto ltimo depende de la suposicin de que los cambios realizados no afectarn a otros mdulos del sistema por inadvertencia. Por consiguiente, el objetivo al disear un programa modular debe ser maximizar la independencia de los mdulos (procedimientos y funciones). Un factor que va en contra de ese objetivo es el hecho de que es imprescindible algn tipo de conexin entre los mdulos para que formen un sistema coherente. Esta conexin se conoce como acoplamiento. Por lo tanto, la meta de maximizar la independencia corresponde a minimizar el acoplamiento. El acoplamiento entre mdulos normalmente se implanta por medio de listas de parmetros, caso en el que se denomina acoplamiento explcito; pero hay una forma distinta, y potencialmente peligrosa de acoplamiento entre mdulos, denominado acoplamiento implcito, que se obtiene al utilizar datos globales. Los datos globales son objetos de informacin que estn directamente disponibles para todos los mdulos de un programa, a diferencia de los objetos de informacin locales, que estn disponibles dentro de un cierto mdulo, a menos que se pasen explcitamente a otro. Las constantes, los tipos de datos, las variables y los procedimientos y funciones declarados en el programa principal son objetos de informacin globales, mientras que los objetos de cualquiera de estas clases declarados en un mdulo (procedimiento o funcin) son locales a l y globales para sus mdulos internos. El problema potencial del acoplamiento implcito es que un mdulo puede alterar la informacin empleada por otros mdulos en alguna forma no prevista por el resto del programa. Esto es especialmente probable cuando el sistema se ha modificado durante algn tiempo, y el resultado es que un cambio aparentemente sencillo puede tener efectos secundarios imprevistos y, posiblemente, desastrosos. Por todo lo expuesto, la minimizacin del acoplamiento entre mdulos debera orientarse a evitar el uso de datos globales y a usar la cantidad mnima indispensable de parmetros para transferir informacin entre mdulos.

Reglas de Alcance
Los subprogramas se pueden definir dentro de programas principales y tambin dentro de otros subprogramas: representan mdulos de refinamiento que resuelven problemas de diversa jerarqua. Pero no todo los subprograma es conocido y accesible desde cualquier otro. Existen reglas del alcance en el que se puede invocar un subprograma, es decir la zona en el que el nombre de un subprograma es conocido. Por ejemplo, considrese un programa P, descompuesto en los mdulos A, B y C. A su vez, A contiene a los subprogramas AA y AB, y B al subprograma BA. Entonces es posible que P invoque a A, B y C A se invoque a s mismo y a AA y a AB AA se invoque a s mismo, e invoque a A AB se invoque a s mismo, e invoque a A y a AA B se invoque a s mismo, e invoque a A y a BA BA se invoque a s mismo e invoque a A y B C se invoque a s mismo, e invoque a A y B

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua 6

Pgina 3 de 7

Parmetros Formales y Reales


En casi todos los lenguajes de programacin por procedimientos como Pascal, los subprogramas se definen como si fueran entidades totalmente individuales con sus propios datos y algoritmo, de tal modo que un objeto de informacin en el programa principal o bien en el subprograma no es conocido en el otro (aunque dentro de un subprograma contenido se conocen los recursos del continente, por estrategia conviene ignorar este hecho, salvo para el caso de las constantes o tipos de datos definidos especialmente). Con este sistema, el programador debe especificar explcitamente cualquier transferencia de datos entre las dos partes del programa, cosa que se hace incluyendo una lista de los elementos llamados parmetros (o tambin argumentos) que se han de transferir en la misma estructura sintctica empleada para solicitar la ejecucin del subprograma. Pero como todo subprograma es la solucin general a un problema y puede ser invocado incontables veces por el programa principal u otros subprogramas, y cada vez con valores eventualmente diferentes representados por variables, constantes o inclusos valores literales, debe distinguirse entre los parmetros que se empleen para definir a un subprograma y aquellos que se empleen para invocarlo. Los parmetros que se usan en la definicin y desarrollo de un subprograma, es decir tanto en el encabezado como dentro de la seccin algortmica igual que a variables, representan cualesquiera objetos de datos que se usen para invocarlo y se denominan formales, mientras que los que se empleen entre parntesis en cualquier invocacin, desde el programa principal u otro subprograma, y que pueden ser constantes, valores literales o variables locales del invocante, se denominan reales. Podra decirse entonces que los parmetros formales generalmente representan a variables o son variables para variables, mientras que los parmetros reales generalmente son variables.

Parmetros por Valor y por Referencia


Los parmetros pueden emplearse para pasar datos entre el invocante y el invocado, en cualquiera de los dos sentidos en forma excluyente o tambin se puede usar algn parmetro para pasar un dato del invocante al invocado y que ste lo modifique y devuelva mediante el mismo parmetro. En realidad, el lenguaje Pascal admite dos tipos diferentes de parmetros: exclusivos para el ingreso de datos a un subprograma, o parmetros de entrada, o parmetros de doble va o de entrada y salida. Si se pensara en la ejecucin de un subprograma como en la evaluacin de una funcin matemtica, se podra decir que los primeros equivalen a las variables independientes, mientras que los segundos a las variables dependientes. Cuando se invoca un subprograma en Pascal, se asocia una copia del valor de los parmetros reales a los parmetros formales de entrada del subprograma, y se hacen equivalentes los parmetros reales con los formales de entrada y salida. Por eso los primeros tambin se denominan parmetros por valor, y los segundos por referencia, ya que toda vez que se usa en un subprograma un parmetro formal de entrada y salida se esta usando o refiriendo al parmetro real que se use en la invocacin. Para distinguir parmetros por valor de los parmetros por referencia, la definicin de los segundos debe estar precedida por la palabra clave Var. Como ejemplo, considrese el subprograma llamado Ordena, definido con cuatro parmetros de nombres N1, N2, Menor y Mayor, de tal modo que al invocarse el subprograma compare los nmeros asignados a N1 y N2 y devuelva al menor en Menor y al mayor en Mayor:

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua 6

Pgina 4 de 7

procedure Ordena( N1, N2: integer; var Menor, Mayor: integer ); begin if N1 < N2 then begin Menor := N1; Mayor := N2 end else begin Menor := N2; Mayor := N1 end end;

Aqu los parmetros N1 y N2 son de transferencia de datos hacia el procedimiento (o de entrada), y Menor y Mayor son de transferencia bidireccional de datos (o de entrada/salida), en este caso slo desde el procedimiento (o de salida). Esto es, se debe introducir informacin en los parmetros N1 y N2, pero sacarse en los parmetros Menor y Mayor. Una vez definido el subprograma, se puede usar desde un programa principal o desde otro subprograma para colocar en las posiciones Prim y Seg al menor y mayor de los nmeros asociados a las posiciones Num1 y Num2 respectivamente, insertando el enunciado
Ordena( Num1, Num2, Prim, Seg );

en el programa o subprograma en el punto exacto en el que se desea tal accin. Cuando se ejecuta el enunciado, se lleva a cabo la siguiente secuencia de acontecimientos:

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua 6

Pgina 5 de 7

1. Num1 y Num2 se transfieren efectivamente a N1 y N2:


Programa Principal
Num1 Num2 N1

Subprograma
N2

23
Prim

7
Seg

23
Menor

7
Mayor

2. El subprograma coloca el valor menor en la posicin cuya direccin est dada por Menor, y el mayor en la posicin cuya direccin corresponde a Mayor:
Programa Principal
Num1 Num2 N1

Subprograma
N2

23
Prim

7
Seg

23
Menor

7
Mayor

23

3. El subprograma finaliza su ejecucin y el programa principal conserva los resultados del subprograma en Prim y Seg:
Programa Principal
Num1 Num2

23
Prim

7
Seg

23

En esta secuencia de sucesos queda claro que podemos considerar a los nombres empleados para los parmetros en el subprograma como simples representantes de los valores reales que se suministrarn cuando se invoque el subprograma. Es por eso que se denominan parmetros formales, mientras que los valores de datos proporcionados desde el programa principal se denominan parmetros reales. Un importante beneficio de este sistema de sustitucin es que podemos pedir al mismo subprograma que realice su tarea con diferentes conjuntos de datos en distintos puntos del programa principal. En particular, el procedimiento Ordena puede usarse en cierto punto como se vio antes, y en otro para ordenar los valores X e Y con el enunciado Ordena( X, Y, Prim, Seg );

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua 6

Pgina 6 de 7

Procedimientos y Funciones
El subprograma definido anteriormente tiene la forma de procedimiento, es decir la forma de un enunciado ejecutable del programa. Esta forma de subprogramas se emplea en general cuando se esperan varios resultados. Una variacin til de la lista estricta de parmetros como forma de comunicacin entre un programa principal y un subprograma (o entre subprogramas) es el concepto de funcin. Una funcin es un subprograma en el cual los valores de entrada se transfieren a travs de una lista de parmetros, pero la informacin se devuelve de la funcin al programa principal (o al subprograma invocante) en forma de valor de la funcin. Esto es, el valor devuelto por una funcin se asocia al nombre de esa funcin de manera similar a la asociacin entre un valor y el nombre de una variable. La diferencia es que el valor asociado al nombre de una funcin se calcula cada vez que se requiere, ejecutndose el cdigo de la funcin, en tanto que en el caso de una variable el valor simplemente se recupera de la memoria cuando hace falta. Por ejemplo, considrese la funcin llamada Min, definida con dos parmetros de nombres N1, N2, de tal modo que al invocarse compare los nmeros asignados a N1 y N2 y devuelva al menor en como resultado:
function Min( N1, N2: integer ): integer; begin if N1 < N2 then Min := N1 else Min := N2 end;

Aqu los parmetros N1 y N2 son de transferencia de datos hacia la funcin (o de entrada), y Min, el nombre de la funcin, representa el valor de salida. Esto es, se debe introducir informacin en los parmetros N1 y N2, pero sacarse bajo el nombre de la funcin Min. Una vez definida la funcin, se puede usar desde un programa principal o desde otro subprograma para asignar a una variable Menor al menor de los nmeros asociados a las posiciones Num1 y Num2 respectivamente, insertando el enunciado
Menor := Min( Num1, Num2 );

Con esta funcin y una similar Max para devolver el mximo de dos valores, se puede obtener el mismo resultado que con el procedimiento Ordena en
Ordena( Num1, Num2, Prim, Seg );

con la secuencia
Prim := Min( Num1, Num2 ); Seg := Max( Num1, Num2 );

Pero como la minimizacin del acoplamiento entre mdulos debera orientarse a usar la cantidad mnima indispensable de parmetros para transferir informacin entre mdulos, en el caso del subprograma anterior Ordena, podra obtenerse el mismo resultado sin necesidad de emplear parmetros de entrada, y emplear slo dos parmetros de entrada/salida:

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua 6

Pgina 7 de 7

procedure Ordena(var N1, N2: integer ); var temp: integer; begin if N1 > N2 then begin temp := N1; N1 := N2; N2 := temp end end;

para luego invocarlo en


Ordena( Num1, Num2 );

Problemas Guas
Los problemas guas son un medio para lograr el aprendizaje de los diferentes mecanismos de programacin. Constituyen un complemento de las clases prcticas expositivas. Es fundamental resolver TODOS los problemas para adquirir las habilidades necesarias para el desarrollo de los trabajos prcticos. 1. Desarrollar un programa en lenguaje Pascal que permita ingresar desde el teclado un conjunto de nmeros enteros positivos e informe por pantalla si cada uno de los nmeros ingresados ES o NO ES primo. Los nmeros 1, 2 y 3 son primos. El procesamiento de la serie de nmeros finalizar cuando el usuario ingrese un nmero negativo o cero. Para determinar si un nmero ES o NO ES primo, implementar el algoritmo especificado en el Problema N 3 de la Gua N 3 Parte Prctica. Hacer dos versiones de este programa: a) utilizando un subprograma de tipo funcin, y b) utilizando un subprograma de tipo procedimiento para determinar si un nmero es o no es primo. 2. 3. Recrear el problema nmero 1 del Trabajo Prctico N 1 utilizando un subprograma de tipo funcin para evaluar si un ao es bisiesto. Recrear el problema nmero 2 del Trabajo Prctico N 1 utilizando: un subprograma de tipo funcin para definir la funcin a evaluar un subprograma de tipo procedimiento para acotar una raz un subprograma de tipo funcin que permita hallar una raz en un subintervalo de acotacin con la precisin deseada 4. Desarrollar un programa en lenguaje Pascal que permita ingresar desde el teclado un nmero entero positivo que representa al nmero ganador de un sorteo y del cual se calcular su progresin*. El usuario ingresar luego un conjunto de otros nmeros enteros positivos (hasta que se ingrese el valor cero) de los cuales se visualizarn en pantalla aquellos que han sido premiados con un billete para el prximo sorteo al lograr una progresin* igual a la del nmero ganador. * Progresin: Suma de los dgitos de un nmero hasta lograr un solo dgito. Por ejemplo, la progresin del nmero 2830 es igual a 4. Hacer dos versiones de este programa: a) utilizando un subprograma de tipo funcin, y b) utilizando un subprograma de tipo procedimiento para determinar la progresin de un nmero entero positivo.
Lic. Servetto Ing. Jimnez Rey 75.01 Computacin

Gua 7

Pgina 1 de 5

COMPUTACIN
Teora
Organizacin de Dispositivos de Almacenamiento Masivo

Gua N 7

La memoria auxiliar, representada en las computadoras por los dispositivos de almacenamiento masivo, tiene como principal propsito el mantener almacenada la informacin en forma permanente: el registro de la informacin no es electrnico o voltil como en la memoria principal sino magntico u ptico segn el tipo de dispositivo, lo que en cualquier caso lo hace persistente a la falta de alimentacin elctrica. Por supuesto, tambin es objetivo de estos dispositivos almacenar grandes volmenes de informacin: son repositorios o bibliotecas de informacin, sea en forma de datos o en forma de programas. Respecto a los dispositivos de almacenamiento masivo o auxiliar, es frecuente escuchar los trminos en lnea o fuera de lnea, que se refieren a dispositivos que estn o no disponibles en la computadora sin intervencin humana. Por ejemplo, un disquete est en lnea si ya est inserto en la disquetera, y fuera de lnea si no. Los mismos trminos son aplicables para cualesquiera otros dispositivos perifricos, en relacin a si hace falta la intervencin humana para conectarlos y/o encenderlos. U na desventaja de los dispositivos de almacenamiento masivos respecto de la memoria principal, es que requieren movimientos mecnicos para almacenar y recuperar datos, por lo que los tiempos de acceso son siempre muy superiores a los de la memoria principal. Por esta razn, no tendra sentido almacenar la informacin en estos dispositivos en patrones del tamao de los que se almacenan en las celdas de la memoria principal. Las unidades de almacenamiento de estos dispositivos, llamadas registros fsicos, suele n ser mucho mayores; as, por ejemplo, en los discos magnticos (disquetes y discos rgidos), las unidades tienen un tamao estndar de 512 bytes, y se denominan sectores en vez de bytes, y las unidades de asignacin o de direccionamiento tienen un tamao variable segn el dispositivo (1, 2, 4, 8, 16 o 32 sectores consecutivos), y se denominan clsteres (del ingls cluster, que significa grupo o racimo) en vez de celdas. Todo archivo almacenado en un dispositivo magntico puede estar almacenado en varios clsteres, y su descripcin o registro en un directorio estar asociada implcitamente con la lista de direcciones de esos clsteres. En otros dispositivos, como cintas y discos compactos de slo lectura (CD ROM: Compact Disk Read Only Memory) las unidades de almacenamiento fsico se denominan b l o q u e s y sus tamaos varan segn el dispositivo. A la segmentacin de la informacin en registros fsicos, cuyo tamao depende del tipo o caractersticas del dispositivo de almacenamiento, se opone la segmentacin natural de la informacin, en unidades que se denominan registros lgicos, cuyo tamao depende del tipo de informacin. Por ejemplo un programa estar segmentado u organizado en registros lgicos del tamao en bytes necesario para representar una orden o instruccin cualquiera a la computadora; los datos relativos a alumnos de la Facultad para una aplicacin que realice la inscripcin en cursos de la misma, estarn organizados lgicamente en patrones del tamao suficiente para reunir todos los datos personales de un alumno; el contenido de un texto escrito con un procesador de textos como el Word, estar organizado en unidades de 2 bytes, puesto que un texto se puede considerar como una secuencia de caracteres (representados en UniCode, cdigo basado en el ASCII pero extendido a dos bytes por carcter). Los registros fsicos y lgicos rara vez coinciden en tamao, por lo que o bien un registro fsico puede llegar a contener varios registros lgicos o bien pueden ser necesarios varios registros fsicos para contener un registro lgico.

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua 7

Pgina 2 de 5

Adems de los registros fsicos y lgicos, otras unidades lgicas (inherentes a la misma informacin y no a las caractersticas fsicas del dispositivo) de organizacin de la informacin en los dispositivos de almacenamiento auxiliar son los a r c h i v o s (files), tambin llamados ficheros, y los d i r e c t o r i o s (directories), tambin llamados c a r p e t a s (folders). Los archivos son unidades de almacenamiento de registros lgicos, y los directorios, unidades de almacenamiento de registros de localizacin de archivos. As, por ejemplo, los programas de computadora se almacenan en archivos de ordenes, los datos de alumnos en la aplicacin para inscripciones en la Facultad en un archivo de alumnos, y el contenido de un texto escrito con el procesador Word en un archivo tipo documento Word. A su vez, para facilitar el manejo de la informacin, los archivos suelen estar agrupados por tipo, pertenencia a usuarios o pertenencia a aplicaciones, en directorios o carpetas que realmente son conjuntos de referencias a la ubicacin real de los archivos en el dispositivo de almacenamiento; estos directorios son un tipo especial de archivos cuyos registros lgicos contienen los detalles que se suelen visualizar en aplicaciones como el Explorador de Windows: nombre y tipo de archivo, tamao en bytes, fecha de creacin o ltima modificacin.

Ejercicios
1. 2. 3. Qu capacidad real en bytes tienen los disquetes de 3 y 1/2 pulgadas, si tienen en realidad 2.847 registros fsicos? Cul sera la medida en Mb? Qu capacidad tiene un disco rgido con 4.193.216 registros fsicos? Interprete el siguiente reporte efectuado sobre un disco rgido, asumiendo que una unidad de asignacin es una secuencia de registros fsicos consecutivos, anloga a las celdas de la memoria principal pero aplicable a dispositivos de almacenamiento masivo: 1.056.653.312 bytes de espacio total en disco. 983.040 bytes en 60 carpetas. 205.602.816 bytes en 1.499 archivos. 845.299.712 bytes disponibles en disco. 16.384 bytes en cada unidad de asignacin. 64.493 unidades de asignacin en disco en total. 51.593 unidades de asignacin disponibles en disco.

Discos Magnticos, pticos y Magnetopticos


Los discos magnticos son superficies circulares planas en las que se registra informacin (en los dos lados) reorientando molculas magnticamente. Pueden ser discos simples, como los disquetes o discos de respaldo (zip) de 3 pulgadas, que se caracterizan por ser r e m o v i b l e s y portables, o pueden ser sistemas de varios discos montados sobre un mismo eje en una unidad sellada, que por estar fijos en la computadora se denominan discos rgidos. Todos estos discos tienen una cabeza de lectura y escritura para cada superficie. La circunferencia que determina una cabeza sobre una superficie cuando el disco gira se denomina p i s t a , y el conjunto de pistas en una misma posicin de las cabezas (ubicadas en paralelo en un brazo de desplazamiento nico) se denomina cilindro. Todas las pistas de una misma superficie, y por extensin todos los cilindros, tienen la misma capacidad de almacenamiento, y los discos, una vez activados, giran siempre a la misma velocidad, por lo que la densidad de grabacin vara de pista en pista. Las pistas a su vez se dividen en unidades de almacenamiento o de transferencia de informacin, los antes mencionados registros fsicos, que se denominan sectores. El proceso de dar formato a un disco consiste en la identificacin de los sectores de cada pista del disco, de manera que cuando se solicite la lectura o

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua 7

Pgina 3 de 5

escritura de un sector en una superficie de un cilindro, el controlador del disco pueda encontrarlo y hacer efectiva la solicitud. La identificacin de los sectores se graba en un espacio intermedio o g a p , junto con i n f o r m a c i n a d i c i o n a l q u e p e r m i t e l a d e t e c c i n d e e r r o r e s d e g r a b a c i n ( v e r Co n f i a b i l i d a d d e l a Informacin), asignndoles nmeros en secuencia alternada: dependiendo de la velocidad de rotacin, se comienza a numerar uno con el 0, luego se espera que pasen x sectores y se numera otro con el 1, y as siguiendo hasta que se complete la numeracin de todos los sectores de cada pista; ese nmero de sectores intermedios entre dos consecutivos se denomina interleave, y sirve para cuando se quieren leer o escribir varios sectores consecutivos. Luego de leer o escribir un sector, el controlador del disco debe procesar la informacin del gap para la deteccin de errores; mientras hace esto, el disco sigue girando y el inicio del sector adyacente ya pas por la cabeza de lectura/escritura, as que si tuviera que leer o escribir otro a continuacin que fuera el adyacente, debera esperar a que el disco casi complete una revolucin para poder hacerlo; en cambio con el interleave, cuando el controlador termin de procesar la informacin luego de leer o escribir un sector tiene la posibilidad de comenzar el mismo proceso con el prximo inmediatamente. El acceso a un sector implica el desplazamiento de las cabezas hasta ubicarse en el cilindro en que se encuentre y la lectura de identificacin de sectores en la pista hasta ubicar el requerido; de manera que el tiempo de acceso a un sector se compone del tiempo de bsqueda ms el retardo rotacional o tiempo de latencia hasta que el sector se ubique en la posicin de la cabeza. En una lectura o escritura de un sector, al tiempo de acceso hay que agregarle el de transferencia, que es el tiempo en que la cabeza recorre el sector leyndolo o escribindolo. Los discos removibles se diferencian de los rgidos no slo en la capacidad de almacenamiento, que es mucho menor en los removibles por ser discos nicos y mayor en los rgidos por ser sistemas de varios discos, sino tambin en los tiempos de lectura o escritura. Sucede que en las disqueteras, las cabezas de lectura y escritura se apoyan sobre las superficies de los disquetes, mientras que en los discos rgidos no (como las cabezas se mantienen a milmetros de distancia los discos se encierran en una unidad sellada para que no entren partculas de polvo); esta friccin obliga a que la velocidad de rotacin de los disquetes sea menor que la de los rgidos, lo que aumenta el tiempo de transferencia, y a que se deban activar (comiencen a girar) ante cada solicitud, cuando los rgidos comienzan a girar al arrancar la computadora y se mantienen siempre girando, lo que aumenta el tiempo de acceso (ya que el dispositivo debe alcanzar la velocidad de rotacin adecuada); tambin hace que los disquetes tengan una vida til limitada (las superficies de los disquetes estn recubiertas por un material protector que se va desgastando por la friccin). Los dispositivos de almacenamiento pticos son superficies circulares planas de 13 de dimetro. Poseen una capa de material reflector cubierta por otra capa protectora transparente. Una unidad de disco ptico utiliza un rayo lser en lugar de un imn para leer y escribir bits de datos. La grabacin en ellos se efecta mediante creacin de variaciones en la superficie reflectora, y la lectura examinando irregularidades con un lser. Las unidades de CD-ROM solamente pueden leer informacin de un disco. E l C D -R O M ( C o m p a c t D i s k - R e a d O n l y M e m o r y ) e s u n d i s c o d e s l o l e c t u r a , e n t a n t o , e n u n C D -R (Compact Disk Recordable) se puede grabar informacin una sola vez y luego no puede modificarse. La informacin en los CD, en vez de organizarse en pistas concntricas se graba en una sola pista continua en forma de espiral, dividida en bloques. La densidad de grabacin de los datos es la misma en toda la pista, por eso, estos dispositivos se diferencian de los magnticos en la forma de acceso: si bien la cabeza de lectura (un mecanismo ptico con espejos) se debe desplazar al comienzo del bloque en la pista, para poder leer se debe ajustar la velocidad de rotacin para adecuarla a la capacidad del mecanismo. C o m o e l t a m a o d e l a s a p l i c a c i o n e s s i g u e c r e c i e n d o , s e h a c e n e c e s a r i o c r e a r n u e v a s tecnologas y mecanismos para almacenar informacin y sin ocupar mayor espacio. A fines de 1995, surge el DVD (Digital Video Disk). Se trata de un medio de almacenamiento ptico con idnticas caractersticas fsicas que un CD pero con mayor capacidad . El DVD de menor capacidad almacena 4.7 GB. Las unidades DVD son totalmente compatibles con los CD de audio y con los CD-ROM.

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua 7

Pgina 4 de 5

Tambin existen CD regrabables, o discos magnetopticos, en los que la grabacin se efecta fundiendo su superficie reflectora con un lser y reorganizndola mediante campos magnticos antes de que se enfre.

Confiabilidad de la Informacin
Tanto la memoria principal como los dispositivos de almacenamiento pueden sufrir fallas que distorsionen la lectura o escritura de unidades fsicas de informacin (celdas en la memoria principal, y registros fsicos en dispositivos secundarios). Para detectar posibles errores, las celdas de la memoria principal tienen un bit extra oculto, no controlable por instrucciones a la computadora, llamado bit de p a r i d a d , que toda vez que se escriba un patrn en la celda ser fijado por circuitos de la memoria con un valor tal que la cantidad de unos del patrn ampliado con ese bit sea, por ejemplo, siempre par, y que toda vez que se lea el patrn de la celda incluyendo el bit de paridad, otros circuitos chequearn que la cantidad de unos sea par. Si esto ltimo no sucediera, se estara ante un e r r o r d e p a r i d a d , cuyo origen puede deberse a un defecto fsico de la celda que impide escribir correctamente patrones en ella o a una distorsin en la escritura o lectura de la misma. Como los registros fsicos de dispositivos de almacenamiento tienen capacidades mayores que las celdas de memoria y por tanto probabilidades de error tambin mayores, para estos dispositivos se suelen aplicar controles de p a r i d a d p o r b y t e , verticales o transversales, en lugar de los controles por bit, tambin denominados horizontales o longitudinales. El control de paridad transversal se logra agregando un byte por registro fsico cuyo contenido debe ser tal que cada bit controle la paridad de los bits de la misma posicin en los bytes del registro. Por ejemplo, si se considera un registro fsico de dos bytes, para generalizar, con contenido 10110100 01010101 (ocho unos en total), el bit de paridad longitudinal sera 0, puesto que la cantidad de unos en el patrn es par, y el byte de paridad transversal sera 11100001, puesto que si se parara cada byte y se considerara la paridad de cada fila de bits ese sera el resultado: Byte 1 Byte 2 1 0 1 1 0 1 0 0 0 1 0 1 0 1 0 1 Byte Paridad 1 1 1 0 0 0 0 1

Los bits o bytes de paridad no garantizan la deteccin de errores, puesto que en un patrn pueden producirse alteraciones que circunstancialmente conserven la paridad. En dispositivos ms sensibles a las distorsiones como los pticos, se utilizan tcnicas para almacenar los datos que agregan varios bits a cada registro fsico de informacin y no slo detectan errores sino que tratan de corregirlos. El objetivo de los mtodos de correccin de errores es que los patrones de los registros fsicos ampliados con bits extra pertenezcan a un sistema de representacin tal que, si se obtiene un patrn de uno de los registros ampliados que no corresponde al sistema, lo cual indicara un error, es posible ajustarlo a un nico patrn del sistema de representacin con mayor probabilidad que a cualquier otro. Ejemplos de estos sistemas de representacin son los cdigos de Hamming, que fuerzan a que cualesquiera dos patrones del sistema de

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua 7

Pgina 5 de 5

representacin deban diferir en al menos n bits; as, cuando se recupere un patrn que no corresponda a ninguno del sistema, es posible encontrar uno en l con el cual tenga menos bits de diferencia. El valor de n se denomina la distancia de Hamming, y cuanto ms grande sea mayor ser la efectividad de la correccin.

Ejercicios
1. Los bytes siguientes se codificaron originalmente empleando paridad impar. En cules de ellos es evidente que ha ocurrido un error? a. 10101101 b. 10000001 c. 00000000 d. 11100000 e. 11111111 Podra haber ocurrido un error en un byte de la pregunta 1 sin que nos diramos cuenta? Explique su respuesta. Cmo cambiaran sus respuestas a las preguntas 1 y 2 si se le dijera que se utiliz paridad par en vez de impar?

2.

3.

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua N 8

Pgina 1 de 4

COMPUTACIN
Teora
Categoras de Computadoras o Sistemas de Computacin

Gua N 8

Antes de que se produjera la revolucin de los microprocesadores, que popularizara vertiginosamente a las Computadoras Personales o PC, el procesamiento de informacin y los clculos cientficos se efectuaban en macrocomputadoras: mquinas inmensas que debido a su tamao y a la dispersin de calor que ocasiona su funcionamiento requieren instalaciones especiales con clima controlado. Actualmente se siguen usando para tareas de computacin de gran envergadura que en general requieren la atencin simultnea de muchos procesos, como podra ser un sistema de reservaciones de pasajes de una gran compaa area al que sinnmero de agencias de viajes pueden conectarse simultneamente para consultar disponibilidades y hacer reservas. Otro caso podra ser el de la computadora de una agencia aerospacial, que durante los viajes de cada nave debe controlar millones de parmetros simultneamente y realizar complicados clculos para corregir trayectorias o emitir seales para la activacin de dispositivos y el acople o desacople de partes de la nave. Las computadoras como esta ltima, de capacidades excepcionales, suelen denominarse supercomputadoras. Las crecientes capacidades de las computadoras personales, y la tendencia en el mundo empresario a satisfacer necesidades de procesamiento de informacin interconectndolas, han relegado a las macrocomputadoras a su uso para aplicaciones muy complejas. Hoy en da, las computadoras centrales para administrar redes de PC y bases de datos institucionales no requieren la capacidad de una macrocomputadora, que resultara excesiva para estos menesteres. Las mquinas intermedias entre las macrocomputadoras y las computadoras personales son las minicomputadoras. Son ms pequeas que las macro, pero an continan requiriendo condiciones de clima controlado para su funcionamiento. Tanto las sper como las macro y minicomputadoras se caracterizan por ser multiusuario y multitarea. Esto es, admiten varios usuarios conectados simultneamente e interactuando con la mquina desde una terminal (monitor de vdeo y teclado, controlados por la misma mquina), y obviamente, si cada usuario efecta requerimientos a la mquina, sta debe poder satisfacerlos simultneamente: debe ser capaz de ejecutar varios programas al mismo tiempo. En cambio, las PC, como lo indican en su nombre, se dedican al servicio de una sola persona, o cuanto menos a un nico usuario por vez, aunque tambin tienen la capacidad de ejecutar ms de un programa en forma simultnea. La conectividad de mltiples usuarios a una computadora al mismo tiempo, caracterstica a la que se alude generalmente con el nombre de tiempo compartido (time sharing), y la ejecucin simultnea de varios programas o tareas en una misma mquina son responsabilidad del sistema operativo. Adems de por su tamao, las computadoras pueden distinguirse por la cantidad de procesadores centrales o unidades centrales de procesamiento. Las mquinas con una sola CPU se denominan monoprocesadoras o de monoprocesamiento, y las de ms de una CPU, multiprocesadoras, o de procesamiento paralelo. Las mquinas multitarea, no necesariamente deben tener ms de una CPU; es el sistema operativo el encargado de organizar la ejecucin de las distintas tareas o programas en mquinas con procesador central nico, lo cual se denomina procesamiento concurrente, as como tambin es el encargado de distribuir las tareas entre las distintas CPU en mquinas multiprocesadoras. Conceptualmente, las redes de computadoras, que son conjuntos de mquinas interconectadas, pueden considerarse como sistemas multiprocesadores; pero las aplicaciones de software que requieren la participacin de ms de una mquina de una red para poder ejecutarse no son las ms comunes. Este tipo de aplicaciones, que en general implican el procesamiento de datos que se encuentran en distintas mquinas, requieren software de sistema con caractersticas especiales y suelen denominarse aplicaciones distribuidas. Los objetivos fundamentales de las redes son ms bien compartir hardware (usar desde una computadora hardware conectado a otra, como impresoras, escneres, etc.), compartir software (ejecutar en una computadora un programa almacenado en otra) e informacin (acceder desde una mquina a datos
Lic. Servetto Ing. Jimnez Rey 75.01 Computacin

Gua N 8

Pgina 2 de 4

almacenados en otra y copiar archivos de una mquina a otra) y facilitar la comunicacin humana (enviar mensajes desde una mquina a otra). Las redes a su vez se pueden clasificar segn su tamao o extensin geogrfica, en Redes de rea Local, Locales o LAN (Local Area Network), conformadas usualmente por mquinas de un mismo edificio o grupo de edificios cercanos y conectadas entre s por cable coaxial, ondas de radio o rayos infrarrojos, o en Redes de rea Amplia, Globales o WAN (Wide Area Networks), conformadas por mquinas que pueden estar diseminadas en extensiones geogrficas ilimitadas, y que se conectan usualmente va telefnica o por Cable (el sistema privado de transmisin de informacin por cable coaxial y/o fibra ptica). Las redes de rea amplia pueden ser pblicas, como Internet, o privadas; a estas ltimas slo pueden conectarse usuarios de una misma empresa, gobierno o corporacin. Los dispositivos de hardware que debe tener una computadora para poder participar en una red son una placa o microprocesador de comunicacin, que se encargue de monitorear las comunicaciones que tienen a la mquina como receptora y efectuar fsicamente las transmisiones, y, para el caso de redes de rea amplia, con conexin telefnica o por cable, un mdem (modulador-demodulador de comunicaciones), que se encargue de transformar seales digitales (binarias) en analgicas (tonos) para transmitir informacin y al revs para recibir. Las redes locales tambin pueden caracterizarse por su esquema de conexin o topologa de enlaces en:

Barras, cuando todas las mquinas comparten un nico cable coaxial de conexin, al que se denomina barra o bus

Barra

Hub

Cliente Servidor

Estrellas, cuando todas las mquinas se conectan en forma independiente a una mquina central, denominada servidora de la red

Anillos, cuando todas las mquinas se conectan en forma independiente con otras dos, conformando entre todas un crculo o anillo

Irregulares, cuando las mquinas se conectan entre s con esquemas arbitrarios, o alguna o algunas de ellas pertenecen a ms de una red local

La topologa de las redes globales es siempre irregular, y, dado que las conexiones son por telfono o cable, vara dinmicamente; adems, para este tipo de redes se requiere de mquinas afectadas especialmente a las comunicaciones de redes locales con la red global, llamadas ruteadoras (routers). La transmisin de informacin entre computadoras de una red requiere reglas especficas segn la topologa, que configuran lo que se da en llamar el protocolo de comunicacin: En las redes con topologa de barra todas las computadoras comparten un nico cable de conexin y por lo tanto escuchan todas las transmisiones, por lo que cuando una mquina quiere transmitir un mensaje a otra
Lic. Servetto Ing. Jimnez Rey 75.01 Computacin

Gua N 8

Pgina 3 de 4

debe observar reglas como no pisar una transmisin, cerciorarse de que la mquina que debe recibir est accesible, identificarse como emisora de una transmisin e identificar a la mquina que debe recibirla; y para recibir o tomar una transmisin debe monitorear todas las transmisiones y slo tomar las que vengan dirigidas a ella, y confirmar a la mquina emisora si recibi el mensaje transmitido. Para no pisar una transmisin una mquina que quiera emitir debe monitorear el cable a la espera de que est desocupado, y para cerciorarse de que la mquina destinataria de una transmisin est escuchando debe efectuar un saludo y esperar respuesta. En las redes con topologa de estrella todas las mquinas dependen de la mquina central o servidora de comunicaciones para comunicarse con otra, por lo que las reglas en este contexto son similares a las de las redes con topologa de barra: toda mquina que quiera transmitir debe pedir turno a la servidora para transmitir, esperar confirmacin de la servidora de que la mquina destinataria est escuchando e identificar a la mquina destinataria de su mensaje. En las redes con topologa de anillo el protocolo ms comn es el sistema de testigo (token), en el que toda mquina transmite mensajes hacia su derecha y recibe mensajes slo de su izquierda; es decir que para que un mensaje llegue de una mquina a otra, debe ser retransmitido en sentido antihorario por todas las mquina intermedias en el anillo. Para coordinar la emisin de mensajes nuevos en el anillo se pasa un patrn de bits nico llamado testigo que habilita a la mquina que lo reciba a emitir un mensaje propio antes de retransmitirlo. Las topologas irregulares presentan sus propias y nicas exigencias de protocolo, ya que puede haber distintas trayectorias posibles de un mensaje entre la mquina emisora y la receptora. Cada mquina ruteadora que reciba un mensaje a retransmitir debe determinar la mejor ruta para que le llegue a la destinataria. En este tipo de redes los mensajes se suelen dividir en segmentos llamados paquetes, que pueden seguir distintas rutas hacia su destino y ser recibidos en una secuencia incorrecta, por lo que la mquina receptora debe reconstruir el mensaje adecuadamente. Tambin existe una posibilidad de comunicacin entre mquinas llamada conexin remota, mediante la cual desde una mquina se puede usar el procesador de otra, es decir, correr un programa o aplicacin en una mquina distante pero interactuando y viendo resultados en el teclado y monitor propios.

Ejercicios
Cul es la desventaja de restringir, en las redes de anillo, la transferencia de mensajes en un solo sentido en el anillo? Suponga que las mquinas A, B, C, D y E estn conectadas en forma de anillo en ese orden y en sentido horario (sentido en el que giran las agujas de un reloj), y que el privilegio para transmitir un y slo un mensaje nuevo se controla mediante un testigo que se mueve en sentido antihorario. Suponga, adems, que A tiene tres mensajes que desea colocar en la red, C tiene dos, D uno y E dos. Si el testigo est ahora entre A y B, en qu orden transmitirn las mquinas sus mensajes?

Categoras de Software
Los programas de computadoras pueden clasificarse en tres grandes grupos o categoras, de acuerdo a sus propsitos: en software de sistema, software de aplicacin, y software de desarrollo. Cuando varios programas contribuyen a un mismo propsito suele referirse al conjunto como sistema. En la categora de software de sistema se ubican los programas y sistemas destinados exclusivamente a las mismas computadoras, que se encargan de que stas presten todos sus servicios: comunicacin con usuarios y ejecucin de aplicaciones (sistemas operativos), y programas de proteccin, inspeccin y reparacin de dispositivos de almacenamiento y contenidos (programas antivirus, programas de optimizacin y verificacin de dispositivos de almacenamiento masivo, programas de compresin y/o cifrado de datos, etc.). La preparacin y codificacin en una computadora de la informacin a enviar a otra en una red as como la decodificacin de la informacin recibida desde otra mquina segn un protocolo de transmisin es responsabilidad de una subcategora de software de sistema, llamado software de comunicacin. Los programas del software de comunicacin pueden formar parte del Sistema Operativo, en cuyo caso las redes
Lic. Servetto Ing. Jimnez Rey 75.01 Computacin

Gua N 8

Pgina 4 de 4

con este tipo de software de comunicacin se denominan cerradas o propietarias (todas las mquinas deben tener sistemas operativos de la misma marca), o bien pueden ser aplicaciones de mercado vertical (por ejemplo, el software de comunicaciones Novell Network ), en cuyo caso las redes se denominan abiertas (las mquinas pueden tener sistemas operativos de distintas marcas, pero el software de comunicacin de la misma compaa, desarrollado para el sistema operativo en particular). Los programas para conexin remota, acceso telefnico a redes, marcadores de telfono para teleconferencias, servicios de mensajera para determinar los contactos que se encuentren conectados a la red y mandarles mensajes, y programas de NetMeeting para establecer comunicacin con otros a travs de Internet o una Intranet utilizando voz, vdeo, compartir aplicaciones (por ejemplo TelNet, Explorer, Dialer, MSMsgs y Conf, en Windows) tambin entran dentro de esta subcategora. En la categora de software de aplicacin se ubican los programas destinados a usuarios en general, o a grupos de usuarios en particular. Los programas o aplicaciones destinados a usuarios en general, tales como los procesadores de texto (como Word), las planillas de clculo (como Excel ), generadores de presentaciones (como PowerPoint), administradores de correo electrnico (como Outlook o Eudora), navegadores de Internet (como Netscape) o programas de administracin de datos para oficinas (como Access), etc., se consideran de una subcategora designada como software de mercado horizontal. Las aplicaciones destinadas a usuarios especializados o profesionales, como los sistemas de contabilidad y administracin (como Tango), las aplicaciones de diseo grfico y edicin especializada (como CorelDraw) o de diseo asistido (como AutoCAD), etc., pertenecen a la subcategora de software de mercado vertical. Y tambin hay una tercer subcategora, donde se ubican las aplicaciones desarrolladas por los profesionales en informtica segn requerimientos especficos de usuarios: el software a medida. Y en la categora de software de desarrollo se ubican los programas y sistemas destinados a desarrolladores de software, como por ejemplo los ambientes integrados de desarrollo de los lenguajes de programacin (que incluyen editores de programas, traductores de cdigo de lenguaje de programacin a cdigo de mquina y depuradores de programas), y otros sistemas que sirven como herramientas para quienes se encargan del desarrollo de sistemas informticos, como por ejemplo las herramientas CASE (Computer Aided Software Engineering), que sirven para hacer distintos tipos de diagramas o planos del software (seran equivalentes al AutoCAD para los Ingenieros) para sistemas muy complejos.

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua N 8

Pgina 1 de 5

COMPUTACIN
Prctica
Estructuras de Datos

Gua N 8

Muchos problemas se refieren a entidades de informacin complejas, que no pueden representarse con apenas una variable. Por ejemplo, los nmeros fraccionarios, cada uno requiere una variable para el numerador y otra para el denominador; las fechas, cada una requiere variables distintas para el da, el mes y el ao, y nmeros complejos, cada uno requiere variables distintas para la parte real y para la parte fraccionaria. En estos casos, lo natural sera referirse a cada nmero racional, fecha o nmero complejo mediante una nica variable, cuyos valores componentes se puedan referenciar con nombres comunes a todas las variables con la misma clase de valores compuestos. A los efectos de simplificar la organizacin y referenciacin de datos compuestos, en el desarrollo de programas se pueden definir familias de variables cuyos valores se compongan de dos o ms valores, sean bsicos o elementales, o sean a su vez compuestos. Para esto es necesario definir previamente las composiciones de valores a emplear en el programa, llamadas tipos de datos compuestos o estructurados, y luego las variables cuyos valores han de tener tales composiciones. Las composiciones pueden ser arbitrarias, o asociaciones, o de valores homogneos, o arreglos. La diferencia entre estructuras de componentes heterogneos y arreglos es que, en el primer caso, cada componente tiene un nombre genrico propio, y en el segundo, un componente slo se puede referenciar indicando su posicin. No slo es factible definir tipos de datos para describir valores compuestos, sino tambin para restringir dominios de valores bsicos; es decir, para definir variables cuyos valores slo podrn ser los que se especifiquen en un determinado subconjunto. Las restricciones slo pueden ser por definicin de rangos de valores en conjuntos ordenados, como los enteros y los caracteres. Tanto para especificar estructuras de datos como restricciones de dominio, el procedimiento es declarar, antes de hacer lo propio con las variables, las estructuras o restricciones como tipos, asignndoles un nombre que se emplear como referencia al momento de definir las variables. As, adems de contar en los programas con los tipos bsicos enteros, reales y smbolos, se pueden tener datos con estructuras arbitrariamente complejas que podrn referenciarse con slo un nombre, para aludir a la estructura, y con nombres genricos o posiciones de componentes, para aludir a sus partes en los casos de asociaciones y arreglos, respectivamente.

Tipos de Datos Compuestos o Estructurados Arreglos


Los arreglos sirven para definir estructuras de datos compuestas por muchos valores del mismo tipo, que a su vez puede ser bsico o compuesto. Por ejemplo, si se deseara desarrollar un programa para aritmtica de polinomios, se podra definir el tipo Polinomio como sigue:
Type Coeficiente = Array [0 .. 99] of Real : Var Grado : byte ; Coef1, Coef2 : Coeficiente :

El orden de cada trmino de un polinomio se asume coincidente con la posicin del coeficiente en el arreglo. Tal como se especifica en la definicin del tipo, las posiciones se numeran desde 0 hasta 99, pero slo se utilizan desde la 0 hasta la del grado del polinomio cargado en una variable. En este esquema, si un polinomio tiene trminos nulos se deben especificar obligatoriamente.
Lic. Servetto Ing. Jimnez Rey 75.01 Computacin

Gua N 8

Pgina 2 de 5

Para procesar arreglos existe una estructura de control de repeticiones especial, cuyo uso se ilustra a continuacin, en un subprograma para cargar un polinomio desde el teclado, y usando las definiciones previas:
Procedure CargarPolinomio( Var coef: Coeficiente; Var gp; byte ); Var i: Byte; {ndice de trminos del polinomio} Begin WriteLn; Write ( Ingrese el grado del polinomio que quiere procesar: ); ReadLn(gp); WriteLn; WriteLn( Ingrese los , (gp + 1), trminos del polinomio separados por un espacio: ); For i := 0 to gp Do Read( coef [i] ); ReadLn End;

La sentencia For se utiliza cuando se necesita que un bucle se ejecute una cantidad determinada de veces y se conoce de antemano el nmero de veces que se ejecutan las sentencias del interior del bucle. Si se desea que las sentencias controladas se ejecuten hasta que ocurra una determinada situacin y no se conoce de antemano el nmero de repeticiones, entonces se debe utilizar la sentencia While o Repeat en lugar de For. Sintaxis Incrementos del contador de for (to) For <variable> := <valor inicial> to <valor final> Do Begin sentencia 1: sentencia 2; sentencia n; End; Decrementos del contador de for (downto) For <variable>:= <valor inicial> downto <valor final> Do Begin sentencia 1: sentencia 2; sentencia n; End;

La variable de control variable, valor inicial y valor final deben ser todas del mismo tipo y deben ser ordinales (no se admite el tipo real). Los valores iniciales y finales pueden ser tanto expresiones como constantes. Antes de la primera ejecucin del bucle, a la variable de control variable se le asigna valor inicial. La ltima ejecucin del bucle ocurre cuando la variable de control es igual al valor final. Cuando se utiliza la palabra reservada to, la variable de control se incrementa en cada iteracin; si se utiliza downto, la variable se decrementa. No se debe intentar modificar el valor de la variable de control, ni el valor inicial, ni el valor final dentro del bucle. El valor de la variable de control queda indefinido cuando termina la ejecucin del bucle. Tambin pueden definirse arreglos de ms de una dimensin. Por ejemplo, si se quisiera armar un calendario anual para hacer luego una impresin ordenada, se podra definir un arreglo:
Lic. Servetto Ing. Jimnez Rey 75.01 Computacin

Gua N 8

Pgina 3 de 5

Var calendario: Array[1..12, 1..5, 1..7] of Byte;

En esta definicin, la variable calendario tiene doce meses numerados de 1 a 12, cada uno de los cuales puede tener cinco semanas, numeradas de 1 a 5, y cada una de las cuales tiene siete das, numerados de 1 a 7. Obsrvese que se puede definir directamente una estructura como tipo de variable. Esto slo es conveniente cuando se va a utilizar una o ms variables con esa estructura nicamente en el programa principal y no se pasar como parmetro a ningn subprograma, ya que en la cabecera de subprogramas no se pueden definir estructuras: si se quiere usar un parmetro estructurado, debe definirse el tipo en el programa principal y declarar el parmetro con el nombre del tipo ya definido previamente.

Restricciones de Dominio Subrangos


La definicin de subrangos como tipo obedece a la necesidad de restringir el dominio de valores de una variable de tipo entero o carcter. Por ejemplo, para definir una variable que slo puede tener como valor una letra mayscula, se puede escribir:
Type Mayscula = A .. Z; {el conjunto de caracteres ASCII est ordenado lexicogrficamente}

Problemas Propuestos 1 Escribir un programa en lenguaje Pascal que cargue nmeros enteros desde el teclado en dos vectores de igual tamao y obtenga el resultado en otro vector. Desarrollar dos versiones de este programa: una en la cual se solicite al usuario el ingreso de la cantidad de elementos a sumar y otra en la cual se pregunte al usuario si desea sumar otros elementos luego de ingresar el primer sumando. Disear los datos de prueba necesarios para verificar el correcto funcionamiento del programa. Se deber utilizar subprogramas para: a) cargar los vectores sumandos, b) efectuar la suma y c) mostrar el contenido del vector suma por pantalla. Considerar que: El usuario no comete error de tipeo en el ingreso de los datos. La cantidad mxima de elementos que pueden contener los vectores es 100.

Ejemplo Vector sumando1: Vector sumando2: Vector suma:

3 7 10

15 4 19

8 25 33

11 17 28

2 Desarrollar un programa en Lenguaje Pascal que permita invertir los elementos de un vector (intercambiar elemento de primera posicin con elemento de ltima posicin, elemento de segunda posicin con elemento de anteltima posicin y as sucesivamente) en caso que la cantidad de elementos sea par; en caso contrario, calcular el valor del nmero mayor que contiene el vector. Se deber mostrar por pantalla el contenido del vector invertido y el valor del mximo nmero del vector. Se deber utilizar un subprograma (invocndolo desde el programa principal) para:
Lic. Servetto Ing. Jimnez Rey 75.01 Computacin

Gua N 8

Pgina 4 de 5

a) Cargar los elementos (nmeros enteros) en el vector. Los nmeros sern ingresados por el usuario desde el teclado. No se conoce la cantidad de nmeros a ingresar. b) Invertir el vector. c) Mostrar el contenido del vector invertido en pantalla. d) Determinar el valor del elemento mayor del vector. Al menos uno de los subprogramas debe ser de tipo funcin. Considerar que: La cantidad mxima de elementos del vector es 100. El usuario no comete error de tipeo en el ingreso de los datos.

Ejemplo 1 Vector Cargado 25 47 74 51 33 62

Vector Invertido 62 Ejemplo 2 Vector Cargado 25 47 74 51 33 62 14 33 51 74 47 25

El valor del elemento mayor del vector es 74. 3 Escribir un programa en lenguaje Pascal que obtenga desde el teclado la dimensin de una matriz cuadrada y los elementos de la matriz (nmeros enteros), halle su transpuesta (utilizando la misma matriz para realizar la transposicin, es decir, no se podr definir una matriz auxiliar) y muestre los elementos de la matriz resultante por pantalla. Disear los datos de prueba necesarios para verificar el correcto funcionamiento del programa. La matriz transpuesta de una matriz dada es aquella que tiene como filas los elementos de las columnas de la matriz dada. Considerar que: La dimensin mxima de la matriz es 50. El usuario no comete error de tipeo en el ingreso de los datos.

Utilizar subprogramas para: a) cargar la matriz b) transponer la matriz c) mostrar la matriz transpuesta por pantalla. Ejemplo Matriz dada 1 5 9 13 2 6 10 14 3 7 11 15 4 8 12 16
75.01 Computacin

Lic. Servetto Ing. Jimnez Rey

Gua N 8

Pgina 5 de 5

Matriz transpuesta 1 5 2 3 4 6 7 8

9 10 11 12

13 14 15 16

4 Escribir un programa en lenguaje Pascal que obtenga desde el teclado las dimensiones de dos matrices rectangulares y los elementos de las matrices, las multiplique y muestre la matriz resultante por pantalla. Disear los datos de prueba necesarios para verificar el correcto funcionamiento del programa. Considerar que: Las matrices como mximo tendrn 50 filas y 50 columnas. El usuario no comete error de tipeo en el ingreso de los datos.

Utilizar subprogramas para: a) cargar las matrices b) multiplicar las matrices c) mostrar la matriz producto por pantalla.

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua N 9

Pgina 1 de 6

COMPUTACIN
Teora
Sistemas Operativos

Gua N 9

Los sistemas operativos se componen de varios programas que en conjunto se encargan de que las computadoras sean, como lo indica la designacin, operativas. Se encargan de la comunicacin entre los usuarios y las computadoras, y tambin del enlace entre los programas de aplicacin, que necesitan recursos de las computadoras, y los recursos que requieran. Los recursos de una computadora pueden ser de hardware o fsicos (la memoria RAM, la CPU, los dispositivos de almacenamiento masivo, los perifricos), y de software o lgicos (directorios, archivos de datos, aplicaciones de servicio o utilera tales como compactadores de archivos, verificadores de superficies de disco, defragmentadores de disco, efectores de copias de seguridad, etc. y aplicaciones en general). En sntesis, se puede decir que un sistema operativo tiene como funciones proveer la interfaz de comunicacin usuario-computadora y administrar el uso de los recursos de esta ltima por parte de los usuarios y de las aplicaciones que stos ejecuten.
Carga del Sistema Operativo en la Memoria Central

Para que cualquier programa pueda ejecutarse en una computadora, debe cargarse en la memoria principal o RAM. Ahora bien, si justamente es el Sistema Operativo el que debe encargarse de esto particularmente, entonces quin se encarga de cargar al sistema operativo en la RAM? Toda computadora tiene parte de su memoria principal configurada de manera tal, que cuando se enciende la mquina el contenido de esta parte de la memoria es siempre el mismo (no voltil) e inmodificable, y el registro de prxima instruccin o contador de programa se carga automticamente con su primera direccin. A esta parte de la memoria principal se la llama memoria ROM (Read Only Memory) o de slo lectura. El contenido de esta memoria es un programa que se encarga precisamente de cargar al sistema operativo, llamado autoarrancador o bootstrap loader. En ingls, la palabra bootstrap denota a los calzadores de botas, esas agarraderas de tela que tienen las botas largas por donde se entran los pies, para poder calzrselas. El autoarrancador carga en las primeras celdas de la RAM desde el almacenamiento masivo al programa principal del sistema operativo y ejecuta un salto a la primera celda de esa rea de la memoria.
Funciones del Sistema Operativo Interfaz con el Usuario

Para que el usuario de una computadora pueda comunicar sus requerimientos al sistema operativo, para administrar el almacenamiento masivo y ejecutar aplicaciones, y tambin para interactuar con las aplicaciones y que stas puedan comunicar resultados, el Sistema Operativo implementa la interfaz de comunicacin con el usuario. Actualmente, son comunes los sistemas operativos con interfaces grficas con el usuario (GUI: Graphic User Interfaces), tales como WIndows y Macintosh, en las que la informacin en pantalla se compone de pequeos puntos dispuestos en filas, llamados pxeles (contraccin del ingls picture elements), y la interaccin con el usuario se establece a partir de ventanas, iconos, mens y dispositivos apuntadores; debido a esto ltimo, stas interfaces se denominan WIMP, por las siglas en ingls Windows, Icons, Menus and Pointing devices. Estas interfaces son muy ventajosas para el usuario, pero tienen un alto costo en trminos de recursos de hardware necesarios para sustentarlas: la configuracin de la pantalla debe estar en todo momento representada en la memoria, y cada pxel ocupa comnmente dos bytes (para codificar el color y la intensidad o brillo), por lo que para las pantallas ms comunes, de 800 x 600 pxeles, se usan 480.000 bytes; adems, para que las respuestas sean eficientes los procesadores deben ser muy rpidos. Pero los sistemas operativos para computadoras grandes desde siempre tienen interfaces con el usuario basadas en caracteres, en las que la informacin en pantalla se compone de caracteres normalmente
Gua N 9 - Cursos de Computacin (75.01) del Lic. Servetto Pgina 1 de 6

Gua N 9

Pgina 2 de 6

exhibidos en 24 lneas de 80 columnas, y la interaccin con el usuario se establece a partir de una lnea de rdenes o comandos. Los primeros sistemas operativos para computadoras personales, de la familia DOS (Disk Operating System) tenan este tipo de interfaz, y an desde las actuales interfaces grficas se pueden iniciar sesiones de trabajo en interfaces orientadas a caracteres (ver anexo de esta gua).
Administracin de Recursos

Como se viera precedentemente en la clasificacin de computadoras, hay mquinas a las que pueden conectarse simultneamente varios usuarios (multiusuario o de tiempo compartido), y mquinas que, independientemente de la cantidad de usuarios que admitan conectados al mismo tiempo, pueden procesar ms de un programa o tarea a la vez (multitarea o de procesamiento concurrente). Estas posibilidades son brindadas exclusivamente por sus sistemas operativos. El tiempo compartido implica la administracin de terminales (pantallas y teclados), que el sistema operativo realiza mediante la ejecucin de un programa de control para cada terminal conectada que debe ser procesado o atendido en tiempo real, es decir, debe responder a las acciones del usuario en la terminal en forma instantnea. Estos programas de control de terminales, tantos cuantos usuarios se encuentren conectados en paralelo, deben ejecutarse en forma concurrente. El procesamiento concurrente de tareas implica la administracin del procesador central, que el sistema operativo implementa fraccionando del tiempo de ejecucin de las tareas en unidades de tiempo denominadas quanta (plural de quantum), y asignndoles el procesador o CPU alternadamente un quantum, con una frecuencia relativa a la prioridad o urgencia de ejecucin de cada una. Por ejemplo, a las tareas de tiempo real les asigna con alta frecuencia un quantum muy pequeo, mientras que a las tareas o programas en general (como ser aplicaciones de usuario) les asigna un quantum grande con menor frecuencia. En mquinas de procesamiento paralelo, es decir, con ms de un procesador o CPU, como la cantidad de usuarios conectados y/o tareas en ejecucin suele ser mayor que la cantidad de procesadores, el sistema operativo, adems de distribuir tareas entre los distintos procesadores, debe implementar el procesamiento concurrente de todas las que le toque al mismo tiempo a cada uno. El procesamiento concurrente vara segn las caractersticas de las aplicaciones en ejecucin. Hay aplicaciones, en general de procesamiento masivo de informacin, que no requieren la intervencin del usuario durante su ejecucin o procesamiento. Por el contrario, hay aplicaciones en las que la interaccin con el usuario es indispensable, tales como el procesamiento de textos, o programas de propsito especfico a los que el usuario deba proporcionar datos durante su ejecucin. El procesamiento concurrente de aplicaciones del primer tipo (las nicas posibles en los albores de la informtica), recibe la denominacin de procesamiento por lotes (o en ingls: batch processing), debido a que la codificacin de programas en las primeras computadoras se efectuaba en secuencias de tarjetas perforadas denominadas lotes. En cambio, el procesamiento de aplicaciones del segundo tipo, se denomina procesamiento interactivo. Un programa o tarea en ejecucin, comnmente denominado proceso, requiere que sus instrucciones se encuentren almacenadas en la memoria central. El procesamiento concurrente implica un serio problema de administracin de la memoria central, puesto que la cantidad de memoria que requieran los procesos que el sistema operativo tenga que atender en un momento puede ser mucho mayor que la cantidad de memoria real existente en la computadora. El sistema operativo resuelve este problema fraccionando la memoria principal y asignando fragmentos a los procesos segn la necesidad de cada uno. Cuando todos los fragmentos de la memoria estn asignados y un proceso requiere memoria adicional, el sistema operativo desaloja fragmentos almacenando temporalmente porciones de otros procesos en el almacenamiento masivo hasta que les vuelva a asignar a stos el procesador central; en ese momento volver a cargar sus porciones en fragmentos que dispondr de la misma manera. Usualmente las aplicaciones de usuario en ejecucin requieren el uso de dispositivos perifricos, gobernados por controladores a los que se les debe efectuar requerimientos en trminos de las caractersticas y capacidades del dispositivo que controlan. Como las aplicaciones deben abstraerse de caractersticas particulares de los dispositivos perifricos, por ejemplo, una aplicacin puede requerir que se exhiban datos en pantalla sin tener en cuenta ni sus caractersticas tecnolgicas ni cmo est configurada (640 x 480 pxeles, 800 x 600, o 1024 x 768), es el sistema operativo el que debe encargarse de la comunicacin con los perifricos, traduciendo requerimientos abstractos en rdenes precisas a controladores.
Gua N 9 - Cursos de Computacin (75.01) del Lic. Servetto Pgina 2 de 6

Gua N 9

Pgina 3 de 6

En el procesamiento concurrente de tareas, puede darse la situacin de que varios procesos requieran concurrentemente un mismo recurso, como por ejemplo un disco o una impresora. Por tanto, tambin es funcin del sistema operativo la coordinacin del uso concurrente de recursos. Para resolver este problema, el sistema suele implementar colas de acceso, y atender los requerimientos segn el orden en que se realizan. As, cuando un proceso con el procesador asignado efecta un requerimiento de entrada o salida de datos, el sistema operativo le quita el procesador sin importar cunto haya usado de su quantum, lo asocia a la cola de atencin del dispositivo sobre el que efectuara el requerimiento, y le cede un quantum a otro proceso en espera del procesador. El caso en que varios procesos concurrentes requieren el uso de una impresora es especial. Como la impresin de un reporte o documento por parte de un proceso no puede ser fraccionada, puesto que se mezclaran en la impresora pginas o fragmentos correspondientes a distintos procesos, el sistema operativo enva los datos que los procesos de usuario quieren imprimir a un proceso propio llamado administrador de impresin, que los guarda en archivos exclusivos para cada proceso en el almacenamiento masivo en lugar de registrarlos en papel, y que una vez completados mandar a imprimir completos y uno por vez a la impresora. Este procedimiento se denomina SPOOLING (Simultaneous Perifheral Operation On Line: operacin simultnea de perifricos en lnea, donde en lnea significa disponibles sin intervencin humana). Usualmente las aplicaciones de usuario en ejecucin requieren el uso de dispositivos de almacenamiento masivo, gobernados por controladores a los que, del mismo modo que a los controladores de perifricos, se les debe efectuar requerimientos en trminos de las caractersticas y capacidades del dispositivo que controlan, y de posiciones absolutas de donde obtener o en donde almacenar datos. Como, tal cual se dijo anteriormente, las aplicaciones deben abstraerse de caractersticas particulares de los dispositivos, por ejemplo, una aplicacin puede requerir datos de un archivo proporcionando tan slo el nombre del archivo, y solicitar el prximo dato desde la ltima solicitud, el sistema operativo no slo se debe encargar de la comunicacin con los controladores de los dispositivos de almacenamiento, sino tambin de la administracin del almacenamiento masivo, es decir, de la administracin de programas y datos. Por ltimo, tanto en los sistemas multiusuario como en los monousuario pero compartidos en tiempos diferentes por ms de una persona, el sistema operativo debe velar por la seguridad y confiabilidad de los datos de los usuarios, por lo que a las funciones anteriores hay que aadir la de supervisin, contabilidad y seguridad de recursos. Los sistemas operativos se pueden configurar para que slo permitan la conexin con la mquina de un usuario si ste ingresa correctamente su identificacin ms una palabra clave secreta que la certifique, y para que una vez conectado, slo tengan acceso a un subconjunto determinado de recursos de la mquina.

Anexo
Prctica Optativa (no se incluye en la evaluacin del mdulo 2) DOS (Disk Operating System) Los ejercicios de la presente seccin tienen como objetivo inducir el aprendizaje de comandos del sistema operativo con interfaz orientada a caracteres DOS. A tal efecto, se sugiere contar con un disquete de 3 pulgadas para practicar transferencias de archivos entre ste y el disco rgido de una computadora. Se denota entre comillas lo que debe escribirse textualmente en la lnea de comandos para obtener el resultado que se enuncia en cada caso. Para ingresar un comando al sistema operativo, luego de escribirlo en la lnea de solicitud se debe pulsar la tecla de ingreso de datos (Enter o ). Conectarse al sistema DOS y posicionarse en el directorio raz \ del disco C (si en la lnea de comandos no aparece antes del cursor CURrent poSition indicatOR- o indicador de posicin actual C:\>, ingresar el comando chdir \ change directory: cambiar directorio). Crear un nuevo directorio de trabajo llamado trabajo, mediante el comando mkdir trabajo (make directory). Posicionarse en el directorio nuevo con chdir trabajo.

Gua N 9 - Cursos de Computacin (75.01) del Lic. Servetto

Pgina 3 de 6

Gua N 9

Pgina 4 de 6

Usar el editor ASCII del sistema operativo edit para registrar los datos personales: apellido, nombre, edad, nmero de padrn, carrera que cursa, y ao de ingreso a la Universidad (CBC). Guardar el archivo como (con el nombre) datos.txt y salir del editor. Copiar el archivo en el disquete con el comando copy datos.txt a:. Confirmar que se haya grabado correctamente el archivo en el disquete listando el contenido de su directorio actual con dir a:*.* (directory: directorio). Debe aparecer el nombre del archivo, acompaado de la cantidad de bytes que ocupa en el disco y de la fecha y hora de la creacin. Borrar el archivo del disco C con el comando del datos.txt (delete: borrar). Posicionarse en el directorio raz con cd \. Borrar el directorio trabajo con rmdir trabajo (remove directory: remover directorio). Confirmar que se elimin el directorio listando el contenido del directorio actual, el raz, con dir /p (lista el contenido del directorio detenindose al completar una pgina o pantalla).

Ejemplos El siguiente es un ejemplo del comando dir con el parmetro /w, que solicita la informacin expandida a lo ancho (wide) de la pantalla. Los nombres entre corchetes corresponden a directorios. El directorio actual al solicitar el comando es el raz o \ del disco C:
C:\>dir /w El volumen de la unidad C es DISK1_VOL1 El nmero de serie del volumen es: 2CCD-04E9 Directorio de C:\ [ACROREAD] AUTOEXEC.625 dir [FLOW4] MOUSE.COM SCANDISK.LOG WINA20.386 9 archivos 11 dirs C:\> [Archivos de programa] [CD625] Microsoft MSCDEX.EXE [TEMP] [WINDOWS] 66.034 bytes 1.191.220.224 bytes libres [AUDIO] CONFIG.625 [Mis documentos] [NC] upgrade.txt

[Documents and Settings] [DOS]

Para saber cmo invocar un comando y con qu parmetros se puede invocar, se puede entrar el comando con parmetro /?, por ejemplo:
C:\>dir /? Muestra una lista de archivos y subdirectorios de un directorio. DIR [unidad:][ruta][archivo] [/P] [/W] [/A[[:]atributos]] [/O[[:]orden]] [/S] [/B] [/L] [/V] [/4] [unidad:][ruta][archivo] Especifica unidad, directorio, y/o los archivos a listar. (Puede ser especificacin de archivos mejorada o mltiples Gua N 9 - Cursos de Computacin (75.01) del Lic. Servetto Pgina 4 de 6

Gua N 9

Pgina 5 de 6

especificaciones) /P /W /A atributos Realiza una pausa despus de cada pantalla de informacin. Utiliza un formato de lista ancha. Muestra archivos con atributos especificados. D H S /O orden N E G A /S /B /L /V /4 Se pueden DIRCMD. Directorios Archivo oculto Archivo de sistema Nombre (alfabtico) Extensin (alfabtico) 1 Agrupar directorios R A S D Archivos slo lectura Archivo modificado Prefijo no Tamao (1 el ms corto) Fecha y hora (1 el ms reciente) Prefijo para invertir el orden

Ordena la lista de archivos alfabticamente.

Por fecha del ltimo acceso (el ms reciente 1)

Muestra los archivos del directorio especificado y todos sus subdirectorios. Usa formato simple (sin encabezados o sumarios). Usa minsculas. Modo ampliado. Muestra el ao con 4 dgitos (omitido si se utiliza /V). establecer previamente los parmetros en la variable de entorno

Para anular modificadores preestablecidos anteponga un - (guin) p.e., /-W. C:\>

o tambin:
C:\>copy /? Copia uno o ms archivos a otro lugar. COPY [/A | /B] origen [/A | /B] [+ origen [/A | /B] [+ ...]] [destino [/A | /B]] [/V] [/Y | /-Y] origen /A /B destino /V /Y /-Y Especifica el archivo o los archivos que se van a copiar. Indica un archivo de texto ASCII. Indica un archivo binario. Especifica el directorio y/o nombre del nuevo archivo. Comprueba que los nuevos archivos se escriban correctamente. Omite la solicitud de confirmacin cuando se sobrescribe un archivo de destino existente. Activa la solicitud de confirmacin cuando se sobrescribe un archivo de destino existente. El parmetro /Y puede estar predefinido en la variable de entorno COPYCMD. Puede anularse escribiendo /-Y en la lnea de comandos Para agregar archivos, especifique un solo archivo de destino, pero varios Gua N 9 - Cursos de Computacin (75.01) del Lic. Servetto Pgina 5 de 6

Gua N 9

Pgina 6 de 6

archivos de origen (utilizando comodines o el formato archivo1+archivo2+archivo3). C:\>

o:
C:\>cls /? Borra la pantalla. CLS C:\>

Gua N 9 - Cursos de Computacin (75.01) del Lic. Servetto

Pgina 6 de 6

COMPUTACIN
Teora
Clasificacin de Computadoras Segn sus Lenguajes

Gua N 10

El diseo del lenguaje de una computadora determina la complejidad de los circuitos que se requieran para decodificar y ejecutar las instrucciones. Si se disea un lenguaje simple, como el de la mquina ideal antes descripta, se dice que la computadora es RISC (Reduced Instruction Set Computer: computadora de conjunto reducido de instrucciones). En una computadora como sta, para realizar una resta, por ejemplo, se debe complementar el sustraendo (usando una mscara de unos y la operacin de disyuncin exclusiva, y luego sumando 1 al resultado) y sumarlo al minuendo; para hacer multiplicaciones hay que efectuar sumas sucesivas; para hacer divisiones hay que efectuar restas sucesivas, etc. En cambio si se elige tener instrucciones para las ms variadas cosas, se obtendr una mquina CISC (Complex Instruction Set Computer: computadora de conjunto complejo de instrucciones).

Lenguajes de Programacin
Toda computadora tiene un lenguaje nativo: el lenguaje de mquina. Los lenguajes de mquinas de diferentes marcas son similares: todos tienen instrucciones para las operaciones aritmticas bsicas, para comparar pares de nmeros, saltar a otra parte de un programa, etc. Pero tal como las personas con nacionalidades distintas hablan lenguajes diferentes, como el ingls y el espaol, las mquinas con unidades centrales de procesamiento de marcas distintas tambin tienen lenguajes diferentes, y una mquina con UCP de una marca no puede entender programas de mquinas con UCP de otras marcas. Los lenguajes de mquina son binarios: las instrucciones, las direcciones de celdas de memoria, los nmeros y los caracteres se representan como cadenas de ceros y unos. Por la dificultad que tenan los programadores para leer nmeros binarios, escriban en papel los programas en cdigo hexadecimal y los nmeros y direcciones de memoria en decimal, o tambin en hexadecimal, y cuando los cargaban en la computadora lo hacan traduciendo los cdigos hexadecimales y decimales a binario. Como la programacin de computadoras en lenguaje de mquina era una tarea tan ardua, con el objetivo de simplificarla surgieron los lenguajes ensambladores, lgicamente equivalentes a los lenguajes de mquina pero ms fciles de leer, escribir y comprender para los seres humanos. En un lenguaje ensamblador, los programadores usan cdigos alfabticos que corresponden a las instrucciones de la mquina, y ponen nombres o rtulos a las direcciones de instrucciones a saltar en los programas para poder referenciarlas fcilmente; luego, un programa llamado ensamblador traduce las instrucciones de lenguaje ensamblador a instrucciones de lenguaje de mquina. La computadora acta como traductora para s misma. Por ejemplo, a continuacin se codifica un programa para sumar dos nmeros enteros en un lenguaje ensamblador para la mquina descrita en el curso. Ntese que ya no es necesario conocer las direcciones de las celdas.

Instrucciones LR 1,S1 LR 2,S2 LI 0,00

Comentarios Cargar en el registro 1 el contenido de la celda en donde se encuentra el primer sumando (LR: load record) Cargar en el registro 2 el contenido de la celda en donde se encuentra el segundo sumando Cargar en el registro 0 el valor 00 (LI: load inmediate)

Instrucciones

Comentarios

BR 1,EQ2 Si el contenido del primer registro es igual al del registro 0, seguir por la instruccin 9 (BR: branch) BR 2,EQ1 Si el contenido del segundo registro es igual al del registro 0, seguir por la instruccin 11 AI 3,1,2 ST 3,RS BR 0,FIN EQ2 ST 2,RS BR 0,FIN EQ1 FIN S1 S2 RS ST 1,RS END 15 -7 8 Sumar los contenidos de los registros 1 y 2 y dejar el resultado en el registro 3 (AI: add integers) Almacenar el contenido del registro 3 en la celda destinada para el resultado de la suma Seguir por la instruccin 12 Almacenar el contenido del registro 2 en la celda destinada para el resultado de la suma Seguir por la instruccin 12 Almacenar el contenido del registro 1 en la celda destinada para el resultado de la suma Parar Celda con el primer sumando en complemento a dos (p.e. 15, que en el programa se especifica en decimal) Celda con el segundo sumando en complemento a dos (p.e. -7, igual que antes) Celda para el resultado de la suma en complemento a dos (suponiendo que ya se ejecut el programa)

El programa en lenguaje ensamblador es el que figura en las columnas Instrucciones. En la primera columna de Instrucciones se designan con nombres alusivos a las direcciones de celdas de instrucciones y datos con el objeto de referenciarlas desde las instrucciones propiamente dichas. En la segunda columna se especifican las instrucciones con un cdigo mnemotcnico. La programacin en lenguajes ensambladores se considera de bajo nivel; es decir, requiere que los programadores piensen a nivel de la mquina para la cual programan e incluyan gran cantidad de detalles en cada programa. La programacin en lenguajes ensambladores es un proceso repetitivo, tedioso y propenso a errores. Peor an, cada lenguaje de mquina distinto tiene lenguajes ensambladores que le corresponden, por lo que si un programa escrito en lenguaje ensamblador se quiere ejecutar en una mquina de otra marca, debe rescribirse totalmente en el lenguaje ensamblador de la otra mquina. Muchos programadores todava usan lenguaje ensamblador para escribir parte de los juegos de vdeo y otras aplicaciones en las cuales son fundamentales el tiempo de respuesta de los programas y la comunicacin directa con el hardware. No obstante, en la actualidad la mayora de los programadores piensa y escribe en un nivel ms alto. Los lenguajes de alto nivel, que estn en un punto intermedio entre los lenguajes humanos y los precisos y acotadsimos lenguajes de mquina, se crearon a principios de la dcada del 50 para simplificar y optimizar el proceso de programacin. Con los lenguajes como FORTRAN (FORmula TRANslation diseado para el clculo matemtico) y COBOL (COmmon Bussiness Oriented Language diseado para aplicaciones de tipo comercial y administrativas) es posible que los cientficos, ingenieros y empresarios escriban programas con terminologa y notacin familiares, en lugar de las tan elementales instrucciones de mquina. Los programadores de hoy disponen de cientos de lenguajes de alto nivel para elegir. Los lenguajes de alto nivel ocultan al programador las caractersticas arquitectnicas y los detalles de funcionamiento de las mquinas, posibilitndoles que se abstraigan de usar registros y referenciar direcciones de memoria. As es ms fcil que el programador se concentre en los problemas a resolver exclusivamente, cuando desarrolla las soluciones en pseudocdigo, y ya no debe resolver el problema adicional de traducir su solucin en trminos de las instrucciones que la mquina es capaz de ejecutar: para

codificar sus programas apenas hace un refinamiento ms del pseudocdigo, escribiendo directamente en el lenguaje de programacin de alto nivel. Los programas codificados en lenguajes de alto nivel tienen la ventaja de ser transportables entre mquinas. Un programa escrito en Pascal puede traducirse y ejecutarse en cualquier computadora que tenga el programa traductor de Pascal. Como hay traductores de Pascal para todo tipo de computadoras, un programa en Pascal puede traducirse y ejecutarse sin modificaciones casi en cualquier mquina.

Traduccin e Interpretacin
Para traducir un programa escrito en un lenguaje de alto nivel a lenguaje de mquina se requiere un programa de traduccin, que puede funcionar: como intrprete, traduciendo y haciendo ejecutar cada enunciado en forma individual, as como un intrprete en un congreso internacional traduce un discurso del ingls al espaol, o como un compilador, traduciendo todo el programa al lenguaje de mquina de manera que pueda ejecutarse directamente en la mquina cuantas veces se desee. La mayora de los traductores son compiladores, ya que los programas compilados tienden a ejecutarse con mayor rapidez que los programas interpretados: los compilados ya estn traducidos al lenguaje de mquina y los interpretados requieren que se traduzca cada orden o enunciado cada vez que se interprete el programa. Los paquetes de software de compilacin son mucho ms que compiladores: son ambientes de programacin integrados (IDE: Integrated Development Environments) que cuentan con un editor de textos, un compilador, un depurador (debugger) para simplificar el proceso de localizacin y correccin de errores y varias funciones utilitarias ms. El proceso de compilacin de un programa se divide en tres etapas: anlisis lxico, anlisis sintctico y generacin de cdigo. El compilador toma como fuente de datos un archivo de texto en el que se encuentra escrito el programa en lenguaje de alto nivel, usualmente llamado programa o mdulo fuente, y antes de convertirlo a instrucciones de mquina en ceros y unos le efecta dos controles sucesivos: el anlisis lxico, para reconocer y reducir en la sucesin de smbolos que es el programa fuente los componentes lxicos (nombres de sentencias, nombres de variables y constantes, nombres de subprogramas, valores literales, etc.), y el anlisis sintctico, para validar la construccin de enunciados admitidos por el lenguaje; luego de superadas satisfactoriamente estas dos etapas, entonces s produce como resultado un archivo con las instrucciones de mquina correspondientes al programa fuente, llamado programa o mdulo objeto. Los programas complejos se suelen descomponer en muchos subprogramas, y cuando el nmero de stos es muy grande no resulta prctico que estn todos en un mismo archivo o programa fuente sino en varios archivos que se traducen por separado. Tambin es comn emplear subprogramas estndares que vienen ya traducidos por los paquetes de software de programacin, por ejemplo para clculos matemticos. Entonces, un programa puede comprender varios mdulos fuente traducidos por separado en sendos mdulos objeto. Para que pueda ejecutarse un programa de tales caractersticas es necesario que todos sus objetos estn enlazados adecuadamente, as es que el proceso de traduccin debe completarse mediante el empleo de un programa hermano al de compilacin llamado enlazador o linker, que tomando como datos de entrada los archivos o mdulos objeto de un programa, produce un archivo nico ejecutable denominado mdulo o programa de carga. En Pascal, el tipo o extensin de los programas o mdulos fuente es PAS, y para cualquier lenguaje los tipos o extensiones de los programas objeto y de carga son OBJ y EXE respectivamente.

Paradigmas de Programacin
Se ha visto que existen diversas formas de representacin de algoritmos, basadas fundamentalmente en quin o qu ser el ejecutor del algoritmo y en la naturaleza de las acciones a ejecutar. Como es inters de la informtica el desarrollo de algoritmos para que los ejecute una computadora, la representacin debe ser en forma de programas.

Existen distintas convenciones para especificar programas, las cuales se distinguen por la forma de especificacin en primer lugar, y luego por el lenguaje. Las formas de especificar programas o paradigmas de programacin hasta la actualidad, con algunos de sus lenguajes, han sido: La programacin imperativa (como enunciacin de rdenes): FORTRAN, COBOL, Algol, Ada, Pascal La programacin funcional (como composicin de funciones): LISP La programacin lgica (como clculo de predicados lgicos): PROLOG La programacin orientada a objetos (como interaccin entre subprogramas denominados objetos, que encierran datos y algoritmos para manipularlos, a travs de mensajes): SMALLTALK, EIFFEL La programacin visual u orientada a eventos (basada normalmente en la programacin orientada a objetos pero especificando las acciones o interacciones entre objetos en trminos del diseo grfico de interfaces con el usuario y asocindolas con eventos en general relacionados con la digitacin de teclas o movimientos del ratn): VISUAL BASIC, DELPHI, VISUAL C++, JAVA.

Gua N 10

Pgina 1 de 7

COMPUTACIN
Prctica (I)
Estructuras de Datos

Gua N 10

Se ha visto en una gua anterior que, a los efectos de simplificar la organizacin y referenciacin de datos compuestos, en el desarrollo de programas se pueden definir familias de variables cuyos valores se compongan de dos o ms valores, sean bsicos o elementales, o sean a su vez compuestos. Para esto es necesario definir previamente las composiciones de valores a emplear en el programa, llamadas tipos de datos compuestos o estructurados, y luego las variables cuyos valores han de tener tales composiciones. Las composiciones pueden ser arbitrarias (asociaciones) o de valores homogneos (arreglos). Tanto para especificar estructuras de datos como restricciones de dominio, el procedimiento es declarar, antes de hacer lo propio con las variables, las estructuras o restricciones como tipos (type), asignndoles un nombre que se emplear como referencia al momento de definir las variables. As, adems de contar en los programas con los tipos bsicos enteros, reales y smbolos, se pueden tener datos con estructuras arbitrariamente complejas que podrn referenciarse con slo un nombre, para aludir a la estructura, y con nombres genricos (en los casos de asociaciones) o posiciones de componentes (en los casos de arreglos) para aludir a sus partes. Un tipo de dato estructurado permite declarar una variable que con un nico nombre identifica a un conjunto de elementos organizados en forma especfica y a los cuales se puede acceder individualmente.

Tipos de Datos Compuestos o Estructurados Cadenas de Caracteres


Las cadenas de caracteres o strings son casos particulares de arreglos unidimensionales, y tienen un tratamiento distintivo respecto de los arreglos en general. Para poder referirse en un programa a un dato compuesto por varios caracteres, existe un tipo o dominio especial denominado String (cadena). Una variable de tipo string es un arreglo unidimensional de caracteres con un contador conectado al mismo que contiene el nmero de caracteres que han sido cargados en el arreglo. El tipo string, como el tipo char, permite la manipulacin de smbolos. Una cadena de caracteres (string) es una serie de caracteres cuya longitud (nmero de caracteres que contiene) puede variar de 1 a 255 caracteres. Turbo Pascal incorpora el tipo de dato string que almacena informacin de texto en constantes y en variables de cadena. Declaracin de una variable tipo cadena Las variables de cadena se declaran como las de cualquier otro tipo en la subseccin Var por la palabra string seguida de la longitud mxima de la cadena de caracteres entre corchetes. Var Materia : string [15] ;

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua N 10

Pgina 2 de 7

Una vez declaradas las variables de cadenas, se pueden realizar asignaciones: Materia := Computacin ; Los valores literales para cadenas, es decir, las secuencias de caracteres que se quiera asignar directamente como valor de una cadena, deben estar encerrados entre comillas simples (por convencin), para distinguirlos de nombres de constantes o variables. Una cadena nula se especifica con el carcter vaco, simbolizado por dos comillas seguidas (). Tambin se pueden realizar operaciones de lectura/escritura en los programas. En los enunciados de Entrada/Salida resultara: ReadLn (Materia); WriteLn (El nombre de la materia es , Materia); Longitud de una cadena Los valores de este tipo se caracterizan por tener una longitud en caracteres, que puede variar con cada valor distinto que se asigne a una variable. En todo caso, cuando se define una variable con este tipo, se puede limitar la longitud mxima que pueden tener las cadenas asociadas o dejar que puedan alcanzar un mximo estndar, que es de 255 caracteres. Cuando se define una variable de tipo String, sea con una longitud mxima de n caracteres o sea ilimitada (255 caracteres), el programa asigna o bien n+1 o bien 256 bytes consecutivos en la memoria RAM para almacenar valores para la variable. El byte extra se utiliza para almacenar en binario la cantidad de caracteres que tiene exactamente la cadena, que no forma parte del valor. En la definicin y asignacin anterior: Var Materia : string [15] ; {n = 15} Materia := Computacin ; {la cadena Computacin tiene 11 caracteres}

Nmero de bytes

0 11

1 C

2 o

3 m

4 p

5 u

6 t

7 a

8 c

9 i

10 o

11 n

12 ?

13 ?

14 ?

15 ?

Longitud actual de la cadena Las caractersticas fundamentales de las cadenas son que pese a que tienen una longitud mxima, se les puede asignar ninguno (el resultado es una cadena nula), uno o varios caracteres con una nica primitiva de
Lic. Servetto Ing. Jimnez Rey 75.01 Computacin

Gua N 10

Pgina 3 de 7

asignacin o lectura desde teclado o archivo, y se pueden escribir completas en pantalla o en un archivo con una nica primitiva de escritura, sin tener en cuenta la longitud exacta de la cadena. En el caso de que se requiera conocer la cantidad exacta de caracteres que tiene una cadena, se puede usar la funcin predefinida Lenght (Longitud) que devuelve un valor entero. Formato Length ( s ) s expresin tipo cadena Tambin se pueden formar cadenas a partir de la unin de otras dos o ms o extender una cadena agregndole caracteres al principio o al final con el operador de concatenacin +, cosas que tampoco son posibles para otros arreglos. La concatenacin Curso de + Computacin produce una cadena Curso de Computacin. De manera similar: CadenaMayor := Cadena1 + Cadena2 + Cadena3; aunque en este caso CadenaMayor debe ser lo suficientemente grande para contener las tres cadenas; en caso contrario, si la longitud total de las tres cadenas fuente es mayor que la longitud de la cadena destino, todos los datos que no quepan en la cadena destino se truncan y se ignoran. Problema Propuesto Escribir en lenguaje Pascal una nueva versin del problema 3 de la Gua N 2 (conversin de un nmero decimal a nmero romano) utilizando concatenacin de string.

Asociaciones
Las asociaciones sirven para definir estructuras de datos compuestas por dos o ms valores de tipos bsicos o, a su vez, estructurados. La diferencia entre asociaciones (o estructuras de componentes arbitrarios) y arreglos (o estructuras de componentes homogneos) es que, en el primer caso, cada componente tiene un nombre genrico propio, y en el segundo, un componente slo se puede referenciar indicando su posicin. En muchas situaciones se necesita procesar elementos que estn relacionados entre s pero que no son del mismo tipo. En el caso particular de un tipo de dato record los elementos que lo constituyen, llamados campos pueden pertenecer (o no) a distintos tipos de datos. Se accede a cada uno de ellos por su nombre o identificador. Un identificador de campo debe ser nico en un record. La cantidad de campos de un record debe ser finita. As, para definir datos con estructura de fecha, como cada componente requiere una variable distinta para el da, el mes y el ao, lo natural sera referirse a cada fecha mediante una nica variable, cuyos valores componentes se puedan referenciar con nombres comunes a todas las variables con la misma clase de valores compuestos. Se puede proceder como sigue:
Lic. Servetto Ing. Jimnez Rey 75.01 Computacin

Gua N 10

Pgina 4 de 7

Type T_Fecha = Record d, m: Byte; a: Word End; {tipo de datos Fecha} Var fNacim, fActual: T_Fecha; {variables de tipo (con estructura de) Fecha}

Formato Type Tipo_reg = Record Listaid 1 : tipo 1 ; Listaid 2 : tipo 2 ; Lista id n : tipo n ; End;

Un registro se puede representar grficamente en funcin de sus campos:


Fecha d m a

Tipo Byte

Tipo Byte

Tipo Word

Y para referenciar a los componentes de una variable de tipo T_Fecha, por ejemplo se escribe: fActual.d:=21; fActual.m:=5; fActual.a:=2002; O lo que es equivalente, si slo se referencia a componentes de una nica variable de tipo compuesto, se puede ahorrar la repeticin del nombre de la variable con la primitiva With...do: With fActual Do Begin d:=21; m:=5; a:=2002
End;

Como puede observarse, la expresin de las primitivas resulta ms consecuente con el lenguaje natural.
Lic. Servetto Ing. Jimnez Rey 75.01 Computacin

Gua N 10

Pgina 5 de 7

Aunque no hay restricciones especiales en cuanto a la designacin de los tipos, igual que en el caso de las variables es recomendable asignarle nombres significativos semnticamente para facilitar la comprensin de los algoritmos. A los efectos de no confundir nombres de tipos con nombres de variables, sobre todo cuando se deben definir varias variables de un mismo tipo, una buena regla es prefijar los nombres de tipos con el patrn t_. Otra convencin posible es designar a los tipos con nombres en maysculas, y a las variables con nombres en minsculas. Para ejemplificar la utilizacin de la asociacin de variables de distintos tipos en registros se presenta una nueva versin del programa solucin al problema 3 propuesto en la Gua N 1.

Enunciado
Desarrollar un programa en lenguaje Pascal que solicite al usuario el ingreso desde el teclado de dos fechas parciales distintas y exhiba en pantalla la diferencia de fechas expresada en aos y meses. Usar un solo enunciado de lectura para el ingreso desde el teclado del mes y ao correspondiente a cada fecha. Evitar visualizar en pantalla diferencia de aos y meses nulos. Considerar que el usuario no comete error de tipeo en el ingreso de los datos. Observacin: Las fechas ingresadas tienen la forma mes1 anio1 (la fecha ms antigua) y mes2 anio2 (la fecha ms reciente), donde mes1, anio1, mes2 y anio2 son valores enteros. Se debern tratar los datos como unidades de tiempo indivisibles, es decir, no se podr convertir por ejemplo, diferencia de aos a meses.

Solucin

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

Gua N 10

Pgina 6 de 7

{SECCIN DECLARATIVA} {Definicin del Objetivo} Program Diferencia_Fechas; {Calcular la diferencia entre dos fechas expresadas en aos y meses. Utilizacin de tipo de dato record. Versin 1.1. Junio de 2007.} {Definicin de Recursos} Uses Crt; Type T_Fecha = Record mes: 1..12; anio: 1900..2100; End; Var Fecha1, Fecha2, Dif_Fecha: T_Fecha; {fecha ms antigua, fecha ms reciente y diferencia de fechas, respectivamente} {SECCIN ALGORTMICA} {Desarrollo de la Solucin} Begin {Prlogo} {Limpieza de Pantalla} ClrScr; {Presentacin del Programa} {Escribir el ttulo en pantalla}; WriteLn('CALCULO DIFERENCIA DE FECHAS'); {Escribir el objetivo del programa} WriteLn('El programa hace el clculo en funcin); WriteLn(de las fechas expresadas en '); WriteLn('aos y meses.'); WriteLn; {Obtencin de valores desde el teclado} {Especificar al usuario ingreso valores primera fecha} Write('Ingrese el mes y ao correspondientes ); Write(a la fecha ms antigua: '); {Ingresar los valores de mes y ao} ReadLn(Fecha1.mes, Fecha1.anio); {Especificar al usuario ingreso valores segunda fecha} Write('Ingrese el mes y ao correspondientes ); Write(a la fecha ms reciente: '); {Ingresar los valores de mes y ao} ReadLn(Fecha2.mes, Fecha2.anio); {Resolucin}
Lic. Servetto Ing. Jimnez Rey 75.01 Computacin

Gua N 10

Pgina 7 de 7

{Clculo de la diferencia de fechas} IF Fecha2.mes > =Fecha1.mes THEN Begin Dif_Fecha.mes:= Fecha2.mes Fecha1.mes; Dif_Fecha.anio:= Fecha2.anio Fecha1.anio; End ELSE {Fecha2.mes < Fecha1.mes} Begin Dif_Fecha.mes:= (Fecha2.mes Fecha1.mes) + 12; Dif_Fecha.anio:= (Fecha2.anio Fecha1.anio) - 1; End; {Eplogo} {Presentacin del Resultado en pantalla} Write(La diferencia de fechas es de: ); IF Dif_Fecha.anio <> 0 THEN Write(Dif_Fecha.anio, ao(s) ); IF Dif_Fecha.mes <> 0 THEN WriteLn(Dif_Fecha.mes, mes(es).); {Anuncio de Terminacin} WriteLn; WriteLn('Fin del Programa.'); {Generacin de Pausa} ReadLn; End.

Lic. Servetto Ing. Jimnez Rey

75.01 Computacin

COMPUTACIN
Prctica (II)
Archivos de Texto

Gua N 10

En los programas que requieren muchos datos, el ingreso de stos por parte del usuario se convierte en un factor crtico: se dilata el tiempo de procesamiento debido a la extrema lentitud del ser humano respecto a la velocidad de la computadora, y la probabilidad de que se comentan errores es directamente proporcional al volumen de los datos a ingresar, con el agravante de que los errores pueden pasar inadvertidos, o cuando se advierten se debe descartar lo procesado hasta el momento y recomenzar todo el proceso. Tambin cuando un programa debe producir muchos datos, el monitor, que es un dispositivo de soft copy, es decir, de copia liviana o efmera de la informacin, no resulta adecuado para la visualizacin y eventual anlisis de los resultados. Tanto para evitar demoras, fatiga y errores en el ingreso de datos como para conservar copias permanentes de resultados, se puede usar archivos de texto, que son un medio de hard copy, es decir, de copia permanente de la informacin en dispositivos de almacenamiento masivo. As resulta ms fcil controlar y verificar la exactitud de los datos que se han de ingresar a un programa tanto como fcil y cmodo resulta analizar resultados sin necesidad de sincronizarse con el programa ni tener que ejecutarlo varias veces para rever o revisar los datos. Hasta ahora se han tratado estructuras de datos que residen en la memoria principal de la computadora. La memoria RAM pierde la informacin almacenada cuando se desconecta la alimentacin del sistema. En muchas situaciones es necesario almacenar datos en soportes que permitan conservarlos en forma permanente. Organizacin de Lneas y Caracteres de Control El uso de los archivos de texto se dise por analoga al uso de las mquinas de escribir, para que resulte familiar e intuitivo para los programadores. Los archivos de texto para el ingreso de datos se pueden editar y leer con cualquier procesador de texto, en particular con el mismo editor que provee el ambiente integrado de desarrollo de Pascal. Los archivos de texto son secuencias de caracteres ASCII almacenadas en disco, que pueden extenderse en varios registros fsicos y unidades de asignacin del dispositivo. Pero no obstante cuando se visualiza un archivo en un editor se ven los datos organizados en lneas bien definidas. Esta organizacin se debe al agregado de caracteres que no tienen una representacin visual sino que cumplen una funcin de control: delimitar lneas y el mismo final del archivo o secuencia de caracteres. La analoga con las mquinas de escribir se nota en que para denotar el fin de una lnea, se emplean dos caracteres de control, denominados salto de lnea (line feed) y retorno de carro (carriage return). Si se piensa en una mquina de escribir, el primero representa a la palanca del carro de la mquina que al accionarse hace girar el rodillo y saltar una lnea al papel; y el segundo representa el desplazamiento del carro hasta su tope a la derecha, para posicionar el margen izquierdo del papel al centro de la mquina. Cuando se lee un archivo, el controlador del disco copia en buffers de memoria RAM segmentos de la secuencia de caracteres coincidentes con registros fsicos (sectores) del dispositivo. Como la secuencia de caracteres de un archivo puede finalizar en cualquier posicin intermedia de un registro fsico del disco, para delimitar la terminacin del archivo de caracteres complementario o de relleno en el ltimo sector se requiere de un carcter de control especial que cumpla esta funcin: el carcter fin de archivo (end of file). Asignacin de Archivos As como en los programas se usan variables para referirse a valores de un determinado dominio o tipo (enteros, reales, caracteres, booleanos), para referirse a archivos de texto tambin se usan variables, que deben declararse con tipo Text (texto). Var

Datos: Text ; El identificador de tipo de archivo de texto (secuencia de caracteres ASCII) en Pascal es Text. El tipo Text no consiste simplemente en una secuencia de componentes de algn tipo. Los componentes del tipo Text son caracteres estructurados en lneas, cada lnea est terminada con una marca de fin de lnea. El archivo se termina con una marca de fin de archivo. Como la longitud de las lneas es variable, la posicin de una lnea dentro del archivo no puede ser calculada. Por lo tanto, los archivos de texto slo pueden procesarse secuencialmente y no pueden realizarse operaciones de entrada y salida simultneamente sobre el archivo. Como los archivos de texto son fuentes de valores de cualquier dominio o de dominio heterogneo, las variables de su tipo tienen un tratamiento especial. Tal como una variable de tipo bsico representa un nico valor en un instante de tiempo durante la ejecucin de un programa, una variable de tipo Text tambin representa un nico archivo. Para asociar un archivo determinado de un dispositivo de almacenamiento masivo a una variable Text, se debe emplear asimismo una orden o enunciado de asignacin; pero por el carcter especialsimo de este tipo en lugar de la asignacin comn se emplea una particular. As, por ejemplo, para asignar a una variable Datos, de tipo Text, un archivo llamado notas.txt que se encuentra en un disquete, la orden sera
Assign(Datos, a:notas.txt); {la variable interna se relaciona con el archivo externo por medio del procedimiento Assign}

Una vez asignado el nombre de un archivo existente o a crear a una variable de tipo Text, se debe especificar mediante algn enunciado si el archivo se usar para leer o para escribir datos. Los enunciados de apertura de archivo de textos son Reset, Rewrite y Append, que sirven respectivamente para abrir archivos existentes para leer datos, crear archivos nuevos para escribir, y abrir archivos existentes para agregarles datos al final. En todos los casos, los enunciados deben tener como argumento entre parntesis un identificador de variable de tipo Text. Pero tal como una variable de tipo bsico puede cambiar de valor en el transcurso de la ejecucin de un programa, una variable de tipo Text tambin puede cambiar de archivo o fuente de datos, por lo que la misma variable puede usarse para representar varios archivos a lo largo del tiempo. Parametrizacin de Nombres de Archivo La asignacin vista previamente es equivalente a asignar un valor literal o constante a una variable de tipo bsico, como por ejemplo
A:=7.43;

Como un programa es una representacin de un algoritmo, y un algoritmo a su vez, representa la solucin a una clase de problemas, la asignacin de valores constantes significa una restriccin importante a la generalizacin de soluciones que debe apuntar un algoritmo. Por ejemplo, si se deseara desarrollar un programa que totalizara las ventas de un mes, tomando datos de un archivo de texto en cada una de cuyas lneas se registrara el total de ventas de un da, la asignacin de un nombre fijo al archivo de ventas mensuales condicionara la ejecucin del programa de manera que el archivo siempre se deba llamar igual, por ejemplo ventas.txt. Pero si se deseara almacenar mes a mes los archivos de ventas llamndolos v2002m01.txt, v2002m02.txt, etc. de manera de conservar los datos histricos, para evitar el trabajo de tener que cambiar nombres de archivos antes de ejecutar el programa se puede parametrizar el nombre del archivo a asignar a la variable Text mediante otra variable. Para poder referirse en un programa a un dato compuesto por varios caracteres, se puede utilizar el tipo o dominio especial denominado String (cadena). Para generalizar o parametrizar la asignacin de archivos, entonces podra codificarse:

Program VentasMensuales; Var ventas: Text; nomArch: String[30]; {ubicacin y nombre del archivo, de hasta 30 caracteres} ... Begin {Prlogo} ... Write(Ingrese el nombre del archivo con las ventas diarias: ); ReadLn(nomArch); Assign(ventas, nomArch); ... End.

Esto permite que el mismo usuario indique al programa cmo se llama su fuente de datos, y como es fcil apreciar, resulta una solucin ms flexible que imponer que el archivo en cualquier caso tenga un mismo nombre. Lectura de Secuencias de Datos desde un Archivo de Texto (Ingreso de Datos) Para obtener datos desde un archivo de texto, una vez asignado un archivo (por ej. Notas.txt) a la variable que se vaya a emplear (por ej. Datos de tipo Text), es necesario precisar al programa que se usar al archivo para ese propsito, ya que tambin podra usarse para grabar datos. As es que en el prlogo del programa se aade la primitiva Reset (restablecer) con la variable de tipo Text como argumento: Reset (Datos) ; {se abre el archivo Notas.txt asignado a la variable Datos para obtener datos de l) Al ejecutarse esta primitiva, el programa busca el archivo en el dispositivo actual o en el indicado en la sentencia de asignacin. Si el usuario ingresa el camino de acceso al archivo (path) o su nombre errneamente, el programa se interrumpir indicando un error de entrada/salida (I/O Error), si no, el controlador del dispositivo en que se encuentre el archivo dejar en memoria el primer registro fsico del mismo y la variable del archivo quedar asociada a la primer posicin o carcter de la secuencia y a la direccin en memoria RAM donde comienza el buffer. Para obtener un dato de un archivo de texto, basta con que se ejecute la sentencia Read o la ReadLn. Son las mismas sentencias (procedimientos primitivos del lenguaje) que se emplean para obtener datos desde el teclado y asignrselos a una o ms variables, slo que en caso de aplicarse a archivos, debe ponerse como primer parmetro una variable de ese tipo. Desde un programa se pueden obtener valores de cualquier tipo desde un archivo de texto. La primitiva de lectura u obtencin de valores se encarga de reconocer patrones de texto separados por uno o ms espacios y los convierte al tipo de valor de la variable con que se solicita la obtencin. Obviamente, si se desean obtener datos de diferentes tipos de valores desde un archivo de texto, se debe disponerlos en l segn una convencin y luego obtenerlos desde un programa respetando esa convencin (el nico inconveniente se presenta cuando se quieren leer cadenas, en las que los espacios son valores admitidos; as que para leer valores de este tipo hay que disponerlos al final de las lneas o aislarlos entre saltos de lnea). Para obtener un valor para una variable A desde un archivo de texto asociado a una variable Datos: Read (Datos, A) ; Obtiene desde un archivo de texto asociado a la variable Datos, un valor para la variable A y el prximo valor que se intente obtener del archivo deber estar en la misma lnea. ReadLn (Datos, A) ; Obtiene desde un archivo de texto asociado a la variable Datos, un valor para la variable A y se prepara para obtener otro dato en la siguiente lnea del archivo. Para saltar una lnea sin leer ningn dato se puede escribir slo ReadLn (Datos) ;

Para obtener valores para dos o ms variables, por ejemplo, A, B y C desde un archivo de texto asociado a una variable Datos: Read (Datos, A, B, C) ; Obtiene desde un archivo de texto asociado a la variable Datos, valores para las variables A, B y C de cualquier tipo bsico excepto el tipo string. Los valores deben figurar en el archivo separados al menos por un espacio en blanco y el o los prximos valores que se intente obtener del archivo debern estar en la misma lnea. ReadLn (Datos, A, B, C) ; Obtiene desde un archivo de texto asociado a la variable Datos, valores para las variables A, B y C de cualquier tipo bsico excepto el tipo string. Los valores deben figurar en el archivo separados al menos por un espacio en blanco y se prepara para obtener otro dato en la prxima lnea del archivo. As el programa por cada variable de datos que aparezca en la orden intentar: Reconocer en el buffer de memoria RAM del archivo la subsecuencia de caracteres correspondiente a un valor del tipo de la variable expresado en ASCII a partir de la posicin actual Actualizar la posicin en el archivo al primer blanco (en instrucciones Read) o carcter de control (en instrucciones Read y ReadLn) consecutivo al valor reconocido Convertir la subsecuencia de caracteres que configuran un valor representado en caracteres a la representacin que corresponda, y Asignar el valor a la variable Si durante el reconocimiento de un valor al programa se le acaba un buffer, le pide al controlador que obtenga el siguiente sector del archivo y lo deje en otro, continuando el reconocimiento en esta otra unidad. Debe tenerse cuidado con el uso de variables de tipo String cuando se obtienen datos de un archivo de texto. Como en las cadenas son vlidos los espacios (el carcter blanco puede aparecer de manera irrestricta), los valores de este tipo compuesto no son fcilmente identificables. Para leer cadenas slo se puede usar la primitiva ReadLn, que lee una lnea completa, y slo puede aparecer una variable de este tipo por primitiva al final de la lista de variables para las cuales obtener valores desde el archivo. En una lnea de un archivo de texto puede aparecer una cantidad cualquiera de datos de tipo bsico, por ejemplo cinco, y en un programa, conociendo el programador este hecho, se puede leer o procesar la cantidad que se desee, es decir, no necesariamente los cinco. As es que, si se deseara leer nicamente el primero de los valores, basta con emplear una primitiva ReadLn con la variable del archivo y una sola variable para cargar dicho valor: como la primitiva lee toda una lnea, de la secuencia de caracteres que la componga slo tomar el primer valor que reconozca y al resto los ignorar. Como la cantidad de lneas de un archivo de texto es en la generalidad de los casos indeterminada, o sea el archivo puede tener cualquier cantidad de lneas, en general, desconocida en el o los programas que lo usen como fuente de datos, se necesita una primitiva para saber cundo se acaba el archivo. Esta primitiva es una funcin predefinida de Pascal, llamada EoF (de End of File), a la que se debe pasar como parmetro la variable del archivo. Como luego de cada lectura, el puntero del programa en el buffer queda ubicado en el siguiente carcter a continuacin del ltimo valor ledo, el programa puede verificar si este carcter es un blanco, un carcter de salto de lnea o el carcter de fin de archivo. En este ltimo caso, al emplear la funcin EoF se obtendr el resultado True, y en cualquiera de los anteriores False. Para graficar el empleo de las primitivas anteriores, considrese el problema de totalizar las ventas de un mes de un kiosco, suponiendo que al finalizar cada da se anotan los totales vendidos de golosinas, cigarrillos, helados, bebidas, perfumera y regalos. La convencin para anotar en un archivo de texto estos totales es poner como primer carcter de la lnea una letra identificatoria del tipo de venta, y luego de uno o ms blancos el total del da. As, por cada da aparecen tantas lneas cuantos tipos de ventas. El programa debe totalizar los tipos de ventas por mes y calcular tambin el total general. Ver el programa en el anexo.

Creacin de Archivos de Texto y Escritura de Datos (Almacenamiento de Resultados) Para crear un archivo de texto con el objeto de registrar informacin de manera permanente, se usa el procedimiento primitivo de Pascal Rewrite (rescribir), con la variable de tipo Text como argumento (por ej. Resultado): Rewrite (Resultado) ; El archivo real asociado a la variable Resultado de tipo Text se crear al ejecutarse esta primitiva en el directorio donde se ejecuta el programa o en el que se especifique como directorio de creacin en la primitiva Assign (por ej. A:\prueba.txt): Assign (Resultado, A:\prueba.txt) ; Rewrite (Resultado) ; {se crea el archivo prueba.txt asignado a la variable Resultado para dejar resultados en l) , y en caso de que ya exista (el archivo prueba.txt en el directorio A:\), su contenido ser descartado y reemplazado por lo que se escriba desde el programa. Una vez creado o renovado el archivo real, para escribir datos en l se emplean las primitivas Write y WriteLn del mismo modo que para escribir en pantalla, pero poniendo como primer parmetro o argumento a la variable de tipo Text (por ej. Resultado): Write (Resultado, El resultado del clculo es : , A:8:2) ; WriteLn (Resultado, El resultado del clculo es : , A:8:2) ; La primera agrega en cdigo ASCII los valores representados por el o los otros parmetros que se le pasen a la secuencia de caracteres del archivo como parte de una lnea; y la segunda lo hace como final de una lnea, es decir, agrega al final de los valores la secuencia de caracteres de salto de lnea y retorno de carro. De esta manera se puede escribir en un archivo de texto uno o ms valores numricos o alfanumricos (salida de datos hacia archivos) a travs de variables, expresiones con variables, o literalmente. Desde un programa se pueden escribir valores de cualquier tipo en un archivo de texto. La primitiva de grabacin se encarga de traducir los valores desde el tipo original a una cadena y graba la cadena en el archivo. Para saltar al comienzo de la prxima lnea, es decir, para escribir en el archivo la secuencia de caracteres de salto de lnea y retorno de carro, se usa una primitiva especfica que se puede invocar saltar lnea en Resultado, asumiendo que Resultado es una variable de tipo archivo de texto: WriteLn(Resultado); Agregado de Datos a un Archivo de Texto Existente Si en vez de crear o recrear un archivo nuevo para destino de los datos de un programa se desea usar un archivo ya existente (por ej. Valores.txt asociado a la variable Datos tipo Text) para agregar los datos a l, se debe usar la primitiva Append (agregar), con la variable de tipo Text como argumento: Append (Datos) ; {se abre el archivo Valores.txt asignado a la variable Datos para agregarle datos al final} Cierre de Archivos de Texto Una vez utilizado un archivo en un programa, es de buena prctica ordenar su clausura mediante un enunciado de cierre Close, que debe tener como argumento entre parntesis a un identificador de variable de tipo Text. En el caso de que el archivo se haya usado para incorporar datos (abierto con Rewrite o Append), la orden para cerrarlo es imprescindible, puesto que las ltimas escrituras podran perderse (esto se debe a que el Sistema Operativo utiliza varios buffers de escritura en archivos, que no guarda en disco hasta que no deba descargar alguno por necesidad de espacio: si se termina el programa y los datos estn en algn buffer, nunca pasan a disco a menos que se especifique la operacin Close). Archivos como Parmetros Debido a la tcnica de modularizacin para el desarrollo de programas, es comn disear mdulos (procedimientos o funciones) que deban tomar datos de un archivo ya abierto o bien agregar informacin en forma incremental. Como una variable de tipo Text representa no slo el nombre de un archivo real sino tambin la posicin del programa en su secuencia de caracteres para lo que sea que se est haciendo (segn

la primitiva de apertura del archivo), si en un subprograma se hace algo en el archivo, el programa o subprograma invocante debe recuperar como resultado de la ejecucin del invocado la nueva posicin en el archivo; por lo tanto, los archivos slo pueden pasarse como parmetros de entrada/salida, es decir que deben definirse prefijados con la palabra clave Var.

Anexo Program VentasMensuales; {Programa de totalizacin de ventas} {Autor: Lic. Servetto} {Versin: 1.0 (abril de 2002)} Var
Ventas: Text; NomArch: String[30]; totalDia: Real; {variable para leer los totales diarios de todo tipo de ventas} tv: Char; {tipo de venta} golosinas, cigarrillos, helados, bebidas, perfum , regalos: Real; {totales acumulados por tipo de venta} Begin {Prlogo} {Presentacin del programa} Write(TOTALIZACIN DE VENTAS); WriteLn; {Preparacin de archivo} Write(Ingrese el nombre del archivo con las ventas diarias: ); ReadLn(nomArch); Assign(Ventas, nomArch); Reset(Ventas); {Inicializacin de variables} golosinas:=0; cigarrillos:=0; helados:=0; bebidas:=0; perfum:=0; regalos:=0; {Resolucin} Repeat ReadLn(Ventas, tv, totalDia); Case tv of g: golosinas:= golosinas + totalDia; c: cigarrillos:= cigarrillos + totalDia; h: helados:= helados + totalDia; b: bebidas:= bebidas + totalDia; p: perfum:= perfum + totalDia; end until EoF(Ventas); {Eplogo} WriteLn; WriteLn(Los totales mensuales de ventas son:); WriteLn; WriteLn(Golosinas:, g:10:2); WriteLn(Cigarrillos:, c:10:2); WriteLn(Helados:, h:10:2); WriteLn(Bebidas:, b:10:2); WriteLn(Perfumera:, p:10:2); WriteLn; Write(Total General:, (golosinas + cigarrillos + helados + bebidas + perfum):10:2) end.

Se presenta a continuacin nuevas versiones de los programas escritos en el curso (y analizados en la Clase N 11 o 13) pero en esta oportunidad utilizando archivos de texto para la lectura de datos de entrada y para la escritura de resultados de salida en dispositivos de almacenamiento masivo.

ENUNCIADO del Problema


Escribir un programa en lenguaje Pascal que permita leer desde un archivo de texto una lista con las calificaciones obtenidas por un alumno a lo largo de su carrera de Ingeniera y calcule el promedio de calificaciones. El promedio calculado deber agregarse al final del mismo archivo de texto dejando una lnea en blanco luego de la lnea que contiene la ltima calificacin del alumno. Tener en cuenta que: en cada lnea del archivo de texto figura una calificacin, como se muestra: Calificacin 1 <eoln> Calificacin 2 <eoln> Calificacin 3 <eoln> Calificacin n <eoln> <eof> las calificaciones son nmeros enteros, la cantidad de calificaciones no se conoce.

SOLUCIN del Problema OBS: los comentarios en cursiva que figuran en el programa son didcticos y no deben formar
parte del desarrollo del mismo.

{SECCIN DECLARATIVA} {Definicin del Objetivo} Program Promedio_Calificaciones_Alumno; {El programa permite determinar el promedio de calificaciones de un alumno a lo largo de su carrera de Ingeniera. Utilizacin de un archivo de texto para lectura de datos y para escritura de resultado agregndolo al final del mismo archivo de texto.}. {Definicin de Recursos} Uses Crt; Var calif, cant, suma : integer; {representan cada calificacin, la cantidad de calificaciones y la suma de las calificaciones} prom : real; {promedio de calificaciones} Archivo : string ; {representa el lugar donde se encuentran las calificaciones} Datos : Text ; {representa el archivo lgico} {SECCIN ALGORTMICA} {Desarrollo de la Solucin} Begin {inicio programa principal} {Prlogo} {Limpieza de Pantalla} ClrScr; {Presentacin del Programa} {Exhibicin del Ttulo en pantalla} WriteLn('PROMEDIO CALIFICACIONES ALUMNO DE INGENIERA'); WriteLn; {Exhibicin del Objetivo del programa} WriteLn(Este programa permite leer calificaciones de un archivo y determinar); WriteLn( el promedio de calificaciones de un alumno); WriteLn( a lo largo de su carrera de Ingeniera.); WriteLn(El promedio calculado se agrega al mismo archivo de texto.); WriteLn; {Obtencin de Datos} WriteLn(Escriba el lugar donde se encuentran guardadas las calificaciones.); {El usuario ingresar el camino para acceder al archivo y el nombre del archivo fsico} ReadLn(Archivo); {Preparacin del Archivo para Lectura} Assign (Datos, Archivo) ; {Se asigna el archivo fsico que contiene los datos (por ej. A:\Notas.txt a la variable lgica Datos de tipo Text} Reset (Datos) ; {Se abre el archivo de texto para leer datos} {Condiciones de Ejecucin} WriteLn(Cada calificacin se encuentra en una lnea del archivo de texto.); {Resolucin} {Inicializacin de Variables} suma:=0; cant:=0; {Ingreso, Conteo y Acumulacin de Calificaciones} While not eof(Datos) do Begin ReadLn(Datos, calif); cant:=cant + 1; suma:=suma + calif; End; {Cierre del archivo de texto} Close (Datos) ; {Clculo del Promedio} prom:=suma / cant;

{Eplogo} {Apertura del archivo de texto para agregarle datos al final} Append (Datos) ; WriteLn (Datos) ; {deja un rengln en blanco en el archivo} {Escritura de resultados en el mismo archivo que contiene las calificaciones} WriteLn(Datos, El promedio vale: , prom:5:2); {Cierre del archivo de texto} Close (Datos) ; {Anuncio de Terminacin} WriteLn(El promedio buscado se encuentra en archivo: , Archivo); WriteLn(Fin del Programa); {Generacin de Pausa} ReadLn; End. {fin programa principal}

ENUNCIADO del Problema


Escribir un programa en lenguaje Pascal que lea desde un archivo de texto una tabla con las calificaciones obtenidas por los alumnos de un Curso de Computacin en diferentes conceptos (por ejemplo, Concepto 1 Trabajo Prctico 1, Concepto 2 Primer Parcial 1, etc.), calcule el promedio general del curso y escriba el valor de dicho promedio en otro archivo de texto. Tener en cuenta que: en cada lnea del archivo de texto, a partir de la primera, figuran las calificaciones de un alumno en los distintos conceptos, separadas por uno o ms espacios en blanco, como se muestra: nota11 nota12 nota21 nota22 notan1 notan2 <eof> las calificaciones son nmeros enteros, la cantidad de conceptos no se conoce, la cantidad de alumnos no se conoce. nota13 nota1n<eoln> nota2n<eoln> notann<eoln>

nota23 notan3

SOLUCIN del Problema

{SECCIN DECLARATIVA} {Definicin del Objetivo} Program Promedio_Calificaciones_Curso; {El programa permite determinar el promedio general de calificaciones de los alumnos de un Curso de Computacin.Utilizacin de un archivo de texto para lectura de datos y de otro archivo de texto para escritura del resultado.} {Definicin de Recursos} Uses Crt; Var calif, ccalif, suma : integer; {representan cada calificacin, la cantidad de calificaciones y la suma de las calificaciones} prom : real; {promedio de calificaciones} caminoE: string; {nombre en el disco del archivo donde se encuentran almacenadas las calificaciones} entrada: Text; {variable que representa el archivo donde se encuentran almacenadas las calificaciones} caminoS: string; {nombre en el disco del archivo donde en el cual se escribir el promedio} salida: Text; {variable que representa el archivo donde se escribir el promedio general del curso} {SECCIN ALGORTMICA} {Desarrollo de la Solucin} Begin {inicio programa principal} {Prlogo} {Limpieza de Pantalla} ClrScr; {Presentacin del Programa} {Exhibicin del Ttulo en pantalla} WriteLn('PROMEDIO GENERAL CALIFICACIONES DE UN CURSO COMPUTACIN'); WriteLn; {Exhibicin del Objetivo del programa} WriteLn(Este programa permite leer calificaciones de un archivo y determinar); WriteLn( el promedio general de calificaciones); WriteLn( de un Curso de Computacin.); WriteLn(El promedio calculado se escribe en otro archivo de texto.); WriteLn; {Preparacin del Archivo de Entrada de datos para Lectura} WriteLn(Ingrese el nombre del archivo en el disco); WriteLn( que contiene los datos: ); ReadLn(caminoE); Assign(entrada, caminoE); Reset(entrada); {Preparacin del Archivo de Salida del resultado para Escritura} WriteLn(Ingrese el nombre del archivo en el disco); WriteLn( donde guardar el resultado:); ReadLn(caminoS); Assign(salida,caminoS); Rewrite(salida); {Condiciones de Ejecucin} WriteLn(Las calificaciones se encuentran en cada lnea del archivo de texto.);

{Resolucin} {Inicializacin de Variables} suma:=0; ccalif:=0; {Ingreso, Conteo y Acumulacin de Calificaciones} While not eof(entrada) do Begin While not eoln(entrada) do Begin Read(entrada, calif); cant:=cant + 1; suma:=suma + calif; End; ReadLn(entrada); End; {Cierre del archivo de texto que contiene las calificaciones} Close (entrada) ; {Clculo del Promedio} prom:=suma / cant; {Eplogo} {Escritura de resultados en el mismo archivo que contiene las calificaciones} WriteLn (salida, PROMEDIO GENERAL DEL CURSO ) ; { se escribe ttulo en la primera lnea del archivo} WriteLn (salida) ; {se deja un rengln en blanco en el archivo} WriteLn(salida, El promedio vale: , prom:5:2); {Cierre del archivo de texto que contiene el promedio} Close (salida); {Anuncio de Terminacin} WriteLn(El promedio buscado se puede visualizar en el archivo: , caminoS); WriteLn(Fin del Programa); {Generacin de Pausa} ReadLn; End. {fin programa principal}

Programas Ejemplos para Analizar uso de Archivos de Texto ENUNCIADO del Problema
Escribir un programa en lenguaje Pascal que permita leer desde un archivo de texto una lista con las calificaciones obtenidas por los alumnos de un Curso de Computacin en el Primer Parcial y cargue las calificaciones en un vector, calcule el promedio general del curso y escriba el promedio obtenido y el valor de todas calificaciones que superan el promedio general del curso en el mismo archivo de texto. Tener en cuenta que: en cada lnea del archivo de texto figura una calificacin, como se muestra: Calificacin 1 <eoln> Calificacin 2 <eoln> Calificacin 3 <eoln> Calificacin n <eoln> <eof> las calificaciones son nmeros reales, la cantidad de calificaciones no se conoce, la cantidad de calificaciones puede variar entre 1 y 100. Se deber utilizar un subprograma: para leer, contar y acumular las calificaciones, para determinar las calificaciones mayores al promedio general del curso.

SOLUCIN del Problema OBS: los comentarios en cursiva que figuran en el programa son didcticos y no deben formar
parte del desarrollo del mismo.

{SECCIN DECLARATIVA} {Definicin del Objetivo} Program VCalif_Promedio_conArchivo; {El programa permite determinar las calificaciones mayores al promedio general de un curso. Utilizacin de un archivo de texto para la lectura de datos de entrada y la escritura de resultados.} {Definicin de Recursos} Uses Crt; Const Max = 100; {cantidad mxima de calificaciones} Type t_indice = 0..max; {tipo de dato del ndice del vector} t_vec = array[t_indice] of real; {definicin estructura del vector} Var suma : real; {permite acumular calificaciones} prom : real; {promedio de calificaciones} i : t_indice; {representa la cantidad de calificaciones} calif : t_vec; {representa a todas las calificaciones} Archivo : string ; {representa el lugar donde se encuentran las calificaciones} Datos : Text ; {representa el archivo lgico} {Subprograma para leer desde el archivo de texto, contar y acumular las calificaciones de los alumnos} Procedure Leer_Contar_Acum(var i1: t_indice; var cali1: t_vec; var sum1: real; var datos1 : text); Begin Repeat i1:= i1 + 1; ReadLn(datos1, cali1[i1]); sum1:= sum1 + cali1[i1]; Until eof(datos1)); {repite el ciclo hasta que lee la ltima nota o hasta que llegue al fin del archivo} End; {Subprograma que permite escribir en el archivo de texto las calificaciones que superan el promedio general del curso} Procedure Determinar_Mayores(var calif1: t_vec; prom1:real; i1:t_indice; var datos1 : text ); {El vector calif1 se define como parmetro por referencia, a pesar de que no debe retornar ningn valor como salida del subprograma al programa principal, para evitar su copia en el momento de la ejecucin y ahorrar espacio en memoria} Var j: t_indice; {ndice para el recorrido del vector} Begin j:=0; While (j < i1) Do begin j:= j + 1; if calif1[j] > prom1 then WriteLn(datos1, calif1[j]:5:2); end; End; {SECCIN ALGORTMICA} {Desarrollo de la Solucin} Begin {inicio programa principal} {Prlogo} {Limpieza de Pantalla} ClrScr; {Presentacin del Programa} {Exhibicin del Ttulo en pantalla} WriteLn('PROMEDIO PRCTICA COMPUTACIN');

WriteLn; {Exhibicin del Objetivo del programa} WriteLn(Este programa permite leer datos de un archivo y determinar); WriteLn( el promedio de calificaciones de alumnos); WriteLn( en Primer Parcial y); WriteLn( las calificaciones > que el promedio); WriteLn( y guardarlas en el mismo archivo con un ttulo indicativo.); {Condiciones de Ejecucin} WriteLn(La cantidad de alumnos del curso vara entre 1 y 100); WriteLn; WriteLn(Escriba el lugar donde se encuentran guardadas las calificaciones.); {El usuario ingresar el camino para acceder al archivo y el nombre del archivo fsico} ReadLn(Archivo); {Asignacin del archivo fsico a una variable lgica} Assign (Datos, Archivo) ; {Apertura del archivo de texto para leer datos} Reset (Datos) ; {Inicializacin de Variables} suma:=0; i:=0; {Ingreso, Conteo y Acumulacin de Calificaciones} Leer_Contar_Acum(i, calif, suma, Datos); {Cierre del archivo de texto} Close (Datos) ; {Resolucin} {Clculo del Promedio} prom:=suma / i; {Eplogo} {Apertura del archivo de texto para agregarle datos al final} Append (Datos) ; WriteLn (Datos) ; {deja un rengln en blanco en el archivo} WriteLn (Datos) ; {deja otro rengln en blanco en el archivo} {Escritura de resultados en el mismo archivo que contiene las calificaciones} WriteLn(Datos, El promedio vale: , prom:5:2); WriteLn (Datos) ; WriteLn(Datos, Las calificaciones mayores que el promedio son:); {Determinacin de las calificaciones mayores que el promedio} Determinar_Mayores(calif, prom, i, Datos); {Cierre del archivo de texto} Close (Datos) ; {Anuncio de Terminacin} WriteLn(El promedio y las calificaciones > promedio se agregaron al archivo , Archivo); WriteLn(Fin del Programa); {Generacin de Pausa} ReadLn; End. {fin programa principal}

ENUNCIADO del Problema


Escribir un programa en lenguaje Pascal que lea desde un archivo de texto una tabla con las calificaciones obtenidas por los alumnos de un Curso de Computacin en diferentes conceptos ( por ejemplo, Concepto 1 Trabajo Prctico 1, Concepto 2 Primer Parcial 1, etc.), cargue las calificaciones en una matriz, calcule el promedio de las calificaciones y escriba la tabla en otro archivo de texto como as tambin el promedio y la cantidad de calificaciones superiores al promedio obtenidas por el ltimo alumno de la tabla. Tener en cuenta que: las calificaciones son nmeros reales, la cantidad de alumnos puede variar entre 1 y 100, la cantidad de conceptos puede variar entre 1 y 10. los datos se encuentran almacenados en el archivo de texto de la siguiente manera: Primera lnea: en blanco Segunda lnea: cantidad de alumnos y de conceptos separadas por 1 o ms espacios en blanco Lneas siguientes (tantas como alumnos haya): calificaciones de cada alumno en los diferentes conceptos separadas por 1 o ms espacios en blanco. Se deber utilizar un subprograma: para leer y acumular las calificaciones, para escribir la matriz de calificaciones en un archivo para contar las calificaciones del ltimo alumno de la tabla que superan el promedio

SOLUCIN del Problema OBS: los comentarios en cursiva que figuran en el programa son didcticos y no deben formar
parte del desarrollo del mismo.

{SECCIN DECLARATIVA} {Definicin del Objetivo} Program MCalif_Promedio_MayoresProm_conArchivo; {El programa permite determinar el promedio de las calificaciones de un curso y la cantidad de calificaciones mayores al promedio obtenidas por el ltimo alumno de la tabla. Utilizacin de un archivo de texto para la lectura de datos de entrada y de otro archivo de texto para la escritura de resultados.} {Definicin de Recursos} Uses Crt; Const maxf = 100; {cantidad mxima de calificaciones} maxc= 10; {cantidad mxima de conceptos} Type t_fil = 1..maxf; {tipo de dato del ndice de filas} t_col = 1..maxc; {tipo de dato del ndice de columnas} t_mat = array[t_fil, t_col] of real; {definicin estructura de la matriz} Var caminoE: string; {nombre en el disco del archivo donde se encuentran almacenadas las calificaciones} datos: text; {variable que representa el archivo donde se encuentran almacenadas las calificaciones} caminoS: string; {nombre en el disco del archivo donde se van a escribir los resultados y la matriz} salida: text; {variable que representa el archivo donde se van a escribir los resultados y la matriz} suma : real; {permite acumular calificaciones} prom : real; {promedio de calificaciones} cf : t_fil; {cantidad de alumnos del curso} ccol : t_col; {cantidad de conceptos a evaluar} calif : t_mat; {representa a todas las calificaciones} mayores: integer; {cantidad de calificaciones > que promedio ltimo alumno de la tabla} {Subprograma para leer desde ur archivo de texto las calificaciones obtenidas por los alumnos del curso en los distintos conceptos} Procedure Leer_Acumular(var datos1: text; cf1: t_fil; ccol: t_col; var calif1: t_mat; var suma1; real); Var f: t_fil; {permite recorrer las filas (alumnos)} c: t_col {permite recorrer las columnas (conceptos)} Begin suma1:= 0; for f:=1 to cf1 do begin for c:=1 to ccol1 do begin Read(datos1, calif1[f,c]); suma1:= suma1 + calif1[f,c]; end; ReadLn(datos1); end; End;

{Subprograma que permite escribir la matriz de calificaciones en un archivo} Procedure Escribir(var salida1: text; cf1:t_fil; ccol1: t_col; var calif1: t_mat); {La matriz calif1 se define como parmetro por referencia, pese a que no debe retornar ningn valor al programa principal como salida del subprograma, para evitar su copia en el momento de la ejecucin y ahorrar espacio en memoria} Var f: t_fil; {permite recorrer las filas (alumnos)} c: t_col; {permite recorrer las columnas (conceptos)}

Begin For f:=1 to cf1 do begin For c:= 1 to ccol1 do Write(salida1, calif1[f,c]:5:2); WriteLn(salida1) ; {permite pasar a la siguiente lnea} end: End;

{Subprograma que determina la cantidad de calificaciones mayores que el promedio obtenidas por el ltimo alumno de la tabla} Function Cuento_Mayores(prom1 :real; var calif1:t_mat ; cf1:t_fil; ccol1 : t_col) : integer; {La matriz calif1 se define como parmetro por referencia para evitar su copia en el momento de la ejecucin del subprograma y ahorrar espacio en memoria} Var c: t_col; {permite recorrer las columnas (conceptos)} smayor: integer; {cantidad de calificaciones > promedio} Begin smayor:=0; For c:=1 to ccol1 do If calif1[cf1, c] > prom1 Then smayor:= smayor + 1; {Asignacin del resultado obtenido en smayor al nombre de la funcin para devolver al programa principal el valor de la funcin} Cuento_Mayores:= smayor; End; {SECCIN ALGORTMICA} {Desarrollo de la Solucin} Begin {inicio programa principal} {Prlogo} {Limpieza de Pantalla} ClrScr; {Presentacin del Programa} {Exhibicin del Ttulo en pantalla} WriteLn('PROMEDIO PRCTICA COMPUTACIN'); WriteLn; {Exhibicin del Objetivo del programa} WriteLn(Este programa permite calcular y escribir en un archivo de texto); WriteLn( el promedio de calificaciones obtenidas por); WriteLn( los alumnos de un Curso de Computacin); WriteLn( como tambin la cantidad de notas mayores que el promedio); WriteLn( obtenidas por el ltimo alumno de la tabla.); WriteLn; {Condiciones de Ejecucin} WriteLn(La cantidad de alumnos del curso vara entre 1 y 100); WriteLn(La cantidad de conceptos a evaluar vara entre 1 y 10); WriteLn; {Preparacin del Archivo de Entrada de datos para Lectura} WriteLn(Ingrese el nombre del archivo en el disco); WriteLn( que contiene los datos: ); ReadLn(caminoE); Assign(datos, caminoE); Reset(datos);

{Preparacin del Archivo de Salida de resultados para Escritura} WriteLn(Ingrese el nombre del archivo en el disco); WriteLn( donde guardar los resultados:); ReadLn(caminoS); Assign(salida,caminoS); Rewrite(salida); {Lectura de cantidad alumnos y cantidad conceptos} ReadLn(datos); {porque no hay datos en la primera lnea del archivo} ReadLn(datos,cf,ccol); {Lectura y Acumulacin de Calificaciones} Leer_Acumular(datos, cf, ccol, calif, suma); {Cierre del archivo de texto} Close(datos); {Resolucin} {Clculo del Promedio} prom:=suma / (cf * ccol); {Eplogo} {Escritura de Resultados en otro archivo de texto} Escribir(salida, cf, ccol, calif); WriteLn(salida); WriteLn(salida, El promedio vale: , prom:5:2); WriteLn(salida); {Exhibicin de las calificaciones > que el promedio que obtuvo el ltimo alumno de la tabla} mayores:= Cuento_Mayores(prom, calif, cf, ccol); WriteLn(salida, La cantidad de calificaciones mayores que el promedio ); WriteLn(salida, obtenidas por el alumno ,cf, es , mayores); {Cierre del Archivo de Texto} Close(salida); {Anuncio de Terminacin} WriteLn(Fin del Programa); {Generacin de Pausa} ReadLn; End. {fin programa principal}

También podría gustarte