1985 - zwass

143
\ 1 ' !f tJ \ LIBRERIA UNIVERSITARIA UNIVERSIDAD DE PANAMA . .. . -- TELEFONO : 23-3155 INTRODUCCION A LA CIENCIA n" " ij .1.iw f. 'o DE LA COMPUTACION

description

Introducción A La Computación

Transcript of 1985 - zwass

  • \ 1

    '

    !f tJ

    \

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

    INTRODUCCION A LA CIENCIA

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

    ~SP

    DE LA COMPUTACION

  • ,;"t

    SERIE DE COMPENDIOS CIENTIFICOS

    NTRODUCCON 010

    Vladimir Zwass

    ::;~. J..~~;'. -

    " EL TUTOR DEL EST UDIANTE"

    CENCA de10 COMPUTACON

    COMPAIA EDITORIAL CONTINENTAL, S.A. DE C.V., MEXICO DISTRIBUIDORES:

    ESP AA-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

  • Ttulo original en ingls : Introduction to COMPUTER SCIENCE

    Traducido por: ING. MARIO ESTEBAN CHAVEZ MARTINEZ

    Edicin 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 .

    ISBN 006-460193-5 (rstica)

    Segunda impresin septiembre de 1985

    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-gn sistema electrnico , mecnico de fotorreproduccin , memoria o cualquier otro , sin permiso por escrito del editor.

    ISBN 968-26-0520-2

    Derer:hos Reservados en Lengua Espaola-1985, Primera Publir:ar:in

    COMPAIA EDITORIAL CONTINENTAL, S. A. DE C. V. CALZ. DE TLALPAN NM. 4620, MXICO 22, D. F.

    MIEMBRO DE LA CAMARA NACIONAL DE LA INDUSTRIA EDITORIAL Registro Nm . 43

    IMPRESO EN MEXICO PRINTED IN MEXICO

    le

    SOBRE EL AUTOR

    VIadimir Zwass recibi su doctorado en ciencias de la computacin de la Universidad de Co-lumbia en 1975. Actualmente es profesor asociado y jefe del Comit de Ciencias de la Compu-tacin de la Universidad Fairleigh Dickinson. Con anterioridad fue miembro de los asesores profesionales de la Agencia Internacional de Energa Atmica en Viena, Austria . Como con-sultor, ha aconsejado , entre otras compaias a Citibank y a la Metropolitan Life Insurance Company.

    El profesor Zwass es el autor de l'rogramming in FORTRAN, un volumen comprendido en la serie de compendios Bames & Noble, y ha contribuido en revistas profesionales . Es miembro de la Asociacin para la Maquinaria de Cmputo, del Instituto de Ingenieros Electricistas y Electrnicos, Sigma Xi y Eta Kappa Nu.

  • r ,

    Contenido

    Prefacio 13

    Introduccin: 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 bsicos de las computadoras 20 E. Solucin de problemas c,on las computadoras 22 F. Bases de la estructura del sistema de cmputo 22

    Parte l. FUNDAMENTOS DE PROGRAMACION

    ALGORITMOS Y SU EXPRESION

    A. Definicin de algoritmos B. Propiedades de los algoritmos C. Diagramas de fabricacin

    2 MANEJO DE DATOS EN PROGRAMACION

    A . Instrucciones B. Tipos de datos simples C. Constantes, variables y arreglos D. Declaraciones E. Entrada y salida F. Asignacin G. Comentarios H. Repaso

    Sl

    31 33 35

    39

    39 40 41 44 45 46 48 49

  • JO Contenido

    t Contenido 11

    3 ESTRUCTURAS DE CONTROL EN EL DISENO c. Conjuntos de instrucciones 156 DE PROGRAMAS 51 \ D. Introduccin a la programacin en lenguaje de ensamble 162

    E. Orientacin del operando 167

    A. Condiciones 51 [ F. Uso del lenguaje de ensamble 172

    B. Decisin 56 G. Ensambladores y sistemas de ensamble 172

    c. Bucle 62 D . Instruccin compuesta 63 l 8 ORG~IZACION DE LOS SISTEMAS DE COMl'UTO 179 E. Transferencia incondicional de control. Niveles 66 F. Diseo de algoritmos. Seudocdigo 67 A. Unidad de procesamiento central y ejecucin de Ja instruccin 179 G. Estructuras de control adicional 73 B . Jerarqufa de la memoria 184 H. Conclusin. Tipos de instrucciones en la programacin 80 c . Memoria principal 185

    D . Memoria secundaria 187 4 SUBPROGRAMAS Y PROGRAMACION MODULAR 83 1 E. Entrada/ salida 191

    F. Organizacin de colectores de un sistema de cmputo 194 A. Definicin e invocacin de subprogramas 83

    1

    G. Sistemas de cmputo con unidades de procesamiento central B. Comunicacin con un subprograma 92 (CPU) mltiple&. Redes de computadora 194 c. ,Repeticin en la programacin 101 D. La programacin modular y sus ventajas 105

    9 SOFTWARE DE LOS SISTEMAS DE COMPUTO. 5 REPRESENTACION DE DATOS SIMPLES. INTRODUCCION 1 SISTEMAS DE OPERACION 199

    A LAS ESTRUCTURAS DE DATOS 109 A. Vista panormica del software de los sistemas 199

    A. Datos simples 109 B. Del control manual de las computadoras a la programacin B. Estructuras de datos 115 unitaria 202

    c. Organizacin lgica y fisica de las estructuras de datos 116 c. Programacin mltiple 203

    D . Arreglos 118 D . Sistemas de operacin de lotes contra los de tiempo compartido 205

    E. Registros ! E. Tipos de sistemas de cmputo 206 119 !

    F. Listas lineales 121 I' F. Operacin de un sistema de programacin mltiple de lotes 210 G. Fracciones y pilas 123 1 G. Partes funcionales de un sistema de operacin de programacin H. Arboles y rboles binarios 125 1 mltiple 211

    l. Grficas 127 J. Lneas de caracteres y su procesamiento 129 10 ARCHIVOS Y BANCOS DE DATOS 217

    Parte 2. CONCEPTOS DE LOS SISTEMAS A. Campos, registros, archivos y bancos de datos 218 DE COMPUTO B. Organizacin de datos fisica contra lgica. Bloques 218

    6 LOS LENGUAJES DE NIVEL ALTO Y SUS TRADUCTORES c. Organizacin de archivos 221

    137 1 D. Organizacin lgica de datos en el banco de datos 226

    A. Examen de los lenguajes de nivel alto E. Conceptos de banco de datos 230

    137 B. Compiladores 143 c. Interpretacin y su comparacin con la compilacin 148 11 COMPUTABILIDAD, MAQUINAS DE TURING

    Y LENGUAJES FORMALES 235 7 INTRODUCCION A LOS LENGUAJES DE ENSAMBLE 151

    A. Teora de la computabilidad 235 A. Registros, palabras y bytes 151

    1 B. Mquinas de Turing 240

    B. Instrucciones a Ja mquina y lenguaje de ensamble 153 c. Lenguajes formales 244

  • 12 Contenido

    Apndice A. REPRESENTACION DE LOS DATOS NUMERICOS EN LA MEMORIA DE LA COMPUTADORA 251

    Apndice B. CODIGOS DE CARACTERES 265 Apndice C. ALGEBRA BOOLEANA Y LOGICA DE COMPUT ACION 269

    INDICE 277

    Prefacio

    Este libro introduce y explica los conceptos fundamentales de la ciencia de Ja compu-tacin. Est diseado para usane en varias formas : como libro de texto, comple-mentario, de repaso, un manual de referencia y una introduccin a l campo de la computacin. No se requiere un conocimiento previo de la ciencia de la computa-cin.

    Como un texto universitario , este volumen est planeado para un curso intro-ductorio a Ja ciencia de la computacin de un semestre . Junto con un libro de texto en programacin, en un lenguaje especfico 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, tambin de las series de compendios "Barnes y Noble", y del mismo autor es "Programming in FORTRA N : Strur,tured Programming with FORTRAN IV and FORTRAN 77" (Programacin en Fortran: programacin estructurada con Fortran IV y Fortran 77).

    Este libro complementa tam bin a otros libros de texto para el ncleo curricu-lum de Ja "Association for Computing Machinery" ya que explica e ilustra los con-ceptos fundamentales de Ja ciencia de Ja computacin .

    Dado que Ja ciencia de la computacin abarca los aspectos prctico y terico del uso y diseo de las computadoras, su extensin es muy amplia. Esto se refleja en la estructura del libro.

    La Parte 1 analiza la programacin de las computadoras de una forma indepen-dient~ de cualquier lenguaje de programacin especfico. Este tratamiento permite al lector aprender el diseo de algoritmos, disear la estructura y programacin, y la construccin bsica de los lenguajes de programacin , sin incurrir en la carga de detalles y tendencias de un lenguaje dado. El anlisis hace del todo claro que las herramientas del diseo de algoritmos y las escrituras de programas tienen la m isma construccin lisica de programacin.

    La Parte 2, completada por los apndices , se puede estudiar independientemen-te de la Parte 1. Presenta la organizacin de los tres recursos de los sistemas de cmputo. Hardware, software y datos. El ltimo capitulo de esta parte junto con el apndice C, introduce los conceptos esenciales de la teora de la ciencia de la com-putacin.

  • 14 Prefacio

    Los lectores que deseen familiarizarse pvr s mismos con el campo de Ja compu tacin sin hacer un estudio muy profundo de la ciencia de Ja computacin lograrn sus objetivos al leer Ja Introduccin y Ja Pane 2. Un indice ms bieP exhaustivo le ayudar a colocar este libro en un uso enciclopdico. Se recomienda ampliamente Ja lectura adicional.

    Deseo agradecer a mis colegas - cienficos y prcticos de Ja C'omputacin - y a mis estudiantes, por su panicipacin al proporcionarme Ja comprensin necesaria para desarrollar esta presentacin de un campo complejo que crece rpidamente. Quisiera agradecer tambin ajeanne Flagg de Barnes & Noble por su expena ayu da editorial y a Janet Goldstein por su trabajo de supervisin al vigilar este libro du rante su produccin.

    Vladimir Zwass

    Introduccin Las Computadoras

    y su Uso en la Solucin de Problemas

    Las computadoras electrnicas digitales surgieron en Ja dcada de 1940 y han pe netrado en casi todos Jos campos de Ja actividad humana como herramientas para el almacenamiento y procesamiento de informacin.

    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 volmenes de datos, Ja computadora es una ayuda esencial en el proceso de solucin de problemas. El proceso de solucin se presenta a una computadora en forma de programa - una lista de las acciones requeridas para llegar a los resultados.

    v.111'\t:lntroduccin analiza los elementos bsicos de .Jas computador:is y su aplica-~i6n as como las fases del diseo del programa de Ja computadora y su implanta cin.

    A. QUE ES UNA COMPUTADORA?

    Una computadora es una mquina que procesa datos o, en otras palabras, una m quina para Ja manipulacin de smbolos. Estos simbolos representan informaci'n de varias clases, por ejemplo, un nmero o un nombre.

    La palabra "computadora" se usa en Ja actualidad como una abreviacin de computadora electrnica digital de programa de usos generales. Estas se refieren a las siguientes propiedades.

    Propsitos generales. Las computadoras se pueden aplicar para resolver cual quier problema que tenga solucin. La computadora es dirigida por un programa, esto es, una secuencia de instrucciones que determinan las operaciones que van a ser realizadas por la mquina. Los programas estn escritos por los humanos. Un programa se puede reemplazar con facilidad por otro, por lo que cambia el uso de la mquina. Una mquina de capacidad ms lixp.itada, diseada para una tarea en panicular, es llamad una computadora tie propsito especial.

    Todas las computadoras modernas tienen sus programas almacenados con Jos datos en una memon'a (llamada tambin almacn). Estas computadoras de progra-ma almacenado han sido desarrolladas a panir de dispositivo de clculo en los que

  • 16 Introduccin

    la secuencia de pasos es seguida durante el clculo establecindose por medio de un tablero de contacto o una cinta perforada de "control".

    Las unidades de procesamiento de datos de las computadoras estn construidas de componentes electrnicos, lo que permite velocidades de aproximadamente un milln de operaciones elementales por segundo para algunas mquinas, y velocida-des an mayores para otras. Un sistema de cmputo comprende no slo Jos elemen-tos de procesamiento de datos, sino tambin los dispositivos de entrada/salida, usa-dos para transferir programas y datos de Ja memoria de la computadora al mundo exterior y viceversa. Estos dispositivos con frecuencia electromecnicos, son en con-secuencia ms lentos.

    Las computadoras digitales han operado a las mquinas analgicas. En las com-putadoras analgicas se usa un proceso fisico (por lo general el flujo de corriente elctrica) para imitar el cmputo. Sus resultados se obtienen midiendo los par-metros del proceso. Las computadoras digitales usan simbolos para el cmputo sin referencia al fenmeno fisico fundamental.

    B. HARDWARE Y SOFTWARE DE LA COMPUTADORA

    En la programacin, el usuario de una comp'!.ltadora no tiene que tratar directamen-te con los dispositivos fisicos (hardware) del sistema de cmputo. En cambio, los programas de servicios especiales, almacenados en la memoria de la computadora, abastecen una interfase entre el usuario y Ja mquina al vaco. Estos programas, lla-mados el software del sistema, simplifican la tarea del programador y la aplicacin de escritos del software por l o por su control del empleo del hardware.

    1. HARDWARE

    Un sistema de cmputo incluye un nmero de dispositivos separados funcionalmen-te que constituyen su hardware: el procesador central al que se dirigen las instruc-ciones, el sistema de memoria en donde los datos e instrucciones son almacenados y los mecanismos de entrada/salida para la comunicacin con el ambiente del sistema.

    Las computadoras ejecutan Jos programas; esto es, llevan a cabo las secuencias de instrucciones contenidas en su interior. El procesador central de la computadora (llamado tambin CPU, unidad de procesamiento central)* est diseado para comprender instrucciones elementales. Tres ejemplos de instrucciones elementales son: (1) sume dos nmeros; (2) compare dos nmeros e indique el mayor; (3) lleve a cabo la instruccin siguiente para una posicin de memoria dada. Estas instruc-ciones se codifican como secuencias de los O y de los l para facilitar la implementa cin del hardware. Este cdigo constituye el lenguaje de mquina de una computa-dora. El lenguaje de mquina vara en diferentes computadoras.

    Del inglb CPU, central proccssing unit. (N. del T.)

    . r .

    Introduccin 17

    2. SOFTWARE

    El intermedio entre el usuario de Ja computadora y el hardware es el software del sistema, que es un conjunto de programas que pertenece a Ja configuracin de un sistema de cmputo dado y facilita su uso. Los programas escritos por el usuario de la computadora para obtener soluciones a sus problemas son llamados aplicacin de software. Con frecuencia al software del sistema se Je hace referencia en forma bre-ve como software.

    El usuario de la computadora, durante el proceso de diseo e implementacin del programa que es llamado programacin, debe especificar las operaciones que van a realizarse. Los lenguajes naturales como el ingls, usados para la comunica-cin humana, no son apropiados para la programacin debido a su ambigedad y falta de precisin. Por el contrario, la programacin en un lenguaje de mquina puede ser excesivamente tedioso y podra limitar la capacidad de aplicacin de los 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-macin. Generalmente los ms usados son los lenguajes de alto nivel (como el FORTRAN, COBOL o PL/l) que combinan la precisin de expresin con una cierta aproximacin al lenguaje natural por un lado y por otro el problema a resol-ver. Los programas escritos en tales lenguajes son muy independientes de las caractersticas de una computadora en particular; se pueden trasladar con facili-dad de una mquina a otra. Los lenguajes de ensamble, el otro tipo de notaciones de programa, se aproximan mucho ms al lenguaje de mquina de una computa-dora viva.

    Se requiere un medio de traduccin. Estos programas que se conocen como tra-ductores convierten los programas fuente (escritos en lenguajes de nivel superior o en un lenguaje de ensamble , para el que se ha diseado al traductor) en programas de objetivo, expresados en el lenguaje de mquina de la computadora en particu-lar.

    El software incluye tambin los programas de servicio (por ejemplo, las rutinas de clasificacin) que han sido escritos ms bien por los programadores de sistemas, que por los usuarios y estn almacenados en la memoria del sistema de cmputo.

    Adems, se requiere un programa especial para asignar los recursos necesarios a un programa y para mediar entre las demandas hechas por varios usuarios en un siste-ma compartido. Este programa, que maneja todos los recursos del sistema, incluyen-do los programas del usuario, es llamado supervisor, ejecutivo o sistema operativo.

    Se requieren programas extensos para manejar los bancos de datos en algunos sistemas de cmputo y para facilitar la comunicacin remota entre un usuario y el sistema o, frecuentemente, entre muchas computadoras ubicadas en forma dis-tante.

    El sistema operativo, junto con los traductores de lenguaje, los programas para el control de datos y comunicacin, y los programas de servicio constituyen el soft-ware esencial de la computadora. Los programas del usuario (programas de aplica-cin) se pueden simplificar debido a la presencia del software del sistema.

  • 18 Introduccin

    3. INTERDEPENDENCIA ENTRE EL HARDWARE Y EL SOFTWARE

    De la descripcin anterior podemos concluir de que existe la siguiente separacin funcional entre el hardware y el software de la computadora. El hardware es capaz de llevar a cabo las operaciones elementales, especificadas en el conjunto de ins-trucciones de la computadora dada. El software extiende ademru; estas capacidades y hace posible al usuario:

    (a) Especificar el programa en una manera muy aproximada al proceso de pensar de l o de ella.

    (b) Llamar los programas resultantes del trabajo hecho por los otros usuarios o por los programadores del sistema par.a llevar a cabo parte del (o de la) programador( a).

    (c) Confiar en la ubicacin automlitica de recursos del propio sistema.

    C. BREVE HISTORIA DE LAS COMPUTADORAS

    Este breve repaso de la historia .de la computacin, est planeado para dar una perspectiva en el desarrollo de las computadoras electrnicas digitales y para mostrar cmo han surgido recientemente.

    1. ANTES DE LA ERA DE LA ELECTRICIDAD

    Las herramientas computacionales surgieron en la antigedad. El baco, el ms antiguo de los dispositivos de clculo, fue inventado probablemente en el Oriente, hace miles de aos. Moviendo las cuentas que tienen diferente significado de acuer do a su posicin en las barras del baco, se puede llevar a cabo la adicin y sustrac-cin. Este dispositivo en la actualidad permanece en uso en algunos pases.

    El siguiente gran salto, los grandes matemticos del siglo XVII Blaise Pascal y Gottfried Leibniz construyeron calculadoras mecnicas armadas sobre ruedas cla-vadas. La calculadora de Pascal slo llevaba a cabo la sustraccin y la adicin; Leibniz fue capaz de extender este diseo para la multiplicacin y la divisin.

    De manera sorprendente, la invencin de un tejido de tela automtico en 1801 por Joseph Jacquard, tuvo fuerte intluencia en el futuro de la computacin. Esta herramienta-usaba tarjetas perforadas para controlar la trayectoria del urdido, esto es, una tarjeta conten!a el "programa" para la tarea del tejido.

    La idea fue utilizada por Charles Babbage, el creador de la primera computado-ra de propsitos generales. Comenz su trabajo de mecnica programada por tarje-tas en 1883 en una "mquina analltica" (nunca la termin).

    Los tabuladores de tarjeta perforada fueron introducidos por vez primera por Herman Hollerith para el censo de 1890 en los EUA.

    Introduccin 19

    2. SURGIMIENTO DE LAS COMPUTADORAS MODERNAS

    En la dcada de 1930 el concepto de la computadora de uso general se volvi en una idea cuyo tiempo habia llegado. Por un lado la ...:reciente complejidad de la so-ciedad humana y por el otro las nuevas posibilidarl.es t~cnolgicas, condujeron .al uso prctico del pensamiento de la gente de alento. El matemtico ingls Alan Tu-ring en 1937 hizo un anlisis terico de las posibilidades de un mec:inismo de cm-puto de usos generales. El impulso inmediato para su implementacin fue propor-cionado por la Segunda Guerra Mundial y por las necesidades de cmputo de los militares.

    En 1944 entr en funcionamiento en la Universidad de Harvard la primera com-putadora electromecnica de uso general, la Mark l. El cmputo mecnico era len-to e inconfiable. En 1946, se termin en la Universidad de Pennsylvania la primera computadora electrnica de uso general, ENIAC. Sus diseadores J. Presper Eckert y John W. Mauchly, utilizaron y expandieron las ideas desarrolladas por otro cientifico estadounidense, John V. Atanasoff, quien fue el primero en utilizar dis-positivos electrnicos en la construccin de una computadora (que nunca termin). El "programa" de la Mark 1 fue colocado en una cinta de papel, mientras que la ENIAC i;equerfa un 11ablero de enrollado. Bajo estas circunstancias, introducir un programa nuevo .en las mquinas fue una empresa mayor.

    En 1945 Jolm 'On Neumann del Instituto de Estudios Avanzados introdujo el concepto de la compu,iadora .con programa almacenado. J .a primera de estas m-quinas, EDSAC, fue .erminada en la Universidad de Cambndge en Inglaterra en 1949.

    La era de la produccin 6't -nasa ae computadoras lleg en 1951 , cuando una computadora digital electrmca de programa almacenado, la UNIVAC 1, .fue lan-zada comercialmente como la primera de estas mquinas que se construy en una linea de ensamble.

    En consecuencia, surgieron -tres (o cuatro, de acuerdo a algunas opiniones) gene-r!l.ciones consecutivas de computadoras, distinguidas entre otras caracteristicas por la te .... ologfa de sus dispositivos electrnicos. Las computadoras de la primera gene-racin, eran mquinas de tubos al vado. La segunda generacin, construida sobre transistores empacados de un modo individual, fue introducida comercialmente en 1958. La tercera generacin apareci en 1966 y abarca las mquinas que usan cir-cuitos integrados, esto es, los circuitos lgicos que constan de muchos transistores y de otros dispositivos electrnicos estn contenidos en una pieza pequea de metal semiconductor (llamada oblea) de este tamao: O. La cuarta generacin de com-putadoras se distingue en ocasiones para el uso de la integracin en gran escala (LSI: Large scale integration), con miles de transistores en una oblea.

    En 1965 se instal Ja primera minicomputadora comercial, una computadora chica y relativamente barata algo limitada en los recursos del hardware y software. A menudo se usaba ms para una aplicacin simple que para un rango amplio de aplicaciones, como lo eran las ms grandes llamadas computadoras pnncipales.

    La tecnologa de la integracin en escala grande origin, en 1971 , en el de-sarrollo del microprocesador, una unidad de procesamiento central en una oblea

  • 20 Introdur,r,in

    simple. Tal dispositivo, cuando se ensamblaba con otras pocas obleas para el resto de las fun~iones (por ejemplo, la memoria), formaba un microcomputador.

    Las mini y microcomputadoras, debido a su bajo costo y tamao pequeo, origi-naron una amplia distribucin de Ja computacin . Sus capacidades crecieron de manera impresionante.

    La historia del software de los sistemas es muy breve, se origin con la invencin de las computadoras de programas almacenados. Al principio, Jos programadores usaban el lenguaje de la mquina. A mediados de la dcada de 1950, se comenza-ron a introducir Jos lenguajes de alto nivel, con el tal vez ms poderoso de stos, el FORTRAN presentado en su forma original en 1957. Los sistemas de operacin, al principio muy simples en sus funciones, tambin fueron creados a mediados de la dcada de 1950. La dcada de 1970 trajo al software sofisticado para el manejo de volmenes grandes de datos interrelacionados y las comunicaciones entre computa-doras lejanas.

    D. USOS BASICOS DE LAS COMPUTADORAS

    Una computadora es una herramienta utilizada por los humanos en el proceso de solucin de problemas, ms que en Ja solucin de problemas en s. Las computado-ras extienden las habilidades humanas debido a las caracterlsticas siguientes: velo-cidad de operacin, capacidad de memoria, puntualidad y costo-efectividad en muchas aplicaciones.

    1. CATEGORIAS DE LAS APLICACIONES DE LA COMPUTADORA

    Las categonas tpicas de las aplicaciones de la computadora en Ja que la mqui-na ayuda al intelecto y a los sentidos humanos o libera a Ja gente para ocupaciones creativas incluye:

    (a) Tareas que requieren el manejo de volmenes grandes de datos , como an-lisis de los censos o identificacin de partculas elementales.

    (b) Tareas para las cuales el clculo a alta velocidad es imperativo; stas se representan por (1) sistemas de tiempo real que requieren una respuesta de control ms

    rpida que la que puede ser proporcionada por Jos humanos, como el manejo de un cohete o el control de un proceso fsico;

    (2) reas en donde no se requiere una respuesta en tiempo real pero en donde el nmero de clculos relacionados es tan grande que Jos re-sultados podran obtenerse demasiado tarde para ser tiles a menos que se usara una computadora. Cualquier pronstico es un buen ejemplo;

    Introduccin 21

    (c) Operacin en medios inaccesibles para los humanos; estas aplicaciones incluyen vuelos no tripulados al espacio u operaciones en presencia de ra-diaciones.

    (d) Tareas rutinarias de naturalezarepetitiva, como la impresin de un repor-te o la actualizacin de cuentas.

    El ltimo criterio para el uso profesional de una computadora en una tarea dada es por lo general el de costo-efectividad. En muchos casos, la satisfaccin derivada por el usuario de un plan conveniente y justo tan1bin contribuye. La computacin domstica se ha desarrollado de una manera sigriificativa.

    2. AREAS DE USO DE LA CGMPUTADORA

    En la actualidad cada rea de Ja actividad humana incluye el uso de computadoras. Se han desarrollado los siguientes usos de la computadora, que con frecuencia

    aparecen juntos:

    Clculos numricos (Ja primera aplicacin). Almacenamiento y extraccin de informacir.: el mantenimiento de un conjunto de datos simblicos, llamado un archivo (por ejemplo, un archivo de nmina), incluye los programas necesarios para tener acceso a cualquier partida o clase de partidas. El manejo de conjuntos de datos, que incluyen la clasificacin y reduccin . Control de proceso: en un proceso de produccin o en cualquier otro proce-so fsico, se puede conectar una computadora por un extremo a los instru-mentos de medicin y por el otro a Jos controles. La mquina analiza los da-tos medidos y ajusta Jos controles de acuerdo con las instrucciones del programa. Comunicaciones: manejo de mensajes en las redes de comunicacin . Procesamiento de la palabra: manejo de textos, casi siempre para impre-sin. Grficas de clculo: entrada, manejo y salida de representaciones grficas, que reflejan el mundo real o creado por un humano y/o Ja computadora. Simulacin de sistema: para analizar el estado de un sistema, se usa un programa de computadora como un modelo. Inteligencia artificial: un desarrollo selectivo del mtodo de tanteos, para contestar a Jos problemas que se cree requieren inteligencia humana debido a que su proceso de solucin no se puede establecer con precisin. Son ejemplos Ja comprobacin de teoremas y Ja traduccin de Jos idiomas natu-rales, Jos cuales hasta ahora habfan sido eludidos por las aproximaciones de cmputo.

    El rpido desarrollo de Ja computacin est ampliando esta lista de manera constante. Los costoa de! hardware de Ja computadora estn disminuyendo debido

  • 22 Introdur.r.in

    al progreso tecnolgico, mientras que los costos del trabajo humano estn crecien-do. Esta combinacin da por resultado un uso de las computadoras cada vez ms amplio.

    E. SOLUCION DE PROBLEMAS CON LAS COMPUTADORAS Como ya se ha hecho hincapi, la solucin de un problema dado es nuestra. Si elegi-mos incorporar una computadora en este trabajo, se pueden distinguir las etapas si-.guientes en el proceso de solucin de problemas:

    (1) Definicin del problema: La solucin que estamos buscando por lo gene ral tiene que aplicarse ms bien a una clase de problemas que a un problema sencillo. Para definir esta clase, se tienen que hacer suposi-ciones con respecto a la informacin disponible (se disearn las entradas al programa). Se debe establecer tambin la naturaleza de los resultados deseados (las salidas del programa para todas las clases de entrada po sibles).

    (2) Anlisis del problema: Se debe determinar la aproximacin a la solucin del problema ms efectiva y eficiente. Puede ser posible dividir el proble-ma en subproblemas. Se debe investigar Ja posibilidad de incorporar programas ya existentes.

    (3) Diseo de la estrctura de datos: Se determina la composicin de los datos para ser manejados por el programa. Esto se hace junto con el paso si-guiente.

    (4) Diseo del algoritmo: El algoritmo o procedimiento de solucin para el problema, se debe escribir con el uso de una notacin algortmica. Estas notaciones evitan los detalles contenidos en programas, permitiendo al so lucionador de problemas concentrarse en el propio problema.

    (5) Codificacin: Se debe seleccionar un Ieriguaje de programacin apro-piado. Se debe escribir un programa legible con estructura clara.

    (6) Implementacin del programa: El programador debe estar convencido, que usando Ja computadora y los datos de entrada de la muestra represen-tativa, el programa funcione como l lo desea. Se debe investigar el com-portamiento del programa en respuesta a todas las posibles variaciones de las .entradas durante la definicin del problema y las etapas de anlisis.

    (7) Documentacin del programa: Una descripcin de la operacin del programa, es su estructura de datos, y se deben proporcionar instruc-ciones de entrada y de salida.

    (8) Uso del programa y modificacin posible: El programa est operando en muchos casos peridicamente para obtener los resultados necesarios. Es una herramienta y quiz sea mejorada.

    F. BASES DE LA ESTRUCTURA DEL SISTEMA DE COMPUTO

    Para programar en un lenguaje de alto nivel, es necesario comprender los elementos de organizacin de un sistema de cmputo. Aqu se presenta una descripcin dise-ada para respaldar tal programacin y se ampliar en el Cap. 8.

    1. FLUJO DE LA INFORMACION EN LOS SISTEMAS DE COMPUTO

    Introduccin 23

    La descripcin de un sistema de cmputo en la Sec. B anterior menciona Ja organi-zacin bsica mostrada en la Fig. I-1. Este diagrama de bloques representa el flujo de la informacin (instrucciones y datos) necesaria para realizar un programa.

    Un dispositivo de entrada recibe la informacin y la coloca en la memona (tam-bin llamada archivo). Si las instrucciones no estn expresadas en el lenguaje de la mquina, se llama al traductor del software. Durante la traduccin y ejecucin sub-secuente, la unidad de procesamiento central (CPU) trae las instrucciones de la memoria. Por supuesto, durante la traduccin, sern stas las instrucciones del tra-ductor. La CPU tambin trae de la memoria las partidas de datos necesarios y los aplica a estas instrucciones. Los resultados intermedios y finales son almacenados tambin en la memoria. Dado que la ejecucin del programa es progresiva, se pueden comunicar los datos hacia el mundo exterior mediante un di$positivo de sa-lida. Tambin pueden ser almacenados en la memoria hasta que se haya realizado el programa y entonces _presentarlos todos a la vez. Los programas y/ o los datos pueden ser almacenados por la memoria durante largos periodos de tiempo para evitar introducirlos repetidamente por medio de un dispositivo de entrada.

    Toda esta informacin manejada por el sistema de la computadora est codifi-cada como una cadena de los O y 1, o sea, en tin cdigo binario.

    Para soportar la operacin descrita del sistema de cmputo, se necesitan ampliaciones al esquema bsico de la Fig. I-1 . En la Fig. I-2 se presenta una imagen ms detallada de la organizacin del sistema de cmputo.

    2. UNIDAD DE PROCESAMIENTO CENTRAL

    La unidad de procesamiento central (CPU) de una computadora consiste de dos partes distintas en funcionamiento: la unidad de control y la unidad de lgica arit -mtica.

    La unidad de control dirige las acciones del sistema llevando a .cabo las instruc-ciones y estableciendo su secuencia conforme al programa.

    unidad de procesamiento central

    datos l 1 instrucciones _ . y datos

    dispositivo t-------~ de entrada

    instrucciones y datos

    r ---ll-...L __

    resultados ;./dispositivo memoria 1 de salida

    1 oor ejemplo, lectora de tarjetas) (por ejemplo. impresora)

    Fig. 1-1. Flujo de la informacin en las computadoras.

    Del ing!Es CPU. central proc

  • 24 Introduccin

    - - - - 1 r------1 1

    ,_

    ,--- 1 1 1

    cPu: ,-----, ~--'--'-1- 1

    1 1 1

    '-

    unidad de control

    unidad de igica aritmtica

    dispoaitivos 1/0 (entrada/ salida)

    - 1

    memoria secundaria

    flujo de la informacin - - - flujo de las seales de control (instrucciones o datos)

    Fig. I-2. Organizacin del sistema de cmputo.

    La unidad de lgica aritmtica (ALU)* contiene los circuitos necesarios para llevar a cabo las operaciones aritmticas bsicas asf como las lgicas (por ejemplo , una comparacin). La ALU tambin contiene un cierto nniero de registros o ele mentos de archivo rpidos. Cada registro puede retener un operando simple (part da de datos) . Cuando se registran, los operands pueden ser sumados, comparados, cambiados o manejados de cualquier forma .

    3. MEMORIA

    La memoria principal de la computadora consta de una cantidad de posiciones lla-madas palabras, que contienen instrucciones o partidas de datos . Cada palabra consiste de un nmero uniforme de biu (cada uno igual a 1 o O), tiene una orienta-cin nica, que es su nmero en la memoria. La CPU identifica u orienta una pa-labra dada, ya sea, para escribirla en su posicin, almacenar nuevos contenidos en ella o para leer de ella, extrayendo los contenidos de la palabra sin borrarlos. De es-ta manera, la CPU puede obtener las instrucciones y datos para el programa y en consecuencia almacenar los resultados en la memoria .

    Para ampliar la capacidad de la memoria principal a un costo razonable, los sis-temas de cmputo generalmente tienen una memoria secundaria (auxiliar), selec-cionada de tipos de archivo ms baratos y lentos que la principal . El software y los datos que no se espera que sean usados pronto se almacenan al!i . Las partidas con-tenidas en el archivo secundario son accesibles generalmente a la CPU slo siguien-do su transferencia a la memoria principal.

    'Del inglb ALU , arithmeticlogic unit. (N . del T . )

    Introduccin 25

    4. DISPOSITIVOS DE ENTRADA/SALIDA

    Un nmero de dispositivos de entrada / salida (110)* sirven a la necesidad de comu-nicacin de los sistemas de cmputo con el medio.

    Los dispositivos ms ampliamente usados incluyen a las lectoras de tarjetas y a los teclados conectados a las terminales de proyeccin o de impresin. La salida es casi siempre proyectada en una pantalla de tubo de rayos catdicos (CRT)** seme-jante a un tubo de televisin o impresa por una impresora de lfnea.

    Con frecuencia se incluyen tambin los dispositivos para telecomunicacin.

    SUGERENCIAS PARA LECTURAS MAS PROFUNDAS

    USOS DE COMPUTADORAS

    Slotnick, D. L., and Slotnick, J . K.: Computers, Their Structure, Use, and lnfluence, Prentice-Hall, Englewood Cliffs, N.J., 1979. Este extenso trabajo analiza muchos aspectos de la aplicacin de las computado-ras; incluye una introduccin a la organizacin de los sistemas de cmputo y programacin BASIC.

    Dorf, R. C.: Computer ami Man, Boyd and Fraser, San Francisco, 1974. En algunos aspectos complementa al libro de Slotnick, este trabajo incluye un an-lisis sobre las computadoras en las anes .

    Sanders, D. H.: Compute,.s in Society, 2nd ed., McGraw-Hill, New York, 1977. Se analizan los impactos positivos y negativoa de las computadoras.

    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 en el uso de las inteligencias anificiales.

    HISTORIA DE LAS COMPUTADORAS

    Harmon, M.: Stretching Man's Mind: A History of Data Processing, Mason/ Charter, New York, 1975. Para principiantes.

    Goldstine, H . H.: The Computer: From Pascal to von Neumann, Princeton Universi-ty Press, Princeton, N .J., 1974 El autor . un colaborador de von Neumann, enfatiza el desarrollo explosivo que si-gue a la Segunda Guerra Mundial.

    Eames, C., and Eames, R.: A Computer Perspective, Harvard University Press, Cam-bridge, Mass., 1974. Una publicacin ricamente iluatrada,

    Rosen, S., ed.: Programming Systems and Languages, McGraw-Hill, New York, 1967. Esta coleccin de anlculos semanales que apareci en el ao de 1957-1965 contiene un estudio histrico introductorio sobre el software y los lenguajes de programa-cin.

    Del ingl& 1/0. lnput/output. (N. del T .). " Dd ingl& CRT. cathode ray tube. (N . del T .)

  • o e: e ~o

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

    ......., E C> o l... C'a ~ ro "'C o. e: a.. ::l Q) u. "'C

  • -

    J., r

    '!

    PARA RESOLVER UN PROBLEMA con el uso de una computadora, un programador necesita disear un algoritmo, un procedimiento inequ!voco que es-pecifica un nmero 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 especficas, origina algoritmos ms claros y sencillos. Despus de que se ha diseado al algoritmo y las estructuras de datos usadas por ste, se puede crear un programa en el lenguaje de programacin 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 bsicos del manejo de datos son la asignacin 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, segn sean dirigidos por las estructu-ras de control.

    Los subalgoritmos subprogramas pueden ser llamados para realizar una subta-rea especfica en la tarea completa de solucin del problema. Por tanto, un algorit-mo y el programa que se realiza a partir de ste se pueden construir en varios mdu-los. La programacin modular hace posible disear sistemas complejos de una ma-nera ordenada, con un grado alto de confiabilidad y claridad.

    Para especificar algoritmos, se pueden emplear seudocdigos o diagramas de fabricacin. Cuando se usa el seudocdigo, el programador especifica los pasos del algoritmo usando bsicamente el lenguaje natural con estructuras de control sobre-puestas. En consecuencia, se introduce ms precisin en esta especificacin. Los diagramas de fabricacin son herramientas grficas 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 tcnica de refinar los pasos. As, el programador refina una idea inicial de la solucin del problema en trminos cada vez ms especficos mientras identifica los mdulos que realizarn subtareas particulares. Al mismo tiempo, la definicin de los datos se vuelve ms especifica. El ltimo refina-miento del algoritmo ser codificado para su ejecucin en la computadora.

    Las instrucciones bsicas de programacin introducidas aqu!, se pueden usar para expresar algoritmos. Estn tambin en varias formas, incorporadas en los len-guajes de programacin de alto nivel de uso general. Por tanto, esta parte del libro describe tambin las ~structuras bsicas de estos lenguajes.

  • ~"' ~ .

    ! 1 \

    \

    ~;- ._-, ~

    u~

    1 Algoritmos

    y su Expresin

    La etapa vital de Ja solucin de un problema con una computadora es el diseo del algoritmo y de la estructura fundamental de datos. Un algoritmo es un procedi-miento expresado precisamente para obtener Ja solucin del problema, Ja que se presenta de manera subsecuente a una computadora en el lenguaje de programa-cin 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 diseamos un algoritmo que una computadora slo 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 solucin de problemas si van a hacerse por algoritmos. Estas son la no limitacin, ausencia de ambigedad, definicin de la secuencia, definicin de entrada y de sa-lida, efectividad y definicin del alcance. Los diagramas de fabricacin se presen-tan como una herramienta para la expresin de los algoritmos. En los captulos si-guientes se introduce otra herramienta, con frecuencia ms til, para esta tarea:. el seudocdigo.

    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 diseado un algoritmo, se codifica en un lenguaje de programacin, 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 frmula para Ja solucin del problema.

    Un algoritmo se puede presentar en varios niveles de detalle. El hardware de una computadora slo puede obedecer las instrucciones si estn expresadas en el len-guaje de mquina de la computadora. El diseador del algoritmo puede encontrar

  • 32 Fundamentos de programacin

    dificultades al pensar en trminos de estas instrucciones, ya. que los detalles pueden oscurecer la esencia del prnc .. d.irnicnto . Sin embargo, los lenguajes de programa-cion dej 2. Anlisis

    Dado que el algoritmo se tiene que aplicar para .cualquier N > 2, N debe ser un parmetro . Por tanto, ser una de las entradas al programa, junto con los propios enteros.

    Algoritmo l. Entrada N . 2. Entra el primer entero; llmelo NUMl . 3. Entra,, segundo entero; llmelo MAYOR .(LARGE). 4 . Ajuste un contador de enteros~ que tenga que leer el interior; llmele CONTADOR

    (COUNT); conjunte el CONTADOR igual a 2. 5. Compare el NUMJ con el MAYOR; si el NUMl es ms grande que el MAYOR, enton

    ces el MAYOR es igual al NUMI. Si el CONTADOR es igual a N , aaque al MAYOR y

    1 f

    ~ ~

    ~')

    l.

    2.

    Algoritmos y su expresin 33

    detngase; incremente tambin el CONTADOR en l . introduzca el siguiente entero. y llmelo NUM l , entonces realice de nuevo este paso ( 5) . Notas Observe que no es la intencin del problema ahorrar nmeros en la memoria. Piense en la forma en que se llama a los nmeros y la razn para esto. Contine el algoritmo con unos cuantos enteros que usted escoja y convnzase por si mis-mo de su veracidad.

    B. PROPIEDADES DE LOS ALGORITMOS

    Un procedimiento que no tiene las propiedades enunciadas abajo no es un algorit-mo y generalmente no proporciona-el resultado deseado cuando un programa basa-do en l se presenta a una computadora.

    1. LIMITACION

    La ejecucin de un algoritmo programado se debe completar despus de que se ha-ya llevado a cabo una cantidad finita de operaciones. De otra manera , no podremos exigir que la ejecucin produzca una solucin.

    Es obvio que el proceso de solucin enunciado en el Ej . l-l tiene esta propiedad, ya que c-da paso se lleva a cabo una vez. En el Ej . 1-2. el Paso 5 ser repetido N-1 veces. Dado que N es finito, podemos concluir que la realizacin de este procedimiento ser completada des-pus de un nmero finito de pasos.

    Se debe observar lo siguiente:

    (a) El nmero actual de pasos depende de Ja minuciosidad (grado de detalle) de la presentacin de un algoritmo.

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

    Al final , el nmero de pasos es el nmero de instrucciones de mquinas realiza-das. Esto, de cualquier forma, depende tambin del modelo de la computadora usada.

    (b) El nmero de operaciones realizadas raramente es igual al nmero de pasos en la descripcin del algoritmo (o al nmero de instrucciones en el programa) . El nmero de pasos rea'.lizados en la actualidad durante la ejecucin de un programa depende de Ja entrada de datos y no siempre puede ser determinado de antemano.

    (c) Un algoritmo dirigido a terminar un programa en 100 aos es difcilmente til.

    La esencia del mtodo del algoritmo consiste en Ja repeticin del mismo paso o pasos, probablemente con algunas modificaciones, muchas veces durante la realiza

  • " L,

    1

    {

    ( l

    34 Fundamentos de programacin

    cin de un programa basado en un algoritmo dado. La longitud del programa es, por tanto , un indicador pobre del tiempo de ejecucin.

    En el Ej . 1-2 un paso simple , el Paso 5 , se realiza Nl veces.

    2. AUSENCIA DE AMBIGUEDAD

    La representacin de cada paso de un algoritmo debe tener una representacin ni-ca aunque una representacin para una computadora puede diferir para la de un humano. Es conveniente para los humanos tratar con algoritmos presentados en una notacin con detalles separados (por ejemplo , un seudocdigo o una carta de flujo) mientras que la computadora necesita que el algoritmo sea codificado en un programa.

    Esta condicin significa que cada vez que se presente para su ejecucin un algo-fitrno con los mismos datos de entrada, se obtendrn losmismos resultados.

    3. DEFINICION DE LA SECUENCIA

    Se debe especificar sin lugar a dudas Ja secuencia en Ja que se deben llevar a cabo los pasos del algoritmo. Un algoritmo debe tener una instruccin inicial nica y ca-da instruccin debe tener un sucesor nico para un dato de entrada dado.

    En las .especificaciones del algoritmo, incluyendo los programas, las instruc-ciones son llevadas a cabo de arriba hacia abajo (Ja sucesora implcita de una ins-truccin es una consecutiva fsicamente), a menos que las instrucciones por s mis-mas especifiquen otra cosa.

    En el Ej . 1-2, el Paso 5 puede ser realizado ms de una vez , dependiendo de N.

    4. DEFINICIONES DE ENTRADA Y SALIDA

    Las entradas son las partidas de datos presentadas al algoritmo. Un algoritmo tiene o no entradas o un nmero predeterminado de ellas. Las entradas deben ser del ti -po para el cual se ha diseado el algoritmo.

    En el Ej . 1-1, el algoritmo tiene tres entradas . En el Ej. 1-2 , el algoritmo se dise para N + 1 entradas.

    En ambos casos las entradas deben ser enteros.

    Las salidas son partidas de datos presentadas al mundo exterior corno el resulta -do de Ja ejecucin de un programa basado en el algoritmo . Un algoritmo debe pro ducir al menos una salida (de otra manera, qu uso tiene?)

    Los algoritmos de los Ejs. 1-1 y 1-2 tienen una salida cada uno.

    :! .~ ~ \

    ~

    Algoritmos y su expresin 35

    5. EFECTIVIDAD --

    Las instrucciones de un algoritmo pueden ordenar a la computadora que slo lleve a cabo tareas que sea capaz de hacer. Una computadora no puede llevar a cabo una instruccin si tiene informacin insuficiente o si el resultado de Ja ejecucin de Ja orden no est definido.

    Si el paso 1 del Ej . 12 fuera oinitido, el algoritmo podra no ser efect ivo po r falta de in -formacin suficiente , ya que en el Paso 5 el CONTADOR (COUNT) no podra ser compara-do a N .

    Si cualesquiera de las instrucciones de un algoritmo ordenara la divisin de un entero por cero , el resultado podra ser indefinido . i ~ ~ ... ! .

    .-: ;;

    6. DEFINICION DEL ALCANCE t):f: ;~ ..- '

    Un algoritmo se aplica a un problema o clase de. problemas especficos; el rango de Ja5 entradas se tiene que definir previamente; el rango determina la generalidad del algoritmo.

    El alcance del algoritmo en el ,Ej . 1-2, es ms grande que el del algoritmo del Ej . 1-1 ya que. el posterior es el caso especial . con N = 3, del formador.

    C. DIAGRAMAS DE FABRICACION

    Debido a los Cletalles requeridos de estos, los lenguajes de programacin no son una herramienta apropiada para el diseo del algoritmo inicial. El medio de notacin ms usado comnmente para los algoritmos es un diagrama de fabricacin .

    La ventaja ms significativa del diagrama de fabricacin es una presentacin clara del.flujo de control en el algoritmo , es decir , la secuencia en la que se var. a llevar a cabo las operaciones .

    Un diagrama de fabricacin es una representacin en dos dimensiones de un al-goritmo ; Jos smbolos de un diagrama e fabricacin definidos previamente se usan para indicar las diversas operaciones y el flujo del control.

    En la Fig. 1-1 se presenta un conjunto bsico de smbolos de diagrama de fabri-cacin establecidos. Seis de estos smbolos son contornos (tambin llamados cajas) de varias formas. Cuando se usan en un diagrama de fabricacin , contienen las pa-labras apropiadas, las que las hacen ms precisas ya que el diagrama de fabricacin se desarrolla para resolver un problema dado. El smbolo restante, la lnea de flujo , determina la secuencia entre las tareas representadas por los contornos.

    Los simbolos tienen Jos significados siguientes:

    proceso: una o ms tareas de cmputo que se van a realizar de manera secuencial. 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 .

  • 36 Fundamentos de programacin

    1 1 / / ( ) proceso entrada/ salida decisin terminal =1-0-c o u~

    nota conector llnea.s de flujo

    Fig. 1-I. Contornos del diagrama de fabricacin.

    decisin: son posibles dos trayectorias de ejecucin alternas. Durante la ejecucin se escoge la ruta a seguir, probando si se satisface o no la condicin especificada dentro del simbolo.

    terminal: aparece o bien al inicio de una cana de flujo (y contiene la palabra "Comienzo" -Start-}, o bien en su conclusin (y contiene la palabra "Detngase" Stop-) .

    nota: contiene observaciones que simplifican la comprensin del algoritmo o la descripcin del dato.

    conector: hace posible la separacin en panes del diagrama de fabricacin. Se colocan sim bolos de referencia cruzada idnticos en este contorno en donde la linea de flujo se in terrumpe y en donde contina.

    lneas de flujo: indican al siguiente contorno. En la Fig. 1 2 se presenta una carta de flujo para el algoritmo del Ej. 1-2 . Si se separa el diagrama de fabricacin en dos partes en el punto marcado con X, se

    podran usar las conexiones como se indica en la Fig. 13 .

    Verdadero

    Ajuste MAYOR= NUM!

    Termin? r -Saque el MAYOR

    Det~nga~

    Fig. 1-2.

    Comienzo

    ,....._..._ __ -; -{Entero N, NUMI, MAYOR, CONTADOR

    Entra NUMI, MAYOR

    Ajustl'CONTA>OR "' 2

    Jncreml"nt(' "'CONTADOR en l

    Los nmeros se leen de manera secuencial desde

    el dispositivo de entrada

    Entra NUM!

    i

    ~\

    Algoritmos y su expresin 37

    ?~ Falso >MAYOR . AjusteCONTADOR = Verdadero NUMI A J Fig. 1-3.

    Los diagramas de fabricacin permiten al lector seguir la lgica del algoritmo con mayor facilidad que la que tenda una descripcin lineal en ingls. Dado que la seleccin del nivel de detalle est a discrecin del diseador del algoritmo, los diagramas de fabricacin son apropiados para el mtodo de diseo de arriba hacia abajo (descrito en el Cap. 3), en el que se establece inicialmente la estrategia gene-ral del algoritmo y los refinamientos se introducen despus. Un mtodo alterno de la presentacin del algoritmo, el seudocdigo, se estudia tambin en el Cap. 3.

    SUGERENCIAS PARA LECTURAS MAS PROFUNDAS PARA LOS CAPS. 1-4

    Wirth, N.: Systematic Programming: An Introduction, Prentice-Hall, Englewood Cliffs, N.J., 1973. Una clara introduccin sobre el diseo de algoritmos simples y la estructura de programas esenciales. Siguiendo sus pginas tambin aprender las bases de la programacin en el lenguaje Pascal.

    Maly, K., and Hanson, A. R.: Fundamentals of the Computing Sciences, Prentice-Hall, Englewood Cliffs, N.J.; 1978. Un anlisis extenso sobre el diseo del algoritmo.

    Tremblay, J.-P., and Bunt, R. B.: An lntroduction to Computer Science: Algorithmic Approach, McGraw-Hill, New York, 1979. Solucin de problemas en una variedad de situaciones.

    Tonge, F. M., and Feldman, J.: Computing: an lntroduction to Procedures and Pro-cedure-Followers, McGraw-Hill, New York, 1975.

    Wirth, N.: Algorithms +Data Structures = Programs. Prentice-Hall, Englcwood Cliffs, N.J ., 1976. Un libro ms avanzado, puede ser leido como una secuencia de "Systematic Programming" del mismo autor.

    Dahl, 0.-J., Dijkstra, E. W., and Hoare, C. A. R.: Structured Programming, Aca-dcmic, New York, 1972. Un anlisis sofisticado, pero claramente presentado, sobre la estructura de progra mas y datos.

  • '

    2 Manejo ... d~:~Sat:~s en Programacin

    En ste y en los siguientes captulos se presentan los conceptos generales de los algo-ritmos en lenguajes de alto niveL Estos conceptos subrayan todos los lenguajes de programacin de uso general y forman la base para aprender cualesquiera de ellos. Al mismo tiempo, las formas de expresin basadas en esos conceptos se usan para el diseo de algoritmos, antes que la codificacin reaL En este capitulo se estudian tambin los componentes del programa usados para la manipulacin de datos.

    Las panidas de datos proporcionan informacin sobre los objetivos para los cuales el algoritmo (o programa) se refiere en trminos 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 ms simples. Por ejemplo, si los grupos de impuestos se acomodaran en una tabla ordenada manipulada por el programa de clculo de impuestos, los impuestos se podrian calcular muy fcilmente, 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 tambin. Se contina el estudio de las estructuras de datos en el Cap . 5 .

    ..... ~' ... . ., :..~~-':,.~E:';: ~ .... .....

    A. INSTRUCCIONES

  • l

    40 Fundamentos de programacin

    das por los traductores del software (generalmente) en una o ms instrucciones de lenguaje de mquina.

    --~....., ' ... eei'~ilm,-~-.ra. .~~~~f.es~k~~ .. ~~ . ~- _ "_aooq, ~~fil~

    _ -~-----~ . a~ """'~ i>~1m~~ ~: Estas instrucciones son de carcter descriptivo. Por lo general, sirven para localizar el espacio de la memoria para los datos utilizados por el programa.

    Otra distincin entre las instrucciones de los lenguajes de programacin depen-de de que influyan ' o no el flujo de control dentro de un programa. Las instruc-ciones se ejecutan en forma secuencial , en el orden en que hayan sido presentadas a la computadora, a menos que sea una transferencia de control. Algunas instruc-ciones ejecutables transfieren el control a otra instruccin que le sigue de inme-diato. Por lo general , la decisin de transferencia se basa en la satisfaccin de ciena condicin. Las instrucciones ejecutables y las no ejecutables que no transfieren el control ni influyen en la secuencia de ejecucin, en su lugar realizan tareas de ma-nipulacin de datos.

    Las instrucciones de manipulacin de datos se analizan en este capitulo; las ins-trucciones de transferencia de control en el siguiente.

    B. TIPOS DE DATOS SIMPLES

    Los algoritmos y los programas que surgen de ellos, operan sobre los datos. La accin de una instruccin ejecutable se refleja como un cambio de valor de una panida de da-tos . Los datos de entrada son transformados por el programa, despus de las etapas intermedias, en datos de salida. En el proceso de solucin de problemas, el diseo de la estructura de datos es tan imponante como el diseo del algoritmo y del programa que sobre ste se basa.

    Slo se consideran aqu los datos simples (sin estructura). Los datos estructura-dos se estudian en el Cap . 5, son conjuntos de panidas de datos simples con rela-ciones definidas entre ellos. Los arreglos, de datos estructurados con interrelaciones definidas implcitamente, se presentan en este capitulo .

    Las panidas de datos , asi como las instrucciones de programa , estn representa-das en la memoria de la computadora por uno o ms bits (generalmente) .

    .. ._,~~~"'."'.'.,,...,.. J .~-,,.-:~--.-~. -. . _OS-ell'llllll te ~ta' . . ~~5~ ~~' ;;~~~-~"" C# *'qf~- .. ~ Las operaciones que se pueden aplicar a una panida de datos dependen en su tipo. Los lenguajes de programacin de alto nivel por lo general proporcionan instrucciones de declaracin {declaraciones) que el

    ' programador u5a" para espeificar 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?: _,-Entero: un n6.mero indicad~: sin-p~rt~lidion'aria;~; \';f;.,:: \.:i~' ' .- ... Real: un nmero indicado con un entero y una parte fraccionaria .

    : Ambos tipos de datos, el entero y el real, representan datos numricos. Los.tipos de .. datos 'i'idm~ric~ adicion'al~s estn d.ispocible5 en a1g;in0s' len~aje; de progra-

    macin (por ejemplo, la doble precisin y los datos complejs en el FORTRAN).

    j / '\

    I \

    1

    L

    (

    Manejo de datos en programaczon 'iJ

    Lgicos (o Booleanos): un tipo de datos con slo dos valores: Cierto y Falso (representados como 1 y O). Bsicamente los datos de este tipo se usan para representar las condiciones que refuerzan las decisiones para el flujo de control , aunque se pueden utilizar para representar cualquier objetivo con valores binarios.

    Carcter: un carcter alfabtico o dgito numrico (llamados conjuntamente ca-racteres alfanumn'cos) o un smbolo especial (tal como $. !, etc.) . Por lo ge-neral. los caracteres se organizan en secuencias llamadas lneas (vase el Cap . 5) . La representacin de un nmero como una panida de datos numricos y como una lnea, difierenl Este tipo de datos aumenta la potencia de la com-putadora desde el clculo hasta el procesamiento simblico general : la mani-pulacin de cualquier texto.

    Los lenguajes de propsito ms general de la actualidad proporcionan esos cuatro tipos de datos. La disponibilidad de varios tipos de datos hace ms fcil el di-seo de los programas en un lenguaje dado. Cienos lenguajes permiten al progra-mador definir sus propios tipos de datos en respaldo de la aplicacin panicular.

    En .resumen, el tipo de dato indicador (Pointer) est disponible en algunos len-guajes de programacin de alto nivel. El indicador identifica la orientacin de las otras panidas de datos. Los indicadores se usan para crear estructuras de datos (vase el Cap . 5) .

    La implantacin de varios tipos de datos con el uso de las palabras de la memo-ria se estudia en el Cap. 5.

    C. CONSTANTES, VARIABLES Y ARREGLOS El valor de una panida de datos simple en un algoritmo dado puede permanecer constante o puede variar. Por tanto , estas panidas son subdivididas en constantes y variables. La clase de datos estructurados utilizada la mayoa de las veces es un arreglo.

    1. CONSTANTES Y VARIABLES

    ~-:I/:C.~4.,~~~ - .r,:, , :-=- ~'._'~ .... , ........ -.:t'f!"~'--"r,.,.,, '~"'!'l".;~~ :i;wlcii>~...scr. de,v,arios,tl}>9S>'-por.,lo.,.que. podem

  • / w-.

    42 Fundamentos de programacin

    Problema Sume dos enteros y presente el resultado .

    Algoritmo En la Fig. 2-1 se muestra un diagrama de fabricacin inicial.

    Inicio

    Entran 2 enteros

    Sume 2 enteros

    ~ Fig. 2-1.

    En este ejemplo, el nmero de enteros !'S una const~nte (2); los enteros son variables a s mis-mos.

    La referencia a un valor variable se puede hacer solamente por medio de la posi cin (o posiciones) en Ja memoria en la que se ha almacena~o ese valor. El valor de la variable es el contenido actualizado de esta posicin as! llamada.

    La habilidad para usar variables diferencia a las computadoras de las calcula-doras rudimentarias. Su empleo hace posible el posponer los valores actuales pre sentndolos hasta el punto apropiado durante la ejecucin del programa.

    El espacio de la memoria se asigna generalmente a las variables como resultado _de una instruccin que Jo confirme. De modo que , para hacer referencia a una va-riable, se debe utilizar la orientacin dt- su ubicacin . Cuando se usa un lenguaje de alto nivel , el programador no tiene que estar relacionado con la orientacin nu-mrica actual. Las posiciones son orientadas simblicamente. La onentacin sim blir:a significa que el programa se refiere a las posiciones por el nombre de la va 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 _co.nverciones de uri lenguaje de programacin dado. Consideremos que iori uns, cuenci. continua d ins de seis letras maysculas y dgitos, comenzarido '.c:Or; iiira letra. Los traductr~s de Jeng{ia je y ofros 'sistemas de software ~cia los~.~ri}b?es de las variables usadas en el programa con la ori~nta~in d_e la memorja nur:ii..ca_.

    . - . .. .. .... . _ ... :e~ . ~ . .-.J.~:, .: . ... ..; . -...... - -;.-;-- ~ ... ~;":;-~:'-:..-:

    EJEMPLO 2-2

    Supongamos que una instruccin afirmativa estableci el CONTADOR (COUNT) como una variable entera . Si la ubicacin con una orientacin 15555 fue asignada a esta variable, tene-mos la situacin presentada en la Fig. 22(a).

    ---

    l

    \

    Manejo de datos en programacin 43

    / ubicacin d

    COrNT-15555 .,....,,..._ 15555

    nomb~ 1 10 =+ valor de la variable ~

    CONTADOR (COUNT) ~ de la variable

    (a) (b)

    Fig. 2-2.

    La posicin con la orientacin 15555 contiene el valor de la variable llamada CONTA-DOR (COUNT). Este valor en el momento es 10 . Continuando la ejecucin de una instruc cin que agrega 1 al CONTADOR (COUNT), slo cambiarn los contenidos de la posicin , 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-de un dispositivo de entrada o asignarlo durante Ja ejecucin del programa. La cla-se de valor que puede adquirir una variable depende de su tipo .

    \ 2. ARREGLOS

    ,~;;es~~c;ri_1\t;.'iiio_ q_ ci.~e_p~ "i _ _rr n_ 1'ig_J~a;}a~ ia't~'i;Jf'i15-:ri"'.ti~_ ~~~~ ~~~~~;;r:~~~~- - -~-.. --~~ r~ .;1 --.. -. J!~~-l~V!lffieOte por n: "il~~~~&AlJt..'r Las partidas de datos individuales, los elementos de arreglo, son ordenados por

    sus suscritos (ndices); por esta razn en ocasiones se les llama variables suscntas. La cantidad de suscritos de un arreglo determina su tamao . Un elemento de un arreglo est indicado por el nombre del arreglo seguido por sus suscritos, que apare cen en el parntesis.

    Muy frecuentemente, se emplean los arreglos con una o dos dimensiones . Un arreglo de una dimensin corresponde a un vector; un arreglo bidimensional a una matriz.

    Cada elemento de un arreglo de un tipo dado tiene dos caractersticas; su posicin dentro del arreglo segn Jo determinan sus suscritos y su valor.

    EJEMPL02-3

    Tenemos un arreglo de enteros unidimensionales SCORF..S . SCORF..S es por tanto , el nombre del arreglo ; para hacer referencia al /-simo elemento de ste podemos usar un ndice : SCO-RES(I) . . , ,:'e<

    Este -arreglo. que consta de cineo elementos 17. -3 , 2. 4. -5. se muestra ei{f;, :Fig. 2-.!i~ ~e supone aqul que el suscrito del primer elemento es 1 (mayor que O). ' - . -- .

    Se puede ver claramente la analoga entre un arreglo y una tabla.

    .EJEMPLO 2-4

    Para representar las ventas de una compaa que consiste en tres regiones de ventas con cuatro distritos por regin, se puede emplear un arreglo de VENTAS (SALES) bidimen-sional.

  • 44 Fundamentos de programacin

    17

    -3

    SCORES

    4

    -5

    Fig. 2-S.

    En la Fig. 2-4 se muestra una representacin grfica del arreglo. El primer suscrito del arreglo corresponde al nmero del rengln (que identifica la regin), el segundo suscrito al nmero de la columna (que identifica al distrito).

    VENTAS 4

    .) <

    173.25 3

    VENTAS (S,2)

    Fig. 2-4.

    Es evidente que los suscritos debieran ser exclusivamente valores enteros, dado que indican las posiciones de los elementos del arreglo.

    En muchos lenguajes de programacin de computadoras, los arreglos deben ser declarados con el uso de una instruccin no ejecutable.

    D. DECLARACIONES ). ] ~--Usando esta informacin, los traductores y otros sistemas del software estn ca-

    / pacitados para localizar el espacio en Ja memoria para Jos datos, asociar Ja orienta-cin de las posiciones reservadas para las variables (o arreglos) con sus nombres, y seleccionar las operaciones aplicables a Jos datos.

    j Una vez que se ha declarado una variable en una instruccin, se le puede hacer f referencia subsecuentemente en el programa por su nombre.

    ,..... ,

    1 1

    ..

    ,.

    " ; "l.

    / [

    Manejo de datos en programacin 45

    En el caso de un dato simple, una declaracin tiene la siguiente forma general:

    Lista de variables del tipo de datos.

    Por lo que en el Ej. 2-1 ambas variables de entrada as como su suma son enteros, pudin doseles llamar:

    Entero (integer) NUMl , NUM2, SUM

    Por tanto, se les puede hacer referencia por estos nombres.

    En Jos lenguajes de programacin con posicin de memoria estti"ca, como el 1'.0RTRAN o el COBOL, el espacio de Ja memoria es asignado a los datos por el traductor del software. En los lenguajes con posicin de memoria automtica, co-mo el ALGOL o PL/ I, se puede asignar Ja memoria al dato o despreciarlo cuando no se necesite durante la ejecucin del programa.

    Si el archivo se asigna durante Ja traduccin, es decir, antes de Ja ejecucin del programa, se debe asignar el espaci requerido por los arreglos en sus declara-ciones.

    Por tanto, para declarar un arreglo sin las iiiilitaciones impuestas por la posicin de Ja memoria esttica, basta establecer su tipo y dimensiones, por ejemplo, com o lo siguiente:

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

    donde M y N son variables enteras, o si est implcito que los suscritos comiencen con 1, Entero (Integer) Ventas (Sales) (M,N)

    En un lenguaje con posicin de memoria esttica , el rango de los suscr itos se tiene que declarar en trminos constantes, por ejemplo, como VENTAS (Sales) (1 :3 , 1 :5) o VENTAS {Sales) (3, 5).

    En Ja descripcin de un algoritmo (mejor que en un programa) , no es general-mente necesario delimitar al suscrito en trminos constantes.

    E. ENTRADA Y SALIDA

    / Las operaciones de entrada o salida que transfieren un valor sencillo ,efn opera-L_, dones elementales en lenguajes de programacin de nivel superior. Los detalles son l realizados por el software de los sistemas. -\ En la entrada, el valor se presenta a Ja computadora por medio del dispositivo de

    ~ entrada (por ejemplo, en una tarjeta perforada o a travs del teclado de una termi-i nal); la salida, la presenta la computadora mediante el dispositivo de salida (por

    ( ejemplo, una impresora o una pantalla). ( El tipo de datos presentado generalmente se describe por una instruccin de

    declaracin. 1 1

  • 46 Fundamentos de programacin

    La forma general de la instruccin es

    Entrada (dispositivo) lista de variables Salida (dispmitivo) lista de variables

    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 implcitamente, no es necesario mencionarlo en estas instrucciones. En este caso podemos recordar que los datos de entrada vienen del archivo de entrada general , mientras que la sali da sucede en el archivo de salida general.

    Del dispositivo de entrada los datos son canalizados a las posiciones de la memo ria de la computadora .. Estas posiciones han sido asociadas con los nombres ~e las variables como un resultado de las declaraciones. En consecuencia, se pueden refe rir estos datos simblicamente por sus no~bres. Por supuesto, las constantes son de finidas en el propio programa y no se necesita la entrada.

    .Cuando se ejecuta una instruccin de salida, se canaliza al dispositivo de salida una copia de los contenidos de Ja posicin mencionada en la lista de variables.

    En el Ej . 2-1 necesitamos las instrucciones siguientes:

    Entrada NUMI, NUM2 Salida SUM

    Para llevar a cabo la entrada o salida, deseamos frecuentemente especificar la disposicin de los datos. Algunos lenguajes de programacin incluyen instrucciones de formato que sirven p;;.ra este propsito.

    F. ASIGNACION

    El valor de una variable se puede establecer leyndolo de un dispositivo de entrada

    /' e usando una instruccin de asignacin, lo que significa que se lleva a cabo una ma-

    nipulacin de datos.

    1. FORMA GENERAL DE LAS INSTRUCCIONES DE ASIGNACION Asignacin es la operacin de dar un valor a una variable como resultado de una instruccin de asignacin. En otras palabras, cuando se lleva a cabo la asignacin, se coloca al valor en la posicin de la memoria correspondiente a un nombre de va riable dado.

    La forma general de una instruccin de asignacin es nombre de Ja variable - expresin

    La flecha es el operador de asignacin (algunos lenguajes usan = o de-). Por ejemplo,

    X-Y+2

    en lugar

    r

    ;1

    ...

    L, A 'f

    i i

    11

    l

    l . ~ r .

    [t ..

    '::

    Manejo de datos en programacin 47

    El tipo de la expresin en el lado derecho corresponde al tipo de la variable en el lado izquierdo. El tipo de variables que aparecen en la expresin deben coincidir con el tipo de la expresin. Si las variables aparecen en el lado derecho de una asig nacin, deben tener valores asignados a ellas de antemano.

    2. EXPRESIONES

    Una expresin es una frmula para obtener un valor. Las expresiones consisten de operandos (constantes o variables) y operadores (smbolos que reflejan las reglas pa rala t ransformacin de los valores del operando). Las reglas de prioridad controlan la aplicacin de los operadores a los operandos para un tipo dado de expresin. Una expresin se evala de izquierda a derecha a menos que las reglas de prioridad or denen lo contrario.

    Se pueden distinguir los siguientes tipos de expresiones:

    (a) Expresiones aritmticas que contienen slo variables reales y enteras y constantes (en expresiones de modo-mixto). Si la implantacin de un len-guaje dado prolbe las expresiones de modo-mixt~, cada expresin debe consistir exclusivamente de enteros o variables reales y constantes.

    Estas expresiones se realizan de acuerdo con las reglas comunes de la aritmtica. El operador aritmtico Unario para los valores negativos ( - ) y los operadores aritmticos binarios para la rnma ( + ), la resta ( - ), la multiplicacin ( ) , la divisin ( / ) y la exponenciacin (to n ), as como los parntesis son permitidos generalmente. Por lo regular , se aplican las reglas ordinarias de prioridad.

    En el caso de expresiones enteras, una operacin de divisin de enteros se define ( + ). Esta operacin da por resuitado que la parte fraccionaria del cociente sea descartada.

    (b) Las expresiones lgicas tienen uno de los dos valores Cierto y Falso. Entre otros, los operadores lgicos aplican; lo esencial de stos son ei no, y, o , definidos por la tabla de la verdad en el Cap. 3-A-3.

    La aplicacin usuai de las expresiones lgicas, la cual se analiza ms profundamente en el Cap. 3-A, es para expresar una condicin en la que el flujo de control en un programa va a ser predecido.

    (c) La lnea de manejo de las expresiones acta en caracteres valuados en constantes y variables.

    Los operadores para las lneas de manejo incluyen el enlace de dos lineas Uuntndolas) o la seleccin y posible reemplazo de una sublnea. Estas operaciones se analizan con ms detalle en el Cap. 5-J.

    3. EJECUCION DE UNA INSTRUCCION DE ASIGNACION

    Una instruccin de asignacin produce la siguiente secuencia de eventos:

  • 48 Fundamentos de programacin

    (a)

    (b)

    La expresin se evala conforme a las reglas apropiadas de prioridad y un valor simple se obtiene, de un tipo correspondiente al tipo de la expresin. El valor se coloca en la posicin correspondiente al nombre de la variable en el lado izquierdo de la instruccin de asignacin.

    La asignacin, en el Ej. 2 l

    SUM -- NUMI + NUM2 completa la suma.

    Las constantes proporcionan un caso especial de expresiones. Para ajustar el va lor de una variable V AR a O podemos realizar VAR--0

    Cuando se hace referencia a una posicin (por ejemplo, cuando se leen sus con tenidos), el valor contenido en ella no cambia. La operacin de lectura es no destructiva.

    Cuando se asigna un valor nuevo a una posicin (por ejemplo, cuando se escribe dentro) , sus contenidos anteriores son borrados automticamente. La operacin de escntura es destructiva.

    Con respecto a la instruccin de asignacin, sta significa que el valor original de la variable cuyo nombre aparece del lado izquierdo se reemplaza, mientras que los valores de las variables referidas en el lado derecho permanecen sin cambio.

    Observe cuidadosamente lo siguiente:

    (a) Cuando una instruccin de la forma VAR1--VAR2

    (b)

    es ejecutada , el valor de VAR2 se copia en la posicin correspondiente a VARl. El valor de VAR2 no cambia! Se descarta el valor anterior de VARl . Si los valores de las dos variables, VARl y VAR2, tienen que intercam biarse, se necesita el uso de una posicin intermedia . INTERM--VARI VARI VAR2

    --VAR2 -TNTERM

    G. COMENTARIOS

    Todos los lenguajes de programacin de computadoras ofrecen la posibilidad de introducir comentan'os que expliquen los datos y la lgica de los programas junto con las instrucciones.

    Aunque los comentarios se enlistanjunto con las instrucciones del programa, no influyen la ejecucin de los programas.

    Los comentarios generalmente se identifican por el primer carcter en la lnea . Supondremos que cualquier lnea que comienza con un asterisco() es un comenta rio. En nuestra descripcin de algoritmos, estaremos tambin preparados para colo

    ! 1 ' ~ . ,,.

    >,

    Mane1"o de datos en programacin 49

    car un comentario en _una lnea que contenga una instruccin; el comentario , rodeado por asteriscos, seguir a la instruccin. Es imperativo el uso responsable de los comentarios en cada programa.

    \{ H. REPASO : :. Se han definido los siguientes tipos de instrucciones para los lenguajes de alto nivel :

    (1) (2) (3)

    e~trad~~ salida } as1gnac1on declaracin

    instrucciones ejecutables instruccin no ejecutable

    Estas instrucciones no afectan el flujo de control dentro del programa, es decir , la secuencia en que son ejecutadas las instrucciones del programa. Las instrucciones de declaracin describen las panidas de datos mientras que las instrucciones de entrada y asignacin les asignan valores a ellas; las instrucciones de salida hacen que se conozcan esos valores en el mundo exterior.

    Los comentarios se pueden insertar en cualquier parte del programa sin afectar su ejecucin.

    Si estas instrucciones fueran los nicos componentes de los lenguajes de progra macin, cada instruccin en un programa slo podra ser ejecutada una vez. Dado que el mtodo algortmico est construido alrededor de la ejecucin repetitiva de instrucciones, se necesitan instrucciones adicionales para permitir la repeticin se lectiva y la ejecucin alterna . Las instrucciones que afectan el flujo de control se presentan en el siguiente captulo.

    Cada lenguaje de programacin contiene tambin a los delimitadores del programa que indican el final , y, en ocasiones, las instrucciones iniciales .

    Como un resultado del estudio anterior, llegamos al final del diagrama de fabricacin del Ej. 2 l , lo que se presenta en la Fig. 2-5.

    Inicio

    Entrada NUMI , NUM2

    SUM-NUMI + NUM2

    Alto

    Fig. 2-5 .

  • u ,r -~ -. ,

    "

    3 Estructuras de Control

    en el Diseo de Programas

    En este captulo se presentan la~ estructras _bsic~ ne2esarias para organizar el flu-jo de control en un algoritmo o en ~n pro&rama'. Tres 'de stas son: la secuencia (inicio-fin), la decisin (si-entonces-otro) y la trayectoria .(mientras-hace) consti-tuyen lo fundamental de la organizaci~ necesaria para respalda; 'im 'proces .siste-mtico de programacin, a menudo llamado programadn- estructurada. Las estructuras de control adicional tales como la trayectoria de repita-hasta, la trayec-toria clasificada y la de eleccin mltiple (case) se pueden emplear para simplificar este proceso. Una trayectoria se puede abandonar prematuramente on la ejecu-cin de una instruccin de salida.

    Mientras estas estructuras no estn disponibles directamente en los lenguajes de programacin en cada propsito general ; es posible construirlas usando las instruc-ciones de un lenguaje dado . El programador encontrar que pensando en trminos de estas construcciones producir programas organizados claramente que son de manera relativa fciles de escribir, leer y modificar.

    En ciertas situaciones de programacin no frecuentes , es conveniente, de cual-quier forma , emplear una transferencia incondicional de control (goto) .

    Se introducen dos herramientas importantes para el diseo de programas. El seudocdigo, utilizado frecuentemente de preferencia a las cartas de flujo, sirve pa-ra llevar el algoritmo listo para codificar en un proceso de diseo de programa de arriba a abajo. llamado refinamiento por etapas. Se emplean las tablas de decisin para la consideracin sistemtica 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 programacin bsica, la decisin y la trayectoria, forman el flujo de control en un programa que depende de la existencia de una condicin especificada . Para especificar tales condiciones, se usan las expresiones lgicas. En los casos ms sencillos, stas son relaciones. -

  • 52 Fundamentos de programacin

    1. QUE ES UNA CONDICION? Una condicin es una afirmacin de un valor de una variable o de una dependencia

    entre los valores de dos-o ms variables. Los valores de una condicin son probados y pueden ser Cierto y Falso. Por tan

    to, esto es ispecificado por una ~xpresin lgica .

    EJEMPLO 3;1 Podemos desear especificar y probar las condiciones concernientes a los valores de las va

    riables; por ejemplo:

    (a) (b) (c)

    La variable entera I igual a O. La variable entera I es menor que el doble del valor de la variable entera K, La variable real X no es menor que la variable real Y , y la variable lgica L tiene el va

    lor verdadero.

    Las condiciones se usan para proporcionar la posibilidad de trayectorias de eje-cucin alternas en el programa (en una instruccin de decisin) o para asegurar la realizacin repetida de un grupo de instrucciones en una trayectoria.

    Una condicin' simple es una relacin; una condicin compuesta es una expre sin lgica geneial que puede contener variables y relaciones lgicas, con operandos

    lgicos que las conecten. Puesto que una condicin es expresada por una relacin lgica, su valor puede ser almacenado en una variable lgica como el resultado de una instruccin de asig-

    nacin de una .forma . varia ble lgica - expresin lgica

    2. RELACIONES

    Una relar:in es una expresin lgica que consiste de dos expresiones aritmticas co nectadas por -un operador relacional, por ejemplo , uno de los siguientes

    < ..,;;-* ;;., > La forma general de una relacin es por tanto

    ., . . . operador expres1on antmeuca expresin aritmtica

    . relacional

    Las relaciones sirven para expresar las condiciones simples.

    EJEMPLO 3-2 Las afirmaciones establecidas en el Ej. 3 J se pueden especificar con el uso de las relaciones como sigue:

    (a) l = o Observe que no es una asignacin!

    (b) I< 2 K

    ---

    Estructuras de control en el diseo de programas 53

    ( c) Esta afirmacin no se puede especificar con una condicin simple; se requiere una condicin compuesta (vase ms adelante) .

    El valor de la relacin es Verdadero si Ja condicin expresada por sta existe, de lo contrario el valor es Falso. Observe que el valor no se asigna a cualquier posicin; tan slo se prueba. Observe tambin que este valor es de tipo lgico.

    Para probar en orden Ja veracidad de una relacin, se evalan sus lados derecho e izquierdo, y se contesta la pregunta : "el operador relacional expresa Ja verdad?" Si lo hace, la prueba da el valor Verdadero; si no, Falso.

    EJEMPLO 3-3

    Si en el tiempo la relacin

    AB+C:>D-E

    es evaluada, las variables. suponemos son del tipo entero , tienen Jos valores siguientes:

    A = l B = 2 C = 3 D = 10 E = 5,

    entonces cuando se prueba la relacin , tenemos

    A B + C = 5; D E = 5

    y la relacin tiene el valor Verdadero.

    3. CONDICIONES COIMPUESTAS

    Una condicin compuesta se expresa con el uso de cualquier expresin lgica . Una expresin lgica puede contener, en el orden de prioridad:

    (a)

    (b)

    (c)

    Operadores aritmticos (operador de exponenciacin , . / + -

    representado en ocasiones como f )

    Estos slo pueden unir a los operandos numricos . Operadores relacionales

  • 54 Fundamentos de programacin

    TABLA !1-1. Tabla de la verdad para los operadores bsicos, en donde P y Qson variables lgicas (o relaciones) .

    VALORES DE LAS VARIABLES RESULTADOS DE LA OPERAClON

    p Q P no p y Q PoQ

    Falso Falso Verdadero Falso Falso Falso V~rdadero Verdadero Falso Verdadero Verdadero Falso Falso Falso Verdadero Verdadero Verdadero Falso Verdadero Verdadero

    Los operadores lgicos operan exclusivamente en entidades de valor lgico. Estas pueden ser relaciones, variables o constantes lgicas (Verdadero y Falso).

    Los niveles de prioridad de las operaciones usadas en las expresiones lgicas son incluidos en la Fig. 3-1.

    prioridad ms alta 1

    operadores

    . / +

    PARTE y TOTAL~ GRANO - PART E

    EJEMPLO 3-6

    La Fig. 3-3 ilustra el orden de evaluacin de una condicin compuesta , donde AZUL y ANCHO son variables lgicas y TRAYECTORIA y LONGITUD son variables reales:

    AZUL y no ANCHO o AZUL y TRAYECTORIA

    \ > LONGITUD - 5.3

    Fig. ll-3.

    Notas

    l. Dado que una relacin evala un valor lgico, se puede unir a cualquier otro operando l-gico por un operador lgico (como en el paso 5 ).

    2. Los y y no adyacentes (as! como o y no) no violan la sintaxis de las expresiones lgicas; los operadores y y no no pueden estar prximos de manera legtima en una expresin lgica.

  • 56 Fundamentos de programacin

    ; B. DECISION

    Cuando el programador desea especificar dos cursos de accin alternos en un algo ritmo (o un programa), la eleccin comienza suponiendo la existencia de ciertas condiciones, se usa la condicin construida. Para seleccionar en ordeii entre varias alternativas, las decisiones se generan una dentro de otra.

    Una herramienta grfica, llamada una tabla de decisin, es til en el diseo de programas cuando se tiene que considerar un conjunto complejo de condiciones y acciones.

    1. CONSTRUCCION DE UNA DECISION

    La instruccin de decisin (ramificacin) es el mecanismo para la especificacin de dos instrucciones alternas (o grupos de instrucciones). una de las cuales se escoger para la ejecucin como resultado de la instruccin de decisin dada. Esto propor ciona la posibilidad de expresar lo siguiente: "Si una condicin dada existe, se debe llevar a cabo una accin alterna; de lo contrario se debe realizar la otra alternativa."

    Las condiciones se especifican usando expresiones lgicas. La forma general de la instruccin de decisin es

    si C entonces S1, adems S2

    donde S1 y S2 son instrucciones (o grupos de instrucciones) y Ces una condicin. La instruccin de decisin se ejecuta como sigue:

    (a) La condicin C est probada y se obtiene el valor Verdadero o Falso. (b) Si el valor es Verdadero, entonces S1se ejecuta en seguida, adems (si el

    valor es Falso) S2 se ejecuta de inmediato. En consecuencia, la siguiente instruccin S2 se ejecuta.

    En la Fig. 3-4 se muestra la carta de flujo de la construccin si-entonces-adems.

    Verdadero Faho

    rama entonces ~

    1 ,_ - - - - - - - _:- :_ - - - - - - _J

    Fig. !l-4. Construccin si-entonces-adems

    rama adems

    ..

    Estructuras de control en el disee de programas 57

    Para incrementar la amenidad de estilo del programa, es una buena prctica sangrar esta instruccin como se muestra:

    si e entonces

    S1

    adems

    S2

    EJEMPL0.!1-7

    La solucin al problema siguiente se desarrollar gradualmente a lo largo de este capitulo. Problema . "

    N enteros van a ser leidos. Todos los enteros positivos (incluyendo a los O) y todos los enteros negativos se contarn separadamente.

    U so de la construccin de la decisin Para procesar en orden un entero dado, la siguiente instruccin, expresada inicialmente en ingls, . se incorporar en el algoritmo:

    si el entero es mayor o igual a O t;ntonces aumente el contador de los enteros positivos en l adems incremente el contador de los enteros negativos en

    Como analizaremos despus en este

  • 58 Fundamentos de programacin

    Para evitar ambigedad, esta construccin se representa como

    si e entonces s

    adems

    donde el adems es la rama vaca.

    2. DECISIONES SANGRADAS

    Para implantar en orden una decisin mltiple (una seleccin entre varias alterna tivas), se usa la estructura sangrada si-entonces-adems. Esta se construye colocan do iterativamentr. otra instruccin de decisin como 5 1 o S2

    Para el sangrado de dos niveles en ~bas ramas obtenemos. si C 1 entonces

    si C2 enton~ S1

    adems S2

    adems si C3 entonces

    S3 adems

    s.

    El diagrama de fabricacin de esta estructura particular se muestra en la Fig. 36.

    Verdadero Fallo

    Fig. 11-6.

    La ambig~ad aurgr cuando R omite un adema en una secuencia de dcci1i6n sangrada (v~asc la ~i6n siguiente). En aJgunog lenguajes de programacin la rama adem es optativa y el adems siempre~ aplica a I01 1i mb cc~anOI sin 1u propio adem.1.

    ,r

    Estructuras de control en el diseo de programas 59

    Es m.s f.cil comprender el algoritmo (o programa) si no ocurre el sangrado en la rama adems de la construccin. Se pueden expresar las condiciones para comple-tar esto. Si se mantiene tal disciplina, una construccin si-entonces-adems tiene la siguiente forma general:

    si C 1 entonces

    S1

    adems si e! entonces

    S2

    adems.

    si c. entonces

    s.

    adems Sn +I

    El diagrama de fabricacin de esta constrnccin se presenta en la Fig. 3-7.

    Fig. 11-7. Construcciones sangradas si-entonces-adems

  • 60 Fundamentos de programacin

    3. TABLAS DE DECISION*

    Cuando existe un nmero de condic