You are on page 1of 143

\

\
n"
f. 'o
"ij .1.iw
Kmr}Jth~
~SP·

.
LIBRERIA UNIVERSITARIA
..
UNIVERSIDAD DE PANAMA
TELEFONO : 23-3155
. --

INTRODUCCION A LA CIENCIA
DE LA COMPUTACION

'

!f tJ
,;"t

SERIE DE COMPENDIOS CIENTIFICOS " EL TUTOR DEL EST UDIANTE"

NTRODUCCON
010 CENCA
de10
Vladimir Zwass COMPUTACON

COMPAÑIA EDITORIAL CONTINENTAL, S.A. DE C.V., MEXICO


DISTRIBUIDORES:

ESP AÑA-ARGENTINA-CHILE-VENEZUELA-COLOMBIA-J:>ERU
Bolivia - Brasil - Costa Rica - Dominicana - Ecuador - El Salvador
Estados Uni,µos - Guatemala - Honduras - Nicaragua - Panamá
Paraguay - Portugal - Puerto Rico - Uruguay

::;¿~.
J..~~;'.·• -
Título original en inglés :
Introduction to COMPUTER SCIENCE

Traducido por:
ING. MARIO ESTEBAN CHAVEZ MARTINEZ

Edición autorizada por:


HARPER & ROW , PUBLISHERS , INC .

Publicada por:
BARNES & NOBLE BOOKS
A Division of Harper & Row , Publishers

Copyright ©1981 by Vladimir Zwass.

Library of Congress Cataloging in Publication Data . SOBRE EL AUTOR


ISBN 0·06-460193-5 (rústica)
VIadimir Zwass recibió su doctorado en ciencias de la computación de la Universidad de Co-
lumbia en 1975 . Actualmente es profesor asociado y jefe del Comité de Ciencias de la Compu -
tación de la Universidad Fairleigh Dickinson. Con anterioridad fue miembro de los asesores
profesionales de la Agencia Internacional de Energía Atómica en Viena, Austria . Como con-
sultor, ha aconsejado , entre otras compañias a Citibank y a la Metropolitan Life Insurance
Company.
Segunda impresión
El profesor Zwass es el autor de l'rogramming in FORTRAN, un volumen comprendido
septiembre de 1985 en la serie de compendios Bames & Noble, y ha contribuido en revistas profesionales. Es
miembro de la Asociación para la Maquinaria de Cómputo, del Instituto de Ingenieros
Electricistas y Electrónicos, Sigma Xi y Eta Kappa Nu .

Reservados todos los derechos. Ni todo el libro ni pa rte de él pueden ser


reproducidos, archivados o transmitidos en forma alguna o mediante al-
gún sistema electrónico , mecánico de fotorreproducción , memoria o
cualquier otro , sin permiso por escrito del editor.

ISBN 968-26-0520-2

Derer:hos Reservados © en Lengua Española-1985, Primera Publir:ar:ión

COMPAÑIA EDITORIAL CONTINENTAL, S. A . DE C. V.


CALZ. DE TLALPAN NúM. 4620, MÉXICO 22, D. F.

MIEMBRO DE LA CAMARA NACIONAL DE LA INDUSTRIA EDITORIAL


Registro Núm . 43

IMPRESO EN MEXICO PRINTED IN MEXICO

le
r ,

Contenido

Prefacio 13

Introducción: LAS COMPUTADORAS Y SU USO EN LA SOLUCION


DE PROBLEMAS 15

A. ¿Qué es una computadora? 15


B. Hardware y software de la computadora 16
C. Breve historia de las computadoras 18
D. Usos básicos de las computadoras 20
E. Solución de problemas c,on las computadoras 22
F. Bases de la estructura del sistema de cómputo 22

Parte l. FUNDAMENTOS DE PROGRAMACION

ALGORITMOS Y SU EXPRESION Sl

A. Definición de algoritmos 31
B. Propiedades de los algoritmos 33
C. Diagramas de fabricación 35

2 MANEJO DE DATOS EN PROGRAMACION 39

A. Instrucciones 39
B. Tipos de datos simples 40
C. Constantes, variables y arreglos 41
D. Declaraciones 44
E. Entrada y salida 45
F. Asignación 46
G. Comentarios 48
H. Repaso 49
Contenido 11
JO Contenido

3 ESTRUCTURAS DE CONTROL EN EL DISENO t c. Conjuntos de instrucciones 156


162
Introducción a la programación en lenguaje de ensamble
DE PROGRAMAS 51 \ D.
167
E. Orientación del operando
172
A. Condiciones 51 F. Uso del lenguaje de ensamble
B. Decisión 56
[ G. Ensambladores y sistemas de ensamble 172
c. Bucle 62
D. Instrucción compuesta 63 l 8 ORG~IZACION DE LOS SISTEMAS DE COMl'UTO 179
E. Transferencia incondicional de control. Niveles 66
F. Diseño de algoritmos. Seudocódigo 67 A. Unidad de procesamiento central y ejecución de Ja instrucción 179
G. Estructuras de control adicional 73 B . Jerarqufa de la memoria 184
H. Conclusión. Tipos de instrucciones en la programación 80 c. Memoria principal 185
D . Memoria secundaria 187
4 SUBPROGRAMAS Y PROGRAMACION MODULAR 83 1 E. Entrada/ salida 191
F. Organización de colectores de un sistema de cómputo 194
A. Definición e invocación de subprogramas 83 G. Sistemas de cómputo con unidades de procesamiento central
B. Comunicación con un subprograma 92 (CPU) múltiple&. Redes de computadora 194
1
c. ,Repetición en la programación 101
D. La programación modular y sus ventajas 105
9 SOFTWARE DE LOS SISTEMAS DE COMPUTO.
SISTEMAS DE OPERACION 199
5 REPRESENTACION DE DATOS SIMPLES. INTRODUCCION 1

A LAS ESTRUCTURAS DE DATOS 109


A. Vista panorámica del software de los sistemas 199
A. Datos simples 109 B. Del control manual de las computadoras a la programación
unitaria 202
B. Estructuras de datos 115
c. Programación múltiple 203
c. Organización lógica y fisica de las estructuras de datos 116
205
D. Arreglos 118 D . Sistemas de operación de lotes contra los de tiempo compartido
!
E. Tipos de sistemas de cómputo 206
E. Registros 119 !
F. Operación de un sistema de programación múltiple de lotes 210
F. Listas lineales 121 I'
G. Fracciones y pilas 123
1
G. Partes funcionales de un sistema de operación de programación
múltiple 211
H. Arboles y árboles binarios 125 1
l. Gráficas 127
J. Líneas de caracteres y su procesamiento 129 217
10 ARCHIVOS Y BANCOS DE DATOS
Parte 2. CONCEPTOS DE LOS SISTEMAS A. Campos, registros, archivos y bancos de datos 218
DE COMPUTO B. Organización de datos fisica contra lógica. Bloques 218
c. Organización de archivos 221
6 LOS LENGUAJES DE NIVEL ALTO Y SUS TRADUCTORES 137 1 D. Organización lógica de datos en el banco de datos 226
E. Conceptos de banco de datos 230
A. Examen de los lenguajes de nivel alto 137
B. Compiladores 143
c. Interpretación y su comparación con la compilación 148 11 COMPUTABILIDAD, MAQUINAS DE TURING
Y LENGUAJES FORMALES 235
7 INTRODUCCION A LOS LENGUAJES DE ENSAMBLE 151
A. Teoría de la computabilidad 235
A. Registros, palabras y bytes 151 B. Máquinas de Turing 240
Instrucciones a Ja máquina y lenguaje de ensamble 153 1 c. Lenguajes formales 244
B.
12 Contenido

Apéndice A. REPRESENTACION DE LOS DATOS NUMERICOS


EN LA MEMORIA DE LA COMPUTADORA 251
Apéndice B. CODIGOS DE CARACTERES 265
Apéndice C. ALGEBRA BOOLEANA Y LOGICA DE COMPUTACION 269
INDICE 277

Prefacio

Este libro introduce y explica los conceptos fundamentales de la ciencia de Ja compu-


tación. Está diseñado para usane en varias formas : como libro de texto , comple-
mentario, de repaso, un manual de referencia y una introducción a l campo de la
computación. No se requiere un conocimiento previo de la ciencia de la computa-
ción.
Como un texto universitario, este volumen está planeado para un curso intro-
ductorio a Ja ciencia de la comp utación de un semestre . Junto ·con un libro de texto
en programación, en un lenguaje específico de alto n ivel, puede servir en un curso
introductorio de dos semestres. Por lo que se puede usar para los cursos designados
CSl y CS2 en la "Association for Computing Machinery Curriculum '78" .
Un libro complementario en tales cursos, también de las series de compendios
"Barnes y Noble", y del mismo autor es "Programming in FORTRA N : Strur,tured
Programming with FORTRAN IV and FORTRA N 77" (Programación en Fortran:
programación estructurada con Fortran IV y Fortran 77).
Este libro complementa tam bién a otros libros de texto para el núcleo curricu-
lum de Ja "Association for Computing Machinery" ya que explica e ilustra los con-
ceptos fundamentales de Ja ciencia de Ja computa ción .
Dado que Ja ciencia de la computación abarca los aspectos práctico y teórico del
uso y diseño de las computadoras, su extensión es muy amplia. Esto se refleja en la
estructura del libro.
La Parte 1 analiza la programación de las computadoras de una forma indepen-
dient~ de cualquier lenguaje de programación específico. Este tratamiento permite
al lector aprender el diseño de algoritmos, diseñar la estructura y programación, y
la construcción básica de los lenguajes de programación , sin incurrir en la carga de
detalles y tendencias de un lenguaje dado . El análisis hace del todo claro que las
herramientas del diseño de algoritmos y las escrituras de programas tienen la m isma
construcción liásica de programación.
La Parte 2, completada por los apéndices , se puede estudiar independientemen-
te de la Parte 1. Presenta la organización de los tres recursos de los sistemas de
cómputo. Hardware, software y datos. El último capitulo de esta parte junto con el
apéndice C, introduce los conceptos esenciales de la teoría de la ciencia de la com-
putación.
14 Prefacio

Los lectores que deseen familiarizarse pvr sí mismos con el campo de Ja compu·
tación sin hacer un estudio muy profundo de la ciencia de Ja computación lograrán
sus objetivos al leer Ja Introducción y Ja Pane 2. Un indice más bieP exhaustivo le
ayudará a colocar este libro en un uso enciclopédico. Se recomienda ampliamente Introducción
Ja lectura adicional.
Deseo agradecer a mis colegas - cienúficos y prácticos de Ja C'omputación - y a Las Computadoras
mis estudiantes, por su panicipación al proporcionarme Ja comprensión necesaria
para desarrollar esta presentación de un campo complejo que crece rápidamente. y su Uso en la Solución
Quisiera agradecer también ajeanne Flagg de Barnes & Noble por su expena ayu·
da editorial y a Janet Goldstein por su trabajo de supervisión al vigilar este libro du· de Problemas
rante su producción.

Vladimir Zwass

Las computadoras electrónicas digitales surgieron en Ja década de 1940 y han pe·


netrado en casi todos Jos campos de Ja actividad humana como herramientas para
el almacenamiento y procesamiento de información.
Una computadora no es un solucionador de problemas independiente. De cual-
quier forma, debido a Ja velocidad con Ja que puede recuperar y manipular grandes
volúmenes de datos, Ja computadora es una ayuda esencial en el proceso de solución
de problemas. El proceso de solución se presenta a una computadora en forma de
programa - una lista de las acciones requeridas para llegar a los resultados.
v.111'\t:lntroducción analiza los elementos básicos de .Jas computador:is y su aplica-
~i6n as• como las fases del diseño del programa de Ja computadora y su implanta·
ción.

A. ¿QUE ES UNA COMPUTADORA?

Una computadora es una máquina que procesa datos o, en otras palabras, una má·
quina para Ja manipulación de símbolos. Estos simbolos representan informaci'ón
de varias clases, por ejemplo, un número o un nombre.
La palabra "computadora" se usa en Ja actualidad como una abreviación de
computadora electrónica digital de programa de usos generales. Estas se refieren a
las siguientes propiedades.
Propósitos generales. Las computadoras se pueden aplicar para resolver cual·
quier problema que tenga solución. La computadora es dirigida por un programa,
esto es, una secuencia de instrucciones que determinan las operaciones que van a
ser realizadas por la máquina. Los programas están escritos por los humanos. Un
programa se puede reemplazar con facilidad por otro, por lo que cambia el uso de
la máquina. Una máquina de capacidad más lixp.itada, diseñada para una tarea en
panicular, es llamadá una computadora tie propósito especial.
Todas las computadoras modernas tienen sus programas almacenados con Jos
datos en una memon'a (llamada también almacén). Estas computadoras de progra-
ma almacenado han sido desarrolladas a panir de dispositivo de cálculo en los que
16 Introducción Introducción 17

la secuencia de pasos es seguida durante el cálculo estableciéndose por medio de un 2. SOFTWARE


tablero de contacto o una cinta perforada de "control".
Las unidades de procesamiento de datos de las computadoras están construidas .r . El intermedio entre el usuario de Ja computadora y el hardware es el software del
de componentes electrónicos, lo que permite velocidades de aproximadamente un ¡ sistema, que es un conjunto de programas que pertenece a Ja configuración de un
millón de operaciones elementales por segundo para algunas máquinas, y velocida- ¡
sistema de cómputo dado y facilita su uso. Los programas escritos por el usuario de
des aún mayores para otras. Un sistema de cómputo comprende no sólo Jos elemen-
la computadora para obtener soluciones a sus problemas son llamados aplicación de
tos de procesamiento de datos, sino también los dispositivos de entrada/salida, usa-
software. Con frecuencia al software del sistema se Je hace referencia en forma bre-
dos para transferir programas y datos de Ja memoria de la computadora al mundo
ve como software.
exterior y viceversa. Estos dispositivos con frecuencia electromecánicos, son en con-
El usuario de la computadora, durante el proceso de diseño e implementación
secuencia más lentos.
del programa que es llamado programación, debe especificar las operaciones que
Las computadoras digitales han operado a las máquinas analógicas. En las com-
van· a realizarse. Los lenguajes naturales como el inglés, usados para la comunica-
putadoras analógicas se usa un proceso fisico (por lo general el flujo de corriente
ción humana, no son apropiados para la programación debido a su ambigüedad y
eléctrica) para imitar el cómputo. Sus resultados se obtienen midiendo los pará-
falta de precisión. Por el contrario, la programación en ·un lenguaje de máquina
metros del proceso. Las computadoras digitales usan simbolos para el cómputo sin
puede ser excesivamente tedioso y podría limitar la capacidad de aplicación de los
referencia al fenómeno fisico fundamental.
programas, ya que no se transfieren con facilidad a diferentes com.{mtadoras en esta
forma.
Por tanto, los usuarios de la computadora programan en lenguajes de progra-
B. HARDWARE Y SOFTWARE DE LA COMPUTADORA mación. Generalmente los más usados son los lenguajes de alto nivel (como el
FORTRAN, COBOL o PL/l) que combinan la precisión de expresión con ·una
En la programación, el usuario de una comp'!.ltadora no tiene que tratar directamen- cierta aproximación al lenguaje natural por un lado y por otro el problema a resol-
te con los dispositivos fisicos (hardware) del sistema de cómputo. En cambio, los ver. Los programas escritos en tales lenguajes son muy independientes de las
programas de servicios especiales, almacenados en la memoria de la computadora, características de una computadora en particular; se pueden trasladar con facili-
abastecen una interfase entre el usuario y Ja máquina al vacío. Estos programas, lla- dad de una máquina a otra. Los lenguajes de ensamble, el otro tipo de notaciones
mados el software del sistema, simplifican la tarea del programador y la aplicación de programa, se aproximan mucho más al lenguaje de máquina de una computa-
de escritos del software por él o por su control del empleo del hardware. dora viva.
Se requiere un medio de traducción. Estos programas que se conocen como tra-
ductores convierten los programas fuente (escritos en lenguajes de nivel superior o
1. HARDWARE en un lenguaje de ensamble , para el que se ha diseñado al traductor) en programas
de objetivo, expresados en el lenguaje de máquina de la computadora en particu-
Un sistema de cómputo incluye un número de dispositivos separados funcionalmen- lar.
te que constituyen su hardware: el procesador central al que se dirigen las instruc- El software incluye también los programas de servicio (por ejemplo, las rutinas
ciones, el sistema de memoria en donde los datos e instrucciones son almacenados y de clasificación) que han sido escritos más bien por los programadores de sistemas,
los mecanismos de entrada/salida para la comunicación con el ambiente del sistema. que por los usuarios y están almacenados en la memoria del sistema de cómputo.
Las computadoras ejecutan Jos programas; esto es, llevan a cabo las secuencias Además, se requiere un programa especial para asignar los recursos necesarios a
de instrucciones contenidas en su interior. El procesador central de la computadora un programa y para mediar entre las demandas hechas por varios usuarios en un siste-
(llamado también CPU, unidad de procesamiento central)* está diseñado para ma compartido. Este programa, que maneja todos los recursos del sistema, incluyen-
comprender instrucciones elementales. Tres ejemplos de instrucciones elementales do los programas del usuario, es llamado supervisor, ejecutivo o sistema operativo.
son: (1) sume dos números; (2) compare dos números e indique el mayor; (3) lleve a
Se requieren programas extensos para manejar los bancos de datos en algunos
cabo la instrucción siguiente para una posición de memoria dada. Estas instruc-
sistemas de cómputo y para facilitar la comunicación remota entre un usuario y el
ciones se codifican como secuencias de los O y de los l para facilitar la implementa·
sistema o, frecuentemente, entre muchas computadoras ubicadas en forma dis-
ción del hardware. Este código constituye el lenguaje de máquina de una computa-
tante.
dora. El lenguaje de máquina varía en diferentes computadoras.
El sistema operativo, junto con los traductores de lenguaje, los programas para
el control de datos y comunicación, y los programas de servicio constituyen el soft-
ware esencial de la computadora. Los programas del usuario (programas de aplica-
• Del inglb CPU, central proccssing unit. (N. del T.) ción) se pueden simplificar debido a la presencia del software del sistema.
Introducción 19
18 Introducción

3. INTERDEPENDENCIA ENTRE EL HARDWARE 2. SURGIMIENTO DE LAS COMPUTADORAS MODERNAS


Y EL SOFTWARE
En la década de 1930 el concepto de la computadora de uso general se volvió en una
De la descripción anterior podemos concluir de que existe la siguiente separación idea cuyo tiempo habia llegado. Por un lado la ...:reciente complejidad de la so-
funcional entre el hardware y el software de la computadora. El hardware es capaz ciedad humana y por el otro las nuevas posibilidarl.es t~cnológicas, condujeron .al
de llevar a cabo las operaciones elementales, especificadas en el conjunto de ins- uso práctico del pensamiento de la gente de •alento. El matemático inglés Alan Tu-
trucciones de la computadora dada. El software extiende ademru; estas capacidades ring en 1937 hizo un análisis teórico de las posibilidades de un mec:inismo de cóm-
y hace posible al usuario: puto de usos generales. El impulso inmediato para su implementación fue propor-
cionado por la Segunda Guerra Mundial y por las necesidades de cómputo de los
militares.
(a) Especificar el programa en una manera muy aproximada al proceso de En 1944 entró en funcionamiento en la Universidad de Harvard la primera com-
pensar de él o de ella. putadora electromecánica de uso general, la Mark l. El cómputo mecánico era len-
(b) Llamar los programas resultantes del trabajo hecho por los otros usuarios to e inconfiable. En 1946, se terminó en la Universidad de Pennsylvania la primera
o por los programadores del sistema par.a llevar a cabo parte del (o de la) computadora electrónica de uso general, ENIAC. Sus diseñadores J. Presper Eckert
programador(a). y John W. Mauchly, utilizaron y expandieron las ideas desarrolladas por otro
(c) Confiar en la ubicación automlitica de recursos del propio sistema. cientifico estadounidense, John V. Atanasoff, quien fue el primero en u tilizar dis-
positivos electrónicos en la construcción de una computadora (que nunca terminó).
El "programa" de la Mark 1 fue colocado en una cinta de papel, mientras que la
C. BREVE HISTORIA DE LAS COMPUTADORAS ENIAC i;equerfa un 11ablero de enrollado. Bajo estas circunstancias, introducir un
programa nuevo .en las máquinas fue una empresa mayor.
Este breve repaso de la historia .de la computación, está planeado para dar una En 1945 Jolm 'On Neumann del Instituto de Estudios Avanzados introdujo el
perspectiva en el desarrollo de las computadoras electrónicas digitales y para concepto de la compu,iadora .con programa almacenado. J .a primera de estas má-
mostrar cómo han surgido recientemente. quinas, EDSAC, fue .erminada en la Universidad de Cambndge en Inglaterra en
1949.
La era de la producción 6't -nasa ae computadoras llegó en 1951 , cuando una
computadora digital electrómca de programa almacenado, la UNIVAC 1, .fue lan-
1. ANTES DE LA ERA DE LA ELECTRICIDAD
zada comercialmente como la primera de estas máquinas que se construyó en una
linea de ensamble.
Las herramientas computacionales surgieron en la antigüedad. El ábaco, el más En consecuencia, surgieron -tres (o cuatro, de acuerdo a algunas opiniones) gene-
antiguo de los dispositivos de cálculo, fue inventado probablemente en el Oriente, r!l.ciones consecutivas de computadoras, distinguidas entre otras caracteristicas por
hace miles de años. Moviendo las cuentas que tienen diferente significado de acuer· la te....ologfa de sus dispositivos electrónicos. Las computadoras de la primera gene-
do a su posición en las barras del ábaco, se puede llevar a cabo la adición y sustrac- ración, eran máquinas de tubos al vado. La segunda generación, construida sobre
ción. Este dispositivo en la actualidad permanece en uso en algunos países. transistores empacados de un modo individual, fue introducida comercialmente en
El siguiente gran salto, los grandes matemáticos del siglo XVII Blaise Pascal y 1958. La tercera generación apareció en 1966 y abarca las máquinas que usan cir-
Gottfried Leibniz construyeron calculadoras mecánicas armadas sobre ruedas cla- cuitos integrados, esto es, los circuitos lógicos que constan de muchos transistores y
vadas. La calculadora de Pascal sólo llevaba a cabo la sustracción y la adición; de otros dispositivos electrónicos están contenidos en una pieza pequeña de metal
Leibniz fue capaz de extender este diseño para la multiplicación y la división. semiconductor (llamada oblea) de este tamaño: O. La cuarta generación de com-
De manera sorprendente, la invención de un tejido de tela automático en 1801 putadoras se distingue en ocasiones para el uso de la integración en gran escala
por Joseph Jacquard, tuvo fuerte intluencia en el futuro de la computación. Esta (LSI: Large scale integration), con miles de transistores en una oblea.
herramienta-usaba tarjetas perforadas para controlar la trayectoria del urdido, esto
es, una tarjeta conten!a el "programa" para la tarea del tejido. En 1965 se instaló Ja primer a minicomputadora comercial, una computadora
La idea fue utilizada por Charles Babbage, el creador de la primera computado- chica y relativamente barata algo limitada en los recursos del hardware y software.
ra de propósitos generales. Comenzó su trabajo de mecánica programada por tarje- A menudo se usaba más para una aplicación simple que para un rango amplio de
tas en 1883 en una "máquina analltica" (nunca la terminó). aplicaciones, como lo eran las más grandes llamadas computadoras pn·n cipales.
Los tabuladores de tarjeta perforada fueron introducidos por vez primera por La tecnología de la integración en escala grande originó, en 1971 , en el de-
Herman Hollerith para el censo de 1890 en los EUA. sarrollo del microprocesador, una unidad de procesamiento central en una oblea
20 Introdur,r,ión Introducción 21

simple. Tal dispositivo, cuando se ensamblaba con otras pocas obleas para el resto
(c) Operación en medios inaccesibles para los humanos; estas aplicaciones
de las fun~iones (por ejemplo, la memoria), formaba un microcomputador.
incluyen vuelos no tripulados al espacio u operaciones en presencia de ra-
Las mini y microcomputadoras, debido a su bajo costo y tamaño pequeño, origi- diaciones.
naron una amplia distribución de Ja computación . Sus capacidades crecieron de (d) Tareas rutinarias de naturaleza·repetitiva, como la impresión de un repor-
manera impresionante. te o la actualización de cuentas.
La historia del software de los sistemas es muy breve, se originó con la invención
de las computadoras de programas almacenados. Al principio, Jos programadores El último criterio para el uso profesional de una computadora en una tarea dada
usaban el lenguaje de la máquina. A mediados de la década de 1950, se comenza- es por lo general el de costo-efectividad. En muchos casos, la satisfacción derivada
ron a introducir Jos lenguajes de alto nivel, con el tal vez más poderoso de éstos, el por el usuario de un plan conveniente y justo tan1bién contribuye. La computación
FORTRAN presentado en su forma original en 1957. Los sistemas de operación, al doméstica se ha desarrollado de una manera sigriificativa.
principio muy simples en sus funciones, también fueron creados a mediados de la
década de 1950. La década de 1970 trajo al software sofisticado para el manejo de
volúmenes grandes de datos interrelacionados y las comunicaciones entre computa-
2. AREAS DE USO DE LA CGMPUTADORA
doras lejanas.

En la actualidad cada área de Ja actividad humana incluye el uso de computadoras.


D. USOS BASICOS DE LAS COMPUTADORAS Se han desarrollado los siguientes usos de la computadora, que con frecuencia
aparecen juntos:
Una computadora es una herramienta utilizada por los humanos en el proceso de
solución de problemas, más que en Ja solución de problemas en sí. Las computado- • Cálculos numéricos (Ja primera aplicación).
ras extienden las habilidades humanas debido a las caracterlsticas siguientes: velo- • Almacenamiento y extracción de informaciór¡.: el mantenimiento de un
cidad de operación, capacidad de memoria, puntualidad y costo-efectividad en conjunto de datos simbólicos, llamado un archivo (por ejemplo, un archivo
de nómina), incluye los programas necesarios para tener acceso a cualquier
muchas aplicaciones.
partida o clase de partidas.
• El manejo de conjuntos de datos, que incluyen la clasificación y reducción .
• Control de proceso: en un proceso de producción o en cualquier otro proce-
1. CATEGORIAS DE LAS APLICACIONES so físico, se puede conectar una computadora por un extremo a los instru-
mentos de medición y por el otro a Jos controles. La máquina analiza los da-
DE LA COMPUTADORA
tos medidos y ajusta Jos controles de acuerdo con las instrucciones del
programa.
Las categonas típicas de las aplicaciones de la computadora en Ja que la máqui-
na ayuda al intelecto y a los sentidos humanos o libera a Ja gente para ocupaciones
• Comunicaciones: manejo de mensajes en las redes de comunicación .
• Procesamiento de la palabra: manejo de textos, casi siempre para impre-
creativas incluye: sión.
(a) Tareas que requieren el manejo de volúmenes grandes de datos , como aná- • Gráficas de cálculo: entrada, manejo y salida de representaciones gráficas,
que reflejan el mundo real o creado por un humano y/o Ja computadora.
lisis de los censos o identificación de partículas elementales.
(b) Tareas para las cuales el cálculo a alta velocidad es imperativo; éstas se • Simulación de sistema: para analizar el estado de un sistema, se usa un
programa de computadora como un modelo.
representan por
(1) sistemas de tiempo real que requieren una respuesta de control más • Inteligencia artificial: un desarrollo selectivo del método de tanteos, para
contestar a Jos problemas que se cree requieren inteligencia humana debido
rápida que la que puede ser proporcionada por Jos humanos, como
a que su proceso de solución no se puede establecer con precisión. Son
el manejo de un cohete o el control de un proceso físico;
ejemplos Ja comprobación de teoremas y Ja traducción de Jos idiomas natu-
(2) áreas en donde no se requiere una respuesta en tiempo real pero en
rales, Jos cuales hasta ahora habfan sido eludidos por las aproximaciones de
donde el número de cálculos relacionados es tan grande que Jos re-
cómputo.
sultados podrían obtenerse demasiado tarde para ser útiles a menos
que se usara una computadora. Cualquier pronóstico es un buen
El rápido desarrollo de Ja computación está ampliando esta lista de manera
ejemplo;
constante. Los costoa de! hardware de Ja computadora están disminuyendo debido
22 Introdur.r.ión
Introducción 23
al progreso tecnológico, mientras que los costos del trabajo humano están crecien-
do. Esta combinación da por resultado un uso de las computadoras cada vez más 1. FLUJO DE LA INFORMACION EN LOS SISTEMAS
amplio. DE COMPUTO

E. SOLUCION DE PROBLEMAS CON LAS COMPUTADORAS


La descripción de un sistema de cómputo en la Sec. B anterior menciona Ja organi-
Como ya se ha hecho hincapié, la solución de un problema dado es nuestra. Si elegi- zación básica mostrada en la Fig. I-1. Este diagrama de bloques representa el flujo
mos incorporar una computadora en este trabajo, se pueden distinguir las etapas si- de la información (instrucciones y datos) necesaria para realizar un programa.
.guientes en el proceso de solución de problemas:
Un dispositivo de entrada recibe la información y la coloca en la memona (tam-
(1) Definición del problema: La solución que estamos buscando por lo gene· bién llamada archivo). Si las instrucciones no están expresadas en el lenguaje de la
ral tiene que aplicarse más bien a una clase de problemas que a un máquina, se llama al traductor del software. Durante la traducción y ejecución sub-
problema sencillo. Para definir esta clase, se tienen que hacer suposi- secuente, la unidad de procesamiento central (CPU)• trae las instrucciones de la
ciones con respecto a la información disponible (se diseñarán las entradas memoria. Por supuesto, durante la traducción, serán éstas las instrucciones del tra-
al programa). Se debe establecer también la naturaleza de los resultados ductor. La CPU también trae de la memoria las partidas de datos necesarios y los
deseados (las salidas del programa para todas las clases de entrada po· aplica a estas instrucciones. Los resultados intermedios y finales son almacenados
sibles). también en la memoria. Dado que la ejecución del programa es progresiva, se
(2) Análisis del problema: Se debe determinar la aproximación a la solución pueden comunicar los datos hacia el mundo exterior mediante un di$positivo de sa-
del problema más efectiva y eficiente. Puede ser posible dividir el proble- lida. También pueden ser almacenados en la memoria hasta que se haya realizado
ma en subproblemas. Se debe investigar Ja posibilidad de incorporar el programa y entonces _presentarlos todos a la vez. Los programas y/ o los datos
programas ya existentes. pueden ser almacenados por la memoria durante largos periodos de tiempo para
(3) Diseño de la estrµctura de datos: Se determina la composición de los datos evitar introducirlos repetidamente por medio de un dispositivo de entrada.
para ser manejados por el programa. Esto se hace junto con el paso si- Toda esta información manejada por el sistema de la computadora está codifi-
guiente. cada como una cadena de los O y ·1 , o sea, en tin código binario. ·
(4) Diseño del algoritmo: El algoritmo o procedimiento de solución para el Para soportar la operación descrita del sistema de cómputo, se necesitan
problema, se debe escribir con el uso de una notación algorítmica. Estas ampliaciones al esquema básico de la Fig. I-1 . En la Fig. I-2 se presenta una imagen
notaciones evitan los detalles contenidos en programas, permitiendo al so· más detallada de la organización del sistema de cómputo.
lucionador de problemas concentrarse en el propio problema.
(5) Codificación: Se debe seleccionar un Ieriguaje de programación apro- 2. UNIDAD DE PROCESAMIENTO CENTRAL
piado. Se debe escribir un programa legible con estructura clara.
(6) Implementación del programa: El programador debe estar convencido, La unidad de procesamiento central (CPU) de una computadora consiste de dos
que usando Ja computadora y los datos de entrada de la muestra represen- partes distintas en funcionamiento: la unidad de control y la unidad de lógica arit -
mética.
tativa, el programa funcione como él lo desea. Se debe investigar el com-
portamiento del programa en respuesta a todas las posibles variaciones de La unidad de control dirige las acciones del sistema llevando a .cabo las instruc-
las .e ntradas durante la definición del problema y las etapas de análisis. ciones y estableciendo su secuencia conforme al programa.
(7) Documentación del programa: Una descripción de la operación del
programa, es su estructura de datos, y se deben proporcionar instruc- unidad de procesamiento
ciones de entrada y de salida. central
(8) Uso del programa y modificación posible: El programa está operando en
muchos casos periódicamente para obtener los resultados necesarios. Es
una herramienta y quizá sea mejorada. instrucciones
datos
¡r
l
_
1
.
instrucciones
---ll-...L_ _
y datos
y datos
dispositivo t-------~ resultados ;./dispositivo
de entrada memoria
1 de salida
F. BASES DE LA ESTRUCTURA DEL SISTEMA DE COMPUTO 1oor ejemplo, lectora de tarjetas)
(por ejemplo. impresora)
Para programar en un lenguaje de alto nivel, es necesario comprender los elementos
Fig. 1-1. Flujo de la información en las computadoras.
de organización de un sistema de cómputo. Aquí se presenta una descripción dise-
ñada para respaldar tal programación y se ampliará en el Cap. 8.
•Del ing!Es CPU. central proc<ssing unit. ( N . del T.)
24 Introducción Introducción 25

¡- - - - 1 r------ - 1 4. DISPOSITIVOS DE ENTRADA/SALIDA


1 ,---¡ 1 cPu: ,-----,
1 1 1 ~--'--'-1- 1 Un número de dispositivos de entrada / salida (110)* sirven a la necesidad de comu-
1 unidad de control nicación de los sistemas de cómputo con el medio.
memoria
1 Los dispositivos más ampliamente usados incluyen a las lectoras de tarjetas y a
secundaria
1 los teclados conectados a las terminales de proyección o de impresión. La salida es
unidad de iógica
'- aritmética casi siempre proyectada en una pantalla de tubo de rayos catódicos (CRT)** seme-
jante a un tubo de televisión o impresa por una impresora de lfnea.
,_ dispoaitivos 1/0
(entrada/ salida)
Con frecuencia se incluyen también los dispositivos para telecomunicación.

SUGERENCIAS PARA LECTURAS MAS PROFUNDAS


flujo de la información - - - flujo de las señales de control
(instrucciones o datos) USOS DE COMPUTADORAS

Slotnick, D. L., and Slotnick, J. K.: Computers, Their Structure, Use, and lnfluence,
Prentice-Hall, Englewood Cliffs, N.J., 1979.
Fig. I-2. Organización del sistema de cómputo. Este extenso trabajo analiza muchos aspectos de la aplicación de las computado-
ras; incluye una introducción a la organización de los sistemas de cómputo y
programación BASIC.
La unidad de lógica aritmética (ALU)* contiene los circuitos necesarios para Dorf, R. C.: Computer ami Man, Boyd and Fraser, San Francisco, 1974.
llevar a cabo las operaciones aritméticas básicas asf como las lógicas (por ejemplo , En algunos aspectos complementa al libro de Slotnick, este trabajo incluye un aná -
una comparación). La ALU también contiene un cierto núniero de registros o ele· lisis sobre las computadoras en las anes .
mentos de archivo rápidos. Cada registro puede retener un operando simple (partí· Sanders, D. H.: Compute,.s in Society, 2nd ed., McGraw-Hill, New York, 1977.
da de datos) . Cuando se registran, los operandós pueden ser sumados, comparados, Se analizan los impactos positivos y negativoa de las computadoras.
cambiados o manejados de cualquier forma . Adams, J. M., and Haden, D. H.: Social Effects o/Computer Use ami Misuse, Wi-
ley, New York, 1976.
Incluye varios papeles importantes, documentos y reflexiones; da una perspectiva
3. MEMORIA en el uso de las inteligencias anificiales.

La memoria principal de la computadora consta de una cantidad de posiciones lla- HISTORIA DE LAS COMPUTADORAS
madas palabras, que contienen instrucciones o partidas de datos . Cada palabra
Harmon, M.: Stretching Man 's Mind: A History of Data Processing, Mason/
consiste de un número uniforme de biu (cada uno igual a 1 o O), tiene una orienta-
Charter, New York, 1975.
ción única, que es su número en la memoria. La CPU identifica u orienta una pa- Para principiantes.
labra dada, ya sea, para escribirla en su posición, almacenar nuevos contenidos en Goldstine, H . H .: The Computer: From Pascal to von Neumann, Princeton Universi-
ella o para leer de ella, extrayendo los contenidos de la palabra sin borrarlos. De es- ty Press, Princeton, N .J., 1974
ta manera , la CPU puede obtener las instrucciones y datos para el programa y en El autor . un colaborador de von Neumann, enfatiza el desarrollo explosivo que si-
consecuencia almacenar los resultados en la memoria . gue a la Segunda Guerra Mundial.
Para ampliar la capacidad de la memoria principal a un costo razonable, los sis- Eames, C., and Eames, R.: A Computer Perspective, Harvard University Press, Cam-
temas de cómputo generalmente tienen una memoria secundaria (auxiliar), selec- bridge, Mass., 1974.
cionada de tipos de archivo más baratos y lentos que la principal . El software y los Una publicación ricamente iluatrada,
datos que no se espera que sean usados pronto se almacenan al!i . Las partidas con- Rosen, S., ed.: Programming Systems and Languages, McGraw-Hill, New York,
1967.
tenidas en el archivo secundario son accesibles generalmente a la CPU sálo siguien-
Esta colección de anlculos semanales que apareció en el año de 1957-1965 contiene
do su transferencia a la memoria principal. un estudio histórico introductorio sobre el software y los lenguajes de programa-
ción.

• Del ingl& 1/0. lnput/output. (N. del T .).


'Del inglb ALU , arithmetic·logic unit. (N . del T . ) " Dd ingl& CRT. cathode ray tube. (N . del T .)
o e:
e ~o
·-
( ,)

::::> "'o
+"'
C'a
E
e: C'a
Q) Q)
......., E o
~

C>
l... C'a
ro "'C
e: o.
~

a.. ::lQ)
u. "'C
¡-

J.,
r

PARA RESOLVER UN PROBLEMA con el uso de una computadora, un


programador necesita diseñar un algoritmo, un procedimiento inequ!voco que es-
pecifica un número finito de pasos que se deben tomar. Cada algoritmo opera sobre
ciertos datos que describen los objetos del mundo real concernientes al problema.
Los pasos del algoritmo manejan estos datos.
El uso de datos de tipo apropiado, organizado, cuando es posible en estructuras
de datos que reflejan las relaciones entre las partidas de datos específicas, origina
algoritmos más claros y sencillos. Después de que se ha diseñado al algoritmo y las
estructuras de datos usadas por éste, se puede crear un programa en el lenguaje de
programación seleccionado.
Los algoritmos consisten de pasos que manejan los datos y las estructuras de
control que especifican la secuencia en la que se llevan a cabo los pasos. Los pasos
básicos del manejo de datos son la asignación del valor a una partida de datos con
valores variables y la entrada y salida de datos. Estos pasos pueden ser llevados a ca-
bo, secuencial! repetida o condicionalmente, según sean dirigidos por las estructu-
ras de control.
Los subalgoritmos ó subprogramas pueden ser llamados para realizar una subta-
rea específica en la tarea completa de solución del problema. Por tanto, un algorit-
mo y el programa que se realiza a partir de éste se pueden construir en varios módu-
los. La programación modular hace posible diseñar sistemas complejos de una ma-
nera ordenada, con un grado alto de confiabilidad y claridad.
Para especificar algoritmos, se pueden emplear seudocódigos o diagramas de
fabricación. Cuando se usa el seudocódigo, el programador especifica los pasos del
algoritmo usando básicamente el lenguaje natural con estructuras de control sobre-
puestas. En consecuencia, se introduce más precisión en esta especificación. Los
diagramas de fabricación son herramientas gráficas tradicionales con s!mbolos es-
tandarizados.
Ambas herramientas se pueden usar para especificar un algoritmo de una mane-
ra de arriba a abajo mediante la técnica de refinar los pasos. Así, el programador
refina una idea inicial de la solución del problema en términos cada vez más
específicos mientras identifica los módulos que realizarán subtareas particulares. Al
mismo tiempo, la definición de los datos se vuelve más especifica. El último refina-
miento del algoritmo será codificado para su ejecución en la computadora.
Las instrucciones básicas de programación introducidas aqu!, se pueden usar
para expresar algoritmos. Están también en varias formas, incorporadas en los len-
guajes de programación de alto nivel de uso general. Por tanto, esta parte del libro
'! describe también las ~structuras básicas de estos lenguajes.
~;- ._-,• ~·

u~

1
Algoritmos
~·"' ~
. y su Expresión

La etapa vital de Ja solución de un problema con una computadora es el diseño del


algoritmo y de la estructura fundamental de datos. Un algoritmo es un procedi-
miento expresado precisamente para obtener Ja solución del problema, Ja que se

! 1 presenta de manera subsecuente a una computadora en el lenguaje de programa-


ción seleccionado. Los algoritmos se presentan de una maner~ conveniente para ún
lector humano, mientras que los programas sirven a las necesidades de las rnmputa-

¡\
doras.
Es importante recordar mientras diseñamos un algoritmo que una computadora
sólo sigue las instrucciones y no puede actuar si no se le ha ordenado de manera
explicita. Por tanto, el solucionador de problemas debe prever cualquier aspecto
del problema en el propio algoritmo.
Este capitulo especifica la(propiedades que deben tener los procedimientos para
Ja solución de problemas si van a hacerse por algoritmos. Estas son la no limitación,
ausencia de ambigüedad, definición de la secuencia, definición de entrada y de sa-
lida, efectividad y definición del alcance. Los diagramas de fabricación se presen-
tan como una herramienta para la expresión de los algoritmos. En los capítulos si-
guientes se introduce otra herramienta, con frecuencia más útil, para esta tarea:. el
seudocódigo.

A. DEFINICION DE ALGORITMOS

Todas las tareas que puede llevar a cabo una computadora se pueden expresar co-
mo algoritmos. Una vez que se ha diseñado un algoritmo, se codifica en un lenguaje
de programación, y el programa se realiza por una computadora.
Un algoritmo es un conjunto finito de instrucciones que especifican una secuen-

\ cia de operaciones a realizar en orden para resolver un problema especifico o clase


de problemas. En otras palabras, un algoritmo es una fórmula para Ja solución del
problema.
Un algoritmo se puede presentar en varios niveles de detalle. El hardware de una
computadora sólo puede obedecer las instrucciones si están expresadas en el len-
guaje de máquina de la computadora. El diseñador del algoritmo puede encontrar
32 Fundamentos de programación Algoritmos y su expresión 33

dificultades al pensar en términos de estas instrucciones, ya. que los detalles pueden ~·')
deténgase; incremente también el CONTADOR en l . introduzca el siguiente entero . y
oscurecer la esencia del prnc..d.irnicnto . Sin embargo, los lenguajes de programa- llámelo NUM l , entonces realice de nuevo este paso ( 5) .
cion de<llto nivel que son comprendidos por los traductores del software de las com- Notas
putadoras, no son una herramienta apropiada para Ja expresión de los algoritmos. l. Observe que no es la intención del problema ahorrar números en la memoria. Piense en
Los programas con miles de instrucciones de lenguaje de alto nivel suceden con la forma en que se llama a los números y la razón para esto.
mucha frecuencia . Es imposible presentar tales programas de manera inmediata en 2. Continúe el algoritmo con unos cuantos enteros que usted escoja y convénzase por si mis-
mo de su veracidad.
su forma final ; el diseñador debe comenzar con una representación mucho más
concisa.

EJEMPLO 1-1
B. PROPIEDADES DE LOS ALGORITMOS

~
Aquí se presenta un algoritmo simple como una lista de instrucciones del idioma inglés . Un procedimiento que no tiene las propiedades enunciadas abajo no es un algorit-
Problema mo y generalmente no proporciona-el resultado deseado cuando un programa basa-
Detennine el mayor de tres enteros. ·do en él se presenta a una computadora.

l.
Algoritmo: descripción inicial
Compare el primero y el segundo enteros y establezca cuál es el mayor. 1
2.

· l.
Compare el último con el tercer enteros. El mayor es el resultado.
Algoritmo: refinamiento
Obtenga (entrada) el primer número; llámelo N UMI.
• f 1. LIMITACION

~
2. Obtenga (entrada) el segundo número ; llámelo NUM2 . La ejecución de un algoritmo programado se debe completar después de que se ha-
3. Compare el NUMl con el NUM2 y seleccione el mayor; si los dos enteros son iguales, se- ya llevado a cabo una cantidad finita de operaciones. De otra manera , no podremos
leccione el NUML Llame a este mimero el MAYOR (LARGE). exigir que la ejecución produzca una solución.
4. Obtenga (entrada) el tercer número y llámelo NUM3.
5. Compare el MAYOR con el NUM3 y seleccione el mayor ; si los dos enteros son iguales , Es obvio que el proceso de solución enunciado en el Ej . l-l tiene esta propiedad, ya que cá-
seleccione el MAYOR. Llame a este número el MAYOR. da paso se lleva a cabo una vez. En el Ej . 1-2. el Paso 5 será repetido N-1 veces. Dado que
6. Presente (salida) al MAYOR. N es finito, podemos concluir que la realización de este procedimiento será completada des-
7. Deténgase . pués de un número finito de pasos.
Notas
Note que en el diseño de un algoritmo se toman ciertas decisiones a discreción del diseñador Se debe observar lo siguiente:
(por ejemplo , el Paso 4 puede preceder al Paso 3; si dos enteros son iguales en el Paso 3, se
puede seleccionar cualquiera) . Sin embargo . otros pasos de ninguna forma pueden ser cam - (a) El número actual de pasos depende de Ja minuciosidad (grado de detalle) de la
biados sin alterar la integridad del algoritmo (por ejemplo , el Paso 4 tiene que preceder al Pa-
presentación de un algoritmo.
so 5).

EJEMPLO 1-2 En el Ej. l-2 , el Paso 5 se puede dividir en varios pasos; los Pasos l y 2 se pueden combi-
nar.

Aquí se presenta un problema algo más complejo que el del ejemplo anterior. Al final , el número de pasos es el número de instrucciones de máquinas realiza-
Problema das . Esto, de cualquier forma, depende también del modelo de la computadora
Determine el mayor de N enteros , cuando N >j 2. usada.
Análisis
Dado que el algoritmo se tiene que aplicar para .cualquier N > 2, N debe ser un parámetro . (b) El número de operaciones realizadas raramente es igual al número de pasos en
Por tanto, será una de las entradas al programa , junto con los propios enteros.
la descripción del algoritmo (o al número de instrucciones en el programa) . El
Algoritmo
número de pasos rea'.lizados en la actualidad durante la ejecución de un
l. Entrada N .
2. Entra el primer entero; llámelo NUMl . programa depende de Ja entrada de datos y no siempre puede ser determinado
3. Entra,,¡ segundo entero; llámelo MAYOR .(LARGE). de antemano.
4. Ajuste un contador de enteros~ que tenga que leer el interior; llámele CONTADOR (c) Un algoritmo dirigido a terminar un programa en 100 años es difícilmente útil.
(COUNT) ; conjunte el CONTADOR igual a 2.
5. Compare el NUMJ con el MAYOR; si el NUMl es más grande que el MAYOR, enton· La esencia del método del algoritmo consiste en Ja repetición del mismo paso o
ces el MAYOR es igual al NUMI. Si el CONTADOR es igual a N , aaque al MAYOR y pasos, probablemente con algunas modificaciones, muchas veces durante la realiza·
34 Fundamentos de programación Algoritmos y su expresión 35

ción de un programa basado en un algoritmo dado. La longitud del programa es, 5. EFECTIVIDAD
por tanto , un indicador pobre del tiempo de ejecución. --
Las instrucciones de un algoritmo pueden ordenar a la computadora que sólo lleve
En el Ej . 1-2 un paso simple , el Paso 5 , se realiza N·l veces. a cabo tareas que sea capaz de hacer. Una computadora no puede llevar a cabo una
instrucción si tiene información insuficiente o si el resultado de Ja ejecución de Ja
orden no está definido.
2. AUSENCIA DE AMBIGUEDAD
Si el paso 1 del Ej . 1·2 fuera oinitido, el algoritmo podrí a no ser efect ivo po r falta d e in -
1 La representación de cada paso de un algoritmo debe tener una representación úni- formación suficiente , ya que en el Paso 5 el CONTADOR (COUNT) no podría ser compara-
do a N .
ca aunque una representación para una computadora puede diferir para la de un
Si cualesquiera de las instrucciones de un algoritmo ordenara la división de un entero por
humano. Es conveniente para los humanos tratar con algoritmos presentados en
cero , el resultado podría ser indefinido .

{ una notación con detalles separados (por ejemplo , un seudocódigo o una carta de
flujo) mientras que la computadora necesita que el algoritmo sea codificado en un
programa.
i

6.
~~ ...

.-: ;;
! ·¡.

DEFINICION DEL ALCANCE

.~
Esta condición significa que cada vez que se presente para su ejecución un algo- t):f: ;~ ..- '

fitrno con los mismos datos de entrada, se obtendrán los·mismos resultados. Un algoritmo se aplica a un problema o clase de. problemas específicos; el rango de
Ja5 entradas se tiene que definir previamente; el rango determina la generalidad del
algoritmo.
3. DEFINICION DE LA SECUENCIA :!

El alcance del algoritmo en el ,Ej . 1-2, es más grande que el del algoritm o del Ej . 1-1 ya
( Se debe especificar sin lugar a dudas Ja secuencia en Ja que se deben llevar a cabo que. el posterior es el caso especial . con N = 3, del formador.

l los pasos del algoritmo. Un algoritmo debe tener una instrucción inicial única y ca-
da instrucción debe tener un sucesor único para un dato de entrada dado .
En las .especificaciones del algoritmo, incluyendo los programas, las instruc- C. DIAGRAMAS DE FABRICACION

~
ciones son llevadas a cabo de arriba hacia abajo (Ja sucesora implícita de una ins-
trucción es una consecutiva físicamente), a menos que las instrucciones por sí mis- Debido a los Cletalles requeridos de estos, los lenguajes de programación no son una
mas especifiquen otra cosa. herramienta apropiada para el diseño del algoritmo inicial. El medio de notación
más usado comúnmente para los algoritmos es un diagrama de fabricación .
La ventaja más significativa del diagrama de fabricación es una presentación

\
En el Ej . 1-2, el Paso 5 puede ser realizado más de una vez , dependiendo de N.
clara del.flujo de control en el algoritmo , es decir , la secuencia en la que se var. a
llevar a cabo las operaciones .
4. DEFINICIONES DE ENTRADA Y SALIDA Un diagrama de fabricación es una representación en dos dimensiones de un al-
goritmo ; Jos símbolos de un diagrama áe fabricación definidos previamente se usan
Las entradas son las partidas de datos presentadas al algoritmo. Un algoritmo tiene para indicar las diversas operaciones y el flujo del control.
o no entradas o un número predeterminado de ellas. Las entradas deben ser del ti - En la Fig. 1-1 se presenta un conjunto básico de símbolos de diagrama de fabri-
po para el cual se ha diseñado el algoritmo. cación establecidos. Seis de estos símbolos son contornos (también llamados cajas)
de varias formas. Cuando se usan en un diagrama de fabricación , contienen las pa-
En el Ej . 1-1, el algoritmo tiene tres entradas . En el Ej. 1-2 , el algoritmo se diseñó para
labras apropiadas, las que las hacen más precisas ya que el diagrama de fabricación
N + 1 entradas . se desarrolla para resolver un problema dado . El símbolo restante, la línea de flujo ,
En ambos casos las entradas deben ser enteros. determina la secuencia entre las tareas representadas por los contornos.
"
Í Las salidas son partidas de datos presentadas al mundo exterior corno el resulta - Los simbolos tienen Jos significados siguientes:

~
L,
do de Ja ejecución de un programa basado en el algoritmo . Un algoritmo debe pro·
proceso: una o más tareas de cómputo que se van a realizar de manera secuencial.
ducir al menos una salida (de otra manera, ¿qué uso tiene?)
entrada / salida : datos que se van a leer en Ja memoria de la computadora desde un dispositivo
de entrada o datos que se van a pasar de Ja memoria a un dispositivo de salida .
Los algoritmos de los Ejs. 1-1 y 1-2 tienen una salida cada uno.
36 Fundamentos de programación Algoritmos y su expresión 37

1
proceso
1 / /
entrada/ salida <> decisión
(
terminal
)
AjusteCONTADOR =
Verdadero ·
?~ Falso

=1- -c
NUMI >MAYOR

nota
o
conector
u~
llnea.s de flujo
A
J
.

Fig. 1-3.
Fig. 1-I. Contornos del diagrama de fabricación.

i Los diagramas de fabricación permiten al lector seguir la lógica del algoritmo

~\
decisión: son posibles dos trayectorias de ejecución alternas. Durante la ejecución se escoge la con mayor facilidad que la que tendña una descripción lineal en inglés. Dado que
ruta a seguir, probando si se satisface o no la condición especificada dentro del simbolo. la selección del nivel de detalle está a discreción del diseñador del algoritmo, los
terminal: aparece o bien al inicio de una cana de flujo (y contiene la palabra "Comienzo" diagramas de fabricación son apropiados para el método de diseño de arriba hacia
-Start-}, o bien en su conclusión (y contiene la palabra "Deténgase" ·Stop-). abajo (descrito en el Cap. 3), en el que se establece inicialmente la estrategia gene-
nota: contiene observaciones que simplifican la comprensión del algoritmo o la descripción
ral del algoritmo y los refinamientos se introducen después. Un método alterno de
del dato.
la presentación del algoritmo, el seudocódigo, se estudia también en el Cap. 3.
conector: hace posible la separación en panes del diagrama de fabricación. Se colocan sim·
bolos de referencia cruzada idénticos en este contorno en donde la linea de flujo se in·
terrumpe y en donde continúa . SUGERENCIAS PARA LECTURAS MAS PROFUNDAS
líneas de flujo: indican al siguiente contorno. PARA LOS CAPS. 1-4
En la Fig. 1 ·2 se presenta una carta de flujo para el algoritmo del Ej. 1-2 .
Si se separa el diagrama de fabricación en dos partes en el punto marcado con X, se Wirth, N.: Systematic Programming: An Introduction, Prentice-Hall, Englewood
podrían usar las conexiones como se indica en la Fig. 1·3 . Cliffs, N.J., 1973.
Una clara introducción sobre el diseño de algoritmos simples y la estructura de
Comienzo programas esenciales. Siguiendo sus páginas también aprenderá las bases de la
programación en el lenguaje Pascal.
,....._...___-; -{Entero N, NUMI, MAYOR, CONTADOR
Maly, K., and Hanson, A. R.: Fundamentals of the Computing Sciences, Prentice-
Hall, Englewood Cliffs, N.J.; 1978.
Un análisis extenso sobre el diseño del algoritmo.
Entra NUMI, MAYOR Tremblay, J.-P., and Bunt, R. B.: An lntroduction to Computer Science: Algorithmic
Approach, McGraw-Hill, New York, 1979.
Solución de problemas en una variedad de situaciones.
Ajustl'CONTAí>OR "' 2
Tonge, F. M., and Feldman, J.: Computing: an lntroduction to Procedures and Pro-
cedure-Followers, McGraw-Hill, New York, 1975.
Verdadero Wirth, N.: Algorithms +Data Structures = Programs. Prentice-Hall, Englcwood
Cliffs, N.J., 1976.
Ajuste MAYOR= NUM! Un libro más avanzado, puede ser leido como una secuencia de "Systematic

¿Terminó? r- Programming" del mismo autor.


Dahl, 0.-J., Dijkstra, E. W., and Hoare, C. A. R.: Structured Programming, Aca-
dcmic, New York, 1972.
Un análisis sofisticado, pero claramente presentado, sobre la estructura de progra·
Saque el MAYOR Jncreml"nt(' "'CONTADOR en l
mas y datos.
Los números se leen
Det~nga~
de manera secuencial desde
el dispositivo de entrada

Entra NUM!
Fig. 1-2.
·2
Manejo... d·~ :~Sat:~s
en Programación

En éste y en los siguientes capítulos se presentan los conceptos generales de los algo-
ritmos en lenguajes de alto niveL Estos conceptos subrayan todos los lenguajes de
programación de uso general y forman la base para aprender cualesquiera de ellos.
Al mismo tiempo, las formas de expresión basadas en esos conceptos se usan para el
diseño de algoritmos, antes que la codificación reaL En este capitulo se estudian
también los componentes del programa usados para la manipulación de datos.
Las panidas de datos proporcionan información sobre los objetivos para los
cuales el algoritmo (o programa) se refiere en términos generales. Por ejemplo, un
programa que calcula los impuestos de los ingresos personales, necesita entre ofros
datos, el monto de los ingresos de la persona y las tasas de los grupos de impuestos.
Las dependencias naturales entre las panidas de datos , si se usan para estructu-
rar los datos, dan por resultado algoritmos más simples. Por ejemplo, si los grupos
de impuestos se acomodaran en una tabla ordenada manipulada por el programa
de cálculo de impuestos, los impuestos se podrian calcular muy fácilmente, con los
grupos listos para modificarlos si fuera necesario.
. Se usan entonces varios tipos de datos y estructuras para representar los objetos
del mundo real y las dependencias entre ellos. Se introducen en este capitulo tipos
\ de panidas de datos simples. Los arreglos, una estructura esencial de datos, se estu·
dian también. Se continúa el estudio de las estructuras de datos en el Cap . 5 .
..... ~' ·.·
... .,
....
:.·.~~-':,.~E:';: ·~ .....
A. INSTRUCCIONES ·

'
40 Fundamentos de programación Manejo de datos en programaczon 'iJ

das por los traductores del software (generalmente) en una o más instrucciones de Lógicos (o Booleanos): un tipo de datos con sólo dos valores: Cierto y Falso
l lenguaje de máquina. (representados como 1 y O). Básicamente los datos de este tipo se usan para
·--~....., ñó' ...eei'ü~ilm·,-~-r. a.·.~~~~f.es~kº~~..~~ j representar las condiciones que refuerzan las decisiones para el flujo de
.· ~- _ · "·_aooq, · ~~filí~ control, aunque se pueden utilizar para representar cualquier objetivo con
_ -~-----~ . ·a~ """'~ i>~ 1m~~ ~: Estas instrucciones son de carácter
descriptivo. Por lo general, sirven para localizar el espacio de la memoria para los
/
'\
valores binarios.
Carácter: un carácter alfabético o dígito numérico (llamados conjuntamente ca-
datos utilizados por el programa. racteres alfanumén'cos) o un símbolo especial (tal como $. !, etc.) . Por lo ge-
Otra distinción entre las instrucciones de los lenguajes de programación depen- neral. los caracteres se organizan en secuencias llamadas líneas (véase el Cap .
de de que influyan ' o no el flujo de control dentro de un programa. Las instruc- 5) . La representación de un número como una panida de datos numéricos y
ciones se ejecutan en forma secuencial , en el orden en que hayan sido presentadas a como una línea, ¡difierenl Este tipo de datos aumenta la potencia de la com-
la computadora, a menos que sea una transferencia de control. Algunas instruc- putadora desde el cálculo hasta el procesamiento simbólico general : la mani-
ciones ejecutables transfieren el control a otra instrucción que le sigue de inme- pulación de cualquier texto.
diato. Por lo general , la decisión de transferencia se basa en la satisfacción de ciena
condición. Las instrucciones ejecutables y las no ejecutables que no transfieren el Los lenguajes de propósito más general de la actualidad proporcionan esos
control ni influyen en la secuencia de ejecución, en su lugar realizan tareas de ma- cuatro tipos de datos. La disponibilidad de varios tipos de datos hace más fácil el di-
nipulación de datos. seño de los programas en un lenguaje dado. Cienos lenguajes permiten al progra-
Las instrucciones de manipulación de datos se analizan en este capitulo; las ins- mador definir sus propios tipos de datos en respaldo de la aplicación panicular.
trucciones de transferencia de control en el siguiente. En .resumen , el tipo de dato indicador (Pointer) está disponible en algunos len -
guajes de programación de alto nivel. El indicador identifica la orientación de las
otras panidas de datos. Los indicadores se usan para crear estructuras de datos
B. TIPOS DE DATOS SIMPLES (véase el Cap . 5) .
La implantación de varios tipos de datos con el uso de las palabras de la memo-
Los algoritmos y los programas que surgen de ellos, operan sobre los datos. La acción de ria se estudia en el Cap. 5.
una instrucción ejecutable se refleja como un cambio de valor de una panida de da-
tos. Los datos de entrada son transformados por el programa, después de las etapas
intermedias, en datos de salida. En el proceso de solución de problemas, el diseño C. CONSTANTES, VARIABLES Y ARREGLOS
de la estructura de datos es tan imponante como el diseño del algoritmo y del
programa que sobre éste se basa. El valor de una panida de datos simple en un algoritmo dado puede permanecer
Sólo se consideran aquí los datos simples (sin estructura). Los datos estructura- I\ constante o puede variar. Por tanto , estas panidas son subdivididas en constantes y
dos se estudian en el Cap . 5, son conjuntos de panidas de datos simples con rela- variables. La clase de datos estructurados utilizada la mayoña de las veces es un
ciones definidas entre ellos. Los arreglos, de datos estructurados con interrelaciones arreglo.
definidas implícitamente, se presentan en este capitulo .
Las panidas de datos , asi como las instrucciones de programa , están representa-
das en la memoria de la computadora por uno o más bits (generalmente) . 1. CONSTANTES Y VARIABLES
._,~~~"'."'.'.,,...,.. .~-,,.-:~--.-~.-.·
. ·
..
_OS-ell'llllll te ~ta' .
J
. • ~~5~ 1
~~' ;;~~~-~ "" C# *'qf~- ..~ Las operaciones que se pueden aplicar a una
panida de datos dependen en su tipo. Los lenguajes de programación de alto nivel
L
por lo general proporcionan instrucciones de declaración {declaraciones) que el
·' programador u5a" para espeéificar· el tipo de panidas de datos en -~'.pi:ograma~·).
Los siguientes son los tipos de datos simples y los valores que ~ií~d.'e'ri"toma?: _,- ~-:I/:C.
~ 4.,~~ ~ • ·- .r,:, ,• :-=-•• ~'._'~.... , ........ -••.:t'f!"~'--"r,.,.,, '~"'!'l".;~~
:i;wlcii>~...scr. de,v,arios,tl}>9S>'-por.,lo.,.que. podem<is#ric;¡;_~ii,
Entero: un n6.mero indicad~: sin- p~rtÚ~lidion'aria;~¿; \';f;.,:: \.:i~''
Real: un número indicado con un entero y una parte fraccionaria .
.- ...
( EJEMPLO 2-1
'O ~~b
~ .... -·~--·· ~ ~..,. ...... _~
·~<f~.....,,.

: Ambos tipos de datos, el entero y el real, representan datos numéricos. Los.tipos


· de ..datos 'i'idm~ric~ adicion'al~s están d.ispocible5 ·en a1g;in0s' len~aje;· de ·progra- Se usarA el siguiente ejemplo sencillo para mostrar varios conceptos de principio a fin de este
mación (por ejemplo, la doble precisión y los datos complejÓs en el FORTRAN). capitulo .
¡---

42 Fundamentos de programación
Manejo de datos en programación 43

Problema l• / ubicación d
Sume dos enteros y presente el resultado .
Algoritmo COrNT-15555¿ .,....,,..._
15555
En la Fig. 2-1 se muestra un diagrama de fabricación inicial.

nomb~
1 10 =+ valor de la variable
CONTADOR (COUNT)
~
~
Inicio de la variable

(a) (b)
Entran 2 enteros

Fig. 2-2.
Sume 2 enteros
La posición con la orientación 15555 contiene el valor de la variable llamada CONTA -
DOR (COUNT) . Este valor en el momento es 10 . Continuando la ejecución de una instruc ·

~
ción que agrega 1 al CONTADOR (COUNT) , sólo cambiarán los contenidos de la posición ,
como se muestra en la Fig. 2-2(b).

Se puede dar un valor a una variable en dos formas esenciales. Se puede leer des-

Fig. 2-1.

En este ejemplo, el número de enteros !'S una


mos.
const ~ nte (2); los enteros son variables a sí mis-
\
\ 2.
de un dispositivo de entrada o asignarlo durante Ja ejecución del programa . La cla-
se de valor que puede adquirir una variable depende de su tipo .

ARREGLOS

La referencia a un valor variable se puede hacer solamente por medio de la posi· ,·~~~~~;;r:~~~~-
~;í;es~~éc;ri_1\t;.'iiio_ q_
ci.~e_p~"i__rr
n_1'ig_J~a;}a~ íia't- ~·-~-..·
'i;J¿f'iñ15-:rió"'.ti~
--~~ r~ .;1 _--..
~~~~-. J!~~
-
ción (o posiciones) en Ja memoria en la que se ha almacena~o ese valor. El valor de l~V!lffieOte por ün: "il~~º~~&AlJt..'r ·
la variable es el contenido actualizado de esta posición as! llamada. Las partidas de datos individuales, los elementos de arreglo, son ordenados por
La habilidad para usar variables diferencia a las computadoras de las calcula- sus suscritos (índices); por esta razón en ocasiones se les llama variables suscn·tas. La
doras rudimentarias. Su empleo hace posible el posponer los valores actuales pre· cantidad de suscritos de un arreglo determina su tamaño . Un elemento de un
sentándolos hasta el punto apropiado durante la ejecución del programa. arreglo está indicado por el nombre del arreglo seguido por sus suscritos, que apare·
El espacio de la memoria se asigna generalmente a las variables como resultado cen en el paréntesis.
_de una instrucción que Jo confirme. De modo que , para hacer referencia a una va - Muy frecuentemente, se emplean los arreglos con una o dos dimensiones . Un
riable, se debe utilizar la orientación dt- su ubicación . Cuando se usa un lenguaje arreglo de una dimensión corresponde a un vector; un arreglo bidimensional a una
de alto nivel , el programador no tiene que estar relacionado con la orientación nu- matriz.
mérica actual. Las posiciones son orientadas simbólicamente. La onºentación sim· Cada elemento de un arreglo de un tipo dado tiene dos características; su posición
bólir:a significa que el programa se refiere a las posiciones por el nombre de la va· dentro del arreglo según Jo determinan sus suscritos y su valor.
riable que contienen.
;· .. l:.os 11:º111:brefd,~ .las: ~rf!':~!~s son ,asi~~d~,s por e!,p~9,gra~ado; ~o~f~nne .a_J~s EJEMPL02-3
_co.nveríciones de uri lenguaje de programación· dado . Consideremos que i¡ori uná·sé, Tenemos un arreglo de enteros unidimensionales SCORF..S . SCORF..S es por tanto , el nombre
/ cuenci¡¡. continua dé inás de seis letras mayúsculas y dígitos, comenzarido '.c:Or; iiira
w-·. del arreglo ; para hacer referencia al /-ésimo elemento de éste podemos usar un índice : SCO -
y
letra. Los traductÓr~s de Jeng{iaje ofros 'sistemas de software ~ciaÜ los~ñ.~ri}b?es RES(I) . . , ,:'e< •
de las variables usadas en el programa con la ori~nta~ión d_e la memorja nur:ii.é.Üca_. Este -arreglo. que consta de cineo elementos 17. -3 , 2. 4. -5. se muestra ei{f;, :Fig. 2-.!i~ ~e
.-· . . .. .. . _. .· :e ~
supone aqul que el suscrito del primer elemento es 1 (mayor que O). ··' -· . -- .
. ·~. .-.J.~:, .: . ·. . ..;¿.•• -...... - -;.-;-- ·~ . . ~;"·:;-~:'-:..-:
Se puede ver claramente la analogía entre un arreglo y una tabla.
EJEMPLO 2-2
.EJEMPLO 2-4
Supongamos que una instrucción afirmativa estableció el CONTADOR (COUNT) como una
Para representar las ventas de una compañía que consiste en tres regiones de ventas con
variable entera . Si la ubicación con una orientación 15555 fue asignada a esta variable, tene-
cuatro distritos por región, se puede emplear un arreglo de VENTAS (SALES) bidimen-
mos la situación presentada en la Fig. 2·2(a).
sional.
,,.....

44 Fundamentos de programación Manejo de datos en programación 45

1
• En el caso de un dato simple, una declaración tiene la siguiente forma general:
17 1
Lista de variables del tipo de datos.
-3 /
[ Por lo que en el Ej. 2-1 ambas variables de entrada así como su suma son enteros, pudién·
SCORES
doseles llamar:
4 .. Entero (integer) NUMl , NUM2 , SUM
-5
Por tanto, se les puede hacer referencia por estos nombres.

Fig. 2-S. En Jos lenguajes de programación con posición de memoria estáti"ca, como el
1'.0RTRAN o el COBOL, el espacio de Ja memoria es asignado a los datos por
En la Fig. 2-4 se muestra una representación gráfica del arreglo. El primer suscrito del el traductor del software. En los lenguajes con posición de memoria automática, co-
arreglo corresponde al número del renglón (que identifica la región), el segundo suscrito al mo el ALGOL o PL/ I, se puede asignar Ja memoria al dato o despreciarlo cuando
número de la columna (que identifica al distrito). no se necesite durante la ejecución del programa.
Si el archivo se asigna durante Ja traducción, es decir, antes de Ja ejecución del
programa, se debe asignar el espació requerido por los arreglos en sus declara-
VENTAS
4 ciones.
Por tanto, para declarar un arreglo sin las iiiilitaciones impuestas por la posición
de Ja memoria estática, basta establecer su tipo y dimensiones , por ejemplo, com o
lo siguiente:
.) <

173.25 3 Entero ( lnteger) VENTAS (Sales} (l:M, I:N)

VENTAS (S,2) donde M y N son variables enteras, o si está implícito que los suscritos comiencen con 1,
Entero (Integer) Ventas (Sales) (M,N)
Fig. 2-4.
En un lenguaje con posición de memoria estática , el rango de los suscritos se tiene que
declarar en términos constantes, por ejemplo , como VENTAS (Sales) ( 1:3 , 1 :5) o VENTAS
{Sales) (3, 5).
Es evidente que los suscritos debieran ser exclusivamente valores enteros, dado
En Ja descripción de un algoritmo (mejor que en un programa) , no es general-
que indican las posiciones de los elementos del arreglo.
mente necesario delimitar al suscrito en términos constantes.
En muchos lenguajes de programación de computadoras, los arreglos deben ser
declarados con el uso de una instrucción no ejecutable.

E. ENTRADA Y SALIDA
D. DECLARACIONES
,efn·

).
/ Las operaciones de entrada o salida que transfieren un valor sencillo opera-
L_,
l dones elementales en lenguajes de programación de nivel superior. Los det alles son
realizados por el software de los sistemas. ·-

~--Usando esta información, los traductores y otros sistemas· del software están ca-
\ En la entrada, el valor se presenta a Ja computadora por medio del dispositivo de
] ~ entrada (por ejemplo, en una tarjeta perforada o a través del teclado de una termi-
pacitados para localizar el espacio en Ja memoria para Jos datos, asociar Ja orienta- i nal); la salida, la presenta la computadora mediante el dispositivo de salida (por
/ ción de las posiciones reservadas para las variables (o arreglos) con sus nombres, y ( ejemplo, una impresora o una pantalla).
seleccionar las operaciones aplicables a Jos datos.
j Una vez que se ha declarado una variable en una instrucción, se le puede hacer ( El tipo de datos presentado generalmente se describe por una instrucción de
f· referencia subsecuentemente en el programa por su nombre. ¡declaración.
1
1
,.

"; "l.
r
Manejo de datos en programación 47
46 Fundamentos de programación

La forma general de la instrucción es ;1 L, El tipo de la expresión en el lado derecho corresponde al tipo de la variable en el
lado izquierdo. El tipo de variables que aparecen en la expresión deben coincidir
con el tipo de la expresión. Si las variables aparecen en el lado derecho de una asig·
A nación, deben tener valores asignados a ellas de antemano.
Entrada (dispositivo) lista de variables
Salida (dispmitivo) lista de variables 'f
En lugar de Entrada, algunos lenguajes usan Leer (Read) u Obtener (Get); en
lugar de Salida, Escribir (Write) o Colocar (Put) .
Si el dispositivo usado como la fuente o linea de datos se conoce implícitamente,
... ii
2. EXPRESIONES

Una expresión es una fórmula para obtener un valor. Las expresiones consisten de
no es necesario mencionarlo en estas instrucciones. En este caso podemos recordar operandos (constantes o variables) y operadores (símbolos que reflejan las reglas pa·
que los datos de entrada vienen del archivo de entrada general , mientras que la sali· 11 rala t ransformación de los valores del operando). Las reglas de prioridad controlan
da sucede en el archivo de salida general. la aplicación de los operadores a los operandos para un tipo dado de expresión. Una
Del dispositivo de entrada los datos son canalizados a las posiciones de la memo· expresión se evalúa de izquierda a derecha a menos que las reglas de prioridad or·
ria de la computadora .. Estas posiciones han sido asociadas con los nombres ~e las ºl denen lo contrario.
variables como un resultado de las declaraciones. En consecuencia, se pueden refe·
rir estos datos simbólicamente por sus no~bres. Por supuesto, las constantes son de· Se pueden distinguir los siguientes tipos de expresiones:
finidas en el propio programa y no se necesita la entrada.
.Cuando se ejecuta una instrucción de salida, se canaliza al dispositivo de salida (a) Expresiones aritméticas que contienen sólo variables reales y enteras y
una copia de los contenidos de Ja posición mencionada en la lista de variables. constantes (en expresiones de modo-mixto). Si la implantación de un len-
guaje dado prolúbe las expresiones de modo-mixt~ , cada expresión debe
consistir exclusivamente de enteros o variables reales y constantes.
En el Ej . 2-1 necesitamos las instrucciones siguientes:
Estas expresiones se realizan de acuerdo con las reglas comunes de la
Entrada NUMI, NUM2 aritmética. El operador aritmético Unario para los valores negativos ( - ) y
Salida SUM los operadores aritméticos binarios para la rnma ( + ), la resta ( - ), la
multiplicación ( •) , la división ( / ) y la exponenciación (to n ), así como los
Para llevar a cabo la entrada o salida, deseamos frecuentemente especificar la paréntesis son permitidos generalmente. Por lo regular , se aplican las
disposición de los datos. Algunos lenguajes de programación incluyen instrucciones reglas ordinarias de prioridad.
de formato que sirven p;;.ra este propósito. En el caso de expresiones enteras, una operación de división de enteros
se define ( + ). Esta operación da por resuitado que la parte fraccionaria
del cociente sea descartada.
F. ASIGNACION (b) Las expresiones lógicas tienen uno de los dos valores Cierto y Falso. Entre
otros, los operadores lógicos aplican; lo esencial de éstos son ei no, y, o ,
El valor de una variable se puede establecer leyéndolo de un dispositivo de entrada definidos por la tabla de la verdad en el Cap. 3-A-3 .
' e usando una instrucción de asignación, lo que significa que se lleva a cabo una ma- La aplicación usuai de las expresiones lógicas, la cual se analiza más
/ nipulación de datos . profundamente en el Cap. 3-A, es para expresar una condición en la que
el flujo de control en un programa va a ser predecido.
(c) La línea de manejo de las expresiones actúa en caracteres valuados en
1. FORMA GENERAL DE LAS INSTRUCCIONES DE ASIGNACION constantes y variables.
Asignación es la operación de dar un valor a una variable como resultado de una Los operadores para las líneas de manejo incluyen el enlace de dos
instrucción de asignación. En otras palabras, cuando se lleva a cabo la asignación , lineas Uuntándolas) o la selección y posible reemplazo de una sublínea.
se coloca al valor en la posición de la memoria correspondiente a un nombre de va· Estas operaciones se analizan con más detalle en el Cap. 5-J.

l.~
riable dado.
La forma general de una instrucción de asignación es
nombre de Ja variable - expresión 3. EJECUCION DE UNA INSTRUCCION DE ASIGNACION
La flecha es el operador de asignación (algunos lenguajes usan = o en lugar
de-). Por ejemplo, · Una instrucción de asignación produce la siguiente secuencia de eventos:
X-Y+2
r .

[t
.. '·::
48 Fundamentos de programación
Mane1"o de datos en programación 49
(a) La expresión se evalúa conforme a las reglas apropiadas de prioridad y un car un comentario en _una línea que contenga una instrucción; el comentario ,
valor simple se obtiene, de un tipo correspondiente al tipo de la expresión. rodeado por asteriscos, seguirá a la instrucción. Es imperativo el uso responsable de
(b) El valor se coloca en la posición correspondiente al nombre de la variable los comentarios en cada programa.
en el lado izquierdo de la instrucción de asignación.

La asignación, en el Ej. 2· l \{ H. REPASO :· :.


SUM -- NUMI + NUM2 Se han definido los siguientes tipos de instrucciones para los lenguajes de alto nivel :
completa la suma.
(1) e~trad~~ salida }
Las constantes proporcionan un caso especial de expresiones. Para ajustar el va· (2) instrucciones ejecutables
as1gnac1on
lor de una variable V AR a O podemos realizar (3) declaración instrucción no ejecutable
VAR--0
Cuando se hace referencia a una posición (por ejemplo, cuando se leen sus con· Estas instrucciones no afectan el flujo de control dentro del programa, es decir ,
tenidos), el valor contenido en ella no cambia. La operación de lectura es no la secuencia en que son ejecutadas las instrucciones del programa. Las instrucciones
destructiva. de declaración describen las panidas de datos mientras que las instrucciones de
Cuando se asigna un valor nuevo a una posición (por ejemplo, cuando se escribe entrada y asignación les asignan valores a ellas; las instrucciones de salida hacen
dentro) , sus contenidos anteriores son borrados automáticamente. La operación de que se conozcan esos valores en el mundo exterior.
escnºtura es destructiva. Los comentarios se pueden insertar en cualquier parte del programa sin afectar
Con respecto a la instrucción de asignación, ésta significa que el valor original de su ejecución.
la variable cuyo nombre aparece del lado izquierdo se reemplaza, mientras que los Si estas instrucciones fueran los únicos componentes de los lenguajes de progra·
valores de las variables referidas en el lado derecho permanecen sin cambio. mación, cada instrucción en un programa sólo podría ser ejecutada una vez. Dado
Observe cuidadosamente lo siguiente: · que el método algorítmico está construido alrededor de la ejecución repetitiva de
instrucciones, se necesitan instrucciones adicionales para permitir la repetición se·
(a) Cuando una instrucción de la forma lectiva y la ejecución alterna . Las instrucciones que afectan el flujo de control se
VAR1--VAR2 presentan en el siguiente capítulo.
es ejecutada , el valor de VAR2 se copia en la posición correspondiente a Cada lenguaje de programación contiene también a los delimitadores del
VARl. ¡El valor de VAR2 no cambia! Se descarta el valor anterior de programa que indican el final , y, en ocasiones, las instrucciones iniciales .
VARl .
(b) Si los valores de las dos variables, VARl y VAR2, tienen que intercam · Como un resultado del estudio anterior, llegamos al final del diagrama de fabricación del
Ej. 2 · l , lo que se presenta en la Fig. 2-5.
biarse, se necesita el uso de una posición intermedia .
INTERM--VARI
VARI --VAR2
VAR2 -TNTERM Inicio

Entrada NUMI , NUM2


G. COMENTARIOS
SUM-NUMI + NUM2
Todos los lenguajes de programación de computadoras ofrecen la posibilidad de
introducir comentan'os que expliquen los datos y la lógica de los programas junto
con las instrucciones.
Aunque los comentarios se enlistanjunto con las instrucciones del programa, no
Alto
influyen la ejecución de los programas. !
Los comentarios generalmente se identifican por el primer carácter en la línea . 1 >,
Supondremos que cualquier línea que comienza con un asterisco(•) es un comenta· '
rio. En nuestra descripción de algoritmos, estaremos también preparados para colo·
~,,. •. Fig. 2-5 .


3
Estructuras de Control
en el Diseño de Programas

En este capítulo se presentan la~ estructúras _básic~ ne2esarias para organizar el flu-
jo de control en un algoritmo o en ~n pro&rama'. Tres 'de éstas son: la secuencia
u
,r (inicio-fin), la decisión (si-entonces-otro) y la trayectoria .(mientras-hace) consti-
tuyen lo fundamental de la organizació~ necesaria para respalda; 'im 'procesó .siste-
-. ,
-~
mático de programación, a menudo llamado programadón- estructurada. Las
estructuras de control adicional tales como la trayectoria de repita-hasta, la trayec-
toria clasificada y la de elección múltiple (case) se pueden emplear para simplificar
este proceso. Una trayectoria se puede abandonar prematuramente éon la ejecu-
" ción de una instrucción de salida.
Mientras estas estructuras no estén disponibles directamente en los lenguajes de
programación en cada propósito general ; es posible construirlas usando las instruc-
ciones de un lenguaje dado . El programador encontrará que pensando en términos
de estas construcciones producirá programas organizados claramente que son de
manera relativa fáciles de escribir, leer y modificar.
En ciertas situaciones de programación no frecuentes , es conveniente, de cual-
quier forma , emplear una transferencia incondicional de control (goto) .
Se introducen dos herramientas importantes para el diseño de programas. El
seudocódigo, utilizado frecuentemente de preferencia a las cartas de flujo, sirve pa-
ra llevar el algoritmo listo para codificar en un proceso de diseño de programa de
arriba a abajo. llamado refinamiento por etapas. Se emplean las tablas de decisión
para la consideración sistemática de todas las acciones que va a hacer el programa- si
existen ciertas condÍ~iones (o sus combinaciones) .

A. CONDICIONES

Dos de las estructuras de programación básica, la decisión y la trayectoria, forman


el flujo de control en un programa que depende de la existencia de una condición
especificada . Para especificar tales condiciones, se usan las expresiones lógicas. En
los casos más sencillos, éstas son relaciones. -
---

Estructuras de control en el diseño de programas 53


52 Fundamentos de programación
( c) Esta afirmación no se puede especificar con una condición simple; se requiere una
1. ¿QUE ES UNA CONDICION? condición compuesta (véase más adelante) .
Una condición es una afirmación de un valor de una variable o de una dependencia
El valor de la relación es Verdadero si Ja condición expresada por ésta existe, de
entre los valores de dos-o más variables. lo contrario el valor es Falso. Observe que el valor no se asigna a cualquier posición;
Los valores de una condición son probados y pueden ser Cierto y Falso. Por tan ·
tan sólo se prueba. Observe también que este valor es de tipo lógico. ·
to, esto es i¡specificado por una ~xpresión lógica . Para probar en orden Ja veracidad de una relación, se evalúan sus lados derecho
e izquierdo, y se contesta la pregunta : "¿el operador relacional expresa Ja verdad?"
EJEMPLO 3; 1 Si lo hace, la prueba da el valor Verdadero; si no, Falso.
Podemos desear especificar y probar las condiciones concernientes a los valores de las va·

riables; por ejemplo: EJEMPLO 3-3

(a) La variable entera I igual a O.


La variable entera I es menor que el doble del valor de la variable entera K , Si en el tiempo la relación
(b) La variable real X no es menor que la variable real Y , y la variable lógica L tiene el va·
(c) A•B+C:>D-E
lor verdadero .
es evaluada, las variables. suponemos son del tipo entero , tienen Jos valores siguientes:
Las condiciones se usan para proporcionar la posibilidad de trayectorias de eje-
cución alternas en el programa (en una instrucción de decisión) o para asegurar la A = l B = 2 C = 3 D = 10 E = 5,
realización repetida de un grupo de instrucciones en una trayectoria.
entonces cuando se prueba la relación , tenemos
Una condición' simple es una relación; una· condición compuesta es una expre·
sión lógica geneial que puede contener variables y relaciones lógicas, con operandos A • B + C = 5; D· E = 5

lógicos que las conecten. y la relación tiene el valor Verdadero .


Puesto que una condición es expresada por una relación lógica, su valor puede
ser almacenado en una variable lógica como el resultado de una instrucción de asig-
nación de una .forma .
3. CONDICIONES COIMPUESTAS
varia ble lógica - expresión lógica
Una condición compuesta se expresa con el uso de cualquier expresión lógica .
Una expresión lógica puede contener, en el orden de prioridad:
2. RELACIONES
(a) Operadores aritméticos

.
Una relar:ión es una expresión lógica que consiste de dos expresiones aritméticas co·
•• (operador de exponenciación , representado en ocasiones como f )
nectadas por -un operador relacional, por ejemplo , uno de los siguientes /
< ..,;;-* ;;¡., > + -
Estos sólo pueden unir a los operandos numéricos .
La forma general de una relación es por tanto (b) Operadores relacionales
., . . . operador
expres1on antmeuca expresión aritmética <<-'F>>
. relacional
Estos sólo pueden unir datos numéricos.
Las relaciones sirven para expresar las condiciones simples.
(c) Operadores lógicos (Booleanos)
no (not)
EJEMPLO 3-2 y (and)
Las afirmaciones establecidas en el Ej. 3· J se pueden especificar con el uso de las relaciones o (or)
como sigue:
La acción de Jos operadores Booleanos está especificada por su tabla de la
(a) l = o verdad presentada en Ja Tabla 3-L Los cálculos de las variables .lógicas,
¡Observe que no es una asignación! llamados álgebra ~Jeana, se estudian con mayor detalle en el Apéndice C.
(b) I< 2 • K
54 Fundamentos de programación Estructuras de control en el ~iseñ.o de programas 55

TABLA !1-1. Tabla de la verdad para los operadores básicos, en donde P y Qson variables

~L
lógicas (o relaciones) .

VALORES DE LAS VARIABLES RESULTADOS DE LA OPERAClON

p Q P no p yQ PoQ

Fig. ll-2.
Falso Falso Verdadero Falso Falso
Falso V~rdadero Verdadero Falso Verdadero
Verdadero Falso Falso Falso Verdadero
Observe que la segunda parte de la afirmación está expresada .
Verdadero Verdadero Falso Verdadero Verdadero
EJEMPLO !1-5

Para expresar la siguiente afirmación:


Los operadores lógicos operan exclusivamente en entidades de valor lógico. Estas
pueden ser relaciones, variables o constantes lógicas (Verdadero y Falso). TOTAL es mayor que la PARTE pero no mayor que la diferencia entre GRANO y la
Los niveles de prioridad de las operaciones usadas en las expresiones lógicas son PARTE (donde los tres son variables reales)
incluidos en la Fig. 3-1.
esta condición se puede usar:

operadores
TOTAL> PARTE y TOTAL~ GRANO - PART E

prioridad
.••
+
/ aritmético :
EJEMPLO 3-6

más alta La Fig. 3-3 ilustra el orden de evaluación de una condición compuesta , donde AZUL y

1 <<=*;;..> relacional ANCHO son variables lógicas y TRAYECTORIA y LONGITUD son variables reales:

no AZUL
y no ANCHO o AZUL y TRAYECTORIA
y lógico
> LONGITUD - 5.3

Fig. 3-1.
o

La prioridad del operador en las expresiones lógicas.


\
Los paréntesis se pueden emplear para cambiar este orden de precedencia. Las
operaciones del mismo orden de prioridad se realizan de izquierda a derecha.

EJEMPLO 3-4
Fig. ll-3.
Para especificar la afirmación del Ej. 3-J(c), podernos usar la siguiente condición compuesta:
Notas
X;;..Y y L l. Dado que una relación evalúa un valor lógico, se puede unir a cualquier otro operando ló-
gico por un operador lógico (como en el paso 5 ).
El orden de la evaluación, de acuerdo con el orden de precedencia del operador y la regla 2. Los y y no adyacentes (as! como o y no) no violan la sintaxis de las expresiones lógicas; los
de izquierda-a-derecha, se muestra en la Fig. 3-2. operadores y y no no pueden estar próximos de manera legítima en una expresión lógica.
56 Fundamentos de programación
; Estructuras de control en el diseñe de programas 57
B. DECISION
Para incrementar la amenidad de estilo del ·programa, es una buena práctica
Cuando el programador desea especificar dos cursos de acción alternos en un algo· sangrar esta instrucción como se muestra:
ritmo (o un programa), la elección comienza suponiendo la existencia de ciertas
condiciones, se usa la condición construida. Para seleccionar en ordeii entre varias si e entonces
alternativas, las decisiones se generan una dentro de otra.
S1
Una herramienta gráfica, llamada una tabla de decisión, es útil en el diseño de
programas cuando se tiene que considerar un conjunto complejo de condiciones y además
acciones.
S2

1. CONSTRUCCION DE UNA DECISION


EJEMPL0.!1-7

La instrucción de decisión (ramificación) es el mecanismo para la especificación de


La solución al problema siguiente se desarrollará gradualmente a lo largo de este capitulo.
dos instrucciones alternas (o grupos de instrucciones). una de las cuales se escogerá Problema .· · " · ·
para la ejecución como resultado de la instrucción de decisión dada. Esto propor· N enteros van a ser leidos. Todos los enteros positivos (incluyendo a los O) y todos los enteros
ciona la posibilidad de expresar lo siguiente: "Si una condición dada existe, se debe negativos se contarán separadamente.
llevar a cabo una acción alterna; de lo contrario se debe realizar la otra U so de la construcción de la decisión
alternativa." Para procesar en orden un entero dado, la siguiente instrucción, expresada inicialmente en
Las condiciones se especifican usando expresiones lógicas. La forma general de inglés, .se incorporará en el algoritmo:
la instrucción de decisión es
si el entero es mayor o igual a O t;ntonces
si C entonces S 1, además S 2 aumente el contador de los enteros positivos en l
además
incremente el contador de los enteros negativos en
donde S 1 y S 2 son instrucciones (o grupos de instrucciones) y Ces una condición.
La instrucción de decisión se ejecuta como sigue: Como analizaremos después en este <;apitulo, expresar un algoritmo inicialmente en esta
forma es un método útil de diseño.
(a) La condición C está probada y se obtiene el valor Verdadero o Falso.
(b) Si el valor es Verdadero, entonces S 1se ejecuta en seguida, además (si el Sucede un caso especial de la instrucción de decisión cuando la alternativa para
valor es Falso) S 2 se ejecuta de inmediato. En consecuencia, la siguiente Ja instrucción por ejecutarse condicionalmente es Ja no acción. Así una instrucción
instrucción S2 se ejecuta. expresa la siguiente idea: "Si Ja condición dada existe, la instrucción S se ejecuta; de
lo contrario se ejecuta la siguiente instrucción S en el programa."
En la Fig. 3-4 se muestra la carta de flujo de la construcción si-entonces- La carta de flujo de una construcción si-entonces se muestra en la Fig. 3-5.
además.

-- - - -
1
1 Verdadero
Verdadero Faho 1
1
rama entonces ~ rama además 1
1

¡
1
1
1 1
,_ - - - - - - - _:-¡ :_ - - - - - - _J ..

Fig. !l-4. Construcción si-entonces-además ...


Fig. lJ-5. Construcción si-entonces
Estructuras de control en el diseño de programas 59
58 Fundamentos de programación

Para evitar ambigüedad,• esta construcción se representa como Es má.s fá.cil comprender el algoritmo (o programa) si no ocurre el sangrado en la
rama además de la construcción. Se pueden expresar las condiciones para comple-
si e entonces tar esto. Si se mantiene tal disciplina, una construcción si-entonces-además tiene la
siguiente forma general:
s
además si C 1 entonces

donde el además es la rama vacía. S1

además
2. DECISIONES SANGRADAS si e! entonces

S2
Para implantar en orden una decisión múltiple (una selección entre varias alterna·
tivas), se usa la estructura sangrada si-entonces-además. Esta se construye colocan· además.
do iterativamentr. otra instrucción de decisión como 5 1 o S 2 •
Para el sangrado de dos niveles en ~bas ramas obtenemos.

si C 1 entonces si c. entonces
si C2 enton~ s.
S1
además además
• S2 Sn +I
además
si C 3 entonces
S3 El diagrama de fabricación de esta constrncción se presenta en la Fig. 3-7.
además
s.
El diagrama de fabricación de esta estructura particular se muestra en la Fig. 3·6.

Verdadero Fallo

Fig. 11-6.
,r

• La ambigü~ad aurgr cuando R omite un ademáa en una secuencia de dcci1i6n sangrada (v~asc la ~i6n
siguiente). En aJgunog lenguajes de programación la rama ademú es optativa y el además siempre~ aplica
Fig. 11-7. Construcciones sangradas si-entonces-además
a I01 1i mb cc~anOI sin 1u propio ademá.1.
60 Fundamentos de· programación
Estructuras de control en el diseño de programas 61
3. TABLAS DE DECISION* Pago semanal
2 3 4 5

Cuando existe un número de condiciones en varias combinaciones debe influir de ma- l. 40 h trabajadas en los dlas de la semana
F F F T T
nera más profunda al flujo de ejecución del programa, se puede usar una herra- 2. Menos de 40 h trabajadas en los dfas de la semana F T T F F
S. Fines de semana trabajados
mienta gráfica llamada tabla de decisión. Una tabla de decisión especifica en forma T F T F T
tabular las acciones que va a realizar el programa si existe una condición dada o
1. Calcule el pago de la relación estándar
combinación de condiciones. X X X X
2. Calcule el pago de fin de semana
Las tablas de decisión tienen el formato que se muestra en seguida. X X X
S. Imprima el nombre por separado X X

Encabezado
Note que en este caso las dos combinaciones de condiciones (las que involucran las dos pri-
fragmento registro de condición meras condiciones son verdaderas) son imposibles y por tanto; se omiten de la tabla. Tam-
} parte de condici6n
de condición (Verdadero o Falso) bién el caso en el cual el trabajador no trabajó completo ha sido omitido. " ,

fragmento registro de acción


} parte de acción Subsecuentemente, una tabla se puede siiTiplificar introduciendo los llamados
de acción (X, - , o ninguna)
sfmbolos de sin cuidado ( - ), que significan que cierta condición no es_ relevante.
~
d.,cripci6n
Por tanto en nuestro ejemplo , la ta bla simplificada inferior se obtiene combinando las
reglas 2 y 4 :
Por tanto, una tabla consiste d~ c·~atro partes: dos, en la izquierda, listan todas
las condiciones y acciones posibles; y dos, en la derecha, indican qué acciones van a Pago semanal
2 3 4

¡
tener lugar cuando existe una combinación de condiciones dadas (los registros de
1. 40 h trabajadas en los dfas de la semana
estas últimas dos, consideradas verticalmente, son llamadas reglas). F - F T
Una tabla de decisión se diseña como sigue:
2. Menos de 40 h trabajadas en los dfas de la semana
S. Fines de semana trabajados
F
T
- T F
F T T
(a) Liste todas las condiciones posibles en el fragmento de la condición.
l. Calcule el pago a la relación estándar X X X
(b) Liste todas las acciones posibles en el fragmento de acción. 2. Calcule el pago de fin de semana
Proporcione el número de reglas para igualar todas las combinaciones po-
X X X
(c) 3. Imprima el nombre por separado X X
sibles de condiciones (2n paran condiciones) excluyendo las evidentemen-
te imposibles o las innecesarias.
(d) Para cada registro de condición, marque con X el registro de la acción
contra la acción (o acciones) que se va(n) a tomar. Por tanto , si el trabajador no trabaj a durante el fin de semana, se aplica el mismo proce·
Si es posible, combine reglas que difieran solamente en condiciones no re- dimiento sin distinción del número de horas cubiertas por é l o ella durante los d!as de la se-
(e) mana .
levantes.
Una tabla de decisión se puede representar entonces directamente como una
Esto se ilustra por el ejemplo siguiente.
construcción si-entonces-además. Procure llevar a cabo la codificación de manera
agradable.
EJEMPLO 3-8

Una tabla de decisión para el cálculo del pago semanal (mostrada en seguida) expresa la si - Supongamos que las variables lógicas: FORTY, LESS y WKND expresan nuestras tres condi-
guiente lógica: la relación de horario estándar se aplica para 40 o menos horas trabajadas du - ciones. Entonces, la última tabla de d ecisión se puede codificar como sigue:
rante los dlas de la semana ; el trabajo del fin de semana se paga al doble; los nombres de los
trabajadores con menos de 40 h trabajadas durante los d!as de la semana y de los que trabaja· si no WKND entonces
ron en el fin de semana se imprimen por separado. compute el pago en relación estándar
además

---- si FORTY entonces


• Esta ~cción se puede omitir sln una pérdida de continuidad. calcule·el pago en relación estánd ar;
calcule el pago de fin de semana y agregue el total
~

62 Fundamentos de programación
Estructuras de control en el diseño de programas 63
además
calcule el pago de fin de semana; - - - --,
imprima el nombre por separado ; 1
si LESS entonces l.
calcule el pago en relación estánda.r y agréguelo al total
además;

Observe que se pueden hacer varios intentos para llegar a la construcción final y que las
modificaciones que ahorren tiempo se pueden introducir en el programa actual.
t
El uso de las tablas de decisión obliga al programador a considerar sistemática-
mente todas las condiciones y acciones posibles y es de este modo una ayuda en el Fig. 3-8. Bucle mientras que-haga.
diseño del programa junto con las herramientas como el diagrama de fabricación o
el seudocódigo estudiados a continuación .
es buena práctica .
C. BUCLE
En el Ej . 3-7 necesitamos:
El mecanismo del bucle (trayectoria) origina la ejecución repetida de una secuencia
de instrucciones mientras que es verdadera cierta condición. Cuando al retener la mientras que tenemos que leer unos cuantos que N enteros .
haga la lectura en el entero siguiente ;
condición cesa, el control pasa a la instrucción siguiente hasta la última instrucción
incremente el contador apropiado en 1;
del bucle (trayectoria) . Esta ejecución repetida es llamada iteracción.
incremente el conreo de los enteros leídos en 1.
Si un bucle está registrado, la ejecución de la instrucción incluida en él (llamada
el cuerpó del bucle) debe , después de un tiempo limitado, causar la inversión de la Observe que si Ces Falso inmediatamente antes de que se registre la instrucción
condición que causó la entrada. Por el contrario, puede existir un bucle infinito , bucle, S no se ejecutará por completo. Si Ces Verdadera inicialmente y S se ejecu-
que puede representar un error" de programación y requeriña que la ejecución del ta, la ejecución de S podrfa original' que C se volviera Falso después de un número
programa fuera detenida por medios externos. finito de repeticiones.
Cada vez que se ejecuta el cuerpo del bucle, el valor de cuando menos una va-
riable cambia . Por tanto , la ejecución repetida tiene un efecto acumulativo .
La forma general de la instrucción de bucle es
D. INSTRUCCION COMPUESTA
mientras que e haga s
Como se mencionó en las secciones B y C de este capitulo, con frecuencia es necesa-
donde C es una condición y S es una instrucción o un grupo de instrucciones . rio colocar más de una instrucción en las ramas alternas de una instrucción de deci-
La instrucción de bucle se realiza como sigue: sión o dentro de un bucle . Esto hace posible una instrucción compuesta que en-
cierra una cantidad de otras instrucciones dentro de dos delimitadores, el inicio y el
(a) La condición C está probada . fin.
(b) Si el valor de Ces Verdadero, S se ejecuta y el control se regresa entonces La forma general de una instrucción compuesta es
a la instrucción mientras que para que la condición sea probada de
nuevo; por el contrario (si el valor de Ces Falso) , la siguiente instrucción S inicio S 1; S 2 ; • • • ;S" fin
es ejecutada.
La carta de flujo de la construcción mientras que-haga se muestra en la Fig . donde 5 1 es cualquier instrucción.
3-8. Esta instrucción origina la ejecución secuencial de las instrucciones incluidas
El sangrado de la forma
s, .... , s•.
La carta de flujo de esta construcción se muestra en la Fig. 3-9.
mientras que e haga
s Si una instrucción compuesta no se coloca en una linea sencilla, el sangrado su-
gerido es •

-.
Estructuras de control en el diseño de programas 65
64 Fundamentos de programación

¡--é---¡
1
1 s,
1
1
Cualquier programa que conste de más de una instrucción es por sí mismo una
instrucción compuesta.
Cada componente de una instrucción compuesta cuando menos está delimitada
de Ja siguiente por un punto y coma (el último está delimitado por fin). Esto hace
1 1
posible el colocar varias instrucciones en una linea o tener unas l!neas punteadas de
1 1
instrucciones simples.

-~-~
;::> - Las instrucciones que forman una instrucción compuesta ·pueden ser instruc·
~i~nes de decisión o de bucle, así como asignaciones e instrucciones de entrada/ salí·
1 da. Los primeros dos tipos pueden, en su oponunidad, incluir una instrucción com-
~uesta. en sus ramas o como un cuerpo de bucle, respectivamente.
Fig. 3-9. Secuencia (inicio-fin).
La siguiente es una solución al problema colocada en el Ej . 3-7, presentada de dos mane·
ras.
inicio "~ A ."Algoritmo expresado por un diagrama de fabricación (Fig . 3-10).
...... . . ..
:
S¡;
sf1!-.;., Notas .~
-l.-, ,, Mientras que en la Fig. 3-10 los comentarios sirven al propósito de explicar Ja técnica ,
generalmente son orientados a problemas.
2. Una ,posición simple, NUM , se usa para retener la entrada de enteros. Ya que esto es
s. económico en términos de uso de memoria, sólo se tiene disponible U!l entero simple (el
fin más reciente) en la memoria a un tiempo.

X
Entrada N
Entero N. POSCNT, NEGCNT, 1, NUM
POSCNT ·contador de entcroo positivos
NEGCNT-contador de enteros ncgativ~
¡
f'
..
¡. ."' .~
Si nuestro problema necesita almacenar en Ja memoria el arreglo completo. se p uede usar
un arreglo NUM(I) para este propósito .
Observe que en nuestro caso especifico éste se puede acompañar por la sustitución textual
de NUM(I) por NUM , suponiendo que una declaración

Entero NUM(N)

pudiera estar presente en el programa.


Siga la lógica por completo.
_Ela la cjecwción del bucle
'"·'''B. Algoritmo expresado por construcciones de lenguaje de programación básico.
- [ el conteo del bucle se registra
F •PROGRAMA QUE CUENTA LOS ENTEROS POSITIVOS Y NEGATIVOS
inicio
Salida POSCNT, NEGCNT Entero N, POSCNT, NEGCNT, 1, NUM ;
•INICIACJON
Entrada NUM Alto :Entrada N;
POSCNT-0; • CONTEO DE LOS ENTEROS POSITIVOS•
NEGCNT-0: •coNTEO DE LOS ENTEROS NEGATIVOS*
1-0; ·CONTEO DE LAS. LECTURAS ENTERAS EN*
*CONTEO
mientras que 1 < N haga
inicio
1-1 + l ;
-;.: -""'
Entrada NUM ;
' .... si NUM ;;.. O entonces
POSCNT - POSCNT + l
Fig. 3-10.
r
66 Fundamentos de programación
Estruct uras de control en el diseño de programas 67

además Siguiendo la ejecución de la instrucción ve a, el control pasa a la instrucción llamada ESE.


NEGCNT - NEGCNT + 1 Las instrucciones que intervienen no son ejecutadas si está ve a.
fin;
Salida POSCNT; NEGCNT El uso de una instrucción ve a se desea raramente y debe seguir una.considera-
fin ción y rechazo de otras alternativas de expresión lógica del programa. Una alterna-
tiva disciplinada al ve a , llamada instrucción de salida, está disponible en algunos
E. TRANSFERENCIA INCONDICIONAL DE CONTROL. NIVELES lenguajes de programación (véase la Sec. G-3 de este capítulo); en casi todos los ca-
sos, puede servir para reemplazar al ve a .

Las construcciones presentadas; si-entonces-además, mientras que-haga e inicio-


fin; son suficientes para expresar cualquier algoritmo. Si un programa se construye
F. DISEÑO DE ALGORITMOS. SEUDOCODIGO
usando estas construcciones o similares exclusivamente, su organización tiende a ser
clara y bien estructurada. '
Un algoritmo para la solución de un problema surge gradualmente. Por tanto , el
Sin embargo, en ocasiones es dificil aplicar estas construcciones en un algoritmo
proceso de diseño resulta de refinamientos sucesivos del algoritmo de sus originales,
dado. En estos casos se puede emplear la transferencia incondicional de control
generalmente, forma a la punta cuando el algoritmo puede ser codificado en el len-
(instrucciones goto). Esta instrucción ordena la ejecución de una instrucción dada
sin hacer caso de su lugar en la secuencia del programa. El flujo de control entonces guaje de programación escogido. Esta técnica de diseño de algoritmo (o programa)
se conoce como refinamiento por etapas o diseño de arriba hacia abajo . Para los
procede de éste.
programas más largos, este proceso incluye la descomposición modular (véase el
La instrucción de la transferencia incondicional de control tiene la forma ge-
Cap. 4-D).
neral
El número de refinamientos necesarios depende de la complejidad del algorit -
ve a nivel mo. Para presentar los algoritmos se usan frecuentemente dos formas de expresión.
Un nivel es la dirección simbólica de una instrucción del programa. Los niveles La primera , los diagramas de fabricación , han sido introducidos en el Cap . 1. Una
son definidos dentro de un programa escribiéndolos al frente de una instrucción y técnica alterna, el seudocódigo, se presenta aquí. El seudocódigo es una presenta·
delimitándolos con un símbolo especial (por ejemplo, dos puntos). Una instrucción ción textual de un algoritmo, en donde las acciones .a realizar por la máquina son
¡~- --
requiere sólo un nivel si está ésta referida por otra instrucción, como la instrucción especificadas de una manera aproximada a un lenguaje natural, con la estructura
ve a. Los niveles se forman generalmente siguiendo las mismas reglas como en el ca· de control imponiendo la lógica.
so de los nombres de las variables (aunque en algunos ejemplos, tales como el Por tanto , un algoritmo final resulta de un proceso de arriba hacia abajo (de lo
f' general a lo particular) de refinamientos sucesivos del seudocódigo. Ultimamente,
FORTRAN, los niveles son números). Los nombres creados por un programador, .¡1
como los nombres variables y de niveles, son llamados identificadores. el algoritmo se puede expresar por las instrucciones básicas presentadas en éste y en
Dado que un nivel identifica una instrucción, en un programa dos instrucciones los capítulos anteriores, con la omisión de detalles de un lenguaje de programación
particular (como por ejemplo, la segunda presentación de la solución en el Ej . 3-7).
no pueden tener el mismo nivel.
También se hace un uso extenso de los subprogramas, estudiados en el capítulo si-
guiente.
EJEMPLO ll-9
El seudocódigo de un algoritmo se vuelve una parte de la documentación del
Un programa puede incluir las instrucciones siguientes: programa.
El estudio detallado del diseño y presentación de dos algoritmos relativamente
simples se presenta aqu!. (Para el estudio del procesamiento en linea, véase el Cap.
5-J.)
ve a ESE;
EJEMPLO ll-10. Algoritmo de Euclides

Problema
ESE: PRIMERO - O; El máximo común divisor (MCD) de dos enteros positivos va a ser determinado. (El MCD de
dos enteros es el entero mayor que puede dividir a ambos exactamente.)
Solución
La solución inicial, verbal , se presenta de manera subsecuente en forma de un diagrama de
fabricación , asi como en la forma alterna, el seudocódigo.
68 Fundamentos de programarión Estructuras de control en el diseño de programas 69

l. Descripción verbal del algoritmo: El entero mayor se divide entre el menor. Si el residuo
es O, el entero menor es el resultado requerido; de lo contrario se desprecia el entero ma- Entero M , N , TEMP, RESIDUO (RE~)
yor y el menor se trata como el mayor y el residuo como el menor. después de lo cual el
procedimiento se repite desde el principio . ~;
2. Prueba: El algoritmo se comprueba para los enteros 12 y 46.
~- Verdadero

46 : 12 = 3 , !esiduo = 10 - ~ Intercambio M y N
r---~--,
12: 10 = 1, residuo = 2 TEMP-N
10 : 2 = 5, residuo = O N-M
MCD = 2 ~·r~1 M-TEMP
+ significa cociente entero
3. Diagrama de fabricación inicial del algoritmo (Fig. 3-11). (por ejemplo·. si el residuo se deja)
+N

.k
M+-N
Determine el entero mayor N<-RESIDUO
(REM )
Divida el entero mayor
entre el menor

Fig. 3-12.
Verdadero Falso

Salida del entero


menor
Use el entero mayor actual
como el mayor y el residuo
como el entero menor
l
~
~.!,,;;

además;
*CALCULE EL RESIDUO
Alto
RESIDUO-M - N • (M + N);
*CONTINUE DIVIDIENDO E INTERCAM BIANDO HASTA QUE EL RESIDUO
*SEA O
Fig. 3-11.
mientras que RESIDUO # O haga
inicio
4. Diagrama de fabricación refinada (Fig. 3-12);
M-N
5. Algoritmo expresado por las estructuras de programación básicas . N +--RESIDUO
RESIDUO M - N*(M + N)
•ALGORITMO DE EUCLIDES PARA ENCONTRAR EL MCD DE DOS ENTEROS fin;
Salida N
•POSITIVOS M Y N
fin
Inicio
Entero M. N , TEMP, RESIDUO;
Entrada M. N;
Notas
*DETERMINE EL ENTERO MAYOR
l. Observe que para que la instrucción mientras que se ejecute primero, la variable RESI-
si M < N entonces
D UO (REM) debe tener un valor. Por tanto , es necesario repetir la instrucción de cálcu-
inicio
lo dei residuo. • ·
TEMP-N ;
2. Co~vénzase por si mismo que el algoritmo trabaja correctamente sin el intercambio ini-
N-M;
ciaf de valores de las variables si M< N. En este caso, el intercambio sucede como en
M -TEMP
_Ja prjmera repetición del bucle.
fin
70 Fundamentos de programación Estructuras de control en el diseño de programas 71

De cualquier forma , ¿cree usted que el algoritmo es más fácil de entender como está Se puede observar que el último número se movió hacia arriba durante cualquier paso
presentado? ¿Piensa que el algoritmo alarga la ejecución como se presentó? (cuente el hasta llegar a su posición final. Un a ampliación de la clasificación de burbuja es ésta con una
número de pruebas y el de asignaciones que se llevarán a cabo en ambos casos), estipulación para ahorrar tiempo basada en esia observación: no movemos más el n ú mero
que se movió al último en el paso previo; además, si el último número se movió en la segunda
EJEMPLO 3-11. Ampliando la clasificación de burbuja posición desde "el fondo" , se ha terminado la clasificación y no es necesario hacer un pase adi
cional sin ningún intercambio.
Clasificar los datos y desarrollarlos son las aplicaciones más comunes de la computadora. Por I-

'!
tanto , existen numerosos algoritmos para llevar a cabo estas tareas. Aquí está presente una,
un algoritmo de clasificación. Aunque no es muy eficiente, es muy simple y por tanto, se
emplea con frecuencia cuando se van a clasificar pocas partidas. {En el Ej . 3-17 se estudia un
algoritmo de investigación. )
r Seudocódigo: Descripción Inicial
*CLASIFICACION DE BURBUJA
inicio
Entrada del arreglo ;
Se va a clasificar un conjunto de números enteros. Se desea un orden ascendente: el núme· mientras que se esperan los intercambios haga
ro mayor, el más alto debe estar al final de la lista. . el paso siguiente en el arreglo ;
,,r'
1,. Salida (clasificada) del arreglo
Descripción verbal del algoritmo
La clasificación de burbuja consiste en la comparación de parejas de números adyacentes co· ,, fin
Seudocódigo: Primer Refinamiento
menzando en un extremo del arreglo de números. La pareja se intercambia si los números es· ri •AMPLIANDO LA CLASIFICACION DE LA BURBUJA E N ORDEN ASCENDEN TE
tán en orden opuesto al deseado. Una pasada a trav~ de todos los números no es, en general , inicio t' " i.~ ~
suficiente. Los pases se repiten hasta que, en el úlcitno pase, no sean necesarios los intercam · Entrada del arreglo ;
bios. Esto confirma que los números están ordenados. Los números "emergen" desde el "fon· marque LIMIT; •LIMIT-CLASIFICACION DE LA ULTIMA PARTIDA
do" para tomar su lugar final en el arreglo -de ahí el nombre del algoritmo -. La aplicación
PARA COMPARAR•
de este algoritmo a un arreglo muestra de números se indica en seguida.
•LLEVE A CABO LOS PASOS CONSECUTIVOS
mientras que se esperan los intercambios haga
inicio;
ARREGLO NO DESPUES DESPUES DESPUES DESPUES
CLASIFICADO DEL PASO 1 DEL PASO 2 DEL PASO 3 DEL PASO 4 comience en el fondo
(SIN CAMBIOS) •LLEVE A CABO UN PASO SENCILLO
mientras que baja LIMIT y LIMIT~ 1 haga
7
6
5
13
JO
-JO
171
13
10
17
13
10
17
13
JO
17
13
10
inicio
compare las parejas e intercambie
-10 2 ~i es necesario;
-J~l
4 17 2
3 -J5 -3 mueva a la siguiente pareja
-31
2 2 -1;1 -JO -JO fin;
-31
-3 -3 -15 -J5 -15 marque el nuevo LIMIT
fin;
Salida (clasificada) del arreglo
fin
Donde 1 significa "borbotón". Los detalles del paso 1 se dan en seguida , en donde las co·
lumnas sucesivas indican el orden siguiendo la comparación. :::i significa intercambio ; Seudocódigo: Segundo Refinamiento
:::;¡ significa sin cambio. •AMPLIACION DE LA CLASIFICACION DE BU RBUJA EN ORDEN ASCEN DEN TE
inicio

ORDEN lo. 2o. 3o. 6o. Entero A (N), LIMIT. ULTIMO , TEMP . I;
4o. 5o. i._;
INICIAL COMPARACIONES •ENTRADA DEL ARREGLO
!·t Entrada N;
13 13 13 13 13 13 17] r. I-1 ;
10 10 10 10 10 13 ¡
-10 -10 l;J :;J 10 ' .mientras que I ~ N haga
-10
17
-10
17 17
l~J -1 -10 -10 . .. i~iciO

Entrada A(l);
-15 -15 2 2 2 ~t.
,, "·
-l;J -15 -15 -15 -15 I-I +' i 1 ::·
2 2]
-3 -3 -3 -3 -3 . -3 -3 fin;
72 Fundamentos de programación Estructuras de control en el..diseño de programas 73

*MARQUE LIMIT - CLASJFICACION DE LA ULTIMA PARTIDA PARA SER G. ESTRUCTURAS DE CONTROL ADICIONAL
CONSIDERADA
" LIMIT- N; t
~. Mientras que las construcciones inicio-fin, si-entonces-además y mientras que-
ºLLEVE A CABO PASOS CONSECUTIVOS
•sd:L°'LIMITE ES IGUAL A O, NO HAY INTERCAMBIO DURANTE t haga bastan para diseñar cualquier algoriuno, con frecuencia es más natural recla-
*EL ULTIMO PASO; SI EL LIMITE EQUIVALE A I, LOS NUMEROS ESTAN EN sificar las dife::entes construcciones.
*ORDEN Dos de estos mecanismos son bucles: el de repita-hasta y el clasificado, y el terce-
mientras que LIMIT > 1 haga
· inicio
I-1;
r. ,J
ro es Ja instrucción de elección múltiple (case). También se puede emplear una ins-
trucción de salida como una forma más disciplinada de un ir a.
l l ..
*ULTIMO COMIENZO - CLASIFICACION DE LA PARTIDA MOVIDA AL ULTIMO i~~
*DURANTE ESTE PASO ~ t

ULTIMO- O; ~ 1. CONSTRUCCIONES DE BUCLE AL TERNAS


*LLEVE A CABO UN PASO SENCILLO '1
mientras que QUE I < LIMIT haga
,...,,. ..... , ... En ocasiones se usan dos construcciones de bucle alternas. En un bucle repita-
J:t'°..r:J ~ ~ lDlClO _
*INTERCAMBIE LA PAREJA SI ES NECESARIO hasta, Ja condición de bucle se prueba siguiendo la ejecución del cuerpo de bucle
si A(I) > A(I + I) entonces más bien que antes de éste como en el li'ucle de mientras que-haga. Una construc-
;:.-:~,.~
~1.'~ j,QJ--:i ~,-.rl inicio · ción de bucle clasificado mantiene automáticamente a la variable (bucle clasifica-
;;-t,' "~; ;.- .
TEMP+-A(I); do) que determina el número de repeticiones. o.:,

:~-·~-:·1 .,_
A(I) - A(I + l);
A(I + 1)-TEMP;
ULTIMO-I
fin A. BUCLE REPITA-HASTA
además;
.-..:
*MUEVA A LA SIGUIENTE PAREJA
I+-I + 1; En cienas situaciones de programación, es conveniente ejecutar repetidamente un
fin; grupo de instrucciones, con Ja comprobación sabsecuente en cualesquier de las con-
*MARQUE EL NUEVO LIMIT diciones especificas que hayan surgido . Cuando esto sucede, el control pasa a la si-
LIMIT - ULTIMO guiente instrucción del bucle; de lo contrario , Ja iteracción continúa.
fin; La forma general de construir un bucle es
*SALIDA DEL ARREGLO CLASIFICADO
I+-1; repita s hasta c
mientras que I ,.. N haga
inicio donde S es una instrucción o grupo de instrucciones y C es una condición .
Salida A( I);
, Este bucle se ejecuta como sigue:
I +-I + l
iTY':..-:_., ·. fin
fin l. Se ejec1na Ja imtrucción S.
2. Se comprueba Ja condición C.
Notas 3. Si C es falsa, el control se regresa a la instrucción repita, después de lo
l. Observe que el algoritmo trabaja correctamente para casos especiales (N = O o l ; _)_,. '- ·cual S se ejecuta de nuevo; de Jo contrario (Ces Verdadero) se ejecuta la
N = 1). siguiente instrucción del bucle.
2. Observe el uso de las variables ULTIMO y LIMIT.
s. Estudie Ja modificación interpretando el refinamiento del algoritmo desde su forrna ini ·
cial. El nivel de detalle desplegado aqui en el último refinamiento no sie_m pre es necesa- Se debe hacer notar que la instrucción (o grupo de instrucciones) S se ejecuta
rio. cuando menos una vez. Si entonces S se realiza de nuevo, su ejecución repetida debe
4. Aplique el algoritmo a un arreglo de números e investigue cambiar el valor de la condición C a Verdadera. ·
(a) pasadas consecutivas sobre el arreglo; En Ja Fig. 3-13 se muestra el diagrama de fabricación de la construcción repita-
"'~' (b) los valores de las variables ULTIMO y LIMIT. hasta.
74 Fundamentos de programación Estructuras de cont rol en el diseño de programas 75

~---,
- --, 1
Observe que algunos lenguajes de programación tienen un mecanismo explicito para p robar
el fin del archivo de entrada.

B. BUCLE CLASIFICADO

La construcción de bucle cl.asificado (llamada también bucle de cont eo) propor-


ciona el control automático del indice del bucle que determina el número de iterac-
ciones. La forma general del bucle clasificado es
Fig. 3-UI. Bucle repita-hasta
para INDEX - INITIAL-VALUE hasta que FINAL, VALUE por STEP haga S
Es conveniente sangrar la construcción como sigue:
El diagrama de fabricación de esta construcción, mostrada en la Fig . 3- 14,
repita explica cómo se ejecuta.
s
hasta c
INDICE VALOR INICIAL
La construcción del bucle repita-hasta se puede usar de preferencia al bucle
mientras que-haga cuando el uso del último parezca artificial.
Verdadero
Si STEP > º·
c lec:
EJEMPLO 3-12 INDICE> VALO R FIN AL
En el Ej . 3· 10(5). de preferencia al bucle mientras que-haga, podemos usar un bucle repita-
líasta que. La parte del algoritmo que sigue a la determinación del entero mayor se convierte
Si ST EP <O, C lec:
repita INDICE< VALOR FI NAL
inicio INDEX-INDEX + STEP
REM-M - N • (M + N);
M-N; __ _ ¡
N-REM
fin
hasta que REM = O;
Salida M *DEBIDO AL ULTIMO INTERCAMBIO*
Observe que la asignación a REM no se tiene que incluir dos veces. Fig. 3-14. Bucle clasificado.

EJEMPLO 3-13
Cuando en un programa una cantidad de partidas de datos tiene que leerse, es deseable tener
la computadora para que haga el conteo. Por tanto, un vigilante (remolque), una partida de Las cuatro variables usadas en la construcción deben tener valores enteros.
datos fuera del rango del dato actual, se incluye como la última partida . Observe que este bucle "hace más trabajo" que las o tras dos construcciones de
En consecuencia, en el Ej. 3-11 , si sabemos que no hay elementos del arreglo iguales a O, el bucle: inicia y mantiene el indice del bucle, también comprueba la terminación.
siguiente fragmento de código se puede usar para la entrada del arreglo: · Por tanto , es una forma apropiada de expresión, en donde se aplique.

*SECUENCIA DE ENTRADA ALTERNA PARA LA CLASIFICACION DE BURBUJA


1-0; EJEMPLO 3-14
repita Si queremos obtener la suma de los primeros 50 enteros positivos . se puede utiliza r el siguiente
inicio bucle clasificado:
1 -1 + l;
entrada A(I)
SUM-0;
fin
para 1 - l hasta que 50 por l haga
hasta que A(I) = O·
N-1 - l;
SUM-SUM + I;
Estructuras de control eri el diseño de programas 77
76 Fundamentos de programación
(b) Si este valor es j, se ejecuta la instrucción Sj. En consecuencia, la instruc-
Un fragmento alterno usando un bucle mientras que-haga se lee como sigue:
ción que sigue al último componente textual de la instrucción case (por
SUM +-{);
1-1;
mientras que 1
inicio
SUM-SUM
E; 50 haga

+ l;
i
¡
ejemplo, sigue S,J es realizado.

Varias alternativas de elección múltiple se pueden codificar fácilmente en una


instrucción case. Su uso en ocasiones evidencia Ja necesidad de una construcción si-

~'
entonces-además profundamente arraigada.
1-1+1
fin fi
~
EJEMPLO 3-15
La recepción de cuentas vencidas (due) de cuatro clientes se tienen que totalizar. Un registro

2. ELECCION MUTLIPLE
~ de recepción simple consta del código del cliente (con valores de 1 a 4) y la cantidad vencida.
El final del archivo de entrada se marca por el código de O del cliente.
"..
€. *TOTALIZACION DE CUENTAS RECIBIDAS
Cuando se toma una decisión que puede tener varias salidas, se puede usar la cons-
Inicio
trucción case.
Entero CODE:
La forma general de la instrucción case es
Real DUE, TOTAL (4)
para K - 1 hasta que 4 por l haga *INITIALIZE*
case I TOTAL (K) - O;
inicio ' *CLASIFIQUE Y SUME LA CANTIDAD VENCIDA
S,; Entrada CODE. DUE;
S,; mientras que CODE oF O haga
.... inicio
case CODE
inicio
s. TOTAL (1) TOTAL(!) + DUE;
fin TOTAL (2) TOT AL(2) + DUE;
TOTAL (3) TOTAL(3) + DUE;
donde I es una variable entera con valores que varían desde 1 hasta N > 1, y S 1,. •• , TOTAL (4) TOTAL(4) + DUE;
s. son las instrucciones. fin;
Una carta de flujo explicando la ejecución de esta construcción se muestra en la Entrada CODE, DUE
Fig. 3-15 (una caja no estándar se usa para indicar una prueba con varias salidas). fin;
para K -1 hasta que 4 por 1 haga
Salida TOTAL (K)
fin

Notas
l. Observe la diferencia del significado entre las instrucciones case y compuesta (la prime·
ra causa la secuencia y la segunda, exclusiva mutuamente, la ejecución de las instruc-
ciones cerradas) .
.;
2 . . " Convénzase por sí mismo que el algoritmo trabaja correctamente si no hay datos de
" entrada.
3. .,, Diseñe el sangrado equivalente en la construcción si-entonces-además y compare los
dos.

Fig. 3-15. Construcción case. 3.' · SALIDA


La instrucción case se ejecuta como sigue: ·" Cuando surgen ciertas condiciones es conveniente en ocasiones salir (to exit) de un
b1;1cle antes de su terminación. Por supuesto, esto puede ser acompañado con el uso
(a) Se determina el valor de la variable I.
78 Fundamentos de programación Estructuras d e cont rol en el diseño de programas 79

de una instrucción ir a. Una forma más disciplinada de dejar un bucle y quizá las La investigación secuencial es lenta inherentemente; u n a investigación exitos;< necesita en
construcciones que Ja incluyen, sea Ja instrucción salir. promedio N / 2 comparaciones si la lista tiene N partidas. La in vestigación binaria es más rá-
La forma general de esta instrucción es pida, u no de los muchos algoritmos que se puede usar para investigar las listas clasificadas.
La investigación binaria asemeja un p rocedimiento q ue pod emos usar para busca r una
nivel de salir palabra en un diccionario no familiar. Supongamos que la list a se clasifica e n o rden asee n·
dente. Primero, ·se comprueba la rnitad de la lista; si nuestro elemen to buscado es men or q ue
el que está a la m itad de la list a , la investigación tiene que contin uar en la primera m itad de
donde el nivel identifica Ja primera instrucción de la construcción de la cual se
la lista ; si n uestra partida es mayor que el que está a la m ita d , se tiene que re alizar la investí·
completa salir. Además Ja ejecución del control de una instrucción salir pasa inme-
gación en la segunda parte de la lista . Entonces desarrolla mos la m itad seleccionada de la
diatamente a Ja instrucción siguiendo la construcción . misma manera comprobando su registro med io , etc. La in vestigación se puede completa r con
Por tanto, se pueden sacar varios niveles de construcciones de control sangradas. éxito encontrando el elemerito solicitado o con el descubrimiento d e que la partida no est á en
bliMa. _
EJEMPLO 3-16 La investigación binaria n ecesita en promedio alrededor de log~ compa raciones para
El siguiente fragmento de código se puede usar para sustituir al mostrado en el Ej. 3·1 5 . encontrar un elemento en una lista de N elementos; es por tanto mucho más rápida que una
investigación secuencial .
•cLASlFIQUE Y SUME LA CANTIDAD VENCIDA El siguiente es el seudocódigo d el algoritmo . Observe q ue en el caso sig!:'i!:_n te los comenta-
CLASS : repita rios aumentan la legib"nidad en este caso . . . ·-· . . -- - --·-
inicio
Entrada CODE, DUE;
si CODE = O entonces •INVESTIGACION BINARIA
salir CLASS • u na lista KEY( I) consiste de N partidas; estamos investigando por el
además; *elemento llam ado GIVEN: su posición INDEX en la lista será
case CODE *determinada . Si no se encuentra el elemento , el INDEX se_rá O.
inicio inicio
Entero KEY( N ), GIVEN , I NDEX , LOW , H IGH ;
Entrada N , GIVEN
fin para 1 - ! hasta que N por 1 haga
Entrada KEY (I) ;
fin
LOW - 1; •]a posición más baja en la sublista que se está investigando*
hasta que CODE = O
HIGH - N ; la posición m ás alta en la sublista q ue se está investiga ndo*
•.L a posición INDEX de la partida G IVEN se determina
Observe que podemos escribir actualmente SRC: mientras q ue LOW e; HIGH haga
siempre hasta que inicio
dado que la ejecución del bucle repita-hasta que siemp re se completará mediante la instruc·
INDEX - (LOW + H IGH) + 2; •división entera•
ción salir. si GIVEN < KEY(INDEX) entonces
Las instrucciones salir se usan con mayor frecuencia para revisar las condiciones HIGH - I NDEX-1 •busque en la primera mitad *
especiales, incluyendo los errores, concernientes al procesamiento de datos por el además
si GIVEN > KEY (INDEX) entonces
bucle. El siguiente ejemplo importante hace uso de la construcción salir.
LOW - I NDEX + 1 •busque en la segunda mitad*
',. además
EJEMPLO 3-17. Investigación binaria salga SRC • encontrado*
La investigación , j unto con la clasificación (estudiada en el Cap . 3-11 ). es una de las aplica- *Se regresa -el valor INDEX
ciones más comunes de la computadora. Consiste en el rastreo de una lista de pa rtidas en or· fin ;
den para encontrar la partida deseada. En la práctica , el objeto de una investigación es obte- si LOW > HIGH entonces *no se encontró•
ner los datos almacenados con la partida que los identifica (llamada la clave) y pa ra la cual se INDEX - O
además
lleva a cabo la identificación.
Si la lista de partidas no está clasificada , se tiene que hacer una investigación secuencial: fin
comenzando con la primera partida en la lista, los elementos de la lista se comparan con la
partida investigada hasta que se encuentre la partida solicitada o hasta que se llegue al final
Observe la necesidad para la última instrucción de decisión . El uso de este algoritm o se ilustra
de la lista sin éxito. en seguida.
80 Fundamentos de programación
Estructuras de control en el diseño de programas 81
TABLA l!-2. Pasos durante la investigación binaria; después de nueve números (N = 9) se
busca el número 300 (GIVEN = 300). Además de las instrucciones que controlan el flujo del programa, son necesarias
las siguientes instrucciones del manejo de datos (descritas en el Cap. 2):
CLAVE 111.
(5) entrada -salida;
ANTES DE LA PRIMERA ANTES DE LA SEGUNDA ANTES DE LA TERCERA (6) asignación ;
COMPARACION · COMPARACION COMPARACION (7) declaraciones (no ejecutables) .
rr1-LOW 5 5
21 21 21 Para explicar la lógica del programa y el significado de los datos , se deben usar
73 73 73 los comentarios.
124 124 124
INDEX-241 241 241 Para la conveniencia del programador, se ofrecen muchas instrucciones adi ·
300 '300' +300: cionales en los lenguajes de programación de alto nivel. Las más imponantes de és·
450 -450 450 tas son las estructuras de control adicional, que incluyen :
701 HIGH 701 701
l...l.!L....... i..1.!.L 715 (1) bucle repita-hasta que;
(2) bucle clasificado;
LOW .. l LOW=6 LOW=6
(3) instrucción case;
HIGHc 9 HIGH = 9 HIGH = 6
Li+~I
INDEX"'L-2°)•5 INDEX =l j=
6; 9 7 INDEX =t:; 6}.~
(4) instrucción salir.

entero • . Una instalación extremadamente imponante de los lenguajes de propósito gene -


\
pane de ral es el exhono al subprograma, que se trata en el capitulo siguiente.
· Cada lenguaje tiene sus reglas para nombrar las variables y los niveles de especi-
ficación .
H. CONCLUSION . TIPOS DE INSTRUCCIONES
EN LA PROGRAMACION
J'

Los siguientes tipos de instrucciones son deseables en los lenguajes de programación


de propósito general.
Primero , existen tres construcciones de control , suficientes para controlar la se-
cuencia de ejecución de cualquier programa :

( 1) inicio-fin;
(2) si-entonces-además;
(3) mientras que-haga.

La sencillez estructural de un algoritmo (o programa) construido con el uso


exclusivo de estas estructuras de control se debe a su propiedad de que uno entra-
uno sale: sus diagramas de fabricación tienen una línea de flujo de.entrada y una de
salida simple. Puesto que cualquier texto se lee de arriba a abajo , éstas se deben
.considerar como guias generales para la organización del flujo del programa . Algu -
..;/.;.<,
~;- t

nas de estas estructuras están incluidas explícitamente ·en cienos lenguajes de


programación, otras se pueden construir de las instrucciones disponibles.
Ea los casos excepcionales, cuando parece forzado expresar un algoritmo usando
estas estructuras, la transferencia de control
(4) ir a;
se puede usar.
-----
l

:~

\
4
Subprogramas
y Programación Modular

~
¡i
i
.,..;,.,;

f;
,1
Un algoritmo de cómputo de ciena complejidad y un programa que surge de él , se
pueden considerar un sistema. Para diseñar cualquier sistema, necesitamos estar
dispuestos a identificar su estruccura jerárquica y entonces construirlo de elementos
a~tocontenidos pero que interactú~n módulos. Usados en la programació'ó para es-
te propósito son los subprogramas (también llamados procedimientos): llamados se-
,. cuencias de instrucciones que llevan a cabo tareas específicas y se les puede llamar
por sus nombres . La presencia de subprogramas en un programa interrumpe al
programa principal que inicia la ejecución y a los subprogramas que son llamados
por el programa principal u otros subprogramas durante la ejecución . Colectiva-

i
mente, al programa principal y a los subprogramas se les llama módulos o unidades
de programa.
Existen dos tipos esenciales de subprogramas: los funcionales y más comunes. las
subrutinas.
t Durante la invocación (llamado) de un subprograma , los dos módulos involucra-
dos se comunican por medio de las panidas de datos especificados. Esta comunica-
ción se puede completar por la transmisión explícita de datos (llamada paso de pa·
rámetros) o a través de las posiciones de la memoria· companida que contiene los
datos . El segundo método de comunicación , donde se consideran ciertos datos glo -
bales para los subprogramas, y por tanto , accesibles a otras unidades del progra-
ma , es destacado panicularmente en los llamados lenguajes de programación
estructurados a bloques (tales como el ALGOL o el PL/ I) .

~
El empleo repetido de subprogramas, cuando es posible en un lenguaje de
programación, tiende en ciertos casos a simplificar los algoritmos.
El diseño de programas con una identificación consistente de tareas bien defini -
das y la asignación de éstos para separarlos en módulos , se le llama programación
modular.

A. DEFINICION E INVOCACION DE SUBPROGRAMAS

Los dos tipos esenciales de subprogramas (procedimientos) son las funciones y


subrutinas. Siguiendo su ejecución , una función retoma, a la unidad de programa
que la invocó, un valor simple como el valor del nombre de la función . Las subruti-
-:.;;_,

84 Fundamentos de programación ,, Subprogramas y programación modular 85

,.~

nas son los subprogramas más comunes que se pueden usar para comunicar a la Uno de los propósitos de los programas es su uso múltiple en un programa. Por
u¡;idad del programa llamando cualquier número de valores. Sin embargo , aunque tanto, en varios módulos del programa se pueden incluir llamadas a un subprogra-
un:a función se puede usar para regresar un número de valores de manera idéntica a ma dado (en Jos lenguajes de programación que permiten la repetición -véase la
la de las subrutinas, esta práctica se está evitando . Sec. C de este capitulo- también en el propio subprograma) . Durante cada llama-
Los subprogramas, como unidades de programa autocontenidos, tienen todas da , los diferentes valores de Jos parámetros actuales son incluidos generalmente en
las propiedades de los algoritmos (véase el Cap . 1-B) , con la posible excepción de la Ja lista.
falta ·de salida, ya que otro módulo .en el programa la puede llevar a cabo . Los Para que un llamado en orden sea significativo, se tiene que definir e incluir en
subprogramas se pueden traducir de manera independiente por razones de prueba. el programa Ja llamada subrutina.
Siguiendo la invocación y la ejecución de un subprograma , el control regresa al Una definición de subrutina consiste del encabezado de una subrutina no ejecu-
lugar del llamado en la unidad del programa invocado. Resultando sin cambios el table de la siguiente forma general : .
flujo de control en esa unidad del programa .
·subrutina nombre de la subrutina (lista formal de los parámetros)
-,.
y el cuerpo de la subrutina, por ejemplo, las.instrucciones que constituyen la subru-
1. SUBRUTINAS tina. La apariencia textual del cuerpo de una subrutina es similar al de un grupo
Una subrutina es Ja más general de las dos clases de subprogramas. Una subrutina principal.
es un
sÜbprográma que puede regresar 'expÍícitamente.un 'número ilimitado de va- Siguiendo Ja ejecución de la instrucción última de una subrutina, el control de la
ejecución se revierte a la unidad del programa llamado, específicamente , a Ja ins-
lores a Ja unidad del ·p rogtama invocado. La invocación 'de la subrutina es el térmi-
tr.ucción siguiendo de un modo textual a la .subrutina llamada. Esto es el llamado
no llamado de subrutina. • . "' retorno de Ja subrutina. Por tanto, la ejecución de la subrutina es una división tem-
Una instrucción llamada de subrutina tiene la siguiente forma general : poral ·del control de la unidad del programa llamando.
Llamado** nombre de Ja subrutina (lista de Jos parámetros actuales). . .Las instrucciones del encabezado de Ja subrutina listan los parámetros formales
de la subrutina. Estos son los nombres de las variables y de los arreglos de los datos
El nombre de Ja subrutina se forma en un lenguaje de programación como cual- '\.-. comunicados a la subrutina y/ o comunicados por ésta a Ja unidad del programa lla -
quier otro identificador, por ejemplo , un nombre de variable. Este identifica a la mado. La subrutina se escribe mediante el empleo de estos nombres más bien que
subrutina entre los subprogramas contenidos en un programa dado . con los nombres usados por las partidas de datos en el programa llamado. De este
Los parámetros (también llamados argumentos, véase Ja Tabla 4-1) son partidas modo, las dos formas se pueden escribir y traducir independientemente , así como
de datos mediante los cuales una subrutina se comunica explícitamente con la uni- las listas de Ja pareja de argumentos formales y actuales. En consecuencia, los pará -
dad del programa llamando (que puede ser el programa principal o cualquier otro metros formales constituyen retenedores de lugar para los actuales. Los parámetros
programa). Los_parámetros son predefinidos por una subrutina conforme al núme· formales pueden adquirir valores de los parámetros actuales durante el llamado y
ro y tipo de cada uno de ellos. pueden regresar valores a los parámetros actuales durante el retomo . La asociación
Los parámetros pueden comunicar valores a la subrutina (en ocasiones se les lla· entre los parámetros actuales y formales ocurre durante Ja llamada de Ja subrutina
ma parámetros de entrada) o desde la subrutina a la unidad del programa llamado y se analiza con más detalle en Ja Sec. B-1 de este capítulo .
(parámetros de salida) ..o pued~ servir a ambos propósitos presentando un valor a la Se usan nombres diferentes en Jos diversos lenguajes de programación para los
subrutina cuando ésta es llamada y adquirir subsecuentemente valores como resuJ'. parámetros formales y actuales. Los nombres más frecuentes usados se enlistan en
tado de su ejecución (parámetros de entrada / salida). la Tabla 4-1.
Los parámetros pueden constituir valores simples o arreglos de valores.

TABLA 4-l. Terminología usada para el paso de parámetros .


EJEMPLO 4-l
Para llamar una subrutina SW AP , que intercambiará los valores de dos enteros 1 y J, se puede
usar la siguiente instrucción: EN EL MODULO EN EL MODULO NOMBRES USADOS EN
LLAMANDO LLAMADO
Llamado SWAP (! , J)
En este caso. ambos parámetros son de la clase de entrada/ salida.

- • Del inglés: subroutine call : llamado de subrutina. (N. del T.)


.,Del inglés call, llamar . (N . del T .)
parimetro actual
argumento actual
argumento
parámecro fonnal
argumento falso
parámetro
ALGOL, Pascal
FORTRAN
PL/I
--------------- -

Subprogramas y programación modular 87


86 Fundamentos de programación
La siguiente asociación entre los parámetros actuales y formales relacionados
Junto con los valores de los parámetros, una subrutina puede usar cualquier nú-
~celaran
durante cada llamada:
mero de variables o arreglos locales a los que se les y asignan valores dentro
de ésta. Su existencia es desconocida para otras unidades del programa. .
El programador está libre de elegir cualquier nombre válido para las entidades PARAMETRO PARAMETRO PARAMETRO PARAMETRO NATURALEZA
(por ejemplo, los nombres o niveles de variables) localizadas para una unidad de Núm. ACTUAL ACTUAL FORMAL DEL
DURANTE LA DURANTE LA PARAMETRO
programa . Si sucediera que los nombres de tales entidades en dos unidades coinci-
la . LLAMADA 2a . LLAMADA
dieran, se tratarán como si estuvieran referidos a partidas diferentes.
Mientras que los parámetros formales siempre tienen que ser nombres de va·
un valor real
riables o arreglos -(¿ve algún sentido en emplear constantes como parámetros for· l X Z(3) B un arreglo real
males?)- los parámetros actuales pueden ser expresiones (y. en particular, cons· 2 z z D de 50 elementos
un valor
tantes , variables y arreglos de elementos) , así como arreglos.*
3 J(l) 5 N entero
Se puede dibujar una analogía entre las funciones algebraicas y los subprogra·
mas en programación en los que una función algebraica se escribe en términos de
fijadores de lugar para los valores actuales . Observe que el local para la subrutina son los datos : arreglo K , variables A , C. M .
Por ejemplo, para encontrar la hipotenusa de un triángulo rectángulo con lados
x y y, podemos usar la función algebraica
Todo eso tiene que ser conocido por el escritor de la unidad del programa lla·
mando o llamado siendo Ja interfase entre los dos: el significado de cada parámetro
z= y7+7" en Ja lista, Ja posición relativa de lo~ parámetros y su naturaleza. Suponiendo que el
Siguiendo la sustitución de los valores actuales (por ejemplo, x = 4 , y = 3) para el '•
llamado de una subrutina se ejecuta como sigue:
caso dado. podemos encontrar la respuesta (z = 5).
Los miembros de las listas de los parámetros actuales y formales están en corres-
(1) Se pasan Jos parámetros, si hay alguno (el mecanismo del parámetro pa·
pondencia de posición de uno a uno con alguna otra. Por tanto , el tipo de pará-
sando se estudia más profundamente en Ja Sec . B-1 de este capítulo) .
metro en las posiciones respectivas en ambas listas , tiene que ser el mismo .
(2) La subrutina se ejecuta como si fuera un programa independiente . Los
"'~ . parámetros de salida tendrán los valores que se les asignen; los parámetros
11>!~ de entrada/ salida pueden tener sus valores cambiados .
EJEMPLO 4-2
(3) El control regresa a Ja instrucción siguiendo Ja subrutina llamada en el
Est udie la correspondencia de parámetro en este ejemplo: texto del programa llamando . Este es el retomo de Ja subrutina.
Unidad del programa llamado: Subprograma llamado:
Subrutina WORK(B. D . N ) Algunos lenguajes de programación tienen instrucciones especiales que ordenan
inicio inicio el regreso de una subrutina al programa principal (RETURN en FORTRAN o
Entero 1, J(IOO); Entero K(lOO ) ; M . N ; EXIT PROGRAM en COBOL). En un lenguaje como el ALGOL, donde el
Real X , Y, Z(50); Real A . B. C , D(50) ; subprograma por sf mismo (como el programa principal) constituye una instrucción
compuesta, el retorno sucede cuando se llega al fin más externo durante la ejecu·
ción del subprograma .
llamado WORK [X . Z, J ( I)]; A menos que use un parámetro para comunicar un valor, en Ja mayor parte de
fin los lenguajes de programación es posible compartir la posición de Ja memoria que
contiene el valor entre varias unidades del programa (véase Ja Sec. B-2 de este
qpitulo). Ambos métodos se pueden usar en el diseño de una subrutina.
llamado WORK [Z(3) . Z. 5]; ;~-.. 11. El siguiente ejemplo presenta Ja definición y uso de una subrutina simple.
:leí; -, ,,

fin

los nombres de los


.. ~va a diseñar un programa para ordenar tres enteros cualesquiera en orden descendente
• Algunos lenguajes permiten tambi~n el paso de otras cantidades, por ejemplo . ._(por
., ejemplo, el primero es el mayor) . .
subprogramas, como pu!metros.
Subprogramas y programación modular 89
88 Fundamentos de programación
EJEMPLO 4-4

Solución Si nuestro programa que ordena tres enteros se usara en un programa más general que permi-
tiera el ordenamiento de triadas múltiples de enteros positivos , se puede convenir en una
*PROGRAMA DE ORDENACION PARA TRES VALORES
subrutina:
inicio
Entero INTl. INT2. INT3 ; *ORDENE TRIADAS DE ENTEROS POSITIVOS
Entrada INTl. INT2. INT3; inicio
si INTl < INT2 entonces Entero l, J, K;
Llamado SWAP (INTl , INT2) Entrada l , J . K;
además; *TRAILER DATUM ES - 1
si INTI < INT3 entonces mientras que I "/' -1 haga
Llamado SWAP (INTl , INT3) iriicio
además; Llamado ORDER (I, J . K) ;
si INT2 < INT3 entonces Entrada l , J . K
Llamado SWAP (INT2, INT3) fin
además;
Salida INTl, INT2, INT3 fin
fin
- RUTINA QUE ORDENA TRES ENTEROS
•VALORES SWAPS DE LA RUTINA DE DOS VARIABLES ENTERAS Subrutina ORDER (INTI, INT2 , INT3)
Subrutina SWAP (L . M) inicio
*TODAS LAS INSTRUCCIONES DEL PROGRAMA DE ORDENACION DEL
inicio
Entero L. M. TEMP; *EJEMPLO 4·3 CON LA EXCEPCION DE LA
TEMP .-L; *INSTRUCCION DE ENTRADA
L - M;
M ,_ TEMP ,',:
fin fin
*VALORES SWAPS DE LA RUTINA DE DOS VARIABLES
Una subrutina puede llamar a otro subprograma (por ejemplo, a otra subrutina
Subrutina SW AP(L , M)
o a una función) . Originándose una cadena de cambios (véase la Fig. 4-1 ). Cada

J: :• • )
inicio
llamada se completa con el regreso a la subrutina llamando inmediata. *COMO EN EL EJEMPLO 4-3

:::G~MAe>UNG'/ ::':"••A< ) ~
fin

Llamado A( ... ); Llamado B( ... ) Convénzase por sí mismo que las rutinas actúan correctamente
X-2*Y; ~ M-N/L; ~fin
• Puesto que una subrutina es una .unidad de programa independiente que se
4 3 puede usar en cualquier programa , tiene su propio diagrama de fabricación [véase
la Fig. 4 -2(a)) . La línea estándar que se usa para mostrar el llamado de una subruti-
fin na en el diagrama de fabricación del programa llamando está presente en la Fig.
fin
4-2(b) .
A la instrucción en la subrut!p.a en donµe comienza la ejecución de ésta siguien -
do el llamado se le denomina punto de entrada; la instrucción que regresa el
control al programa llamando es el punto de retorno de la subrutina. Con mucha
Fig. 4-1. Una cadena de cambios. Las flechas indican el flujo de control durante la ejecu· frecuencia. éstas son respectivamente, -la primera y última instrucciones en la
ción ; los números indican la secuencia de los eventos.
90 Fundamentos de programación Subprogramas y programación modular 91

subrutina. Algunos lenguajes (tales como el FORTRAN 77, COBOL o PL/1) per-
Ya que la función referida por sí misma es sustituida por un valor, este valor es
miten al programador definir varios puntos de entrada y retorno en una subrutina.
despreciado en el programa llamando. Por tanto existe una determinada restricción
Varios puntos de entrada tienen sus propios nombres y listas de parámetros.
en el Jugar de Ja función referida dentro de este programa. Mientras que una subru-
tina llamada es una instrucción independiente y se puede colocar principalmente
nombre de la subrutina en donde se desee, Ja función referida tiene que acudir a donde el valor usado por
(lista de parámetros formales)
ésta se vaya a emplear (observe que para circunvenir esta limitación, se pueden
nombre de la subrutina emplear las variables temporales).
¡-----·-----¡ (lista de los parámetros
Con estas distinciones concernientes a Ja invocación , todo lo que se dijo sobre las

::~~~¡
actuales)
subrutinas en la sección anterior se aplica también a las funciones.
La referencia a la función se lleva a cabo como sigue:

(1) Si cualesquiera de Jos parámetros son pasados (véase Ja Sec. B-1 para de-
(a) diagrama de fabricación de una subrutina (b) linea de salida para una subrutina llamada talles).
(2) La función se ejecuta como si fuera un programa independiente. Durante
Fig. 4-2. Diagrama de fabricación de las subrutinas Ja ejecución, un valor del tipo correspondiente al tipo del nombre de Ja
función es asignado a este nombre.
(3) El regreso de la función sucede, y el valor obtenido se sustituye por la fun-
2. FUNCIONES ción de referencia .
Otros valores se pueden regresar mediante los parámetros o compartir en
Una función es un subprograma cuyo nombre adquiere un valor cpmo resultado de las posiciones de Ja memoria.
su invocación. De este modo, se obtiene un valor sencillo. Al mismo tiempo, Jos pa-
rámetros pasando y las posiciones de la memoria compartida se pueden usar para Una función se define al igual que una subrutina. La diferencia vital es que el ti·
pasar valores adicionales; es decir, de cualquier forma, es preferible usar una pode Ja función (es decir , el tipo de valor que será sustituido por la referencia) está
subrutina si se necesitan obtener varios valores en el subprograma. establecido en el encabezado de Ja función. La forma general del encabezado de
Una funeión se invoca cuando se Je hace referencia, esto es, empleando su
Úna función es
nombre y Ja lista de los parámetros actuales en cualquier instrucción en donde se
pueda usar una constante o variable que se espera rinda un valor. El tipo de valor Función Tipo nombre de la función (lista de los parámetros formales)
regresado por la función tiene que ser el apropiado . Por tanto, a Ja invocación de Ja
función se Je denomina referencia de función . Una referencia de función es , enton-
en donde el tipo apropiado es sustituido por el Tipo.
ces, un componente de una instrucción y tiene la forma general :

... nombre de la función (lista de los parámetros actuales) . .. EJEMPLO 4-6


Problema
donde la elipsis( ... ) se establece para el residuo de una instrucción significativa. Determine el número mayor en cada uno de los conjuntos múltiples de tres enteros positivos.
Con frecuencia , las referencias a la función se usan en una expresión del tipo corres-
Solución
pondiente .
•DETERMINE EL MAYOR EN CADA TRIADA DE ENTEROS
EJEMPLO 4-5 •POSITIVOS
Si una función que obtiene Ja raíz cuadrada de un número real positivo ha sido definida , se inicio
Entero 1, J. K;
puede usar como sigue :
Entrada 1, J. K;
X - SQRT(Y) - 5 • Z *TRAJLF..R DATUM ES - 1
mientras que ,,¡, -1 haga
o como se indica:
inicio
si SQRT (X)< Y entonces Salida 1, J. K, MAX(I , J. K);
Y-2• Z Entrada 1, J, K
además fin
A - Z - SQRT(X)
fin
92 Fundamentos de programación
Subprogramas y programación modular 93
*SE ENCUENTRA EL MAYOR DE LOS TRES ENTEROS
Función entera MAX(L. M, N) posiciones mantienen accesibles los datos globales para todos los subprogramas que
inicio los comparten . El uso de los datos globales para la comunicación entre las unidades
Entero L . M. N;
de los programas es de importancia especial en los llamados lenguajes estructurados
si L > M entonces
a bloques (tales como el ALGOL o el PL/I). Esta clase de lenguajes de programa-
MAX--L ción permite el acceso a datos modularizados en un programa así como la modulari-
además zación del programa mismo .
MAX--M;
si k > Max entonces
MAX--K 1. PASANDO DE LOS PARAMETROS
además
fin
A través del mecanismo de pasando de los parámetros, los valores de los parámetros
actuales se asocian con los valores correspondientes de los parámetros formales, pa-
Notas
ra transferir los datos desde la unidad del programa llamando a la del llamado y vi -
l. Observe que en la propia función, se asigna un valor al valor de la función, sin lista de pa·
ceversa.
rámetros.
2 . Estudie la diferencia entre la solución al problema en el Ej . 4-4 .Y la de este ejemplo. La asociación se puede llevar a cabo de tres métodos diferentes que , en cienos
casos (por ejemplo, para cierta clase de los parámetros actuales), puede generar re-
sultados distintos. Generalmente , el método de transferencia del parámetro es parte
del control del programador dado que está definido por la implantación del len-
Una función puede referirse a una subrutina; ésta puede llamar una función .
guaje. La comprensión de este mecanismo amplia, de cualquier forma, la habili -
En determinados lenguajes de programación usados ampliamente disminuye
dad del programador del lenguaje y evita los errores sutiles (y por tanto , dificiles de
por completo la función (por ejemplo, el COBOL).
localizar) . Los Ejs. 4 -7 al 4-9 se deben estudiar cuidadosamente .
En lenguajes que ofrecen la instalación de la función (como el ALGOL , el
FORTRAN o el PL/1), existen por lo general, dos clases de funciones. Las fun-
-.,.;
ciones inte-rconstruidas (también llamadas intrinsecas) pueden ser referidas sin ne- , A. LLAMADA POR REFERENCIA
cesidad de sus definiciones, las cuales han sido escritas por los programadores de sis-
temas y son incluidas por el traductor junto con el program~. principal. Son fun-
Esta técnica, conocida también como llamado por posición (o por onºentación) se
ciones de uso común, tal como la raiz cuadrada, el logaritmo , etc . En ocasiones, su
código es copiado simplemente por el traductor en el lugaT de referencia (a éstas se usa con mucha frecuencia. Esta es la implantación más frecuente de las llamadas de
subprogramas en COBOL, FORTRAN y PL/ I.
les llama rutinas abiertas como contrapartida a las rutinas cerradas, de las cuales
existe sólo una copia por llamar). Las funciones generales son, de cualquier forma , Cuando sucede una llamada por referencia , la orientación del parámetro actual
escritas por el programador, definidas por el programador para ser referidas. se transmite al subprograma llamado. Si el parámetro actual es una expresión pri-
mero se evalúa y la orientación de la posición retiene al valor que pasa. Si el pará -
metro es un arreglo, se pasa la orientación de su primer elemento.
Subsecuentemente, cada vez que se hace referencia al parámetro formal en el
B. COMUNICACION CON UN SUBPROGRAMA
subprograma llamado, esta orientación se usa para tener acceso a la posición del
parámetro actual. Por tanto, las posiciones de Ja memoria que contienen los valores
Por lo general, los datos se presentan a un subprograma que está siendo invocado;
de los parámetros actuales son accesibles tanto a las unidades del programa llaman-
siguiendo la ejecución de un programa usualmente resulta que se tienen que pre- do como a la del llamado .
sentar a la unidad del programa llamando.
El método esencial de comunicación entre las dos unidades de programa invo-
lucradas en una llamada (el término se usará en esta sección para nombrar a la
EJEMPLO 4-7
subrutina llamada y a una función de referencia) es el pasando de los parámetros.
Los parámetros actuales se list31!- en la instrucción invocando; y los parámetros for-
males, en el encabezado del subprograma. '""'
En la Fig. 4-3 , se muestran las posiciones de la memoria pertenecientes a 'los parámetros ac -
Otra manera para comunicar es a través de las posiciones de la memoria defini- ítiales (apropiadas por la unidad del programa llamando) y a los parámetros formales (apro-
das como accesibles a ambas unidades de los programas llamando y llamado. F.stas piados por la unidad dCI programa llamado) . La siguiente llamada invoca a la siguiente
subrutina:
94 Fundamentos de programación
Subprogramas y programación modular 95
Llamado WORK [5, V/ X. Y, Z(I)] Subrutina WORK(A, B, C, 0) EJEMPLO 4-8
.--
5 Este programa principal invoca a esta subrutina
inicio
V [u m---=i orientación de A
Subrutina WORK(A. B. C. D)
Entero I, V, X, Y, Z(IOO);
orientación de B inicio

X ~ ------------1:2 1 orientación de C
Entero A, B . C. D;

~X~ orientación de D
V - 4; X - 2; Y - 7; I +- 11;
z (I) -
15;
fin
Llamado WORK (5, V/X, Y, Z (I))
z

Z(I) 1----;--¡ fin

Las posiciones de la memoria relevantes se muestran en la Fig. 4-4.


Fig. 4-ll. Llamada por preferencia. Las flechas representan las orientaciones.
¡ 5 J
Notas

1. Se ha creado una posición especial en el área de la memoria de la unidad del programa


llamando para retener el valor del parámetro actual V /X .
2. Los dos primeros parámetros formales : A y B, no se deben usar para pasar los valores de
regreso a la unidad del programa llamando . Si se hace una asignación en la unidad del
programa llamado a la variable A, y si se sigue el retomo a la unidad del programa lla·
V [
X

y [

zc=J
J
) m A
B
e
D

mando a la constante 5 que se utiliza aqul, su valor puede ser diferente de 5 .


~"'b=j
posiciones de la unidad
posiciones de la memoria
B. LLAMADA POR VALOR del programa llamando
de la unidad del programa llamado
Fig. 4-4. Llamada por valor .

Esta técnica de pasando de los parámetros se puede especificar claramente por un C. LLAMADA POR NOMBRE
programador de ALGOL o de PL/I.
El valor del parámetro actual 5e pasa a la unidad del programa llamado . Este
Este método, usado en el ALGOL, es el menos cÍaro en sus efectos.
valor se coloca en la posición del parámetro formal correspondiente.
El efecto de una llamada por nombre se especifica por la llamada regla de la co-
Las posiciones de Ja memoria de Ja unidad del programa llamando son inacce-
Pia: un parámetro formal se sustituye textualmente por el correspondiente pará-
sibles a las del llamado. Este método no se puede usar, por tanto, al pasar de regre· metro actual.
so a Ja unidad llamando: sólo es posible para el pasando de los parámetros de en·
En la implantación de una llamada por nombre, se lleva a cabo actualmente en
trada.
la sustitución no textual. El efecto se produce invocando un subprograma especial,
llamado responsable, el cual está definido por el programa de traducción. El res·
Una variación imponante de la llamada por valor es Ja llamada por valor·
ponsable evalúa el parámetro actual; cuyo valor se sustituye en lugar del parámetro
resultado. En esta técnica, se sigue una llamada por valor y Ja ejecución. del
formal. Llamar por el nombre se emplea raramente para implantar los lenguajes de
subprograma llamado, los "resultados", valores de los parámetros formales, son programación.
transferidos a las de los actuales. Este método se usa en ocasiones en las implanta·
ciones FORTRAN. Los paréntesis se insertan durante la sustitución textual si son necesarios para
hacer significativa la instrucc;ión resultante.
Subprogramas y programación modular 97
96 Fundamentos de programación
El valor obtenido y proyectado por la variable C en el p rograma principal depende del
EJEMPLO 4-9 mecanismo adoptado por el parámetro pasando. como se m uestra en seguida.
Invoque a esta subrutina:
Este llamado l. llamada por referencia: El efecto se ilustra en la Fig. 4-5.
Subrutina WORK (A , B. C, D)
Llamado WORK [5 , V / X , Y. Z(l)]
inicio
posiciones de la memoria posiciones de la memoria
de la unidad del programa llamando de la unidad del programa llamado

C-B-A; A 7 4
orientación de V
o-e +A; B 5
orientación de X
e yf 12
orientaci6n de Y
Todas las variables son de tipo entero.
fin A+B 8 orientaci6n de Z

Durante la ejecución de la subrutina WORK. se ejecutará la siguiente subrutina en lugar de


Fig. 4-5. Aquí C = 12.
la que está en el cuerpo de la subrutina:
2. llamada por valor
Y-V/X - 5;
Z (I) - Y+ 5; (a) sólo llamada por valor: C no cambia, por consiguiente C = 17
(b) llamada por valor-resultado: El efecto se ilustra en la Fig. 4 -6.

D. COMPARACION DE LOS METODOS PASANDO posiciones de la memoria

m
DE LOS PARAMETROS de la subrutina

Mientras que en la mayor parte de los casos el programador no tiene control sobre v
la forma en que se pasan los parámetros, en algunos lenguajes existe tal control. Por X
ejemplo, en el ALGOL, en la misma subrutina algunos parámetros se pueden lla· y
mar por el nombre y otros, como los especificados, por el valor.
Llamar por el nombre es el método más general, de cualquier forma es complejo z
en su implantación. Llamar por el valor no es muy general. aunque los datos no
pueden regresarse al programa llamando (esto está solucionado en la llamada por Fig. 4-6. Aqui C = 11.
valor-resultado). Tampoco existe punto de transferencia completa en los arreglos
por valor, mientras que una orientación simple basta en una llamada por referen· 3. llamada por nombre: Conforine a la regla de la copia . ·
cia. La llamada por referencia, de cualquier forma, necesita modificación cuando
se desea que pase al programa llamado una expresión menor que su valor.
Los ejemplos siguientes establecen los puntos en los que los métodos llamandos
A- A + 1 por lo que A = 4
C ,._ A +A+B por lo que C = 4 +4 +5
diferentes· pueden en ocasiones tener efectos distintos.
e= 13

EJEMPLO 4-10
2. POSICIONES DE MEMORIA COMPARTIDAS S
Tenemos el programa siguiente:
Subrutina SUBR (V: X , Y, Z)
inicio inicio '.'J 1,
El método alterno de comunicación entre las unidades de los programas es su com-
Entero A. B. C; Entero V, X, Y, Z; partición de los datos retenidos en las posiciones de la memoria nombradas. Se dice
A ,._ 3; B - 5; C - 17; de las posiciones compartidas que contienen los datos globales.
Llamado SUBR (A . A, A + B. C): v-v+ 1;
z-x+Y En un grupo específico de !enguajes de programación de alto nivel llamados len-
Salida C guajes estructurados a bloqÚes (éstos incluyen al ALGOL y al PL/ I), existe un me-
fin t '
fin
1 -

98 Fundamentos de programación Subprogramas y programación modular 99

dio para la modularización de 'la proyección de las variables. Esto significa que la programa principal :
Global I, ARRAY(IOO)
secuencia de instrucciones sobre la que existe una variable puede ser delimitada ar·
subprograma A :
bitrariamente por el programador. Tales lenguajes, junto con los subprogramas ex·
Global K , SCORES(IOO)
ternos , contienen en sí secuencias de instrucciones (estudiadas en la Sec. A) que subprograma B:
pueden ser trasladadas indep~ndientemente ; existen también subprogramas ínter· Global M, VALUES(IOO)
nos. Estos constituyen una parte integral de todo lo que es un programa, compar·
tiendo un número de variables con diferentes partes de ésta. Por tanto , la variable I se conoce como K en un subprograma A y como M en el
subprograma B; el arreglo ARRA Y. como SCORES y VALUES, respectivamente .
A. DATOS LOCALES Y GLOBALES Suponiendo que un subprograma X en este programa no contiene la declaración Global ,
no puede tener acceso a estas posiciones.
Los datos locales (variables y arreglos) existen excl~ivamente en un subprograma
dado . Sus posiciones son inaccesibles al programa llamando , y por tanto , sólo son C. LENGUAJES ESTRUCTURADOS A BLOQUES*
de significado local dentro del subprograma en donde estén declarados. De modo
que se puede escoger para ellos cualquier nombre válido en la unidad del pro· Los lenguajes estructurados a bloques son lenguajes de programación de alto nivel
grama. que hacen posible el control de la proyección de variables y arreglos (es decir, el
Los datos globales (variables y arreglos) son partidas de datos que existen en dos rango de instrucciones donde existen) permitiendo a estas entidades ser declaradas
o más unidades de programas que son consideradas globalmente. Las posiciones de en sus instrucciones compuestas en particular en un programa.
la memoria que retienen esos datos son compartidas entre las unidades de los Una instrucción compuesta inicio-fin con declaraciones precedien do a la ins·
p~gramas; cualesquier_ a de ellos puede tener acceso a sus contenidos y modificarlos . tracciones ejecutables contenidas en ella, se le llama un bloque.
El uso de los datos globales en lugar de los parámetros para comunicación entre Un bloque está compuesto de instrucciones y es posible que otros bloques (di-
las unidades de los programas, puede ser ventajoso desde el punto de vista de la efi· gamos que están contenidos dentro de él) .
ciencia del tiempo de corrida cuando: En un programa escrito en uno de los lenguajes estructurados a bloques (por
ejemplo , ALGOL o PL/ I) una variable se puede usar solamente dentro de la pro·
• Un número de entidades de datos se va a compartir entre varias unidades de yección de su declaración.
los programas. La proyección de variables y arreglos está definida por la regla de "lo último
• Los arreglos van a ser compartidos, y las llamadas no son implantadas por re· declarado" como sigue. La proyección de una variable abarca al bloque en el que
ferencia. está declarada y a todos los bloques que la contienen (sangrados), excluyendo a los
bloques en donde está declarada una variable del mismo nombre. Esta es entonces
De cualquier forma , se debe recalcar que la claridad de los parámetros que pa· una variable diferente; aunque las dos variables tienen el mismo nombre , carecen
san a menudo contribuye a la confiabilidad del programa. de relación por completo.

B. DATOS GLOBALES EN LENGUAJES SIN ESTRUCTURAS EJEMPLO 4-12


A BLOQUES
La regla proyectada se ilustra en la Fig. 4-7. Observe que el nombre Ben este programa es
Los lenguajes sin estructura a bloques, como el FORTRAN, usan una forma simple usado por tres variables diferentes (señaladas en la figura como B 1, B 2 y B 5). La variable Fes
global al programa completo.
e implicita de controlar la proyección de las variables y arreglos en un programa.
En este lenguaje, una variable o arreglo es local para la unidad del programa cuan· Los lenguajes estructurados a bloques son implantados con el uso de la ubica-
do está declarada a menos que se declare como común a las unidades donde va a ser ción de la memona dinámica: la memoria es asignada a las variables y arreglos du -
global.
rante la ejecución ·del programa. Cuando se declara una variable¡ se asigna la va·
Por tanto , en FORTRAN una instrucción COMUN está incluida en todas las riable a ésta, Ja memoria se libera cuando la proyección de esta variable se agota ,
.i:-mdades
....... ..\. ..M .... '!.:
que van a compartir un área de datos dada. dado que la variable deja de ser conocida .
<nff¡ ~,,· ~ h.r :·. Por el contrario, en un lenguaje sin estructura a bloques (como el FORTRAN),
EJEMPLO 4-ll
las posiciones de la memoria son asignadas a todas las variables y arreglos durante el
Eñ'u!i'\~guaje sin estructura a bloques , podemos ten~r las siguientes declaraciones en un
cieno prÓgrama : • úta sección y el Cap . 4-C se p~eden omitir en la primera lectura.
a -

1
100 Fundamentos de programación
Subprogramas y programación m odular 101
proyección de las variables usan sólo dentro de cieno grupo de instrucciones. Si este grupo se coloca dentro de
inicio A, A, B, B, B, C D E F un bloq ue con las variables locales declaradas en él, estas variables:
Entero A, B, F:

inicio
•son inaccesibles fuera del bloque, lo cual da por resultado un aumento en Ja
Entero B. C
confiabilidad del sistema
• se pueden nombrar de manera independiente

,l
inicio • existen sólo en éste bloque y debido a la ubicación de la memoria dinámica ,
bloque { En~ero A, B, D;
s . es posible la economfa de espacio.
bloque bloque j f~I .
1 2 ~ :
C. REPETICION EN LA PROGRAMACION
{ inicio
bloque E7tero E;
4 fin Las soluciones a cienos problem as se expresan parcialmente de maner a conven -
cional en términos de ellos mismos. A estos algoritmos de solución se les llama repe-
titivos y usan definiciones repetitivas. Una definición repetiti"va es un p roceso d e
fin ! cómputo que consta de:

fin
\ ( 1) Una regla general (o conjunto de reglas) para obtener el resultado.p ara la
,_ mayor pane de los parámetros; esta regla se define en términos de ella m is-
ma, con diferentes parámetros.
~ ~.'.
Fig. 4-7. Las partes sombreadas corresponden a las parres del programa en donde existe una (2) Resultados explfcitos para algunos valores de los parámetros (sin éstos un a d e-
variable dada. : finición repetitiva podría ser circular ).

traslado, antes de que comience la ejecución. Como arreglo se le llama ubicadón d e Ejemplo 4-13
memoria estática.
En un lenguaje estructurado a bloques, un subprograma puede constituir otro
bloque en el programa. En este caso se le denomina subprograma interno. Un Para calcular el factorial NI de un entero positivo N , es conveniente usar la siguiente definí.
ción repetitiva :
subprograma interno compane las áreas de Ja memoria con bloques de programas
que lo contienen y por tanto, no puede trasladarse por separado. Todas las va- factorial (0) = 1
riables y arreglos cuya proyección abarca tales subprogramas son globales a éste. factorial (N) = N •factorial (N- 1), N >O
Los subprogramas internos son la única clase disponible en ALGOL mientras
que el PL/ 1 ofrece los medios para subprogramas internos y externos. Puesto que el uso de las definiciones repetitivas es una manera natural de p re-
Los subprogramas internos son la única clase disponible en ALGOL, mientras sentar una solución a ciena clase de problemas, se recomienda repetir el uso de Ja
rados a bloques. Sin embargo existen, también en lenguajes sin estructura a blo· repetición en un lenguaje de programación.
ques, como el COBOL, en la forma de párrafos PREFORMADOS (del inglés, La repetidón en p rogramación significa que:
PERFORM*) (secuencias de código). Los subprogramas internos companen en este
caso todas las posiciones de datos con el.,p~ograma principal; no pudiendo, de nin· (1) Los subprogramas se pueden invocar por sf mismos (repetü:ión directa ).
guna forma, ser parametrizados. · (2) Se permite una cadena de invocaciones de subprogramas que dé por resul·
Por tanto, en Jos lenguajes estructurados a bloques, un programa se puede tado un círculo cerrado (es decir, una subrutin a A llama a una subrutina

~
modularizar ,no sólo con respecto a sus instrucciones (es decir, subdividido en B, la cual llama a una subrutina C , la que llama a A); ésta es una repetidón
indfrecta.
subprogramas), sino tambifo conforme al acceso de datos. En un bloque, sólo se
puede tener acceso al global y al local de datos para éste. El razonamiento detrás de
la estructura a bloque es que en un programa la mayor pane de las variables se ¿Por qué ciertos lrnguajes (de manera destacada el FORTRAN y el COBOL)
rohfben la invocación repetitiva de subprogramas? · ·,
>..Cuando se llama a un subprograma , cienas·posiciones llamadas en conj unto, el
•Efectuar. ejecutar, ~alizar, llevara a cabo; dÑrrollar; cumplir. desempeñar; ejercer. :registro de activación del subprograma, son usadas para fij ar los valores de sus va-
--

Subprogramas y programación modular 103


102 Fundamentos de programación

riables locales y de los parf!metros pasados a éste (o la orientación de los parámetros;


véase la Sec . B·l), así como la orientación de regreso. La orientación de regreso es
la orientación de la instrucción en la unidad del programa llamando que se va a ~ "'i)
.. "O
"' e ""
E o O.:
11 .
;J~
~ -g o
e! "Oe::¡.... te-
realizar siguiendo el regreso desde el subprograma . .., ~ 1
En un lenguaje con ubicación de memoria estática, un conjunto de tales posi- te ·2
" "O
e Eu ~z
_.._,
~ " c..!!<
ciones es proporcionado por el traductor para un subprograma. Si un subprograma - ¡¡..
e°'
se llama a sí mismo -evidentemente antes de que suceda el regreso a la unidad del N .6 "º
~ti
programa llamando- los contenidos de estas posiciones serán sobreescritos. • ~~
".".
ffiJ
Si un lenguaje de programación permite la repetición, son necesarias las posi· i .g l"I")

~ -~ l
ciones de la memoria dinámica. Taies lenguajes como el ALGOL y el PL/ l propor· .,... ~" ci::: .!!z
cionan esta facilidad al programador. Cuando un subprograma se llama a s! mis - o ¡; o
....... ¡.... ~l
mo, se crea un nuevo registro de activación . Ya que el regreso tiene que suceder pri- u o IX

mero desde el lugar de la última llamada (compare la Fig. 4-1 e imagine que las ~ ., ~~
EU
múltiples copias de una subrutina A se llama una a ot•a), los registros de activa· • e: ~<
N .lj .. LL.
ción se tienen que usar durante las series de regresos de la forma última entrada· e:: E~
~ :§ l
primera del inglés, LIFO : last in-first out) . Por tanto los registros de activación se NIN 1: C"- • 1 f"") 1. °'
te ~
~
"O
~-:l
e~
colocan en la memoria en el estilo LIFO , lo que constituye una estructura de datos ~~o e:: c..!!
t ¡; t; "'
:g ü 2
e::,:::,
llamada pila (vfase el Cap . 5-G) . - .... < [ ., e::
Cuando sucede una llamada, se coloca un registro de activación nuevo en la par· ¡¡.. ~ .g :9
te superior de la pila; cuando comienza el retorno (repetición descendente) , se usa
·-"""
el registro de activación en la parte superior de la pila como la fuente de valores va· e ] -2""!::e::
~ ~

·-.e:: -·-..
- ·- ·:
•O - u
·- V "1
riables y de la orientación de regreso. Este se·retira en forma secuencial de la pila. IN 1: C"- • 1 f""),. ...2~ ;"' fJ~
El último registro de activación origina el regreso al lugar de la llamada inicial de
C'"- •
.g.. ...,
-: ~
e::
c.. i
.,~ ~
.~:§ ~
esteElsubprograma .
siguiente ejemplo presenta a la función repetitiva FACTOR y al contenido di-
;
~ -
." -.
e::
o e:: "
~ -~
nflmico de su pila de tiempo de funcionamiento . .
"O .:
~ -
~

..!
1

C"- • 1-1: C"- • IN 1: C"- • 1 l"I") 1 * j e::


•O
·~
1 .1 :
EJEMPLO 4-14 :, 5.
•CALCULO REPETITIVO DEL FACTORIAL DEN ~ 0
.,
"O

Función entera FACTOR(N) e


-~
inicio ~
e::
Entero N; .,"
si N = O entonces
FACTOR-!
<-· 1 N 1: l <-· 1 .... 1 • 1 jj "O
,g
:~ ITIJ
además 1 1 1 &. o
FACTOR- N • FACTOR(N - 1) 1
~~
E
8
~o

tlIP
fin .lj ....
e:: u z
Los contenidos de la pila durante la realización de esta función para N = 3 se muestran en la '8. -~
- ., ....~
Fig. 4-8. Se suPone una llamada por valor. e::..., bi,
~ ¡;;
El mismo subprograma se puede implantar como una subrutina FACT (N , F) , o
como se muestra en la Fig. 4-9.
La solución repetitiva a un problema es una alternativa para una solución itera·
tiva, la cual puede deplorar una ejecución repetitiva de una secuencia de instruc·
cienes con el uso de bucles. En el Ej . 4-15 se muestra un algoritmo repetitivo para la
Subprogramas y programación modular 105
104 Filndamentos de programación
2. Obsérvese la correspodencia entre los parámetros actual y formal en el caso cuando sucede
el intercambio:
FACT N corresponde a M ; y M a N
(N, F)
Los algoritmos repetitivos se usan por su claridad y facilidad de expresión ; son
Fabo
por lo general de cualquier forma , más costosos que sus equivalentes iterativos en
términos d~ tiempo de ejecución y de espacio de memoria, debido al uso de pilas
para los registros de activación múltiple.
En un lenguaje de programación sin la facilidad de la repetición, como el
FORTRAN , se puede usar Ja repetición incluyendo explícitamente las rutinas de
manipulación de pilas en el propio programa. De todos modos, se tiene que conocer
el tamaño máximo de las pilas cuando se escribe el programa.

D. LA -f'.'HOGRAMACION MODULAR Y SUS VENTAJAS

Los subprogramas externos son módulos independientes a panir de los cuales se


Fig. 4-9. pueden construir programas mayores. La programación modular es un diseño dis·
·t¡.¡~ •
ciplinado de programas a través de un proceso de identificación, definición e
obtención del máximo común divisor de dos enteros como una alternativa para la implantación de módulos de los cuales se va a construir un programa. Es ºmejor lle·
solución iterativa estudiada en el Ej. 3-10 . varios de una manera de arriba-abajo : por la especificación consecutiva de las ta·
reas del programa en cada detalle fino a través de una serie de refinamientos de su al-
goritmo.
EJEMPLO 4-15 De esta manera, durante los primeros pasos del proceso de refinamiento por eta-
Se presenta una forma repetida del algoritmo de Euclides estudiado en el Ej . 5-10 . pas (véase Ja Sec. 3-F), los módulos esenciales del programa son identificados. en
cambio, mientras que lo son, la seudocodificación de los niveles inferiores puede ser
*FORMA REPETITIVA DEL ALGORITMO DE EUCLIDES necesaria , etc. Así se completa una descomposición modular del programa. Como
*SE USA PARA DETERMINAR EL MAXIMO COMUN DIVISOR
se puede concluir, un programa complejo (a menudo llamado un sistema) tiene una
*DE DOS ENTEROS estructura jerárquica, con el programa principal en su apéndice, y con los módulos
Función entera GCD (M, N)
de nivel superior invocando a los de nivel inferior para llevar a cabo tareas
inicio especificas.
Entero M, N, REM;
*INTERCAMBIE NUMEROS , SI ES NECESARIO
Es recomendable que cada módulo tenga definida claramente una función
simple por realizar. El nivel inferior del módulo, es el más restringido· para esta fun-
si M < N entonces
GCD - GCD (N, M) *!* ción. Esto hace más fácil Ja implantación y mantenimiento del programa (si se ne·
*DEFINJCJON REPETITIVA cesita una modificación, sólo será necesario cambiar los módulos que afectan las
además funciones).
inicio El proceso de diseño modular de arriba-abajo se ilustra por el ejemplo siguiente,
REM - M - N • (M + N); que introduce dos herramientas imponantes para tal diseño: los diagramas de
si REM =O entonces estructura y las tablas de interfases .
GCD-N
además
GCD - GCD (N, REM) EJEMPLO 4-16
fin Problema
fin Se va a diseñar un programa para el mantenimiento periódico de un archivo maestro . En otras
palabras, se van a poner al dia los registros reunidos a través de un periodo de tiempo en un
Notas ' ' llamado archivo de transacción, para ser reflejado en el archivo maestro; .de manera que se
l. Obsérvese como aproximadamente esta forma de expresión se parece a la descripción ver· genera un nuevo archivo maestro .
bal del algoritmo dada en el Ej . 5-10 .
106 Fundamentos de programación Suhprogramas y programación m odular 107

Explicación y análisis
· En este ·punto hemos definido la necesidad de cinco m ódulos en nuestro programa. Estos
Un archivo maestro (por ejemplo, el archivo de nómina de una empresa) consiste de un nú·
módulos se m uestran en el diagrama de estructura de la Fig. 4-1O; durante los pasos su cesivos
mero de registros (en el ejemplo , uno por empleado). Cada registro contiene un número de lW
del refinamiento se puede encontrar que éstos requieren módulos de nivel inferior. Obsérvese
campos (por ejemplo , el nombre del empicado , el pago semanal, etc.), con uno de éstos úni-
que el algoritmo de investigación binario (véase el Ej. 3-17 se puede adaptar p ara el módulo
camente se identifica el registro dentro del archivo (por ejemplo , el número de seguridad so-
cial). Este campo es llamado la clave del archivo . El archivo maestro se clasifica en la clave. INVESTIGUE.
Los registros del archivo de transacción también son identificados por la misma clave. De
\-:
este modo, un archivo de transacción para mantenimiento de la nómina puede incluir el re· Programa principal
gistro de un empleado nuevo con su número de afiliación del seguro soci&L En general , el
~ Obtenga
archivo de transacción contendrá tres clases de actualizaciones:
N úmero la siguiente
modificación de un registro maestro ("se elevó el pago del empleado"); transacción
de interfase
"tl


suspensión ("el empleado fue separado");
inserción ("se contrató un e~pleado nuevo"). 3
La naturaleza de la actualización es uno de los campos en el registro correspondiente.
El sistema que se va a diseñar es completamente simple . El archivo maestro chico se puede
INVEST IGUE MODIFIQ UE DE DE BAJA INSERTE
leer por completo en la memoria. Dado que hay pocos registros en el archivo de transacción ,
éstos no son clasificados. Investigue
Modifique ~de baja Inserte el nuevo
para el registro
el archivo el archivo archivo
Descomposición modular de arriba-abajo maestro
m aestro maestro
maestro
l. descripción inicial del algoritmo: o su Jugar

*MANTENIMIENTO DEL ARCHIVO MAESTRO CLASIFICADO


inicio :-. ~'f
Fig. 4-10. Diagrama de estructura .
Entrada archivo maestro;
PrOC'!JIC todas las transacciones contra el archivo maestro; ~ Conforme avance el diseño, se establecen las interfases entre los m ódulos (por ejemplo; los
Salida del nuevo archivo maestro ,, datos intercambiados como los parámetros y bloques globales accesibles) . Estos se deben colo·
fin ";Í ;;' car juntos en una tabla de interfase de la forma mostrada abajo.
2 . primer refinamiento del algoritmo;
*MANTENIMIENTO DEL ARCHIVO MAESTRO CLASIFICADO
inicio paramétros parámetros acceso a los
Número de
Entrada archivo maestro; ;1,r.:'· la interfase de entrad a de salida bloques globales
*PROCESE TODAS LAS TRANSACCION ES CONTRA EL ARCHIVO MAESTRO
mientras que hay más transacciones haga correspondiente abajo del arriba del nom bres de
inicio a éstos del d iagrama d iagrama los bloques
Entrada de la siguiente transacción; diagrama de la
Investigue para el registro ínaestro con la clave estructura
especificada por la transacción ;
*SI NO HAY REGISTRO, EL UNICO QUE LO PUEDE PRECEDER SE DEBE LOCALIZAR
si la transacción es modificar entonces La programación modular t iene las ventajas siguientes como alternativas para el
Modifique al registro maestro código en línea recta.
además
si la transacción es dar de baja entonces (1) Visualización de un programa como una estructura jerárquica de módulos
dé de haja el registro maestro responsables de las tareas de criterio de d iseño m ás fácil de manej ar.
además (2) El producto de tal diseño es más fácil de comprender y modificar.
*LA TRANSACCION ES Insertar• (3) La organización del diseño se simplifica debido a Ja posibilidad de su subd i·
Inserte el nuevo registro maestro visión muy significativa .
fin; Si Jos módulos se comunican mediante interfases definidas claramente ,
Salida del nuevo archivo maestro ya que una interfase es la extensión de Ja información necesaria para
fin
implantar el módulo sobre el resto del programa.
_¡¿;j
108 Fundamentos de programación

(4) Un módulo se puede usar en varios Jugares en el mismo programa y, fre·


cuentemente, en varios programas . Para que sean aplicables, los módulos
tienen que desarrollar funciones bien definidas.
~

5
(5) Los módulos se pueden trasladar y probar por separado. Esto hace más fácil
una implantación del programa. Representación
(6) Si se tiene que modificar un programa modular (¡un hecho frecuente en
programación!), sólo puede ser. necesario cambiar ciertos módulos. de Datos Simples.
~
La programación modular da por resultado ahorros en el esfuerzo de programar. .t Introducción a las Estructuras
espacio de Ja memoria y con frecuencia tiempo de traslado . También aumenta la
confiabilidad de Ja programación producida, debido al uso múltiple de los módulos de Datos
chicos que son más sencillos de probar.
El costo de Ja modularización casi siempre incrementa al tiempo de ejecución ¡¡ :;~--
debido a Ja invocación de subprogramas. f¡
~
La composición de datos y Ja lógica de los algoritmos que utilizan Jos datos están re·
Jacionados estrechamente.
La representación en Ja memoria de la computadora de los datos simples del ti·
po estudiado en el Cap . 2 se presenta aquí. Una representación más detallada de los
datos numéricos, que puede ser de interés especial para un programador de len·
guaje de ensamble, se presenta en el Apéndice A .
Las partidas de datos simples se pueden organizar en estructuras de datos que
contengan información sobre las relaciones entre las partidas incluidas ..
·Un arreglo son dos estructurºas básicas, una estructura homogénea consta de ele·
mentos del mismo tipo; y un registro , una 'estructura heterogénea que puede
incluir .partidas de varios tipos. Las estructuras de datos de orden superior, se
pueden formar a partir de registros, incluyendo listas lineales (en particular, frac-
ciones y pilas), árboles y gráficas .
. _ El uso responsable de las estructuras de datos en la programación produce algo-
ritmos que son más claros y concisos, y por tanto, simplifican el programa total.
Una estructura que casi siempre aparenta el programador de un lenguaje de alto
nivel como una partida de datos no estructurada es una línea de caracteres. Las
lineas son las representaciones de cómputo del texto. Su importancia como estruc·
turas ha crecido con Ja computadora , siendo usadas cada vez más como un procesa ·
dor de información simbólica general. La representación y procesamiento de lineas
se estudian en la última sección de este capítulo.

A. DATOS SIMPLES
Los datos de un tipo simple se almacenan en una variable del tipo correspondiente.
el tipo de una variable determina el rango de los valores que pueden ser adquiridos
por l:sta durante la ejecución de un programa.
Los lenguajes de programación del más alto nivel requieren que el tipo de va·
riables usadas en un programa sea declarado. Las declaraciones se usan para asig·
nar la memoria·a estas partidas de datos, así como para determinar qué operaciones
les son aplicables."
p
¡ -
110 Fundamentos de programación
t Representación de datos simples. Introducción a las . ..
t 111

Determinados lenguajes (por ejemplo, ALGOL 68, Pascal, SNOBOL) les permi- EJEMPLO 5-1
ten a los programadores definir sus propios tipos de datos especificando el conjunto Las computadoras de 16 bits (muchas minicomputadoras son de esta clase) permiten enteros
de valores que se le pueden asignar a las variables correspondientes. en el rango de -52 767 a 52 767 ; las computa~oras de 52 bits (por ejemplo, las máquinas de
los sistemas/ 560-570 de IBM tienen un rango de .:!:. 2 147 485 647.
El significado de una palabra de datos se determina entonces no sólo por la codi- El rango se puede ampliar mediante la prográmación. ·
ficación binaria almacenada en eila, sino también por el tipo de datos que se dice
contiene.
Se debe recalcar que aunque un programador de lenguaje de alto nivel está libre 2. NUMEROS REALES
de los detalles de la representación de datos, en la mayor parte de Jos programas de
aplicación, de _c ualquier ÍOl"Il!a el conocimiento de esta representación es necesario,
En programación, cuando una variable es declarada real, no se excluye la posibili-
para que un programador sea experto en un lenguaje de alto nivel o para usar un
dad de que tome el valor de un entero. La declaración implica simplemente una
lenguaj~_ de ensamble.
representación diferente de la variable, un diseño para incrementar su rango y pre-
Para representar Jos datos numéricos, casi todos los lenguajes proporcionan tipos
cisión. Los números reales se almacenan en las memorias de la computadora usan-
de datos enteros y reales. Algunos proporcionan también números complejos y de
do la representación de punto flotante, la cual es una versión de la llamada nota-
doble precisión. La mayor parte de los lenguajes le permiten al programador usar
ción cientffica. Esta representación •consta de dos partes: la mantisa (o fracción
datos lógicos y caracteres; pocos Je permiten el uso de indicadores y niveles como ti-
decimal), que da los dfgitos contenidos en el número; y el indice de escala, llamado
pos de datos.
el exponente (o característica), que determina el lugar del punto decimal con res-
Cienos lenguajes permiten la iniciación de variables, una asignación de valor
pecto a estos dígitos. · -• · ·-· .
inicial en una declaración.
.:.
EJEMPLO 5-2
1. ENTEROS --..
En el sistema decimal ,
Los enteros no tienen parte fraccionaria y por lo general, se representan en la me-
moria de la computadora como números de punto fijo, por ejemplo, números cuyo 123 000 = 0.123. 10'
punto decimal está en una posición fija con respecto a los dígitos del número. En el donde O. 125 es la mantisa y 6 el exponente;
Apéndice A-4 está contenido un estudio más detallado ·de la representación de nú-
0.00151 = 0.1 51 • 10-•
mero de punto fijo.
Aunque en matemáticas los enteros son un subconjunto de los números reales , donde O. 151 es Ja mantisa y -2 el exponente.
los dos son tratados de manera diferente en el cómputo aritmético debido a lama- Es evidente que la rafz (base) es JO .
yor sencillez con la que se pueden representar y manejar los enteros. Dado que un
entero N, por lo general, ocupa una palabra simple en Ja memoria de un modelo de En general, en esta representación, un· número X se representa como:
computadora, el rango de enteros es X= M. RE

N ~ 12•-I -11 donde M es la mantisa, R la rafz y E el exponente.


Puesto que la rafz en una representación de punto flotante está fija para una
donde n es el número de bits en una palabra de esta computadora. Esto se debe al computadora dada (generalmente es 8 o 16), basta almacenar la mantisa M y el ex-
hecho de que un bit está reservado para la representación del signo. ponente E para describir el número X por completo. (Véase el Apéndice A-5 para
mayores detalles de la representación de punto flot ante. )
Con x bits, se pueden especificar 2' diferentes modelos de bi'ts. Por ejemplo, si .. Para formar la representación de un número único y para retener el número
x = 2, tenemos: 00, 01 , 10, 11. Si agregamos un tercer bit, el número de modeios se- máximo de dígitos en la mantisa, por lo general, se lleva a cabo la normalización.
rá el .d oble, para la mitad de ellos este tercer bit será igual a O, para el resto igual a l. Esto significa que en la representación de la mantisa, el bit más significativo es uno
Las operaciones aplicables son las operaciones aritméticas de suma, resta, mul- diferente a O. La normalización se lleva a cabo cambiando el punto decimal, y por
tiplicación y división entera. El resultado de la división entera es un entero, ya que tanto, cambiando el valor del exponente.
se descarta Ja parte fraccionaria. Las variables declaradas como reales se almacenan como números de precisión
Si el resultado de una operación aritmética está fuera del rangó permisible para simple,_por ejemplo, ocupan una palabra simple. Para una base dada, la precisión
la computadora dada , se dice que ocurre el rebasamiento y el resultado se invalida. de un número está determinada por el número de dígitos en su representación.
• ,. 11111

112 Fundamentos de programación '


R epresentación d e datos simples. Introducción 'ª las ., .
113
Las operaciones aplicables a los números reales son la suma, la resta, la multipli-
Con sólo incluir el cambio de representación, \lÍla conversión del modo entero al real
cación y la división (ordinaria). es clara al programador.
En una representación de números reales en cualquier computadora, sólo se
puede representar un conjunto finito de números. Por tanto, un número infinito de La conversión del modo real al entero se puede.1levar a cabo de dos maner as:
números reales (de precisión alta) existe entre dos números reales cualesquiera (1)
representados en la memoria de una computadora. En consecuencia, los resultados Por truncamiento, por ejemplo, eliminando la parte fraccionaria del nú -
mero real.
de cualquier operación se deben considerar sólo aproximadamente. (2) Por redondeo al valor entero más próximo.
Nunca pruebe una relación usada en una cláusula si o mientras que para
igualar exactamente dos números reales, al menos uno de ellos debe obtenerse co-
mo resultado de una operación aritmética. En panicular no se debe hacer prueba El redondeo se puede expresar algoritmicamente com o sigue:
de igualdad a O.O de tal número. si X>O entonces
Dos fallas posibles en la aritmética real son: inicio X- X + 0.5; trunque X fin
además
(1) Infraflujo (underflow)•: la cancelación de dos números no iguales aproxi- inicie X,_ X - 0.5; trunque X fin
mados pero de signos: opuestos como resultado de una adición (llamado
también pérdida del significado). Los programadores deben desarrollar máxima precaución cuando usen la arit -
(2) División a través del rebasamiento (overflow)** : originada por un divisor mética de modo mixto: deben desarrollar la conversión por sí mismos o dej ar que se
pequeño. haga .automáticamente.

Evitar las relaciones de prueba tales como 4. NUMEROS COMPLEJOS

Cuando es~án disponibles como tipos de datos, los números complejos por lo gene-
X/Y< DELTA

donde DELTA es muy pequeño. En su lugar exprese esto como: ral se representan en dos palabras que contienen, separadamen~e. las pan es real e
unaginaria del número. Cada pane es un número real, representado en el modo de
punto flotante.
X< Y• DELTA

En las aplicaciones comerciales, en ocasiones se representa a los números reales 5. NUMEROS DE DOBLE PRECISION
en el modo de punto fijo. Esto deja el control sobre el punto base con el programa-
dor (y es útil, por ejemplo, en la representación de dólares y centavos).
~s números de doble precisión están disponibles como un tipo de datos en algunos
lenguajes y constituyen un caso especial de los números reales.
. Se usan dos palabras para representar un número de doble precisión en el modo
de punto flotante. Generalmente, la segunda palabra contiene a los bits menos sig-
3. ARITMETICA DEL MODO MIXTO
nificativos de un exponente extendido. Esto aumenta la precisión del número sin
incrementar su rango.
Si está permitida la aritmética del modo m ixto en la implantación de un lenguaje ;..:
de programación dado, en una expresión se pueden mezclar tipos diferentes de va- 6. · DATOS LOGICOS
lores numéricos. En panicular, las constantes y variables enteras y reales se pueden
usar juntas.
Una variable lógica puede tomar sólo uno de dos valores: verdadero o falso, repre·
Esto significa que el número de conversiones se realiza cuando es necesario, del
modo entero al real y viceversa. Estas conversiones se llevan a cabo de manera auto-
~tados como l y O. Por tanto, una panida lógica puede ocupar un bit simple , sin
embargo, en la implantación de la mayor pane de los lenguaj es, una panida de da-
mática, por ejemplo, en el respaldo del software de sopone como los traductores. tos lógicos simple se coloca en su propia palabra.

• Generación de un va)or inferior al mlnimo aceptable. En una operación aritmética, generación de una 7. CARACTER DE DATOS
cantidad demasiado pequeña para que pueda ser almacenada por el registrador. (N. del T.)
•• En una operación aritmética, generación de una cintidad que rebasa la capacidad del registro; estado Los caracteres son componentes de líneas de caracteres, una estructura de datos im-
en que se rebasa la capacidad de representación de números.,(N. del T.) ;.( ponante estudiada en la Sec. J de este capítulo.

"'
114 Fundamentos de programación

Representación de datos simples. lntroducczon a las.
Un carácter como una partida de datos es la representación interna de un carác- 115
ter imprimible o de control en la memoria de la computadora. 8. INDICADORES Y NIVELES
El conjunto de caracteres de una computadora por lo general incluye:

Cienos lenguajes de nivel superior permiten el uso de orientadores como partidas de


datos.
(a) 26 letras mayúsculas latinas.
(b) 26 letras minúsculas latinas .
(c) 10 dígitos arábigos. Un nivel es la orientación de una instrucción de programa; y un 1'ndicador es la
orientación de otra partida de datos.
(d) Caracteres imprimibles especiales (signos aritméticos, de puntuación, etc.).
(e) El blanco (espacio). Los indicadores se usan en la organización de las estructuras de datos (véase el
Cap. 5-6). El uso de niveles como variables es incorrecto (conduce a programas
(f) Caracteres de control (no imprimibles), como el retorno de carga, la ali· automodificables) y es preferible evitarlo. .
mentación de la línea, etc.
Por lo general, estas orientaciones se mantienen en palabras de la memoria
simple.
Para representar el conjunto de caracteres de una computadora, se usan los có-
digos binarios.
Dos de los códigos más frecuentemente usados son : B. ESTRUCTURAS DE DATOS

(a) ASCII (Código estándar americano para intercambio de información)*. Es- Los algoritmos operan en datos que répresentan hechos sobre el mundo real. El al-
te es .u n código de 7 bits (véase el Apéndice B-1); por tanto sólo se pueden goritmo y el dato, unidos detenninan los resultados de la ejecución del programa,
representar 128 caracteres. También existe una variación del código de 8 están en una relación simbiótica : la mayor parte apta en la composición de datos
bits. para la aplicación dada, el más sencillo de los algoritmos para su procesamiento.
(b) EBCDIC (Código de intercambio decimal codificado binario ampliado)** . Por tanto, para simplificar el algoritmo, es más deseable a menudo organizar .los
Este código que ha ganado gran aceptación, fue desarrollado por IBM. Co- datos en entidades lógicas de orden superior que en variables simples; estas entida-
mo un ~ódigo de 8 bits (véase el Apéndice B·l), hace posible la representa· des son estructuras de datos. En otras palabras, una estructura de datos es una co-
ción de 256 caracteres. lección organizada de partidas de datos simples. En consecuencia, están caracteri-
zadas por:

Al número arbitrario de bits (que comprende una unidad operacional de infor·


mación), representando cada uno un carácter simple en una computadora dada, es (I) El tipo de partidas de que constan.
nombrado en ocasiones un byte. Aunque la mayorla de los códigos de caracteres ac· (2) Las relaciones entre estas partidas.
tuales constan de 8 bits, un byte casi siempre tiene 8 bits de longitud. En algunas
computadoras, como la IBM Sistema/ 360-370 o la PDP-11, los bytes tienen su pro-
pia orientación y se puede tener acceso a ellos independientemente de la palabra EJEMPLO 5-3
que contengan .
El código binario determina el orden de los caracteres mediante la secuencia de Se va a diseñar un programa para simular la operación de un centro de cómputo.
los valores numéricos asignados a ellos. Este orden, llamado la secuencia cotejada, ·!'.- Los algoritmos de simulación usan datos que recuerdan la llegada de trabajos para proce-
determina el orden en el cual se clasifican los datos alfanuméricos cuando se aplica sar. Se genera una cantidad de tales unidades de datos; cada una da el trabajo al llegar, re-
la clasificación numérica. Por ejemplo, en el EBCDIC, la secuencia parcial está en querimientos de los recursos de cómputo, etc. Después, el programa imita el procedimiento
de .estas tareas generadas artificialmente por el sistema de cómputo que se está simulando.
orden creciente, espacio , caracteres alfanumfricos de la A a la Z, y en.d!gitos del O
El programa ganará en claridad y sencillez si los datos permiten que cada trabajo se orga-
al 9.
nice en una entidad .simple, un registro. Sin embargo, es prudente arreglar tales registros en
Las lineas de caracteres se crean, ya sea, por la colocación secuencial de los ca- estructuras de datos de orden superior a las del modo de primera entrada-primera salida
racteres en las palabras consecutivas de la memoria o enlazando los caracteres en las
·dÍad~ I~
'cPEPS) conforme al tiempo de llegada del trabajo que representan. Como estructura, estu-
palabras consecutivas de la memoria o enlazando los caracteres consecutivos en una '".) ](. posteriormente en esta sección, se llama una fracción .
línea (véase la Sec. J).

-<-.: Ciertas estructuras de datos (como arreglos o lfneas) están disponibles directa-
"rnente· al programador en la mayor parte de los lenguajes de programación de or-
~Cn
•Del inglés: American Standard Code for Information lnterchangc . (N . del T.)

.. .
" Del inglés : Extended Binary Coded Decimal lnterchange Code. (N. del T.) superior usados con amplitud; otros se pueden construir usando variables
' '.,simples y estructuras disponibles .
116 Fundamentos de programación
Representación de datos simples. Int roducción a las . . . 117
Un arreglo (de una o más dimensiones) y un registro son estructuras de datos bá-
sicas. Un arreglo trae juntas panidas de datos simples del mismo tipo al que hacen . Cuando las partidas de datos simples que forman una estructura son menores
referencia, su nombre-colectivo (el nombre del arreglo), y por sus notas, que identi- que las palabras de Ja_memoria, pueden ser empacadas: varias panidas se pueden
fican sus posiciones dentro del arreglo. Los arreglos de las lineas de .caracteres son colocar en una palabra simple. Puesto q~e no se pueden orientar directamente (sólo
una palabra o un byte lo pueden ser), se tienen que definir por medios de progra-
también imponantes. ~ación. '
Un registro puede consistir de panidas de datos simples de varios tipos así como ·-
de lineas de caracteres. Estos datos de integran en una entidad simple ya que descri· EJEMPLO 5-4
ben atributos de los objetos del mundo real descrito por el registr9, Por lo general,
el registro dado se selecciona de las estructuras de orden superior por el valor de una Un arreglo de datos lógicos (cada uno de 1 bit de longitud) se puede empacar en pala bras de
de sus panidas (llamadas también campos). ·· 16 bits colocando 16 elementos del arreglo en una palabra simple.
Las variables simples; los registros y los arreglos, en ocasiones se pueden organi·
zar en estructuras de orden superior. Estas estructuras a menudo son dinámicas, lo Existen dos métodos básicos de colocación en Ja memori;: para las estructu; as de
orden superior, tales como listas.
que significa que durante la ejecución del programa que las está usando, algunos de
sus componentes pueden ser eliminados y otros incorporados; las re]aciones entre ·C~ando
;1" se usa una representación secuencial, los componentes de las estruct uras
ae·datos se colocan err posiciones consecutivas de la memoria. Las ·relaciones entre
los componentes también pueden cambiar.
Las estructuras de orden superior incluy~ las listas lineales (y, en particular, sus
~to;"componentes están implkitas en sus posiciones con resp~to
a las ot~as:
formas restringidas como pilas y fracciones), árboles y árboles binarios y graficas '!iiJfLa .altemativa es la representación de enlace en la que cada co~ponente
-·l ·':. ,-
de la
(redes). ~t~ctura de datos incluye una o más partidas adicionales; éstas establecen su rela-
Estas estructuras se usan para organizar a los datos que se mantienen en la me· ~~5'>I!- a los componentes que las rodean. Las panidas de datos en línea son indicado-
moria principal así como para mantener a los datos que predominan·en la memoria :;• ,· t~¡Jll~ados también enlaces) , que contienen la orientadón de la memoria de las
secundaria. Las colecciones de datos residentes en el archivo secundario están orga·
~'.. .r,·;.. otras panidas en la estructura .
nizados en entidades autocontenidas llamadas archivos, a menudo se usan con va· ,. ':s:~ En la Fig. 5-1, el componente A está indicando al componente B, lo cual signifi-
rias estructuras de orden superior. La organización de archivos se estudia en el . ~a que el valor almacenado en la posición del indicador es 50, que corresponde a la
Cap . 10. f' ~~ri~;1_1tación de la priinera palabra del componente B.
El capítulo presente introduce las estructuras de datos a nivel conceptual, sin el ... <' Los indicadores (enlaces) establecen la organización de las estructuras de datos.
espacio dedicado a los algoritmos para su manejo. Su significado depende de la estructura y se estudia con más detalle en la descrip-
ción de varias estructuras de datos en este capítulo.
;;~· La representación secuencial es rígida ya que la eliminación de los componentes
C. ORGANIZACION LOGICA Y FISICA DE LAS ESTRUCTURAS
.~.de la estructura, y la inserción en ésta se pueden hacer solamente con cargo a la re-
DE DATOS .·~ -prganización fisica de la estructura en la memoria. Por tanto es aplicable cuando la
-. :composición de la estructura no cambia significativamente durante la ejecución del
La memoria de la computadora consiste de palabras con orientación consecutiva. ·. ~ programa.
Cada palabra está formada de bits, el número de éstos en una palabra está determi·
La representación de enlace es flexible, en ésta para llevar a efecto los cambios
nada por un modelo de computadora dado.
estructurales basta cambiar tan sólo unos indicadores. En consecuencia, es apro-
Las estructuras de datos constan de partidas de datos simples apropiadas para el
piada para las estructuras de datos dinámicas. El costo de la flexibilidad es el espa-
programa en el que se van a usar. Las relaciones entre estas partidas (tales como se·
cio de la memoria y el tiempo requerido para mantener los indicadores, ya que son
cuencia, prioridad, etc.), forman una pane de la estructura. elementos estructurales exclusivamente.
J~
Si una estructura de datos disponible directamente en un lenguaje de programa·
ción dado (como por ejemplo, los arreglos que están en FORTRAN) , Ja representa· indicador
·-~·,,,
ción de esta estructura está establecida por el traductor del software. Si la estructu·
ra no está disponible, el programador la tiene que construir de los tipos de datos otr~ - __
disponibles.
Dado que la estructura de datos se: tiene que colocar en las palabras de la memo· ~-··
ria, cada estructura está caracterizada por su organización lógica. (relaciones entre 100 50~
sus componentes según sean requeridos para su aplicación) y su organización física orientación de la memoria
(colocación en Ja memoria).
Un indicador.
118 Fundamentos de programación
Representar:z6n de datos simples. Introducczon a las.
119
Cuando se usan las ubicaciones de enlace, la cantidad de memoria disponible E. REGISTROS
para la estructura de datos se divide en dos panes. Una mantiene a Ja estructura co· ,.,..;.-

mo existe en la actualidad y la otra (llamada espacio disponible) constituye un gru·


po de componentes "vacíos" . Cuando se necesita un espacio para un componente Un registro es una colección de partidas de datos de varios tipos. Estas partidas son
nuevo, éste lo adquiere del grupo ; cuando un componente existente no es mayor llamadas frecuememente los campos del registro y se les hace referencia por sus pro-
que el requerido, su espacio se regresa al grupo. Con alternación, los componentes ,:¡._ pios nombres. Los campos pueden estar compuestos por sí mismos, teniendo sus
no necesarios son reunidos periódicamente para regresarlos al grupo . propios subcarnpos. Cienos campos de un registro pueden contener lineas de carac-
teres que son estructuras de datos en su propio terreno (véase la Sec. J).

D. ARREGLOS EJEMPLO 5-6

Un arreglo es una colección ordenada de panidas de datos simples del mismo tipo.
UnFig.
la registro
5-2 . personal de un empleado puede constar de los campos y subcampos mostrados en
Lógicamente, un arreglo puede tener varias dimensiones, lo _q ue significa que sus
elementos se pueden identificar por varios subindices. (Para ÚJCl estudio más amplio
de la .organización y uso de los arreglos lógicos, véase la Sec. 2-C-2.)
La organización fisica de los arreglos, generalmente es secuencial debido a que Número de afiliación
sus componentes rara vez cambian durante la ejecución del programa. Puesto '
del Seguro Social nombre
que los arreglos están disponibles por lo regular a un programador de lenguaje de
// ~
dirección
casado

/\~
alto nivel como 'una estruétura de datos "lista", la colocación de los arreglos en Ja
memoria es llevada a cabo por el software de los sistemas.
Existen dos métodos de colocación de archivos: el orden de renglón mayor, usa-
do en la mayor parte de los lenguajes, cuando el último subindice cambia más rá -
.. apellido
materno
apellido
patemo• nombre
/
calle ciudad estado
código
postal
pido , y el orden de r:olumna mayor, usado en FORTRAN, donde el primer índice
cambia más rapido . ~
número nombre
de la calle de la calle

Fig. 5-2.
EJEMPLO 5-5

En seguida , se muestra un arreglo bidimensional A(I :3, 1 :2 ) colocado en los órdenes de


En este registro , las partidas como el apellido paterno o la ciudad son datos de caracteres ,
renglón mayor y de columna mayor . A Ja izquierda de cada una están las or ientaciones d e
mientras que el número de afiliación del Seguro Social o el código postal son enteros, y "casa-
memoria supuestas . do " es una partida lógica.

En oposición a los registros , los arreglos son homogéneos (consisten de un tipo


simple de datos) y sus elementos no tienen que tener sus propios nombres, siendo
100 A{l,I) 100 A(l , I) identificados por sus posiciones en el arreglo.
101 A{l,2) 101 A(2,l) Un registro proporciona información sobre varias características de los objetos
102 A(2, I) 102 A(3,I) del mundo real que describe. Cada campo describe uno de los atn'butos de este ob-
jeto.
103 A(2,2) 103 A(l,2)
. Un registro es identificado generalmente por su r:lave, uno de los campos selec-
104 A(3,I) 104 A(2,2) cionados con el objeto de dar acceso a la información contenida en el registro . Con
105 A(3,2) 105 A(3,2) frecuencia , se mantiene a los registros en el orden correspondiente a los valores de tal
clave; esto significa que se clasifican en la clave. Si una clave es para identificar un
orden renglón mayor orden columna mayor registro, no puede haber dos registros que tengan el mismo valor de la clave.
r:~

;:---
Se supone que se coloca un elemento por palabra . • Se(N.
rente. cambio el orden de los apellidos de la versión inglesa, ya que en español se escriben en orden dife-
del T.)
~"-'----·~~~~~~~-----'~~~~~~~~~

120 Fundamentos de programación Representación de datos simples. Introducción a las . . . 121

EJEMPLO 5-7 Por Jo general los registros están organizados en archivos q u e son mantenidos en
el archivo secundario y cuyas partes se introducen ·en Ja memoria principal cuando
En una colección de registros personales, el número de afiliación del Seguro Social de un
es necesario. Los archivos son Ja organización de datos básica en el proceso de infor-
empleado puede servir como clave.
mación (Véase el Cap. 10).
En un lenguaje de alto nivel en el que Jos registros pueden ser declarados como
estructuras de datos (como el COBOL o el PL/ I), se usa el sangrado para especi- F. LISTAS LINEALES
ficar el nombre del registro, sus campos y subcampos. Los niveles de un registro es-
tán también numerados , como se muestra en el ejemplo inferior. Una lista lineal es una secuencia finita de partidas de datos simples o registros (por
simplicidad, a los elementos de Ja lista se les llama nodos). Cada uno de los nodos en
EJEMPLO 5-8 una lista forma una secuencia (con excepción del primero y del ú ltimo) que tiene un
sucesor y un predecesor únicos.
Se puede usar la declaración siguiente para declarar el registro EMPLOYEE del Ej. 5-6.
EJEMPLO 5-9
01 EMPLOYEE (EMPLEADO)
02 NUMERO S.S. Los registros en un directorio telefónico ~onstituyen una lista lineal. Cuando los nodos de una
02 NOMBRE lista están colocados en la memoria de manera secuencial, se obtiene una tabla.
03 APELLIDO PATERNO Si el directorio telefónico de una empresa se mantiene en la memoria de una computado·
03 APELLIDO MATERNO ra , se puede almacenar en una tabla mostrada a continuación, donde se supone que cada re-
03 NOMBRE gistro ocupa l O posiciones de la memoria.

02 DIRECCION POSICION DE APELLIDO EXTENSION


03 CALLE LA MEMORIA PATERNO NOMBRE TELEFONICA
04 NUM. DE LA CALLE
04 NOMBRE DE LA CALLE 100 ABRAMS GEORGIA 1234
03 CIUDAD
03 ESTADO 110 JONES CAROL 5312
03 ZONA POSTAL 120 SYKES JOSEPH 0750
02 CASADO
130
-WILKES PETER 2312

Este registro se puede representar en Ja memoria como se muesta a continuación. La alternativa de una colocación fisica de una lista lineal es una lista enlazada,
cuya estructura general se muestra en Ja Fig. 5-3 .
Núm. Nombr< El primer nodo en Ja lista está señalado por una posición especial llamada un enca-
Núm. Apellido Apellido Casado
Nombre de la de la Ciudad 1 útado 1 Zona bezado de la lista, m ientras que el último nodo se puede reconocer· por el hecho de
s.s. paterno materno
call• call•
postal
que su indicador (llamado indicador n ulo) no contiene una orientación válida. Esto
por Jo general, se muestra gráficamente con el símbolo eléctrico d e "tierra", y e l va -
Observe que sólo los campos elementales y los subcampos son almacenados fisicamente. Los lor actual almacenado puede ser, por ejemplo, -1.
subcampos compuestos son entidades lógicas.
encabezados de la lista
Por lo general, flsicamente los campos de los registros son almacenados en posiciones campos de información el último nodo
de archivo consecutivas, con frecuencia en forma de paquetes.
/ /
Algunas aplicaciones requieren registros de longitud variable, debido a la longi-
tud variable de un campo (como el APELLIDO PATERNO) o a un número va-
riable de campos (como el NOMBRE).
~ . .4
Cuando los registros se usan como elementos de estructuras de datos de orden
indicador nulo
superior suficientemente pequeños para mantenerlos en la memoria principal, a
menudo se les llama nodos de la estructura. Fig. 5-3. Lista enlazada (forma general).
-------------~--·· ------ ·~--- · - :..............: •.,,__J_·_~.'.- -" ••. ~-~-_...-~ .... ~-- .... .'..-....-

Representación de datos simples. Introducción a las . .. 123


122 Fundamentos de programaáón
. También es m(ls simple dividir una lista enlazada o unir dos listas enlazadas que
Por lo general, una lista est{I ordenada por uno de sus campos, para que se realizar operaciones similares en una lista secuencial (tabla) . Sin embargo, el acceso
pueda tener acceso al nodo deseado (por ejemplo, buscar e identificar para obtener a un nodo "aleatorio" es mli.s simple en una lista secuencial cuando no es necesario
sus contenidos). El orden de la lista secuencial est(I implícito en las posiciones fisicas
el acceso múltiple en orden de valores indicadores para "mover haCia abajo las
de los nodos en la memoria. En una lista enlazada, el orden lo ponen los indicado- lineas".
res. En conclusión, cuando la composición de una lista lineal cambia considerable·
mente durante la ejecución del programa, se usan las listas enlazadas.
EJEMPLO 5-10 Los registros de la lista a menudo se clasifican sobre los valores de sus claves para
asegurar en orden la investigación eficiente de un nodo en particular. La clasifica -
En la figura siguiente se muestra una lista enlazada correspondiente a la tabla en el Ej.
5-9 . Se supone que se desea en la lista el orden alfabético de los empleados. Este orden surge
ción e investigación son operaciones sumamente comunes en el procesamiento de
como resultado del movimiento de personal en la compañia. datos y por tanto, existen muchos algoritmos. Estos son aplicables con modifica·
dones menores a ambas listas , secuencial y enlazada.
ENCABEZADO POSICION DE APELLIDO EXTENSION INDICADOR En el Ej. 5-11 se estudia un algoritmo de clasificación de burbuja ampliado y
DE LA LISTA LA MEMORIA PATERNO NOMBRE TELEFONICA (ENLACE) otro de investigación binario, prcsent(lndose éste como una alternativa mejor para
una _investigación ¿ecuencial, en el Ej_. 5-17.
~ 100 JONES CAROL 5312 130
Dos variaciones importantes del esquema de la lista enlazada son:
110 ABRAMS GEORGIA 1234 100
120 WILKES PETER 2312 -1 (a) Lista enlazada doblemente, sus nodos contienen dos indicadores, el de la
130 SYKES JOSEPH 0750 120 derecha apunta al sucesor del nodo, y el de la izquierda a su predecesor
(Fig. 5-5) . Es posible rastrear la lista en ambas direcciones. La inserción y
eliminación se simplifican también.
Obst!rve que la misma información está contenida en ambas estructuras. Sin embargo , en
(b) Lista circular (anillo), su indicador final no es nulo pero apunta al primer
el caso de la lista enlazada, aqu!, la estructura lógica de la lista no está restringida por su posi-
nodo. Cualquier nodo se puede alcanzar desde cualquier otro en esta lista.
ción flsica en la memoria . De modo que, cuando los empleados son contratados o despedidos,
no es necesario reordenar la lista , sólo cambiar los valores de enlace. Observe también que..,
requiere un campo adicional (enlace) en la lista enlazada para mantener la información
estructural.

Las operaciones t!picas realizadas en una lista lineal son: ·;\

(a) Inserción o eliminación de un nodo .


(b) Unión de dos listas o separación de una lista simple .
(c) Acceso a una partida identificada por su clave.
Fig. 5-5. Un anillo de doble enlace .
La eliminación o inserción de un nodo en una lista secuencial involucra una can-
tidad considerable de movimientos de datos , mientras que en el caso de una lista
enlazada se requiere sólo un cambio de uno o dos indicadores, respectivamente
G. FRACCIONES Y PILAS
(véase la Fig. 5·4). En eso se basa la ventaja esencial de las estructuras enlazadas .
Las fracciones y pilas est{ln restringidas a las listas lineales con aplicaciones impor-

:. A r - - ~ indicador viejo

;o0;."~·-
tantes.
Una fracción es una lista lineal en la que se permiten las inserciones sólo en un
extremo (llamado la cola de la fracción) y las cancelaciones en el otro extremo (lla-

~-; 1+4 1~ li--


1 .-
mado el frente de la fracción) .
-4 En la Fig. 5-6 se muestran las fracciones secuenciales y enlazadas.
Una fracción se usa para representar eventos que van a ser considerados por el
(a) interci6n de un nodo A (b) eliminación de un nodo A
~- programa en el orden en que sucedan éstos. Por ejemplo, puede ser usada para si-
mular la operación de un centro de cómputo en el que los eventos son las llegadas
Fig. 5-4. Manejo de una lista enlazada.

.
.., _ ____......._ •• • ••• 1-< -'-"'·--···

•~

6f
124 Fundamentos de programación
Representación de datos simples. Introducción a las. 125
frente de la fracción

CQ
cola de la fracción
una pila hasta que llegue el momento de arrojarlos y seguir la trayectoria de Ja eje·
registro registro
cución que estos datos representan. Las pilas a menudo se usan en la programación

11(Í1 1t 1
t {
éÍH:nu • ~
de sistemas, particularmente para implantar la repetición (véase el Cap . 4-C).

frente cola . . . 1::... H. ARBOLES Y ARBOLES BINARIOS


~ ehmmac16n inserción
eliminación \ inserción
(b) fracción enlazada
• Un árbol es una colección de nodos que consiste de un nodo especial llamado la
(a) fracción secuencial
~ raíz, la cual no tiene predecesor, y es posible, que de un número fi11ito de sucesores
de la rafz. Cada uno de los sucesores, si parte de la raíz, es en su momento , Ja rafz de
Fig. 5-6. Fracción. otro árbol.
Esta definición repetitiva se aplica a cualesquier de las estructuras mostradas en
~.
la Fig. 5-8, en donde los nodos de los árboles .se muestran simbólicamente como
de trabajos (véase el Ej. 5-5) o para representar los bienes disponibles con propósitos
clrculos. Obsérvese que los árboles de "cómputo" se muestran con sus ralees sobre
contables cuando se usa un régimen de primera entrada-primera salida (PEPS).
las ramas.
Una pila es una lista lineal en donde las adiciones y eliminaciones suceden en un
extremo simple, llamado la parte supen·or de la pila. Las representaciones conven-
~-
cionales de la pila se muestran en la Fig. 5-7 . J

~
Las operaciones de la pila son llamadas empuje y salto en lugar de inserción y ~ hojas~
0
eliminación , respectivamente. ~~ \
En una pila, las partidas diferentes a la de la parte superior son inaccesibles. : (a ~

Puesto que las partidas son empujadas siempre en la parte superior de la pila y la \ I
última partida empujada será la primera en ser aventada, una pila es una estruc-
~'
'' /
/
tura de datos-de última entrada-primera salida (UEPS). ' _,..
Una pila se usa frecuentemente en el diseño de programas, cuando durante la
ejecución de un programa surgen posibilidades múltiples y todas éstas se tienen que
Fig. 5-8. Arboles.
seguir. Ya que sólo una trayectoria de ejecución se puede seguir a la vez con un pro-
cesador simple , los datos que representan otras trayectorias son empujados sobre
Las lineas que conectan los nodos muestran la organización lógica de la estruc-
. . pane superior de la pila tura del árbol dado .
eliminación mscrc1ón
(salto) (empuje) Mientras que un nodo de una lista lineal puede en general tener un antecesor
/' { y un sucesor simples, un nodo de un árbol, diferente a Ja raíz, tiene un antecesor y cual-
pane superior (pane superior) qwer número jinito de sucesores. En la estructura de un árbol, a un antecesor se le llama
padre; y a un sucesor, hijo .
Las estructuras de árbol se usan para representar cualquier diversificación de las
relaciones entre las partidas de datos, como la composición jerárquica de datos (por
ejemplo, el diagrama de organización de una empresa o de conjuntos sangrados

pane inferior
LJf , ,. .;.. ., , ~
que consisten de conjuntos más chicos que en su turno pueden incluir sus propios
subconjuntos) o árboles de decisión (en particular, árboles de juego).

EJEMPLO 5-ll

A menudo se programa a las computadoras para jugar juegos de mesa como ajedrez o back-
(a) pila =uencial (b) pila enlazada gammon (juego de chaquete). En tales juegos, la computadora "ve el encabezado" de varios
movimientos en orden para seleccionar su mejor movimiento contra su oponente humano. En
Fig. 5-7. Pila.
la Fig. 5·9 se muestra un árbol de juego .

. Ja
- - - -- - - --~- - --~~ --- ---~~~~--
---~~~--~~~~---~~~~~~~~--~~---·- ·~·--~--

126 Fundamentos de programación Representarión de datos simples. Introdurrión a las . . 127

posición de la mesa actual


Uno de los tres posibles métodos transversales es el transverso preponderado, de-
finido repetidamente como sigue: entra la raíz; atraviesa su subárbol izquierdo en el
preorden; cruza el subárbol derecho en el preorden.
X
movimientos posibles por la computadora
EJEMPLO 5-12

X Los nodos del árbol en la Fig. 5-JO(c) serán tomados en Ja siguiente secuencia durante el cruce
respuestas posibles por el humano
del preorden:
f
~puestas posibles por la computadora
ABCDFE
X X
La representación flsica de los árboles puede ser secuencial, en que los nodos del
posiciones del tablero que son ganadas por la computad~ra
caso estén colocados en la memoria en un orden lineal impuesto por un cruce o
X movimientos que evidentemente son inferiores; no hay mayor investigación
enlazado. En el caso de posiciones enlazadas, los indicadores (enlaces) se colocan en
el nodo padre para apuntar hacia sus hijos. Las hojas de un árbol tienen indicado-
Fig. 5-9. Un árbol de juego. res nulos (véase la Fig. 5-11, en donde se muestra la representación de los árboles bi-
narios de Ja Fig. 5-10).
De este modo se desarrolla un árbol para una trayectoria deseada.

~
Los árboles generales , en los que un padre puede tener un número finito de hi-
jos, son algo dificiles de manejar. De todos modos, se pueden convenir fácilmente
a otra estructura de datos, llamada un árbol binario, el que se puede manejar con
mayor facilidad .
Un árbol binario es una estructura de nodos que está vada o que consiste de una
ra!z y de dos árboles binarios que salen de él. Estos dos árboles binarios son llamados
subárboles de Ja raíz . Esta definición repetitiva se aplica a cualquiera de las estruc-
turas mostradas en Ja Fig. 5-10 .
Muchos algoritmos requieren que cada nodo en un árbol binario tenga acceso
(a) (b) (e)
exactamente una vez; como proceso de rastreo se le llama transversal del árbol.

Fig. 5-11. Los árboles binarios (representación enlazada). Obsérvese que los indicadores


corresponden a las ramas del árbol.

l. GRAFICAS

e Una gráfica (llamada también red o malla) es un conjunto de nodos y ramas conec-
tados. Las ramas definen la relación entre los nodos en el contexto de una aplica·
ción dada.

(a) (b) (e) EJEMPLO 5-111

Para representar los datos para un programa de inventario, puede ser necesario mantener la
información que relaciona las partes a los productos que las usan. Tal información se puede
mantener convenientemente en las ramas de una gráfica mostrada en la Fig. 5-12.
Fig. 5-10 . Arboles binarios.
---·-------· • ¡
. .. • .. ··11 " -. · 1 ......

128 Fundamentos de programación Representación de datos simples. Introducción a las... 129

pane 1
J. LINEAS DE CARACTERES Y SU PROCESAMIENTO

La.s lineas de caracteres están disponibles directamente como Wla estructura de datos en la
mayor parte de los lenguajes de nivel superior de propósito general. F.! procesa-
miento de un texto, por ejemplo, los datos del carácter, como distinto al cómputo
Fig. 5-12. Una gráfica. numérico, es un campo siempre extenso. ·
Los caracteres de una línea están representados , como se estudió en la Sec. A- 7,
con el uso de un código binario, de 7 u 8 bits por carácter. Para formar una línea se
Aqui una rama significa: .. esta parte va en la fabricación de ese producto". almacenan estos caracteres como una estructura de datos secuencial o enlazada, co-
mo se muestra en la Fig. 5-14.
Alguna aplicación requiere gráficas din.gidas (diagráficas), en la.s que cada ra- La longüud de la línea (es decir, el ñúmero de caracteres en ella) se almacena
ma está dirigida. ca.si siempre en la palabra precedente en el caso de la representación secuencial y en
el encabezado de la línea en el caso de la enlazada.
~
EJEMPLO 5-14 El uso de la memoria adicional en la representación adicional está compensado
por la flexibilidad en el proceso. Por ejemplo, si nuestras líneas tienen que ser edita-
Una gráfica dirigida puede representar un diagrama PERT, usado en la administración de das en 'UNA LINEA MAS LARGA' con la inserción concomitante de 7 cáracteres
proyectos . En esta digráfica los nodos significan eventos, que se completan durante .la realiza - (¡los espacios también son caracteres!), se tendrá que seguir un movimiento signifi-
ción de un proyecto , y los cortes , las actividades de evento a evento. Los cortes se gradúan cativo de datos en una línea de almacenamiento secuencial.
conforme a la duración de estas actividades ; por ejemplo , en dias (véase la Fig. 5-l!l}. Las siguientes son las bases del procesamiento en línea.

(1) Una constante de línea se encierra entre comillas simples; por ejemplo :

'A STRING' (.. Una linea")

La.s comillas no son pane de la línea. Esta es una linea vacía:", cuyo uso en
el procesamiento en la linea asemeja el uso del O en el manejo aritmético.

byte
~ ,tespacio

Fig. 5-l!l. ~~~


palabra palabra palabra palabra
encabezado 1 2 3 4
Así, una gráfica sirve para determinar la ruta critica del proyecto. (a) represencación secuencia)

Las gráficas se usan para representar cualquier red del mundo real, tales como NG
las tuberías, redes telefónicas, o cualquier red de actividades de la.s que una gráfica
palabra 1
PERT es un ejemplo. ~ '--v----" '----v--' ~
Una gráfica es la estructura de datos más general, ya que cualquier nodo de és- nodo 1 nodo2 nodo3 nodo4
ta puede ser conectado a cualquier otro nodo , o inclusive a si mismo. (b) representación cnluada
La repi:esentación fisica de la.s redes en la memoria es usualmente enlazada, con el valor almacenado es 'UNA LINEA'
los enlaces correspondientes a los eones de la red. La representación secuencial es "·~-
posible descomponiendo una red en árboles, pero es inevitable por lo regular la ·~~~

duplicación de ciertos nodos. Fig. 5-14. Representación de una linea e,; la memoria. El valor almacenado es 'UNA LI-
NEA'. Se supone que una palabra. almacena dos bytes en esta computadora.
i.·'., !"~7':.(•. ' l ' ' ' ~ • . .,.....,,. ::I"~ ... ' j

130 Fundamentos de programación Representación de datos simples. Introducción a las . 131

(2) Un carácter del tipo variable cuyo valor es una linea que puede ser decla- pulares aseguran que las letras del alfabeto están en orden (1 < 2 < _._<
rado como sigue: 9) , y los espacios en blanco son más chicos que Jos de letras y digitos.
Por tanto, considerando los valores en nuestro ejemplo de corrida, du-
NOMBRE del carácter rante Ja ejecución de la instrucción

Generalmente también es posible declarar arreglos y funciones cuyos valo- si (NOMBRE < " A.ABRAMS') entonces
res sean lineas de caracteres.
En lenguajes con ubicación de memoria estática (véase la Sec. 4-B-2) ,
la longitud máxima de cada entidad por tipo de carácter se tiene que
. declarar; si su valor es más cono que su longitud, las posiciones a la de- además
recha se rellenan con espacios. En los lenguajes con ubicación de memoria
dinárriica, la longitud actual de cada entidad se puede determinar por su
valor presente.
(3) Es posible la asignación de una linea (o de un valor de una expresión en Ja rama además se debe seleccionar _
linea valuada) a un tipo de carácter variable; por ejemplo,
lAs funciones interconstruidas operan en lineas que usualmente están dis-
NOMBRE - ' V .ZWAZZ' ponibles en los lenguajes de nivel alto que proporcionan el procesamiento
de la linea. Aquf se estudian dos de las funciones más útiles; ambas ope-
(4) La concatenación (la unión entre sí) de dos llneas es una de las opera- ran en cualquier expresión de linea valuada.
ciones esenciales en las expresiones de llnea valuada. Por ejemplo, indica- (a) LEN(linea) regresa Ja longitud de Ja llnea. De esta manera, consi -
da como / /, la operación derando la variable anterior NOMBRE.
LEN(NOMBRE) regresa el valor a 7.
linea 1 I I línea 2 (b) INDEX(llnea sujeto, linea modelo) determina cuál de las lineas
modelo está contenida como una sublfnea en la linea sujeto . La in-
que agrega la linea 2 al final de la linea 1, por ejemplo. vestigación de una linea modelo en una linea sujeto, realizada por
esta función , es denominada igualación de modelos. Esta función
NOMBRE - 'V .'// 'ZWASS' regresa el valor de O si no se encuentra el modelo; de Jo contrario, se
regresa un entero indicanrlo su existencia ("primero") en el sujeto.
produce una linea 'V.ZWASS' como el valor de la variable NOMBRE. Por ejemplo.
(5) Una sublínea (una pane continua de una linea) se puede extraer de una
linea estableciendo el principio y fin de la sublinea deseada en paréntesis INDEX (NOMBRE, 'V .Z') regresa O (¡observe estos espacios en blanco!);
siguiendo el nombre de la linea. INDEX ('TARTAR', 'TAR') regresa l.
Los caracteres de la linea se consideran numerados de izquierda (1) a
derecha. Algunos lenguajes hacen posible Ja sustitución de Ja linea modelo , si se en-
De modo que en el ejemplo anterior:
cuentra en Ja linea sujeto , por otra, llamada linea objeto.
Un complemento amplio de Jos medios para el procesamiento de lineas, está dis -
NOMBRE(4: 5) tiene el valor 'WA'
NOMBRE (1 :1) tiene el valor 'V'
·' ponible en los lenguajes diseñados especialmente para este propósito, de los cuales
el mejor conocido es el SNOBOL
El ejemplo siguiente ilustra el procesamiento dé linea.
La asignación siguiente

INIT - NOMBRE (U)/ / ''. EJEMPLO 5-15


Problema
produce el valor 'V.Z.', ya que éste es del tipo de carácter variable INIT. Un nombre se presenta con los nombres completos dados; es posible cualquier número de
(6) lAs líneas se pueden comparar con el uso de la secuencia de cotejo del có- nombres dados. Los nombres dados serán reemplazados por sus iniciales. Por ejemplo , la
digo de carácter (véase la Sec. A-7 de este capitulo). Todos los códigos po- entrada: WYSTAN HUGH AUDEN resultará en la salida: W .H.AUDEN .

'lt ·
f
132 Fundamentos de programación

Solución
•EL ALGORITMO REEMPLAZA A LOS NOMBRES DADOS POR INICIALES
•COMPLETO - nombre original
•NUEVO - nombre con iniciales
inicio
Carácter COMPLETO. NUEVO;
Entrada COMPLETO; Salida COMPLETO;
NUEVO - "; •INICIE COMO LINEA VACIA*
*CONTINUE LA JNVESTIGACION DE ESPACIOS EN BLANCO EN EL NOMBRE
ORIGINAL*
l<- INDEX(COMPLETO. ");
Parte Dos
mientras que (I 'F O)haga •ENCONTRO ALGUN ESPACIO EN BLANCO*
inicio
NUEVO<-NUEVO // COMPLETO (l:I)". *MANTENGA EL INICIAL* CONCEPTOS
COMPLETO - COMPLETO(! + I : LEN(COMPLETO)) ; ELIMINA EL
NOMBRE DADO• DE LOS SISTEMAS
l <- INDEX(COMPLETO. ") *ENCUENTRE EL ESPACIO EN BLANCO
SIGUIENTE* DE COMPUTO
fin;
NUEVO ..... NUEVO / / COMPLETO; •AGREGUE EL ULTIMO NOMBRE*
Salida NUEVO
fin
Notas

l. Observe que el algoritmo trabaja correctamente para un nombre sin algún nombre
dado.
2. Trace la operación de este algoritmo sobre cualquier nombre.

SUGERENCIAS PARA LECTURAS MAS PROFUNDAS

Knuth, D. E.: .fundamental Algorithms, 2nd ed. Addison-Wesley, Reading, Mass.,


1973.
Un clásico. éste es el primer volumen de una serie de siete volúmenes de "The Art
of Computer Programm1ng". Las estructuras de datos se analizan en el Cap. 2 de
este libro.
Jiorowitz, E., and Sahni, S.: Fundamentals of Data Strucrures, Computer Sciencc:s
Prcss, Woodiand Hills, Caiif., 1976.
Se estudia la estructura de programación.
Tremblay, J.-P., and Sorenson, P. G.: An lntroduction to Data Srructures, McGraw-
Hill, New York, 1976.
Un estudio enfático sobre aplicaciones; además de otros tópicos, un fino análisis de
la manipulación de la linea.
Gotlieb, C. C., and Gotlieb, L. R.: Data Types and Struct,,res, Prentice-Hall, Engle-
wood Cliffs, N.J., 1978.
.. t.';~ . 1 • • • •i~ ,-;>,

¡.1.;

LA CIENCIA DE LA COMPUTACIONES un estudio de los aspectos teóricos y


prácticos del diseño y uso de las computadoras. Con la aplicación cada vez más cre-
ciente de las computadoras, esta ciencia se ha _desarrollado y ampliado rápidamen-
te. En esta parte del libro, ~hace un intento pór introducir los conceptos clave del
campo.
Los programadores encuentran conveniente presentar algoritmos a una compu-
tadora en un lenguaje de nivel superio!·s~os¿~nguajes hacen posible expresar una
solución a un problema en una manera cercana J:clativamente a las formas huma-
nas de comunicación mientras sean precisas y"~la~~ .d e expresión. Se ha introduci-
do un gran número de tales lenguajes, aunque sólo unos cuantos de ellos están en
uso predominante. Un programa escrito en tal lenguaje se puede transferir con faci-
lidad a un modelo de computadora d iferente al usado originalmente.
Cuando se necesita economia en los recursos de la computadora, por otra parte,
se usa el lenguaje de ensamble. Dado que este lenguaje se.acerca al lenguaje de má -
quina de la computadora en particular, el programador está capacitado para
controlar de manera más directa el uso de los recursos del sistema de la computado-
ra. Sin embargo, la programación de los lenguajes de ensamble es la de mayor de-
manda, y los programas no son compatibles de un modelo (o serie) de computadora
a otro.
Ninguno de los programas escritos en lenguajes de nivel alto ni en lenguajes de
ensamble son ejecutables directamente por erhardware de una computadora. Se re-
quieren los programas de software para traducirlos a las instrucciones propias de
una computadora dada, es decir, en su lenguaje de máquina, directamente ejecu-
table por su unidad de procesamiento central. Los traductores para los lenguajes de
nivel alto (compiladores e intérpretes) son significativamente más complejos que los
de lenguajes de ensamble (ensambladores) debido a las ventaj as adicionales extensi-
vas por el programador de lenguaje de nivel alto.
Un sistema de cómputo comprende una variedad de recursos del hardware; los
sistemas múltiples son en algunos casos organizados en redes. Para crear en orden
un ambiente apropiado para la ejecución de los progra.'llas de aplicación, se
requiere un software extenso. En particular, todos los recursos de un sistema de
cómputo son manejados por el llamado sistema de operación.
e ' t 1· dtd t • b· , • -~· , .; ~ ....._, .. f .'"" 'í?· +ée·... ._.:·-,~ "e &' \;°• ¡,• ¿,",, .. , ·¡ +' •• ,.¡._ '.._ •• ·,. ,,-••·• •, ;. ... - , :.,•.'·" • . : , •• •·.•:; · . o~~.:~·:·.;:. ·::' +• ~. ~._ •

136 Conceptos de los sistemas de cómputo

De manera que los sistemas de operación, traductores y otros sistemas del soft-
ware median entre el usuario y el hardware . En algunos sistemas, partes del softwa-
re son almacenadas permanentemente en memorias especiales (microprogramadas)
para convertirse en el llamado almacén de respaldo.•
6
Mientras que el diseño del hardware de varios modelos de computadora difiere ,
los principios generales de las organizaciones de los sistemas de cómputo han emer- Los Lenguajes de Nivel Alto
gido. Con la excepción de la entrada/ salida y ciertos dispositivos secundarios y de
memoria masiva , las unidades funcionales de las computadoras están construidas y sus Traductores
de dispositivos electrónicos. Los componentes básicos de éstos son los circuitos de
conmutación con dos estados alternos. A menudo se les llama de lógica de cómpu·
to.
Junto con el hardware y el software, cada vez más y más importantes recursos de
muchos sistemas de cómputo están organizando colecciones de datos relacionados
con las aplicaciones para las que se usa el sistema . Este recurso se maneja también
por programas de software especializados: los sistemas de administración de archi-
vos o base de datos. En la actualidad el núcleo de la programación se hace en uno de los lenguajes de ni-
Como en otras disciplinas ciendficas, la ciencia del cómputo ha evoluci~nado vel alto, mejor que en el lenguaje de ensamble, particular al modelo de computado·
sobre bases teóricas . Estas incluyen la teoria de cómputo (lo que pueden hacer o no ra dado (véase el Cap . 7) . La programación en un lenguaje de nivel alto es más fácil
las computadoras), la teoría de los algoritmos y m complejidad , la teoría de los len- de aprender , y Jos programas son más fáciles de implantar, comprender y modifi-
guajes formales, y el estudio de las estructuras algebraicas principales, entre otras car, ya que las instrucciones son una extensión autodocumentable. Otra ventaja es
materias, a la teoria de los circuitos de conmutación. la portabilidad de tales programas debido al uso amplio de los lenguajes principa ·
les .
La facilidad de la programación de los lenguajes de nivel alto está relacionada al
costo de una dificultad relativa en la traducción del programa. Los traductores pa·
ralos lenguajes de nivel alto so~ significativamente más complejos que los traducto·
res para lenguajes de ensamble, llamados coordinadores. Ei proceso de traducción
por sí mismo consume más tiempo de la CPU y usa más memoria que el ensamble, y
el código traducido es por lo general menos eficiente que un programa escrito en
lenguaje de ensamble. La mayor parte de los ienguajes de nivel alto son traducidos
por las computadoras que convierten por completo el programa fuente en un
programa objeto antes de su ejecución. Ciertos lenguajes (a menudo aquellos con
instrucciones complejas) son traducidos y ejecutados instrucción por instrucción por
los intérpretes. Este tipo de traductores no produce el código objeto y requiere más
recursos del sistema tales como tiempos de la CPU y de la memoria principal, pero
ofrece ventajas importantes al programador: el cómputo interactivo y una mejor
detección del error.
Se presenta un examen de los lenguajes de nivel alto más importantes. Este repa·
so resume las áreas de aplicación y la especificación de cada lenguaje.

A. EXAMEN DE LOS LENGUAJES DE NIVEL AL TO

En este examen se incluyen los lenguajes de uso general amplio o de importancia en


un área especializada de cómputo. El desarrollo de estos lenguajes comenzó con la
llegada del FORTRAN, siendo el lenguaje más extendido, a mediados de la década
• Del ingl&: firmware. (N . del T .) de 1950.
138 Conceptos de los sistemas de cómputo Los lenguajes de nivel alto y sus traductores 139

Las primeras áreas de aplicación de estos lenguajes son de: El ALGOL 68, cuyo diseño cubre muchas generalizaciones teóricas de los con-
ceptos del ALGOL, es dificil que sustituya al ALGOL 60.
• Propósito general: PL/I, Pascal, ALGOL 68.
• Negocios: COBOL, RPG.
• Ciencia e ingeniería: FORTRAN, ALGOL, APL. 2. APL
• Computación interactiva: BASIC, APL, LSP.
• Procesamiento simbólico: SNOBOL, LISP. El APL es un lenguaje poderoso con ventajas distintivas. Se usó primeramente en el
• Simulación: SIMSCRIPT, GPSS, CSMP. medio cientffico, y también en el administrativo. Un científico o un ejecutivo a me-
• Computación personal: BASIC. nudo encuentran el lenguaje fácil de aprender y simple de usar debido a la breve-
dad de expresión y a la naturaleza interactiva.
Los lenguajes usados en las ciencias e ingeniería tienen instalaciones extensivas El poder del APL radica en su capacidad de la manipulación de los arreglos. El
para el manejo de datos numéricos.
arreglo es la estructura de datos básica del lenguaje, y tiene disponible un número
Los lenguajes orientados a negocios están acoplados al manejo de volúmenes de operaciones para tratar con todos sus elementos en forma simultánea. Por
grandes de datos, que se almacenan en los dispositivos de memoria secundarios. Por ejemplo, un operador simple cuenta el número de elementos del arreglo, otro cam-
tanto, estos lenguajes necesitan instrucciones de entrada/salida para la interacción bia sus columnas. - •·. ·
con tales dispositivos e instalaciones para la edición y nuevo arreglo de los datos or- Los sistemas APL son interpretativos y requieren un término especial, ya que se
ganizados en archivos almacenados en estos dispositivos y para la extracción de re- usan símbolos especiales y algunos caracteres griégos para indicar los muchos opera-
súmenes y la apropiada impresión de los repones.
dores del lenguaje.
El procesamiento simbólico, siempre en crecimiento, abarca el manejo de los La ejecución interpretativa de un programa APL demanda mucho tiempo de la
textos y listas de flujo libre.
CPU. Por tanto, el uso del APL ventajoso en donde se tiene que manipular arreglos
El cómputo interactivo necesita un lenguaje de Interpretación, con la conside- grandes con un número moderado de operaciones de entrada/ salida, y el programa
rable conveniencia de que la programación se lleva a cabo con el incremento de cos- resultante no 'le tiene que correr en una base frecuente y regular.
to en· Ja CPU y en el uso de la memoria principal.
La siguiente instrucción APL calcula el promedio A de un vector X (un arreglo
Un programador familiarizado con los conceptos generales de los lenguajes de de una dimensión simple):
programación, presentados en los Caps. l al 5, y expeno por lo regular en uno
de los lenguajes usados, encontrará que es una tarea relativamente simple aprender A-(+/X) + pX
otro lenguaje.

donde la acción de los operadores es como sigue:

1. ALGOL pX: el número de elementos en X


+/X: la suma de los elementos de X
+:división
Este lenguaje, llamado más precisamente ALGOL 60, ha tenido una influencia - : asignación
considerable en el desarrollo de la ciencia de cómputo, aun cuando ha sido sólo de
uso práctico limitado en los E.U.A. Los paréntesis son necesarios ya que los operadores se aplican en el APL de de-
Debido a que el lenguaje fue el primero en ser definido con precisión en un me- recha a izquierda y no hay operador precedente .
. talenguaje [llamado forma Backus-Naur, o notación BNFJ, se ha usado extensa-
mente para la descripción de algoritmos (más que para la implantación).
Las instalaciones de manipulación de datos del ALGOL son semejantes a las del 3. BASIC
FORTRAN, ya que ambos lenguajes fueron planeados para aplicaciones
cient!ficas. Por tanto, ambos lenguajes permiten una codificación más simple de las El BASIC es un lenguaje interactivo fácil de aprender para un grupo amplio. Aun
fórmulas de cómputo en las instrucciones de asignación. cuando el lenguaje es interpretativo, su simplicidad genera un costo bajo del uso de
Sin embargo, las estructuras de control del ALGOL son más generales; el len- la computadora.
guaje tiene estructura a bloques y permite el uso repetitivo de los procedimientos, El BASIC es similar al FORTRAN, pero contiene mucho menos estructuras de
estas ventajas son respaldadas por la localización del archivo dinámico (véanse los control y tipos de datos y permite los subprogramas no externos.
Caps. 4-B y C). La llegada del cómputo personal ha incrementado el atractivo del BASIC.
140 Conceptos de los sistemas de cómputo Los lenguaj es de nivel alto y sus traductores 141

4. COBOL El COBOL es un lenguaje estandarizado ; dado que tales estándares son volunta-
rios, las instalaciones proporcionadas por varios compiladores en general coinciden.
Esto simplifica el traslado de programas de un modelo de computadora a otro .
El uso predominante en el medio administrativo, debido al manejo de archivo ex-
tensivo, edición y capacidades del COBOL de generar repones , ha hecho a este len·
guaje el más frecuentemente usado de todos. 5. FORTRAN
El lenguaje se diseñó para ser aproximado al inglés. Un programa COBOL es
para una autodocumentación de extensión grande apropiada a su sistema de subdi- El primero de los lenguajes de nivel alto usado ampliamente, el FORTRAN , conti-
visiones y al uso de identificadores grandes (los nombres de los niveles y variables núa siendo de gran importancia en computación. Un lenguaje de propósito gene-
pueden contener hasta 30 caracteres) . ral , su uso principal es en la ciencia e ingeniería ; sin embargo se utiliza práctica- .
mente en cada medio .
Un programa de COBOL consta de cuatro divisiones:
Para proporcionar Ja portabilidad del programa, se ha estandarizado el len-
(1) División de identificación: identifica el programa y al programador. guaje. Sobre la base del primer estándar voluntario se ha desarrollado Ja versión
(2) División de ambiente: debe contener_toda la información.dependiente de FORTRAN IV del lenguaje.
la máquina, como nombres del modelo de la computadora, de los disposi- Las necesidades de aplicaciones no numéricas trajeron el desarrollo de un .nuevo
tivos que almacenan los archivos , etc. estándar, llamado FORTRAN 77 , basado en gran medida en los compiladores
(3) División de datos: describe completamente todos los datos usados por el W ATFOR y W A TFIV para el lenguaje. Se proporcionaron las instalaciones para
programa y les permite ser estructurados jerárquicamente. un procesamiento simbólico y un manejo de archivo más sofisticado.
(4) División de procedimiento: la especificación del algoritmo.

La más característica de los programas COBOL es la división de datos , un ""--.


6. LISP
ejemplo de ésta se muestra en seguida. Los datos están estructurados jerárquica-
mente (aquí, en cuatro niveles) , con la composición de las panidas actuales descri -
El LISP es un lenguaje especializado utilizado casi exclusivamente en Ja compren-
tas por la cláusula PROYECTE,* en este caso ya sea alfanumérico (X) o númer.o
sión del modelo humano y en Ja solución de problemas en las aplicaciones de Ja lla-
decimal (9). Una referencia al programa para cualquier partida de datos incluye a
mada inteligencia artificial. ·
todos los datos inferiores en la jerarquia.
Está diseñado para manipular estructuras de listas (véase el Cap. 5-F) . En el
Un ejemplo de Ja división de datos en un programa COBOL es el siguiente: LISP, una lista es una secuencia de elementos de cualquier clase (palabras , núme -
ros , oraciones, etc .). Estos elementos en sí pueden ser listas, este hecho implica la
01 SUSCRIBA LA INFORMACION naturaleza del LISP .
02 NOMBRE En Ja actualidad , el LISP es interpretado primeramente . Dado que sus datos se
03 APELLIDO PATERNO PROYECTE X(IO) representan como listas enlazadas , los programas de LISP requieren un espacio ex-
03 INICIAL PROYECTE X tenso de la memoria principal.
03 APELLIDO MATERNO PROYECTE X(l 2)
02 DIRECCION
03 CALLE
04 NUMERO DE LA CALLE PROYECTE 9(5) 7. PASCAL
04 NOMBRE DE LA CALLE PROYECTE X(20)
03 POBLACION -ESTADO
El Pascal es un lenguaje de propósito general diseñado de manera muy ajustada
04 POBLACION PROYECTE X(20)
que implanta el control y las estructuras de datos estudiadas en los Caps. 3 y 5. El
04 ESTADO PROYECTE X(2)
04 CODIGO POSTAL
lenguaje fue creado para reforzar la escritura de programas bien estructurados que
PROYECTE X(5)
02 SUSCRITO HASTA sean fáciles de implantar y modificar. La claridad del lenguaje y su instalación de
04 SUBDIA PROYECTE 9(2) detección de errores amplia, da por resultado una implantación de programas
04 SUBMES PROYECTE 9(2) amplia. ·
04 SUBAÑO PROYECTE 9(2) El lenguaje se deriva del ALGOL y tiene la estructura a bloques del ALGOL,
pero proporciona más tipos de datos. Los programadores de Pascal son también ca-
paces de definir sus propios tipos de datos. .
• Del inglb PICTURE . (N . del T .)
142 Conceptos de los sistemas de cómputo ~ Los lenguajes de nivel alto y sus traductores 143

Mientras que en la actualidad se usa casi para propósitos educativos, el uso del
son las asignaciones, desarrolladas para una secuencia en linea (llamada reunión de
Pascal está creciendo, especialmente en la programación de microcomputadoras, y
secuencias (véase el Cap. 5-J), y la sustitución de una secuencia establecida.
este lenguaje con ceneza influirá en la computación en los d!as venideros.
Por ejemplo, considere esta secuencia de dos instrucciones:
Otro lenguaje basado en el Pascal, llamado Ada (de Augusta Ada Lady Lovela-
ce, quien colaboró con Charles Babbage como la primera "programadora"), se ha TITLE = 'MOBY DICK'
diseñado recientemente a iniciativa del depanamento de defensa de los E. U .A. Con TITLE 'MOBY = 'GEORGE'
su potencia particular en las aplicaciones de tiempo real y en la programación de
La primera de éstas asigna a la linea 'MOBY DICK' como el valor de Ja variable
sistemas, se espera que este lenguaje tenga un uso amplio.
TITLE. La segunda instrucción es una sustitución: la secuencia 'MOBY' es compa·
rada con el valor de TITLE, establecido y reemplazado por 'GEORGE'. El valor de
TITLE es ahora 'GEORGE DICK'.
8. PL/1
Las primeras implantaciones del SNOBOL eran interpretativas; ahora también
el lenguaje es agrupado, con una eficiencia' incrementada.
Este lenguaje muy "rico" combina las ventajas de sus antecesores: ALGOL, Las aplicaciones del procesamiento de textos están creciendo, dado que resulta
FORTRAN y COBOL, as! como las instalaciones ampliadas para el procesamiento económico el tener este tipo de computadoras, que mantienen bibliografias y con-
simbólico. El PL/I se puede aplicar en todas las áreas de cómputo. cordancias y, en general, proporcionan textos impresos donde Ja ventaja de la
El lenguaje tiene la instalación DECLARE, para la descripción de datos seme- creatividad humana no es necesaria.
jantes a la división de datos del COBOL. Esta ofrece la estructura a bloques y la
ubicación de archivo dinámico, que puede ser controlada por el programador. Se
incluyen muchos tipos de datos, algunos para respaldar la manipulación de lineas y 11. LENGUAJES DE SIMULACION
listas.
Debido a la versatilidad del lenguaje, en el PL/I los compiladores son muy gran- E.lf:iste una cantidad de lenguajes de propósito especial para ayudar en el diseño de
des y la traducción consume tiempo, lo que limita la aplicación del lenguaje. sistemas sociales y flsicos con el uso de computadoras.
Los modelos de variables continuos representan sistemas que pueden ser descri-
tos matemáticamente y en los que las variables del sistema cambian con suavidad
9. RPG (por ejemplo, los flujos de corriente en un circuito eléctrico). El lenguaje que se usa
a menudo para este propósito es el CSMP.
El acrónimo RPG viene de Generador de Programas de Repone,• lo que expresa la Los modelos de eventos discretos representan sistemas en los que los cambios de
función de este lenguaje. Se usa para escribir la especificación precisa del problema estado son discontinuos, por etapas. Con frecuencia se les llama sistemas fracciona-
dos. En tales sistemas, hay una cantidad de "recursos" para los "clientes" que llegan
más que el programa, que es generado en consecuencia por el compilador. Los len- ~-
con cierta regularidad; a los "clientes" se les colocan entonces los "recursos" durante
guajes como éste se conocen como declarativos (mejor que procesales).
cieno tiempo de servicio, con el mantenimiento de una ciena disciplina fracciona-
El uso del RPG está limitado a Ja generación de repones (resúmenes) de archivos da. La simulación de lo que un sistema hace, con mucha frecuencia es desarrollado
de datos y para Ja actualización de tales archivos. por lenguajes como el SIMSCRIPT y el GPSS. Los lenguajes ayudan a representar
Esencialmente, el compilador modifica un programa preempacado simple para las llegadas, colas y salidas siguiendo el servicio, así como a derivar las estadfsticas
que reúna las especificaciones dadas que incluyen la descripción del archivo as! co- deseadas.
mo las especificaciones de entrada, cálculo y salida.
El lenguaje se usa ampliamente en las instalaciones de procesamiento de datos
chicas. B. COMPILADORES

Un compilador traduce los programas escritos en un lenguaje de nivel alto dado


10. SNOBOL
(programas fuente) a sus equivalentes en lenguajes de máquina listos para su ejecu-
ción (véase la Fig. 6-1).
El SNOBOL es un lenguaje de procesamiento de textos. En otras palabras, es esen-
cial que los datos sean lineas de caracteres. Las operaciones básicas en estos datos programa -·-~ , programa
fuente . objeto
ejeCUtable

• Del ingl& Report Program Generator. (N. del T.) Fig. 6-1. Acción de un compilador.

•'
144 Conceptos de los sistemas de cómput o
L os lenguajes d e nivel alto y sus traductores 145

De cualquier forma, algunos compiladores traducen al lenguaje de ensamble de Después de q ue los simbolos d efin idos por el programador h a n sido sustituidos por los indica-
una máquina dada, de modo que se necesite el ensambie subsecuente (como se dores para las tablas de simbolos de los id entificadores y constantes, la instrucción se transfor-
describe en el Cap. 7-G). ma en , por ejemplo,
El código objeto obtenido como el resultado de la compilación se puede almace-
nar y volver a usar repetidamente. id-55 = id·77 • (id-125 + cons-2)
Aunque los compiladores difieren en sus objetivos de funcionamiento y de dise-
(Naturalmente, la instrucción anterior está modificada para que sea legible .)
ño, constan de una cantidad dejases que transforman consecutivamente el progra-
ma fuente . Las fases iniciales del compilador para un lenguaje de nivel alto dado
son independientes de la computadora cuyo lenguaje de máquina es la tarjeta; éstas 2. ANALISIS SINTACTICO
son los análisis lexicográfico sintáctico y el de generación de código intermedio. La
fase siguiente, Ja optimización, depende de una ampliación en el lenguaje de má-
El separador, pane del compilador responsable del análisis simáctico, identifica la
quina de tarjeta en sus etapas posteriores. Por supuesto, la fase última, la genera-
ción del código es dependiente por completo de esto. estructura gramatical del programa. Este análisis está basado en la definición inter -
construida del lenguaje fuente.
Se cumplen las tareas• siguient es:
1. ANALISIS LEXICOGRAFICO
• La legitimidad de cada instrucción bajo la defin ición del lenguaje es confir-
El propósito de Ja fase de análisis lexicográfico es mada.
preparar la tabla de símbolos; • Se obtiene un árbol separado para cada instrucción y para el programa entero.
depurar el programa de redundancia (comentarios, espacios en blanco, etc.), y
codificar sus instrucciones de manera compacta. Esta fase vital produce el árbol separado para el program a representado a pro-
piadamente en la memoria. En este punto el compilador "ha sobreentendido" el
Se investiga el programa instrucción por instrucción, mientras que se reconocen los programa.
componentes de Ja instrucción. Se distinguen dos clases de componentes. La prime-
ra son los elementos fijos .del lenguaje, como las palabras clave, el vocabulario del El ár bol sep arado de la Fig. 6·2 será generado para nuestra instrucción en el Ej. 6-1 si las
lenguaje (por ejempio, IR A -del inglés GO To ....: , o ENTERO -del inglés reglas comunes d el operador que le p recede son aplicadas:
INTEGER- en FORTRAN), y sus operadores y sigños (por ejemplo , • , = , Y
-del inglés AND-). La otra clase son identificadores (nombres simbólicos) y las
' instrucción ,
constantes de varios tipos; desde luego éstas son hechas por el programador. }~ asignada

------
A todos estos componentes se les llama símbolos. La información concerniente a •'•

/
los símbolos fijos del lenguaje está localizada en las tablas permanentes del compila-

/ exprr~xpresión
dor. Los símbolos definidos por el programador son registrados . en Ja tabla de
símbolos que almacena su nombre y cualidades. Frecuentemente, se crean las
tablas de sfmbolos separadas para diferentes conjuntos de símbolos.
Durante Ja investigación, los símbolos son sustituidos en cada ins.t rucción por in- . ~ "--
exprión 1 expjión expTón
dicadores para sus registros en la(s) tabla(s) de símbolo(s). La salida de la fase es la
secuencia de instrucciones que contienen tales indicadores, sin espacios en blanco o /
id- 55 id- 77 • (id-125 + cons- 2)
comentarios.

EJEMPLO 6-1
Fig. 6-2. Un á rbol separado.
En la instrucción FORTRAN:
A = X •(Y + 10.5)
Com o resultado, la instrucción es identificada como una asignación. El árbol separado
se reconocen los sim bolos siguientes: para el programa se construye a partir de los árboles de instrucción.
operadores y signos: = , •, (, + ,)
identificadores: A , X , Y
constante: 10.5 • El procedim iento es similar a la ~Paraci6n gramatical de un texto de lengua natural.
146 Conceptos de los sistemas de cómputo
Los lenguajes de nivel alto y sus traductores 147

3. GENERACION DEL CODIGO INTERMEDIO 4. OPTIMIZACION

El código objeto se puede generar directamente del Arbol separado. Sin embargo, es
Esta fase opcional transforma el código intermedio y lleva a cabo la economfa en el
ventajoso convertido primero a una forma intermedia seleccionada, en la que se
tiempo de ejecución y en el espacio de la memoria para el programa objeto.
puedan aplicar las técnicas de optimización generales a este código independiente
Algunas de las estrategias aplicadas están realizando una instrucción invariable
de la mAquina.
fuera del bucle, identificando y computando las subexpresiones comunes separada·
En muchos compiladores este código toma la forma del llamado código de orien· mente, etc.
tación del árbol cuyas instrucciones de manipulación para cada dato especifican la
operación y la orientación simbólicas de los dos operandos y del resultado. Tiene
también las transferencias de control incondicional y condicional. 5. GENERACION DEL CODIGO
Cuando lo convertimos a código de orientación del árbol, nuestra instrucción del Ej. 6· l toma
la forma de: Los compiladores mAs modernos generan el código de mAquina ejecutable; algu·
TEMPI - id-125 + cons-2 nos, ensamblan al código para que sea procesado después por un ensamblador.
id-55 - id-77 • TEMPJ Un generador de código localiza cuidadosamente los recursos de la CPU d ispo
nibles y. en general, intenta minimizar el número de accesos a la memoria p rinci
Observe la necesidad clásica de una variable temporal. pal.
Una representación alterna del código intermedio es la notación sufijo (también Suponiendo que los códigos de orientación triple originalmente del Ej . 6· l han sido generados
llamado pulido inverso). como la forma intermedia y que el generador de código considerará cada instrucción de
Estamos acostumbrados a representar las expresiones en la notación infijo, don· orientación triple por separado, se generará la secuencia siguiente• de instrucciones de len·
de el operador se coloca entre los dos operandos a los que se aplica. En la notación guaje de ensamble:
sufijo, un operador sigue a sus operandos. La notación no necesita paréntesis. Una
LOAD 1, id-125
expresión sufijo se evalúa de izquierda a derecha aplicando el operador que se en·
ADD 1, cons-2
cuentre primero a los dos operandos que le siguen, y reemplazando este triple por el STR 1, TEMPJ (•)
resultado. LOAD 1, TEMPJ (u)
MUL 1, id-77
STR ! , id-55
EJEMPLO 6-2
Observe que las instrucciones (• ) y( ..) son innecesarias; deberán retirarse.
Observe la correspondencia entre las expresiones siguientes: (Los indicadores para la tabla de símbolos son reemplazados en esta etapa por la orientación
relativa de los operandos, esto no se m uestra aquf por razones de simplicidad .)
infijo sufijo
a+b ab+ El código objeto se produce generalmente en forma relocalizable; esto significa
a - b •e abc"- que es sujeto de carga y enlace (véase el Cap. 7-G).
(a - b) • (e + d) ab-cd+ •

Observe que el orden de los operandos es el mismo en ambos casos; el orden de los operadores
determina el orden de evaluación.
..\. 6. OTRAS FUNCIONES DE UN COMPILADOR
Continuamos con el Ej. 6·1, una compilación de instrucciones. En la forma con sufijo,
Durante una agrupación se llevan a cabo dos funciones adicionales:
nuestra instrucción de asignación es como sigue:

id-55 id-77 id 125 cons·2 + • = A. LOCALIZACION DE ARCHIVO


Existen algoritmos eficientes para la conversión de la fonr.e del infijo a la de sufi· Para un programa que se va a ejecutar, .se tiene que localizar el espacio de la memo·
jo para todos los tipos de instrucciones. El primer objetivo es convertir las expre· ria para el programa y sus datos (así corno para algunas partidas adicionales). Aun ·
siones aritméticas, que en su oportunidad pueden ser convertidas rApidamente al
código objeto con el uso de una estructura de pilas (véase el Cap. 5·G).
• Puede leer e) capitulo 1iguicntc para comprender cstu instrucciones.

~
~
~f
148 Conceptos de los sistemas de cómputo
Los lenguajes de nivel alto y sus traductores
149
que el programa y los datos actualmente son colocados en Ja memoria por el carga-
programa fuente~
dor (véase el Cap. 7-G), el compilador tiene que determinar los requerimientos de
y datos · ~~ resultados
memoria de un programa. Esta tarea se lleva a cabo durante el proceso de compila-
ción en el caso de los lenguajes que tienen ubicación de memoria estática (como el (a) vista ideal
FORTRAN o el COBOL) cuyos datos son declarados por completo por el progra-
mador, lo que no permite Ja repetición. En el caso de lenguajes. con ubicación de programa "
memoria dinámica (véase el Cap. 4-B-2), como el ALGOL o el PL/ I, la ejecución fu en ce
de un programa puede necesitar espacio de la memoria adicional o liberarla. Las ..; -,

rutinas de soporte del tiempo de operación llevan a cabo la localización de la me-


morja adicional mientras el programa se está ejecutando, siendo por tanto necesa-
rias para terminar esta tarea.
' .- ;

código
intermedio ' datos

. (b) la implantación más frecuente

B. INDICADOR DE ERROR
Fig. 6-3. Acción de un intérprete.

Los errores lexicográficos y sintácticos, descubiertos durante las dos fases de compi- -~

lación, se indican al programador. Los intérpretes se usan cuando:


Un compilador debe proyectar las características de funcionamiento deseables ,
con los objetivos contradictorios que existan. Por tanto, los lenguajes populares (1)
Las ventajas de la ejecución interactiva, tales como las implantaciones de
tienen dos tipos de compiladores:
un programa mejorado, son deseables. Ya que las instrucciones son reali-
zadas "fuera de contexto", la entrada del usuario puede ser aceptada en
• Los compiladores rápidos que casi no optimizan pero ofrecen buena indica-
cualquier punto que se desea durante la ejecución en un medio de tiempo
ción de error. Estos se usan para implantar un programa.
compartido. Esta práctica es respaldada por la capacidad de detección de
• Los compiladores de optimización lenta que producen códigos objeto com-
error superior inherente a los intérpretes, que pueden relacionar con más
pactos para corridas de producción múltiple. facilidad que los compiladores un error a la instrucción afectada.
(2)
Las instrucciones de lenguaje son tan poderosas que su ejecución es
mucho mayor que su traducción (por ejemplo, en el caso del APL) .
C. INTERPRETACION Y SU COMPARACION
CON LA COMPILACION
SUGERENCIAS PARA LECTURAS MAS PROFUNDAS
Los intérpretes traducen y ejecutan el programa fuente instrucción por instrucción.
No producen el código objeto para el programa, aunque al principio la mayoría A. ESTUDIOS COMPARATIVOS DE LOS LENGUAJES
traduce el código fuente a un código intermedio que entonces es ejecutado interpre- DE PROGRAMACION DE NIVEL AL TO
tativamente (véase la Fig. 6-3).
Por consiguiente, la ejecución del programa es controlada por el intérprete que Organick, E. l., Forsythe, A. l., and Plummcr, R. P.: Programming Language Struc-
actúa como si fuera una máquina construida para ]a ejecución de las instrucciones tures, Acadcmic, New York, 1978.
de un lenguaje de nivel alto dado. La interpretación es un método de traducción Se sigue un análisis general a nivel introductorio para la presentación de las
características esenciales del ALGOL, FORTRAN , LISP, SNOBOL y PASCA L.
significativamente más costoso que la compilación, ya que:
Nicholls, J. E.: The Structure and Design of Programming Languages, Addison-
Wcslcy, Rcading, Mass., 1975.
(a) Como no crea el código objeto, cada vez que se corre un programa se nece- Pratt, T. W.: Programming Languages: Design and Jmplementation, Prcnticc-Hall,
Englcwood Cliffs, N.J., 1975.
sita interpretarlo. ·
Tuckcr, A. B.: Programming Languages, McGraw-Hill, Ncw York, 1977.
(b) En un programa dado, es necesario interpretar una instrucción antes de
Un estudio comparativo del ALGOL, FORTRAN, COBOL, PL/I, RPG y SNO -
ejecutarla cada vez. Esto significa que si se incluye una instrucción en un
BOL. El libro puede servir como un texto de introducción en cualquiera de estos
bucle ésta se traduce tantas veces como se ejecute el bucle.
lenguajes para un programador experimentado en cualquier procedimiento de
lenguaje de nivel alto.

1 '-'':

i
J50 Conceptos de los sistemas de cómputo ,:'

B.
TEXTOS SELECCIONADOS PARA LENGUAJES DE NIVEL ALTO
ESPECIFICOS
7
Rutishauser, H.: Description of ALGOL 60. Springer-Verlag, New York, 1967.
Learner, A., and Powell, A. J.: An lntroduction to ALGOL 68 Through Problems, " Introducción
Macmillan, New York, 1974.
Gilman, L., and Rose, A. J.: APL-An JnteractiYe Approach, 2nd ed., Wiley, New ~'
York, 1974.
a los Lenguajes de Ensa~ble
Kemeny, J . G., and Kurtz, T. E.: BASIC Programming, 2nd ed. Wiley, New York,
1971.
Por los diseñadores del lenguaje .
McCracken, D. D.: A Simplified Guide to Structured COBOL Programming, Wiley,
New York 1976.
Una introducción excelente al lenguaje .
Feingold, C.: Fundamentals of Structured COBOL Programming, 3rd ed., Brown, Cada modelo de computadora tiene su propio conjunto de instrucciones: una serie
Dubuque, Iowa, 1978. de operaciones ejecutada directamente por su unidad de procesamiento central. Es-
Una gula completa para el lenguaje . tas operacfones, expresadas en un código binario, constituyen el lenguaje de má -
Zwass, V.: Programming in FORTRAN (Structured Programming with FORTRAN
quina de la computadora. Un programador puede encontrar dificultad para ins-
IV and FORTRAN 77), Harper & Row, New York, 1981.
truir a una computadora en lenguaje de máquina. La programación en un lenguaje
Diseñado para completar este libro.
Hughes, C. E., Pfleeger C. P., and Rose, L. L.: AdYanced Programming Techniques, de nivel bajo como éste da por resultado , de cualquier forma , un programa eficien-
te. Cuando tal eficiencia se necesita, con cargo al incremento del esfuerzo de
Wiley, New York, 1978
Subtitulo del libro: "Un curso secundario en la programación usando el FOR- programación, se usa el lenguaje de ensamble. Una instrucción de lenguaje de en-
samble es traducida a su código de máquina equivalente por un programa del siste-
TRAN" .
Hughes, J .: PL/l - Structured Programming. 2nd ed., Wiley, New York, 1979. ma llamado ensamblador, el que proporciona otra ayuda al programador.
Friedman. D.: The /ittle LJSPer, SRA, Chicago, 1974. El que un lenguaje de ensamble sea específico a un modelo de computadora o a
Conway, R., Gries, D., and Zimmerman, E. C.: A Primer on Pascal, Winthrop, Cam- una serie de modelos limita la portabilidad de programas escritos en ese lenguaje.
~-;
bridge, Mass., 1976. :(.: Aún cuando todos los lenguajes de ensamble están basados en principios comunes.
Véase también el uso del Pascal en los dos libros por Nicklaus Wirth , el padre del Estos principios se presentan en este capítulo .
lenguaje , referido en el Cap.! de este libro . El conjunto de instruccione; de una computadora y sus capacidades de
Myers, S. E.: RPG: With Business and Accounting Applications, Reston, Reston, entrada / salida con frecuencia se les hace referencia como la arquitectura de la
Va., 1974. computadora.
Griswold, R. E., Poage, J.F., and Polonsky, l. P.: The SNOBOL 4 Programming Lan-
Los Apéndices A y B respaldan la presentación en este capítulo .
guage, 2nd ed., Prentice-Hall, Englewood Cliffs, N .J. 1971.
Gordon, G.: System Simulation , 2nd ed., Prentice-Hall, Englewood Cliffs, N .J.,
1978. A. REGISTROS, PALABRAS Y BYTES
Introduce el CSMP. SIMSCRIPT y GPSS .

Una instrucción de un lenguaje de nivel bajo , como la de un lenguaje de máquina o


LOS TRADUCTORES SE ANALIZAN
c. de ensamble, especifica la operación que debe ser llevada a cabo por el hardware y
Aho, A. V., and Ullman, J. D.: Principies of Compiler Design, Addison-Wesley, la(s) ubicación(es) del (los) operando(s). Los operandos, así como las propias ins-
trucciones, se almacenan en la memoria principal de la computadora. En orden pa·
Reading, Mass., 1977.
Gries, D.: Compiler Constructionfor Digital Computers, Wiley, New York, 1971. ra su ejecución, la instrucción y sus operandos son colocados en la unidad de proce·
samiento central (CPU).*
La CPU de una computadora, analizada con mayor detalle en el Cap. 8-A, con·
tiene un número de registros, unidades de memoria rápida. Cada registro consta de

• En inglb, central proccssing unit. (N. del T.)


152 Conceptos de los sistemas de cómputo
Introducción a los lenguajes de ensamble
un conjunto de multivibradores, celdas en donde se almacena un bit simple. El nú- 153
mero de bits en un registro se conoce como la longi'tud del registro. Cada registro de B. INSTRUCCIONES A LA MAQUINA Y LENGUAJE
la CPU tiene un propósito predeterminado. DE ENSAMBLE
En particular, uno o más (por lo general, de 2 a 30, en relación a la potencia del
modelo de la computadora) registros de propósito general se localizan en la unidad
de lógica aritmfaica (ALU)* y son usadas para el manejo de datos. Un operando Los programadores encuentran conveniente instruir a la computadora en un len-
puede ser manipulado (por ejemplo, agregado a otra, cambiado, etc.), sólo que esté guaje de nivel alto. Las instrucciones de potencia de tales lenguajes conducen a
en ese registro. La longitud de los registros de propósito general por lo regular es programas concisos y legibles. Cada una de estas instrucciones da por resultado una
igual a la de la palabra en la memoria de la computadora dada. cantidad de acciones consecutivas llevadas a cabo por la computadora. Estas ac-
ciones son especificadas como instrucciones en el lenguaje de máquina de la compu-
Desde el punto de vista del programador, la memoria principal consta de una se- tadora por el traductor de software para el lenguaje de nivel alto dado.
cuencia de palabras con orientaciones consecutivas como sus números de identifica-
El lenguaje de máquina, especifico para un modelo dado de computadora (o
ción (véase la Fig. 7-1). Los contenidos de una palabra pueden ser escritos (con la una serie de modelos), consta de un conjunto de instrucciones binarias de un for-
información almacenada previamente destruida) o leidos (sin destrucción) durante mato rigido. Cada instrucción especifica:
un acceso a la memoria simple. La longi'tud de la palabra (número de bits en ella)
está determinada para una computadora dada y está en el rango de 8 a 64 bits para
( 1)
La operación que se va a realizar.
la mayor parte de las computadoras (generalmente 16 bits para las minicómputado-
(2)
Cuando procede, la orientación de los operandos. El número de operandos
ras y 32 bits para las computadoras grandes). Una computadora se identifica fre - depende del tipo de instrucción y del diseño de la máquina.
cuentemente por su longitud de palabra por decirlo, una "computadora de 16 bits"
Esta especificación es proporcionada por los campos de instrucción reconocidos
Orientación Contenid05 por la unidad de control de la CPU. Estos campos son códigos de operación• y cam-
pos orientados, con modificadores de orientación a menudo presentes (véase la Sec.
o 01011 ... 10 E de este capitulo).
11100 . . . 00
Los ejemplos siguientes ilustran las instrucciones de máquina y los operandos.
EJEMPLO 7-1

Un ejemplo de una instrucción de máquina•• de una computad ora hipotética es


W-1 01100 ... 11
- Longitud de -+ 4
la palabra
8 bits bits

Fig. 7-1. Vista lógica de la memoria principal, donde W es la capacidad de la memoria (el
_l'

'!!
____..____ .............
20 bits

1100001001 1101010010010010100101
-----
'---v---.........., - - - - . . , . .
número total de palabras). Op- Número Orientación
code del registro de la memoria

t'..¡-c>
Algunas computadoras, llamadas byte onºentables, proporcionan también la po- IN!·
Esta es una instrucción de registro a memoria; si en nuestra m áquina el código binario
sibilidad de tener acceso a un byte, una secuencia de bits en la que un carácter 11000010 significa ADD, entonces el contenido de la ubicación con la orientación de la me-
simple se puede almacenar. La representación de un carácter depende en el código t~' moria especificada
quierda es agregado al registro 7 (por ejemplo, 0 11 1), y el resultado está a la iz.
en ese registro.
adoptado (véase el Apéndice B); un byte por lo general consiste de 8 bits. En una
computadora de 32 bits, cuatro bytes de 8 bits se almacenan como una palabra. Pa· Por lo general, la mayor parte de tod as las instrucciones de m á q uina de una computa d ora
ra proporcionar la orientabilidad del byte, en este caso es necesario incrementar el dada ocupa una palabra simple.
espacio de orientación (el número de orientaciones disponibles) cuatro veces. La instrucción mostrada arriba es por tanto, de una computadora de 32 bits. Dado q ue
Los registros y palabras de la memoria (o bytes), donde residen los operandos,
constituyen el -espacio de trabajo de un programador de lenguaje de ensamble.
-
los 8 bits están colocados para representar al código de operación , el lenguaje de máquina d e

•Del inglb: O~ration code, se usa la abreviatura op-rode. (N. d el T .)


• Del inglb: arithmetic-logic unit. (N. del T.) •• Para
comcnido unlacstudjo
lecturacompleto
de este capitulo
de ~te es necesario comprender el sistema binario. En el Apfodice A estil
sistema.
154 Conceptos de los sistemas de cómputo
Introducción a los lenguajes de ensamble 155
esta computadora puede consistir de más de 2• = 256 instrucciones diferentes. Similarmente
la máquina tiene 2 4 = 16 registros de uso general, numerados de O hasta 15, y 2%0 = lM de Observe que los 5 dígitos hexadecimales proporcionan una notación para 20 bits de orienta-
posiciones de memoria que pueden ser orientadas directamente por la instrucción (véase la ción. Comparando las Figs. 7-2(a) y 7-2(b), podemos ver que el campo de orientación de la
Tabla A-1 del Apéndice A para los valores de las potencias de 2). instrucción muestra que ha sido modificado , ya que la partida de datos correspondiente fue
Observe que si esta computadora fuera de byte-orientable con cuatro bytes de 8 bits alma- movida hacia abajo. Se tienen que hacer modificaciones similares a lo largo del programa.
cenados para una palabra, se tendrlan que proporcionar cuatro veces las orientaciones. Por
tanto, la orientación de la memoria podrla ser 2 bits más grande (cada bit adicional permite Orientación
una selección entre dos alternativas, duplicando el espacio de orientación). Esto podrla incre- 1 1 / /Orientación
mentar significativamente el costo de la computadora.
1 1
Los datos numéricos son representados en palabras de la memoria en forma bi- 1
1 introduzca 1
OS410., .. 1
naria conforme a lo estudiado en el Apéndice A . una partida
Datm para el progama X --+ .... 05410,.
OS430,... --+ Datos para el programa X

--.x~J C".
en Ja posición
EJEMPLO 7-2 0541516
Un ejemplo de partida de datos de punto fijo es:
+- Programa X
C2 7 05420
Bitde•ignZ 05555,. '-....._ ~ C2 7 05421
Magnitud ,
r Una instrucción 1
.... osss6,.
1
~ muestra
00000000000000011001 representando +25
(a) distribución inicial
En una representación complementaria de los números binarios, los números positivos tienen (b) distribución modificada
(fragmento)
el bit de signo O y los números negativos tienen el 1. ffragmento)
Fig. 7-2. Ilustración de los efectos de una modificación al programa.
Los datos alfanuméricos por lo general están codificados en un código de carácter
usado en la computadora dada (véase el Apéndice B).
Excluyendo los casos excepcionales, el lenguaje de máquina no se usa para tra-
bajar. Sin embargo, surge frecuentemente la necesidad de -un control más estricto
EJEMPLO 7-3 sobre los recursos del sistema de cómputo (tales como registros, posiciones de me-
Una partida de datos codificada en EBCDIC es moria y tiempo de la CPU), que el que proporciona un lenguaje de nivel alto. Un
programador en ese lenguaje no tiene control directo sobre estos recursos; el control
es ejercido por el traductor de software, el cual como un programa de propósito ge-
D A T A
neral, no puede proporcionar una posible eficiencia en casos particulares.
..---""--, ..----"----.. ..----"----.. ..----"----..
11000100110000011110001111000001 representando 'DATA' Para realizar estas eficiencias, cada modelo de computadora (o serie) tiene su
propio lenguaje de ensamble, un lenguaje de programación de nivel bajo que per-
mite la especificación de las operaciones de Ja máquina con el uso de los códigos de
Concluimos que puesto que un programa que contiene al menos varios cientos operación mnemónicos (más fáciles de recordar que sus equivalentes binarios) y la
de instrucciones como las del Ej. 7-1, la programación en lenguaje de máquina es especificación de las posiciones de memoria con nombres simbólicos (niveles).• Una
tediosa en exceso. Es particularmente dificil proporcionar la orientación absoluta instrucción de lenguaje de ensamble simple corresponde a una instrucción de má-
quina simple.
(binaria) de todas las posiciones de memoria referidas por la instrucción. Si después
de que se ha escrito un programa, una partida de datos o una instalación se tienen Los programas escritos en lenguaje de ens,amble son traducidos en lenguaje
que eliminar o insertar, se deben modificar los campos de orientación de muchas de máquina por los programas del sistema llamados ensambladores, que son signifi-
otras instrucciones. cativamente más simples y consumen menos tiempo que los traductores de lenguaje
de nivel alto. La ejecución de programas sigue su ensamble. El uso de los nombres
simbólicos pennitido por los lenguajes de ensamble es significativo de manera par-
EJEMPLO 7-4 ticular, ya que debido a éstos el programador, en general, no hace la especificación.
Si fuera necesario introducir una partida de datos adicional en la posición 05413 16 de un
programa colocado en la memoria como se muestra en la Fig. 7-2. En este ejemplo, la nota-
ción hexadecimal se usa para abreviar (véase el Apéndice A-1). . • En loo lenguajes de ensamble, tanto los nombres de los operandos que retienen la posición (datos) y los
que retienen lu instrucciones son ~Jamados niveles.
156 Conceptos de los sistemas de cómputo
Introducción a los lenguajes de ensamble
de las posiciones absolutas y el programa se puede colocar en cualquier parte en la 157

J
instrucción
memoria principal. de refere ncia
de la memoria [ 8 bits 14bits 1 20 bits

EJEMPLO 7-5
La instrucción del lenguaje de máquina mostrado en la Ej. 7-1 , codificado en el lenguaje de instrucción
ensamble de nuestra computadora hipotética , se presenta aquí: de registro 8 bits 4 bits 1 4 bits
a registro
Código de operación mnemónico

~ ~Nombre simbólico
ADD 7, TAX ..---- En este caso, una instrucción de registro a registro ocupa sólo media palabra. Es-
te hecho se aplica en el diseño del hardware de la CPU para ahorrar espacio de la
memoria.
Se supone que la posición ~on la orientación 01010010010010100101 ha sido llamada TAX en
el programa. Los siguientes tipos de instrucción constituyen un conjunto de instrucciones
completas.
Por tanto , en adición a los códigos de operación mnemónicos, los lenguajes de
ensamble necesitan proporcionar un conjunto de las llamadas seudoinstrucciones,
1. .MOVIMIENTO DE DATOS
las instrucciones al programa ensamblador para asignar un nombre a una posición
o colocar. una partida de datos dada en la posición nombrada antes de que comien- Para que una operación aritmética o lógica sea llevada en una partida de da tos, se
ce la ejecución. Muchas seudoinstrucciones reensamblan_funcionalmente las decla- tiene que copiar la partida de la memoria principal en un registro ALU.
raciones de los lenguajes de nivel alto pero las expresan con mayor detalle. T al instrucción, llamada generalm ente "Load" tiene la forma general L OAD R ,
Loe
donde
C. CONJUNTOS DE INSTRUCCIONES
LOAD es el código de operación mnemónico;
Un conjunto de instrucción de una computadora es el conjunto de operaciones dis- R es eJ" número de registro; . .
ponibles en su lenguaje de máquina. Desde el punto de vista del programador, es
LOC es la orientación simbólica de una posición de memoria (en este caso, la
también el conjunto de instrucciones en el lenguaje de ensamble de la computado- fuente de datos).
ra. Los conjuntos de operaciones varlan en los modelos de computadora dependien-
Para copiar una par tida de datos de un registro a la mem oria principal, se usa
do de su potencia y costo. Un conjunto de instrucciones grande y bien diseñado da una instrucción "Store":
por resultado una programación de lenguaje de ensamble fácil , generando progra-
STRR, LOC
mas eficientes. Como siempre, los conjuntos grandes requieren una unidad de
control extensa y palabras no muy grandes para acomodar Ja longitud incrementa- donde LOC es la orientación de la p osición que recibe el da to.
da del campo del código de operación.
Para mover una partida de datos de un registro R l a o tro registro R2, se usa una
Presentamos aqui un conjunto de instrucciones tipico para nuestra computado- instrucción de registro a registro:
ra hipotética. Dado que varias máquinas tienen conjuntos y formatos de instruc-
MOVE R2 , R I
ciones diferentes, los conceptos son los mismos.
Nuestra computadora tiene dos clases esenciales de instrucciones: las instruc-
ciones de referencia a la memon·a (registro a memoria) y las instrucciones de re- 2. ARITMETICA
gistro a registro. Una instrucción de referencia a la memoria necesita un acceso a la
memoria y por tanto, es significativamente más lenta de ejecutar que una instruc- Las cuatro operaciones básicas
ción de registro a registro. Para obtener en orden un operando en un registro en ADD, SUB, MUL, DI V
primer lugar, se tiene que tener acceso a la memoria principal, de cualquier forma.
Los formatos generales de los dos tipos de instrucciones se presentan en seguida.• casi siempre son proporcionadas para n úmeros de punto fijo (véase el Apéndice A) y
también con frecuencia para números de punto flotante :
FADD, FSUB, FMUL, FDI V
• Se de~ ob~rvar que las computadoras ~neralmcnte tienen una variedad de formatos de instruc-
ciones; en cicnps casos es posible tener acceso para mis de un operando en la memoria con ,una instrucción
Su forma general, cuando se necesita una referencia de la memoria, es
simple.
opR, LOC
158 Conceptos de los sistemas de cómputo
Introducción a los leng uajes de ensamble
159
lo que significa que después de que se ha realizado la operación op en los contenidos
El número de las posiciones de cambio está especificado por las partes orientadas
del registro R y de la posición LOC, se obtiene el resultado en el registro R ,
en el formato de referencia de la memoria usado p ara estas instrucciones, que
mientras que los contenidos de LOC permanecen sin cambio. tienen la forma general;
Ya que la multiplicación origina un resultado de longitud doble con respecto a
cambie R. n
los operandos, el resultado se obtiene en dos registros de los cuales Res uno. Por el
contrario, antes de una división, el dividendo se coloca también en dos registros. donde n es el número de posiciones de cambio.
Si ambos operandos están en los registros Rl y R2, una instrucción de registro a
registro: EJEMPLO 7-6
op R2. Rl Aquf se muestra una palabra de 20 bits. para aclaración
(a) La instrucción
es usada. El resultado se obtiene en R2. Los operandos de las instrucciones de registro RROT 5, 6
a registro son los mnemónicos de referencia de la memoria con el prefijo de R: origina en la manipulación

RADD, RSUB , RMUL, RDIV Registro 5 (ames)


Registro 5 (deapu&)
[ 11100101001111101001 J [ 101 0011110010100111 Q
3. OP.ERACIONES Y RECURSOS LOGICOS (b) La instrucción

Las operaciones lógicas son llevadas sabiamente por los bits, por ejemplo, la partida LSH 2, 8
de datos se trata como una línea de bits sin dependencia entre ellos. Ya que los bits origina en la manipulación
de una palabra no son orientables, los medios de controlar el conjunto de bits parti- Registro l! (antes)
culares en una palabra son las operaciones lógicas que implantan los conectivos del Registro l! ( despu&)

álgebra booleana (véase el Apéndice C), tales como [ 10101110111 110000101 ]


[ l lll 100001o1 OOOOOOoo]
Y, O , NO
Observe que el campo de orientación de estas instrucciones se usa para un propósito
Su forma general como una instrucción de referencia a la memoria es diferente. El procesador centrál "conoce" esta forma del código de operación.

opR. LOC 4. TRANSFERENCIA DE CONTROL


La operación Y coloca solamente un l en las posiciones del resultado donde am-
Estas instrucciones tienen un formato de referencia de la memoria; el campo de
bos bits de los operandos correspondientes son los 1. La operación O coloca un l en orientación especifica el blanco de transferencia.
el bit de resultado si al menos uno de los operandos tiene un l en esta posición. El
NO se aplica a un operando simple, el cual es transferido al registro R , y todos sus
bits se invierten (véase la Tabla 3-1). En el nivel del lenguaje de ensamble son necesarios tres tipos de instr ucciones:
En la forma de registro a registro, tenemos
A. TRANSFERENCIA DE CONTROL INCONDICIONAL
RAND, ROR, RNOT Llamada generalmente "Derivación" o "Salto", esta instrucción tiene la siguiente
·forma general:
Las operaciones lógicas son auxiliadas por los recursos de registro que permiten
BR LOC
al programador manejar un bit en particular a una posición deseada dentro de la
palabra. La mayor parte de los tipos útiles de registro son el "Girar" (un cambio cir- La siguiente instrucción por ejecutarse está en la posición llamada simbólica-
mente LOC. ·
cular de la palabra) y el "Recurso Lógico" (una parte de la palabra es cambiada del
registro, con los O que son cambiados en el extremo). La dirección del cambio está
especificada por el código de operación: B. TRANSFERENCIA DE CONTROL CONDICIONAL
~f ¡O; - t: 1 ' .

RROT, LROT: gire derecha/ izquierda;


RSH, LSH: cambie derecha/ izquierda.
~~~~·.~ ;Eauu instrucciones difieren ampliamen te entre I~ modelos de computadora. Un
conjunto parcial de tales instrucciones es
~ .

Introducción a los lenguajes de ensamble 161


160 Conceptos de los sistemas de cómputo
La forma general de esta instrucción, bajo la suposición de que la orientación de
BRZ R. LOC regreso sea mantenida en el registro R, es
.BRL R . LOC
BRH R, LOC JSR R , SUBR
Estas instrucciones originan que la instrucción siguiente sea ejecutada de la posi-
donde SUBR, es el nivel de la primera instrucción en la subrutina, para la cual el
ción LOC si, respectivamente, los contenidos del registro R son iguales a O, meno- control es transferido al momento.
res que O y mayores que O. Si la condición no es verdadera, no sucede la transfe- Para proveer cadenas y llamadas repetitivas, Jos esquemas mlis complejos para la
rencia y se realiza la siguiente instrucción consecutiva. retención de la orientación de regreso (y ciertos datos), tales como el manejo de pi-
Ya que las instrucciones BRH y BRL comprueban el signo del operando en el re- las, se encuentran disponibles en algunas computadoras. En muchas computadoras
gistro, se pueden usar para comprobar los bits del residuo sin referirse a los conteni- se encuentra disponible una instrucción que origina el retomo de la subrutina a esta
dos. orientación, como RET R donde el registro mantiene la orientación de retomo.

EJEMPLO 7-7
Para implantar un bucle mientras que-haga 5. OPERACION DE DETENER
mientras que K </' L haga
&ta insuucción detiene la operación de la computadora. No se usa para detener la
inicio
ejecución de un programa. Le podemos llamar

HLT

fin
se pueden usar las instrucciones siguientes:
6. ENTRADA/SALIDA
LOOP LOAD l. K
SUB 1, L En esta área, existe una variedad grande entre los modelos de computadora. La for-
BRZ 1, ON ma de estas instrucciones está relacionada con la potencia de la computadora (véase
el Cap. 8-E para el análisis de la función I/O).
'·L cuerpo del bucle Debido a la lentitud relativa de los dispositivos periféricos (1 / 0 y memoria se-
cundaria) en la lectura de una palabra simple, la entrada/salida se realiza general-
BR LOOP mente como un bloque de transferencia, poi: ejemplo, la transferencia de conteni-
ON ... dos de cientos de palabras en la memoria consecutiva.
donde LOOP y ON son niveles. Observe que~ener más tipos de instrucciones de transferencia Para algunos dispositivos, el bloque está implícito en la naturaleza del dispositi-
condicional puede simplificar la programación en un caso tal como una prueba para K ;;;;., L . vo, tal como la siguiente tarjeta para una lectora de tarjetas o la linea siguiente en
una impresora de linea.
por ejemplo .
En este caso la instrucción tiene que especificar:
Ya que esta transferencia de las instrucciones de control generalmente sigue a las
aritméticas o lógicas. algunas computadoras tienen banderas de hardware (por Entrada}
ejemplo . usan multivibradores simples para un propósito específico), a menudo lla- número del dispositivo, primera posición en la memoria principal
madas el c.ódigo de condición . &tas se convierten automáticamente en un arreglo o Salida
rearreglo durante una operación aritmética o lógica y son comprobadas subsecuen -
Por el contrario, en el caso de un dispositivo de memoria secundaria. se necesita lo
temente por las instrucciones de transferencia condicional.
aigu_iente:
C. TRANSFERENCIA A UNA SUBRUTINA Entrada}
número del dispositivo, primera posición en la memoria principal,
Salida primera posición en el dispositivo, número de palabras
Se requiere que una instrucción especial llame a una subrutina, ya que la orienta-
(>}
ción de regreso (por ejemplo, la orientación de la instrucción que sigue inmediata- Se requieren también instrucciones adicionales, tales como "Star I/O", "Halt
mente a Ja llamada) se tiene que mantener en -una posición o registro de la memoria ÜO", etc.; muchas de éstas son paniculares al dispositivo.
establecida. ·· '
162 Conceptos de los sistemas de cómputo Int roducción a los lenguajes de ensamble 163

D. INTRODUCCION A LA PROGRAMACION EN LENGUAJE Los lenguajes de ensamble permiten también el uso de comentarios, tanto en
Jfnea separada, como en linea, siguiendo la instrucción . Estos son ignorados por el
DE ENSAMBLE ensamblador. En nuestro casot un comentario comienza con un •.
Los programas siguientes ilustran el uso del lenguaje de ensamble. Ya que los
El lenguaje de ensamble de nuestra computadora hipotética está diseñado alrede-
detalles de entrada / salida son paniculares para un modelo de computadora, se
dor del conjunto de instrucciones presentado en el capitulo anterior . Una instruc- consideran pane del alcance de esta presentación; usaremos
ción de lenguaje de ensamble de esta computadora típica tiene uno de Jos dos for-
INP orientación simbólica
matos siguientes:
OUT orientación simbólica
(a) Instrucciones de referencia a la memoria:
nivel código de operación registro, orientación .simbólica
para leer o escribir los contenidos de una palabra de la memoria simple.
(b) Instrucciones de registro-a-registro: EJEMPLO 7-8
nivel código de operación registro , registro
Problema
Por tanto, los campos de instrucción son los siguientes. Determjne el mayor de los dos enteros X y Y. incremente el resultado en iO y saque la res-
puesta. ·
Nivel : opcional, se usa cuando se desea Ja transferencia de control a esta
inst.ruccióri (consiste de más de 6 caracteres alfanuméricos, sin espacios), Programa
comienza en Ja columna 1. • UN PROGRAMA MUY SIMPLE
Código de operación: uno de Jos conjuntos de instrucción mnemónica, BEG
puede no comenzar en Ja columna 1. X RES 1
Registro : uno de los 16 registros (del O al 15). y RF.S 1
Orientación simbólica: se tiene que definir como un nivel de instrucción o
ANS RF.S 1 • RETENGA LA RESPUESTA
un nombre de dato en el programa dado .
TEN CON 10
Un lenguaje de ensamble también incluye un conjunto de seudoinstrucciones,
dirigidas en el programa de ensamble. Su nombre se deriva del hecho de que no • OBTENGA Y COMPARE LOS ENTEROS
peneneeen al conjunto defostrucciones de máquina y no son pane directa del códi- •
INP X
go del objeto ensamblado. INP Y
Nuestro lenguaje de ensamble incluye las siguientes seudoinstrucciones espe- LOAD 1, X
ciales: SUB 1, Y
(a) Indicadores del inicio y fin de un programa: BRL 1, YLAR

BEG,END • X ES MAYOR , O SON IGUALES LOS ENTEROS


(b) Una orden al ensamblador para que reserve un bloque de palabras de la
LOAD 2, X
memoria consecutiva: BR INCR
nivel RES n
donde n es el número de palabras que se separan, y el nivel es la orienta-
ción simbólica de Ja primera de ellas. Estas palabras son usadas por el • Y ES MAYOR
programa para almacenar resultados del cómputo y no contienen datos
YLAR LOAD 2, Y
significativos hasta -que sean almacenados en ellas.
(c) Una orden al ensamblador para que almacene una constante en una posi- • OBTENGA EL RESULTADO
ción en Ja memoria y asocie el nivel con esa posición:
nivel CON N
La mayorla de los ensambladores tienen úna cantidad de tales seudoins- INCR ADD 2, TEN• EL REGISTRO 2 RETIENE AL ENTERO MAYOR
STR 2, ANS
trucciones para almacenar a las constantes binarias y decimales de punto
OUT ANS
fijo y de punto flotante . Suponemos que N es un número decimal de pun- END
to fijo.
164 Conr:eptos de los sistemas de cómputo
Introducción a los lenguajes de ensamble 16.5

Notas
• AHORA EL REGISTRO 5 RETIENE AL l SI EL BIT MAS A LA DERECHA DE "PA -
l. Cualquiera de los 16 registros que no esté necesitando valores por el momento , TTRN"
puede usar otro valor en lugar de los registros dados. • ES l
2. Para mover un valor de una posición de la memoria a otra , se tiene que cargar en
RADD 4, 5 • ACUMULE EL CONTENIDO DE LOS I
un registro y almacenarlo de manera subsecuente (algunas máquinas tienen ins-
trucciones de memoria a memoria en su conjunto mientras que la nuestra no) . • COMPRUEBE PARA TERMINAR
3. La constante necesaria l O se tiene que almacenar en una posición de la memoria al
i't
tiempo del ensamble. Hemos escrito SUB 3, ONE
ADD 2, 10 BRZ 3, OUTPUT
los contenidos de la posición con la orientación (¡!) 10 podlan haberse agregado a
los contenidos del Reg. 2.
• SI AUN NO TERMINA-PREPARE LA ITERACION SIGUIENTE
4. Son necesarios los estudios para las decisiones de programación en este programa
ya que son arbitrarias . LOAD 5, PATTRN
RROT 5, 1
EJEMPLO 7-9
STR 5, PATTRN • PRESERVE PARA LA ITERACION SIGUIENTE
BRCOUNT
Este ejemplo, algo más complejo , presenta la aplicación de los lenguajes de ensamble en el
procesamiento lógico (operaciones con bits) , el esfuerzo principal de los lenguajes de nivel • COMPLETADO-SAQUE EL RESULTADO
bajo .
Problema OUTPUTSTR4 , RESULTADO
Se desea contar el número de bits cuyo valor es 1 en una posición PA TTRN . (Recuerde que OUT RESULTADO
nuestra máquina tiene palabras de 32 bits) . FIN

Programa La secuencia de abajo ilustra la ejecución de este programa

• CUENTE EL NUMERO DE BITS l EN UNA PALABRA (a) Contenidos iniciales de la


BEG posición PATTRN:
PATTRN RES l • PALABRA POR ANALIZAR
RESULT RES l • NUMERO DE LOS l EN LA PALABRA
101100010101100011100100011101101 1
ZERO CON O
ONE CON l
LARGO CON 32 • NUMERO TOTAL DE BITS EN UNA PALABRA (b) Durante la primera iteracción del bucle COUNT:
Registro 5
•COMIENCE
1011000101011000111001ooomo1101 1
LOAD 3, LARGO • EL REGISTRO 3 MANTENDRA EL
y
• NUMERO DE BITS QUE FALTEN DE SER
• REVISADOS Posición UNO
LOAD 4, ZERO • EL REGISTRO 4 MANTENDRA EL
• CONTEO ACTUALIZADO DE LOS l
1 clooooooooooooo1 1
INP PATTRN
COUNT LOAD 5, PATTRN • EL REGISTRO 5 MANTENDRA LA PALABRA ; SU Registro 5
• BIT MAS A LA DERECHA SERA REVISADO resulta en 1OOOOOOOOOOOOooot 1
• EL NUMERO DE LOS l EN UNA PALABRA SE CUENTA AL CAMBIAR CONSECU -
(e) Durante la segunda Iteración
TIVAMENTE
• CADA BIT EN ' LA POSICION MAS A LA DERECHA EN ] Registro 5 (rotación siguiente)
• EL REGISTRO DONDE "AND"-ED CON "l" (VEA LAS
• FIGURAS SIGUIENTES) ¡lOIIOOOIO!Ol IOOOlllOOIOOOI 110110 1
AND 5 , ONE y
166 Conceptos de los sistemas de cómputo Introducción a los lenguajes de · ensamble 167

Posición UNO 2. ARITMETICA ORIENTADA


1 OOOOOOOQOOOOOOOl 1
Esta permite al programador usar una expresión aritmética para especificar la
orientación del operando.
Registro 5 ':¡

resulta en 1 J
EJEMPLO 7-ll

(d) Después de Ja quinta iteración y rotación : Por ejemplo, el programador puede escribir.

Registro 5 SUB 5 , LOC + S


[~01100010101100011100100011 1
para denotar que Ja tercera posición que sigue a una llamada LOC es significativa (¡y no que
cambiado desde el extremo derecho los contenidos de LOC se van a incrementar por SI).

Registro 4

1OOOOOQOOOOOOOOOll l E. ORIENTACION DEL OPERANDO


mantenga Ja cuenta de 3 La especificación de una 9rientación del operando en la memoria principal es la
Nota instalación esencial de los lenguajes de nivel baj<T. En el lenguaje de ensamble tal es-
Ejecute el programa manualmente para contar el número de los l en el byte (8 bits) más a Ja pecificación es proporcionada simbólicamente; en una instrucción del lenguaje de
derecha de una palabra. máquina, se usan los modificadores de orientación binarios.
Se ofrecen variaciones para simplificar esta tarea. Estas se incluyen en combina-
Dos instalaciones imponantes adicionales ofrecidas por los ensambladores son ciones diferentes en varios modelos de computador~. 15!!
las literales y la aritmética orientada.
1. ORJENTACION ABSOLUTA
1. LITERALES
Las literales constituyen una instalación por donde el programador puede usar una El modo básico de orientar al operando almacenado en la memoria principal es
constante de un modo directo sin declararla con una seudoinstrucción (el en- •fi proporcionar la orientación completa en la instrucción. Esto es llamado onºentación
samblador la almacena automáticamente) . Una constante literal es colocada con absoluta. [véase la Fig. 7-!l (a)).
sencillez por el programador .e n el campo orientado en una instrucción del lenguaje
de ensamble, prefijándola con un simbolo especial, tal como
2. ORIENTACION ~NMEDIATA
EJEMPLO 7-10
Algunas computadoras permiten que el operando por si mismo se coloque en la ins-
En lugar de haberla ddinido en el Ej. 7-9
trucción; a esto se le llama on·entación inmediata [véase la Fig. 7-!l (b)).
UNO CON 1
memoria principal
y de usarla como sigue:

Y5,UNO
código de;
operación
1
orientación· operando
r códig<l de¡
operación. • · ·
T. --
operando ]
simplemente el programador pudo usar una constante literal :
imtrucci6n 1Illtrucci6n

y 5, = l
(b) orientación inmediata
(a) orientación absoluta
El slmbolo especial = Je dice al ensamblador que el número l es significativo,,mAs que Ja po·
sición cuya orientación es l. Fig. 7-5. Orientación absoluta e inmediata.
168 Conceptos de los sistemas de cómputo Introducción a los lenguajes d e ensam ble 169

Existe sólo un uso limitado para la orientacion inmediata ya que, primero, el este campo especifica
operando tiene que ser una constante conocida a la vez que se escribe el programa, irutrucción el registro clasificado

y segundo, el espacio disponible para un operando en el formato de la instrucción es


op·codc 1 R
limitado. registro clasificado X

3. MODIFICACION DE LA ORIENTACION PARA UN BUCLE

La necesidad de modificar la orientación contra un uso extenso de bucles como


los que se aplican a las estructuras de datos, tales como tablas. Por ejemplo, si los orientación efectiva
contenidos de una tabla de 100 palabras comienzan con una posición llamada del operando
TABLE
Fig. 7-4. Modificación de la orientación mediante la clasificación.
Orientación simbólica Una palabra

TABLA

TABLA + 1
l 1010110100110101100101001100010
01001010100011100010010001101010 f suponiendo que el Reg. 1 es el registro clasificado y contiene la copia actualizada
del inicio de la tabla.
Algunas m{tquinas tienen registros de clasificación separados, m ientras que en
las otras se pueden usar los registros de propósito general para esta tarea.
El ejemplo siguiente presenta el uso de la orientación clasificada para totalizar
los contenidos de la anterior tabla de 100 palabras.
TABLA + 99 ] 0100010101110.1010101100111110001

EJEMPLO 7-12

se tiene que agregar en el Reg. !!, la instrucción siguiente no se puede usar dentro
• EN ESTE FRAGMENTO DEL CODIGO SE SUPONE QUE
del bucle que termina la tarea
• EL REGISTRO 1 ES UN REGISTRO CLASIFICADO
-;-¿~
• OBSERVE EL USO DE LITERALES
ADD !I, TABLE(•)
~"

~.;t~ BEG
Esto es necesario para modificar la orientación del operando (TABLE) ya que la ~~~i TABLE RES 100
instrucción se tiene que aplicar a palabras de datos consecutivos.
Dos formas alternas de llevar a cabo esto son. las de clasificación y la indirecta.

A . ORIENTACION CLASIFICADA
• COMIENCE
LOAD l . =O • REGISTRO CLASIFICADO
Para proporcionar una orientación clasificada, son necesarios uno o mh registros
LOAD 2, =O• EL REGISTRO 2 ALMACENARA EL RESULTADO
clasificados en el hardware de la CPU. Cuando se usa la orientación clasificada, los LOAD 5. = 100 • NUMERO DE PALABRAS PARA SER CONSIDERADO
contenidoS del registro clasificado especlfico son agregados autom{tticamente por es· *BUCLE ADICIONAL
te hardware al campo orientado de la.instrucción. Por lo que la orientación efecti· BUCLE ADD 2 , TABLE (1) • LA INSTRUCCION VITAL
va, la orientación actual del operando, es obtenida. ADD l . =l
El ·csquema de la orientación efectiva del cómputo se muestra en la Fig. 7-4. SUB 5, = 1
BRH 5, BUCLE
Para indicar que se va a llevar a cabo la orientación efectiva mediante la clasifi·
• EL RESULTADO ESTA AHORA EN EL REGISTRO 2
cación antes de que tenga acceso el operando, el programador modifica la instruc·
ción (*)como sigue:
ADD !1, TABLE(!)
170 Conceptos de los sistemas de cómputo
Introdur:r:ión a los lenguajes de ensamble 171
B. ORIENTACION INDIRECTA
• COMIENCE
En el caso de la on'entación indirecta, el campo de orientación de la instrucción no LOAD 2, =O • REGISTRO DEL RESULTADO
LOAD 3, = 100 • NUMERO DE PALABRAS PARA SER
retiene la orientación (directa) del operando, sino la orientación de tal orientación.
La orientación efectiva del operando, es obtenida por la CPU al tratar al campo • CONSIDERADO
orientado en la instrucción como un indicador (véase Fig. 7-5) . • BUCLE ADICIONAL
BUCLE ADD 2, TABADR, 1 • LA INSTRUCCION VITAL
instrucción posición LOCI posición LOC2 • MUEVA AL INDICADOR
op-codc 1 R 1D/I 1orientación orientación efectiva operando LOAD4,TABADR
ADD 4, =l
STR 4, T ABADR
• REVISE PARA TERMINAR
Fig. 7-5. Modificación de la orientación de manera indirecta. SUB 5, = 1
BRH3, BUCLE
Para proporcionar la orientación indirecta, la CPU tiene que ser capaz de reco- • EL RESULTADO ESTA AHORA EN EL REGISTRO 2
nocer a la indirecta y despreciar a la orientación efectiva. Un bit modificador de la
dirección (D/I) en el formato de la instrucción, indica si la orientación directa o indi-
recta es significativa. En un lenguaje de ensamble, el programador puede indicar a
la indirecta como sigue:
ADD 3, ANADDR , I La orientación indirecta se usa también en muchas computadoras para regresar
donde ANADDR mantiene la orientación de otra posición. de una subrutina. Ya que una instrucción que "Salta a una Subrutina" almacena
Para usar la indirecta, el programador necesita una seudoinstrucción que sirva la orientación de regreso en un registro o en una posición especial, el retorno se
puede efectuar como sigue:
para colocar en una posición la orientación de otra. Llamando a esta seudoinstruc-
ción BR BACK, I
QEF (de "Orientación definida") suponiendo que la posición BACK contiene esta orientación de regreso.
tenemos en nuestro ejemplo de una suma en la tabia:
TABLE RES 100 4. MODIFICACION DE LA ORIENTACION POR EXTENStON
T ABADR DEF TABLE DEL ESPACIO DE ORIENTACION

donde TABADR es el indicador para la tabla. Mediante el "movimiento" consecu·


Una palabra de instrucción tiene un espacio limitado asignado para la ori~ntación
tivo del indicador a través de la tabla, lo podemos usar para dirigir al bucie como se del operando. Si n bits están disponibles para el propósito, sólo 2n posiciones se
muestrn en el ejemplo siguiente, en donde se lleva a cabo el mismo efecto que en el pueden orientar. Para librar esta limitación, se usan los métodos siguientes en el di-
Ej . 7-12 . seño de la computadora.

A. ORIENTACION INDIRECTA
EJEMPLO 7-13 La palabra de instrucción proporciona solamente los últimos bits significativos de la
orientación del indicador; la conducción de los bits está implícita y es proporciona -
• EL FRAGMENTO DEL CODIGO EJEMPLIFICA EL USO DE LA da por un registro de la CPU. El indicador en sf es de la longitud de una palabra
• INDIRECTA completa y constituye la orientación del operando efectivo.
BEG
TABLE RES 100 B. ORIENTACION DEL REG1STRO DE BASE
T ABADR DEF TABLE
Un registro especial, llamado un registro de base, se especifica entre los bits del mo-
dificador de orientación. Su contenido se agrega al desplar.amiento (la parte de la
orientación del operando contenida en la propia instrucción) para formar Ja orien-
tación efectiva.
172 Conceptos de los sistemas de t:ómputo lntrodut:ción a los lenguajes de -ensamble J 73

Si una máquina usa ambas orientaciones, la clasificada y la de registro de base , (b) La traducción de los códigos de operación mnemónica en sus equiva-
entonces lentes binarios.
(c) El ensamble de los bits del modificador de orientación .
la orientación efectiva desplazamiento + contenidos del registro de base (2) Proporcionar el espacio para los datos y colocar las constantes requeri-
+ contenidos del registro clasificado das en sus posiciones.
(3) Proporcionar información para el cargador.
(Este es el esquema de orientación usado en las computadoras de IBM Sistema/360-
370.)
La tarea principal de un ensamblador es la traducción de los nombres simbóli-
cos refiriéndose a panidas de datos o instrucciones. Debido a esta función, por lo
F. USO DEL LENGUAJE DE ENSAMBLE general, los ensambladores consisten de dos pases, es decir, dos registros sobre el
programa que se va a traducir. Esta estrategia es trafda por el hecho de que los
Por lo general, un programa bien escrito en lenguaje de ensamble es más eficiente programas contienen referencias de avance, es decir, referencias para un nombre
(usa menos recursos del sistema de la computadora) que un programa equivalente simbólico antes de que sea definido (en otras palabras, antes de que aparezca como
en un lt>nguaje de nivel alto. Esta eficiencia se debe al acceso directo vinual que el un nivel). En un registro simple tales referencias no pueden ser resueltas sin retroce·
programador tiene a los registros de la máquina y a las palabras de la memoria y al der, lo que en ocasiones se usa en los ensambladores de un pase.
uso directo del conjunto de instrucciones de máquina. Sin embargo, la programa-
EJEMPLO 7-14
ción en lenguaje de ensamble es una tarea con mucha demanda; requier-e personal es-
pecializado y consume mucho tiempo. Usualmente el programa resultante es más Considere el siguiente fragmento de código:
dificil de entender y de modificar. Ya que un lenguaje de ensamble es natural a un
modelo de computadora en panicular o a una serie de modelos compatible, tales DATAS CON 10
programas no son ponables.
Por tanto, los lenguajes de ensamble son usados cuando la naturaleza de la tarea
por realizar o las limitaciones del sistema de cómputo dado , indican un uso panicu- BRFRWRD
Iarmente cuidadoso de los recursos del sistema. La programación de sistemas es un
área importante dé esta clase; la programación de microcomputadoras es otra .

FRWRD ADD 5, DATA


G. ENSAMBLADORES Y SISTEMAS DE ENSAMBLE

Un ensamblador traduce los programas escritos en el lenguaje de ensamble del mo·


delo de computadora dado a su lenguaje de máquina. Como cualquier traductor,
se dice de un ensamblador que produce un código objeto de un código fuente . Para ensamblar el equivalente de la instrucción BR, es necesario conocer la orientación de
Los ensambladores avanzados producen un código objeto relocalizable que se la posición llamada FRWRD, la que no se conocerá hasta que se desarrolle la instrucción
ADD durante el rastreo por el ensamblador. (Observe que la referencia a la posición DATA
puede colocar ("reubicar") en cualquier pane de la memoria principal para ejecu-
en ADD es una referencia atrasada que se resuelve durante un registro simple.)
ción. La colocación es realizada por un programa del sistema llamado cargador.
Muchos ensambladores proporcionan macroinstalaciones.
Los dos pases de los ensambladores comunes .llevan a cabo las tareas siguientes :

1. TAREAS DE UN ENSAMBLADOR 2. PASE 1

Las tareas básicas de un ensamblador son, entonces: Todos los nombres simbólicos encontrados en el campo de nivel del programa fuen-
te son registrados en la tabla de símbolos. Una tabla de sfmbolos de un ensamblador
(1) . "Ensamblar" las instrucciones de máquina binaria de sus equivalentes en (véase la Tabla 7-1) contiene los nombres simbólicos definidos en el programa con
lenguaje de ensamble, incluyendo: la orientación de sus posiciones relativas al comienzo de los datos y del programa.
(a) La traducción de los nombres de posición simbólica a orientación de Para mantener la pista del espacio en el que se localizarán los datos e instruc·
la memoria binaria. ciones del programa objeto, se usa una variable llamada contador de posición. Ini-
...,
lntTOducción a los lenguajes de ensamble 175
174 Conceptos de los sistemas de cómputo
nombres simbólicos que no están definidas en una unidad de programa dado. El
Tabla 7-1. Tabla de slmbolos de un ensamblador. enlazador forma el "apéndice" según estén, las subrutinas para el programa princi-
pal, y por tanto, crea un módulo de caTga (véase la Fig. 7-6), una unidad reloca-
'
Posición relativa lizable del código objeto.
Nombre simbólico

DATA o Número de
Posición de la memoria posiciones ocupadas

o -~----------~
Programa principal . 1 M
FRWRD 5179 M -f-----------~
Subrutina A SA
M + SA
Subrutina B s&
M +SA +S8 - l
(posición última)
ciado para un valor fijo, generalmente O, esta posición se incrementa conforme se
rastrea al programa fuente instrucción por instrucción. Los incrementos son iguales
Fig. 7-6. Un módulo de carga (antes de la carga).
al número de palabras (o bytes, si la máquina es byte orientable) necesarias para al-
macenar a la instrucción de máquina dada o las partidas de datos descritas por una
Antes de que el código objeto sea ejecutado, tiene que ser cargado en las posi-
seudoinstrucción.
ciones de la memoria actual sleccionadas para su colocación. Esta tarea es llevad a a
cabo por un caTgadoT de relocaliz.ación, un programa del sistema que usa la infor-
EJEMPLO 7-15
mación de relocalización proporcionada por el ensamblador para sustituir a las
(a) Si cada instrucción de máquina ocupa una palabra simple,! a posición del con· orientaciones de la memoria actual por las relativas. Un cargador simple agrega
tador se incrementa siempre en l. las orientaciones de la posición inicial del programa en la memoria a todas aquellas
(b) En nuestra máquina, cuando se encuentra a la seudoinstrucción RES, se incre-
orientaciones (ya que fueron ensambladas con respecto a la posición O) y produce el
menta la posición del contador en el número de palabras que Je están reservadas.
código absoluto. El cargador también transfiere el programa en el espacio asigna-
De esta manera, el Pase 1 de un ensamblador crea un mapa completo del lugar do. Con frecuencia se combina. al cargador con el enlazador en un caTgador de
de memoria para el programa objeto, relacionado generalmente a la posición O. enlace.
Los tres programas del sistema necesarios para traducir y ejecutar un programa
en lenguaje de ensamble, es decir , que al ensamblador, enlazador yt:argador , a me-
3. PASE 2 nudo se les llama un sistema de ensamble. Su acción está ilustrada en la Fig . 7-7.

Subrutinas de la
Se crea el código objeto. La tabla de simbolos proporciona los sustitutos para los
memoria secundaria
nombres simbólicos, y la tabla fija de los códigos de operación proporciona sus como unidades del código
equivalentes binarios. objeto relocalizable
Si se produce el código objeto relocalizable, todas Ja posiciones cuyos contenidos
dependan de la posición en el progríUila (éstas corresponden a instrucciones y datos
Programa Programa 1
con referencias simbólicas), serán marcadas.
Cada unidad de programa (por ejemplo, el programa principal o una subrutina)
principal y
subrutinas !,, J
principal Y
subrutimu ~
l
Módulo de carga
c:J Programa
se ensambla por separado. Algunas de las subrutinas se pueden almacenarr perma- rnsamblado1 ~ ~-----..
nentemente en la memoria secundaria como código objeto relocalizable. en el lenguaje como unidades (una unidad como código
de ensamble separadas del simple del objeto absoluto
código objeto código
4. ENLACE Y CARGA relocalizable relocalizable)

Después de que se ha completado el ensamble, un programa del sistema llamado Fig. 7-7. Sistema de ensamble.
enlazadoT resuelve todas las TejeTencias extern.as, por ejemplo, las referencias a
I 76 Conceptos de los sistemas de cómputo
., Introducción a los lenguajes de er¡samble 177
A los enlazadores y cargadores (o cargadores de enlace) también es necesa.rio co-
locarles en la memoria un programa de lenguaje de nivel alto. La d iferencia básica entre las macros y subrutinas es que cada macro usa los re-
sultados en el código en que se copian actualizados en el programa. Una subrutina
simple copia lo que existe, y una llamada a una subrutina da por resultado un enla-
5. MACROENSAMBLADORES ce y no una copia. También, se invoca a una subrutina durante la ejecución del
programa, mientras que las copias del código macro son introducidas antes de que
Algunos de los ensambladores más sofisticados proporcionan la llamada instalación comience la ejecución.
macro y se les llama macroensambladores. Una macro es una secuencia de instruc-
ciones con un nombre; una vez definida en un programa, se puede usar escribiendo
simplemente su nombre y parámetros. El macroensamblador realiza una macroex- SUGERENCIAS PARA LECTURAS MAS PROFUNDAS
pansión introduciendo las instrucciones actuales de la macro y sustituyendo los pa-
rámetros. Peterson, J. L.: Computer Organization ami Assembly Language Programming,
Academic, New York, 1978.
Un estudio general completo de la programación en lenguaje de ensamble y
EJEMPLO 7-16
de los sistemas de ensamble, usando una máquina hipotética, ·tfpica en todos los
Suponiendo que nuestra máquina tiene un macroensamblador, definiremos una macro que aspectos.
agrega los contenidos de cualquiera de las dos posiciones de memoria X y Y, y almacena el Los siguientes tres textos introducen a la programación en lenguaje de ensamble
resultado en la posición X. de los equipos más populares, de mini y microcomputadoras, respectivamente:
Struble, G. W.: Assembler Language Programming: The IBM/360 and 370, 2nd ed.,
(a) Macrodefinición (por el programador) Addison-Wesley, Reading, Mass., 1975.
MACRO MEMADD (X, Y, REG) Eckhouse, R. H., Jr., and Morris, L. R.: Minicomputer Systems: Organization, Pro-
LOAD REG, X gramming, ami App/ications (PDP-JJ), 2nd ed., Prentice-Hall, Englewood Clilfs,
ADD REG, Y N.J., 1979.
STR REG. X Leventhal, L. A.: Introduction to Microprocessors: Software, Hardware, Program-
MENO ming, Prentice-Hall, Englewood Clilfs, N.J., 1978.
Basado en los micros 8080 Imel y Motorola 6800
(b) Uso macro (por el programador)

SUB l, Z
MEMADD TAX , INTER, 2
BRZl,BACK

(c) Macrocxpansión (por el ensamblador)

SUB 1, Z
LOAD 2, TAX
ADD2, INTER
STR2, TAX
BRZI, BACK

Observe que MACRO y MEND son seudoinstrucciones que sirven como delimitadores de una
macro. Observe también que los programadores encuentran conveniente que, cuando los re-
gistros son necesitados por una macro, tienen que ser especificados como parámetros.
8
Organización de los
Sistemas de Cómputo

Un sistema de cómputo consta de una unidad de procesamiento central, una memo·


ria principal, una memoria secundaria y dispositivos de entrada/ salida. La unidad
de procesamiento central (CPU)* de una computadora se compone de Ja unidad de
control que ejecuta las instrucciones de máquina al activar a todas las otras instala·
ciones del sistema y de la unidad 1ógica-aritmética (ALU)º que lleva a cabo el ma·
nejo de datos. La principal, la secundaria, y, en ocasiones, las memorias de archi·
vo, son una pane de la jerarquía de memoria de un sistema de cómputo que crece
desde los registros rápidos de la CPU a través de la mayor capacidad de Ja memoria
principal hasta Jos dispositivos de memoria periféricos de mayor capacidad y menor
velocidad y costo. Un sistema incluye también un complemento de Jos dispositivos
de entrada/ salida periféricos cuya composición depende de las necesidades. En los
sistemas más grandes el control de los periféricos se lleva a cabo por procesadores
exclusivos, llamados canales. Los componentes de un sistema están conectados
entre si por grupos de alambres (con circuitos que les ayuden), llamados colectores .
En algunos casos, para incrementar Ja potencia de procesamiento, se emplean
dos o más CPU companiendo una memoria simple en una configuración llamada
sistema de multiproceso. Los sistemas distantes se pueden organizar con Ja ayuda
del hardware y de las lineas de tt!lecomunicación en las redes de computadoras.
El diseño de los modelos de computadora y las configuraciones del sistema di·
fieren; Ja mayor pane de Jos principios generales de Ja organización de Ja computa·
dora se presentan aquí.
En el Apéndice C se estudian los circuitos lógicos que están construidos de com ·
ponentes electrónicos.

A. UNIDAD DE PROCESAMIENTO CENTRAL


Y EJECUCION DE LA INSTRUCCION

La CPU, con frecuencia llamada el corazón de una computadora, consta de dos


unidades funcionales . La unidad de control controla Ja ejecución de las instruc·

'. Central proccssing unit. (N del T.)


•• Arithmetic·logic unit. (N del T .)
180 Conceptos de los sistemas de cómputo
Organización de los sistemas de cómputo 181
ciones del programa expresadas en el lenguaje de máquina de la computadora da- r
da; la unidad lógica-aritmética (ALU) maneja los datos conforme lo indican estas • Registro de datos de la memoria (MDR): • almacena los contenidos de una
instrucciones. posición que se ha leído o que se va a escribir en éste.
En la Fig. 8-1 se muestra un diagrama a bloques de la CPU con las conexiones • Registro de instrucción (IR):** almacena la instrucción mientras se está
ejecutando.
esenciales (se incluye Ja no modificación de la orientación del hardware). En
muchas computadoras estas conexiones se organizan en uno o más conjuntos de • Descodificador: deseodifica el código de operación de la instrucción actual
alambres llamados colectores. Cada colector se puede usar para una transferencia (este circuito selecciona una de sus dos líneas de salida, basado en los I bits
del código de operación).
de datos a Ja vez; por lo que el número de colectores para una ampliación determi -
na la velocidad de la CPU. • Controlador: el circuito esencial de la unidad de control, produce Ja se-
cuencia de las señales de control necesarias para ejecutar la instrucción.

unidad de control 1 AW
La unidad de control acciona la computadora al ejecutar las instrucciones y los
señales de control de la 1 programas del sistema de la memoria principal de la computadora. Para ejecutar
operación sclecciona~a algunas instrucciones, es necesario obtener también los datos que se requieren de la
1 memoria principal. Durante el llamado ciclo de ejecuci'ón de la instrucci'ón se lleva
1F/E1 1 .~; a cabo una instrucción simple que se obtiene de la memoria principal y es eje-
1 cutada.
1
:·~
1 En el Ej. 7-I se muestra un ejemplo de una instrucción de lenguaje de máquina ;
los ejemplos de los· datos us~dos por estas instrucciones son mostrados en el Ej. 7-2.
1
+ I 1 ,,,/~ el Ej. 7-2.
1
~~;;
1
1 Dado que las instrucciones y los datos son almacenados en la memoria principal
PC 1 como proyecciones de los O y los l, para distinguir entre el MDR que almacena una
1
1 '.t't - partida de datos y el que guarda una instrucción, se localiza en la CPU la bandera
MAR 1 ",
F/E•••. Esta bandera indica la fase actual del ciclo de ejecución de la instrucción.
1
registros de propósito general
... Existen dos: !ajase de traer, cuando se trae la instrucción de la memoria princi-
pal y se descodifica su código de operación ("comprendido"), y la jase de ejecución ,
cuando se lleva a cabo la instrucción, con el acceso a la memoria principal, si es ne-
orientación datos leer/ escribir cesario, para leer o escribir datos.

a la memoria principal
El ciclo de ejecución de instrucción consta de los pasos siguientes :

(1) Fase de traer.


Fig. 8-1. Unidad de procesamiento central (CPU) .

La unidad de control trae las instrucciones del programa una por una desde la (a) Los contenidos del PC son pasados al MAR (esto es, la orientación de
las instrucciones que se van a traer).
memoria principal , descodifica sus códigos de operación , y envía las señales de
control a las otras unidades del sistema de cómputo. La ejecución de una instruc; (b) Se tiene acceso a la memoria principal, y Ja instrucción actual es traída
al MDR.
ción de máquina consiste, en su oportunidad, de una secuencia de pasos. Estos son
llevados a cabo por la computadora con base en las órdenes del controlador. (c) La instrucción se transfiere de MDR a IR (ya que MOR puede ser ne-
cesario para los datos).
La unidad de control consiste esencialmente de los siguientes elementos:
(d)EJ código de operación es descodificado.
• Contador de programa (PC):• registro que almacena la orientación de la (e) Para prepararlos para la ejecución de la instrucción siguiente, se incre·
siguiente instrucción por ejecutar . mentan los contenidos de PC en 1 por medio de la línea "l caliente" in-
• Registro de orientación de Ja memoria (MAR):•• almacena la orientación dicada. (Aquí suponemos que cada instrucción ocupa una palabra
de la posición de la memoria a la que se va a tener acceso.
---- •Del ingl&, mcrnory data rcgistcr. (N. del T.)
• Del ingl&, prognm counter. (N. del T.)
• • Del ingl&, instruction rcgistcr. (N. del T .)
•• Del ingl& , memory adrcss rcgistrer. (N . del T .)
••• Del ingl&. fctch / execution. (N. del T. )
Organización de los sist emas de cómputo 183

182 Concebtos de los sistemas de cómputo


'Para realiz.ar la clasificación (véase el Cap. 7-E), el hardware de la CPU tiene
que incluir los registros de clasificación y los circuitos necesarios para formar la
simple; si no, el incremento a PC depende del código de operación des·
orientación efectiva. Para realizar la no dirección, se requiere la tercera parte del
codificado.) ciclo de ejecución de la instrucción llamada la fase indirecta (o diferida). La fase in-
(f) La fase de ejecución, específica para la instrucción dada, se inicia al
directa viene entre las fases de alimentación y de ejecución y consiste de los si-
cambiar el e~tado de la bandera F/E (vibrador). guiente:
(2) .Fase de ejecución.
(g) El campo orientado se transfiere de MDR a MAR.
Ya que cada instrucción tiene una fase de ejecución diferente, se presentan tres
(h) Se tiene acceso a la memoria principal para leer la orientación efectiva
ejemplos característicos: del operando en MDR. _
(2-1) El lenguaje de máquina equivalente a ADD R, LOC. (i) Se inicia la fase de ejecución para este programa.
(g) La orientación del operando (llamado simbólicamente LOC) se
transfiere de MDR a MAR. La secuencia de las señales de control necesarias para realizar una instrucción es
(h) El operando se lee de la memoria principal en MDR. generada por el controlador que en el momento implanta el conjunto de instruc-
(i) Los contenidos de MDR se adicionan por el circuito ALU a los con- ciones de la máquina. Las dos técnicas usadas para diseñar el controlador son el
tenidos del registro de propósito general R. cableado y la microprogramación. El conirol cableado se construye como una
U) La fase de traer se inicia.para la instrucción próxima al cambiar el red de compuertas lógicas y multivibradores para asegurar la ejecución de todas las
estado de la bandera F / E. instrucciones del conjunto. El reconocimiento del·.hecho de que la ejecución de to-
(2-II) . El lenguaje de máquina equivalente a STR R, LOC. das las instrucciones del conjunto. El reconocimiento del hecho de que la ejecución
(g) La orientación del operando se transfiere de MDR a MAR. de cada instrucción de máquina constituye una serie de pasos, como si fueran
(h) Los contenidos del registro de propósito general R son transferidos microinstrucciones, condujo a la invención de la microprogramación: la colocación
aMDR. de estas microinstrucciones en una memoria de control especial, como una parte
(i) Los contenidos del MDR se escriben en la posición de la memoria del controlador. Se coloca un microprograma (llamado también fijo) en la memoria
principal cuya orientación está en MAR. de control (por lo general, de un tipo de sólo lectura más económico y rápido, ya
(j) La fase de traer se inicia al cambiar el estado de la bandera F/ E. que no es necesario modificar su contenido) al mismo tiempo que-se diseña la com-
(2-III) El _lenguaje de máquina equivalente a BR LOC. putadora. La microprogramación ofrece también posibilidades más amplias en el
(g) El campo de orientación de la instrucción se transfiere del MDR al diseño de computadoras.
PC. La CPU ejecuta las instrucciones del sistema y los programas de aplicación se-
(h) La fase de traer se inda al cambiar el estado de la bandera F/ E. cuencialmente, considerando las transferencias de control.
La CPU puede ser interrumpida desde la ejecución del programa actual cuando
Para reducir el tiempo de ejecución de la instrucción, algunas de las etapas an· sucede una interrupción. Esta es una señal de una condición especial que requiere
teriores se realizan simultáneamente. La etapa que más tiempo consume es el acce· una acción rápida por parte de la CPU. Las condiciones que originan una in-
so a la memoria. terrupción dependen del diseño de la computadora; por lo general, éstas son excep-
Se puede observar que la ejecución de la instrucción consiste de una cantidad de ciones que surgen durante la aritmética por ejemplo, una división entre cero,
transferencias de registro. El tiempo requerido para tal transferencia es llamado el sobreflujo, etc.), mal funcionamiento de la máquina y muy importante, las señales
tiempo de ciclo de la CPU o tiempo de reloj y es una función de la lógica usada en el de completar una operación de entrada/ salida (véase la Sec. E-2 de este capitulo)
diseño de la CPU. Una instrucción tlpica puede necesitar de 8 a 16 de tales tiempos
ci~lo
Cuando sucede una interrupción y es reconocida, se interrumpe la ejecución del
de reloj. El tiempo de ciclo de la CPU no se debe confundir con el tiempo del programa actual, rescatándose todos los datos necesarios para su reinicio. El conta-
de la memoria principal, generalmente un múltiplo del tiempo del ciclo de la CPU . dor de programa (PC)* recibe la orientación de un programa del sistema (controla-
Mientras que la velocidad de las computadoras difiere grandemente, es conve· dor de la interrupción) diseñado para manejar el tipo particular de interrupción.
niente pensar en cómo se ejecuta una instrucción en una computadora de escala En consecuencia, se reanuda el programa interrumpido.
mediana tipica en un intervalo de 1-2 .• Los procesadores de poder ejecutan de· La unidad lógica-aritmética de la CPU consta de los circuitos necesarios para el
cenas de MIPS.** manejo de datos, como los aritméticos de punto fijo, cambios, y operaciones lógi-
cas. La cantidad de circuitos proporcionados determina en gran parte el costo de la
• Del ingl&: millions of instrucúons pcr second; rr.illone> de instruccione> por ocgundo. (N . del T .)

.. ¡ rns (milisegundo) = 10·~ s IK • 2" .,, 1000 ' Del ingl&: program countcr. (N. del T .)
l .¡.¡•(microsegundo) = 10·6 s lM • 2• - 1,000,000
l ns (nanosegundo) = JO ·9 s
184 Conceptos de los sistemas de cómputo Organización de los sistemas de cómputo 185

CPU. Por ejemplo, los aritméticos de punto flotante, a menudo se llevan a cabo en (5) El sistema de archivo masivo (o almacén del archivo) se usa para almace-
el software para abatir este costo. También se localiza en la ALU, un conjunto de nar volúmenes de datos aun más grandes que los del archivo secundario a
registros de propósito general en el que se manejan los operandos. - un costo mu.cho menor y con un acceso más lento. Estos son frecuente·
A la CPU de una computadora grande generalmente se le llama bastidor princi- mente sistemas de cartuchos de Cintas con capacidades que rebasan los
pal, p~ra distinguir! de las minicomputadoras y de las microcomputadoras ("com· 10 12 bytes.
putadoras en una oblea"). La mayorla de las microcomputadoras consisten en la
1
actualidad de varias obleas de circuitos integrados, de las que una, llamada Todas las máquinas tienen registros y memorias principales y casi todos los siste-;
microprocesador, contiene a la CPU. Otras obleas de un microcomputador con· mas tienen memorias secundarias más lemas.
tienen los módulos de memoria y las interfases de entrada/ salida. Los microproce-
sadores se encuentran frecuentemente en una variedad de equipos que requieren
un control extenso, tales como dispositivos de instrumentación, máquinas de pro· C. MEMORIA PRINCIPAL
ducción o terminales inteligentes.
La memoria principal almacena las instrucciones y los datos que pueden ser carga-
dos directamente para procesarlos en Ja CPU durante el ciclo de ejecución de una
instrucción. La unidad básica de archivo, una palabra, consiste de un número de
B. JERAROUIA DE LA MEMORIA bits, fijado para una computadora dada. Cada palabra tiene su propia orientación
(Ja memoria principal para un programador de lenguaje de nivel bajo se parece a Ja
En cualquier époea, existen diferentes tecnologias que pueden ser empleadas para mostrada en la Fig. 7-1). En una computadora de bytes orientables, una palabra
almacenar información. Algunas de éstas ofrecen velocidades altas y son caras; consta de un número fijo de bytes (generalmente de dos o cuatro bytes de 8 bits), te-
otras, menos costosas, se pueden usar como memorias de velocidad baja-capacidad niendo cada uno una. orientación.
alta. Por tanto, en un sistema de cómputo, es conveniente almacenar la informa· Como se muestra en Ja Fig. 8-1 , para tener acceso a una posición de la memoria
ción en una jerarquia de memorias. Los elementos más altos de esta jerarquia son principal, se presenta su orientación en el MAR, y se Je da Ja señal de "escribir" o
rápidos, caros relativamente, con unidades de memoria de capacidad reducida. Al· "leer", copiándi>se entonces los contenidos del MDR en esta posición o _viceversa.
macenan Jos datos e instrucciones que se están procesando en la actualidad por la Las memorias principales son memorias de acceso aleatorio (RAM);* esto es, el
CPU .o que se necesitarán pronto. Las unidades de capacidad alta, permanecen aba- tiempo para tener acceso a cualquier palabra (leer o escribir) es el mismo, indepen·
jo en la jerarquia, almacenando la información restante. dientemente de su orientación. Las dos caracteristicas fisicas comunes de Ja memo-
La jerarqula de la memoria de la computadora puede incluir lo siguiente: ria principal son las memorias de núcleo magnético y (ahora con mayor frecuencia)
las memorias de semiconductores, ambas por completo electrónicas. Al tiempo re-
( 1) Los registros de la CPU almacenan la instrucción actual que se está ejecu · querido para leer los contenidos de una palabra de la memoria se le llama tiempo
tando y los datos que se están manipulando. de acceso; el tiempo minimo entre dos accesos consecutivos es el tiempo del cicw. El
(2) Una memoria amortiguadora (de reserva), incluida en algunas máquinas, tiempo del ciclo de Ja memoria es casi siempre el doble del tiempo de acceso en el
se localiza también en la CPU. Retiene los datos e instrucciones que serán caso de las memorias magnéticas; éste es ligeramente mayor en las memorias de se·
necesitados por la CPU en un periodo corto; éstos son traidos automática· miconductores. La velocidad de las memorias principales difieren; con bastante
mente al registro desde la memoria principal por un hardware especial. frecuencia los tiempos de acceso a Ja memoria están en el rango de 0.5-0. 75 ms. La
(3) Una memoria principal almacena los datos e instrucciones accesibles de capacidad de la memoria principal varia desde cerca de 16K palabras (o bytes) en las
manera a la CPU (véase la Sec. C). computadoras pequeñas a decerras de millones en las muy potentes.
(4) Una memoria secundaria, de capacidad grande, almacena a las instruc· Tanto la memoria de núcleo magnético como Ja de semiconductor tienen una
clones y a los datos que tienen que ser colocados en la memoria principal organización matricial, en Ja Fig. 8-2 se presenta un esquema de éstas.**
antes del proceso. La matriz de la memoria consiste de una cantidad de celdas de 1 bit (un núcleo
Los archivos secundarios rápidos, tales como los tambores y los discos
en el caso de las magn~ticás, un vibrador en el caso de las memorias de semiconduc-
de cabeza fija (véase la Sec. D) a menudo se configuran con la memoria
tores).
principal en un sistema de memoria virtual (véase el Cap. 9), manejado
automáticamente por el software.
Los dispositivos de archivo secundario lentos de capacidad muy grande
almacénan la información manejada por el subsistema de entrada/salida
• Random-accea memoriea. (N. del T .)
del sistema de operación. •• Lu organizaciones altanas, que usan los m.i.smoe principiOI, tambil:n 10n empleadas.
186 Conceptos de los sistemas de cómputo Organización de los sistemas de r,ómputo 187

bit/ linea del sentido La dirección de la corriente en loa alambres determina la dirección del magne·
tismo en el núcleo; existen dos estados magnéticos estables en un núcleo, a uno de
los cuales se considera un O y al otro un 1.
celda que almacena 1 bit La memoria ·magnética tiene Ja ventaja de ser no volátil; cuando se elimina la
corriente, la información en los n(Jcleot permanece sin cambio; las memorias de se-
linea de palabra
miconductor son volátiles.
Cienas tecnologias de memoria de 1emiconductor (como la de semiconductores
bipolares) ofrecen velocidades muy altH; ton de cualquier forma , costosas y se usan
principalmente en los registros de la CPU y en las memorias de reserva. Los tiempos
de acceso ofrecidos por los asi llamadot semiconductores MOS usados predominan-
temente como memorias principales ton cercanos a los magnéticos o algo más rápi-
MAR dos.

D. MEMORIA SECUNDARIA
Fig. 8-2. Una matriz de la memoria principal.
La capacidad de la memoria principal ett4 limitada por su costo. Las tecnologias
alternas proporcionan la posibilidad de almacenar a menor costo vol(Jmenes altos
Se selecciona la palabra que se va a escribir o a leer (es decir, se conduce la de información que no necesita ser accetíble de inmediato a la CPU. Esta informa-
corriente a través de la linea de palabra) después de descodificar su orientación ción es almacenada en los dispositivo• de memoria secundaria (también llamada
contenida en el MAR. Cuando se lee la memoria, los bits lineas de sentido, a través auxiliar) y se trae a la memoria principal para su aprovechamiento.
del circuito de orientación, copian la proyección de los Oy los 1 contenidos en lapa· Dado que los dispositivos de Ja memoria .ecundaria están conectados a la memo-
labra en el MDR. Cuando se lleva a cabo la escritura del MDR, la linea de palabra ria principal de una manera similar a la de lot dispositivos de entrada/ salida (a am-
de la palabra seleccionada y los bits/lineas de sentido correspondientes a los biu 1 bas clases con frecuencia se les llama perlf'n'cos), la transferencia de información
en el MDR, proporcionan la corriente necesaria para escribir los 1 sólo en los bits entre éstos y la memoria principal IC maneja de manera similar (véase la Sec. E.)
correspondientes de la palabra seleccionada; los otros son limpiados automática- Los dispositivos con más frecuencia wados para el archivo secundario son
mente a O. A esto se le llama el principio de corrientes coincidentes del acceso a la electromecánicos con un medio de archivo magnético: tambor, disco y cinta. Debi-
memoria. do a la presencia de los componente• mecánicos, tales memorias, son inherente-
La diferencia esencial entre las memorias de núcleo magnético y las de semicon- mente más lentas que la memoria principal. El tambor y el disco, memorias secun·
ductor es la lectura destructiva en las magnéticas. Debido a sus propiedades &icas, darlas rápidas relativamente son dispositivos de archivo de acceso directo (DASD)* lo
mientras que se determina el estado de un núcleo, se destruye el estado y es necesa·
rio escribirlo de nuevo durante la segunda mitad del ciclo de lectura. Esta escritura :i- que hace posible colocar su mecanismo de llCCCIO en el área de los datos requeridos
(en su pista) y luego alcanzar Ja partida daeada pasando a éste sobre las áreas que
se lleva a cabo automáticamente por el sistema de memoria, y el programador no se intervienen .. La cinta, barata relativamenu, et un dispositivo de acceso secuencial:
percata de ello. para tener acceso a cualquier panída almacenada en ella se tienen que pasar tod as
Mientras que las memorias de semiconductor están compuestas de multivibrado· las otras panidas, de orientación menor. E«o limita la aplicación de las cintas a ca-
res (véase el Apéndice C), las de núcleo magnético constan de núcleos de ferrita en IOS en los que se tiene que tener acceta a la.t panidas en el orden en que fueron al-
forma de anillo de 0.02 a 0.05 plg de diámetro (véase la Fig. 8-5), con los alambres macenadas.
atravesándolo. En todos estos dispositivos Ja información IC almacena en un medio magnético
como una trayectoria de dominios magnttícot cuyos dos estados alternos se conside-
ran O y l.

;%
Las tecnologias de memoria secundaria mú nuevas, sin partes móviles, son las
memorias de burbuja magnética (MBM) .. no volátil y los dispositivos acoplados
por carga, más rápidos y. volátiles (CCD)....

• Del in¡¡I&: direct·accw storage d•vice1. (N . dd T .)


••Del ingl& : magnetic bubble memorieo. ( N , del T .)
Fig. 8-ll. Un;núclco magn~tico. ••• Del i.olg&·: charge-coupled devices. (N. dd T .)
188 Conceptos de los sistemas de cómputo Organización de los sistemas de cómputo 189

Dacio que todos los dispositivos de la memoria secundaria son memorias de acceso no a la unidad de control del dispositivo
aleatorio, el tiempo necesario para tener acceso a una posición es mucho mayor cabeza lectora/escritora
que el subsecuente necesario para el acceso a su sucesor fisico. Por tanto, la infor-
mación se almacena en la memoria secundaria como un bloque, más que como una pista~~... ~
secuencia de palabras con orientación consecutiva.
La velocidad de los dispositivos de acceso directo se caracteriza por dos par{i-
metros: el tiempo de acceso (para la primer palabra o byte del bloque) y la razón de
transferencia de las palabras o bytes subsecuentes. Los dispositivos de acceso se-
-{1( ... ( (f'-
cuencial por lo general no tienen acceso de modo directo sino que llevan a cabo la
transferencia secuencialmente_ Fig. 8-4. Tambor magnético.
Las capacidades y velocidades típicas de los dispositivos de archivo secundario se
presentan en la Tabla 8-1; en seguida se describe a los dispositivos más detallada-
mente. Los valores actuales de estos par{imetros varlan con a!llplitud.
~i.
"&1~ (b) Tiempo latente (retardo rotacional), el tiempo necesario para que Ja pa-
TABLA 8-1 Capacidades tlpicas y vdocidades de los dispositivos de m~oria secundaria de
labra dada se coloque bajo la cabeza. El tiempo necesario para la mitad de
funcionamiento superior. un giro complet~ del tambor se toma como el tiempo latente promedio.

DISCO Un tambor, se usa más bien poco, es un dispositivo de capacidad limitada. El vo-
(cabeza-móvil) lumen (portador flsico de la información), en este caso el cilindro en si mismo no es
TAMBOR de capacidad mayor CINTA
intercambiable.

capacidad 4 por transmi50r: l 00 por 2400 pies de cinta:


(Mbytes> por ejemplo (mayor para discos grandes); 50
800 pistas x por ejemplo, 20 2. DISCO MAGNETICO
5000 bytes superficies X 400 pistas
por pista X 12 500 bytes por pista
Un disco magnético es el disco de almacenamiento secundario m{is usado común-
mente. Por lo general, se emplea un disco de cabeza móvil (mostrado en Ja Fig.
8-5).
retardo de retardo de rotación: 8 no se
tiempo de
acceso rotación: 8 movimiento de cabeza: ~O aplica
(ms) cabeza lectora /escritora brazo
total: ~8

relación de
transferencia 0.2
(Mbytes/s)

1. TAMBOR MAGNETICO

Un tambor magnético es un cilindro cubierto con material magnético (véase la Fig.


8-4). La información se almacena en pistas colocadas de manera circular, con una
cabeza lectora/escritora sobre cada pista. Un tambor gira de manera continua, por
lo que coloca la palabra deseada bajo la palabra apropiada.
disco
El tiempo de acceso del tambor consta de: mccanilmo de
acccao tipo peine

(a) Un tiempo despreciable necesario para que los circuitos del tambor selec-
cionen la cabeza apropiada. Fig. 8-5. Disco de cabeza móvil.
190 Conr:eptos de los sistemas de r:ómputo
Orgánizar:ión de los sistemas de r:ómputo 191

pista 1" se asemej an a los discos fonográficos flexibles y simples colocados en cubiertas pro·
tectoras. Se intercambian fácilmente en un transmisor con una cabeza sim ple y al·
macenan cerca de l Mbyte de d atos.
pista O
.
~
3. CINTA MAGNETICA

La cinta magnética es el medio de almacenamiento m enos caro. Su uso está limita·


do debido a la naturaleza secuencial del acceso.
El volumen (carrete). es intercambiable en la transmisora de cinta. Generalmen·
te, se usan de 7 y 9 pistas (el significado de la palabra es diferente para las p istas con
Fig. 8-6. Una superficie del disco . discos y con tambores). En la Fig. 8-7 se muestra un fragmento de una cinta de 9
pistas.
Un disco consta de un oonjunto de placas semejantes a 105 discos fonográficos. Cada
placa tiene d05 superficies (véase la Fig. 8-6), con cient05 de pistas concéntricas, al·
codificaci6n de: O 1 2 .. :¡.
macenando la información en cada una de ellas. La información es tomada por un
ensamble en forma de peine de cabezas lectoras/escritoras sobre brazos que se byte con 8 bits
1 1

'}
pueden mover lateralmente mientras que los discos giran sin intermisión. En la ca· bit de paridad \ con bit de paridad
1 11 1
beza móvil de un disco, existe solamente una cabeza lectora/ escritora por superfi· 11 •• • l
11 1
cie. Todas las cabezas se mueven juntas; al conjunto de pistas, uno por superficie, al 1 1.
cual se pu~de tener acceso en una posición dada del mecanismo de acceso, se le lla· 1 1
ma ciiindro. Por tanto, un cilindro consiste de una pista simple en cada superficie,
cortándolo a través de las superficies, como estén.
Algunos discos son orientables por sectores; es decir, para tener.acceso a una Fig. 8-7. Fragmento de una cin ta magnEtica.
palabra/ byte en una pista dada, se tiene que leer el sector fijo completo (por
ejemplo 512 bytes). Como la cinta se mueve, los bytes consecutivos se colocan bajo las ca bezas
let!toras/ escritoras (7 o 9 de éstas éqrresporidiendo al número de pistas de la cinta)
El tiempo de acceso a una palabra consta de: del transmisor. El bit de paridad (agregado de modo que el número de los I en una
columna sea non) sirve para la detección de errores.
(1) Un tiempo despreciable para la selección de la cabeza electrónica. En las minicomputadoras, a menudo se empaca a la cinta magnética en caset es
(2) Un tiempo de búsqueda (movimiento de la cabeza) necesario para colocar o en cartuchos más grandes.
la cabeza sobre la pista deseada, al mover el mecanismo de acceso.
(3) Tiempo latente (retardo de giro), para que la palabra sea puesta bajo la E. ENTRADA/SALIDA
cabeza.
El subsistema de entrada/ salida de un sistema de una computadora transfiere la in ·
El tiempo de búsqueda, considerablemente mayor que el tiempo latente (véase
formación entre la memoria principal y el mundo exterior . Consta de los dispositi·
la Tabla 8·1) hace a los discos de cabeza móvil más lentos que los tambores. Estos
vos de entrada/salida cuya naturaleza y cantidad depende de la configuración y del
discos tienen, de cualquier forma, una capacidad grande y son construidos a menu·
equipo de control de entrada/ salida responsable de controlar a ést05, asf como de los
do con paquetes de discos intercambiables (pistas de platos). dispositivos de memoria secundaria.
Cuando se necesita una velocidad de acceso particularmente alta, se usan 105 dis·
cos con cabeza fija con una cabeza sencilla por pista. No se presenta el tiempo de
búsqueda, ya que.Ja cabeza sobre la pista deseada se selecciona electrónicamente. 1. DISPOSITIVOS DE ENTRADA/SALIDA
Tales discos son caros y tienen una capacidad menor.
En aplicaciones menores, tales como en los sistemas de mini y de microcomputa· En varios sistemas se usa una multitud de disp05itiv05 de entrada/ salida. Algun os
doras, se usan con frecuencia los discos flotantes. Estos disp05itiv05 muy económicos de ellos están diseñados para influencia rCclproca con las personas; otros actúan con
equipo fuera de los sistemas de cómputo.
192 Conr:eptos de los sistemas de r:ómputo Organización de los sistemas de cómputo 193

Los dispositivos que se encuentran con mayor frecuencia se estudiará.o aquf. (b) Debido a la lentitud relativa de los periféricos (particularmente los dispo-
sitivos de entrada/ salida), muchas instrucciones pueden .s er ejecutadas
(a) Terminales teleimpresoras y pantallas. Estos dispositivos se usan para inte- por la CPU mientras se transfiere una palabra simple. De cu alquier for-
ractuar directamente con la gente. En la actualidad constan de dos dispo- ma , sólo la CPU o un periférico pueden tener acceso a la memoria prin ci-
sitivos cada una: un tablero de entrada y una impresora de caracteres en pal durante un ciclo de memoria dado .
el caso de las teleimpresoras, un tablero y una pantalla de tubo de rayos
catódicos en el caso de la terminal de pantalla.
En general, una transferencia de entrada/ salida se identifica como sigue:
Las teleimpresoras son más lentas (10-50 caracteres/ s) y proporcionan
una salida de copia fuerte (impresa). Las terminales de pantalla sé>n capa-
(a ) El número de d ispositivos.
ces de velocidades mayores y vienen en una gran variedad. Las pantallas
(b ) La orientación de la p rimera localidad en la memoria p rin cip al.
alfanuméricas pueden proyectar textos exclusivamente, por ejemplo, ca-
(c) En el caso de una transferencia que in cluya a u n disposit ivo d e archivo se-
ractc;res de su conjunto de caracteres. Las pantallas gráficas son capaces
cundario, la orientación de la primera pala bra (o byte) en este dispositivo ,
de representar varias curvas e imágenes y a menudo son capaces de acep-
y la dirección de la t ransferencia.
tar entradas directamente de la pantalla.
(d ) El número de palabras (bytes) que se transfieren.
Se discierne una clara tendencia hacia las llamadas terminales inteli-
gentes, que tienen capacidades de proceso limitadas. Con frecuencia
tienen microprocesadores interconstruidos. Mientras que la transferencia se lleva a cabo pala bra por palabra, los elementos
(b) Impresores de linea: Una impresora de linea es esencial para una salida de (b ) hasta (d) de esta identificación se haÍl actualiza do después d e que se ha transfe-
copia fuerte. Estos dispositivos imprimen una lfnea a la vez y algunos son rido cada palabra. Se tiene que determinar el fin d e la transferencia.
capaces de velocidades de SO 000 lineas/ min aunque son más comunes en Existen tres métodos de control de entr ada/ salida :
el rango de !100 a 1000 llneas/ min. Sólo que las impresoras de construcción
electromecánica son más lentas; las más rápidas usan las técnicas de (a ) Bucle de espera de entrada/ salida: La propia CPU controla el p roce50 de
electrostática, de temperatura, de rociamiento de tinta y otras para crear transferencia completo obedeciendo las instrucciones del programa. Para
una linea impresa y se les llama, por tanto, impresoras sin impacto. no errar una palabr a , un buen tiempo antes de que se complete la transfe-
(c) Lectoras de tarjetas perforadas y perforadoras: El medio más ampliamente rencia de cada palabra, la CPU registra u n bucle d e espera como m anda·
usado por estos dispositivos es una tarjeta de 80 columnas, en donde se do por el programa , realizando las instrucciones que comprueban la ter-
pueden representar hasta 80 caracteres alfanuméricos. Las lectoras rápidas minación. Ningún otro trabajo se hace entonces por la CPU.
procesan hasta 2000 y las perforadoras hasta 500 tarjetas/ mio.' Este método se usa sólo en comp utadoras rudimentarias debido al lar-
(d) Lectoras de cinta de papel y perforadoras: Estos son dispositivos lentos rela- go tiempo de espera u tilizado por la CPU en el bucle de espera.
tivamente, con las lectoras rápidas operan a 500, y las perforadoras a !100 (b ) La interrupción de entrada/ salida: En este caso también la p ropia CPU
caracteres/ s. controla la transferen cia. De cualquier forma , se tiene u n sistema de in-
(e) Consolas: Son usadas por los operadores del sistema para cont rolar la ope- terrupción del hardwa re. Esto significa que cuando el periférico está listo
ración de la computadora y para comunicarla con los interruptores y/o después de una transferencia de palabra, genera una señal de int errup -
tablero del panel en uso . ción d e entrada/ salida a la CPU, hacien d o q ue se conozca este est ado.
Las interrupciones son procesadas por la CPU como se describió en la sec-
ción A de este capítuio. Estas hacen evidente la necesidad de un bucle de
2. CONTROL DE ENTRADA/SALIDA
espera.
El control de entrada/ salida· es el medio de transferir la información· entre la me- (c) Canal de entrada/ salida: Para liberar a la CPU de la mayor parte de las
moria principal de la computadora y · un ·dispositivo ·periférico (una unidad ·de tareas de entrada/ salida, se puede proporcionar por separado en los sistemas
entrada/ salida o una de archivo secundario). de cómputo grandes, un procesador de entrada/ salida llamado canal.
La naturaleza de esta transferencia se determina por los factores siguientes en la Un canal recibe una orden (o conjunto de instrucciones) d e la C PU que
opera"ción periférica: identifica a la operación de entrada/ salida. Su bsecuentemente , el canal
inicia y control el proceso de transferencia completo y envía una señal de
Una transferencia -simple de entrada/salida incluye la transmisión de interrupción a la CPU siguiendo a la termin ación.
(a)
muchas palabras (bytes), mientras que generalmente se transfiere una pa- Los canales tienen acceso a la memoria principal mediante el ciclo de
labra a la vez. etiasión: cuando un canal necesita un ciclo d e memoria, éste se asigna al
194 Conceptos de los sistemas de cómputo Organizac:ión de los sistemas de cómputo 195

canal, aun cuando la CPU pueda requerirlo también. Esto evita la pérdi· colector simple
da de la información que se est:i transfiriendo. r
Los canales son, hasta cieno punto, procesadores independientes que
ejecutan un conjunto limitado de órdenes. En los sistemas de minicompu·
l 1 1 1
dispositivo dispositivo
tadoras, funciones similares son realizadas m:is simplemente por los CPU memoria
principal
de entrada. ... de entrada/
controladores del acceso a la memoria directa. salida salida
1 N

F. ORGANIZACION DE COLECTORES DE UN SISTEMA DE (a) estructura de colector simple

COMPUTO colector de memoria

Las unidades funcionales de un sistema de cómputo están conectadas de una


1 1 1
manera organizada para proporcionar la comunicación necesaria entre ellas. Los
datos generalmente son transferidos entre una palabra de dos unidades (o byte) a la CPU memoria
canal
vez. Por lo que es necesario un conjunto de alambres para la conexión; además de principal
los datos, estos alambres deben llevar también la información de control necesaria.
colector de
A este conjunto de alambres, junto con los circuitos necesarios para establecer una entrada/salida 1
conexión a través de ellos, se le llama colector. Por lo general un colector simple es
companido por varias unidades, de las cuales sólo dos lo pueden usar simultánea·
1 1
mente. Se usan dos estructucturas de colectores; dos de las más populares se muestran dispositivo dispOsitivo
en la Fig. 8-8. Una estructura de colector simple [Fig. 8-8 (a)] es típica para las mini de entrada / ... de entrada1
y microcomputadoras más simples. Cuando es barata, proporciona la comunicación salida salida
1 N
de dos unidades a la vez, por lo que limita la velocidad del sistema.
En las computadoras principales, se emplean estructuras de colector múltiple.
En la Fig. 8-8 (b) se presenta una estructura de dos colectores típica. Es posible Ja (b) estructura de dos colectores
transferencia simultánea de datos entre dos unidades conectadas a cada uno de los
colectores. Por ejemplo, mientras que una instrucción se transfiere de la memoria
principal a la CPU, también puede tener lugar una transferencia de información Fig. 8-8. Estructuras de colector.
del disco al canal.

G. SISTEMAS DE COMPUTO CON UNIDADES


DE PROCESAMIENTO CENTRAL (CPU) MUL TIPLES
REDES DE COMPUTADORA equipo periférico

Los sistemas de cómputo con CPU múltiples incluyen redes de multiprocesadores y


computadoras que se conectan actualmente con sistemas de cómputo múltiple (al·
memoria principal
gunos de los cuales pueden, en cambio, ser multiplicadores).

1. MULTIPROCESADORES

Para incrementar la velocidad de procesamiento, es posible tener varias CPU com-


paniendo la memoria principal común (véase Fig. 8-9, donde se muestran dos
CPU) . Las CPU pueden ejecutar programas diferentes de esta memoria o cooperar
en la ejecución del mismo programa. Fig. 8-9. Un multiprocesador.
Í':

<>S. Organización de los sistemas de cómput o 197


196 Conceptos de los sistemas de cámputo

terminales
Los multiprocesadores ofrecen también la ventaja de aumentar la confiabilidad,
ya que si un procesador falla, otro puede tom¡¡.r su lugar.
El uso de las CPU en estos sistemas de multiprocesamiento está dirigido por el
software del sistema operativo.

computadoras
2. REDES DE COMPUTADORA Y COMUNICACION DE DATOS con terminales

Una red de computadora es un conjunto de sistemas de cómputo independientes, computadoras


generalmente ubicados en lugares distantes y terminales remotas, todos conectados
por una red de comunicaciones. Las redes de cómputo se crearon para compartir
terminales
recursos, tales como un software especial e instalaciones del hardware o bancos de
datos que están disponibles en varios sistemas, y para distribuir la carga del proce·
samiento sobre estos sistemas. Proporcionan el procesamiento distribuido trayendo Fig. 8-11. Red de computadora (organización jerárquica).
la potencia de cómputo a los lugares en donc!e se ·n ecesite.
Para la comunicación entre sus nodos (los sistemas de cómputo y las terminales Para usar la red más eficientemente, los mensajes en algunas redes son divididos
lejanas), las redes actuales usan prodominantemente las instalaciones telefónicas en paquetes de longitud fija (típicamente, de 128-256 bytes) que son transmitidos in-
existentes. Para acoplarlas con una línea telefónica adaptada sólo para señales de dividualmente. Cada paquete consta de la información actual (pane del mensaje),
baja frecuencia como la voz, se necesitan los modems (modulares-demoduladores). la identificación de su destino, y el código de secuencia que especifica su posición
Estos transforman las señales digitales en sus equivalentes en grado de voz para la dentro del mensaje. Por tanto, en su destino un mensaje se puede rearmar a panir
transmisión sobre la linea (modulación) y convierte a la señal modulada en el extre· de los paquetes que lo constituyen. Las redes de este tipo son llamadas redes de de-
mo receptor a bits (demodulación). n'vadón de paquetes y son una alternativa imponante para las redes den'vadoras de
En la clase más simple de red, una cantidad de terminales remotas, a menudo mensajes, en las que el mensaje completo es transmitido, y para las predes de d.en·-
con algunas capacidades de procesamiento propias (llamadas terminales inteligen· vación de circuito, en donde se establece una conexión fisica entre el transmisor y el
tes), están conectadas a un sistema de cómputo. Como se muestra en la Fig. 8-1 O, la receptor durante todo el tiempo de transmisión.
comunicación entre una terminal y la computadora se complementa con un par de Los proceso fijos, llamados protocolos, son seguidos en una red para establecer
modems y una línea telefónica. Un procesador especial, por lo general, una mini- una conexión, usarla y finalmente interrumpirla.
computadora, llamada procesador final frontal, se incluye frecuentemente para Junto con las redes que cuentan con la existencia de las instalaciones telefónicas,
controlar la función de comunicación de la CPU del sistema. han surgido las redes de datos en las que la señal digital se transmite directamente
Las redes de computadora tienen varias topologías dependiendo de la ubicación (y por tanto, no son necesarios los modems). La comunicación digital ofrece rela·
de los centros de cómputo y de las estaciones de terminales remotas involucradas, ciones de transmisión más grandes y de mayor confiabilidad. Los cables coaxiles o
Dado que los nodos de la red se comunican uno a otro de manera intermitente, no las ondas de radio, las últimas en ocasiones con el uso de satélites de comunicación,
todos ellos tienen conexiones directas. Otras están conectadas mediante nodos in- se pueden emplear para llevar los datos digitales. De hecho, en el no distante futuro
termedios, algunos de los cuales sirven exclusivamente como centros de derivación a el sistema telefónico se volverá digital por completo, y las redes de comunicación
través de los cuales se dirigen los mensajes que fluyen en la red. Estos nodos tienen podrán llevar voces, imágenes y datos, todas en forma digital.
memoria en donde se pueden almacenar temporalmente los mensajes antes de ser
transmitidos. Un ejemplo de una red de cómputo se muestra en la Fig. 8-11. SUGERENCIAS PARA LECTURAS MAS PROFUNDAS

Junto con los libros listados en el capitulo anterior, se recomiendan los textos generales
siguientes.

Sloan, M. E.: Computer Hardware anti Organization: An lntroduction, SRA, Chica-


terminal modcm linea de modcm procesador final go, 1976.
remota comunicación frontal Estudia la lógica as! como el nivel del sistema del diseño de la computadora.
Tannenbaum, A. S.: Structured Computer Organization, Prenticc-Hall, Englewood
Cliffs, N.J., 1976.
Fig. 8-10. Un sistema de comunicación de daros simple.
198 Conreptos de los sistemas de cómputo

Hamachcr, V. C., Vrancsic, Z. G., and Zaky, S . G.: Computer Organization, Pren-
tice-Hall, Englewood Cliffs, N .J., 1978.
Entre otros temas, introduce las redes de microcomputadoras y de computadoras.
9
Haycs, J. P.: Computer Architecture and Organization, McGraw-Hill, New York,
1978.
Un texto más avanzado . Software de los Sistemas
Se recomiendan también los siguientes libros especializados.
de Cómputo.
Ogdin, C. A.: Microcomputer Design, Prentice-Hall, Englewood Cliffs, N.J., 1978.
Kraft, G. D .. and Toy, W. N .: Mini/Microcomputer Hardware Design, Prentice- ·Sistemas de .Operación
Hall, Englewood Cliffs, N .J ., 1979.
Martin, J.: Te/ecommunications and the Computer, 2nd ed., Prentice-Hall, Engle-
wood Cliffs. N.J., 1976.

El hardware de un sistema de cómputo es capaz de ej ecutar las instrucciones en len-


guaje de máquina almacenadas en la memoria p rincipal.
Para la rápida administración automática de los recursos del sistema d e cómpu -
to y para que el programador esté capacitado para usar un lenguaje simbólico me-
jor que el lenguaje binario de la méquina, se requieren inst~laciones de software
extensas y sistemas de programas. Las instalaciones del software adicional también
se pueden proporcionar para simplificar el desarrollo del software d e ap licaciones
(programas del ·usuario).
Los desarrollos més destacados en la industria d e la computadora son el abati-
miento de costos del hardware como resultado del progreso tecnológico y el incre-
mento de costos del trabajo profesional relacionado d irectamente a la im plantación
del software. Es , por tanto , importante el proporcionar un desarrollo apropiado
para el trabajo de un programador.
El software de los sistemas, a lgunos de los cu ales se estudian en otra parte , se re -
pasarán aquí. Los sistemas de operación, los controla dores software del ha rdware ,
son Ja materia principal de este estudio.

A. VISTA PANORAMICA DEL SOFTWARE DE LOS SISTEMAS

Existe una gran variedad de software de los sistemas. Su disponibilidad para un mo-
delo de computadora dado depende del tamaño de la configuración tfpica y está re-
lacionada grandemente a su popularidad. Las series d e modelos de computadoras
populares tienen varias variantes de productos del software , con parám etros de fun-
cionamiento diferentes.
Lo siguiente es una vista su perficial del sistema de software básico.

1.TRADUCTORES

Un lenguaje simbólico de nivel bajo, propio a un modelo de computadora, llamado


lenguaje de ensamble, es traducido a lenguaje de máquina por un ensamblador
simple relativamente (véase el Cap. 7-G).
200 Conceptos de los sistemas de cómputo Software de los sistemas de cómputo. Sistemas de operación 201

La mayor parte de los lenguajes de nivel alto son traducidos por un compilador 5. SISTEMAS DE ARCH!VO Y ADMINISTRACION
(véase el Cap. 6-B) a un programa objeto completo que pueda entonces ser ejecutado DEL BANCO DE DATOS
repetidamente. Algunos lenguajes son traducidos por un intérprete (véase el Cap. La mayor parte de los programas de aplicación, particularmente en el área comer-
6-C), el cual traduce y ejecuta programa instrucción por instrucción. Para varios cial , se construye alrededor de grandes volúmenes de datos y se organiza en
lenguajes se tienen disponibles compiladores e intérpretes. archivos (véase el Cap. 10). Para mantener estos archivos y oh.tener los datos re -
queridos de ellos, se usan Jos sistemas de administración de archivos.
En muchos casos es benéfico, como se estudia en el Cap. 10, unificar los archivos
2. ENLAZADORES Y CARGADORES
concernientes a un aspecto particular del desarrollo en un sistema, llamado banco
de datos. De esta manera, se evita Ja duplicidad de datos, y todos los programas de
Estos dos programas de sistemas sirven para éolocar el código traducido en las posi- aplicación tienen acceso a los datos a través de una entrefase de software uniforme ,
ciones de Ja memoria principal desde la cual será ejecutado. Si un programa consta llamada sistema de administración del banco de datos.• Mientras se complica, per-
de un número de unidades (el programa principal y los subprogramas), todas las re - mite Ja administración de datos flexibles y Ja facilidad de resolver fracciones sofisti·
ferencias entre ellos son resueltas por el enlazador (véase el Cap. 7-G). El programa cadas por el banco de datos.
completo, con sus datos, es colocado subsecuentemente en la memoria principal
por un cargador (véase nuevamente el Cap. 7 ·G). Un cargador de reubicación tiene
la capacidad de colocar un módulo de carga en cualquier parte de la memoria en 6. MONITORES DE TELECOMUNICACION
donde esté disponible el número necesario de posiciones consecutivas.
En un sistema.de cómputo con un número de terminale5 remotaS intercambia."1do mensa-
jes con Ja CPU, se emplea a menudo un paquete de software especial que proporciona
3. SISTEMAS DE OPERACION Ja comunicación entre estas terminales y el sistema de operación. Este paquete, lla-
mado moni"tor de telecomunicación, asegura Ja transparencia de Ja terminal : todos
Los sistemas de operación manejan los recursos del hardware del sistema de cómpu· los programas de aplicación se pueden escribir sin recordar las características fisicas
to de tal forma que establece el modo deseado de interacción usuario-sistema y pro- de las terminales, manejados completamente por este monitor.
porciona una utilización eficiente de los recursos del sistema. La complejidad de Jos La relación entre el monitor de la telecomunicación, el DBMS y el sistema de
sistemas de operación varía grandemente con el tamaño del sistema de cómputo. operación está sugerida en Ja Fig. 9-1.
Este .software sofisticado es el objeto principal del capitulo presente.

4. PROGRAMAS DE UTILERIA
sistema de
Los de utileria son programas que simplifican el uso del sistema de cómputo el re- monitor sistema administración
de telecomunicación de operación
emplazar el programador de una tarea en panicular. Esto~ incluyen el auxilio del de datos
software en el desarrollo de programas. Ejemplos importantes son:
mensajes
terminales banco de datos
• Editores el software para el procesamiento de textos se usa para modificar
remotas programas
un programa (o cualquier otro texto) separando, insertando o modifican-
de aplicación
do lineas, palabras o caracteres.
• Depuradores son programas que ejecutan un programa bajo desarrollo
paso por paso, sacando los valores de sus variables vitales y produce sus
memorias de descarga (impresiones de contenidos binarios de áreas de Ja
memoria seleccionadas), etc. Fig. 9-1. Software de control de un sistema de cómputo extenso.
• Losprogramas de clasificación/ unión se pueden usar para procesar gran-
des archivos de datos.
• Programas usados para transcribí~ información de un dispositivo a otro;
por ejemplo, de un paquete de tarjetas en Ja lectora de tarjetas a un disco. • DBMS. del ingl&: data base management syscem. (N . del T . )
202 Conceptos de los sistemas de cómputo Software de los sistemas de cómputo. Sistemas de operación 203

B. DEL CONTROL MANUAL DE LAS COMPUTADORAS A LA necesarios y supervisa su ejecución. En un sistema de cómputo simple p uede h aber
PROGRAMACION'UNITARIA solamente un programa sencillo en ejecución en cualq uier tiempo dado; no se co-
mienza ningún trabajo hasta que se haya terminado el anterior. Un sistem a de ope-
El funcionamiento de un sistema de operación es lo más apreciado cuando se consi- ración que maneja a la computadora de esta forma es llamado sistema de p rogra-
dera la operación de una computadora rudimentaria (como una microcomputado- mación unitaria. Dependiendo d e su complejidad, p uede proporcionar m uchas
ra económica) sin tal sistema. ventajas al programador (similares a las descritas a .continuación para un sistem a de
Para correr un programa simple, sin subprogramas, en una computadora con operación de programación m últiple), tales como rutinas para manejar la
un dispositivo de entrada y uno de salida y sin un sistema de operación de ninguna entrada/salida o un sistema de un archivo para almacen ar programas y d atos en un
clase, el operador tiene que hacer manualmente lo siguiente (en este caso, por lo ge- dispositivo de memoria secundario. La mayor parte de las rutinas del sistema de
neral el programador). operación se almacenan por sí m ismas en un disco o cinta y son llamadas a la me-
moria principal por Ja parte del sistema operativo residente allí, el que se carga si-
(1) Ya que inicialmente la memoria principal no contiene instrucciones por
ejecutar, se tiene que llevar a cabo la carga del programa inicial* (tam- ..
guiendo la depuración.
. .::;:
bién llamado depurador). Al ajustar Jos interruptores en Ja consola del
operador de Ja máquina y oprimir un botón, se puede almacenar una ins-
C. PROGRAMACION MULTIPLE
trucción simple en Ja memoria. Esta instrucción se leerá en la siguiente y 1;•_'
as[ sucesivamente, hasta que el cargador del programa (véase el Cap. 7-G)
• _ Un 's istema de cómputo más grande consta de recu rsos muy diferentes. Un progra-
esté almacenado en la memoria principal; como si fuera "empujado por
ma 'sencillo usa intermitentemente a la CPU y lleva a cabo la entrada o salida.
su propio depurador":
-· ' E.Xcluyendo a las situaciones excepcionales que requieren un ingenio considerable
(2) El traductor apropiado se carga desde un dispositivo de entrada.
por pane del programador, el programa no está disponible para usar la CPU
(3) El traductor lee en el programa fuente y produce el programa objeto en el
miéntras se esté realizando fa entrada o salida a medias. En un sistema de progra-
dispositivo de salida. Si son necesarios varios pasos del traductor, la opera-
mación unitaria,. donde sólo se p uede ejecutar un p rograma a Ja vez por.el sistema,
ción se repite varias veces con las formas intermedias del programa bajo
se . origina mucha marcha al vacío de los recursos, mientras q ue otros trabajos
traducción.
'pueden demorarse. El tiempo de vida en tal sistema d e dos trabajos d e una estruc-
(4) El programa objeto es cargado (procurando que el cargador permanezca
tura muy simple se muestra en la Fig. 9-2(a). Cada u no de los dos trabajos se supone
en la memoria principal).

-
(5) Se ejecuta el programa objeto, con los datos necesarios obtenidos a través trabajo 1 trabajo 2
del dispositivo de entrada. entrada~

Si el programa requiere depuración, estos pasos se tienen que repetir para cada
corrida. La secuencia se vuelve más complicada si están presentes los subprogra-
mas.
proceso

salida
-tra bajo 1

trabajo 1
,_____,
trabajo 2
.------<

trabajo 2
>------<

Como se puede observar de lo anterior, la tarea de ejecutar un programa escrito in tervalo de tiempo 1 2 3 4 5 6 tiempo

en un lenguaje simbólico consta de muchos pasos. La secuencia entre estos pasos, si completado: trabajo 1 trabajo 2
Ja lleva a cabo un operador humano, es excesivamente lenta si se compara con la ve-
locidad de la computadora. Durante el ordenamiento de un paso (proporcionado (a) sistema de programación unitario

por las entradas necesarias) el sistema de la computadora está marchando al vado.


Por tanto, este procesamiento no se Üsa más que para sistemas de cómputo muy pe- entrada ,_t_r_ab_a_j_o l+-
t r_a_b_a_
.io_2_,
queños, dedicados a una aplicación específica.
Un sistema de operación del software maneja los recursos de un sistema de cóm- proceso trabajo 1 tr_~-~-~~

puto asignándolos a los trabajos que entran, de modo que proporcionan un medio trabajo 1 tra bajo 2
salida r - - -- ....... ·- - - - l
deseable para los usuarios y utiliza eficientemente los recursos del sistema.
Un sistema de operación simple realiza automáticamente la transición entre los intervalo de tiempo 1 2 3 4 tiempo
trabajos. Un lote de programas es sometido por el operador de la computadora (el com plctado: trabajo 1 trabajo 2
usuario ha sido liberado del trabajo), y el sistema de operación localiza los recursos
(b) sistema de programación múltiple

• IPL, del inglés: initial program load. (N . del T .) Fig. 9-2.. Procesamiento de trabajos no traslapados y traslapados.
Software de los sist emas de cónifmto . Sistemas de operación 205
204 Conceptos de los sistemas de cómputo

D. SISTEMAS DE OPERACION DE LOTES CONTRA


que lleva a cabo Ja entrada, requiriendo entonces el procesamiento de Ja CPU, y
subsecuentemente lleva a cabo Ja salida. No es posible el traslape entre el uso de la LOS DE TIEMPO COMPARTIDO
CPU por uno de los trabajos y Ja entrada o salida de otro en tal sistema, aun cuando Además de la distinción de programación unitaria vs. programación múltiple, se
los recursos del hardware estén marchando al vacío. puede clasificar un sistema de operación con respecto al método de colocación del
Para implantar Ja utilización de recursos en el sistema y por tanto, ejecutar más tiempo de la CPU en el que se está procesando el trabajo. Este método está determi-
trabajos en una unidad de tiempo, se han diseñado los sistemas de operaci6n de nado por el modo deseado de interacción sistema-usuario.
programación múltiple. En estos sistemas varios programas pueden estar en estado En el proceso de lotes, el primero y aún en el medio predominante, el usuario
de ejecución en cualquier tiempo. Por supuesto, en un sistema con una CPU simple envía el programa completo al sistema a un tiempo con todos los datos necesarios.
(es decir, sin programación múltiple) sólo un programa a Ja vez puede estar usando En sistemas muy simples, el operador de la computadora reúne estos programas en
a Ja CPU; "en un estado de ejecución" significa simplemente comenzado pero no un lote para el procesamiento; de aquí el nombre.
terminado. Un sistema de operación de lotes origina entonces que el trabajo sea procesado
De la Fig. 9·2(b) podemos ver que Ja CPU y Ja entrada/salida se traslapan, los de modo que haga máxima Ja utilización de los recursos del sistema y por tanto . re-
distintivos de programación múltiple, permiten que en Ja misma carga de trabajo duzca el costo del cómputo. Esto significa a menudo que una vez que Ja CPU está
(dos trabajos) sean procesados en un corto tiempo. asignada a un trabajo , se use hasta que el trabajo necesite una entrada o salida, des·
De Ja comparación de las Figs. 9-2(a) y 9-2(b) se puede ver que Ja programación pués de lo cual Ja CPU se asigna a otro trabajo. La operación de tal sistema se
múltiple incrementó por todas partes al sistema; es decir, la relación en Ja que se describe con más detalle en el Cap. 9-F . En éste se supone que el sistema está mul -
completan los trabajos se incrementó. Después del tercer intervalo de tiempo, en tiprogramado, aunque . en las computadoras pequeñas generalmente se usa Ja
nuestra situación ideal , un trabajo se completará en tres intervalos en el sistema programación unitaria ..
de programación unitaria, mientras que en el sistema de programación múltiple se La alternativa es un sistema de operación de tiempo compartido, diseñado para
completará un trabajo después de cada intervalo simple. La saturación en todas asegurar un uso convencional de las computadoras (véase Ja sección siguiente para
partes se debe al incremento en la utilización de Jos recursos. Ja descripción de e~te procesamiento). Este, intenta proporcionar una respuesta rá -
Junto con la saturación, una medida importante del funcionamiento del sistema pida -en segundos- a solicitudes sencillas en función del tiempo de procesamien-
es el tiempo de recorrido del trabajo, que es el tiempo desde que llega el trabájo al to. Una solicitud típica podría ser que ejecutara varias instrucciones de un progra-
sistema hasta su terminación. Parte de Ja responsabilidad del sistema de operáción ma. Estas solicitudes son hechas por un número de usuarios que esperan en sus ter-
es el asegurar un tiempo de recorrido corto para los trabajos que se considera Jo minales mientras tiene lugar el proceso. El tiempo de respuesta es de importancia
ameriten. suprema, los sistemas de operación de tiempo compartido se distinguen principal-
mente por su método de programación de Ja CPU, llamado di.visión del tiempo . El
Las condiciones básicas para la programación múltiple son: uso de la CPU se asigna sin interrupción para un tiempo muy cono (típicamente
alrededor de 0.25 s) a los programas de todos Jos usuarios activos en sus terminales.
(a) La separación de los procesadores de entrada/ salida, tales como canales El más sencillo de varios esquemas de estos servicios se muestra por medio de es-
(véase el Cap . 8-E) , tiene que estar presente en el sistema de modo que la quemas en la Fig. 9-3 . En este esquema de la programación de una ronda, a cada
CPU esté disponible para ei procesamiento y no involucrada en la supervi- uno de los seis usuarios se le da un cuanto (fracción) del tiempo de la CPU, conti-
sión de entrada/ salida. nuando con Ja CPU ésta se adquiere a base de derecho de prioridad y se asigna al
(b) Una memoria principal grande: necesaria para almacenar los programas usuario siguiente (a menos que la solicitud hecha por un usuario sea satisfecha en
(o sus partes) que pertenezcan actualmente a la llamada mezcla de un tiempo menor que el cuanto y no sea necesario el derecho de prioridad) .
programación múltiple, esto es, que hayan comenzado y estén compitien-
do por los recursos del sistema. Parte de esta memoria está colocada tam-
bién como amortiguador que almacena la información que viene del dis-
positivo de entrada para un trabajo que no está usando a Ja CPU o que
guarda Jos resultados del procesamiento de Ja CPU listos para sacarlos . f...-------,~\
Debido a sus capacidades, Jos sistemas de operación en programación múltiple
son complejos relativamente y usan recursos por sí mismos significativos (espacio de ronda compJeta : 1.5 s
la memoria, tiempo de Ja CPU, etc.). En otras palabras, el sistema de gastos gene-
rales es superior preferentemente a la cantidad de recursos consumidos por el super-
visor más que los programas de aplicación. Fig. 9-3. División del tiempo.
206 Conceptos de los sistemas de cómputo Software de los sistemas de cómputo. Sistemas de operación 207

Recordando que se pueden ejecutar cerca de 250 000 instrucciones de máquina


archivo maestro
por una computadora rápida razonablemente en un cuanto de tiempo, podemos
viejo
concluir que la mayor parte de las solicitudes se completan dentro de un cuanto

.CS~
simple. Si no, continuará la solicitud para ser atendida después que las otras hayan
recibido su cuanto.
('
Debido a su naturaleza, los sistemas de tiempo compartido generalmente son programas
multiprogramados. \'-.___¿'__ de lotes repones
Existen también sistemas de operación de uso específico que combinan las capaci· archivo
dades del tiempo compartido y de los lotes. En tales sistemas, la solicitud interactiva de transacción
archivo maestro
recibe una prioridad (se corren al frente , por decir), y los trabajos de lotes se corren nuevo
atrá.s.

E. TIPOS DE SISTEMAS DE COMPUTO Fig. 9-4. Procesamiento de lotes.

Se usa un sistema de operación para manejar los recursos de los sistemas de cómpu-
to en una forma que facilite su uso. Ya que la conveniencia depende de las necesi- La desventaja principal del procesamiento de lotes es la pérdida de la informa-
dades del usuario existen varios tipos de sistemas. Algunos de éstos se crearon ha- ción actualizada del banco de datos, ya que la información está fuera de fecha entre
ciendo la corrida de un programa de aplicación apropiado bajo un sistema de ope- corridas, y la pérdida del acceso fácil a los archivos maestros.
ración, una parte permanente del desarrollo. Una variación del procesamiento de lotes en un sistema de entrada de trabajos
Los modos esenciales del proceso de cómputo se estudian a continuación. Entre remotos (RJE), * en el que los usuarios envían sus bloques de trabajos mediante una
éstos, los sistemas de tiempo compartido, en línea y de tiempo real se agrupan con terminal remota conectada a la computadora mediante un cable u otra línea de te-
frecuencia como sistemas interactivos, ya que el tiempo de respuesta , unos cuantos lecomunicación. La salida se obtiene casi siempre en la misma terminal. En un sis-
segundos o menos, es de importancia máxima en todos ellos. Estos se oponen al pro- tema RJE, los usuarios a menudo tienen acceso a un editor de texto y a un sist ema
cesamiento de lotes, que ofrece un tiempo de recorrido del trabajo grande relativa- de archivo extendido para almacenar sus programas
mente, pero tiende a disminuir los costos del cómputo. Muchos sistemas de cómpu-
to grandes ofrecen a los usuarios varios modos de proceso.
2. SISTEMAS EN LINEA

En un sistema en línea (llamado también un sistema de transacción-procesamien-


1. PROCESAMIENTO DE LOTES to), ciertas transacciones, tales como consultas a los archivos de datos o sus actuali-
zaciones son procesados "inmediatamente" . En este sistema los usuarios tienen
Este es el tipo de procesamiento que más se usa, se basa en un sistema de operación muchas terminales de acceso (en ocasiones miles) desde las cuales pueden introdu-
de lotes. El usuario somete un tr~bajo completo: el programa, los datos y las ins· cir una o pocas de las transacciones exclusivamente (por ejemplo, el cajero de un
tracciones en el lenguaje de control de trabajo del sistema, solicitando a éste los re· banco puede introducir la cantidad de un depósito a una cuenta de ahorros) . La
cursos apropiados (tiempo de la CPU, área de la memoria, dispositivos de entra· respuesta del sistema, como la respuesta a una consulta, la admisión de una actuali-
da/salida, archivos). Después de un tiempo de recorrido grande relativamente (de zación, o la impresión de un reporte , viene dentro de segundos.
decenas de minutos a horas), todos los resultados están disponibles. Por lo general, tales sistemas permanentemente están corriendo programas de
En los desarrollos de negocios, los programas de aplicación consisten predomi- aplicación basados en un sistema de operación de lotes de programación múltiple.
nantemente en la generación de resúmenes (reportes) y la obtención de información Este sistema gana un uso cada vez más amplio en el mundo de los negocios, y tiene
especifica de los conjuntos de datos mantenidos con permanencia en los dispositivos la ventaja sobre el sistema de lotes de mayor accesibilidad para los usuarios y de los
de la memoria secundaria. Si se usa el procesamiento de lotes para mantener es- archivos de datos actualizados. En la Fig. 9-5 se muestra un esquema de un sistema
tos datos y para obtener reportes, los datos de entrada son reunidos en un periodo en línea.
de tiempo en los llamados archivos de transacción. De modo periódico se corre un
trabajo (o una cantidad de trabajos) para actualizar el archivo maestro que se man-
tiene permanentemente, y generar los repones necesarios (véase la Fig. 9-4). •Del inglb: remote job entry. (N. del T .)
208 Conceptos de los sistemas de cómputo
Software de los sistemas de cómputo. Sistemas de operación 209

consulta/ actualización Durante una sesión tipica, el usuario:

aplicación
(a) Se apropia del sistema presentando una clave.
en Unca
(b) Registra un programa bajo el control del editor del texto.
n-spuesta
terminal repones (c) Generalmente guarda este programa en el sistema de archivo bajo un
nombre asignado.
(d) Tiene el programa traducido (imaginablemente varias veces si se han des·
archivo de datos
cubierto errores durante la traducción); el código objeto se puede guardar
también.
(e) Corree! programa.
Fig. 9-5. Procesamiento en línea.
Mientras el programa est~ corriendo, el usuario puede interactuar con éL Por
ejemplo, el programa puede estar diseñado para solicitar los datos del usuario o pa·
Los ejemplos de sistemas en linea incluyen aplicaciones más simples, tales como
ra que el resultado de la ejecución parcial pueda ser revisado por el usuario para de-
los sistemas de reservación de una linea aérea o los sistemas de revisión en un super·
cidir entonces el proceso más .a fondo. ·se pueden usar Jos depuradores para correr
mercado con terminales en el punto de venta (POS),• as! como Jos sistemas de el programa y analizar su exactitud.
transferencia electrónica de capitales más complejos (EFT)•• y Jos sistemas de in·
Una respuesta a una consulta trivial. como el modificar la linea de un programa
formación administrativa (MIS). •••
o la ejecución de varias de sus instrucciones, generalmente toma una fracción de se·
En las organizaciones más grandes de hoy, están instalados sistemas de computa· gundo o unos cuantos segundos. Por lo que una respuesta aparece instantáneamen-
doras múltiples de varias capacidades. Generalmente están colocados en sitios indi· te a un humano.
viduales, a menudo remotos , donde los datos fuente para una aplicación especifica En un sistema que combina los servicios de lotes y de tiempo compartido, se
están disponibles o donde son necesarios los resultados de los cálculos. Si los progra· puede enviar un trabajo de la terminal de tiempo compartido a correr en uri modo
mas de aplicación que corren en estos sistemas de cómputo comparten los archivos de lotes. ·
de datos comunes o pasan datos de uno a otro , al medio de cómputo se le conoce Junto con los sistemas de tiempo compartido de uso general, existen servicios de
como procesamiento distribuido. Generalmente , tanto el modo de lotes como el in· tiempo compartido especializados que ofrecen un lenguaje de programación simple
teractivo están disponibles. Los sistemas de procesamiento distribuido más avanza· para el usuario. El lenguaje, como el BASIC o el APL (véase el Cap. 6) generalmen·
dos están organizados en redes de computadoras y terminales con el uso de los me· te se interpreta de modo que los programas se puedan traducir y ejecutar instruc·
dios de telecomunicación (véase el Cap . 8-G-2) . ción por instrucción.
Los sistemas de tiempo compartido particularmente están bien adaptados para
el desarrollo de programas obstruidos en el sistema de lotes por los tiempos de re·
3. SISTEMAS DE TIEMPO COMPARTIDO corrido grandes. No se usan para correr los trabajos de producción ya desarrollados
debido a la relación alta de derivación de la CPU de un programa a otro y a la nece-
Diseñados para un servicio rápido , el objeto de estos sistemas es proporcionar a ca· sidad aunada de cambiar programas de entrada y salida de la memoria principal.
da usuario Ja ilusión de tener Ja computadora dedicada a él mismo . El servicio de
tiempo compartido de uso general se proporciona al usuario con un complemento
4. SISTEMAS DE TIEMPO REAL
total de lenguajes e instalaciones de programación. En el corazón del sistema está
un sistema de operación de tiempo compartido (véase la Sec. D def capitulo), que
asigna a cada usuario en tumo la atención de la CPU. En los sistemas de tiempo real, se impone una restricción fuerte sobre el tiempo de
Un número de usuarios (de 20 a 200, con el número máximo dependiendo del respuesta del sistema. Si el procesamiento de los datos de entrada no se completa
sistema)" interactúa simultáneamente con la computadora. Al tiempo entre la durante el intervalo asignado , se vuelve inútil y se puede originar un daño conside·
entrada y la salida del usuario se le llama sesión. rabie .
Los sistemas de tiempo real a menudo se diseñan como sistemas de operación de
propósito especial para proporcionar Ja administración rápida del hardwaré del sis·
• Del inglés: "point of sale" . ( N. del T.) tema.
•• Del inglés: ''elcctronic fund <ransfcr". (N. del T.) Estos sistemas se usan frecuentemente para el control de procesos; por ejemplo,
•••Del ingl~s: "managcmcnt information systcms". (N . del T.)
en una planta industrial o en un sistema de control de emisiones que respalda los
210 Conceptos de los sistemas de cómputo
Software de los sistemas de cómputo. Sistemas de operarz'ón 21 J

vuelos espaciales. En esta aplicación se forma un circuito cerrado, con la computa-


Mediante un dispositivo de entrada se envía un trabajo (la información de
dora recibiendo los datos sobre el estado de la entidad controlada a través de un
control del trabajo, el programa y los datos) . Para incrementar todo , los sistemas de
conjunto de sensores, procesándolos y ajustando los interruptores de control, válvu
operación incluyen generalmente las llamadas rutinas de devanado. Estas rutinas
las, etc.
leen en la cubierta de la tarjeta del trabajo (o en cualquier otra que se imagine, de-
En un arreglo de bucle abieno, los sistemas de tiempo real se usan para la ad -
pendiendo del dispositivo de entrada) y colocan toda esta información en un dispo-
quisición de datos .
sitivo de memoria secundario rápido , como un disco. Subsecuentemente, el disco
Los tiempos de respuesta requeridos son a menudo conos (de 10 a 100 ms) . Los
rápido juega la parte del dispositivo de entrada, que acelerará el procesamiento del
archivos de datos extendidos generalmente no son necesarios, y se evita la separa- trabajo.
ción de programas entre las memorias principal y secundaria.
El trabajo permanece en estado estacionario hasta que el sistema de operación lo
inicie, asignándole el área de memoria principal requerida y otros recursos especifi -
cados en la información de control del trabajo. Un trabajo comenzado, habiéndose
F. OPERACION DE UN SISTEMA DE PROGRAMACION convenido en un proceso, está ahora en el estado en donde se divide para el uso de
MULTIPLE DE LOTES la CPU. Cuando la CPU es asignada a éste , el proceso está corriendo. Tiene que
En un sistema de programación múltiple, más de un programa está generalmente abandonar el proceso cuando necesite llevar a cabo una entrada o salida (por
en un estado de ejecución en cualquier tiempo dado, mientras que sólo uno de éstos ejemplo, tener acceso a un archivo de datos). El proceso está entonces esperando la
está usando en la, ,a ctualidad la CPU. terminación de la operación de entrada/ salida, cuando esté lista para usar a la CPU
Los programas obtienen el control de la CPU sólo por un intervalo de tiempo li- de nuevo. En casos excepcionales, la CPU puede ser adquirida a base de derecho de
mitado. y lo pierden debido a su necesidad de entrada/salida o a la aplicación del derecho prioridad de un proceso que esté listo a usarla. Después de muchas de estas interrup-
de prioridad por el sistema operaüvo que le asigna a un programa diferente. La última ciones de la CPU y del procesamiento de entrada/ salida, se termina el trabajo .
técnica ·;;e emplea raramente en los sistemas de lotes y en forma rutinaria, debido a la divi- Mientras se está procesando el trabajo, sus resultados se colocan en una memoria
sión de' tiempo en los sistemas de tiempo compartido. Cuando un programa pierde secundaria (por ejemplo,' en un disco) que los transfiere después de su terminación
eJ:éo'n trol de la CPU, el sistema operativo rescata toda la información necesaria pa· por la rutina de devanado al dispositivo de salida.
ra restaurarlo (como por ejemplo, la dirección de la instrucción siguiente por ejecu- Los programas corridos a favor de un usuario de tiempo compartido sufren cam-
tar, los contenidos de. todos los registros de uso general, etc.). A la información que bios similares de estado. Debido a la división del tiempo, el proceso del usuario
se necesita guardar se le llama con frecuencia el bloque de contexto del programa, puede ser adquirido a prioridad y d ividido fuera de la memoria principal.
o bloque de estado del proceso.
Un programa en ejecución, junto con su bloque de contexto, a menudo se le lla·
ma un proceso o tarea . Un sistema operativo puede crear varios procesos para reali- G. PARTES FUNCIONALES DE UN SISTEMA DE OPERACION
zar un paso de programa, pero casi siempre se crea un proceso simple. DE PROGRAMACION MULTIPLE
· Debido a la programación múltiple, un trabajo simple, o, más precisamente, el
proceso creado a su favor, sufre un número de transiciones en el sistema . Estas se
Las funciones esenciales de un sistema de operación de programación múltiple son:
muestran en la .Fig. 9-6 .
(a) La asignación de recursos de un sistema de cómputo a trabajos (estricta-
mente, procesos) manteniendo las divisiones de los solicitantes y las tablas
de recursos disponibles, como la CPU, memoria, dispositivos de entra-
da/ salida o archivos.
entrada/ salida
(b) Conteo de los recursos usados con fines de facturación .
(c) Protección del proceso de cada uno y protección del sistema operativo del
el trabajo
proceso del usuario, así como protección de los archivos_.
e~
l tr~bajoes . ~siniciado . " - - - - - - ..... (d) Suministro de una interacción apropiada de un proceso de cooperar:ión
archivo hsto , ~ ____:.
enviado (se asigna Ja memoria 1CPU asignada ~---/ (por ejemplo, el proceso que lleva a cabo cieno paso. del programa,~imul­
y devanado y otros recursos) táneamente), disponible en muchos sistemas.

Los componentes principales del sistema operativo son responsables de la asigna-


Fig. 9-6. Los estados de un trabajo (proceso) en un sistema de multiprogramación de lotes .
ción de recursos, que se lleva a cabo de manera que reúna los objetivos restantes.
212 Conceptos de los sistemas de cómputo
Software de los sistemas de rómputo . Sistemas de operación
2JJ
Las funciones de asignación de los recursos principales se estudian a conti -
memoria principal
nuación. CPU
registro
MOR de reubicación
1. PROGRAMACION DE LA CPU
instrucción
En presencia de varios procesos que compiten por su uso , la CPU' tiene que ser asig-
nada por el sistema de operación de una manera congruente con sus objetivos de
funcionamiento . Existen muchas categorias de programación; las de uso más fre - C(Kllgo-.~c / R
operac1on
f orientación
cuente son:
orientación
efectiva
• Primero ·viene -primero-sale : para promover el juego limpio .
• El trabajo más cono primero: para maximizar el trabajo por completo.
• Conforme a prioridades externas adquiridas por los usuarios: para asegurar
un tiempo de recorrido cono a los usuarios que lo necesiten .
Fig. 9-7. Formación de la orientación efectiva con registro de reubicación .
• División del .tiempo de ronda (o sus variantes) en un desarrollo de tiempo
compartido. · . .

programa (véase la Fig. 9-7). Esto es similar al uso de los registros de base (véase el
El programador de la CPU mantiene Ja división del proceso en el estado propen -
Cap. 7-E), que se usan para este propósito en algunas computadoras. El programa
so , con el orden de acuerdo a la estrategia seleccionada.
puede ser sacado de la memoria principal cuando no esté corriendo, mientras el
En un sistema operativo que corre trabajos a bloques e interactivos, se le da pre-
programa esté corriendo puede estar dentro; a este esquema se le llama cambio.
ferencia a los últimos.
Un mecanismo de control de memoria SOIJSticado es un sistema de memoria vir-
tual. Este mecanismo de software unifica la memoria principal y un dispositivo de
2. ADMINISTRACION DE LA MEMORIA memoria secundaria rápido relativamente (como un tambor o un disco de cabeza
fija) para obtener el total con las ventajas características de las dos (véase la Fig. 9-8):
La memoria principal del sistema multiprogramado está generalmente compartida una velocidad cercana a la de la memoria principal, la capacidad de la memoria se-
por varios programas incluidos en la mezcla de programación múltiple (es decir , cundaria y un precio por palabra cercano al de la memoria secundaria .
que se estén corriendo simultáneamente). Existen muchas variantes de esa compar- En un sistema de memoria virtual, la memoria principal almacena sólo esas par-
tición; por lo general se requiere soporte del hardware , así como registros especiales tes de los programas en la mezcla de multiprogramación que la CPU necesita casi
y trayectorias de datos en la CPU. siempre inmediatamente. E.n la memoria secundaria se mantienen copias comple-
El cargador de relocalización proporciona un grado de flexibilidad en la coloca- tas de los programas.
ción de programas en la memoria principal. Este permite Ja colocación de un Ya que sólo estas panes son metidas y sacadas de la memoria principal durante
programa trasladado de cualquier parte en la memoria donde se tenga disponible el el intercambio, los gastos generales debidos a esto son reducidos significativamente.
número de localidades consecutivas necesarias.
Un sistema de operación de programación múltiple necesita frecuentemente eli-
minar un programa o una parte de un programa de Ja memoria principal donde el
programa no está disponible para que lo use Ja CPU . memoria vinual
El cargador proporciona solamente Ja reubicación estática: una vez que un ~----------------
¡
programa cargado y ejecutado parcialmente es movido a una memoria secundaria,
tiene que ser regresado a sus localidades previas ya que todas las referencias de di- CPU memoria
rección en éste están limitadas a ellas. principal
Para obtener la reubicación dinámica, ya que los programas pueden estar divi- daria
didos entre cualquier área suficientemente grande de la memoria principal y la me- ripida
capacidad alta;
moria secundaria, se necesitan registros de reubicación especial en la CPU . En su barata 1
presencia, todas las referencias de memoria son formadas por el hardware agregan - ~---------------~
do · los contenidos de ·estos registros a las referencias orientadas contenidas en el Fig. 9-8.
214 Con(;eptos de los sistemas de cómputo
Software de los sútemas de cóm puto. Sistemas d e operación 2 15
Estas partes son de tamaño fijo (con frecuencia de 2K o 4K), llamados páginas o
segmentos de tamaño variable, principalmente en las unidades de programa o en orientación en la memoria
nombre del archivo secundaria
las estructuras de datos. Existen por tanto, sistemas de memoria virtual paginados y
segmentados; en algunos sistemas los segmentos son subdivididos mfls profunda-
mente en páginas. La información concerniente a la residencia de páginas/ segmen-
tos se mantiene en tablas, a través de las cuales se lleva a cabo el traslado de cada re-
ferencia de memoria.
¡ ~:PA
/ NU
1
1
directorio del usuario l
t~ :
La memoria virtual deriva su nombre del hecho de que cada programa puede
usar más posiciones que las disponibles fisicamente para él en la memoria principal.

directorio del archivo maestro


3. ADMINISTRACION DE LOS DISPOSITIVOS
DE ENTRADA/ SALIDA Y DE LA ENTRADA/SALIDA SIGMA
XI
·~
El sistema de control de entrada/ salida (IOCS)* fue el primer razonamiento para el d irectorio del usuario .5
surgimiento de Jos sistemas de operación. Es el responsable de la entrada y salida y
de los dispositivos de la memoria secundaria. Los canales, interruptores y el uso de
Fig. 9-9 . Directorio de archivo.
las flreas de amortiguación en la memoria principal hacen que quizá se encime el
procesamiento CPU-entrada/ salida. Ya que la entrada/ salida es una función
compleja y dado que el sistema de operación evita el encimamiento del proceso de
un programa en la CPU con la entrada/ salida de otro, es deseable para el sistema vo binario con un código obj eto, o, por el contrario, un archivo de datos. Los ar -
de operación que esté en control completo de ello. Por tanto, las instrucciones de chivos están organizados en una de las formas descritas en el Cap. 10.
entrada/ salida Uunto con otras instrucciones que pueden cambiar el estado del sis· Un sistema de operación contiene un conjunto de rutinas, llamadas m étodos de
tema completo, como las de ajuste del reloj del sistema) son protegidas de las que acceso, para cada método de organización de archivo respaldado por él.
son ejecutadas por el programa del usuario. Para asegurar esto, muchos sistemas El sistem a de archivo excluye la necesidad de leer los programas cada vez q ue
tienen dos modos de operación: el modo del programa (o usuan'o), en donde sola- van a ser corridos y permite el almacenamiento de volúmenes grandes de d atos , una
mente se puede ejecutar parte del conjunto de instrucciones de la máquina, y el característica particularmente importante en el medio de los negocios. En oca -
modo superoisor, en el que se puede ejecutar cualquier instrucción. El último es ac- siones, cuando se desea un tratamiento uniforme de los archivos de datos, se sobre-
cesible solamente a ciertos programas de sistemas. pone un sistema de control dei'banco de datos (DBM S)• en el sistema d e op eración.
Un interruptor-transmisor IOCS incluye por lo general la característica de em- Para permitir a los usuarios autorizados el acceso a los archivos mediante Ja espe-
bobinado y mantiene las tablas de Jos dispositivos de entrada/ salida y las partes de cificación de su nombre solamente, se mantiene por el sistema de operación un di·
los procesos que las necesitan. El sistema mantiene un control completo del disposi- rect on·o de archivo. En Ja Fig. 9-9 se presenta una organización semej ante a un ár -
bol de este directorio.
tivo asignado: el usuario especifica solamente el tipo del dispositivo necesario en la
información de control del trabajo (por ejemplo, una lectora de tarjetas), y el siste·
ma asigna el dispositivo particular fuera del carrete particular.
SUGERENCIAS PARA LECTURAS MAS PROFUNDAS
4. ADMINISTRACION DE ARCHIVO
ESTUDIOS GENERALES DEL SOFTWARE DE LOS SISTEMAS

Para un sistema de operación, los archivos son nombrados conjuntos de informa- Donovan, J. J.: Systems Programming, McGra w-Hill, New York, 1972.
Un texto orientado a d iseño.
ción, almacenados en la memoria secundaria. Un archivo puede ser un archivo de
Freeman, P.: Software Systems Principies. SRA, Chicago, 1976.
programas que contenga, por ejemplo, un programa fuente FORTRAN o un archi - Un estudio; incluye va rios asp ectos importantes en la materia.

• Del ingl~ : inpuc/oucput control system . (N. del T .)


•Del ingl~: databasc managcment syscem. (N. del T .)
216 Conceptos de los sistemas de cómputo

LOS SISTEMAS DE OPERACION SON ESTUDIADOS EN


Haberman, A. N .: lntroduction to Operating Systems Design, SRA, Chicago, 1976.
Orientación práctica. con bases teóricas sólidas.
10
Brinch Hansen, P.: Operating System Principies, Prcntice-Hall, Englcwood Cliffs,
N.J., 1973.
Orientación algorítmica .
Archivos
Katzan, H., Jr.: Operating Systems, Van Nostrand Rcinhold, Ncw York, 1973.
Subtitulado a Programatic Approach , este libro contiene un estudio detallado va · y Bancos de Datos
lioso del sistema IBM/560·570 OS/ MVT .
Madnick, S. E., and Donovan, J . J.: Operating Systems, McGraw-Hill, Ncw York,
1974.
Un estudio completo con una perspectiva hacia una implantación.

LOS SISTEMAS ESPECIALIZADOS SE ESTUDIAN EN


Watson, R. W.: Timesharing System Design Concepts, McGraw-Hill, New York,
Junto con el haroware y el software, un recurso mayor de muchos sistemas de cóm -
1970.
Un análisis incisivo de la interacción software-hardware, con un estudio excelente puto son los datos. Esto es panicularmente cieno en la administración y en los ne-
de las t~cnicas de memoria virtual. gocios. En estos sistemas existe la necesidad permanente y segura de mantener con-
Davis, G. B.: Management Jnformation Systems: Conceptual Foundation, Structure juntos grandes de datos que describen el medio de la aplicación y de organizarlos
and Development, McGraw-Hill, Ncw York, 1974. para un procesamiento efectivo y eficiente.
Yourdon, E.: Design of On-Une Computer Systems, Prcntice-Hall, Englewood En el desarrollo de lotes (véase el Cap. 9-E) se tiene acceso a estos datos durante
Cliffs, N.J., 1972.
Este libro bien cimentado se puede usar como manual para el diseño de los siste-
el periodo de las corridas de producción de los programas de aplicación orientados
hacia la generación de repones. En el desarrollo en línea se tiene que tener acceso a
mas en linea . los datos en tiempo real para proporcionar la respuesta a las transacciones de entra -
da .
Ya que el volumen de datos es grande, se tienen que almacenar en los dispositi -
vos de memoria secundaria (en este-tiempo , los discos se usan predominantemente
como archivos en ltnea). Para usar estos dispositivos de manera eficiente, se necesita
una organización apropiada de los datos almacenados en ellos. Esta organización
flsica de datos, el método de archivo actual, puede diferir de la organización lógica ,
la forma en que los datos son vistos por los programas de aplicación. El intervalo
entre la organización lógica y flsica es librado por el software del sistema.
Muy frecuentemente, los datos son almacenados como un conjunto de archivos
separados, consistiendo cada uno de registros relacionados. Por lo general , un
archivo dado consta del mismo tipo de registros. La organización lógica de los
archivos se aproxima a la colocación flsica actual de los datos contenidos en ellos. Se
tiene acceso a estos datos mediante las rutinas de los métodos de acceso del sistema
de operación.
Por el contrario , en aplicaciones más avanzadas los datos son organizados en uno
o más bancos de datos. Un banco de datos es un conjunto de registros de varios tipos
con relaciones especificas entré ellos. Las relaciones entre los registros reflejen las
dependencias entre los estados del mundo real representados por los datos. Dado
que estas referencias cruzadas están almacenadas de una manera organizada en el
propio banco de datos , las preguntas complicadas al banco de datos se pueden con- ....__
testar rápidamente. '·
Los programas de aplicación tienen acceso a los bancos de datos a través de un
extenso programa del roftware del sistema llamado sistema de control del banco de
218 Conceptos de los sistemas de cómputo
Archivos y bancos de datos 219

datos (DBMS). • La estructura lógica total del banco de datos es definida por el ad·
La organización lógica de un archivo es con la intención de que los programas de
ministrador de datos con un modelo llamado esquema conceptual (o simplemente,
aplicación que la usen Ja tengan. Por el contrario, la organización física es su
un esquema). Un programa de aplicación que usa una parte de estos datos y rela-
estructura actual cuando están almacenados en el dispositivo de memoria secunda -
ciones puede definir su propio panorama del banco de datos, llamado un esquema
ria. Con frecuencia, a esta organización se le llama simplemente organización del
externo o subesquema . El subesquema es derivado del esquema por el DBMS. Un archivo.
banco de datos proporciona la ventaja esencial de la independencia del programa
¿Por qué la distinción? La estructura lógica de un archivo, aparentemente para
de aplicación de los cambios en la estructura de los datos.
el usuario, debe estar libre de los detalles presentes en el método de archivo actual .
AJ escribir un programa que emplea un archivo de personal, por ejemplo, el usuario
A. CAMPOS, REGISTROS, ARCHIVOS Y BANCOS DE DATOS puede estar relacionado con la composición de los registros y con la posibilidad de
tener acceso a ellos, mediante el número del empleado en llnea. El usuario no está
Los registros fueron introducidos en el Cap. 5-E como una de las estructuras de da- relacionado de cualquier forma , con los detalles de la organización del archivo ac-
tos usadas en la computación. Son Ja estructura esencial para almacenar los datos tual (por ejemplo, con la dirección actual del registro). Por tanto, si cambia la orga-
residentes en una memoria secundaria. nización fisica , los programas de aplicación permanecen sin cambio . La estructura
Los datos describen estados del mundo real. Algunos estados son tangibles (por ñsica de un archivo está regida por la necesidad de almacenarlo eficientemente en
ejemplo, un empleado o un plano), otros son intangibles (por eje~plo , un departa- un dispositivo de memoria secundaria particular y proP<>rcionarlo a la velocidad de -
seada y al modo de recuperación.
mento o una firma o un vuelo de una línea aérea). Para describir wÍ estado, los va-
lores de sus atnºbutos que son de interés para la aplicación se tienen que almacenar Por tanto, Ja or~anización fisica .de los datos es el método adoptado para su
como datos (por ejemplo , el nombre, dirección y sueldo de un c;mpleado, o el nú - archivo, mientras que la organización lógica está orientada a la extracción de datos .
mero y hora de salida del vuelo) . El software del sistema transforma la demanda de datos expresada por el progra -
Un estado está descrito por un registro, que consta de una cantidad de campos ma de aplicación en términos lógicos (por ejemplo, "¿cuál es el sueldo del emplea-
(llamados también partidas de datos) , cada uno de los cuales contiene el valor de un do número 55?"), a términos físicos (orientación del registro) : Esto está sugerido
por la Fig. 10-1.
atributo del estado . Un conjunto de datos relacionados con respecto a su uso es lla-
mado un archivo de datos o simplemente~ archivo (compare la Fig. 10-!1). Por lo En muchos sistemas de archivo, las rutinas de los métodos de acceso del sistema
general los archivos constan del mismo tipo de registros que describen un conjunto de op~ración (véase el Cap . 9-G-4) se usan para llevar a cabo esta transformación.
de estados. La única relación lógica entre los registros del archivo es generalmente la secuencia
Como un ejemplo, en una aplicación a nómina se puede mantener un archivo de de sus claves. Las relaciones lógicas más complejas entre los estados descritos por los
personal para que conste de un registro por empleado. Cada registro , de una mane- datos se pueden reflejar en los bancos de datos manejados por los sistemas de
ra muy simple, puede consistir de los campos siguientes: número de empleado , control del banco de datos (DBMS) .
nombre, orientación, sueldo semanal. Una técnica importante en la organización del archivo fisico , que conduce a un
Para que un registro tenga acceso a un archivo, se tiene que identificar a este re- ~. uso eficiente de los dispositivos de archivo secundario y a menudo incrementa la ve -
gistro por el contenido de uno·o más de sus campos. A un campo que identifica so- locidad de acceso, es el bloque: conjunto de varios.registros lógicos en un registro
lamente al registro se le llama la clave (o Ja clave pnºmaria). físico simple, llamado también bloque. Es el registro fisico que lee o escribe
En ocasiones se crean uno o más bancos de datos para una aplicación dada , lar
ga generalmente (como por ejemplo, un sistema de información administrativa o
un sistema de reservación de una linea aérea). Un banco de datos es un conjunto in-
tegrado de registros de varios tipos con las relaciones entre estos registros almacena-
' desde/ hacia el dispositivo de archivo secundario. La técnica a bloques es particu -
larmente efectiva cuando los registros están almacenados en la forma en que están
procesados.

dos.
trazar el programa
·<
del aoftwarc
B. ORGANIZACION DE DATOS FISICA VS. LOGICA. organización
BLOQUES
Existe una división importante entre la organización lógica y·fisica de los archivos y
-~
lo que el programa lo que cst~ almacenado
bancos de datos. de aplicación ve actualmente

• Del ingl& : databuc managemcnt. (N . del T.) Fig. 10-1. Organización flsica vs . lógica .
-220 Conceptos de los sistemas de cómputo Archivos y bancos de datos 221

El disco y la cinta son dispositivos de acceso no aleatorio (véase el Cap. 8-D) , ya Cada vez que se lee un archivo , se obtiene un registro físico en el amortiguador
que toma mucho más el tener acceso a la primera palabra (o byte) de un registro al- de entrada . El software del sistema entonces destruye los bloques seleccionando los
macenado en ellos que a Jos subsecuentes. Por tanto, el tener-acceso al bloque más registros lógicos necesarios para el programa . Por tanto , las operaciones "leer" sub-
grande, hace más cono el tiempo de acceso por palabra. En el caso de un disco, el tamaño secuentes mediante el programa de aplicación pueden encontrar ya el registro lógi -
del bloque a menudo es determinado por el propio hardware. El espacio que se ahorra co necesario en el amortiguador de la memoria principal. Durante una operación
debido a Jos bloques es más evidente en las cintas. El uso de las cintas requiere que de "escribir" , el programa de aplicación transfiere los registros lógicos en el amorti-
los intervalos entre registros sean dejados entre los registros fisicos para permitir la guador de salida hasta que se complete un registro fisico y lo escribe en el ar chivo.
detención de Ja transmisión y entonces comenzar de nuevo el acceso al registro fisico Cuando el programa no necesita más el archivo , lo tiene que "cerrar" para que
siguiente. Si los registros lógicos no son divididos en bloques, se trata a cada uno co- sea preparado por el software del sistema para usarlo nuevamente.
mo un registro fisico separado, y por tanto , se tiene que dejar un intervalo entre
ellos (véase la Fig. 10-2(a)) . Esto puede ocasionar que la mitad de la cinta no se use
para archivar datos. La división a bloques disminuye Ja proporción de tal espacio C. ORGANIZACION DE ARCHIVOS
(véase la Fig. 10-2(b)) .
La organización de archivos es un método de colocar los registros en el dispositivo
Al número de registros lógicos agregados a un registro fisico simple (bloque) se le de archivo secundario; a menudo incluye el suministro de información adicional,
llama el factor de división en bloques. como las tablas necesarias para tener acceso a estos registros.
La división en bloques necesita amortiguaci6n: áreas laterales de ajuste (llama- - ·El objeto de una organización de archivo dada es el asegurar el almacenamiento
das amortiguadores) eri la memoria principal para almacenar el registro fisico eficiente de registros y proporcionarlos para el tipo de acceso deseado.
mientras que el programa de apliéación obtiene los registros lógicos de éste. A blo·
ques más grandes se necesitan amortiguadores mayores. Acceso, es deéir, la lectura o escritura de un· archivo es la operación esencial de
El software del sistema, como método de acceso , es responsable de recÚperar un un archivo. Hay dos tipos de acceso diferentes: el acceso secuencial, que necesita
registro lógico del libro. Para proporcionar la información necesaria a este software una búsqueda a través del archivo , y el acceso directo, que localiza el registro sin
recordemos la composición del archivo, el programador lo tiene que " abrir" antes una búsqueda. En ambos casos, el registro está identificado por.su clave . Como una
de que sea usado. Posteriormente, se puede leer del archivo, escribir en él o ambas , consecuencia, el acceso secuencial se usa para procesar los registros en el orden en
dependiendo de los derechos de acceso del programa. que están almacenados; el acceso directo no impone tal limitación.
En el caso del acceso secuencial, el tiempo necesario para localizar un registro
depende de su posición en el archivo; en el acceso directo , la dependencia es muy li·
intcrvalosentrc registros gera.
El acceso secuencial como modo de acceso principal se usa exclusivamente en sis-
temas a bloques (véase el Cap . 9-E), en donde son actualizados y resumidos los
archivos en intervalos regulares , distantes relativamente. Entre las actualizaciones
J los contenidos de los archivos no reflejan los cambios en el medio (éstos son refleja -
dos en un archivo de transacción que los acumula). En un sistema, durante la corri-
registro flsico da de un proceso simple una cantidad de registros de archivo son afectados en la se·
(a) sin bloques cuenda en que están almacenados. El proceso en línea (véase nuevamente el Cap .
9-E), que requiere una respuesta inmediata a una transacción (una actualización
del archivo o una consulta) , necesita el acceso directo.
registro registro rcgisuo registro Se usan predominantemente tres métodos de archivos de datos que son respalda·
lógico lógico lógico lógico dos por el sistema de operación en la forma de métodos de acceso apropiados: el se·
1 2 5 4
cuenda!, el secuencial clasificado y el directo (llamado también aleatorio) . Estos se
cJ factor de la división estudian a continuación y son comparados en la Tabla 10-1.
registro flsico en bloques es 5
Existen otras organizaciones de archivo . Un ejemplo es un archivo fraccionado,
(b) registro a bloques
que consta de fracciones de archivo nombradas (áreas de posiciones consecutivas) ,
cada una almacena muchos registros almacenados secuencialmente. La organiza-
Fig. 10-2. División eri bloques. ción fraccionada se usa para guardar más bien bibliotecas de programas que datos.
222 Conceptos de los sistemas de cómputo A rrhivos y bancos de datos 223

TABLA 10-1. Comparación de los métodos de organización de archivos. nuevo· archivo maestro (véase la Fig. 9-4). La organización del archivo secuencial
naturalmente se puede usar también con un dispositivo de acceso directo como un
ORGANIZACION MEDIO
disco.
DE ARCHIVOS DE APLICACION VENTAJAS DESVENTAJAS Para tener acceso a un registro en este archivo, es necesario buscar el archivo pa-
ra el registro con la clave dada. En un sistema orientado a cinta no hay alternativa
Secuencial A lotes Simplicidad de control; uso Inserciones y actualizaciones para la búsqueda secuencial (mirando en cualquier registro que intervenga y com-
efidence del archivo; uso po- imposibles pricticamentc; " parando las dos claves). En un sistema orientado a disco , se pueden usar los méto-
tencial de dispositivos de desventajas en general del
dos de búsqueda más rápidos.
archivo baratos (cinta); pro- proceso a lotes
ceso ~uencial ripido del El uso eficiente de los archivos secuenciales requiere que se tenga acceso a una
DASD buena parte de los registros durante cada corrida. Las inserciones en este archivo
son imposibles (con excepción de casos especiales); se necesita en su lugar la reorga-
Espacio para clasificación y

f
Secuencial A lotes/ en linea No necesita la clasificación nización de archt"vos, que es la generación de un archivo nuevo a partir del existente
clasificado de transacciones; son po- tiempo para su manteni- considerando los cambios.
sibles los accesos secuencial y miento; acceso directo lento
directo para sus archivos grandes

Directo En linea No necesita la clasificación Necesita un espacio adi-


(aleatorio) de transacciones; acceso d - cional (alrededor de SO a 2. ARCHIVOS SECUENCIALES CLASIFICADOS
pido; acceso directo con un 403) para evitar el excesivo
gasto pequeño número de colisiones; dificil
En un archivo secuencial clasificado, los registros son también almacenados en su
de usar cuando se necesita Ja
secuencia (por ejemplo, para secuencia de clave. De cualquier forma, para proporcionar con rapidez el acceso di -
generar repones) recto a los registros, se mantienen los indices. Un archivo clasificado es una tabla
que muestra la colocación de los registros en el dispositivo de archivo secundario
con respecto a sus claves.

1. ARCHIVOS SECUENCIALES Por tanto, un archivo secuencial clasificado, puede ser abordado en la forma se-
cuencial orientada a lotes, así como directamente a través del índice para propor·
cionar una respuesta rápida. La búsqueda del índice, involucrada en el acceso di·
La organización de archivo secuencial es la más simple y popular. Los registros son
recto , es un proceso más rápido que la búsqueda del-archivo en el caso del acceso
almacenados (clasificados) en su secuencia de clave. Un ejemplo de un archivo se-
secuencial. La búsqueda binaria, estudiada en el Ej . 3-17, se puede usar para el
cuencial está mostrado en la Fig. 10-3, el número de seguridad social sirve como propósito.
clave, únicamente identifica los registros que están almacenados en orden ascen- 11 Para almacenar los archivos secuenciales clasificados, se necesita un dispositivo
dente de esta clave. de acceso directo, como un disco.
Esta es la organización de archivo que se usa en los sistemas de lotes orientados a
cinta y a tarjeta. Todas las transacciones de actualización (bajas, inserciones o mo-
l Hay varias formas de construir los_índices de los archivos. Estos son creados auto·
máticamente por el software cuanelo se organiza el archivo.
dificaciones de registro) son acumuladas en un periodo de tiempo, en tarjetas, por Un método popular de clasificación, relacionado estrec~amente a la estructura
ejemplo, luego se transcriben a una cinta y se clasifican por clave. Subsecuentemen- de discos (véase el Cap. 8-D), se muestra en la Fig. 10-4. Los registros de los archivos
te esta cinta de transacción clasificada se corre contra el archivo maestro y se crea el son colocados en el disco en su secuencia de clave cilindro tras cilindro. Están locali-
zados en pistas consecutivas de un cilindro dado, por ej emplo, en las superficies de
Número de Seguro
Social (clave) Nombre Sueldo semanal
discos consecutivos. Por tarito, el índice tiene una estructura jerárquica, con el va -
lor más alto de la clave en una pista o cilindro dados colocados en el índice.
010-55-7394 SMJTH 300
Cuando se usa un disco de muchos cilindros grandes, el Indice del cilindro se di-
173-34-1010 JONES Qoo__)- un campo (panida de datos) vide frecuentemente en partes para incrementar la velocidad de acceso al arch ivo.
(231-35-8535 PETERS 250)-<--- un registro Se agrega entonces un índice maestro para estos índices de cilindros múltip les.
Para tener acceso a un registro directamente, se investigan primero todos los ni -
veles de clasificación existentes, para encontrar la pista que los contiene. Luego la
propia pista es investigada para este registro. Durante el procesamiento secuencial
Fig. l 0-3. Archivo secuencial. no se usa el Indice.
..

224 Conceptos de los sistemas de cómputo Archivos y bancos de datos 225

Valor mis alto de la clave Una solución podría ser asignar números a los empleados y usarlos como la clave d el archi-
Cilindro Núm.
053-27-3451 vo. Esto podría , de cualquier forma , crear dificultades en algunás aplicaciones en dond e el
1
091-15-4310 acceso por esta clave es no significativo.
Indice 2
del cilindro
·Un conjunto de métodos, llamado fragmentación (o al azar) , se usa en conse-
cuencia, para difundir las orientaciones generadas de las claves tan uniformemente
como sea posible sobre el área asignada al archivo. La colisión, por ejemplo, de dos
claves que se dirigen a la misma dirección, ocurre frecuentemente y tiene que ser
200 950-50-0000
manejado por el software.
Valor mlls alto de la clave Las rutinas del software (métodos de acceso) para el control de los archivos di-
Pista Núm. Valor mis alto de la clave
(cilindro Núm. 1) (cilindro Núm. 200) rectos tiene que incluir, por tanto:
Indices de
las pi.nas
(uno para
1
2
010-31-4500
010-90-7000
915-50-1000
925-01-8000 t
3
~
un proceso de fragmentación;
un proceso de solución de colisiones para almacenar y extraer los registros con
cada cilindro) ¡ las claves transformadas duplicadas;

20 053-27-3451 950-50-0000

El disco tiene 200 cilindros y 20 superficies (4000 pistas)


l Existen muchos procesos de fragmentación. El método de división-resid uo es
uno de los más populares. La clave numérica se divide por el número primo más
cercano, pero menor que el número de conjuntos fisicos de posiciones disponibles
para almacenar los registros de archivo, y se toma el residuo como la orientación.
Fig. 10-4. Uii Indice de un archivo secuencial clasificado. &to asegura una distribución uniforme de los registros sobre el área disponible . Si
la clave es alfanumérica, se puede obtener un valor numérico para ésta mediante la
manipulación de su representación en el código de carácter dado.
Si está por ocurrir una inserción, se escribe el registro en una área de sobreflujo
especial, con un indicador que lo coloca en la pista a la que lógicamente penenece.
De modo periódico se lleva a cabo la reorganización para unir los registros del área EJEMPLO 10-2
de sobreflujo con los contenidos en el área prima. Cuando se cancela un regist.ro , es
Hay 100 000 palabras disponibles para el archivo menor, cad a registro es de 100 palabras de
sustituido por una marca especial.
longitud. La orientación de la posición primera es de 5000.
El archivo no está en bloques: un registro físico consta de un registro lógico simple . Por
3. ARCHIVOS DIRECTOS tanto, existen 1000 orientaciones de registro físico .
_; , l ..•
El número primo más cercano es 997 , que sirve como d ivisor (para archivos chicos, el n ú·
mero primo de los registros fisicos debe ser colocado al inicio, para los archivos grandes esto
La organización de archivo directo (llamada también aleatoria) proporciona un ac- no importa).
ceso directo rápido a Jos registros; de cualquier forma, los registros no son manteni- Para obtener la orientación de un registro cuya clave es, por ejemplo, 5000 , d ividimos y
dos en una secuencia flsica significativamente. No se necesita el indice. obtenemos el residuo:
Los archivos directos se usan para aplicaciones en linea. Se necesita un dispositi-
vo de acceso directo (por ejemplo, un disco). En un archivo directo, la clave del re-
gistro es guiada (transformada) en Ja dirección del archivo del registro. Una trans-
s: "' 5 con residuo de 15

formación funcional uno a uno de la clave a la dirección es posible raramente.


li
1\
Por lo que, la orientación del registro es

5000 + IS X 100 = 6500


EJEMPLO 10-1
Observe que la fragmentación de las dos claves siguientes dará por resultado una colisión:
Considere el ·archivo de personal de una compañía con 1000 empleados, para el cual se desea 10 000 y 14 985 .
el acceso directo, siendo la clave el número de seguridad social.
Si queremos igualar la clave de registro con su orientación, el tamaño del archivo podría
El software del controlador conviene la orientación en la forma solicitada por el
rebasar las posibilidades de archivos reales de la compañia, y el archivo podría estar casi dispositivo de archivo secundario (por ejemplo, número de cilindro-número de pis-
vado. ta).
226 Conceptos de los sistemas de cómputo Archivos y bancos de datos 227

La colisión es manejada ya sea colocando el registro que colisiona en el espacio


es el sueldo semanal del empleado número 1777?"). Un banco de datos, con las rela-
libre disponible más cercano, yendo constantemente en una dirección (se le llama
ciones entre los registros que se almacenan allí , permite consultas complejas (por
método de orientación abierta). o estableciendo una lista de enlace de todos los re-
ejemplo , "¿cuáles son los nombres de los empleados que estuvieron involucrados en
gistros colisionantes. Cuando se tiene acceso a un registro , su clave es verificada y se
la fabricación de la orden del cliente X?"), que necesitan que sean consultados va-
puede emitir una búsqueda para el registro correcto. En ocasiones, las éreai de
rios archivos.
sobreflujo general se usan para colocar todos los registros que chocan .
Se pueden reflejar las siguientes relaciones esenciales entre los registros:
Para contrarrestar parcialmente la lentitud del acceso debido a la colisión, se
usa el método del cubo . El cubo es un bloque de palabras capaces de almacenar va -
rios registros lógicos con claves transformadas duplicadas. El proceso de fragmenta- 1. SECUENCIA
ción genera més bien la orientación del cubo que la de un registro individual. Una
operación de "lectura" simple origina que el cubo completo sea transfó.r mado a la Los registros se ordenan mediante una colocación fisica o enlace en una lista con-
memoria principal. En consecuencia, el registro necesario se encuentra comparan- forme a una clave. La clave puede ser única (clave primaria) o no (ctave secunda-
do la clave. na) . Esta técnica se aplica a los registros del mismo tipo (penenecientes al mismo
Para limitar el número de colisiones, se. tiene que asignar a .un archivo directo archivo, o como si lo fueran) .
més espacio que el necesario para el archivo. Con esta organización lógica, una pregunta del tipo "¿quién es el siguiente em ·
pleado más antiguo?" (si Ja clave es " años de empleo") o " ¿quiénes son los emplea-
D. ORGANIZACION LOGICA DE DATOS EN EL BANCO dos qúe ganan más de $300 en una semana?" (si el archivo está ordenado conforme
DE DATOS a "sueldo semanal") se puede contestar sin una investigación completa del archivo .

En un sistema de archivo, sólo las relaciones lógicas més simples entre los registros
en los archivos individuales son reflejadas generálmente. Esta es la secuencia de las 2. RELACIONES ASOCIATIVAS
claves de registro, que rara vez son significativas en términos del programa de apli -
cación . En un sistema de banco de datos , los registros de varios tipos que juntos Un número de registros del mismo tipo se pueden asociar lógicamente debido a que
describen el medio de aplicación estm integrados en un todo mediante la informa- el valor de su campo seleccionado es el mismo . En otras palabras, penenecen a un
ción que considera sus relaciones, almacenadas con los propios registros. Dado que conjunto común , que se distingue por esta partida de datos . Además los registros de
un conjunto de registros de un tipo determinado se puede considerar un archivo , de archivos se pueden clasificar de acuerdo con varios campos , esto corresponde a la
los bancos de datos se dice a menudo que constan de varios archivos integrados. clasificación de los estados que reflejan de acuerdo con varios atributos. Por
Por tanto, los registros de los bancos de datos contienen los campos en los que se ejemplo , los empleados se pueden clasificar por su departamento , especialidad y
almacenan los valores de los atributos, así como los campos que contienen la infor- grupo salarial.
mación estructural que establece la relación entre los registros . Preguntas tales como , "¿quién trabaja en el departamento X ?'', o "¿quiénes son
Los métodos de implantación fisica como : los electricistas?" . pueden ser contestadas.
El acceso por clave múltiple es entonces posible: por ejemplo, se pueden extraer
• el archivo secuencial de registros los registros basándose en los valores de varios atributos. Ya que estas claves secun-
• los indices del dispositivo y los índices del contenido darias sirven más bien para clasificar que para identificar, como lo hace la primera ,
• fragmentación {al azar) en general no son únicos.
• la construcción de estructuras de datos enlazadas (véase el Cap. 5), por Los métodos siguientes se pueden usar para representar fisicamente una relación
ejemplo, listas enlazadas (en casos especiales anillos), érboles o redes asociativa.

A . ARCHIVOS INVERTIDOS
se utilizan para almacenar registros en un banco de datos. Los enlaces (indicadores)
estructuran el conjunto de registros de modo tal que establecen la organización ló- Los índices contenidos son agregados al archivo , uno para cada atributo clasifica-
gica esencial de los datos. Se pueden considerar referencias cruzadas entre los indi- do . Un índice contenido o un archivo invertido enlistan los valores de un atributo
cadores. con los indicadores para todos los registros que tengan el valor dado . En un archivo
Con el uso de un sistema de archivo (mejor que un banco de datos) es posible só- invertido completamente, se proporciona tal indice para cada campo. Un ejemplo
lo el-acceso simple a los registros; estén limitados a proporcionar información.sobre de este indice se muestra en la Fig. 10-5 . El uso del indice contenido asegura una
el contenido de un campo de registro con el uso de una clave (por ejemplo, "'¿cuél respuesta rápida a una consulta.
Archivos y bancos de datos 229
228 Conceptos de los sistemas de cómputo

Esta estructura ayuda a contestar preguntas del tipo "¿quiénes son todos los
Código de ocupación Orientación de registros miembros del departamento en donde trabaja nuestro dibujante"?
s 100 02S 033 1 413 1
10 113 3. JERARQUIA
12 007 715 114 1
La relación jerárquica entre los registros es de su bordinación o de propied ad. Se
17 011 112 incluyen Jos registros de tipos diferentes; Jos registros de un tipo p ueden "pertene·
cer" o "ser el superior de" los registros de otro tipo. Se permite una jerarquia estric-
ta, y Jos registros no pueden ser adquiridos por más de un registro.
Fig. 10-5. Indice contenido de un archivo invertido. Ejemplos de éstas son las relaciones entre los registros de un departamento y los
de los empleados o entre los registros del cliente y otros registros.
En Ja Fig. 10-7 se pueden mostrar las relaciones entre las clases de registros.
B. LISTAS ENLAZADAS MULTIPLES

DEPARTAMENTO

~
Todos los registros con el valor equivalente del atributo se unen para formar una lis·
ta. Cada registro se enlaza en tantas listas como atributos clasificados tenga. Clases
Para simplificar el manejo, a menudo los anillos de enlace doble (véase el Cap. D<•UAD; ------ RdK""o
tiene
de r e g i s t r o s - - - - - ...----""":--:-:::--,
5-F) son escogidos como la estructura de la lista. En la Fig. 10-6 se muestra un (archivoo) SUBORDINADO
ejemplo.

Fig. 10-7. Relación jerárquica.


Código de ocupación

Los árboles (véase el Cap. 5-G) son las estructuras de datos usadas para represen-
tar las relaciones jerárquicas.

17
4. RELACIONES GENERALES (RED)
En el caso más común puede existir cualquier tipo de relación entre las clases de re-
Registroo
gistros. Un ejemplo se muestra en Ja Fig. 10-8.

[ CLIENTE 1

~- j
21
'!:
'·1:

Fig. 10-8. Red.


¡.~,

l; i En algunos sistemas de banco de datos, estas relaciones son representadas indi·


rectamente por árboles o asociaciones; en otros, directamente por las estructuras de
Fig. 10-6. Anillos de enlace doble múltiples.
datos de la red (plex). .
230 Conceptos de los sistemas de cómputo
Archivos y bancos de datos 231

E. CONCEPTOS DE BANCO DE DATOS (DDL)* especial para proporcionar la descripción. El panorama lógico del banco
de datos está descrito por el esquema conceptual (o simplemente esquema); la
Un banco de datos es un conjunto integrado de archivos (por ejemplo, registros del descripción f!sica es Uamada esquema interno.
mismo tipo) relacionados por su uso y manejados por un sistema de administración Un programa de aplicación simple casi siempre usa sólo una pane de los datos
del banco de datos (DBMS). El motivo principal de integrar todos o algunos de los almacenados y sólo algunas de las relaciones. Los usuarios de los bancos de da-
datos usados en una aplicación en un banco de datos es entregarlos a un recurso de tos son por tanto, capaces de definir en sus propios programas de aplicación sus
control simple cuyos cambios estructurales los hagan transparentes a los programas propias opiniones de éstos, consistentes con el esquema completo. A estas descrip-
de aplicación del DBMS. ciones se les llama esquema externo o subesquema. El uso del programa del banco
La diferencia entre el uso de un archivo o un sistema de banco de datos está de datos está limitado a los datos así descritos. Las dependencias entre las tres vistas
mostrada por la Fig. 10-9. Como se muestra en esa figura , muchos sistemas deban- del banco de datos están ilustradas en la Fig. 10-10.
co de datos permiten al usuario tener acceso directamente a los datos, sin necesidad
de escribir un programa para el propósito. como se ve por el
En un sistema de archivo-orientado, el uso de los archivos casi siempre está limi- programa de aplicación relacionado por el DMBS banco de datos
tado a los programas diseñados expresamente para ellos, ya que los formatos de los
archivos difieren. Las relaciones entre los registros en varios archivos no están alma-
cenadas con los datos; cuando es necesario éstos se relacionan por los propios
programas de aplicación. __
En un sistema de banco de datos, los registros contienen los valores de los atribu-
tos as! como los indicadores y/o Indices que establecen las relaciones entre los re-
gistros. El formato de los datos almacenados_es constante. Los bancos de datos se al-
macenan generalmente en los dispositivos de acceso directo como los discos. t•
Las estructuras lógica y fisica completas de los bancos de datos son definidas
centralmente. Las dos están separadas. Se usa un lenguaje de descripción de datos
organización 16gica organización lógica
parcial organización flsica
transacciones programa archivos completa
de aplicación 1 del programa 1 ~,., (esquema externo) (esquema conceptual) (esquema interno)
(subcsquema) (esquema)

transacciones programa archivos


Fig. 10-10. Uso de esquemas.
de aplicación N dd programa N

Las conversiones de las necesidades de acceso del programa, establecido en fun-


(a) sistema de archivo orientado ción de su esquema externo, son hechas por el DMBS en la orientación fisica, a me-
nudo con el uso de los métodos de acceso.
usuario consulta--------
respuesta \
transacciones programa EJEMPLO 10-3
de aplicación 1
De los bancos de datos completos presentados en la Fig. 10-7 , un program a que imprime
DBMS las invitaciones al dfa de campo anual de la compañia puede dar la imagen.
transacción programa
de aplicación N banco de datos Nombre del empleado 1 Subordinados f Dirección

(b) sistema de banco de datos y definirla mediante el esquema externo.

Fig. 10-9. Sistemas de archivo vs. banco de datos.


• Del ingl~: data dcteription languagc. (N . del T .)
~ .'i\.

232 Conceptos de los sistemas de cómputo Archivos y bancos de datos 233

Para procesar los datos contenidos en el banco de datos, está disponible para el Martin, J.: Computer Data-Base Organization, Prcnticc-Hall, Englcwood Cliffs,
N.J., 1977.
programador un lenguaje de manipulación de datos (DML). •Este lenguaje permi· Un texto muy destacado .
te al usuario hacer r~ferencia a los datos en términos más bien lógicos que fisicos los Cardcnas, A. F.: Data Base Management Systems, Allyn and Bacon, Boston, 1979.
cuales le son desconocidos. Este lenguaje puede ser autocontenido o una adición a
un lenguaje de nivel alto popular como el COBOL o el FORTRAN. Muchos siste·
mas ofrecen también un lenguaje de consulta simple, semejante al inglés, para no
programadores que son capaces de interrogar al banco de datos directamente en
linea, sin tener que escribir programas especiales.
La organización de datos centralizados en un sistema de banco de datos permite
a un solo individuo (o a un grupo especial) tener el control total sobre el archivo y
uso de datos. Esta función es llamada administrador del banco de datos (DBA)**
y consiste primeramente en la definición de los esquemas conceptual e interno para
el banco de datos. El administrador del banco de datos supervisa también la organi-
zación, mantenimiento y documentación del banco de datos y define el acceso auto-
rizando a sus elementos y es responsable de su protección. En panicular, el DBA
proporciona para el apoyo, procesos para la duplicación periódica de los datos en
otro medio para protegerlos contra la destrucción.
Los sistemas del banco de datos están respaldados frecuentemente por un dic-
cionario de datos, una referencia cruzada ordenada que enlista todos los elementos
de datos en el banco de datos, junto con su descripción. Existe un software especial
para mantener este diccionario.
La ventaja básica de los bancos de datos es la independencia programa-datos:
los programas de aplicación no son afectados por cambios de estructura en el banco
de datos. Estos son "ocultados" por el DBMS. La redundancia de datos, inevitable
en los sistemas de archivo grandes, es evitada, lo que aumenta la consistencia de da-
tos y la economía de almacenamiento. Son posibles una seguridad y defensa de
privada mejores.
El costo de implantación y uso de los DMBS es alto relativamente. Estos sistemas
dan por resultado gastos considerables y requieren recursos adicionales de hardware.

SUGERENCIAS PARA LECTURAS MAS PROFUNDAS

Las técnicas de organización de archivo se estudian a un nivel práctico en el libro


de Yourdon referido en el capitulo anterior y muy ampliamente en

London, K. R.: Techniques for Direct Access, Aucrbach (now Pctrocclli/Chl'.rtcr),


Philadclphia, 1973.
Estudios selectos de los sistemas de banco de datos:
1~;.
Krocnkc, D.: Database Processing, SRA, Chicago, 1977.
Una cantidad razonable de material introductorio incluyéndose estudios de las 1-: ,¡

estructuras de datos y de organización de archivos .

• Del ingl&: data manipulation languagc. (N . del T . )


•• Del ingl&: databaJC adminiJtrator. (N. del T .)
11
Computabilidad,
Máquinas de Turing
y Lenguajes Formales

Este capítulo introduce áreas teóricas importantes de las ciencias de la computa1. ión
con un formalismo mínimo.
La teoría de la computabilidad traza las limitaciones de las computadoras, gene-
ralmente estableciendo las clases de problemas que no pueden ser resueltos por má-
quinas. Las computadoras actuales no se prestan bien a una descripc ión formal que
sea manipulada por !as herramientas de las matemáticas. Por tanto , necesita mode-
los teóricos cul'as capacidades se suponen equivalentes a las de las computadoras
que se hayan usado en el desarrollo de la teoría. Los modelos que casi siempre se
usan para este propósito son las máquinas de Turing.
El estudio del procesamiento del lenguaje por las computadoras pertenece a la
teoría de los lenguajes formales. Uno de los aspectos prácticos de esta teoría es
la ayuda que proporciona en la traducción de los lenguajes de programación. Los
lenguajes formales son conjuntos de cuerdas formadas conforme a reglas estrictas
definidas por su gramática. La teoría de los lenguajes formales se relaciona
estrechamente a la teoría del autómata que analiza las máquinas de procesamiento-
información abstracta. La más poderosa de estas máquinas, en términos de sus ca-
pacidades de cómputo, son nuevamente las máquinas de Turing. Existe una clase
de autómata para cada una de las cuatro clases de lenguaje formal que reconocen a
las cuerdas de lenguaje al contestar la pregunta, ¿está la cuerda formada de acuer-
do con esta gramática?

A. TEORIA DE LA COMPUTABILIDAD

La teoría de la computabilidad explora las limitaciones de las computadoras al es-


tablecer qué se puede y qué no puede ser computado por una máquina. En estas in-
vestigaciones los aspectos prácticos del tiempo de cómputo y el espacio de memoria
requerido no están relacionados.
Muchos resultados importantes en este campo, provienen de la insolubilidad por
computadora de problemas de cierta clase, ahorrándose muchos esfuerzos de
programación en vano.
36 Conceptos de los sz5temas de cómputo Com/mtahilidad, máquinas dP Turz"ng y lengua;es formales 237 l
l
~ef
Para formular la teoria, se necesitan un modelo de computadora matemática-
1ente preciso y un algoritmo. Se han desarrollado varios modelos de esta clase, de
)S cuales el más conocido es la máquina de Turing estudiada en la Sec. B. Las

proximaciones básicas de la teoría se presentan aquí con el uso de procedimientos,


ue son algo informales pern se aproximan a los de los lenguajes de programación
e nivel alto. D R
(dominio) (rango)
Para establecer las capacidades de las máquinas, la teoría de la computabilidad
naliza qué transformaciones de entradas en salidas están listas para llevarse a cabo
. en otras palabras, qué funciones pueden ser computadas por ellas. No es necesa-
o considerar directamente todas las funciones posibles con varios números y tipos Fig. 11-1, Una función y = j(x), donde y es el valor de f para el argumento x.
~argumentos, ya que el universo del discurso puede ser limitado con el uso de una
~rramienta importante conocida como numeración de GOdel. Esta simplifica sig-
.ficativamente el análisis necesario para determinar las limitaciones de la compu- ~;ene como dominio el conjunto de todos los números reales y como rango el con-

.ción automática. JUnto que consta de O y nUmeros positivos .


La numeración de GOdel hace posible el considerar, en el desarrollo de la teoría,
una función es computable, si y sólo si, existe un algoritmo (véase el Cap. 1) que
:clusivamente funciones con argumentos simples que son enteros no negativos.
;;ara cualquier x que pertenezca al conjunto D calcula el valor de y = j(x). Si una
Este dispositivo se usa subsecuentemente para probar que aún en esta área limi-
función es computable, se puede implantar un programa que calcule cu?.!quiera de
da de consideración existen funciones que no son computables; en general. exis-
esos valo res.
n problemas que no pueden ser resueltos con computadoras. La insolubilidad del
Relacionados al problema de la computabilidad están los problemas de enume-
·oblema importante se demuestra más profundamente.
rabilidad y determinabilidad, los cuales se pueden decidir a la compmabilidad. Un
Los argumentos de las pruebas son tan importantes como los propios resultados.
conjunto D de elementos con una propiedad dada es enumerable, si y sólo si, existe
que esto es típico de la teoría de la computabilidad.
un algoritmo que determine que el conjunto esté vacío o bien enumere (enliste) to-
dos los miembros del conjunto. Un conjunto Des determi·n able si y sólo si existe un
algoritmo que pueda determinar si un elemento dado pertenece al conjunto o no.
FUNCIONES Y SU COMPUTABILIDAD
En otras palabras, los problemas consisten en enumerar todos los elementos con una
propiedad particular (por ejemplo, todos los números pares) o decidir cuál de
lteoría de la computabilidad intenta establecer qué funciones• pueden ser calcu- una partida dada tiene la propiedad dada.
las por máquinas.
Una función (llamada también proyección) es una regla que asocia con cada elemento
de un conjunto D (llamado el dominio de la función) un elemento simple y y un 2. NUMERACION DE GÓDEL
njunto R (llamado el rango de la función). El elemento x es llamado el argumen-
y el elemento y, el valor de la función para este argumento. Estos conceptos se Mediante el dispositivo llamado numeración de Gddel (de su inventor, Kurt Godel),
stran en la Fig. 11-1.
las consideraciones de la teoria se pueden limitar a las funciones con un argumento
Una función se puede especificar como un conjunto de pares ordenados (x, y) o simple , cuyos dominio y rango son los enteros no negativos (llamados también nú-
no un procedimiento para el cálculo del valor para todos los argumentos. meros naturales). Una numeración de Godel es una codificación que convierte a los
argumentos múltiples así como a los de otros tipos a enteros no negativos. Esta codi-
EMPLO 11-1
ficación se puede usar también para representar las entradas al proceso que calcula
(•) La función la función.
Varios ertteros no negativos xl. x 2, . .. x" que son las entradas a un procedimiento
j(x ) = 2x
se pueden representar por entero simple z como sigue:
tiene como dominio y rango el conjunto de todos los números reales.
(b) La función Z = 2x 1 • F• · 5x, · .. . · ¡T•
j(x) = x2
donde 2, 3, .... p son los n primeros números primos.
' Observe que el término "función" se usa aquí con un significado algo diferente del que se usa en los
El número original xl, x 2, ... , xn puede ser recuperado del entero z ya que cada
:uajes de programación. entero ti-ene una descomposición única en primos.
T

238 Conceptos de Los sútemas de cómputo Computabilidad, máquinas de Turing y iengua1es formales 239

Uno de los problemas sin solución más importante es el problema oscilante (es
EJEMPLO 11-2
decir, comprobado que no tiene solución automática).
(a) Las tres entradas La definición del problema osálante está contenida en el teorema siguiente: no
~xiste un algoritmo A que pueda decidir para un programa P y una entrada l ar-
x, = 4. x, = l, x, = 2 bitrarios, si el programa se detendrá cuando se presente con esta entrada.
La utilidad de tal algoritmo (por demás, imposible) en computación puede ser
se pueden codificar como sigue:
evidente.
2' . 3' . 5' = 1200 El argumento siguiente comprueba la insolubilidad dei problema oscilante. Pa-
ra representar algoritmos, los procedimientos ensamblan de nuevo las funciones de
(b) De un número GOdel ! :::: 140, .se recuperan únicamente las enrradas siguientes: los lenguajes de programación que son usados; por ejemplo, se asigna un valor al
nombre del procedimiento y se trata como un nombre de variable en este aspecto.
X¡ = 2, x, = O, x, = 1, x, = l Supongamos que de verdad tenemos un procedimiento HAL T que es la solución
del ·problema oscilante. El procedimiento en seudocódigo, se ve como sigue:•
ya que 140 = 22 .

Procedimiento HAL T ( <P, l>)


Las entradas que son cuerdas de cualquier naturaleza (en general, números rea-
inicio
" o datos de caracteres) por ejemplo, se pueden codificar individualmente en sus instrucciones que determinan si P(I) oscila;
úmeros de GOdel con el uso de sus representaciones del código de caracteres. si P( !) oscila entonces
HALT~l
i. EXISTENCIA DE FUNCIONES NO COMPUTABLES además
HALT~
:J argumento siguiente prueba la existencia de funciones que proyectan a los ente-
JS no negativos en enteros no negativos y que no son computables. fin
Supongamos que el conjunto de todas estas funciones de enteros no negativos es
numerable. Esto significa que cada función puede ser asignada a un número ente· Si tal procedimiento existe, podemos definir el procedimiento siguiente:
J único: 1, 2, 3, ...
Procedimiento INVERT (Z)
Llamemos entonces a estas funciones F 1, F 2 , F 3 ,
inicio
Construiremos ahora otra función:
mientras HAL T ( < Z. Z>) = l haga
H(k) = F1(k) + lparak = 1.2,3,. INVERT-1, 'U OTRA ASIGNACION PARA INVERTIR'
Esta función también proyecta a los enteros no negativos en enteros no negati- INVERT -o: • TAMBIEN CUALQUIER ASIGNAC!ON PARA INVERTIR
1os. De cualquier forma, n.\ nguna de éstas es una de las funciones del conjunto F 1, PUEDE HACERSE'
"'2 , F 3 , •.. , ya que para cualquier k ésta es mayor que Fik) en l.
fin
Por tamo, hemos probado mediante la contradicción que el conjunto de todas
as funciones que rebasan a los enteros no negativos no son enumerables. Podemos obtener fácilmente la codificación de GOdel del procedimiento IN·
El conjunto de algoritmos que pueden ser construidos para calcular tales fun· VERT; supongamos que es X.
:iones es, de cualquier forma, enumerable. Por ejemplo, para cada algoritmo (o Dejemos al número de Godel <:X. X> como la entrada al procedimiento
irocedimiento) tratado como una cuerda de símbolos, se le puede asignar su núme- HAL T. El resultado de la ejecución del procedimiento HAL T debe ser:
·o de Godel único que comprueba el punto.
Por consiguiente, concluimos que hay más funciones que rebasan a los enteros
10 negativos que algoritmos disponibles para computarlos. Esto demuestra la exis- l si INVERT (X) oscila
encia .de funciones que no pueden ser computadas. HALT (<X, X>)= {
O si INVERT (X) no oscila
~- EL PROBLEMA OSCILANTE COMO UN EJEMPLO
DE UN PROBLEMA SIN SOLUCION
.a teoría de la computabilidad tiene establecidos muchos resultados negativos, esto
s, ha identificado funciones que no pueden ser calculadas o, en otras palabras, • En estudios más profundos, los paréntesis angulares < > son para la codificación Gódel. por
ejemplo. <P, J>es el número de Güdel de P. I.
•roblemas que no pueden ser resueltos por máquinas.
240 Conceptos de los sistemas de cómputo Com puta bilidad, máquinas d e Tunng y lenguaJes fo rmales 2 41

De cualquier forma, considerando el procedimiento INVERT, si HALT compu tada por una máquina de Turing o una construcción de potencia equivalen-
(<X, X>) = 1, entonces la instrucción mientras que haga* forma un ciclo in- te . Por lo que la potencia de éstas, ya que semejarían máquinas "simples" es equiva-
finito y el procedimiento INVERT no oscila_ lente a la potencia de la computadora.
Dado que somos capaces de encontrar un procedimiento INVERT para el cual Una máquina de Turing es u n a utómata que consta d e una unidad de control,
el problema oscilante no pueda ser resuelto, no es posible un programa de propósito una cinta y una cabeza lectora/ escritora (véase la Fig. 11 -2) jun to con el programa
general que puede decidir la terminación de otros programas ?ara una entrada ar- diseñado para ella.
bitraria.
Otro ejemplo importante de un problema sin solución es el llamado problema de <- ..
tJ_
1 . ---
-~
I ,¡ ----,--
L_ ¡
! .
[ . . . J,__
, .
cin t a
equivalencia, es decir, no hay programa que pueda determinar para otros dos
programas arbitrarios si son equivalentes (por ejemplo, si calculan la misma fun-
ción). Corno muchos otros teoremas en la teoría de la computabilidad esto se de- un cuadro ..... ~ ~--"-- -~
ca beza lectora/ escritora
unidad de 1
muestra mediante la reducción al problema oscilante. En otras palabras, tal canti- 1
control
dad de pruebas establecen que si el pr0blerna d ado es solucionable, el problema os-
cilante lo puede ser también.
Fig. 11-2. C na máquina de T ur ing .

5. COMPLEJIDAD COMPUTACIONAL
La unidad de control de una máquina de Turing almacena la información rela-
cionada al est ad o actual de la máquin a. Una máquina de Turing puede estar en
La teoría de la computabilidad está complementada por el estudio de la r:ompleji- uno de los estados finitos , determinado por el algoritmo, ll amado programa· para
dad r:omputar:ional, la investigación del tiempo de corrida y del espacio de memo· una máquina de Turing. Un estado refleja la historia p asada del cálculo d ebido al
ria requeridos para la solución de mayor clase de problemas. Esta teoría ha estable - programa dado. Se supon e que el programa está "construido en" la unidad d e
cido un número de límites en las necesidades de recursos y por tanto, guía al control.
programador en el diseño de mejores algoritmos. La cima de una máquina de T uring sirve como su dispositivo de memoria y d e
Un ejemplo de ésta origina que la clasificación de n partidas necesita corno un entrada / salida. Consiste de un número infinito de cuadros, conteniendo cad a un o
mínimo nlog 2n operaciones de comparación. un símbolo sencillo. Sólo un número finito de cuadros p ued e contener la in fo rma·
ción necesaria p ara cualquier cálculo; el resto de los cuadros se supone que contiene
B. MAQUINAS DE TURING un sím bolo especial llamado un blanco.
La máqu ina es capaz de leer y escribir información de un cuadro simple en un
Para determinar en orden la computabilidad de las funciones es necesario tener tiempo, es decir , el cuadro es apuntado por la cabeza lectora/ escritora . La cabeza
una definición matemática precisa de los algoritmos. No es posible la precisión con lectora / escritora se mueve de un cuadro al adyacente corno dirigida por el progra·
las computadoras reales (consulte la Parte 1 para la descripción de tales algoritmos, ma y transmite la información entre la cintjl y la unidad de control. La cinta con -
la cual está lejos de ser precisa). tiene al empezar la entrada presentad a a la máquina , subsecuenternente se usa co-
Se ha diseñado una cantidad de construcciones teóricas en las que es posible mo el archivo de trabajo y por últim o , proporciona la salida.
una definición exacta de computación y algoritmo. Las más conocidas son las má- El algoritmo que es seguido por una máquina de Turing se le llama su p rogra -
quinas de Turing; otras incluyen los algoritmos de Markov, cálculos lambda y la ma. Este es un conjunto de instrucciones (" reglas") de un tipo muy restringido. La
teoría de funciones recursivas. máquina lleva a cabo una instrucción corno un paso simple. Cada instrucción tien e
Una máquina de Turing es el más poderoso de los autómatas. Un autómata es la form a de un q uinteto; en general , consta de cinco elem entos ordenad os. Cad a
una máquina idealizada para el procesamiento de información cuyas acciones están quinteto especifica la acción que va a hacerse si la máquina está en un estado d ado ,
especificadas en términos matemáticos. Lo que se conoce corno máquina de Turing con la cabeza lectora/ escritora a puntando a un sím bo lo d ado . La acción pued e
fue introducido por el lógico británico Alan Turing en 1936 y por tanto , precedió el consistir en cambiar el símbolo , m over un cuadro a 1 ~ izquierda o derecha , cam b ia r
desarrollo de las computadoras electrónicas de propósito general. Una conjetura (ya el estado o una comb inación de éstos.
que no puede ser probada, pero existen evidencias fuertes a favor), conocida corno Los quintetos tienen la forma gen eral s'::c•iente (aunque abundan las vari aciones
la tesis de Church sostiene que una función es computable, si y sólo si, puede ser de notación):

• Del inglés: while-do. (N. del T .) ~1 ' : .. t¡. dj, qj


Conceptos de los sistemas de cómputo Computabilidad, máquinas de Turin¡; y len¡;uajes formales 243
242

El programa Comentarios
donde q 0 , b, b, R. q 0 mantenga el movimiento a ta derecha mientras b esté ba-
q, es el estado presente de la máquina; jo la cabeza
t¡ es el símbolo de lectura de la cinta para la cabeza lectora/escritora; q 0 , l, l, L. q¡ se alcanzó el número
t1 es el símbolo de lá cinta que sustituye al que se está leyendo (quizá, q¡. b, 1, N, HALT en el estado q. la cabeza efectivamente está apuncando a b
t¡ = ti' es decir, el símbolo de lectura no se ha sustituido);
di es la dirección prescrita del movimiento de la cabeza (R para la derecha, Notas
L para ;a izquierda, N para no movimiento); l. Observe cómo sucede la "transferencia de control" del primero al segundo quinteto.
2. Observe que cuando q¡ := qj, podemos tener un bucle; en nuestro caso, el primer quin-
qi es el estado siguiente supuesto por la máquina.
teto está consrruido como tal.
3. Observe la necesidad de tener al menos dos estados.
Un quinteto se debe imerpretar como sigue: 4. ¿Cómo podría modificarse el programa. si la cabeza estuviera al principio en el l más a
si qi, t¡, entonces la izquierda?
tj, d), qi
además
EJEMPLO 11-4
Problema
este quinteto no presenta aplicación. Diseñe una máquina de Turing que agregue dos número naturales.
Solución
El flujo de control dentro del programa es completado por la máquina al selec- alfabeto de la cinca; b, l
cionar el quinteto que aplica en el estado actual con el símbolo dado bajo su estado inicial: q 0
cabeza. representación de entrada: los enteros N y Y1 están representados por N + 1 y NI _.._ 1 los
Los estados son indicados como q 0, q t• ••. , qn y HAL T. Al menos en un quinteto l consecutivos respectivamente: los dos enteros son separados por un b sencillo
el símbolo del estado siguiente debe ser HAL T para proporcionar el término del posición inicial de la cabeza: en el l más a la izquierda del nú.mero más a la izquierda
representación de salida: el entero K, representado por K + l los 1 consecutivos.
cómputo.
Para describir una máquina de Turing, se tiene que especificar lo siguieme:
Programa
posición inicial de la cabeza:
el conjunto de símbolos de la cinta, llamado el alfabeto de la cinta
(siempre incluye el símbolo de blanco); .. bb!llbllb.
el estado inicial de la máquina;
la representación del dato de entrada en la cinta; cabeza y cinta después de cada paso:
la posición inicial de la cabeza; q,, !, !, R, q, bb l l l bl lb ... se mueve para alcanzar el b de separación
la representación de la(s) salida(s) de la cinta; -r
el propio programa. q,, b, l, R. q, . bb l l l l l lb . reemplace el b de separación por 1
T
Los ejemplos siguientes presentan dos máquinas de Turing. q,, !, l, R, q, . bbl l l l l lb ... }
-T alcance el l más a la derecha
EJEMPLO 11-3 q,, b, b, L, q, ... bbl l l l l lb ...
¡
q,, l, b, L. q, . bb l l l l l bb. retarde el l más a la derecha
Problema
Diseñe una máquina de Turing que incremente cualquier número natural (entero no negati· ¡

va) en l. q,. l, b, N, HAL T ... bb l l l l bbb . retarde el segundo l más a la derecha.

Solución
alfabeto de la cima: b (blanco), l Notas
estado inicial: q 0
represencación de entrada y salida: un entero M está representado por M + 1 los 1 consecu· l. Observe que la respuesta es K = 3, lo que indica igual al original 2 -'- l.
tivos (ésta es una representación típica ya que representa al O como un l simple, para evitar 2. Compruebe que el programa trabaja para casos especiales, por ejemplo. O + O.
tener a la cinta en blanco totalmente). 3. ¿Cuáles decisiones en la escritura de este programa fueron necesarias y cuáles arbitra·
la posición inicial de la cabeza: en cualquier parte a la izquierda del número. rias?
24~ Conceptos d e los sist emas de cómputo
Computabzlzdad, máquinas de Turing y lenguaj es f ormales 245
Mientras que cada computación necesita una máquina de Turing diferente,
existe una máquz'na de Turing universal que es capaz de simular a cualquier otra 2.
máquina de Turing. De este modo la cinta de una máquina de Turing universal sa-
DESCRJPCION Y DERIVACJON DE LENGUAJES FORMALES
tisface la tesis de Church al ser capaz de computar cualquier función computable.
Un problema dado es solucionable, esto es, existe un algoritmo para su solución, Un lenguaje formal, a continuación llamado simplemente un lenguaje , es un con-
si y sólo si, cuando el algoritmo es presentado como un programa para una má· junto de líneas formadas por la agrupación (en general, escribiendo uno tras otro)
quina de Turing, la máquina se detiene. Existe por supuesto, como se muestra a de un número finito de símbolos del lenguaje de acuerdo con las reglas especifica-
das para este lenguaje.
continuación, un algoritmo no general que puede establecer esto para un programa
arbitrario: el problema oscilante es indeciso. El conjunto de todos los símbolos que pueden aparecer en las líne'as de lenguaje
es el alfabeto del lenguaje.
De acuerdo a estas definiciones, lo siguiente se considera un lenguaje:
C. LENGUAJES FORMALES
L, = {X + y 1 y + X}
Los lenguajes se caracterizan por su sintaxis y semántica. La sintaxis del lenguaje
que se presra por sí misma a una definiciór: formal , permite la clasificación del len- sobre el alfabeto x , y, + .
guaje como perteneciente a una de las cuatro categorías de la llamada jerarquía de
Chomsky de los lenguajes formales. La riqueza de los lenguajes naturales sobrepasa , En la notación expresada:
de cualquier forma , la posibilidad de tal definición formal, mientras que los len-
L, es el nombre del lenguaje;
guajes de programación de nivel alto pueden ser aproximados mediante la llamada
gramática libre de contexto de la jerarquía. Un compilador para el lenguaje defini- los corchetes : { y}, contienen la lista de líneas del lenguaje;
do puede usar esta definición para ordenar programas. el símbolo 1 separa las líneas individuales y tiene el significado de "o".

Por tanto, este lenguaje L 1, consta de dos líneas solamente: x + y y y + x.


l. SINTAXIS Y SEMANTICA Una distinción importante existe entre los símbolos del lenguaje que se describe
(en este caso, los símbolos x , y, + ), y los símbolos usados para describirlo ( { , } ,
A1nbos lengu ajes. el natura l y el de program ación. se p uede n describir por dos aspec - I ). El último conjunto de símbolos no pertenece al alfabeto del lenguaje descrito, se
tos: la sintaxis y la semántica. La sintaxis es la gramática del lenguaje: define qué dice que pertenece a un metalenguaje usado para la descripción de otros lenguajes.
líneas de caracteres son construcciones válidas en el lenguaje . La sintaxis de un len- Tal descripción especifica las reglas conforme a las cuales se forman las líneas
guaje de programación determina cuál de los programas que se escriben e n éste son del lenguaje. Para que pueda ser capaz de describir infinidad de lenguajes (con un
válidos. La semántica define el significado de la construcción del lenguaje. Aun número infinito de líneas, cada una de longitud finita) o, en general, lenguajes con
muchas líneas, se tiene que ampliar esta notación.
cuando un programa puede ser sintácticamente correcto, si su significado es dife -
En el metalenguaje usado para especificar el lenguaje siguiente:
rente al intentado por el programador, el resultado de su ejecución por lo g-.-neral
no será una solución al problema.
L, ={ xm + y" / m;;;..1, 11;;;..1 }
EJ EMPLO 11-5
los símbolos de potencia m y n significan que un número arbitrario de símbolos x y y
En un lenguaje natural. el inglés, las dos oraciones siguientes tienen estructura sintáctica
aparecen en las líneas de lenguaje. Ya que m puede diferir den, los números de las
idéntica pero cienameme si gnificado diferente: U'.'/ PERRO MORDIO A UN HOMBRE vs.
UN HOMBRE MORDIO A UN PERRO. x en una lí