Sei sulla pagina 1di 191

ALGORITMOS y PROGRAMACIN 75.

02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

INTRODUCCIN - DEFINICIONES
DATO, PROCESO E INFORMACIN
Dato e informacin son dos trminos que suelen confundirse. Se consideran datos a toda entrada de informacin a una computadora. Estos datos pueden ser administrativos, cientficos, comerciales, etc. son elementos primitivos, de los cuales a travs del procesamiento se obtiene la informacin. La computadora se utiliza para procesar en forma automtica y a gran velocidad esos datos. Como resultado del procesamiento de esos datos se obtiene la informacin deseada, la cual ser til en la toma de decisiones. DATO SISTEMA Un sistema es un conjunto de componentes relacionados que interactan para realizar una tarea. Un sistema de informtica est compuesto por el Hardware (CPU, dispositivos perifricos) y el Software (sistema operativo y los programas). El software de un sistema de informacin est formado por los datos, los programas de ingreso, actualizacin e informe de resultados y los procedimientos manuales y por mquina. ESTRUCTURA DE UNA COMPUTADORA Una PC es una computadora personal, originalmente diseada para servir a un slo usuario. Sale al mercado en 1981 y va evolucionando en capacidad y velocidad, adems su costo se va reduciendo. Existen diferentes configuraciones para adecuarse a la mltiples necesidades de los usuarios. La informtica es la ciencia que estudia el tratamiento, elaboracin , transmisin y utilizacin de la informacin. Es una ciencia porque constituye un conjunto de conocimientos de validez universal y porque utiliza el mtodo cientfico para el logro de sus objetivos. Se denomina HARDWARE (ferretera) a todos los componentes electrnicos y mecnicos, es decir fsicos de una computadora. Se denomina SOFTWARE al conjunto de programas o procedimientos que determinan las acciones de la mquina, es todo lo concerniente a la programacin. Las computadoras estn estructuradas segn un modelo bsico de funcionamiento que describe la interaccin que se realiza entre los elementos que la componen. Este modelo es: PROCESO INFORMACIN

Pgina 1 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

MONITOR MOUSE SCANNER CPU TECLADO IMPRESORA MDEM

UNIDADES Las unidades son las partes fsicas que componen nuestro ordenador, y se clasifican en unidades de entradasalida (E/S) denominadas perifricos, y la unidad de proceso (UCP o CPU). Adems de las unidades encontramos los soportes, que son elementos externos al ordenador, no imprescindibles para su funcionamiento, pero necesarios para el almacenamiento de la informacin. Unidades E/S Las unidades de entradasalida son aquellos elementos del hardware que fueron diseados para el ingreso y egreso de los datos. Existen unidades cuya tarea especfica es el ingreso de datos, otras que solo sirven para el egreso de la informacin, y hay un tercer grupo que puede cumplir con ambas funciones. Teclado Mouse o Ratn, TrackBall, Cat Scanner Lectora de barras Lpiz ptico Lectora de CD-ROM (DVD) Micrfono Monitor Sistema de vdeo Unidades de EntradaSalida Salida Impresora Plotter Parlante Placa de audio Sistema de audio Parlantes E/S Modem Disqueteras Grabadora/Reproductora de CD Integer Pantallas tctiles Placa de vdeo

Entrada

Pgina 2 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

Soportes de la informacin Los soportes de la informacin son medios fsicos de almacenamiento de informacin. Ellos pueden ser clasificados como: Papel: es el soporte ms antiguo de informacin que an sigue en uso. Listados Magnticos: son aquellos medios que estn basados en las propiedades magnticas para el registro de la informacin. La mayora de los mismos son usados como elemento de almacenamiento masivo. Cintas de carrete abierto de 1/2" de ancho. Cintas de vdeo (casete denominado super 8) Disquetes Cintas en tarjetas plsticas

Medios pticos: estn basados en la capacidad de poder o no reflejar la luz emitida por un determinado elemento (emisor) CD-ROM. DVD (Digital Vdeo Disk o Digital Versatil Disk El Disco Rgido es difcil de catalogar ya que es un sistema en s mismo, y posee una unidad de entrada/salida que son las cabezas lectoras-grabadoras y un soporte que son los discos propiamente dicho. Alguno de ellos vienen con una pequea pero completa unidad de proceso. LA UNIDAD CENTRAL DE PROCESO Y EL PROCESADOR La unidad central de proceso UCP es el verdadero cerebro de la computadora; su misin consiste en coordinar y controlar o realizar todas Las operaciones del sistema. Se compone de elementos cuya naturaleza es exclusivamente electrnica (circuitos). Sus partes principales son Las siguientes:

El Procesador (P). Que a su vez se compone de: La unidad de control (UC). La unidad aritmticolgica (UAL).

La Memoria Central (MC). La unidad central de proceso tambin incorpora un cierto nmero de registros rpidos (pequeas unidades de memoria) de propsito especial, que son utilizados internamente por la misma. Una aproximacin a diseo interno de un microprocesador es el siguiente

Pgina 3 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

Figura 1 Como vemos en el esquema 1, la unidad de control y la unidad aritmticolgica constituyen lo que se ha venido a denominar el procesador central del sistema; este elemento es parte de la unidad central de proceso encargada del control y ejecucin de las operaciones del sistema. Estos elementos en un ordenador personal se encuentran integrados en un nico chip llamado microprocesador. Las funciones principales de la UCP de un ordenador son:
Ejecutar las instrucciones de los programas almacenados en la memoria del sistema.

Controlar la transferencia entre la UCP y la memoria o las unidades de E/S Responder a las peticiones de servicio procedente de los perifricos.

Todo programa tiene como objetivo realizar diferentes funciones o aplicaciones, solo limitadas por la capacidad e imaginacin del programador. Para que un programa sea ejecutado el mismo se debe hallar en determinadas posiciones de memoria y escrito en un lenguaje que la UCP pueda entender. La UCP lo nico que comprende es lenguaje binario.

Pgina 4 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

La UCP lee en forma ordenada la lista de instrucciones, luego las interpreta, y posteriormente controla su ejecucin de cada una de ellas. Las ejecuciones se realizan en forma consecutiva una tras otra. Para ejecutar cada instruccin la UCP realiza la siguiente serie de pasos:
Lee de la memoria la instruccin que hay que ejecutar y la guarda en un registro

interior de la UCP. Identifica la instruccin que acaba de leer Comprueba si la instruccin necesita utilizar nuevos de memoria, si fuera as, determina donde debe ir a buscarlos. Busca los datos en la memoria y los trae en UCP. Ejecuta la instruccin propiamente dicha. El resultado de la misma puede ser que se almacene o invoque la necesidad de tener que comunicarse con la memoria o con otro elemento externo a la propia UCP. Vuelve al primer paso para empezar una nueva instruccin. La anterior es una lista simplificada de los pasos que ejecuta el microprocesador.

La ejecucin de cada instruccin implica el movimiento de datos, como estos pasos deben ser se deben realizar en forma secuencial y ordenada, para lo cual la UCP siguen las seales dadas por un reloj. El reloj es un elemento simple pero de gran importancia como se ver luego. Para una mejor compresin del funcionamiento de la UCP, la misma se puede dividir en dos unidades la unidad de control y la unidad aritmtico-lgica. . Unidad de control (UC) La unidad de control (UC) es el centro nervioso de la computadora; desde ella se controla y gobiernan todas las operaciones (bsqueda, decodificacin, y ejecucin de la instruccin). Para realizar su funcin, consta de los siguientes elementos: Registro de contador de programas (CP) Registro de Instrucciones (RI) Decodificador (D) Reloj (R) Generador de Seales o Secuenciador (S)

Registro de contador de programas (CP). Tambin denominado registro de control de Secuencia (RCS), contiene permanentemente la direccin de memoria de la prxima instruccin a ejecutar. Si la instruccin que se est ejecutando en un instante determinado es de salto o de ruptura de secuencia, el RCS tomar la direccin de la instruccin que se tenga que ejecutar a continuacin; esta direccin la extraer de la propia instruccin en curso. Como ya se dijo el primer paso para la ejecucin de una instruccin, consiste en ir a buscarla en memoria, el CP indica cual es la direccin de memoria donde se halla esa instruccin. Una vez obtenida y antes de continuar con los siguientes pasos una seal de control incrementa el CP en una unidad, por lo cual los programas deben estar escritos (cargados) en posiciones consecutivas de memoria. El CP pasa la direccin al Registro de Direcciones

Pgina 5 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

Registro de Direcciones (RD). Contiene la direccin de memoria donde se encuentra la prxima instruccin y esta comunicado con el Bus de Direcciones. El tamao de este registro determina el tamao de la memoria que puede direccionar.( Si es de 32 bits se puede direccionar 232=4.294.967296 (4 GB posiciones de memoria). Con la direccin de memoria, se transfiere a travs el Bus de Datos desde la memoria central al Registro de Datos en la UC la instruccin correspondiente. Esta transferencia se realiza mediante seales de control. Una vez que la instruccin se encuentra en la UCP, el cdigo de la instruccin pasa al registro de instrucciones. Registro de Instrucciones (RI). Contiene la instruccin que se est ejecutando en cada momento. Esta instruccin llevar consigo el cdigo de operacin (CO), accin de que se trata, y en su caso los operandos o las direcciones de memoria de los mismos. Pasa el CO al decodificador. Decodificador (D). Se encarga de extraer y analizar el cdigo de operacin de la instruccin en curso (que est en el RI) y dar las seales necesarias al resto de los elementos para su ejecucin por medio del Generador de Seales. Generador de Seales(GS). En este dispositivo se generan rdenes muy elementales (micrordenes) que, sincronizadas por los impulsos del reloj, hacen que se vaya ejecutando poco a poco la instruccin que est cargada en el RI. Reloj (R). Proporcionar una sucesin de impulsos elctricos a intervalos constantes (frecuencia constante), que marcan los instantes en que han de comenzar los distintos pasos de que consta cada instruccin.

Figura 2 Unidad aritmticolgica (UAL)

Pgina 6 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

Esta unidad es la encargada de realizar las operaciones elementales de tipo aritmtico (generalmente sumas o restas) y de tipo lgico (generalmente comparaciones). Para realizar su funcin, consta de los siguientes elementos:

Banco de registros (BR). Circuitos operadores (CIROP). Registro de resultado (RR). Sealizadores de estado (SE).

Banco de registros (BR). Est constituido por 8, 16 32 registros de tipo general que sirven para situar dates antes de cada operacin, para almacenar datos intermedios en las operaciones y para operaciones internas del procesador. Circuitos operadores (CIROP). Compuesto de uno o varios circuitos electrnicos que realizan operaciones elementales aritmticas y lgicas (sumador, complementador, desplazador, etc). Registro de resultado (RR). Se trata de un registro especial, en el que se depositan los resultados que producen los circuitos operadores. Sealizadores de estado (SE). Registro con un conjunto de biestables en los que se deja constancia de algunas condiciones que se dieron en la ltima operacin realizada.

LA MEMORIA CENTRAL (MC) Es la parte de la unidad central de proceso de una computadora donde estn almacenadas las instrucciones y los datos necesarios para que un determinado proceso pueda ser realizado. La memoria central est constituida por una multitud de celdas o posiciones de memoria, numeradas de forma consecutiva, capaces de retener, mientras la computadora est conectada, la informacin necesaria.

Pgina 7 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

Por otra parte, es una memoria de acceso directo, es decir, puede accederse a una de sus celdas conociendo su posicin. Para esta memoria el tiempo de acceso es ms corto que para Las memorias auxiliares, por tanto, los datos que manejan los procesos deben residir en ella en el momento de su ejecucin. Es importante no confundir los trminos celda o posicin de memoria con el de palabra de computadora, ya que esta ltima es el conjunto de posiciones de memoria que pueden introducirse o extraerse de la memoria de una solo vez (simultneamente). La memoria central tiene asociados dos registros para la realizacin de operaciones de lectura o escritura, y un dispositivo encargado de seleccionar una celda de memoria en coda operacin de acceso sobre la misma:

Registro de direccin de memoria (RDM)). Registro de intercambio de memoria (RIM). Selector de memoria (SM).

Registro de direccin de memoria (RDM). Contiene la direccin de memoria donde se encuentran o va a ser almacenada la informacin (instruccin o dato), tanto si se trata de una lectura como de una escritura de o en memoria central, respectivamente. Registro de intercambio de memoria (RIM). Si se trata de una operacin de lectura, el RIM es quien recibe el dato de la memoria sealado por el RDM, para su posterior envo a uno de Los registros de la UAL. Si se trata de una operacin de escritura, la informacin a grabar tiene que ester en el RIM, para que desde l se transfiera a la posicin de memoria indicada por el RDM. Selector de memoria (SM). Es el dispositivo que, tras una orden de lectura o escritura, conecta la celda de memoria cuya direccin figure en el RDM con el RIM, posibilitando la transferencia de Los dates en un sentido o en otro. La memoria central suele ser direccionable por octeto o byte; por tanto, una celda o posicin de memoria contiene 8 bits. Una de Las caractersticas fundamentales de una computadora es su capacidad de memoria interna (memoria central), la cual se mide en un mltiplo del byte denominado Kilobyte, Kbyte, Kb o simplemente K, y que equivale a 1 024 bytes (1 024 = 2'). Otro mltiplo utilizado ampliamente en Los ltimos tiempos es el Megabyte o simplemente Mega, que equivale a 1 024 * 1 024 Bytes; es decir, a 1 048 576 bytes. Bus de Direcciones Registro de direccin de memoria Bus de Control Selector Memoria Central Bus de Datos Registro de intercambio de memoria

Pgina 8 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

0001 0010 0110 1011 TIPOS DE INSTRUCCIONES Nos referiremos en este apartado a instrucciones del lenguaje mquina. Son aquellas que puede ejecutar directamente el hardware de la computadora. Las instrucciones mquina se pueden clasificar por la funcin que desempean en: Instrucciones Instrucciones Instrucciones Instrucciones Etctera. de transferencia de datos. de ruptura de secuencia. aritmticas y lgicas. declarativas.

O por su contenido, teniendo en cuenta que todas ellas tienen en primer lugar lo que se llama cdigo de operacin (CO), que indica qu operacin se debe realizar por el procesador, y aquellas en Las que su misin sea hacer alguna operacin con determinados dates; llevarn, adems, implcita o explcitamente dichos dates, que denominaremos operandos. Instrucciones de tres operandos Tambin se denominan instruccin es de tres direcciones. En primer lugar constan de un cdigo de operacin al que siguen tres operandos, de Los cuales, Los dos primeros son Los operandos y el tercero es la direccin donde se depositar el resultado. Este formato de instruccin es el ms cmodo de trabajar, pero es el que precise mayor nmero de bits. Esquema siguiente. Cdigo de operacin Instrucciones de dos operandos Constan de un cdigo de operacin, seguido de dos operandos, de Los cuales uno de ellos acta adems como receptor del resultado. Tambin se denominan instrucciones de dos direcciones. En el siguiente esquema se ve la Instruccin de dos operandos. Cdigo de operacin Instrucciones de un operando Operando 1 Operando2 Operando1 Operando2 Operando3

Pgina 9 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

Tambin denominadas instrucciones de una direccin. Son Las que se utilizan generalmente en mquinas cuya arquitectura funciona con filosofa de acumulador. El acumulador es un registro especial, en el que se encuentra uno de Los operandos para este tipo de instrucciones y donde adems se guarda el resultado. En la instruccin se encuentra el cdigo de operacin seguido del segundo operando Cdigo de operacin Instrucciones sin operandos Tambin denominadas instrucciones sin ninguna direccin. Este tipo de instrucciones se utilizan generalmente en computadoras cuya arquitectura tiene filosofa de pila. Una pila est formada por dates almacenados en orden consecutivo en la memoria, existiendo un registro especial denominado puntero de pila que nos indica la direccin del ltimo dato introducido en ella. Cuando un dato es sacado de ella, el puntero de pila decrece, apuntando al dato que est a continuacin en la pila hacia el fondo de la misma y que ser aquel dato que se introdujo en primer lugar. Cuando se trata de introducir un dato en ella el puntero toma la direccin de memoria siguiente en orden ascendente y se introduce en dicha direccin. Estas instrucciones slo llevan cdigo de operacin, de tal forma que cuando se trata de una operacin, se sacan Los operandos de la pila (previamente introducidos) y el resultado se introduce en la misma. cdigo de operacin Una computadora en su lenguaje mquina puede tener instrucciones de las anteriores, segn sea su arquitectura. METODOS DE DIRECCIONAMIENTO Se habla de direccionamiento en una instruccin al modo de indicar en la misma el lugar donde est situado el dato que va a intervenir en ella. Los direccionamientos utilizados en Las instrucciones son Los siguientes:

Operando 1

Direccionamiento inmediato: en l, el dato a utilizar se halla en la propia instruccin, en el acumulador o en la pila. Direccionamiento directo: en este caso la instruccin contiene la direccin de memoria central donde se encuentra el dato. Direccionamiento indirecto: la instruccin contiene la direccin de memoria central donde se encuentra la direccin de memoria que contiene el dato. Direccionamiento indexado: en el la direccin de memoria central donde se encuentra el dato, se obtiene sumndole a la direccin que lleva la instruccin una cantidad, que se encuentra en un registro especial llamado ndice.

Pgina 10 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

LENGUAJES DE PROGRAMACIN
Para poder desarrollar las capacidades del hardware, se ha necesitado la creacin de cdigos por medio d los cuales hacer que el ordenado ejecute una serie de rdenes a este conjunto de cdigos se denomina lenguaje. Un lenguaje de programacin es una notacin para escribir programas, a travs de los cuales podemos comunicarnos con el hardware y dar as las rdenes adecuadas para la realizacin de un determinado proceso. Un lenguaje viene definido por una gramtica o conjunto de reglas que se aplican a un alfabeto constituido por el conjunto de smbolos utilizados. Los distintos niveles en que se clasifican los lenguajes, no son ndice de la capacidad del lenguaje. Cuando se habla de lenguajes de bajo nivel implica indicar que el lenguaje es fcil de ser procesado por el microprocesador, ocupa poca lugar en memoria y de muy difcil programacin para el hombre, cuando hablamos de alto nivel nos indica que el mismo programa es de fcil programar por un programador pero ocupa mucho lugar de memoria y es de difcil acceso al hardware, de tal forma que segn utilicemos un nivel u otro as tendremos que utilizar un determinado lenguaje ligado a sus correspondientes traductores. El siguiente esquema representan la evolucin de los distintos lenguajes. Periodo 1950 - 1955 1956 - 1960 Influencias Ordenadores primitivos Ordenadores pequeos, caros y lentos Cintas magnticas. Compiladores e intrpretes Optimizacin del cdigo. Ordenadores grandes y caros Discos magnticos Sistemas operativos Lenguajes de propsito general. Ordenadores de diferentes tamaos, velocidades, y costes. Sistemas caros de almacenamiento masivo de datos. Sistemas operativos multitarea e interactivos. Compiladores con optimizacin. Lenguajes estndar, flexibles y generales. Micro ordenadores. Sistemas pequeos y baratos de almacenamiento masivo de datos. Lenguajes Lenguajes ensamblador. Lenguajes experimentales de alto nivel FORTRAN ALGOL 58 y 60 COBOL LISP FORTRAN IV COBOL 61 Extendido ALGOL 60 Revisado APL (como notacin slo) PL/I FORTRAN 66 (estndar) COBOL 65 (estndar) ALGOL 68 SIMULA 67 BASI C APL/360 PASCAL COBOL 74 PL/I

1961 - 1965

1966 - 1970

1971 - 1975

Pgina 11 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

Programacin estructurada. Ingeniera del software. Lenguajes sencillos. 1976 - 1980 Ordenadores baratos y potentes. Sistemas distribuidos. Programacin interactiva. Abstraccin de datos. Programacin con fiabifidad y fcil mantenimiento. Ordenadores ms baratos y potentes. Mayor abstraccin de datos. ADA FORTRAN 77 PROLOG C

1980

Menor costo de memorias Programacin Orientada o Objetos

SmallTalk OOCOBOL C++ Ojective C Object Pascal (Delphi) Visual Basic

Lenguajes de programacin se clasifican:

Bajo nivel (Lenguaje mquina) Intermedios (Lenguaje ensamblador), C Alto nivel Gestin Cientficos Propsito general y especficos

Lenguaje mquina
El lenguaje mquina es el nico que entiende directamente la computadora, utiliza el alfabeto binario que consta de los dos nicos smbolos 0 y 1, denominados bits (abreviatura inglesa de dgitos binarios). Fue el primer lenguaje utilizado en la programacin de computadoras, pero dej de utilizarse por su dificultad y complicacin, siendo sustituido por otros lenguajes ms fciles de aprender y utilizar, que adems reducen la posibilidad de cometer errores. EJEMPLO

0000 1000 0011 0111 1110

0001 1001 1010 0100 1001

1010 1001 1001 0111 0010

0001 1010 1100 0000 0000

01 A1 89 9A 3A 9C 74 70 E9 20

Lenguaje ensamblador
El lenguaje ensamblador es el primer intento de sustituir el lenguaje mquina por otro ms similar a los utilizados por las personas. En este lenguaje cada instruccin equivale a una instruccin en lenguaje mquina, utilizando para su escritura palabras nemotcnicas en lugar de cadenas de bits. EJEMPLO

INICIO:

ADD MOV

B, 1 A, E
Pgina 12 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

FIN :

CMP JE JMP END

A, B FIN INICIO

Este lenguaje presenta la mayora de los inconvenientes del lenguaje mquina: Cada modelo de computadora tiene un lenguaje ensamblador propio diferente del de los dems, por lo cual un programa slo puede utilizarse en la mquina para la cual se program. El programador ha de conocer perfectamente el hardware del equipo, ya que maneja directamente las posiciones de memoria, registros del procesador y dems elementos fsicos. Todas las instrucciones son elementales, es decir, en el programa se deben describir con el mximo detalle todas las operaciones que se han de llevar a cabo en la mquina para la realizacin de cualquier proceso. Por otro lado, tanto el lenguaje mquina como el ensamblador gozan de la ventaja de mnima ocupacin de memoria y mnimo tiempo de ejecucin en comparacin con el resultado de la compilacin del programa equivalente escrito en otros lenguajes.

Lenguajes de alto nivel


Los lenguajes de alto nivel, tambin denominados lenguajes evolucionados, surgen con posterioridad a los anteriores, con los siguientes objetivos, entre otros:
Lograr independencia de la mquina, pudiendo utilizar un mismo programa en diferentes

equipos con la nica condicin de disponer de un programa traductor o compilador, que lo suministra el fabricante, para obtener el programa ejecutable en lenguaje binario de la mquina que se trate. Adems, no se necesita conocer el hardware especfico de dicha mquina. Aproximarse al lenguaje natural, para que el programa se pueda escribir y leer de una forma ms sencilla, eliminando muchas de las posibilidades de cometer errores que se daban en el lenguaje mquina, ya que se utilizan palabras (en ingls) en lugar de cadenas de smbolos sin ningn significado aparente. Incluir rutinas de uso frecuente como son las de entrada/salida, funciones matemticas, manejo de tablas, etc, que figuran en una especie de librera del lenguaje, de tal manera que se pueden utilizar siempre que se quieran sin necesidad de programarlas cada vez. Se puede decir que el principal problema que presentan los lenguajes de alto nivel es la gran cantidad de ellos que existen actualmente en uso (FORTRAN, LISP, ALGOL, COBOL, APL, SNOBOL, PROLOG, MODULA2, ALGOL68, PASCAL, SIMULA67, ADA, C++, LIS, EUCLID, BASIC), adems de las diferentes versiones o dialectos que se han desarrollado de algunos de ellos.

FORTRAN
Abreviatura de Frmula Translator (traductor de frmulas), fue definido alrededor del ao 1955 en los Estados Unidos por la compaa IBM. Es el ms antiguo de los lenguajes de alto nivel, pues

Pgina 13 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

antes de su aparicin todos los programas se escriban en lenguaje ensamblador o en lenguaje mquina. Es un lenguaje especializado en aplicaciones tcnicas y cientficas, caracterizndose por su potencia en los clculos matemticos, pero estando limitado en las aplicaciones de gestin, manejo de archivos, tratamiento de cadenas de caracteres y edicin de informes. A lo largo de su existencia han aparecido diferentes versiones, entre las que destaca la realizada en 1966 por ANSI (American National Standard Institute) en la que se definieron nuevas reglas del lenguaje y se efectu la independencia del mismo con respecto a la mquina, es decir, comenz la transportabilidad del lenguaje. Esta versin se denomin FORTRAN IV o FORTRAN 66. En 1977, apareci una nueva versin ms evolucionada que se llam FORTRAN V o FORTRAN 77, esta versin est reflejada en el documento ANSI X3.9-1978: Programming Language FORTRAN y define dos niveles del lenguaje denominados FORTRAN 77 completo y FORTRAN 77 bsico, siendo el segundo un subconjunto del primero. Esta ltima versin incluye adems instrucciones para el manejo de cadenas de caracteres y de archivos, as como otras para la utilizacin de tcnicas de programacin estructurada. Estas caractersticas hacen que el lenguaje tambin sea vlido para determinadas aplicaciones de gestin.

COBOL
Es el lenguaje ms usado en las aplicaciones de gestin, creado en 1960 por un comit denominado CODASYL, patrocinado por el Departamento de Defensa de los Estados Unidos, a fin de disponer de un lenguaje universal para aplicaciones comerciales como expresa su nombre (COmmon Business Oriented Language). Entre sus caractersticas se pueden citar su parecido al lenguaje natural (ingls), es autodocumentado y tiene gran capacidad en el manejo de archivos, as como en la edicin de informes escritos. Entre sus inconvenientes estn sus rgidas reglas de formatos de escritura, la necesidad de describir todos los elementos al mximo detalle, la extensin excesiva en sus sentencias e incluso duplicacin en algunos casos, la inexistencia de funciones matemticas y, por ltimo, su no adecuacin a las tcnicas de programacin estructurada. a

PL/1
Fue creado a comienzos de los aos 60 por IBM para ser usado en sus equipos del sistema 360. El PL/I (Programming Language 1) se desarroll inspirndose en los lenguajes ALGOL, COBOL y FORTRAN, tomando las mejores caractersticas de los anteriores y aadiendo algunas nuevas, con el objetivo de obtener un lenguaje lo ms general posible, til para aplicaciones tcnico-cientficas, comerciales, de proceso de textos, de bases de datos y de programacin de sistemas. Entre sus novedades est su gran libertad en el formato de escritura de los programas, soportar la programacin estructurada y el diseo modular. No obstante, no ha superado a sus progenitores en sus aplicaciones especficas debido en parte a su amplitud y por ello, al tamao de su compilador, que hasta ahora slo se poda instalar en grandes equipos.

BASIC

Pgina 14 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

Fue diseado por los profesores John G. Kemeny y Thomas E. Kurtz del Dartmouth College en 1965 con el objetivo principal de conseguir un lenguaje fcil de aprender para los principiantes, como se indica en su nombre Benginners All-purpose Symbolic Instruction Code (Cdigo de instruccin simblico de propsito general para principiantes). Entre sus principales novedades estn las de ser un lenguaje interpretado y de uso conversacional, til para aplicaciones tcnicas y de gestin. Estas caractersticas, unidas a la popularizacin de las microcomputadoras y computadoras personales, ha hecho que su utilizacin se haya extendido enormemente, a la vez que ha propiciado el surgimiento de una gran diversidad de versiones que extienden y adaptan a necesidades particulares el lenguaje original. Existen multitud de intrpretes y compiladores del lenguaje.

PASCAL
Fue creado por el matemtico suizo Niklaus Wirth en 1970, basndose en el lenguaje AL-GOL, en cuyo diseo haba participado en los aos 60. Su nombre proviene del filsofo y matemtico francs del siglo xvii Blaise Pascal, que invent la primera mquina de tipo mecnico para sumar. Aunque en principio la idea del diseador era proporcionar un lenguaje adecuado para la enseanza de los conceptos y tcnicas de programacin, con el tiempo ha llegado a ser un lenguaje ampliamente utilizado en todo tipo de aplicaciones, poseyendo grandes facilidades para la programacin de sistemas y diseo de grficos. Aporta los conceptos de tipo de datos, programacin estructurada y diseo descendente, entre otros, adems de haberse convertido en predecesor de otros lenguajes ms modernos, como MODULA-2 y ADA.

C
Fue creado en 1972 por Dennis Ritchie a partir del trabajo elaborado por su colega de los laboratorios Bell Telephone, Ken Thompson. Estos haban diseado con anterioridad el sistema operativo UNIX, y su intencin al desarrollar el lenguaje C fue la de conseguir un lenguaje idneo para la programacin de sistemas que fuese independiente de la mquina con el cual escribir su sistema UNIX. Aunque fue diseado inicialmente para la programacin de sistemas, posteriormente su uso se ha extendido a aplicaciones tcnico-cientficas, de bases de datos, de proceso de textos, etc. La utilizacin ptima de este lenguaje se consigue dentro de su entorno natural, que es el sistema operativo UNIX. Entre sus caractersticas destaca el uso de programacin estructurada para resolver tareas de bajo nivel, as como la amplia librera de rutinas de que dispone.

ADA
Es el ltimo intento de obtener un nico lenguaje para todo tipo de aplicaciones e incluye los ltimos avances en tcnicas de programacin. Su diseo fue encargado por el Departamento de Defensa de los Estados Unidos a la empresa Honeywell-Bull despus de una seleccin rigurosa entre varias propuestas realizadas sobre una serie de requerimientos del lenguaje y de haber evaluado negativamente veintitrs lenguajes existentes. De stos se seleccionaron como base para la creacin del nuevo lenguaje el PASCAL, el ALGOL y el PL/I. La estandarizacin del lenguaje se public en
Pgina 15 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

1983 con el nombre de ADA en honor de la considerada primera programadora de la historia Augusta Ada Byron, condesa de Lovelace. Entre las caractersticas del lenguaje se encuentran la compilacin separada, los tipos abstractos de datos, programacin concurrente, programacin estructurada, libertad de formatos de escritura, etc., presentando como principal inconveniente su gran extensin.

Interpretes y Compiladores
Existen dos tipos principales de traductores de los lenguajes de programacin de alto nivel: Compilador, que analiza el programa fuente y lo traduce a otro equivalente escrito en otro lenguaje (por ejemplo, en el lenguaje de la mquina). Su accin equivale a la de un traductor humano, que toma un libro y produce otro equivalente escrito en otra lengua. Intrprete, que analiza el programa fuente y lo ejecuta directamente, sin generar ningn cdigo equivalente. Su accin equivale a la de un intrprete humano, que traduce las frases que oye sobre la marcha, sin producir ningn escrito permanente. Intrpretes y compiladores tienen diversas ventajas e inconvenientes que los hacen complementarios: Un intrprete facilita la bsqueda de errores, pues la ejecucin de un programa puede interrumpirse en cualquier momento para estudiar el entorno (valores de las variables, etc.). Adems, el programa puede modificarse sobre la marcha, sin necesidad de volver a comenzar la ejecucin. Un compilador suele generar programas ms rpidos y eficientes, ya que el anlisis del lenguaje fuente se hace una sola vez, durante la generacin del programa equivalente. En cambio, un intrprete se ve obligado generalmente a analizar cada instruccin tantas veces como se ejecute (incluso miles o millones de veces). Un intrprete permite utilizar funciones y operadores ms potentes, como por ejemplo ejecutar cdigo contenido en una variable en forma de cadenas de caracteres. Usualmente, este tipo de instrucciones es imposible de tratar por medio de compiladores. Los lenguajes que incluyen este tipo de operadores y que, por tanto, exigen un intrprete, se llaman interpretativos. Los lenguajes compilativos, que permiten el uso de un compilador, prescinden de este tipo de operadores.

EVOLUCIN HISTRICA DE LA PROGRAMACIN


En el comienzo de la informtica, slo haba una forma de programar (en binario), que consista en la ejecucin secuencial (una tras otra) de instrucciones de la mquina, con posibles cambios de secuencia basados en dos tipos especiales de instrucciones de control Las instrucciones de control se dividieron en dos tipos: instrucciones de transferencia instrucciones de llamada de subrutina. Las instrucciones de transferencia dan lugar a un salto sin retorno en la ejecucin, y a su vez pueden ser condicionales (si el salto se produce nicamente cuando se cumple una condicin determinada) o incondicionales.

Pgina 16 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

La instruccin de llamada de subrutina guarda la direccin de retorno para que la secuencia de ejecucin original se reanude cuando termina la ejecucin de la subrutina (momento en el que se ejecutar una instruccin de retorno). En la dcada de los aos cincuenta surgi un nuevo tipo da lenguajes (llamados simblicos, o de segunda generacin: assembler), que trataban de simplificar la programacin: ya que, a medida que los programas eran cada vez ms complejos, se haca impracticable utilizar directamente el lenguaje de la mquina, en el que las instrucciones estaban formadas por secuencias de ceros y unos. Un lenguaje simblico no es ms que una representacin codificada del lenguaje de la mquina, donde cada instruccin simblica se traduce (en principio) por una sola instruccin de la mquina equivalente, y el cdigo de operacin y la direccin de memoria asociados a cada instruccin de la mquina se representan mediante smbolos alfanumricos. En particular, dependiendo del lenguaje simblico utilizado, las instrucciones de cambio de secuencia se suelen representar mediante los siguientes smbolos:
La instruccin de transferencia incondicional: JMP (jump, es decir, salto); B (branch,

ramificacin); GOTO (go to, ir a); etc.

Las instrucciones de transferencia condicional: JZ (jump on zero, salto si el resultado

anterior es cero); BC (branch on condition, ramificacin condicional); etc. link, es decir, ramificacin con enlace); etc.

La instruccin de llamada de subrutina: CALL (llamar, en ingls); BAL (branch and La instruccin de retorno de subrutina: RET (return, retorno); etctera.

A finales de los aos cincuenta, y a medida que las aplicaciones iban creciendo en tamao y en complicacin, la programacin en los lenguajes simblicos resultaba an demasiado compleja, por lo que se inventaron los lenguajes de alto nivel o de tercera generacin, tales como FORTRAN, LISP, COBOL, ALGOL, APL, PL/I, BASIC, Pascal, C, etc., que hacan ms legibles los programas mediante expresiones de aspecto matemtico, como X + Y * Z (que significa, en muchos de los lenguajes citados, sumar el valor de la variable X al resultado de multiplicar el valor de la variable Y por el de la variable Z). Todos estos lenguajes, y muchos ms que no voy a mencionar por el momento, no son totalmente independientes entre s, sino que unos influyeron en el diseo de los otros, por lo que forman una jerarqua histrica. Adems de simplificar la sintaxis de las expresiones, los lenguajes de alto nivel introdujeron una serie de instrucciones de control para hacer ms simple la definicin de la estructura de los programas. Estas instrucciones pueden agruparse en las siguientes clases:
Una instruccin de transferencia incondicional (siempre se produce un salto sin

retorno en la ejecucin), generalmente representada mediante el smbolo GOTO, GO TO, u otro equivalente. Instrucciones de transferencia condicional, como las sentencias GO TO calculada y asignada de FORTRAN, o la sentencia IF del mismo lenguaje, en su forma original. Instrucciones de ejecucin condicional, como el conjunto IF- THEN-ELSE de ALGOL y Pascal, la instruccin CASE de Pascal o el conjunto if-else y la instruccin switch de C. Instrucciones de ejecucin en bucle, en sus formas DO-UNTIL, DO-WHILE y FOR. La instruccin de llamada de subrutina, representada mediante el smbolo CALL, o implcitamente, especificando slo el nombre de la subrutina que se invoca, junto con un conjunto de argumentos entre parntesis.
Pgina 17 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

La instruccin de retorno de subrutina: RETURN o equivalente.

PROGRAMACIN ESTRUCTURADA
En ciertos lenguajes clsicos (como APL o las formas primitivas de FORTRAN y BASIC) se emplea con frecuencia la instruccin GOTO de transferencia incondicional, que permite pasar la ejecucin del programa a otra parte del mismo, sealada por una etiqueta. En otros (como C o Pascal) se utiliza un estilo diferente de programar (la programacin estructurada) en la que la instruccin GOTO est prohibida o, al menos, desaconsejada. Por ello, la programacin estructurada se llama a veces programacin sin GOTO. En la programacin estructurada se utilizan slo cuatro estructuras de control bsicas:
El bloque de instrucciones consecutivas. En C se representa con los smbolos { y ). La instruccin condicional. En C y en PASCAL existen dos tipos principales:

1. La instruccin if-else: Si la condicin se cumple, se ejecuta la instruccin 1. En caso contrario, se ejecuta la instruccin 2. 2. La instruccin switch (o case of): - Si la variable tiene el valor1, se ejecuta el bloque de instrucciones 1. - Si tiene el valor2, se ejecuta el bloque de instrucciones 2. Y as sucesivamente. - Si no tiene ninguno de los valores indicados, se ejecuta el bloque de instrucciones n.

El bucle: En C (o en PASCAL) existen tres tipos principales: La instruccin for: Se ejecuta primero la instruccin iniciadora. A continuacin, mientras la condicin se cumpla, se ejecutan repetidamente las instrucciones, seguidas por la instruccin terminadora. 2. La instruccin while: Mientras la condicin se cumpla, se ejecutan repetidamente las instrucciones. Si la condicin no se cumple cuando la ejecucin llega a la instruccin while, las instrucciones no se ejecutan ninguna vez. 3. La instruccin do: Mientras la condicin se cumpla, se ejecutan repetidamente las instrucciones. Si la condicin no se cumple cuando la ejecucin llega a la instruccin do, las instrucciones se ejecutan al menos una vez.
1. La cuarta instruccin de control es la llamada de subrutina, a la que dedicaremos el

apartado siguiente.

PROGRAMACIN PROCEDIMENTAL
La llamada de subrutina (conocida, en general, como instruccin CALL) sirve para relacionar unos programas con otros y permite modular las aplicaciones, descomponindolas en dos o ms secciones llamadas procedimientos, subrutinas, o funciones, segn los casos. Por esta razn los lenguajes de programacin clsica se llaman tambin procedimentales. Gracias a la capacidad de invocar la ejecucin de procedimientos, los distintos programas que constituyen una aplicacin suelen formar una estructura jerrquica, con un programa principal (main en C) que llama a otros subprogramas, y stos a otros, hasta llegar a los niveles ms bajos de la jerarqua, donde suelen situarse los programas que prestan servicios especiales a casi todos los dems. La jerarqua en cuestin no forma siempre, un rbol invertido, sino un esquema algo ms complejo. Es cierto que

Pgina 18 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

siempre suele haber un nodo principal o raz (el programa principal), pero un mismo nodo puede tener ms de un antecesor (puesto que una subrutina puede ser invocada por varios mdulos). Adems, es posible que haya ciclos, simples o compuestos, pues los mdulos pueden ser recursivos, directamente o indirectamente. En cambio, en esta forma de programar, los datos no tienen ninguna organizacin preestablecida: cada programador decide cmo se relacionan unos con otros y cmo se distribuyen entre los subprogramas. En principio, existen dos clases de datos:
Datos globales: son accesibles por todos los subprogramas. Datos locales: son accesibles por un solo subprograma, mdulo o funcin.

A veces, dependiendo del lenguaje de programacin, los datos locales son automticamente heredables por los subprogramas o funciones situados, en la jerarqua de llamadas, por debajo del subprograma en que dichos datos han sido definidos. SISTEMAS DE NUMERACIN El primer sistema de numeracin del cual se tiene conocimiento fue el sistema egipcio. Posteriores a l son el romano, el maya, el chino, el indio, el rabe original hasta llegar al decimal actual. EL SISTEMA DECIMAL El sistema decimal es u sistema posicional, ya que el significado de un smbolo depende fundamentalmente de su posicin relativa al smbolo coma (,), denominado coma decimal, que en caso de ausencia se supone colocada implcitamente a la derecha. Utiliza como base el 10, que corresponde al nmero de smbolos que comprenden para la representacin de cantidades; estos smbolos (tambin denominados dgitos) son: 0 1 2 3 4 5 6 7 8 91 Una determinada cifra, que se denominar nmero decimal, se puede expresar de la siguiente forma:

No =
i= -d

(dgito)i * (base)i

Donde: base = 10 i = posicin respecto a la coma d = n.o de dgitos a la derecha de la coma, n = n.o de dgitos a la derecha de la coma - 1, dgito = cada uno de los que componen el nmero

En todo sistema de numeracin la base no aparece como dgito. Pgina 19 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

La frmula responde al Teorema Fundamental de la Numeracin que se ver en el siguiente tema. El sistema decimal es un sistema posicional como ya hemos dicho, ya que el mismo dgito puede variar su valor de acuerdo a su posicin. Ej.: 1000 mil 100 cien 10 diez 1 uno 0,1un dcimo 0,01un centsimo TEOREMA FUNDAMENTAL DE LA NUMERACIN El teorema fundamental de la numeracin dice: El valor en el sistema decimal de una cantidad expresada en otro sistema cualquiera de numeracin, viene dado por la frmula: ... + X4*B4 + X3*B3 + X2*B2 + X1*B1 + X0*B0 + X-1*B-1 + X-2*B-2 + X-3*B-3 + ... donde X es el dgito y B la base. Ejemplo: Supongamos la cantidad 3221,034 esta expresada en base 4 (ver subndice al final de la cantidad), dicha base utiliza para representar cantidades los dgitos 0, 1, 2 y 3. Cul ser el valor correspondiente en el sistema decimal? 3 * 43 + 2 * 42 + 2 * 41 + 1 * 40 + 0 * 4-1 + 3 * 4-2 = 3 * 64 + 2 * 16 + 2 * 4 + 1 * 1 + 0 * 0,25 + 3 * 0,0645 = 233,1875 El teorema aplicado a la inversa nos sirve para obtener el valor en una base cualquiera de un valor decimal, por medio de divisiones sucesivas por dicha base, como se ver ms adelante. EL SISTEMA BINARIO Por razones tcnicas, la mayora de los circuitos electrnicos que conforman un ordenador solo puede detectar la presencia o ausencia de tensin en el circuito. Si a la presencia de tensin en un punto del circuito le asignamos el valor 1 y a la ausencia de la misma el valor 0 (a esta lgica se la denomina lgica positiva). Caso contrario la denominaremos lgica negativa. Por las razones antes vistas, ya que el hardware por el momento solo reconoce estos dos estados fue necesario crear un sistema de numeracin basado en estos dos valores (0, 1), al cual se lo denomin Binario, y cuya base por lo tanto es 2 (nmeros de dgitos del sistema). En computacin cada dgito de un nmero representado en este sistema se denomina bit (contraccin de binary digit). Como mltiplos del bit hallamos: 8 bits Byte (palabra)2 B (10110110)
La idea de palabra queda de las antiguas computadoras con palabras de 8 bits, hoy existen mquinas cuya palabra es de 16, 32, 64 bits.
2

Pgina 20 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

1024 bytes 1 kilobyte

1 Megabyte 1024 MB 1 Gigabyte 1024 GB 1 Terabyte Dos cosas a tener en cuenta:


1024 KB

KB MB GB TB

a) La B de byte es siempre mayscula, ya que Kb significa Kbit unidad utilizada en las memorias. 1M 1000 K), en el binario es 210 = 1024. OPERACIONES CON BINARIOS Tanto la suma como la multiplicacin son semejantes a la decimal con la diferencia que se maneja solo dos dgitos, sus tablas de operacin se pueden observar en los siguientes esquemas Suma + 0 1 Ejemplos 1 1 1 1 1 1 1 0 0 1 + 1 0 1 0 1 1 1 0 0 0 1 0 0 Acarreo 25 + 43 68 0 0 1 1 1 10 * 0 1 Multiplicacin 0 0 0 1 0 1
b) En el sistema de numeracin decimal los mltiplos son potencias 10 (1K 1000 unidades y

1 1 1 1 0. 1 0 + 1 1 0 1. 0 1 1 0 0 1 1. 1 1 1 * 1 1 1 1 1 1 0 0 1 1 1 1 0 1 1 0 1 0 0 1 0 0 0 0 0 0 0 1 1 1 0 1 1 1 1

Acarreo 6,50 + 13.25 19.75 25 * 19

475

Pgina 21 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

La resta como la divisin son procesos que la unidad de clculo del ordenador no realiza por lo tanto no lo vamos a ver en forma directa.

Pgina 22 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

EL SISTEMA OCTAL Es un sistema cuya base es el nmero 8, es decir, utiliza 8 smbolos para la representacin de un valor cualquiera. Estos smbolos son: 0 1 2 3 4 5 6 7

Este es un sistema tambin posicional, de aritmtica muy similar al decimal. Su utilizacin comenz como sistema de salida de las computadoras ya que para representar un valor la cantidad de smbolos que necesita es menor que el binario y la conversin entre ambos sistemas es muy sencilla de implementar. EL SISTEMA HEXADECIMAL Es un sistema cuya base es el nmero 16, es decir, utiliza 16 smbolos para la representacin de un valor cualquiera. Estos smbolos son: 0 1 2 3 4 5 6 7 8 9 A B C D E F

Este es otro sistema posicional, de caracterstica similar al octal. Su uso fue adoptado por idnticas razones que el octal. CONVERSIN ENTRE LOS DISTINTOS SISTEMAS Se denomina as la transformacin de un valor en un sistema al equivalente en otro sistema. Conversin decimal a binario Para convertir un nmero decimal entero a binario, este debe ser dividido por dos y repetir el proceso con sus cocientes hasta que el cociente tome el valor 1. La unin de todos restos escritos en orden inverso encabezados por el ltimo cociente, nos dar el valor expresado en binario. Ej. : Convertir el nmero 174 a binario 174 0 2 87 1

2 43 1

2 21 1

2 10 0

2 5 1

2 2 0

2 1

17410 = 10101110 2 Para convertir una fraccin decimal a binario, esta fraccin debe ser multiplicada por dos y tomamos la parte entera del resultado, repetimos el proceso con la parte fraccionaria del resultado anterior, dndonos una nueva parte entera, y as sucesivamente hasta que la parte fraccionaria se haga 0 (cero) o que tengamos suficientes decimales que nos permita estar debajo de un determinado error. Ej. : Convertir el nmero 0,90625 a fraccin binaria
Pgina 23 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

0,90625 * 2 = 1,8125 0,8125 * 2 = 1,625 0,625 * 2 = 1,25 0,25 * 2 = 0,5 0,5 * 2 = 1, 0,90625 10 = 0,11101 2 Ej. : Convertir el nmero 0,64037 a fraccin binaria 0,64037 * 2 = 1,28074 0,28074 * 2 = 0,56148 0,56148 * 2 = 1,12296 0,12296 * 2 = 0,24592 0,24592 * 2 = 0,49184 0,49184 * 2 = 0,98368 0,98368 * 2 = 1,96736 0,96736 * 2 = 1,93472 0,93472 * 2 = 1,86944 0,86944 * 2 = 1,73888 0, 64037 10 = 0,1010001111 2 El error en el valor es 2-10 0,001. Esto es as porque hemos obtenido 10 unidades binarias, de querer mejorar la precisin deberemos obtener un mayor nmero de fracciones binarias. Pase a binario las siguientes fracciones decimales con 2-10 : 0,63965 y 0,064062. Si se desea convertir un nmero que tiene parte entera y decimal a binario, se deber operar cada parte por separado como ya se ha visto, y luego obtener la suma de los resultados. Por ejemplo: 174,90625 10 = 10101110,11101 2 Conversin binario a decimal Para realizar esta conversin se utiliza como base el teorema fundamental de la numeracin. El mtodo prctico consiste en multiplicar cada uno de los trminos por potencias crecientes de 2 a partir de la coma decimal y hacia la izquierda, y realizar la suma de las operaciones.

Pgina 24 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

Por ejemplo: Pasar a decimal el binario 10101110 2 1 0 1 0 1 1 1 0 0 * 20 = 1 * 21 = 1 * 22 = 1 * 2 = 0 * 24 = 1 * 2 = 0 * 2 = 1 * 27 = 10101110 2 = 17410 En los casos de nmeros que posean parte entera y decimal se recomienda el uso del teorema fundamental de la numeracin. Ej.: Convertir 1101,011 2 a base 10 Para pasar a base 10 deberemos hacer: 1 * 23 + 1 * 22 + 0 * 21 + 1 * 20 + 0 * 2-1 + 1 * 2-2 + 1 * 2-3 = 1 * 8 + 1 * 4 + 0 + 1 * 1 + 0 + 1 * 0,25 + 1 * 0,125 = 8 + 4 + 0 + 1 + 0 + 0,25 + 0,125 = 13,375 1101,011 2 = 13,375 10 Conversin octal a binario Al ser la base del octal (8) potencia de la base binaria (23), la transformacin de una base a la otra se hace en forma directa dgito a dgito. Cada dgito octal ser reemplazado por 3 dgitos binarios (3 por ser la potencia que relaciona ambas bases), segn la tabla que tenemos a continuacin.
6 5 3

0 2 4 8 0 32 0 128 174

Pgina 25 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

Octal 0 1 2 3 4 5 6 7 Ej.: Convertir a binario el nmero 276,5348 2 010 7 111 6, 110, 5 101

Binario 000 001 010 011 100 101 110 111

3 011

4 100

276,534 8 = 10111110,1010111 2 Como se puede ver los ceros al comienzo se han quitado, igual que los ceros que se hallan a la derecha de la coma (ya que no tienen ningn sentido). Conversin binario a octal Esta conversin es similar a la anterior, pero cada tres smbolos binarios corresponde uno octal. Para realizar correctamente esta conversin el nmero de dgitos a la derecha de la coma decimal debe ser mltiplo de 3 si no lo fuera deber agregarse al final del nmero tantos ceros como sea necesario. Idntico caso ser a la izquierda de la coma, en dicho caso los ceros se agregan al principio del nmero. Ej. Convertir el binario 10101011,0011 a octal. 010 2 101 5 011, 3, 001 1 100 4

0 cero agregado al nmero para permitir la correcta conversin. 10101011,0011 2 = 253,14 8

Pgina 26 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

Conversin hexadecimal a binario Por idnticas razones que el caso anterior (16 = 24), la transformacin de una base a la otra se hace en forma directa dgito a dgito. Cada dgito hexadecimal ser reemplazado por 4 dgitos binarios (4 por ser la potencia que relaciona ambas bases), segn la tabla que tenemos a continuacin. Hexadecima l 0 1 2 3 4 5 6 7 Ej.: Convertir a binario el nmero 5A8,39C16 5 0101 A 1010 8, 1000, 3 0011 9 1001 C 1100 Binario 0000 0001 0010 0011 0100 0101 0110 0111 Hexadecima l 8 9 A B C D E F Binario 1000 1001 1010 1011 1100 1101 1110 1111

5A8,39C16 = 10110101000,0011100111 2 Como se puede ver otra vez los ceros al comienzo se han quitado, igual que los ceros que se hallan a la derecha de la coma (ya que no tienen ningn sentido). Conversin binario a hexadecimal Esta conversin es similar a la conversin a octal, pero en lugar de tres, sern cuatro smbolos binarios los que corresponde a un hexadecimal. Para realizar correctamente esta conversin el nmero de dgitos a la derecha de la coma decimal debe ser mltiplo de 4 si no lo fuera deber agregarse al final del nmero tantos ceros como sea necesario. Idntico caso ser a la izquierda de la coma, en dicho caso los ceros se agregan al principio del nmero. Ej.
Convertir el binario 1010101011,00111 a hexadecimal.

0010 2

1010 A

1011, B,

0011 3

1000 8

0 cero agregado al nmero para permitir la correcta conversin.

Pgina 27 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

1010101011,00111

= 2AB,38816

Conversin decimal a octal o hexadecimal Para cualquiera de estos dos casos se har en forma similar a la explicada para convertir de decimal a binario 1.7.1. Pero se deber tener en cuenta que la base ya no es 2, sino 8 o 16 segn corresponda. (Dividir por 8 o 16) Conversin octal o hexadecimal a decimal Para cualquiera de estos dos casos se deber usar el teorema fundamental de la numeracin, teniendo en cuenta base que corresponda ( 8 o 16 segn el caso). Conversin octal a hexadecimal o hexadecimal a octal. Estas conversiones no son posibles en una forma directa. Para realizar cualquiera de ellas se deber usar el pasaje a otra base como paso intermedio. Por ejemplo octal decimal hexadecimal octal binario hexadecimal Se recomienda como metodologa de trabajo esta ltima, porque al ser las operaciones de conversin ms sencillas disminuye la probabilidad de error. Adems no existe la posibilidad de errores de redondeo. REPRESENTACIN DE NMEROS ENTEROS Existen 4 formas de representar un nmero entero en un ordenador (todos en sistema binario), ellas son Mdulo y signo Complemento a 1 (C-1) Complemento a 2 (C-2) Exceso a 2 elevado a la N -1 En todos los casos se considera que tenemos un nmero limitado de dgitos para cada elemento numrico. El nmero de dgitos disponibles lo representa N (8, 16, 32, 64 o sea 1, 2, 3, 4... Bytes). Mdulo y signo. En este mtodo se utiliza el primer bit a la izquierda como signo, 0 si es positivo y uno si es negativo. Los restantes (7, 15, etc.), representan el mdulo Por ejemplo Signo Mantisa 19 se representa en 8 bits como 0 0010011 -19 1 0010011 19 se representa en 16 bits como 0 000000000010011 -19 1 000000000010011 El conjunto de valores que se puede representar en un mtodo determinado se conoce como rango de la representacin. Para mdulo y signo el rango de representacin para N dgitos es: - 2N-1 +1 x 2N-1 -1

Pgina 28 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

Para 1 Byte (8 bits) es 127 x 127 Para 2 Byte (16 bits) es 32767 x 32767 Para 4 Byte (32 bits) es -

2147483647 x 2147483647 Este mtodo tiene la ventaja de poseer un rango simtrico, pero la desventaja de poseer dos representaciones para el nmero 0 Complemento a 1 (C-1). Para representar un nmero positivo es igual al mtodo de MS. Pero en el caso de los negativos, se obtiene complementando al positivo (cambiando 1 por 0 y viceversa) Por ejemplo Signo Mantisa 19 se representa en 8 bits como 0 0010011 -19 1 1101100 19 se representa en 16 bits como 0 000000000010011 -19 1 111111111101100 Para complemento a 1 el rango de representacin para N dgitos es: - 2N-1 +1 x 2N-1 -1 Para 1 Byte (8 bits) es 127 x 127 Para 2 Byte (16 bits) es 32767 x 32767 Para 4 Byte (32 bits) es 2147483647 x 2147483647 Este mtodo presenta iguales ventajas y desventajas que el anterior. Complemento a 2 (C-2) Este mtodo es similar al anterior, la representacin de los nmeros positivos es igual a la anterior, pero los negativos se obtiene en dos pasos: Se complementa a 1 Al resultado se le suma 1 Por ejemplo 19 se representa en 8 bits como 0 0010011 -19 1 1101100 C-1 -

Pgina 29 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

+ 1 -19 1 1101101 C-2 Para complemento a 2 el rango de representacin para N dgitos es: - 2N-1 x 2N-1 -1 Para 1 Byte (8 bits) es 128 x 127 Para 2 Byte (16 bits) es 32768 x 32767 Para 4 Byte (32 bits) es -

2147483648 x 2147483647 Presenta la siguientes ventajas. Tiene una nica representacin para 0, la segunda es que en lugar de hacer A B, puedo hacer A + BC-2. La unidad aritmtico lgica del microprocesador solo suma, no resta. Exceso a 2 elevado a la N 1 En este mtodo no hay bit de signo, todos los bits se utilizan para representar el valor del nmero ms el exceso, que para N bits viene dado por 2 N-1, que para una representacin de 8 bits es 128. Para obtener un nmero en un exceso dado, se realiza la suma algebraica del exceso ms el nmero. Solo se pueden representar valores en mdulo menores o iguales al exceso. Ej. Exceso 128 19 19 en exceso 128 Por ejemplo 19 se representa en 8 bits como 1 0010011 -19 0 1101101 En este mtodo el 0 tiene nica representacin, el rango de representacin es asimtrico. Para complemento a 2 el rango de representacin para N dgitos es: - 2N-1 x 2N-1 -1 Para 1 Byte (8 bits) es 128 x 127 Para 2 Byte (16 bits) es 32768 x 32767 10000000 + 00010011 10010011

Pgina 30 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

Para 4 Byte (32 bits) es 2147483648 x 2147483647 La representacin en exceso para un nmero cualquiera es igual a la representacin en complemento a dos pero el valor del primer bit de la izquierda esta invertido. DESBORDAMIENTO (OVERFLOW) Este hecho se puede producir cuando se suman dos nmeros en un mtodo de representacin y el resultado no puede ser representado por el mtodo, dndonos un resultado errneo. Para el ejemplo usaremos la notacin de MS Ej. 52 00110100 52 + 97 + 01100001 97 149 10010101 -21 PRECISION FINITA DE LA INFORMACIN Muchos estudiantes consideran que el ordenador puede trabajar con nmeros con cantidades de cifras infinitamente grande. Este preconcepto es uno de los ms errneos que se puede detectar en el alumno. Todo ordenador cuenta con un nmero finito de Bytes para poder almacenar una cifra. Este nmero puede ser de 1, 2, 4, 6, 8, 10 Bytes, pero nunca infinito. Por lo tanto solo se podr ingresa, procesar, almacenar y extraer un rango de valores. Por ejemplo para nmeros enteros se utiliza como mximo 4 Bytes (32 bits), siendo el rango de representacin entre -247483648... 247483647. Coma Flotante Este mtodo nace de la necesidad de representar nmeros reales o enteros con un rango mayor que el dado por los otros mtodos. En su representacin se utiliza la representacin matemtica NO = mantisa * base exponente Por ejemplo 79436.54 = 0,7943654 5 * 10 A este proceso se lo denomina normalizacin. Para estos nmeros se utilizan explicaremos dos formas de representacin simple y doble precisin, pero existen otros formatos como real, extended, o comp. Para simple precisin se utiliza 32 bits (4 Bytes), en el segundo caso 64 bits (8 Bytes). (Todos los elementos en computacin se comienzan a numerar por 0) El esquema en ambos casos es como se ve abajo Simple Precisin C. de bits B. Inicial B. Final Signo 1 31 Exponente 8 23 30 Mantisa 23 0 22 Doble Precisin C. de bits B. Inicial B. Final 1 63 11 52 62 52 0 51

Pgina 31 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

Ejemplos de Pasajes de Decimal a Flotante


57 a Flotante 1) Paso 57 a Binario 57 111001 2) Normalizo el binario 111001 0,111001 * 26 3) Paso el exponente a binario 6 110 4) Si trabajo en Simple Precisin (SP) lo expreso como excedente a 10000000 (por los 8 bits), si es en Doble Precisin como excedente a 10000000000 (por los 11 bits). EL exponente nos queda as. SP DP 10000110 10000000110

5) Como el nmero es positivo el bit de signo es 0 El nmero queda estructurado de la siguiente manera Signo Exponente Mantisa SP 0 10000110 111001 Debera agregar 0 hasta completar los 24 bits El nmero en cuestin nos queda 0100 0011 0111 0010 0000 0000 7) Lo paso a HEXADECIMAL y nos queda 437216 En el caso de - 56 8) Como el nmero es negativo el bit de signo es 1 El nmero queda estructurado de la siguiente manera Signo Exponente Mantisa SP 1 10000110 111001 Debera agregar 0 hasta completar los 24 bits El nmero en cuestin nos queda 1100 0011 0111 0010 0000 0000 9) Lo paso a HEXADECIMAL y nos queda C37216 Ejemplo de exponente negativo

Pgina 32 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

El nmero 0, 13671875 repito los pasos anteriorres. Paso a binario 0,13671875 0,00100011 Normalizo 0,00100011 2 0,100011 2 *2-2 Paso el modulo de la potencia a Binario 2 102 Si trabajo en Simple Precisin (SP) lo expreso como excedente a 10000000 EL exponente nos queda as. SP 01111110

Como el nmero es positivo el bit de signo es 0 El nmero queda estructurado de la siguiente manera SP Signo 0 Exponente Mantisa 01111110 100011 Debera agregar 0 hasta completar los 24 bits

El nmero en cuestin nos queda 0011 1111 0100 0110 (no se complet con ceros porque su representacin en Hexadecimal son 0 que no afectan el nmero final) Lo paso a HEXADECIMAL y nos queda 3F4616 Si el nmero fuera negativo el bit de signo es 1 El nmero queda estructurado de la siguiente manera SP Signo 1 Exponente Mantisa 01111110 100011 Debera agrega 0 hasta completar los 24 bits

El nmero en cuestin nos queda 1011 1111 0100 0110 Lo paso a HEXADECIMAL y nos queda BF4616

Pgina 33 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

Si el nmero (-0,13671875) quisiramos expresarlo en flotante de 64 bits, el nico cambio que tendramos sera el exponente que ya no tiene 8 bits sino 11 bits quedndonos. El nmero queda estructurado de la siguiente manera SP Signo 1 Exponente 01111111110 Mantisa 100011

El nmero en cuestin nos queda 1011 1111 1110 1000 1100 Lo paso a HEXADECIMAL y nos queda BFE8C16 Como se puede ver el mismo nmero segn se represente en 32 o en 64 bits 32 bits 64 bits -0,13671875 BF460000 BFE8C00000000000 Los ceros a la izquierda no son representativos, pueden o no escribirse. Este mtodo de representacin tiene sus rangos de representacin los cuales no incluyen el nmero 0 (cero). Se puede representar nmeros muy prximos a 0 pero no incluye este nmero. El mdulo mayor que se puede expresar en doble precisin es 1,710 * 10 308, con una precisin de 15 a 16 cifras(ver transformacin de fracciones decimales a binarios). El nmero ms prximo a cero ser 1 * 10-309. El mdulo mayor que se puede expresar en punto flotante (extended) es 1,10 * 104932. REPRESENTACIN INTERNA DE LA INFORMACIN: Codificacin alfanumrica Cada vez que presionamos una tecla cualquiera en nuestra computadora, esta convierte el carcter presionado en un conjunto bits. Para esta transformacin se utilizaron y se utilizan distintos cdigos. El primero fue un cdigo de 6 bits denominado FIELDATA. Es cdigo fue reemplazado por el ASCII (American Standard Code for Information Interchange) que era un cdigo de 7 bits (tena 128 caracteres posibles), luego aparece el EBCDIC que fue el primer cdigo de 8 bits por ltimo aparece para el ambiente de PC el ASCII extendido que tambin es de 8 bits (256 caracteres).

Pgina 34 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

Tabla de conversin
Decimal 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 Binario 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 10000 10001 10010 10011 10100 10101 10110 10111 11000 11001 11010 11011 11100 11101 11110 11111 100000 Octal 00 01 02 03 04 05 06 07 10 11 12 13 14 15 16 17 20 21 22 23 24 25 26 27 30 31 32 33 34 35 36 37 40 Hexadecimal 0 1 2 3 4 5 6 7 8 9 A B C D E F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20

Pgina 35 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

SISTEMAS DE NUMERACIN
Prctica 1 - Pasar a base 10 los siguientes nmeros, de las bases indicadas: 1101 2 0,63
8

0,101 17,134

101,11

1,0111 2 0,FF 16

753 A5,3B

3A 16

16

2 - Pasar los siguientes nmeros de base 10 a la base indicada: 39 2 3,1 8 0,525 2 0,14 8 23,945 2 1068 16 123 8 61,6 16

3 Pasar el siguiente decimal a la base indicada con un error menor o igual al indicado Nmero 0,267 52,38 129,64 163,97 954,62 Base 2 2 2 8 16 Error 0,001 0,0001 0,1 0,0001 0,0001

4 - Pasar a las bases indicadas usando propiedad de base de potencia de otra base: 32 8 73 8
2

F1 16 1010 2

F1 16 10,10 2

16

16

5 - Realizar las siguientes sumas: 1010 + 0101 7354 +


2 2

1001 + 0110 F1E5 +

1110 + 1010 3231 +

16

Pgina 36 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

1123

ABC116

2123

6 - Realizar las siguientes restas: F91F 16 0101


16

0334 0137

1060 1776

7 - Realizar las siguientes operaciones por Complemento a la Base 10011 1012 001100112 000111112 011101012 000110012 001000112

8 - Realizar las siguientes restas en base 2. Los nmeros tienen signo. 01000 00101 00111 11001 11000 00110

9 - Realizar los siguientes productos. 0018 x 100


16 16

047 x 010

0018 x 010

18

18

10 - Escribir con notacin exceso 10000000 2 1010 -1100


2

- F1 16 - 513
8

3014

- 37 16

11 - Escribir como complemento a Dos (en 16 bits):

Pgina 37 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

35 10

- 47 10

F1 16

- 16 16

12 - Escribir como complemento a Dos (en 32 bits): - 93 10 - F3 16 - FF 16 - 16 16 - 10 10 - 31 10

13 - Pasar a base 10 los nmeros (16 bits complemento a dos): 1) 1000000000101000 3) 1001111011010111 2) 1110100000010101 4) 1000000000010101

14 - Pasar a base 10 los siguientes nmeros expresados como punto fijo sin signo (16 bits) 1000000000101000 1001111011010111 0110100000010101 0000000000010101

15 - Escribir con notacin exceso 10000000 2 1010 33


2

- F1 16 - 513
6

3014

- 37 16

16 - Escribir en base 2 y operar por complemento a la base

5349 317F

10

F1F0 16 + 10

-3511 39F1

10

16

-34312

16

Pgina 38 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

17 - Escribir como complemento a Dos (en 16 bits): 35 10 - 47 10 F1 16 - 16 16

18 - Escribir como complemento a Dos (en 32 bits): - 93 10 - F3 16 - FF 16 - 16 16 - 10 10 - 31 10

19 - Expresar en base 10 los siguientes nmeros dados en formato de Punto Flotante 35A1F 93900D ECF 3ED

20 Pasar a base 10 los nmeros (16 bits complemento a dos): 1) 1000000000101000 3) 1001111011010111 Realizar 1) + 2) y 1) - 4) 21 - Pasar a base 10 los siguientes nmeros expresados como punto fijo sin signo (16 bits) 1000000000101000 1001111011010111 22 - Pasar a Punto Flotante: 39 -5826 0,0103 -0,00002103 9F1 -74F28B 9F3,G1 -0,002A359 0110100000010101 0000000000010101 2) 0110100000010101 4) 0000000000010101

Pgina 39 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

23 - Decir que nmero decimal, representa el siguiente nmero expresado como Punto Flotante 9EC1935F 3EAC1000
16 16

CD940103 A E8 F5000

16 16

INTRODUCCIN A PASCAL
PROGRAMACIN
Los pasos necesarios para la creacin de un programa son: 1. Anlisis 2. Diseo del algoritmo 3. Construccin del programa (en un lenguaje de programacin) 4. Ejecucin 5. Validacin 6. Mantenimiento

ALGORITMO
Es una secuencia ordenada de pasos - sin ambigedades -, repetible, que es solucin de un determinado problema. Las caractersticas fundamentales que debe cumplir todo algoritmo son: a) Debe ser preciso e indicar el orden de realizacin de cada paso b) Debe estar definido (si se repite n veces los pasos se debe obtener siempre el mismo resultado) c) Debe ser finito (debe tener un nmero finito de pasos) d) Es independiente del lenguaje de programacin que se utilice La definicin de un algoritmo debe describir tres parte Entrada, Proceso, Salida.

PASCAL
Es un lenguaje de alto nivel, fuertemente tipeado (se debe definir el tipo de todos los datos), de propsito general, compilable, estructurado y procedimental. Un lenguaje compilable significa que todo programa ser deber pasar por los siguientes pasos: a) Ser escrito en un editor de texto (en un formato ASCII)

Pgina 40 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

b) Luego lo toma el Compilador comprueba que todas las instrucciones del programa estan escritas siguiendo la sintaxis de PASCAL. Si todo es correcto lo traduce a Lenguaje de Mquina (Assembler). c) Pasa posteriormente al Linkeador (o montador), une los distintos mdulos que pueden componer un programa, unifica los cdigos de los distintos subprogramas, y de los datos. Pasndolo por ltimo a cdigo de mquina.

TIPOS DE DATOS
Los diferentes objetos de informacin con los que un programa Pascal trabaja se conocen colectivamente como datos. Todos las datos tienen un tipo asociado can ellos. Un dato puede ser un simple carcter, tal como 's', un valor entero tal como 35 o un nmero real tal como 1415,92. Una operacin de suma no tiene sentido con caracteres, slo con nmeros. Por consiguiente, si el compilador detecta una operacin de suma de dos caracteres, normalmente producir un error. Incluso entre tipos numricos, la operacin de suma se almacena de modo distinto. Esto se debe a que nmeros enteros y reales se almacenan de modos diferentes. A menos que el programa conozca el tipo de datos, si es un valor entero a real, no Puede ejecutar correctamente la operacin de suma La asignacin de tipos a los datos tiene dos objetivos principales. 1. Detectar errores de operaciones en programas 2. Determinar cmo ejecutar las operaciones Pascal se conoce como lenguaje "fuertemente tipeado" (strongly.typed) o de tipos fuertes. Esto significa que todos las datos utilizados deben tener sus tipos declarados explcitamente y el lenguaje limita la mezcla de tipos en las expresiones. Pascal detecta muchos errores de programacin antes que el programa se ejecute. La ventaja de los lenguajes de tipos fuertes (ricos en tipos de datos) es que se gasta menos esfuerzo en la depuracin de programa, ya que el compilador detecta muchos de esos errores El tipo de un dato determina la naturaleza del conjunto de valores que puede tomar una variable. Otro concepto importante a tener en cuenta es la representacin interna de los nmeros, o al menos el espacio de memoria ocupado por una variable de un tipo dado. La unidad de medida de la capacidad de memoria, como ya hemos visto es el byte (octeto). Un byte se compone de ocho cifras binarias (bits) que Pueden tomar cada una el valor 0 1. Integer Boolean Char Enumerado Subrango Reales

Ordinales Tipos Simple

No Ordinales

Datos Estticos

Tipos Cadena

String Array

Tipos de Datos
Pgina 41 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

Registro Tipos Estructurado Conjunto Archivo Tipos procedimientos Procesos

Datos Dinmicos

Tipos Punteros

Pgina 42 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

Tipos Enteros

Tipo
byte integer longint shortint word

Rango
0 .. 255 -32768 .. 32767 -247483648 .. 24748367 -128 .. 127 0 .. 65535

Formato
1 2 4 1 2 Byte Bytes Bytes Byte Bytes

El tipo integer se almacena en memoria como 2 (dos) bytes, el bit de mayor peso de los dos bytes es el bit de signo. Se puede separar un entero en sus dos bytes utilizando las funciones internas Hi y Lo Hi devuelve el byte de mayor peso de los dos bytes de memoria Lo devuelve el byte de menor peso

Nmeros Reales
Tipo real single double extended comp Tipos carcter (Char) El tipo char es un tipo de datos que puede contener un solo carcter. Cada uno de estos caracteres puede ser expresado gracias al cdigo ASCII ampliado. Ejemplo A a b * 5 Se le puede asignar a una constante un carcter por medio de su cdigo #65 equivale a chr(65) equivale A #26 o ^Z cierre del archivo #27 tecla ESC #13 tecla ENTER Tipos lgicos (boolean) El tipo lgico (boolean) es, al igual que el carcter, parte de ISO Pascal estndar. Los valores de tipa lgico pueden tomar slo das valores posibles: true (verdadero) y false (falso). Al igual que el tipo char, el tipo boolean es un tipo ordinal, que significa que tiene un nmro fijo de posibles valores que existen en un orden definido. Una variable lgica ocupa slo un byte en memoria. Los valores lgicas son de tipo ordinal, y sus relaciones son: fase < true
Pgina 43 de 191

Rango 2.9x10-39 .. 1.7x1038 1.5x10-45 .. 3.4x1038 5.0x10-324 .. 1.7x10308 1.9x10-4932 .. 1.1x104932 -(263 +1) .. 263 +1

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

bytes 6 4 8 10 8

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

Tipos de datos definidos por el usuario Todos los tipos de datos estudiados hasta ahora son de tipo simple, predefinidos por Turbo y listos para utilizar. Sin embargo, uno de los aspectos ms potentes de Turbo Pascal es su capacidad para crear estructuras de datos a partir de estos datos simples. Los datos estructurados aumentan la legibilidad de los programas y simplifican su mantenimiento. Los tipos de datos definidas por el usuario se clasifican en:

Escalares definidos por el usuario (enumemdo y subrango) Registros Arrays Conjunto (set). Archivo (file). Puntero Procedimiento

Estos tipos de datos se vern en sucesivas clases. Tipo cadena (string) Un tipo string (cadena) es una secuencia de caracteres de cero o ms caracteres correspondientes al cdigo ASCII, escrito en una lnea sobre el programa y encerrada entre apstrofos. El tratamiento de cadenas es una caracterstica muy potente de Turbo Pascal que no contiene ISO Pascal estndar, aunque tiene mucha similitud con el tipo packed array. Ejemplos 'Turbo' Notas 'Ests de acuerdo' #13#10 ,

Una cadena sin nada entre las apstrofos se llama cadena nula o cadena vaca La longitud de una cadena es el nmero de caracteres encerrados entre los apstrofos. CONSTANTES Una constante es un valor que no puede cambiar durante la ejecucin del programa, recibe un valor en el momento de la compilacin del programa y este valor no puede ser modificado. Las constantes pueden ser constantes literales constantes con nombres o declaradas constantes expresin (slo en la versin 5.0) constantes de tipos (tipeadas)

Pgina 44 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

Las constantes deben ser declaradas antes de su utilizacin y pueden ser enteros o reales, caracteres o cadenas de caracteres, conjuntos o arrays, e inclusive de tipo enumerado 1.1.1.1.1.1 Constantes literales Una constante literal es un valor de cualquier tipo que se utiliza como tal. VolumenEsfera := 4/3 * Pi * Radio * Rdio * Rdio, 4 y 3 son constantes literales de valores 4 y 3.
1.1.1.1.1.1.1 Constantes con nombres

Son constantes que se identifican por un nombre y el valor asignado. Formato const identificador = valor, Ejemplos const Pi = 3.141592; DosPi = 2 * Pi; Direccion = $06; caracter = 'B'; cuenta = 625; Epsilon = 1E-4; Esc = #27; CRLF = ^M^J; {lee un valor real} { representa valor hexadecimal } { es un carcter } { lee un entero } { lee un real } { carcter de control } { secuencia CR/LF. retorno de carro/avance de lineal }

En Pascal estndar, la declaracin de constantes se sita inmediatamente despus de la cabecera Program. En Turbo Pascal no es obligatoria la situacin anterior, pero si recomendable. VARIABLES Las variables son objetos cuyo valor puede cambiar durante la ejecucin del programa. El cambio se produce mediante sentencia ejecutables. Todas las variables de un programa Pascal deben ser declaradas antes de ser usadas Declaraciones var variable1 : tipo1; variable2 : tipo2; .........................

Pgina 45 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

......................... variableN : tipoN; Ejemplos NumeroEmpleado : Integer; Horas : real; Tasas : real; Edad : Integer; Apellidos : string [30]; Letra1, Letra2, Letra3 : char; Num1, Num2 : integer; Notas Es buena prctica de programacin utilizar nombres de variables significativas que sugieren lo que ellas representan, ya que esto hace al programa ms legible y fcil de comprender, tambin es buena prctica incluir breves comentarios que indiquen cmo se utiliza la variable. Un comentario es cualquier frase encerrada entre llaves { } o bien entre signos (*, *) { nmero de empleado } { horas trabajadas } { tasa horaria } { edad del empleado } { apellidos del empleado }

SENTENCIAS Las sentencias describen las acciones algortmicas que pueden ser ejecutadas En general las sentencias se clasifican en, ejecutables (especifican operaciones de clculos aritmticos y entradas/salidas de datos) y no ejecutables (no realizan acciones concretas, ayudan a la legibilidad del programa, pero no afectan en la ejecucin del Programa). Las sentencias ejecutables aparecen en el cuerpo del programa a continuacin de la palabra reservada Begin LA SENTENCIA DE ASIGNACION La sentencia de asignacin se utiliza para asignar (almacenar) valores o variables. La asignacin es una operacin que sita un valor determinada en una posicin de memoria. la operacin de asignacin se demuestra en pseudocdigo con el smbolo '', para denotar que el valor situado a su derecha se almacena en la variable situada a la izquierda Formato Variable expresin variable identificador vlido declarado anteriormente expresin variable, constante o una expresin o frmula a evaluar En Pascal el operador '-' se sustituye por el smbolo := , que se denomina operador de asignacin
Pgina 46 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

Variable := expresin El valor de expresin se asigna a la variable. Precaucin El tipo de expresin debe ser del mismo tipo que el de la variable. Ejemplos A :=16 ; 16 se asigna a la variable A Inicial := 'LJ; se asigna LJ a la variable Inicial Interruptor :=true; se asigna el valor true. (verdadero) a Interruptor N1 := N2; el valor de la variable N1 se cambia por el valor de la variable N2 N1 := N1 + 5; el valor de la variable N1 se incrementa en 5 Car := #70; se asigna a la variable Car el carcter 70 del cdigo ASCII, es decir F

Operaciones especiales de asignacin Contador Un contador es una variable que se incrementa, cuando se ejecuta, en una unidad o en una cantidad constante. Contador .= 25 Contador := Contador + 1; N = 15 N :=N + 1; Al ejecutar Las sentencias de asignacin, los nuevos valores de Contador y N son 25+1=26 y 50+1 =51. Acumulador Es una variable que se incrementa en una cantidad variable. Suma := Suma + x; x es una vanable Si x vale 7 y Suma 40, el nuevo valor de Suma ser 47 Las operaciones contador y acumulador son de gran utilidad en programacin. EXPRESIONES Y OPERACIONES ARITMETICAS Las variables y constantes estudiadas anteriormente se pueden procesar utilizando operaciones y funciones adecuadas a sus tipos En este punto se examinarn las expresiones y operaciones que se utilizan con datos numricos.
1.1.1.1.1.1.2 Operadores aritmticos: +, -, *, /

x: = 5 x := x + 1;

Los operadores aritmticos (+,-, *) pueden ser utilizados con tipos enteros o reales. Si ambos son enteros, el resultado es entero; si alguno de ellos es real, el resultado es real. 2+3 = 5
Pgina 47 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

2+3.0 = 5.0 Operadores aritmticos div y mod Solo se pueden utilizar con enteros, la salida es otro entero. Div devuelve el valor de la divisin entera y Mod da el resto de la divisin entera. 17 DIV 5 3 17 MOD 5 2 Reglas de expresiones (prioridad) Se respeta las mismas prioridades del lgebra. OPERACIONES ENTRADA/SALIDA Los datos se pueden almacenar en memoria de tres formas diferentes: asociados con constantes, asignados a una variable con una sentencia de asignacin o una sentencia de lectura. Ya se han examinado las dos primeras. El tercer mtodo, la sentencia de lectura, es cl ms indicado si se desea manipular diferentes datos cada vez que se ejecuta cl problema. Adems. la lectura de datos permite asignar valores desde dispositivos hasta archivos externos (por ejemplo, un teclado o una unidad de disco) en memoria se denomina operacin de entrada o lectura A medida que se realizan clculos en un programa, se necesitan visualizar los resultados Esta operacin se conoce como operacin de salida o de escritura En los algoritmos las instrucciones de entrada/salida escritas en pseudocdigo son: leer (listas de variables entrada) leer (v. z, x) escribir (listas de variables salida) escribir (a, b, c) En Pascal todas las operaciones de entrada/salida se realizan ejecutando unidades de programa especiales denominadas procedimientos de entrada/salida que forman parte del compilador Pascal y sus nombres son identificadores estndar: Procedimientos de entrada Read ReadLn procedimientos de salida Write WriteLn La escritura de resultados (salida) Los programas para ser tiles deben proporcionar informacin de salida (resultados) Esta salida toma informacin de la memoria y la sita (almacena) en: la pantalla, en un dispositivo de almacenamiento (disco duro o flexible), o en un puerto de E/S (puertos serie para comunicaciones o impresoras, normalmente paralelos) Procedimiento WriteLn El propsito de WriteLn es escribir (visualizar) informacin en la pantalla Formato WriteLn (tem, tem..): 1 tem el objeto que desea visualizar: un valor literal (entero, real, un carcter una cadena, o un valor lgicotrue o false). una constante con nombre, una variable, o una llamada a funcin

Pgina 48 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

Cuando se ejecuta el procedimiento WriteLn, se visualizan todos los elementos en el orden dado y en la misma lnea. Al terminar de visualizar toda la lnea, el cursor avanza (salta) al comienzo de la siguiente lnea. Procedimiento Write Como se ha dicho, despus de ejecutar el procedimiento WriteLn, el cursor avanza (salta) al comienzo de la siguiente lnea. Si se desea que el cursor quede en ;a misma lnea se debe utilizar el procedimiento Write. Formatos de salida Turbo Pascal permiten controlar en cierta medida las instrucciones de salida que presentan resultados. Es posible especificar el nmero de posiciones del campo de escritura. Para los nmeros reales es posible precisar el nmero de decimales deseado. Se pueden utilizar especificadores de formato de campo para definir dicha anchura. x := 265.7892 WriteLn(x :10 :4); WriteLn(x :10 :2); WriteLn(x :6 :4); X := 14; WriteLn(x :4); X := AB WriteLn(x :4); 265.7892 265.79 ********* 14 AB

Lo anteriormente expresado es vlido para el proceso WRITE Impresin de resultados (salidas a impresora) Las salidas a pantalla se obtienen mediante los procedimientos Write y WriteLn. Si se desea enviar resultados a otro dispositivo, es preciso especificar el nombre del archivo como primer argumento de las instrucciones Write y WriteLn. Para poder realizar la operacin de enviar salidas a la impresora, en lugar de a la pantalla, se necesita la unidad Printer. Printer define un archivo llamado lst y asocia este archivo al puerto de comunicaciones LPTI (impresora) del DOS. Se pueden enviar datos a la impresora, incluyendo lst en las instrucciones Write y WriteLn. Es preciso, sin embargo, definir previamente en la seccin uses la unidad printer. Ejemplo uses Printer var ......................... begin .........................

Pgina 49 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

Write (Lst, 'el .......................... ) WriteLn (Lst, 'pl............ ) ......................... end. Este programa imprime en la impresora: Regla Siempre que desee escribir en impresora, deber incluir en su programa la lnea uses printer y luego aadir en cada sentencia Write/WriteLn la palabra lst La entrada de datos (lectura) Los datos que se pueden leer son: enteros, reales, caracteres o cadenas. No se puede leer un boolean o un elemento de tipo enumerado. Los datos estructurados, arrays, registros o conjuntos, no se pueden leer globalmente y se suele recurrir a disear procedimientos especficos. Los procedimientos de lectura son Read y ReadLn. Formato Read (van, var2, ...); ReadLn (van, var2, ...); var igual que WRITE La entrada de datos desde el teclado se hace un valor cada vez. Las instrucciones ReadLn y Read esperan hasta que se pulsa la tecla INTRO (RETURN o ENTER) antes de asignar un valor a la variable. Ejemplo ReadLn (Nombre); ReadLn (Horas); Read (Tasas) El usuario debe introducir los datos de entrada en el orden en que aparecen las instrucciones read, Diferencias entre Read y ReadLn En Read, despus de pulsar la tecla INTRO, el cursor permanece inmediatamente despus del ltimo carcter introducido. En ReadLn, el cursor se enva al principio de la siguiente lnea, tras pulsar la tecla INTRO. No es aconsejable ingresar ms de un dato por instruccin. OPERACIONES BASICAS DE UTILIDAD

Pgina 50 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

En este punto se describen dos utilidades: Clrscr GotoXY limpieza o borrado de la pantalla movimiento del cursor

El borrado (limpieza) de la pantalla: Clrscr Las rdenes o procedimientos que podr utilizar a partir de ahora: Clrscr y GotoXY, aunque posteriormente se volvern a mencionar. Ambos procedimientos pertenecen a la unidad Crt. La orden (procedimiento) Clrscr borra (limpia) la pantalla (ventana actual) y sita el cursor en la esquina superior izquierda. Turbo Pascal considera las coordenadas de la esquina superior izquierda : 1,1. Para poder utilizar Clrscr, deber declarar en la clusula uses la unidad Crt. Regla Es una buena costumbre utilizar en todos los programas la unidad Crt, mediante la clusula uses; ello permite el uso de Clrscr y GotoXY, entre otras rutinas de utilidad. Movimiento del cursor La orden (procedimiento) GotoXY mueve el cursor a la posicin x, y, donde x es la columna (contando de izquierda a derecha) e y es la fila (contando de arriba-abajo). GotoXY (x, y) La esquina superior izquierda es 1.1. GotoXY requiere el uso de la unidad Crt. EL ESTILO DE PROGRAMACIN El buen estilo de programacin es, sin lugar a duda, una de las caractersticas ms notables que debe tener un programador. Un programa con buen estilo es ms fcil de leer, de corregir -si contiene un error- y de mantener. Aunque la experiencia proporciona el estilo, existen una serie de reglas que se recomiendan seguir desde el principio del aprendizaje en programacin. Sangrado (indentacin) Aunque los programas escritos en Pascal no exigen reglas estrictas en su escritura, es prctica habitual realizar sangrado en los bloques y unidades de programas fundamentales Comentarios La legibilidad de los programas aumenta considerablemente utilizando comentarios. Un comentario es un texto explicativo ms o menos largo, situado en el programa e ignorado por el compilador. Los comentarios no se consideran (son invisibles) en la fase de compilacin y ejecucin, pero de importancia primordial en las fases de anlisis, puesta a punto y mantenimiento.

Pgina 51 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

Los comentarios son una parte importante de la documentacin de un programa, ya que ayudan al programador y a otras personas a la comprensin del programa. No es raro encontrar programas en los cuales los comentarios ocupan ms sitio, incluso, que las propias instrucciones. Formato {comentario} (* comentario *) Cualquiera de los dos formatos pueden ser utilizados indistintamente. Los comentarios pueden aparecer en una sola lnea de programa, al final de una lnea despus de una sentencia, o embebido en una sentencia. En general se debe incluir en las diferentes partes de un programa, pero con la condicin de que sean significativos. Se deben evitar comentarios superfluos o redundantes, como A := B-C (el valor de B-C se asigna a A) cuyo significado es evidente. Es conveniente situar comentarios en la cabeza que al menos especifiquen: . el nombre del programador, . la fecha de la versin actual, . una breve descripcin de lo que hace el programa El siguiente programa ilustra modos de especificar comentarios. program Prueba; {* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *} {programa escrito por : Juan Perez } {Fecha : } {Version : } {Nombre del archivo : } {Este programa permite listar direcciones postales} {* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *} const Es posible anidar comentarios con delimitadores de tipo diferentes, pero no es posible con delimitadores del mismo tipo. El programador puede tener libertad para los comentarios. { un comentario puede extenderse en varias lneas o paginas de programas} {comentarios anidados (* como este caso *)} Lneas en blanco Otro medio de hacer un programa ms legible es dejar lneas en blanco entre partes importantes o que estn lgicamente separados. Es muy frecuente dejar lneas en blanco entre la cabecera y la seccin de declaraciones, entre sus diferentes partes, as como entre los procedimientos y funciones, entre s y con el programa principal, etc.

Pgina 52 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

Eleccin de nombres de identificadores significativos Las variables, constantes e incluso nombres de subprogramas y programas deben ser significativos para orientar al usuario sobre lo que representan: x, As, JJ no son identificadores significativos. Salario := Horas * SalarioHoras; Nomina_Mayor >= 10000; Nombre_Apellidos = 'Mortimer'; Los nombres es conveniente que comiencen con una letra mayscula, y si son largos es preferible utilizar palabras compuestas o con subrayado. Evitar puntos y comas superfluos Antes de las palabras end y until se puede suprimir el separador punto y coma. Los puntos y comas espurios pueden afectar al mal funcionamiento de un programa. Lneas de programa mayores de 80 caracteres El editor Turbo permite escribir lneas de hasta 126 caracteres de longitud, aunque en la panta lla slo se ven 80 columnas a la vez. Utilizando las teclas HOME (Inicio), END (Fin) y de movimiento de cursor se puede desplazar el texto a izquierda y derecha. Alinear operaciones (o separadores) en lneas consecutivas Cuando diferentes lneas consecutivas contienen el mismo operador (o separador), es buena prctica alinear estos smbolos utilizando blancos si es necesario. for j := 1 to 10 do (operador =) begin Prueba := Random; Total := Total + Prueba; Valor [j]:= Prueba; WriteLn l'Estrella errante') end; Blancos no significativos

Poner un espacio en cada lado de un operador if A = B then Encontrado := true; representa un blaco

Incluir un espacio despus de los signos de puntuacin: coma, punto y coma, dos puntos.

Otras reglas de escritura

Poner cada sentencia en una lnea distinta.

Pgina 53 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

Las palabras reservadas program, const, var, procedure, function, uses, begin, end deben ir en lneas distintas. Si una sentencia contina en otra lnea, se deben sangrar la(s) linea(s) siguientes. Insertar lineas en blanco antes de la seccin const, var, uses, procedure, function y el begin del programa principal; y en cualquier segmento o bloques de sentencias significativas. Utilizar espacios entre los elementos de una sentencia para hacerla ms legible.

PUESTA A PUNTO DE PROGRAMAS En esta seccin se incluirn: Tcnicas de resolucin de problemas y de programacin (diseo de programas), errores tpicos de programacin y estilo de programacin. Tcnicas de programacin (diseo de programas)
1. Los programas no pueden considerarse correctos hasta que han sido validados

utilizando un rango amplio de datos de test. 2. Los programas deben ser legibles y comprensibles. 3. Utilizar comentarios significativos que describan el propsito de un programa o segmentos de programas, as como elementos importantes de programas, variables, funciones, etc. 4. Etiquetar todas las salidas producidas por un programa 5. Los programas deben ser eficientes. Por ejemplo, clculos innecesarios: Se deben evitar calcular dos veces cualquier variable. 6. Programas generales y flexibles. Deben ser relativamente fciles de modificar para solucionar un problema similar sin necesidad de cambiar mucho el programa. El uso de las constantes limita la flexibilidad. 7. Antes de utilizar variables, asegurarse de que son inicializadas por el programa. 8. En programacin interactiva, incluya siempre una lnea con un mensaje de aviso al usuario cuando desee introducir datos. 9. Los programas deben hacer -en general- siempre "eco" de la entrada. Antes de escribir un programa en Pascal se deben seguir los pasos:

Anlisis del programa (entrada, salida, datos auxiliares y proceso). Diseo del algoritmo (con preferencia pseudocdigo), siguiendo -esencialmente- el mtodo descendente.

Errores tpicos de programacin


1. Las constantes reales deben tener al menos un dgito antes y al menos un dgito despus

del punto decimal.


2. Las constantes de cadena deben estar encerradas entre apstrofos (simples comillas).

Un apstrofo se representa con un par de apstrofos 'Kant"s'.


3. Los parntesis dentro de expresiones deben concordar. Tantos parntesis a izquierda

como a derecha. 4. La divisin entera se representa por div y la real por /. 5. Las multiplicaciones deben ser indicadas por *.

Pgina 54 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

Puntos y comas (ausencia, exceso, superfluos). Debe haber un punto detrs del end final de cada programa. Todos los identificadores deben ser declarados. Todas las variables estn inicialmente indefinidas (Turbo Pascal no sigue esta regla -inicializa a cero o cadena vacia-, pero es conveniente la inicializacin). 10. Un signo igual (=) se utiliza en declaraciones de constantes o como signo igual. El operador := se utiliza en sentencias de asignacin. No confundir = con := (ojo, programadores de BASIC). 11. Los problemas que implican nmeros de tipo real no pueden utilizar test/comparaciones para comprobar exactitud de igualdad o desigualdad (= o < > ). Como los nmeros estn aproximados en la computadora, no tiene sentido la igualdad/desigualdad. 12. Es buena idea verificar errores tales como divisin por cero y raices cuadradas de nmeros negativos dentro de un programa. Estilo de programacin

6. 7. 8. 9.

Un programa Turbo Pascal se prepara con el editor. Despus de teclear el programa completo se sale al men principal y se compila el programa. Si hay errores, se vuelve al editor; en caso contrario, se guarda y ejecuta. Los errores de un programa pueden ser: sintaxis, en tiempo de ejecucin y lgicos.

La planificacin de un programa comienza con el anlisis del problema [especificaciones de entrada y salida (E/S), el proceso necesario para producir la salida desde la entrada] y sigue con el algoritmo (pseudocdigo). Especialmente en programas grandes, seguir el diseo descendente y refinamiento sucesivo. A continuacin debe realizarse la documentacin externa, la escritura del programa con toda la documentacin interna (comentarios) necesaria. Ejemplo: Se ingresan dos nmeros enteros, obtener su suma. ANLISIS Qu ingresa? Dos nmeros enteros Qu sale? Otro nmero entero Qu vincula la entrada con la salida? La operacin suma Pseudocdigo Inicio Leo A (entero) Leo B (entero) Obtengo C como suma de A y B Imprimo C

Pgina 55 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

Fin Diagrama NS Inicio Leo A Leo B C A + B Imprimo C Fin Cdigo Pascal program Sumas; {* Este es el primer programa en PASCAL *} {* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *****} {* programa escrito por : Fernando Javier LAGE *} {* Fecha : 7 de abril de 1998 *} {* Version : 01 *} {* Nombre del archivo : progra01 *} {* Este programa permite sumar dos nmeros enteros *} {* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *-***} uses crt,dos; {* declaraciones de librerias *} const Enter = #13; {* declaraciones de constantes *} {* type *} {* en este programa no hay declaraciones de tipos *} var {* definicin de las variables *} A, B, C : Integer;

begin {* Comienzo del programa *} ClrScr; {* Ingreso de datos *} Write ('Ingrese el primer valor '); ReadLn(A); Write ('Ingrese el segundo valor '); ReadLn(B); {* Clculo de los resultados *} C := A + B; {* Salida de la informacin *} WriteLn ('El resultado es = ', C:6);

Pgina 56 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

{* Esta estructura se ver en prximas clases *} Repeat Until Readkey = Enter end. {* Fin del programa *} Nota En el ejemplo tenemos una tpica estructura secuencial sin condiciones, ni ciclos repetitivos, como se vern en el prximo ejemplo Las estructuras secuenciales son aquellas donde todas las instrucciones se ejecutan una despus de la otra. En ellas no hay repeticin ni ejecucin de un grupo seleccionado. Un problema tpico de este tipo de estructura es el siguiente. Ejemplo: Un comerciante requiere un programa que realice las siguientes tareas: Se ingrese el costo de un producto, a dicho costo le cargue un 30% y al valor as obtenido le incremente un 20% por IVA. El programa deber sacar por pantalla el costo del producto, el precio final, y el valor del impuesto. Pseudocdigo Inicio Definir constantes Leer el costo Calcular el costo ms el 30% Calcular el valor del impuesto Calcular el Precio Imprimir Costo Imprimir Impuesto Imprimir Precio Fin Diagrama N-S gan 30.0 iva 20.0 Leer el costo Costo1 costo * (1+gan/100) Impuesto costo1 * iva /100 Precio Costo1 + Impuesto Imprimir Costo Imprimir Impuesto Imprimir Precio

Pgina 57 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

Cdigo Pascal program Primer_Ejemplo; {* Este es el primer programa en PASCAL *} {* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *****} {* programa escrito por : Fernando Javier LAGE *} {* Fecha : 7 de abril de 1998 *} {* Version : 01 *} {* Nombre del archivo : progra01 *} {* Este programa permite sumar dos nmeros enteros *} {* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *-***} uses crt,dos; {* declaraciones de librerias *} const gan = 30.0; iva = 20.0; {* declaraciones de las constantes *} var {* definicin de las variables *} costo : real; costo1, impuesto, precio : real;

begin {* Comienzo del programa *} clrscr; {* Limpieza de pantalla *} write ('Ingrese el costo: '); {* Salida de mensaje *} readln (costo); {* Ingreso del dato *} costo1 := costo * (1 + gan/100); {* Clculo de la ganancia *} impuesto := costo1 * (iva /100); {* Clculo del impuesto *} precio := costo1 + impuesto; {* Clculo del precio final *} writeln ('Costo : ', costo); {* Salida de mensaje y variable *} writeln ('Impuesto : ', impuesto); {* Idem anterior *} writeln ('Precio : ', precio); {* Idem anterior *} end. {* Fin del programa *}

Documentacin de un programa La documentacin de un programa, es el conjunto de todos los pasos, documentos necesarios para la creacin y mantenimiento de un programa. El primer documento que tiene que existir en un programa es la solicitud del mismo, quien, porqu y para que lo solicita. El segundo es el contrato, sin un contrato no existe ningn proyecto de nada. En el queda especificado, el quien solicita el proyecto, el quien se hace responsable de su ejecucin, el porque solicita el proyecto, el cuanto va a costar ($), el cuando va a estar listo, el como se pagar, que lo que se va a entregar. La documentacin se clasifica en documentacin interna y externa

Pgina 58 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

a) Documentacin Interna: esta compuesta por los comentarios que le colocamos en el

interior del programa fuente. Como dicho programa nunca se entrega (a menos que por contrato se especifique lo contrario), esta documentacin es privada.
b) Documentacin Externa: Como se dice comienza con la solicitud y continua con el

contrato. Se subdivide esta documentacin en pblica y privada.


1.

Privada: esta compuesta por todos aquellos documentos que solo esta en el dominio de la empresa que crea el programa. Esta compuesta por algoritmos matemticos en que se basa el programas, diagramas de bloques, diagramas de estructuras, mdulos, manuales internos.

2. Pblica: esta compuesta por los manuales del usuario.

Ejercitacin 1. Escribir un programa que lea 2 valores y que los muestre por pantalla 2. Al problema anterior agrguele el ttulo en pantalla "LECTURA"
3. Modifique el problema anterior para que obtenga la suma de los dos valores, cambie el ttulo

por "SUMA" el cual debe aparecer subrayado, y antes del resultado debe aparecer el mensaje "El valor de la suma es XXX" (XXX es el resultado de la operacin)
4. Escriba un programa en donde por pantalla se pida que ingrese su nombre, y como salida

tenga el siguiente mensaje "Su nombre es HHHHHH" (HHHHH es el nombre ingresado).


5. Modifique el programa anterior de manera que se solicite el nombre a dos personas y aparezca

un cartel que diga "Buenos das XXXXX y YYYYY .... Comenzamos a trabajar?
6. Escribir un programa al cual ingrese la velocidad de un mvil expresada en metros por segundo

e imprima en pantalla la velocidad en kilmetros por hora.


7. Modifique el programa anterior de manera tal que por pantalla aparezca el siguiente cartel. "Los

XXX m/s equivalen a YYY K/H" (Donde XXX es el valor ingresado e YYY es el resultado)
8. Un constructor sabe que necesita 0,5 metros cbicos de arena por metro cuadrado de revoque

a realizar. Hacer un programa donde ingrese las medidas de una pared (largo y alto) expresada en metros y obtenga la cantidad de arena necesaria para revocarla.
9. Desarrollar un programa que dado el largo y el ancho de un campo, permita determinar cuantos

metros de alambre sern necesarios para colocar le al permetro 5 hilos de alambrado. Y que cantidad de Soja se espera obtener, si el rendimiento de la misma es 145 quintales por hectrea.
10. Escriba un programa que pida el ingreso del valor de cada una de las races de una ecuacin

cuadrtica. En funcin de ellos reconstruya la ecuacin y la muestre por pantalla.


11. Escriba un programa donde se ingrese el tiempo necesario para un cierto proceso en horas,

minutos y segundos. Se calcule el costo total del proceso sabiendo que el costo por segundo es 0,25$. (Debe salir por pantalla el tiempo expresado en horas, minutos y segundos, el costo por segundo y el costo total)

Pgina 59 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

12. Una farmacia aplica al precio de los remedios el 10% de descuento. Hacer un programa que

ingresado calcule el descuento y el precio final. Sacando por pantalla la siguiente imagen: Precio de producto XXX.XX Descuento YY.YY -----------Valor a pagar RRR.RR
13. La misma farmacia para la obra social OSZOPAPA, realiza el siguiente descuento: 70% por la

obra social, y sobre ese resultado le aplica el 40% por cuenta de la propia farmacia (lo que ellos denominan el 70% + 40%). Cree un programa que calcule el precio final que pagar un afiliado a esa obra social por un remedio, y disee una salida equivalente a la del problema anterior.
14. Se necesita un programa que permita conocer el resultado del diseo de un tanque en forma

de cilindro. Los datos que debe pedir el programa es el radio de la base y la altura. En funcin del mismo se calcular. Volumen que puede almacenar. Cantidad de chapa necesaria, cantidad que se debe pedir (ya que chapa circular no viene, viene en chapas rectangulares o cuadradas y el costo de la chapa es 2,25$ el metro cuadrado. Deber salir por pantalla la siguiente informacin: Radio XXX m Altura YYY m Volumen ZZZ m cbicos Chapa base y techo RRR * UUU m Chapa lateral LLL * JJJ m Sup. Total de la chapa SSS.SS m cuadrados Costo CCCC.CC $
15. Los propietarios de la pizzera "El Morn Binario" desean que se les haga un programa

interactivo que solicite al usuario el dimetro de la pizza en centmetros y la cantidad de ingredientes extras que se quiere agregar. Como resultado de esto el programa deber mostrar por pantalla el precio ce venta de la misma. Dicho precio se calcula de la siguiente manera. a)El precio de venta de la pizza se obtiene recargando un 150% en costo total
b)El costo bsico (pizza sin ingredientes extras) es de 0,016 $/cm2 c)El costo de cada ingrediente agregado a la pizza base es de 0,003 $/cm2

Se hace notar que como es un programa de tipo comercial la pantalla deber tener el nombre de la pizzera en la parte superior de la pantalla y un saludo genrico para el cliente como "Buenos das seor" (puede reemplazarse por uno que sea personalizado, solicitandole el nombre al cliente y luego usndolo), y se le deber solicitar cada dato "el usuario no es adivino" y mostrar el costo final. TIPOS DE DATOS Los diferentes objetos de informacin con los que un programa Pascal trabaja se conocen colectivamente como datos. Todos las datos tienen un tipo asociado can ellos. Un dato puede ser un simple carcter, tal como 's', un valor entero tal como 35 o un nmero real tal como 1415,92. Una operacin de suma no tiene sentido con caracteres, slo con nmeros. Por consiguiente, si el

Pgina 60 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

compilador detecta una operacin de suma de dos caracteres, normalmente producir un error. Incluso entre tipos numricos, la operacin de suma se almacena de modo distinto. Esto se debe a que nmeros enteros y reales se almacenan de modos diferentes. A menos que el programa conozca el tipo de datos, si es un valor entero a real, no Puede ejecutar correctamente la operacin de suma La asignacin de tipos a los datos tiene dos objetivos principales. 1. Detectar errores de operaciones en programas 2. Determinar cmo ejecutar las operaciones Pascal se conoce como lenguaje "fuertemente tipeado" (strongly.typed) o de tipos fuertes. Esto significa que todos las datos utilizados deben tener sus tipos declarados explcitamente y el lenguaje limita la mezcla de tipos en las expresiones. Pascal detecta muchos errores de programacin antes que el programa se ejecute. La ventaja de los lenguajes de tipos fuertes (ricos en tipos de datos) es que se gasta menos esfuerzo en la depuracin de programa, ya que el compilador detecta muchos de esos errores El tipo de un dato determina la naturaleza del conjunto de valores que puede tomar una variable. Otro concepto importante a tener en cuenta es la representacin interna de los nmeros, o al menos el espacio de memoria ocupado por una variable de un tipo dado. La unidad de medida de la capacidad de memoria, como ya hemos visto es el byte (octeto). Un byte se compone de ocho cifras binarias (bits) que Pueden tomar cada una el valor 0 1. Integer Boolean Char Enumerado Subrango Reales

Ordinales Tipos Simple

No Ordinales

Datos Estticos

Tipos Cadena

String Array Registro

Tipos de Datos
Tipos Estructurado

Conjunto Archivo Tipos procedimientos Procesos

Datos Dinmicos
Tipos Enteros

Tipos Punteros

Tipo

Rango
Pgina 61 de 191

Formato

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

byte integer longint shortint word

0 .. 255 -32768 .. 32767 -247483648 .. 24748367 -128 .. 127 0 .. 65535

1 2 4 1 2

Byte Bytes Bytes Byte Bytes

El tipo integer se almacena en memoria como 2 (dos) bytes, el bit de mayor peso de los dos bytes es el bit de signo. Se puede separar un entero en sus dos bytes utilizando las funciones internas Hi y Lo Hi devuelve el byte de mayor peso de los dos bytes de memoria Lo devuelve el byte de menor peso

Nmeros Reales
Tipo real single double extended comp Tipos carcter (Char) El tipo char es un tipo de datos que puede contener un solo carcter. Cada uno de estos caracteres puede ser expresado gracias al cdigo ASCII ampliado. Ejemplo A a b * 5 Se le puede asignar a una constante un carcter por medio de su cdigo #65 equivale a chr(65) equivale A #26 o ^Z cierre del archivo #27 tecla ESC #13 tecla ENTER Tipos lgicos (boolean) El tipo lgico (boolean) es, al igual que el carcter, parte de ISO Pascal estndar. Los valores de tipa lgico pueden tomar slo das valores posibles: true (verdadero) y false (falso). Al igual que el tipo char, el tipo boolean es un tipo ordinal, que significa que tiene un nmro fijo de posibles valores que existen en un orden definido. Una variable lgica ocupa slo un byte en memoria. Los valores lgicas son de tipo ordinal, y sus relaciones son: fase < true Rango 2.9x10-39 .. 1.7x1038 1.5x10-45 .. 3.4x1038 5.0x10-324 .. 1.7x10308 1.9x10-4932 .. 1.1x104932 -(263 +1) .. 263 +1 Cifras 11-12 7-8 15-16 19-20 19-20 bytes 6 4 8 10 8

Pgina 62 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

Tipos de datos definidos por el usuario Todos los tipos de datos estudiados hasta ahora son de tipo simple, predefinidos por Turbo y listos para utilizar. Sin embargo, uno de los aspectos ms potentes de Turbo Pascal es su capacidad para crear estructuras de datos a partir de estos datos simples. Los datos estructurados aumentan la legibilidad de los programas y simplifican su mantenimiento. Los tipos de datos definidas por el usuario se clasifican en:

Escalares definidos por el usuario (enumemdo y subrango) Registros Arrays Conjunto (set). Archivo (file). Puntero Procedimiento

Estos tipos de datos se vern en sucesivas clases. Tipo cadena (string) Un tipo string (cadena) es una secuencia de caracteres de cero o ms caracteres correspondientes al cdigo ASCII, escrito en una lnea sobre el programa y encerrada entre apstrofos. El tratamiento de cadenas es una caracterstica muy potente de Turbo Pascal que no contiene ISO Pascal estndar, aunque tiene mucha similitud con el tipo packed array. Ejemplos 'Turbo' Notas 'Ests de acuerdo' #13#10 ,

Una cadena sin nada entre las apstrofos se llama cadena nula o cadena vaca La longitud de una cadena es el nmero de caracteres encerrados entre los apstrofos. CONSTANTES Una constante es un valor que no puede cambiar durante la ejecucin del programa, recibe un valor en el momento de la compilacin del programa y este valor no puede ser modificado. Las constantes pueden ser constantes literales constantes con nombres o declaradas constantes expresin (slo en la versin 5.0) constantes de tipos (tipeadas) Las constantes deben ser declaradas antes de su utilizacin y pueden ser enteros o reales, caracteres o cadenas de caracteres, conjuntos o arrays, e inclusive de tipo enumerado

Pgina 63 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

1.1.1.1.1.2 Constantes literales Una constante literal es un valor de cualquier tipo que se utiliza como tal. VolumenEsfera := 4/3 * Pi * Radio * Rdio * Rdio, 4 y 3 son constantes literales de valores 4 y 3.
1.1.1.1.1.2.1 Constantes con nombres

Son constantes que se identifican por un nombre y el valor asignado. Formato const identificador = valor, Ejemplos const Pi = 3.141592; DosPi = 2 * Pi; Direccion = $06; caracter = 'B'; cuenta = 625; Epsilon = 1E-4; Esc = #27; CRLF = ^M^J; {lee un valor real} { representa valor hexadecimal } { es un carcter } { lee un entero } { lee un real } { carcter de control } { secuencia CR/LF. retorno de carro/avance de lineal }

En Pascal estndar, la declaracin de constantes se sita inmediatamente despus de la cabecera Program. En Turbo Pascal no es obligatoria la situacin anterior, pero si recomendable. VARIABLES Las variables son objetos cuyo valor puede cambiar durante la ejecucin del programa. El cambio se produce mediante sentencia ejecutables. Todas las variables de un programa Pascal deben ser declaradas antes de ser usadas Declaraciones var variable1 : tipo1; variable2 : tipo2; ......................... ......................... variableN : tipoN;

Pgina 64 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

Ejemplos NumeroEmpleado : Integer; Horas : real; Tasas : real; Edad : Integer; Apellidos : string [30]; Letra1, Letra2, Letra3 : char; Num1, Num2 : integer; Notas Es buena prctica de programacin utilizar nombres de variables significativas que sugieren lo que ellas representan, ya que esto hace al programa ms legible y fcil de comprender, tambin es buena prctica incluir breves comentarios que indiquen cmo se utiliza la variable. Un comentario es cualquier frase encerrada entre llaves { } o bien entre signos (*, *) { nmero de empleado } { horas trabajadas } { tasa horaria } { edad del empleado } { apellidos del empleado }

SENTENCIAS Las sentencias describen las acciones algortmicas que pueden ser ejecutadas En general las sentencias se clasifican en, ejecutables (especifican operaciones de clculos aritmticos y entradas/salidas de datos) y no ejecutables (no realizan acciones concretas, ayudan a la legibilidad del programa, pero no afectan en la ejecucin del Programa). Las sentencias ejecutables aparecen en el cuerpo del programa a continuacin de la palabra reservada Begin LA SENTENCIA DE ASIGNACION La sentencia de asignacin se utiliza para asignar (almacenar) valores o variables. La asignacin es una operacin que sita un valor determinada en una posicin de memoria. la operacin de asignacin se demuestra en pseudocdigo con el smbolo '', para denotar que el valor situado a su derecha se almacena en la variable situada a la izquierda Formato Variable expresin variable identificador vlido declarado anteriormente expresin variable, constante o una expresin o frmula a evaluar En Pascal el operador '-' se sustituye por el smbolo := , que se denomina operador de asignacin

Pgina 65 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

Variable := expresin El valor de expresin se asigna a la variable. Precaucin El tipo de expresin debe ser del mismo tipo que el de la variable. Ejemplos A :=16 ; 16 se asigna a la variable A Inicial := 'LJ; se asigna LJ a la variable Inicial Interruptor :=true; se asigna el valor true. (verdadero) a Interruptor N1 := N2; el valor de la variable N1 se cambia por el valor de la variable N2 N1 := N1 + 5; el valor de la variable N1 se incrementa en 5 Car := #70; se asigna a la variable Car el carcter 70 del cdigo ASCII, es decir F

Operaciones especiales de asignacin Contador Un contador es una variable que se incrementa, cuando se ejecuta, en una unidad o en una cantidad constante. Contador .= 25 Contador := Contador + 1; N = 15 N :=N + 1; Al ejecutar Las sentencias de asignacin, los nuevos valores de Contador y N son 25+1=26 y 50+1 =51. Acumulador Es una variable que se incrementa en una cantidad variable. Suma := Suma + x; x es una vanable Si x vale 7 y Suma 40, el nuevo valor de Suma ser 47 Las operaciones contador y acumulador son de gran utilidad en programacin. EXPRESIONES Y OPERACIONES ARITMETICAS Las variables y constantes estudiadas anteriormente se pueden procesar utilizando operaciones y funciones adecuadas a sus tipos En este punto se examinarn las expresiones y operaciones que se utilizan con datos numricos.
1.1.1.1.1.2.2 Operadores aritmticos: +, -, *, /

x: = 5 x := x + 1;

Los operadores aritmticos (+,-, *) pueden ser utilizados con tipos enteros o reales. Si ambos son enteros, el resultado es entero; si alguno de ellos es real, el resultado es real. 2+3 = 5
Pgina 66 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

2+3.0 = 5.0 Operadores aritmticos div y mod Solo se pueden utilizar con enteros, la salida es otro entero. Div devuelve el valor de la divisin entera y Mod da el resto de la divisin entera. 17 DIV 5 3 17 MOD 5 2 Reglas de expresiones (prioridad) Se respeta las mismas prioridades del lgebra. OPERACIONES ENTRADA/SALIDA Los datos se pueden almacenar en memoria de tres formas diferentes: asociados con constantes, asignados a una variable con una sentencia de asignacin o una sentencia de lectura. Ya se han examinado las dos primeras. El tercer mtodo, la sentencia de lectura, es cl ms indicado si se desea manipular diferentes datos cada vez que se ejecuta cl problema. Adems. la lectura de datos permite asignar valores desde dispositivos hasta archivos externos (por ejemplo, un teclado o una unidad de disco) en memoria se denomina operacin de entrada o lectura A medida que se realizan clculos en un programa, se necesitan visualizar los resultados Esta operacin se conoce como operacin de salida o de escritura En los algoritmos las instrucciones de entrada/salida escritas en pseudocdigo son: leer (listas de variables entrada) leer (v. z, x) escribir (listas de variables salida) escribir (a, b, c) En Pascal todas las operaciones de entrada/salida se realizan ejecutando unidades de programa especiales denominadas procedimientos de entrada/salida que forman parte del compilador Pascal y sus nombres son identificadores estndar: Procedimientos de entrada Read ReadLn procedimientos de salida Write WriteLn La escritura de resultados (salida) Los programas para ser tiles deben proporcionar informacin de salida (resultados) Esta salida toma informacin de la memoria y la sita (almacena) en: la pantalla, en un dispositivo de almacenamiento (disco duro o flexible), o en un puerto de E/S (puertos serie para comunicaciones o impresoras, normalmente paralelos) Procedimiento WriteLn El propsito de WriteLn es escribir (visualizar) informacin en la pantalla Formato WriteLn (tem, tem..): 1 tem el objeto que desea visualizar: un valor literal (entero, real, un carcter una cadena, o un valor lgicotrue o false). una constante con nombre, una variable, o una llamada a funcin

Pgina 67 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

Cuando se ejecuta el procedimiento WriteLn, se visualizan todos los elementos en el orden dado y en la misma lnea. Al terminar de visualizar toda la lnea, el cursor avanza (salta) al comienzo de la siguiente lnea. Procedimiento Write Como se ha dicho, despus de ejecutar el procedimiento WriteLn, el cursor avanza (salta) al comienzo de la siguiente lnea. Si se desea que el cursor quede en ;a misma lnea se debe utilizar el procedimiento Write. Formatos de salida Turbo Pascal permiten controlar en cierta medida las instrucciones de salida que presentan resultados. Es posible especificar el nmero de posiciones del campo de escritura. Para los nmeros reales es posible precisar el nmero de decimales deseado. Se pueden utilizar especificadores de formato de campo para definir dicha anchura. x := 265.7892 WriteLn(x :10 :4); WriteLn(x :10 :2); WriteLn(x :6 :4); X := 14; WriteLn(x :4); X := AB WriteLn(x :4); 265.7892 265.79 ********* 14 AB

Lo anteriormente expresado es vlido para el proceso WRITE

Pgina 68 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

Impresin de resultados (salidas a impresora) Las salidas a pantalla se obtienen mediante los procedimientos Write y WriteLn. Si se desea enviar resultados a otro dispositivo, es preciso especificar el nombre del archivo como primer argumento de las instrucciones Write y WriteLn. Para poder realizar la operacin de enviar salidas a la impresora, en lugar de a la pantalla, se necesita la unidad Printer. Printer define un archivo llamado lst y asocia este archivo al puerto de comunicaciones LPTI (impresora) del DOS. Se pueden enviar datos a la impresora, incluyendo lst en las instrucciones Write y WriteLn. Es preciso, sin embargo, definir previamente en la seccin uses la unidad printer. Ejemplo uses Printer var ......................... begin ......................... Write (Lst, 'el .......................... ) WriteLn (Lst, 'pl............ ) ......................... end. Este programa imprime en la impresora: Regla Siempre que desee escribir en impresora, deber incluir en su programa la lnea uses printer y luego aadir en cada sentencia Write/WriteLn la palabra lst La entrada de datos (lectura) Los datos que se pueden leer son: enteros, reales, caracteres o cadenas. No se puede leer un boolean o un elemento de tipo enumerado. Los datos estructurados, arrays, registros o conjuntos, no se pueden leer globalmente y se suele recurrir a disear procedimientos especficos. Los procedimientos de lectura son Read y ReadLn. Formato Read (van, var2, ...); ReadLn (van, var2, ...); var igual que WRITE

Pgina 69 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

La entrada de datos desde el teclado se hace un valor cada vez. Las instrucciones ReadLn y Read esperan hasta que se pulsa la tecla INTRO (RETURN o ENTER) antes de asignar un valor a la variable. Ejemplo ReadLn (Nombre); ReadLn (Horas); Read (Tasas) El usuario debe introducir los datos de entrada en el orden en que aparecen las instrucciones read, Diferencias entre Read y ReadLn En Read, despus de pulsar la tecla INTRO, el cursor permanece inmediatamente despus del ltimo carcter introducido. En ReadLn, el cursor se enva al principio de la siguiente lnea, tras pulsar la tecla INTRO. No es aconsejable utilizar ms de un dato por instruccin. OPERACIONES BASICAS DE UTILIDAD En este punto se describen dos utilidades: Clrscr GotoXY limpieza o borrado de la pantalla movimiento del cursor El borrado (limpieza) de la pantalla: Clrscr Las rdenes o procedimientos que podr utilizar a partir de ahora: Clrscr y GotoXY, aunque posteriormente se volvern a mencionar. Ambos procedimientos pertenecen a la unidad Crt. La orden (procedimiento) Clrscr borra (limpia) la pantalla (ventana actual) y sita el cursor en la esquina superior izquierda. Turbo Pascal considera las coordenadas de la esquina superior izquierda : 1,1. Para poder utilizar Clrscr, deber declarar en la clusula uses la unidad Crt. Regla Es una buena costumbre utilizar en todos los programas la unidad Crt, mediante la clusula uses; ello permite el uso de Clrscr y GotoXY, entre otras rutinas de utilidad. Movimiento del cursor La orden (procedimiento) GotoXY mueve el cursor a la posicin x, y, donde x es la columna (contando de izquierda a derecha) e y es la fila (contando de arriba-abajo).

Pgina 70 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

Formato GotoXY (x, y) La esquina superior izquierda es 1.1. GotoXY requiere el uso de la unidad Crt.

Pgina 71 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

EL ESTILO DE PROGRAMACIN El buen estilo de programacin es, sin lugar a duda, una de las caractersticas ms notables que debe tener un programador. Un programa con buen estilo es ms fcil de leer, de corregir -si contiene un error- y de mantener. Aunque la experiencia proporciona el estilo, existen una serie de reglas que se recomiendan seguir desde el principio del aprendizaje en programacin. Sangrado (indentacin) Aunque los programas escritos en Pascal no exigen reglas estrictas en su escritura, es prctica habitual realizar sangrado en los bloques y unidades de programas fundamentales Comentarios La legibilidad de los programas aumenta considerablemente utilizando comentarios. Un comentario es un texto explicativo ms o menos largo, situado en el programa e ignorado por el compilador. Los comentarios no se consideran (son invisibles) en la fase de compilacin y ejecucin, pero de importancia primordial en las fases de anlisis, puesta a punto y mantenimiento. Los comentarios son una parte importante de la documentacin de un programa, ya que ayudan al programador y a otras personas a la comprensin del programa. No es raro encontrar programas en los cuales los comentarios ocupan ms sitio, incluso, que las propias instrucciones. Formato 1 . { comentario } 2. (* comentario *) Cualquiera de los dos formatos se pueden utilizar indistintamente. Los comentarios pueden aparecer en una sola lnea de programa, al final de una lnea despus de una sentencia, o embebido en una sentencia. En general se debe incluir en las diferentes partes de un programa, pero con la condicin de que sean significativos. Se deben evitar comentarios superfluos o redundantes, como A := B-C (el valor de B-C se asigna a A) cuyo significado es evidente. Es conveniente situar comentarios en la cabeza que al menos especifiquen: . el nombre del programador, . la fecha de la versin actual, . una breve descripcin de lo que hace el programador. El siguiente programa ilustra modos de especificar comentarios. program Prueba; {* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *} {programa escrito por : Juan Perez } {Fecha : } {Version : } {Nombre del archivo : } {Este programa permite listar direcciones postales} {* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}

Pgina 72 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

const Es posible anidar comentarios con delimitadores de tipo diferentes, pero no es posible con delimitadores del mismo tipo. El programador puede tener libertad para los comentarios. { un comentario puede extenderse en varias lneas o paginas de programas} {comentarios anidados (* como este caso *)} Lneas en blanco Otro medio de hacer un programa ms legible es dejar lneas en blanco entre partes importantes o que estn lgicamente separados. Es muy frecuente dejar lneas en blanco entre la cabecera y la seccin de declaraciones, entre sus diferentes partes, as como entre los procedimientos y funciones, entre s y con el programa principal, etc. Eleccin de nombres de identificadores significativos Las variables, constantes e incluso nombres de subprogramas y programas deben ser significativos para orientar al usuario sobre lo que representan: x, As, JJ no son identificadores significativos. Salario := Horas * SalarioHoras; Nomina_Mayor >= 10000; Nombre_Apellidos = 'Mortimer'; Los nombres es conveniente que comiencen con una letra mayscula, y si son largos es preferible utilizar palabras compuestas o con subrayado. Evitar puntos y comas superfluos Antes de las palabras end y until se puede suprimir el separador punto y coma. Los puntos y comas espurios pueden afectar al mal funcionamiento de un programa. Lneas de programa mayores de 80 caracteres El editor Turbo permite escribir lneas de hasta 126 caracteres de longitud, aunque en la panta lla slo se ven 80 columnas a la vez. Utilizando las teclas HOME (Inicio), END (Fin) y de movimiento de cursor se puede desplazar el texto a izquierda y derecha. Alinear operaciones (o separadores) en lneas consecutivas Cuando diferentes lneas consecutivas contienen el mismo operador (o separador), es buena prctica alinear estos smbolos utilizando blancos si es necesario. for j := 1 to 10 do (operador =) begin Prueba := Random; Total := Total + Prueba; Valor [j]:= Prueba; WriteLn l'Estrella errante') end;

Pgina 73 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

Blancos no significativos Poner un espacio en cada lado de un operador if A = B then Encontrado := true;

representa un blaco

Incluir un espacio despus de los signos de puntuacin: coma, punto y coma, dos puntos.

Otras reglas de escritura Poner cada sentencia en una lnea distinta. Las palabras reservadas program, const, var, procedure, function, uses, begin, end deben ir en lneas distintas. Si una sentencia contina en otra lnea, se deben sangrar la(s) linea(s) siguientes. Insertar lineas en blanco antes de la seccin const, var, uses, procedure, function y el begin del programa principal; y en cualquier segmento o bloques de sentencias significativas. Utilizar espacios entre los elementos de una sentencia para hacerla ms legible. PUESTA A PUNTO DE PROGRAMAS En esta seccin se incluirn: Tcnicas de resolucin de problemas y de programacin (diseo de programas), errores tpicos de programacin y estilo de programacin. Tcnicas de programacin (diseo de programas) 10. Los programas no pueden considerarse correctos hasta que han sido validados utilizando un rango amplio de datos de test. 11. Los programas deben ser legibles y comprensibles. 12. Utilizar comentarios significativos que describan el propsito de un programa o segmentos de programas, as como elementos importantes de programas, variables, funciones, etc. 13. Etiquetar todas las salidas producidas por un programa 14. Los programas deben ser eficientes. Por ejemplo, clculos innecesarios: Se deben evitar calcular dos veces cualquier variable. 15. Programas generales y flexibles. Deben ser relativamente fciles de modificar para solucionar un problema similar sin necesidad de cambiar mucho el programa. El uso de las constantes limita la flexibilidad. 16. Antes de utilizar variables, asegurarse de que son inicializadas por el programa. 17. En programacin interactiva, incluya siempre una lnea con un mensaje de aviso al usuario cuando desee introducir datos. 18. Los programas deben hacer -en general- siempre "eco" de la entrada. Antes de escribir un programa en Pascal se deben seguir los pasos:

Anlisis del programa (entrada, salida, datos auxiliares y proceso). Diseo del algoritmo (con preferencia pseudocdigo), siguiendo -esencialmente- el mtodo descendente.

Errores tpicos de programacin 1. Las constantes reales deben tener al menos un dgito antes y al menos un dgito despus del punto decimal.

Pgina 74 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

2. Las constantes de cadena deben estar encerradas entre apstrofos (simples comillas). Un

apstrofo se representa con un par de apstrofos 'Kant"s'. 3. Los parntesis dentro de expresiones deben concordar. Tantos parntesis a izquierda como a derecha. 4. La divisin entera se representa por div y la real por /. 5. Las multiplicaciones deben ser indicadas por *. 6. Puntos y comas (ausencia, exceso, superfluos). 7. Debe haber un punto detrs del end final de cada programa. 8. Todos los identificadores deben ser declarados. 9. Todas las variables estn inicialmente indefinidas (Turbo Pascal no sigue esta regla -inicializa a cero o cadena vacia-, pero es conveniente la inicializacin). 10. Un signo igual (=) se utiliza en declaraciones de constantes o como signo igual. El operador := se utiliza en sentencias de asignacin. No confundir = con := (ojo, programadores de BASIC). 11. Los problemas que implican nmeros de tipo real no pueden utilizar test/comparaciones para comprobar exactitud de igualdad o desigualdad (= o < > ). Como los nmeros estn aproximados en la computadora, no tiene sentido la igualdad/desigualdad. 12. Es buena idea verificar errores tales como divisin por cero y raices cuadradas de nmeros negativos dentro de un programa. Estilo de programacin Un programa Turbo Pascal se prepara con el editor. Despus de teclear el programa completo se sale al men principal y se compila el programa. Si hay errores, se vuelve al editor; en caso contrario, se guarda y ejecuta. Los errores de un programa pueden ser: sintaxis, en tiempo de ejecucin y lgicos. La planificacin de un programa comienza con el anlisis del problema [especificaciones de entrada y salida (E/S), el proceso necesario para producir la salida desde la entrada] y sigue con el algoritmo (pseudocdigo). Especialmente en programas grandes, seguir el diseo descendente y refinamiento sucesivo. A continuacin debe realizarse la documentacin externa, la escritura del programa con toda la documentacin interna (comentarios) necesaria. Ejemplo: Se ingresan dos nmeros enteros, obtener su suma. Anlisis Qu ingresa? Dos nmeros enteros Qu sale? Otro nmero entero Qu vincula la entrada con la salida? La operacin suma

Pgina 75 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

Pseudocdigo Inicio Leo A (entero) Leo B (entero) Obtengo C como suma de A y B Imprimo C Fin Diagrama NS Inicio Leo A Leo B C A + B Imprimo C Fin Cdigo Pascal program Sumas; {* Este es el primer programa en PASCAL*} {* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *} {* programa escrito por : Fernando Javier LAGE *} {* Fecha : 7 de abril de 1998 *} {* Version : 01 *} {* Nombre del archivo : progra01 *} {* Este programa permite sumar dos nmeros enteros *} {* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *} uses crt,dos; {* declaraciones de librerias *} const Enter = #13; {* declaraciones de constantes *} {* type *} {* en este programa no hay declaraciones de tipos *} var {* definicin de las variables *} A, B, C : Integer; begin {* Comienzo del programa *} ClrScr; {* Ingreso de datos *} Write ('Ingrese el primer valor ');

Pgina 76 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

ReadLn(A); Write ('Ingrese el segundo valor '); ReadLn(B); {* Clculo de los resultados *} C := A + B; {* Salida de la informacin *} WriteLn ('El resultado es = ', C:6); {* Esta estructura se ver en prximas clases *} Repeat Until Readkey = Enter end. {* Fin del programa *} Nota En el ejemplo tenemos una tpica estructura secuencial sin condiciones, ni ciclos repetitivos, como se vern en el prximo ejemplo

Pgina 77 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

Las estructuras secuenciales son aquellas donde todas las instrucciones se ejecutan una despus de la otra. En ellas no hay repeticin ni ejecucin de un grupo seleccionado. Un problema tpico de este tipo de estructura es el siguiente. Ejemplo: Un comerciante requiere un programa que realice las siguientes tareas: Se ingrese el costo de un producto, a dicho costo le cargue un 30% y al valor as obtenido le incremente un 20% por IVA. El programa deber sacar por pantalla el costo del producto, el precio final, y el valor del impuesto. Pseudocdigo Inicio Definir constantes Leer el costo Calcular el costo ms el 30% Calcular el valor del impuesto Calcular el Precio Imprimir Costo Imprimir Impuesto Imprimir Precio Fin program Primer_Ejemplo; {* Este es el primer programa en PASCAL *} uses crt,dos; {* declaraciones de libreras *} const gan = 30.0; iva = 20.0; {* declaraciones de las constantes *} var {* definicin de las variables *} costo : real; costo1, impuesto, precio : real; begin {* Comienzo del programa *} clrscr; {* Limpieza de pantalla *} write ('Ingrese el costo: '); {* Salida de mensaje *} readln (costo); {* Ingreso del dato *} costo1 := costo * ( 1 + gan/100); {* Clculo de la ganancia *} impuesto := costo1 * (iva /100); {* Clculo del impuesto *} precio := costo1 + impuesto; {* Clculo del precio final *} writeln ('Costo : ', costo); {* Salida de mensaje y variable *} writeln ('Impuesto : ', impuesto); {* Idem anterior *} Diagrama N-S gan 30.0 iva 30.0 Leer el costo Costo1 costo * (1+gan/100) Impuesto costo1 * iva /100 Precio Costo1 + Impuesto Imprimir Costo Imprimir Impuesto Imprimir Precio

Pgina 78 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

writeln ('Precio : ', precio); {* Idem anterior *} end. {* Fin del programa *} program Primer_Modulos; {* Este es el primer programa en PASCAL, con mdulos *} uses crt,dos; {* declaraciones de librerias *} const gan = 30.0; iva = 20.0; {* declaraciones de las constantes *} var {* definicin de las variables *} costo : real; costo1, impuesto, precio : real; procedure limpieza; begin {* Comienzo del procedimiento limpieza *} clrscr; {* Limpieza de pantalla *} end; {* Fin del procedimiento limpieza *} procedure ingreso; begin {* Comienzo del procedimiento de ingreso de datos *} write ('Ingrese el costo: '); {* Salida de mensaje *} readln (costo); {* Ingreso del dato *} end; {* Fin del procedimiento ingreso *} procedure calculos; begin {* Comienzo del procedimiento de clculo de valores *} costo1 := costo * ( 1 + gan/100); {* Clculo de la ganancia *} impuesto := costo1 * (iva /100); {* Clculo del impuesto *} precio := costo1 + impuesto; {* Clculo del precio final *} end; {* Fin del procedimiento calculos *} procedure salidas; begin {* Comienzo del procedimiento de egreso de valores *} writeln ('Costo : ', costo); {* Salida de mensaje y variable *} writeln ('Impuesto : ', impuesto); {* Idem anterior *} writeln ('Precio : ', precio); {* Idem anterior *} end; {* Fin del procedimiento salidas*} begin {* Comienzo del programa *} limpieza; {* llamado a cada uno de los mdulos (procedimientos) *} ingreso;
Pgina 79 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

calculos; salidas; end. {* Fin del programa *} Estructuras de Programacin Todo programa puede ser escrito utilizando solamente tres tipos de estructuras de control secuenciales selectivas repetitivas

Las estructuras de tipo secuencial se han visto en el prctico anterior. En esta practica veremos los otros dos tipos de estructuras. Selectivas: Las estructuras selectivas se utilizan para tomar decisiones lgicas; de ah que se suelan denominar estructuras de decisin o alternativas. Son dos la sentencia if y la sentencia case. If esta sentencia, es considerada de alternativa doble ( si se cumple cierta condicin entonces ... , sino .... / If ...... then ...... else..... ). Pseudocdigo en espaol si <condicin> entonces < accin S1> sino <accin S2 > Su estructugrama tiene la siguiente forma if <condicin> then < accin S1> else < accin S2> Ejemplos: a) Se leen dos valores enteros A, B. Si A es mayor que B se realiza la suma de ambos, caso contrario, se hace el producto. Cdigo se programa if <condicin> then < accin S1> else < accin S2>

Pgina 80 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

Pseudocdigo del programa nombre seleccin1(program); declaraciones (uses) Crt, Dos; variables A (valor que ingresa) : entero; B (valor que ingresa) : entero; R (resultado de la oper.): entero funciones(function); procedimientos (procedure); inicio (begin); limpieza(limpia la pantalla); ingreso; alternativa (decisin A>B): resultado (salida resultados): fin(end.)

Diagrama N-S nombre seleccin1 declaraciones Crt, Dos Variables A, B, R :enteros funciones y procedimientos comienzo (programa) limpieza ingreso alternativa resultado fin (programa)

(var);

Estructura secuencial

Como se puede ver tenemos varios procedimientos ya vistos. Por lo tanto solo se desarrollara el pseudocdigo y el estructurado de alternativa, y todo lo que de el dependa. algoritmo alternativa Pseudocdigo del alternativa procedimiento alternativa inicio (begin); si A > B entonces R A + B sino R Prod (A, B) fin(end;) Diagrama N-S A>B R A + B else R Prod (A, B)

Pgina 81 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

El cdigo del procedimiento es: procedure alternativa; {* determina si A es o no mayor que B y hace los clculos correspondientes *} begin {* comienzo de alternativa *} if A > B then R := A + B else R := Prod (A,B); {* llamado a la funcin *} end; {* fin de alternativa *} Ntese que se defini una funcin Prod (A, B), veremos como se trabaja con ellas. algoritmo Prod Pseudocdigo de Prod funcin Prod ( A, B : enteros)entero inicio (begin); Prod A * B fin(end;) Diagrama N-S funcin Prod ( A, B : entero ) entero comienzo (Prod) Prod A * B fin (Prod)

function Prod ( A, B: integer ): integer; {* obtiene el producto entre dos valores enteros *} begin {* comienzo de Prod *} Prod := A * B; end; {* fin de Prod *} Quedndonos el programa de la siguiente manera. Program Seleccion_1; {* Este es el primer programa con estructuras de seleccin y funciones *} uses crt, dos; {* declaraciones *} {const} var A, B : integer; {* valores que ingresan *} R: integer; {* salida de la operacin *} function Prod ( A, B: integer ): integer; {* obtiene el producto entre dos valores enteros *} begin {* comienzo de Prod *} Prod := A * B; end; {* fin de Prod *} {* no hay constantes *}

Pgina 82 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

procedure limpieza; {* comienzo de limpieza de la pantalla *} begin ClrScr; end; {* fin de limpieza de la pantalla *} procedure ingreso; {* comienzo del ingreso de datos *} begin write ('Ingrese A '); {* ingreso de variable A *} readln (A); write ('Ingrese B '); {* ingreso de variable B *} readln (B); end; {* fin del ingreso de datos *} procedure alternativa; {* determina si A es o no mayor que B y hace los clculos correspondientes *} begin {* comienzo de alternativa *} if A > B then R := A + B else R := Prod (A,B); {* llamado a la funcin *} end; {* fin de alternativa *} procedure resultado; {* comienzo la impresin de los resultados *} Var H :char; begin writeln ( 'Resultado = ', R); writeln ( 'Presione cualquier tecla '); readln (H); {* esta instruccin y la anterior son para dar tiempo para ver resultados *} end; {* fin de la impresin de los resultados *} begin limpieza; ingreso; alternativa; resultado; end. {* llamado {* llamado {* llamado {* llamado al procedimiento al procedimiento al procedimiento al procedimiento limpieza *} ingreso *} alternativa *} resultado *}

b) Se leen dos valores enteros A, B. Si A es mayor que B se realiza la suma de ambos y se imprime un cartel diciendo R es la suma de A y B = , caso contrario, se hace el producto y se imprime otro cartel que diga R . es el producto de A y B =

Pgina 83 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

Pseudocdigo del programa nombre seleccin2program); declaraciones (uses); Crt, Dos; variables (var); A (valor que ingresa) : entero; B (valor que ingresa) : entero; R (resultado de la oper.): entero funciones(function); procedimientos (procedure); inicio (begin); limpieza (limpia la pantalla) ; ingreso (ingreso de datos); alternativa (decisin A>B e imp.); resultado ( para ver los resultados): fin(end.) Diagrama N-S nombre seleccin1 declaraciones Crt, Dos; Variables A, B, R :enteros funciones y procedimientos comienzo (programa) limpieza ingreso alternativa resultado fin (programa)

Como se puede ver dentro de alternativa se coloc la impresin de resultados quedndonos este algoritmo estructurado de la siguiente manera. algoritmo alternativa Pseudocdigo del alternativa procedimiento alternativa inicio (begin); si A > B entonces R A + B Imprimir cartel suma y resultados sino R Prod (A, B) Imprimir cartel producto y resultados fin(end;) Diagrama N-S A>B R A + B Imp. cartel y resultados Else R Prod (A, B) Imp. cartel y resultados El cdigo del procedimiento es: procedure alternativa; {* determina si A es o no mayor que B y hace los clculos correspondientes *} begin {* comienzo de alternativa *} if A > B then

Pgina 84 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

begin {* comienzo del then *} R := A + B; writeln ( 'R es la suma de A y B = ', R); end {* fin del then *} else begin {* comienzo del else *} R := Prod (A,B); {* llamado a la funcin *} writeln ( 'R es el producto de A y B = ', R); end; {* fin del else *} end; {* fin de alternativa *} Quedndonos el programa de la siguiente manera. Program Seleccion_2; {* Este es el primer programa con estructuras de seleccin y funciones *} uses crt, dos; {* declaraciones *} {const} var A, B : integer; {* valores que ingresan *} R: integer; {* salida de la operacin *} function Prod ( C, D: integer ): integer; {* obtiene el producto entre dos valores enteros *} begin {* comienzo de Prod *} Prod := C * D; end; {* fin de Prod *} procedure limpieza; {* comienzo de limpieza de la pantalla *} begin ClrScr; end; {* fin de limpieza de la pantalla *} procedure ingreso; {* comienzo del ingreso de datos *} begin write ('Ingrese A '); {* ingreso de variable A *} readln (A); writeln ('Ingrese B '); {* ingreso de variable B *} read (B); end; {* fin del ingreso de datos *} procedure alternativa; {* compara A con B y hace los clculos e imprime resultados *} begin {* comienzo de alternativa *} if A > B then
Pgina 85 de 191

{* no hay constantes *}

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

end; {* fin de alternativa *} procedure resultado; {* comienzo la muestra de los resultados *} Var H :char; begin writeln ( 'Preione cualquir tecla '); readln (H); {* esta instruccin y la anterior son para dar tiempo para ver resultados *} end; {* fin de la muestra de los resultados *} begin limpieza; ingreso; alternativa; resultado; end. {* llamado {* llamado {* llamado {* llamado al procedimiento al procedimiento al procedimiento al procedimiento limpieza *} ingreso *} alternativa *} resultado *}

Hay varias cosas para tomar en cuenta cuando en alguna de las opciones tiene ms de una instruccin dicha opcin deber llevar un begin con su correspondiente end. Debe notarse que el end del then no tiene puntuacin en cambio el del else si lleva punto y coma (;) esto se debe que este end es el ltimo del if. Tambin debe notarse que las variables del llamado de la funcin son distintas a las de la funcin en si. R := Prod (A,B); function Prod ( C, D: integer ): integer; Tanto en funciones como en procedimientos esto es posible ya que el lenguaje vincula automticamente la primera variable del llamado con la primera de la declaracin, la segunda con la segunda y as sucesivamente. Esto nos permite llamar a una funcin (o procedimiento), con distintos juegos de variables. Sin que tengamos que atenernos a nombres especficos. Solo debemos tener en cuenta que las variables sean del mismo tipo.

Mtiples salidas : Si se tiene ms de dos posibles salidas, aqu aparecen dos soluciones similares al problema. IF anidado : en esta solucin se utiliza un if dentro de otro. Siempre se anida por la salida Else (sino). Ejemplo : Se pide un programa donde ingresa un nmero entre 1 y 5 incluidos ambos y se imprime en pantalla su expresin de caracteres ( ingresa 2 imprime Dos). En este caso tenemos cinco salidas probables (uno, dos, tres, cuatro o cinco), esto indica que deberemos tener 4 if anidados. Si a = 1 Entonces impre = Uno

Pgina 86 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

Sino Si a = 2 Entonces impre = Dos Sino Si a = 3 Entonces impre = Tres Sino Si a = 4 Entonces impre = Cuatro Sino impre = Cinco fin_si {* fin_si no tiene equivalente en Pascal *} fin_si fin_si fin_si if <condicin> then < accin S1> else if <condicin> then < accin S2> Else If <condicin> then < accin S3> Else If <condicin> then < accin S3> Else < accin S4>

Pgina 87 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

El cdigo del procedimiento es: procedure alternativa; {* determina el valor de A y lo expresa en letras *} begin {* comienzo de alternativa *} if A = 1 then {* pregunta por uno *} writeln ( 'U n o ') {* salida por uno *} else if A = 2 then {* pregunta por dos *} writeln ( 'D o s ') {* salida por dos *} else if A = 3 then {* pregunta por tres *} writeln ( 'T r e s ') {* salida por tres *} else if A = 4 then {* pregunta por cuatro *} writeln ( 'C u a t r o ') {* salida por cuatro *} else writeln ( 'C i n c o '); {* salida por cinco *} end; {* fin de alternativa *} Quedndonos el programa de la siguiente manera. Program Seleccion_3; {* If anidados *} uses crt, dos; {declaraciones} {const} {* no hay constantes *} {* valor que ingresa *}

var A : integer;

procedure limpieza; {* comienzo de limpieza de la pantalla *} begin ClrScr; end; {* fin de limpieza de la pantalla *}

procedure ingreso; {* comienzo del ingreso de datos *} begin write ('Ingrese un numero de 1 a 5 : '); {* ingreso de variable A *} readln (A); end; {* fin del ingreso de datos *}

Pgina 88 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 5 Algoritmos y Programacin I


Estructuras de Programacin
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino .............Sr. S. Russo

procedure alternativa; {* determina el valor de A y lo expresa en letras *} begin {* comienzo de alternativa *} if A = 1 then {* pregunta por uno *} writeln ( 'U n o ') {* salida por uno *} else if A = 2 then {* pregunta por dos *} writeln ( 'D o s ') {* salida por dos *} else if A = 3 then {* pregunta por tres *} writeln ( 'T r e s ') {* salida por tres *} else if A = 4 then {* pregunta por cuatro *} writeln ( 'C u a t r o ') {* salida por cuatro *} else writeln ( 'C i n c o '); {* salida por cinco *} end; {* fin de alternativa *} procedure resultado; {* se utiliza para dejar en pantallas los resultados *} Var H :char; begin writeln ( 'Preione cualquir tecla '); readln (H); {* esta instruccin y la anterior son para dar tiempo para *} {* ver resultados *} end; {* fin de resultado *} begin limpieza; ingreso; alternativa; resultado; end. Select : esta solucin se utiliza en reemplazo del if anidado. Es ms prctica y eficiente. su pseudocdigo genrico es: segn...sea E hacer E1: sentencia 1 E2: sentencia 2 E3: sentencia 3 ......................... ......................... En: sentencia n [sino sentencia x ] fin...segn

Pgina 89 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 6 Algoritmos y Programacin I


Estructuras de Programacin (cont.)
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino Sr. S. Russo

Case <variable> of Opcin1 < accin S1> Opcin2 < accin S2> Opcin n < accin n> ........ < accin .......> else < accin S m> Para el problema anterior su pseudocdigo ser: segn...sea A hacer 1: Imprimir U n o 2: Imprimir D o s 3: Imprimir T r e s 4: Imprimir C u a t r o sino Imprimir C i n c o fin...segn y su diagrama N - S es: Case A of 1 Imprimir UNO 2 Imprimir DOS 3 Imprimir TRES 4 Imprimir CUATRO else Imprimir CINCO
Pgina 90 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 6 Algoritmos y Programacin I


Estructuras de Programacin (cont.)
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino Sr. S. Russo

El cdigo del procedimiento es: procedure seleccion; {* determina el valor de A y hace su valor a letras *} begin {* comienzo de alternativa *} case A of {* comienza seleccion *} 1 : writeln ( 'U n o '); {* salida por uno *} 2 : writeln ( 'D o s '); {* salida por dos *} 3 : writeln ( 'T r e s '); {* salida por tres *} 4 : writeln ( 'C u a t r o '); {* salida por cuatro *} else writeln ( 'C i n c o '); {* salida por cinco *} end; {* fin del case *} end; {* fin de alternativa *} Quedndonos el programa de la siguiente manera. Program Seleccion_4; {* Uso de selectores *} uses crt, dos; {declaraciones} {const} {* no hay constantesr *} {* valor que ingresa *}

var A : integer;

procedure limpieza; {* comienzo de limpieza de la pantalla *} begin ClrScr; end; {* fin de limpieza de la pantalla *}

procedure ingreso; {* comienzo del ingreso de datos *} begin write ('Ingrese un numero de 1 a 5 : '); {* ingreso de variable A *} readln (A); end; {* fin del ingreso de datos *}

Pgina 91 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 6 Algoritmos y Programacin I


Estructuras de Programacin (cont.)
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino Sr. S. Russo

procedure seleccion; {* determina el valor de A y hace su valor a letras *} begin {* comienzo de alternativa *} case A of {* comienza seleccion *} 1 : writeln ( 'U n o '); {* salida por uno *} 2 : writeln ( 'D o s '); {* salida por dos *} 3 : writeln ( 'T r e s '); {* salida por tres *} 4 : writeln ( 'C u a t r o '); {* salida por cuatro *} else writeln ( 'C i n c o '); {* salida por cinco *} end; {* fin del case *} end; {* fin de alternativa *} procedure resultado; {* se utiliza para dejar en pantallas los resultados *} Var H :char; begin writeln ( 'Preione cualquir tecla '); readln (H); {* esta instruccin y la anterior son para dar tiempo para *} {* ver resultados *} end; {* fin de resultado *} begin limpieza; ingreso; seleccion; resultado; end. Resumen: Existen tres tipos de estructuras selectivas a) If b) If anidado c) case Cada uno tiene su aplicacin especfica y se debe tener cuidado si se tiene por salida una o ms sentencias. (Si hay ms de una sentencia por salida colocar Begin End ).

Pgina 92 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 6 Algoritmos y Programacin I


Estructuras de Programacin (cont.)
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino Sr. S. Russo

Condicionales
1. Ingresar valores numricos enteros A, B, C, D, E y decir si su promedio es mayor que o igual a 10. 2. Ingresar valores numricos reales A, B, C, y decir si su promedio es mayor que o igual a 10.

3. Ingresar valores numricos reales a, b, c, que son coeficientes de una ecuacin cuadrtica y

obtener los valores X1 y X2 reales. Si la operacin dentro de la raz diera como resultado un valor negativo, imprimir un cartel que diga La solucin son dos nmeros complejos conjugados.

4. Ingresar valores numricos reales a, b, c, que son coeficientes de una ecuacin cuadrtica y

obtener los valores X1 y X2 reales. Si la operacin dentro de la raz diera como resultado un valor negativo, imprimir el resultado como m + n i; m - n i .

5. Hacer un programa que permita ingresa un nmero de 1 a 7 y salga el correspondiente da de la

semana ( Ej: 1 Lunes; 2 Martes; ...). Si ingresa un valor que no este comprendido entre 1 y 7 deber imprimir un cartel que diga ERROR ... valor fuera de rango

6. Hacer un programa que permita ingresa dos nmeros reales y el smbolo de la operacin.

Obtenendose el correspondiente resultado. Si el smbolo no es correcto, deber imprimir un mensaje que indique Error en smbolo Estructuras de Programacin Hasta ahora hemos visto dos tipos de estructuras de control secuenciales selectivas

En esta practica veremos el tipo de estructura que nos queda.

Pgina 93 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 6 Algoritmos y Programacin I


Estructuras de Programacin (cont.)
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino Sr. S. Russo

Repetitivas: Las estructuras repetitivas (llamadas tambin bucles, lazo o ciclo) se utilizan para realizar varias veces el mismo conjunto de operaciones. Dentro de ellas encontramos aquellas donde la cantidad repeticiones se manejan por un nmero, las que se realizan hasta que se cumple cierta condicin. Son tres la sentencia for y la sentencia while y la sentencia repeat For esta sentencia, es un bucle controlado por un contador, denominado variable de control o ndice. Pseudocdigo en espaol desde variable (v) = vi hasta vf hacer < accin S1> <accin S2 > ....................... fin desde end Su estructugrama tiene la siguiente forma desde v = vi hasta vf < accin S1> <accin S2 > ...................... Cdigo se programa for variable (v) = vi to vf do begin < accin S1> < accin S2> ......................

Ejemplos: a) Hacer un programa que imprima los nmeros de 5 hasta 28.

Pgina 94 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 6 Algoritmos y Programacin I


Estructuras de Programacin (cont.)
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino Sr. S. Russo

Pseudocdigo del programa nombre repeticin1(program); declaraciones (uses) Crt, Dos; constantes(const) A = 5; B = 28; variables (var) R (resultado de la oper.): entero funciones(function)(NO hay); procedimientos (procedure); inicio (begin); limpieza(limpia la pantalla); ciclo (hace ciclo e imprime); salida fin(end.)

Diagrama N-S nombre seleccin1 declaraciones Crt, Dos Constantes A, B Variables R :entero funciones y procedimientos comienzo (programa) limpieza ciclo fin (programa)

Como se puede ver tenemos varios procedimientos ya vistos. Por lo tanto solo se desarrollara el pseudocdigo y el estructurado de ciclo, y todo lo que de el dependa. algoritmo ciclo Pseudocdigo del ciclo procedimiento ciclo inicio (begin); desde R= A hasta B hacer imprimo R fin(end;) El cdigo del procedimiento es: procedure ciclo; {* comienzo el ciclo *} begin for R := A to B do {* se define el ciclo A *} writeln ('Numero ',R ); {* imprime salida *} end; {* fin del ciclo *} Quedndonos el programa de la siguiente manera.
Pgina 95 de 191

Diagrama N-S desde R = A hasta B imprimir R

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 6 Algoritmos y Programacin I


Estructuras de Programacin (cont.)
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino Sr. S. Russo

Program Repeticion_1; {* Este es el primer programa con estructuras de repeticion *} uses crt, dos; {declaraciones} const {* constantesr *} A = 5; B = 28; var R: integer; {* controla el ciclo *} procedure limpieza; {* comienzo de limpieza de la pantalla *} begin ClrScr; end; {* fin de limpieza de la pantalla *} procedure ciclo; {* comienzo el ciclo *} begin for R := A to B do {* se define el ciclo A *} writeln ('Numero ',R ); {* imprime salida *} end; {* fin del ciclo *} procedure salida; {* comienzo del procedimiento salida *} {*solo sirve para ver los resultados *} Var H :char; begin writeln ( 'Preione cualquir tecla '); readln (H); {* esta instruccin y la anterior son para dar tiempo para *} {* ver resultados *} end; {* fin del procedimiento salida *} begin limpieza; ciclo; salida; end.

b) Hacer un programa que calcule e imprima el factorial de los nmeros 1 a 7

Pgina 96 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 6 Algoritmos y Programacin I


Estructuras de Programacin (cont.)
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino Sr. S. Russo

Pseudocdigo del programa nombre repeticin2(program); declaraciones (uses) Crt, Dos; constantes(const) A = 1; B = 7; variables (var) R, Fac (resultado de la oper.): entero procedimientos (procedure); inicio (begin); limpieza(limpia la pantalla); ciclo2 (hace ciclo e imprime); salida fin(end.)

Diagrama N-S nombre seleccin1 declaraciones Crt, Dos Constantes A, B Variables R, Fac :entero funciones y procedimientos comienzo (programa) limpieza ciclo2 salida fin (programa)

pseudocdigo y el estructurado de ciclo, y todo lo que de el dependa. algoritmo ciclo Diagrama N-S procedimiento ciclo inicio (begin); desde R= A hasta B hacer desde R = A hasta B Fac Fac * R Fac Fac * R imprimo Fac imprimir Fac . fin_desde fin(end;) Como se puede ver dentro del ciclo se hace dos procesos, el clculo del factorial y la impresin del resultados quedndonos este algoritmo estructurado. El cdigo del procedimiento es: procedure ciclo; {* comienzo el ciclo *} begin Fac := 1; for R := A to B do {* se define el ciclo A *} begin Fac := Fac * R; {* Calcula factorial *} writeln ('Numero : ',R, ' Factorial : ',Fac ); {* imprime salida numero y factorial *} end
Pgina 97 de 191

Pseudocdigo del ciclo

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 6 Algoritmos y Programacin I


Estructuras de Programacin (cont.)
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino Sr. S. Russo

end; {* fin del ciclo *} Como se puede observar el se necesit colocar un begin y un end para definir comienzo y fin del ciclo, ya que el mismo tiene ms de una instruccin. Fac se define igual a uno, porque sino el producto nos daria siempre 0 (cero). Quedndonos el programa de la siguiente manera. Program Repeticion_2; {* Este es el segundo ejemplo de For *} uses crt, dos; {declaraciones} const {* constantesr *} A = 1; B = 7; var R, Fac : integer; {* controla el ciclo *} procedure limpieza; {* comienzo de limpieza de la pantalla *} begin ClrScr; end; {* fin de limpieza de la pantalla *} Procedure ciclo; {* comienzo el ciclo *} begin Fac := 1; for R := A to B do {* se define el ciclo A *} begin Fac := Fac * R; {* Calcula factorial *} writeln ('Numero : ',R, ' Factorial : ',Fac ); {* imprime salida numero y factorial *} end end; {* fin del ciclo *} procedure salida; {* comienzo del procedimiento salida *} {* solo sirve para ver resultados *} Var H :char; begin writeln ( 'Preione cualquir tecla '); readln (H); {* esta instruccin y la anterior son para dar tiempo para *}
Pgina 98 de 191

ALGORITMOS y PROGRAMACIN 75.02

Trabajo Prctico N 6 Algoritmos y Programacin I


Estructuras de Programacin (cont.)
Autores : Ings. Cataldi - Lage

Martes 15 a 18 Hs Jueves 15 a 18 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr C. Corradino Sr. S. Russo

{* ver resultados *} end; {* fin del procedimiento salida *} begin limpieza; ciclo; salida; end. Hay que tomar en cuenta que los ciclos cumplen con las mismas reglas que las opciones tiene ms de una instruccin el ciclo deber llevar un begin con su correspondiente end cuando se tenga ms de una instruccin.. Si fuera B > A el for seria for K = A donwto B do

Bucles controlados por una bandera (While - Repeat) Estos bucles no se repiten una cantidad definida de veces, sino se realizan hasta que se cumple una cierta condicin. La diferencia entre ambos bucles (While y Repeat) es cuando se realiza la pregunta de la condicin. While : en este ciclo la pregunta de condicin se hace cada vez antes de comenzar el ciclo. Ejemplo : Se pide un programa donde ingresan una serie de nmeros, el ltimo es un valor negativo. Se pide calcular el promedio de los valores positivos (no incluir el ltimo valor), e imprimir los valores y su promedio. En este caso tenemos que pautar si el ltimo valor lo imprimimos o no. (si optamos por imprimirlo), esto implicar el siguiente pseudocdigo.

Pgina 99 de 191

Pseudocdigo del ciclo Diagrama N-S procedimiento ciclo inicio (begin); N 0 N 0 S 0 S 0 leo A Leo A imprimo A Imprimo A mientras A >= 0 hacer mientras A >= 0 hacer comenzar S S + A S S + A N N + 1 N N + 1 Leo A leo A Imprimo A . imprimo A terminar fin(end;) Como se puede ver dentro del ciclo se hace dos procesos, el clculo del factorial y la impresin del resultados quedndonos este algoritmo estructurado. El cdigo del procedimiento es: procedure ciclo; {* comienzo de ciclo *} begin S := 0; N := 0; write ( 'Ingrese un valor '); read (A); {* esta instruccin y la anterior son el ingreso de datos *} writeln ( 'El valor es : ',A ); {* esta instruccin imprime el valor *} WHILE A >= 0 DO {* se define el ciclo *} begin {* comienzo de While *} S := S + A; {* Calcula la suma de valores *} N := N + 1; {* Calcula la cantidad de valores *} writeln ; {* Salta una linea *} write ( 'Ingrese un valor '); read (A); {* esta instruccion y la anterior son el ingreso de datos *} writeln ( 'El valor es : ',A ); {* esta instruccin imprime el valor *} end {* fin de While *} end; {* fin de ciclo *} Quedndonos el programa de la siguiente manera. Program Repeticion_3; {* Este es el ejemplo de While *} uses crt, dos; {declaraciones} {const} {* constantes no hay*} var A, N, S : integer; {* controla el ciclo *} Prom :real; procedure limpieza; {* comienzo de limpieza de la pantalla *} begin ClrScr; end; {* fin de limpieza de la pantalla *} procedure ciclo; {* comienzo de ciclo *}

begin S := 0; N := 0; write ( 'Ingrese un valor '); read (A); {* esta instruccin y la anterior son el ingreso de datos *} writeln ( 'El valor es : ',A ); {* esta instruccin imprime el valor *} WHILE A >= 0 DO {* se define el ciclo *} begin {* comienzo de While *} S := S + A; {* Calcula la suma de valores *} N := N + 1; {* Calcula la cantidad de valores *} writeln ; {* Salta una linea *} write ( 'Ingrese un valor '); read (A); {* esta instruccin y la anterior son el ingreso de datos *} writeln ( 'El valor es : ',A ); {* esta instruccin imprime el valor *} end {* fin de While *} end; {* fin de ciclo *} procedure promedia; {* comienzo de promedia *} begin Prom := S / N; {* Calcula el promedio *} writeln ; {* Salta una linea *} writeln ; {* Salta una linea *} writeln ( 'Promedio es = ', Prom:5:2 ); {* Imprime el promedio *} end; {* fin de promedia *} procedure salida; {* comienzo del procedimiento salida *} {* solo sirve para ver resultados *} Var H :char; begin writeln ( 'Preione cualquir tecla '); readln (H); {* esta instruccin y la anterior son para dar tiempo para *} {* ver resultados *} end; {* fin del procedimiento salida *} begin limpieza; ciclo; promedia; salida; end. En el procedimiento promedia en la escritura del promedio, aparece writeln ( 'Promedio es = ', Prom:5:2 ); {* Imprime el promedio *} donde Prom:5:2 significa que la variable Prom ser escrita en un formato de 5 caracteres, de los cuales 2 corresponden a los decimales, se necesita un carcter para el punto decimal. Repeat : esta solucin se utiliza cuando el ciclo debe incluir el ltimo valor ingresado. Ya que la pregunta se hace al final del ciclo. Ejemplo : Se ingresan una serie de nmeros distintos, el ltimo es el valor 12. Se pide un programa que calcule el promedio de los valores (incluir el ltimo valor), e imprimir los valores y su promedio. inicio (begin); Pseudocdigo del ciclo N 0 S 0 procedimiento ciclo repetir

leo A imprimo A S S + A N N + 1 hasta_que A = 12 fin(end;)

Diagrama N-S N 0 S 0

Leo A Imprimo A S S + A N N + 1. hasta_que A = 12

El cdigo del procedimiento es: procedure ciclo; {* comienzo el ciclo *} begin S := 0; N := 0; repeat {* comienza ciclo *} write ( 'Ingrese un valor '); read (A); {* esta instruccin y la anterior son el ingreso de datos *} writeln ( 'El valor es : ',A ); {* esta instruccin imprime el valor *} writeln ; {* Salta una linea *} S := S + A; {* Calcula la suma de valores *} N := N + 1; {* Calcula la cantidad de valores *} until A = 12; {* definicion al final del ciclo *} end; {* fin del ciclo *} Quedndonos el programa de la siguiente manera. Program Repeticion_4; {* Este es el ejemplo de Repeat - Until *} uses crt, dos; {declaraciones} {const} {* constantesr no hay*}

var A, N, S : integer; {* controla el ciclo *} Prom :real; procedure limpieza; {* comienzo de limpieza de la pantalla *} begin ClrScr; end; {* fin de limpieza de la pantalla *} procedure ciclo; {* comienzo el ciclo *} begin S := 0; N := 0; repeat {* comienza ciclo *} write ( 'Ingrese un valor '); read (A); {* esta instruccin y la anterior son el ingreso de datos *} writeln ( 'El valor es : ',A ); {* esta instruccin imprime el valor *}

writeln ; {* Salta una linea *} S := S + A; {* Calcula la suma de valores *} N := N + 1; {* Calcula la cantidad de valores *} until A = 12; {* definicion al final del ciclo *} end; {* fin del ciclo *} procedure promedia; {* comienzo de promedia *} begin Prom := S / N; {* Calcula el promedio *} writeln ; {* Salta una linea *} writeln ; {* Salta una linea *} writeln ( 'Promedio es = ', Prom:5:2 ); {* Imprime el promedio *} end; {* fin de promedia *} procedure salida; {* comienzo del procedimiento salida *} {* solo sirve para ver resultados *} Var H :char; begin writeln ( 'Preione cualquir tecla '); readln (H); {* esta instruccin y la anterior son para dar tiempo para *} {* ver resultados *} end; {* fin del procedimiento salida *} begin limpieza; ciclo; promedia; salida; end. Como se puede observar esta estructura (repeat-until) carece de begin y end, ya que los dos extremos estn definidos por el propio ciclo. Anidacin Se pueden colocar un ciclo dentro de otro (anidar), esto quiere decir que una estructura contiene en su interior a otra. Las estructuras pueden ser de igual o de distinto tipo. Siempre que se cumpla con las condiciones que aparecen en la siguientes figuras.

anidado Resumen:

anidado

incorrecto

Existen tres tipos de estructuras repetitivas a) For b) While c) Repeat - until

Cada uno tiene su aplicacin especfica y se debe tener cuidado cuando se anidan.

Repetitivas
1. Leer una lista de 10 valores enteros. Calcular e informar:

a) La suma de los valores positivos. b) El producto de los valores negativos. (Ignorar los valores nulos)

2. a) Ingresar 5 juegos de cuatro valores cada uno. Calcular y emitir. El promedio de cada juego. b) Ingresar N juegos de cuatro valores cada uno. Calcular y emitir. El promedio de cada juego. El proceso finaliza al encontrarse un juego cuyo primer valor es 0.

3. Ingresar dos nmeros enteros positivos y calcular el producto de los mismos por sumas sucesivas.

4. Leer una lista de nmeros positivos que finaliza en 0 y emitir el valor mnimo de la lista.

5. Leer una lista de nmeros enteros que finaliza en 0 y emitir el valor mximo de la lista.

6. dem 5, emitiendo adems la ubicacin del mximo dentro de la lista. (Suponer un nico mximo).

7. Leer 4 juegos de N valores enteros cada uno, donde N se informa al comienzo de cada juego, y emitir el valor mximo de cada grupo. (Suponer un nico mximo ).

8. Dada una lista de valores numricos positivos, finalizada en 0, indicar si esta ordenada en forma

ascendente.

9. Una empresa nos informa para cada uno de sus 20 vendedores:

cdigo de vendedor : 3 dgitos importe de ventas del mes : real Se desea emitir el importe mximo de ventas del mes y cuntos vendedores alcanzaron dicho importe.

10. En una Central Telefnica se procesan los llamados realizados en la siguiente forma:

Por cada llamada se ingresa: cdigo de llamada tipo de da duracin de la llamada

: 3 dgitos (0 al finalizar el proceso) : 1 hbil, 2 feriado : entero > 0.

Siendo los importes Primeros 3 Minuto Adicional Das hbiles a 10 a 2 Feriados a 15 a 3 Se deber emitir: a) El importe a abonar por cada llamada (cdigo - importe). b) La cantidad de llamadas que superen los 3 c) El % de llamados que superan los 3 (sobre el total de llamadas informadas).

11. Se leen 30 valores enteros (comprendidos entre 5 y 40), que representan la temperatura mxima de cada uno de los das de un mes. Se pide hallar e informar : - La temperatura mxima del mes y el da que se produjo. (Se supone nica) - Cuntos das la temperatura supero los 25 C. - El promedio de las temperaturas mxima del mes.
12. Se ingresan los resultados de la evaluacin de un curso de Programacin ; por cada alumno se

informa: nmero de matricula : 4 dgitos (1-9999) asistencia : 1, presente; o, ausente calificacin : 2 dgitos (0-10). A partir de esta informacin se debe calcular e informar: a) Cantidad y % de alumnos presentes. b) Promedio de calificaciones de alumnos presentes. c) % de alumnos aprobados (sobre el total de alumnos presentes). d) Numero de matricula del alumno de mayor calificacin. (Si hay varios alumnos calificacin: numero de matricula y cantidad de alumnos en esa situacin).

con esa

Estructura de datos (arreglos) Vectores y Matrices


Hasta aqu se han visto distintos tipos de estructuras de control. A partir de este punto se ver la aplicacin de las mismas a distintos tipos de problemas. Estructura de datos: Una estructura de datos es una coleccin de datos que pueden ser caracterizados por su organizacin y las operaciones que se definen en ella. Dentro de ellas encontramos distintos tipos, los tipos de datos ms frecuentes en los diferentes lenguajes son: Tipos de datos estndar simples definidos por el programador (no estndar) entero (integer) real (real) carcter (char) lgico (boolean) subrango (subrange) enumerativo (enumerated) arrays (vectores/matrices) registros ficheros conjuntos cadenas (string)

simples o estticos estructurados

compuestos o dinmicos

listas (pilas/colas) listas enlazadas rboles grafos

Las estructuras estticas son aquellas en las que el tamao de memoria ocupado se define antes de que el programa se ejecute y no puede modificarse durante la ejecucin Las estructuras dinmicas son aquellas en las que no se debe definir previamente el tamao de memoria Los datos simples tienen en comn que cada variable representa un elemento, en los estructurados un identificador puede representar mltiples datos individuales, pudiendo cada uno de estos ser referenciados independientemente.

ARRAY UNIDIMENSIONALES: VECTORES


ARRAY (ARREGLO): Es un conjunto finito y ordenado de elementos homogneos. Ordenado : cada elemento del arreglo puede ser identificado Homogneo : son del mismo tipo de dato El tipo ms simple de arreglo es el unidimensional o vector (matriz de una dimensin). Por ejemplo podra ser un vector denominado NOTAS NOTAS[1] 5 NOTAS[2] 8 .......... NOTAS[k] 7 ...... NOTAS[j] 3

Los subndices 1, 2, k, n, indican la posicin del elemento, en Pascal van entre corchetes. El primer elemento es el 5, el segundo es el 8, el elemento k es 7 y el ensimo es 3. Un array puede ser declarado de dos formas distintas que son: Declaraciones Tipo Array En las declaraciones del tipo array usaremos los siguientes pasos.: 1. 2. La estructura del arreglo se describe en Type. Se le asigna ese tipo a una o ms variables.

Type XX = array [1..3000] of real; Var: Alfa : XX;


array y of son obligatorias [1...3000] indica los valores que toman los ndices del vector, son del tipo subrango. real identifica que tipo de elementos almacena el vector. Variables Tipo Array En las declaraciones de variable tipo array se har de la siguiente forma.: 1. En la declaracin se describe la variable.

Var: Alfa : array [1..3000] of real;;


Los elementos cumplen la misma funcin que en el caso anterior.

Dentro de los distintos tipos que un array puede almacenar en sus posiciones, puede ser un tipo Array como el del siguiente tipo:

Type Linea = array [1..40] of char; Hoja = array [1..30] of Linea; Libro = array [1..30] of Linea;
Las operaciones que se pueden hacer con un vector son: asignacin lectura/escritura recorrido (acceso secuencial) actualizar (aadir, borrar, insertar) ordenacin bsqueda Asignacin: Es darle un valor a un elemento de un vector Pseudocdigo en espaol A[3] 5 Cdigo se programa A[3] := 5;

Para la asignacin como para otro procesos se debe recurrir a estructuras repetitivas (desde, mientras o repetir). Ejemplo: A cada uno de los 55 elementos del vector CARGA se le debe asignar el valor 0 Algoritmo de asigna Pseudocdigo en espaol desde I = 1 hasta 55 hacer CARGA[I] 0 fin desde Su estructugrama tiene la siguiente forma desde I = 1 hasta 55 CARGA[I] 0 Cdigo se programa for I = 1 to 55 do CARGA[I] := 0;

Pseudocdigo del programa nombre vector1(program); declaraciones (uses) Crt, Dos; constantes(const) A = 1; B = 55; tipo (type) matriz = array [1..55] de enteros variables (var) I entero CARGA matriz funciones(function)(NO hay); procedimientos (procedure); inicio (begin); limpieza(limpia la pantalla); asigna (hace ciclo y asigna); salida fin(end.)

Diagrama N-S nombre seleccin1 declaraciones Crt, Dos Constantes A, B tipos matriz [55] Variables Y CARGA funciones y procedimientos comienzo (programa) limpieza asigna salida fin (programa)

Como se puede ver tenemos la definicin del vector en tipo o type. El cdigo del procedimiento es: procedure asigna; {* comienzo de la asignacin *} begin for I := A to B do {* se define el ciclo de 1 a 55*} CARGA[I] := 0; {* asigna los valores *} end; {* fin del ciclo *}

Quedndonos el programa de la siguiente manera.

Program Vector_1; {* Este es el primer programa con vectores *} uses Crt, dos; {declaraciones} const {* constantes *} A = 1; B = 55; type matriz = array [1..55] of integer; var I: integer; {* controla el ciclo *} CARGA: matriz; procedure limpieza; {* comienzo de limpieza de la pantalla *} begin ClrScr; end; {* fin de limpieza de la pantalla *} procedure asigna; {* comienzo de la asignacin *} begin for I := A to B do {* se define el ciclo de 1 a 55 *} CARGA[I] := 0; {* asigna la valores *} end; {* fin de la asignacin *} procedure salida; {* comienzo del procedimiento salida *} {* solo sirve para ver resultados *} Var H :char; begin writeln ( 'Presione cualquier tecla '); readln (H); {* esta instruccin y la anterior son para dar tiempo para *} {* ver resultados *} end; {* fin del procedimiento salida *} begin limpieza; asigna; salida; end.
Lectura/escritura: Es una operacin de entrada salida sobre un vector. Manejado por estructuras repetitivas. Ejemplo: Ingresar por teclado cada uno de los 5 elementos de un vector de nombre vec. Y luego leerlos y presentarlos por pantalla en orden inverso al que entraron (de 5 a 1) Algoritmo de escribe

Pgina 109 de 191

Pseudocdigo en espaol desde I = 1 hasta 5 hacer comienzo imprimo mensaje leo y escribo en vec[I] fin desde

Cdigo se programa for I = 1 to 5 do begin write ( ); read (vec[I] ); end;

Su estructugrama tiene la siguiente forma desde I = 1 hasta 5 imprimo mensaje leo vec[I]

El cdigo del procedimiento es: procedure escribir; {* escribe en el vector *} begin for I := A to B do {* se define el ciclo de 1 a 5 *} begin write ('Ingrese vec(',I:1,') : '); readln(vec[I]); {* escribe en el vector *} end; end; {* fin de escritura *}

Pgina 110 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 7


Vectores y Matrices
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

Algoritmo de lee Pseudocdigo en espaol desde I = 1 hasta 5 hacer leo vec[I] fin desde Su estructugrama tiene la siguiente forma desde I = 1 hasta 5 imprimo vec[I] El cdigo del procedimiento es: procedure leer; {* lee el vector *} begin for I := B downto A do {* se define el ciclo de 5 a 1 *} writeln ('vec(',I:1,') = ',vec[I]:2); {* lee el vector y lo saca por pantalla *} end; {* fin de lectura *} Pseudocdigo del programa Nombre vector2(program); Declaraciones (uses) Crt, Dos; Constantes(const) A = 1; B = 5; tipo (type) Matriz = array [1..5] de enteros variables (var) I entero vec matriz Funciones(function)(NO hay); Procedimientos (procedure); inicio (begin); limpieza(limpia la pantalla); escribir (escribe en el vector) leer (lee del vector y saca por pantalla) salida fin(end.) Diagrama N-S nombre seleccin1 declaraciones Crt, Dos Constantes A, B tipos matriz [5] Variables I vec funciones y procedimientos comienzo (programa) limpieza escribe lee salida fin (programa) Cdigo se programa for I = 1 to 5 do read (vec[I] );

Pgina 111 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 7


Vectores y Matrices
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

Program Vector_2 {* Este es el segundo programa con vectores *} uses crt, dos; {declaraciones} const {* constantes *} A = 1; B = 5; type matriz = array [1..5] of integer; var I: integer; {* controla el ciclo *} vec: matriz; procedure limpieza; {* comienzo de limpieza de la pantalla *} begin ClrScr; end; {* fin de limpieza de la pantalla *} procedure escribir; {* escribe en el vector *} begin for I := A to B do {* se define el ciclo de 1 a 5 *} begin write ('Ingrese vec(',I:1,') : '); readln(vec[I]); {* escribe en el vector *} end; end; {* fin de escritura *} procedure leer; {* lee el vector *} begin for I := B downto A do {* se define el ciclo de 5 a 1 *} writeln ('vec(',I:1,') = ',vec[I]:2); {* lee el vector y lo saca por pantalla *} end; {* fin de lectura *} procedure salida; {* comienzo del procedimiento salida *} {* solo sirve para ver resultados *} Var H :char; begin writeln ( 'Presione cualquier tecla '); readln (H); {* esta instruccin y la anterior son para dar tiempo para *} {* ver resultados *} end; {* fin del procedimiento salida *}
Pgina 112 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 7


Vectores y Matrices
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

begin limpieza; escribir; leer; salida; end.


Recorrer: Esta operacin se realiza cuando uno lee el vector, y se aplica tanto cuando se busca un elemento de un vector o cuando se desea listar el mismo, como lo vimos en el ejemplo anterior. Actualizar Aadir: Se denomina as a la operacin de agregar un nuevo, elemento al final del vector. la nica condicin necesaria para esta operacin consiste en la comprobacin de espacio libre en memoria. Ejemplo: Dado el vector U de 7 elementos aadir un elemento ms al vector Algoritmo de aade Pseudocdigo en espaol I 0 repetir I I +1 Cdigo se programa I := 0; repeat I := I + 1; until U[I] = 0 or i >q if I <= k then read (U[I] ) else writeln(No mas lugar)

hasta que U[I] = 0 o i > k si i es menor o igual a k entonces leo nuevo U[I] sino imprimo No ms lugar fin_si Su estructugrama tiene la siguiente forma I I +1 U[I] = 0 o i > k I es menor o igual a k leo nuevo U[I] El cdigo del procedimiento es:

imprimo No ms lugar

procedure agrega; {* agrega un elemento al vector *}

Pgina 113 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 7


Vectores y Matrices
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

begin I:=0; repeat I := I + 1; until (U[I]=0) or (I> 7); {* Se repite hasta que se encuentre una bandera o se termine el vector *} if I<= 7 then begin writeln ('Ingrese un nuevo elemento al vector'); read ( U[I]) end else writeln ('No hay mas lugar en el vector'); end; {* fin de agrega *} Borrar: Es eliminar un elemento de un vector se puede hacer de dos maneras una es reemplazar el elemento por el utilizado como seal. Puede servir pero no es recomendado en proyectos pequeos. Pero no as en grandes. El otro mtodo consiste en mover los elementos que se encuentran debajo de l una posicin hacia arriba, colocando una bandera en la ltima celda. Ambos mtodos tienen el paso de bsqueda en comn utilizado en aadir, lo que varan son los pasos posteriores al Si. (Solo representaremos estos pasos) Ejemplo: Dado el vector U de 7 elementos eliminar un elemento al vector Mtodo rudimentario Algoritmo de elimina (rudimentario) Pseudocdigo en espaol Y 0 repetir I I +1 hasta que U[I] = 0 o I > k si I es menor o igual a k entonces U[I] 0 sino imprimo No existe el elemento fin_si Su estructugrama tiene la siguiente forma I I +1 U[I] = 0 o I > k Cdigo se programa I := 0; repeat I := I + 1; until U[I] = 0 or I >q if I <= k then U[I] := 0; else writeln(No existe el elemento)

Pgina 114 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 7


Vectores y Matrices
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

I es menor o igual a k U[I] 0 Mtodo Optimo Algoritmo de elimina (optimo) Pseudocdigo en espaol I 0 Lee Aux repetir I I +1 hasta que U[i] = Aux o I > k si i es menor o igual a k entonces repetir U[I] U[I + 1] I I +1 hasta que U[i] = 0 o I > k sino imprimo No existe el elemento fin_si Su estructugrama tiene la siguiente forma I 0 Lee Aux I I +1 U[I] = Aux o I > k I es menor o igual a k U[I] U[I+1] I I +1 U[I] = 0 o I > k Insertar: Se debe trabajar sobre un vector ordenado. Consiste en introducir un nuevo elemento al vector sin que este pierda el orden. Para ello se debe comprobar que haya lugar libre en el vector, luego de lo imprimo No existe el elemento Cdigo se programa I := 0; Readln(Aux); repeat I := I + 1; until U[i] = Aux or I >q if I <= k then repeat U[I] := U[I+1]; I := I + 1; until U[I] = 0 or I >q ; else writeln(No existe el elemento) imprimo No existe el elemento

Pgina 115 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 7


Vectores y Matrices
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

cual se deber desplazar hacia bajo los elementos necesarios como para generar un espacio libre en la posicin adecuada sin que se pierda el orden. Algoritmo de inserta (Ordenado creciente) Pseudocdigo en espaol I 0 Lee Aux repetir I I +1 hasta que U[i] = 0 o I > B si i es menor o igual a B entonces I I -1 mientras U[i] > Aux U[I+1] U[I] I I -1 fin mientras U[I+1] Aux sino imprimo No hay lugar fin_si Cdigo se programa I := 0; Read(Aux); repeat I := I + 1; until U[i] = 0 or I >B if I <= B then begin I := I - 1; while U[I] > Aux begin U[I+1] := U[I]; I := I - 1; end; U[I+1] = Aux; end else writeln(No hay lugar)

Su estructugrama tiene la siguiente forma I 0 Lee Aux I I +1 U[I] = Aux o I > k I es menor o igual a k I I -1 U[I] > Aux U[I+1] U[I] I I -1 U[I+1] Aux Ordenacin:

imprimo No hay lugar

Pgina 116 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 7


Vectores y Matrices
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

La ordenacin o clasificacin es, el proceso de clasificar datos en algn orden o secuencia especfica como creciente o decreciente. Existen varios mtodos de ellos elegiremos el de intercambio (decantacin). Algoritmo de ordena (Ordenado creciente) Pseudocdigo en espaol I 0 repetir I I +1 hasta que U[i] = 0 o I > B P I -1 desde I 1 hasta P -1 hacer desde J 1 hasta P - I hacer si U[J] > U[J +1] entonces (intercambiar) Aux U[J] U[J] U[J +1] U[J +1] Aux fin si fin desde fin desde Cdigo se programa I := 0; repeat I := I + 1; until U[i] = 0 or I > B P := I - 1; for I = 1 to P-1 do for J = 1 to P- I do if U[J] > U[J +1] then begin Aux := U[J]; U[J] := U[J +1]; U[J +1] := Aux ; end;

Su estructugrama tiene la siguiente forma I 0 I I +1 U[I] = 0 o I > k P I -1 I 1 hasta P -1 J 1 hasta P - I U[J] > U[J +1] Aux U[J] U[J] U[J +1] U[J +1] Aux

Bsqueda:

Pgina 117 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 7


Vectores y Matrices
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

La bsqueda de un dato dentro de un array consiste en determinar si un elemento N pertenece o no al conjunto de datos y posicin que el ocupa en el conjunto. Los distintos tipos de bsqueda se pueden clasificar en: bsqueda secuencial bsqueda binaria bsqueda por transformacin de claves (hash) En este curso solo se ver el primer tipo, ya que las dos siguientes estn fuera del alcance del mismo. Bsqueda Secuencial: Compara cada elemento del vector con el valor deseado. Si se encuentra es el mtodo que ofrece menor eficiencia pero el ms sencillo. Esto se puede ver en el ejemplo anterior. Ejemplo general Hacer un programa que permita operar con un vector de siete posiciones, que opere con nmeros naturales. Pudiendo agregar, eliminar o insertar un valor, tambin se podr listar todos los valores que tiene el vector. Usaremos como centinela el nmero 0 (cero) por lo cual lo primero que deber hacer el programa deber asignarle a todos los elementos del vector dicho valor . El programa cuenta con tres llamados. begin limpieza; {* limpia la pantalla *} asigna; {* asigna los 0 al vector *} menu; {* llama al mdulo men *} end. Los mdulos limpieza y asigna ya se han detallado. En cuanto a menu es un selector.

Pgina 118 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 7


Vectores y Matrices
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

Algoritmo de menu Pseudocdigo en espaol repetir repetir llama a Limpieza escribir Titulos escribir Opciones leer valor elegido (H) hasta que H > 0 y H < 7 segn sea H hacer 1: llama a Agrega 2: llama a Lista 3: llama a Borra 4: llama a Ordena 5: Inserta sino limpia pantalla fin segn mientras H > 6

Cdigo se programa repeat repeat limpieza; writeln (' M E N U '); writeln ( ' 1. Ingresar un valor al vector '); writeln; write ( ' Elija una opcin '); readln (H); {* lee la opcin *} until (H > 0) and (H < 7); case H of 1 : Agrega; 2 : Lista; 3 : Borra; 4 : Ordena; 5 : Inserta; else clrscr; end; until H = 6;

Pgina 119 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

En el procedimiento borra, lo que realiza el algoritmo es desplazar cada uno de los elementos posteriores al que queremos eliminar a una posicin anterior a la que tenamos. Este procedimiento cuenta con dos partes. a) encuentra el elemento a borrar a) desplaza los elementos posteriores a una posicin anterior, el centinela nos sirve para optimizar el proceso.

Pgina 120 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

program vectores; {* Programa de subrutinas de vectores *} uses crt, dos; {*declaraciones*} const {* constantes *} NL = #13#10; {* Nueva Lnea Carrige Return, Line Feed*} A = 1; B = 7; type vector = array [1..7] of integer; var I: integer; {* controla el ciclo *} U: vector; procedure limpieza; {* comienzo de limpieza de la pantalla *} begin ClrScr; end; {* fin de limpieza de la pantalla *} procedure salida; {* comienzo del procedimiento salida *} {* solo sirve para ver resultados *} Var H :char; begin writeln ( 'Presione cualquir tecla '); readln (H); {* esta instruccin y la anterior son para dar tiempo para *} {* ver resultados *} end; {* fin del procedimiento salida *} procedure Lugar; {* determina cuantos lugares estn ocupados del vector *} begin I:=0; repeat I := I + 1; until (U[I]=0) or (I> 7); {* Se repite hasta que se encuentre una bandera o se termine el vector *} end; {* fin de lugar *} procedure asigna; {* comienzo de la asignacin *} begin for I := 1 to 7 do {* se define el ciclo de 1 a 7 *} U[I] := 0; {* asigna *} end; {* fin de la asignacin *}

Pgina 121 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

procedure Ordena; {* ordena el vector *} var J, P, Aux : integer; begin I := 0; repeat I := I + 1; until (U[I]=0) or ( I>B ); {* Determina cuantos valores validos hay en el vector *} P := I - 1; for I := 1 to P - 1 do {* se define el ciclo hasta el anteltimo valor cargado *} for J := 1 to P - I do if U[J] > U[J+1] then begin {* Intercambia *} Aux := U[J]; U[J] := U[J+1]; U[J+1] := Aux; end end; {* fin del ordenamiento *} procedure lista; {* lee y lista el vector *} begin I := 1; while (U[I] <> 0) and (I<= B ) do {* se lee hasta encontrar *} begin {* un centinela o el final del vector *} writeln ('U(',I:1,') = ',U[I]:3); {* lee el vector y lo saca por pantalla *} I := I + 1; end; Salida; end; {* fin de lectura y listado *}

Pgina 122 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

procedure Borra; {* borra un elemento del vector *} var J : integer; H : char; begin I := 1; write ('Ingrese el valor a borrar : '); read (J); while (U[I] <> 0) and (I<= B ) and (U[I] <> J) do {* se hace la bsqueda *} I := I + 1; if U[I] <> J then begin {* No se encontr el valor *} write (' Elemento no encontrado '); readln(H); end else begin while U[I] <> 0 do {* Se borra el valor *} begin U[I] := U[I+1]; I := I + 1; end; write (' Elemento borrado '); readln(H); end; end; {* fin de borrado *} procedure agrega; {* agrega un elemento al vector *} var H:char; begin Lugar; if I <= 7 then repeat write ('Ingrese un nuevo valor al vector : '); readln ( U[I]); I := I + 1; until (U[I-1] = 0) or (I > B) else begin write ('No hay mas lugar en el vector'); Read (H); end end; {* fin de agrega *}

Pgina 123 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

procedure inserta; {* inserta un elemento al vector ordenado *} var H:char; K, Aux : integer; begin Lugar; if I <= B then begin K := I; write ('Ordeno el vector ? (S/N) '); Read (H); if (H = 'S') or (H = 's') then Ordena; write ('Ingrese el valor a insertar : '); Read (Aux); I := K - 1; while U[I] > Aux do begin U[I+1] := U[I]; I := I - 1; end; U[I+1] := Aux; end else begin write ('No hay mas lugar en el vector'); Read (H); end end; {* fin de agrega *}

Pgina 124 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

procedure menu; {* comienzo del procedimiento menu *} {* genera y maneja un menu de opciones *} Var H :integer; begin repeat repeat limpieza; writeln (' M E N U '); writeln (' -----------', NL, NL, NL); writeln ( ' 1. Ingresar un valor al vector ', NL); writeln ( ' 2. Listar el vector ', NL); writeln ( ' 3. Borrar un valor ', NL); writeln ( ' 4. Ordenar el vector ', NL); writeln ( ' 5. Insertar un valor ', NL); writeln ( ' 6. Salir del programa ', NL, NL); write ( ' Elija una opcion '); readln (H); {* lee la opcin *} until (H > 0) and (H < 7); case H of 1 : Agrega; {* Llamada al procedimiento de agregar *} 2 : Lista; {* Llamada al procedimiento de listar *} 3 : Borra; {* Llamada al procedimiento de borrar *} 4 : Ordena; {* Llamada al procedimiento de ordenar *} 5 : Inserta; {* Llamada al procedimiento de insertar *} else clrscr; {* Llamada a la salida del programa *} end; until H = 6; end; {* fin del procedimiento menu *} begin {* Comienzo del programa *} limpieza; {* limpia la pantalla *} asigna; {* asigna los 0 al vector *} menu; {* llama al mdulo men *} end. {* Fin del programa *}
Copia de un array: Un array puede ser asignado a otro array, si y solo si, ambos tienen el mismo tipo y el mismo tamao. Lo que implica que ambos fueron declarados por el mismo identificador o por identificadores equivalentes. Ejemplo:

Type XX = array [1..30] of byte; YY = array [1..30] of byte;


Pgina 125 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

Var: Alfa, Gama: XX; Beta: YY; Alfa := Gama; {nica expresin vlida}. Beta := Alfa; Gama := Beta;.
Parmetros de valor y de variable: Los arrays pueden ser utilizados como parmetros en funciones y procedimientos; sin embargo, el valor de una funcin no puede ser un array. Las variables tipo array pueden ser utilizadas como parmetros en la comunicacin entre funciones y procedimientos. El array local se inicializa de modo que contiene los mismos valores que el array real correspondiente. El procedimiento manipula el array local y cualquier cambio que se haga en el array local no se refleja en el array real.

type Vector = array [1..10] of real; var M, N, P : Vector; R : boolean; function Identidad (A, B : Vector) : boolean; var end; procedure Suma (A; B: Vector; var C: Vector); end; R := Identidad(M,N); Suma (M,N,P);
Pasaje de elementos individuales: En lugar de pasar todos los elementos del array, se pasan de uno por vez. Para el ejemplo anterior se puede decir:

function Identidad (A, B : real) : boolean; var end; R := Identidad(M[3], N[3]); Array bidimensionales (Tablas)
Un array bidimensional (tabla o matriz) es un array con dos ndices, al igual que los vectores que deben ser ordinales o tipo subrango. Para localizar o almacenar un valor en el array se deben

Pgina 126 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

especificar dos posiciones (dos subndices), uno para la fila y otro para la columna. Los elementos se referencian con el formato: T [3,A] elemento de la fila 3 y columna 4 Los diferentes tipos de ndices no necesitan ser subrango del mismo tipo. Declaracin de los arrays bidimensionales Al igual que en los arrays de una dimensin (los vectores), los arrays multidimensionales (tablas) se crean con declaraciones type y var cuando un programa se codifica en Pascal.

type Tabla = array [1..10,4..25] of real; type Tabla = array [1..10] of array [4..25] of real; var M, : array [1..10,4..25] of real;
Manejo de tablas Para el manejo de tablas, no debemos olvidarnos que las celdas de las mismas se identifican por dos subndices. Por lo tanto cualquier proceso que queramos realizar sobre la misma, involucrar a ambos subndices. Por ejemplo cuando se desea leer un array se podr hacer por filas, segn se puede ver.

var M, : array [1..10,4..25] of real; For Fila := 1 to 10 For Columna := 4 to 25 Writeln(A[Fila, Columna]);
Por columnas.

For Columna := 4 to 25 For Fila := 1 to 10 Writeln(A[Fila, Columna]); Array multidimensionales


Pascal no tiene lmite para el nmero de dimensiones. Pero al usuario corriente no se le recomienda superar las 3 dimensiones, ya que se vuelve complejo su manejo. Declaracin de los arrays multidimensionales Al igual que en los arrays de bidimensionales (las tablas), los arrays multidimensionales se crean con declaraciones type y var cuando un programa se codifica en Pascal.

type Matriz = array [1..10,4..25,A..Z] of byte; type


Pgina 127 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

Vector = array [1..10] of byte; Matriz = array [4..25,A..Z] of Vector; type Vector = array [1..10] of byte; Tabla = array [4..25] of Vector; Matriz = array [A..Z] of Tabla; var M, : array [1..10] of array [4..25,] of array [A..Z] of byte; CONSTANTES DE TIPO ARRAY (TIPEADAS)
Turbo Pascal permite que las constantes con tipo (tipeadas) puedan ser de casi cualquier tipo. Las constantes con tipo, no son constantes en el estricto sentido, sino variables inicializadas, es decir, variables que tienen un valor inicial especfico en la cabecera del programa. Ejemplos

const A : array [1..5] of integer = (10,20,30,40,50); const ( vectores ) Dias Por Mes : array [l..l2] of integer = (31,28,31,30,31,30,31,31,30,31,30,31);

Pgina 128 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

Prctica N 7
13.

Leer una lista de 10 valores enteros. Listarlos por pantalla en sentido inverso al que ingresaron.

14. Dado un vector 15 valores, hacer un programa que pueda obtener, y sacar por pantalla el mayor de los valores el menor de los valores el ms prximo al promedio
15.

Suponiendo que los valores del problema anterior fueran mediciones. Se pide modificarlo de forma tal que sin uso de vectores auxiliares. Se pueda calcular la desviacin media y a desviacin estndar

MD =

X
j =1

S=

( X X )
j j =1

Donde Xj, es cada uno de los valores X es el promedio de los valores, y N la cantidad de valores.
16.

Se lee las letras de una palabra carcter a carcter. El ltimo carcter que ingresa es la barra de dividir(/), que indica que la palabra ha finalizado. Escribir un programa que imprima la palabra en el orden que se ingres y en sentido inverso (pera arep, la palabra podr tener hasta 20 caracteres).

17. Disear un algoritmo recursivo, que permita invertir el contenido de un vector. Como indica el ejemplo: Vector original: 28 35 12 43 56 77 Vector invertido: 77 56 43 12 35 28 El algoritmo no podr usar un vector auxiliar. 18. Hacer un programa que permita realizar la suma y el producto de dos vectores. El usuario puede elegir el tamao del vector (entre 2 y 10 valores) El usuario elige la operacin a realizar.
19.

Dado un vector de 20 posiciones (nmeros enteros). Genere un programa que permita realizar las siguientes operaciones.
Ingresar un elemento en el final de la cola (primera posicin libre del vector).

Comprobando antes del ingreso que existe una posicin libre, sino colocar un mensaje de aviso.
Pgina 129 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

Sacar el elemento que se encuentra en la primera posicin (si hay, sino colocar un

mensaje de aviso), corriendo luego los dems en la cola una posicin hacia delante.
Listar en cualquier momento el contenido de la cola del primero al ltimo. 20.

Dado un vector de 20 posiciones (nmeros enteros). Genere un programa que permita realizar las siguientes operaciones.
Ingresar un elemento en la ltima posicin de la pila (primera posicin libre del vector).

Comprobando antes del ingreso que existe una posicin libre, sino colocar un mensaje de aviso.
Sacar el elemento que se encuentra en la ltima posicin (si hay, sino colocar un

mensaje de aviso).
Listar en cualquier momento el contenido de la pila del primero al ltimo. 21.

Dado un vector de 20 posiciones (nmeros enteros). Genere un programa que permita realizar las siguientes operaciones.
Ingresar un elemento en la posicin que le corresponda de la lista, de manera que la

misma se mantenga en orden creciente. (para lo cual desplaza los dems elementos una posicin para atrs).Comprobando antes del ingreso que existe una posicin libre, sino colocar un mensaje de aviso.
Sacar de la lista el elemento que indica el usuario (si se encuentra, sino colocar un

mensaje de aviso).
Listar en cualquier momento el contenido de la cola del primero al ltimo. 22.

Pascal como otros lenguajes operan con nmeros enteros 2,148 109, estos no tienen errores por redondeo. Para valores ms grandes se trabajan con reales, pero ellos si tienen errores de redondeo. Se le pide a Ud.. Haga un programa que opere con nmeros que poseen entre 10 y 20 cifras, que puedan hacer: Suma Resta Multiplicacin Sin errores, asegurando todas las cifras

** Se recomienda hacer todos los problemas de esta prctica.

Pgina 130 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

Tratamiento de Cadenas de Caracteres


Una cadena de caracteres (string), es una serie de caracteres cuya longitud puede variar entre 1 y 255 caracteres. A este tipo se lo define tipo string, para declarar este tipo de variable se puede hacer de cualquiera de las siguientes formas: Ejemplo

var mensaje : string [80];

type cadena50 = string [50]; var nombre : cadena50;

Longitud de una cadena: La longitud de una cadena es igual al nmero de caracteres (contando como tales tambin los espacios en blanco), pero ocupara en memoria un byte ms. Por ejemplo:

Nombre : string [10];


Si en nombre utilizo Murcielago, ocupar en memoria 11 bytes, 1 por letra y uno ms por la longitud. Nmero de byte 0 10 1 M 2 u 3 r 4 c 5 i 6 e 7 l 8 a 9 g 10 o

En Turbo Pascal existen para una cadena dos longitudes: Longitud fsica: Es la cantidad de memoria que se le reserva a la cadena al comienzo del programa, 10 bytes en el caso de Nombre del ejemplo anterior. Longitud lgica: Es la cantidad el nmero de caracteres que se tienen almacenados en esa variable en un cierto momento. Por ejemplo: si durante el programa hago Nombre := Ada; La longitud lgica ser igual a 3. Se puede acceder a cualquier elemento de una cadena: para ello hay que indicar el nmero del carcter al cual se quiere acceder. Ejemplo

Var Carac : char; Nombre : string[10]; begin Nombre := Murcielago


Pgina 131 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

Carac := Nombre [6];


A partir de aqu la variable Carac toma el valor e OPERACIONES CON CADENAS Dos cadenas pueden sumarse. Pap de + Pepe Papa de Pepe Dos cadenas pueden compararse. Pap < Pepe porque a < e Lo que compara es el ASCII que le corresponde a los caracteres. Comienza comparando el primero con el primero, si son iguales lo hace con el segundo y as sucesivamente hasta encontrar la desigualdad. Procedimientos y funciones con cadenas Funcin Concat: Es equivalente a la suma de string, si la cantidad de caracteres supera los 255 corta el excedente del string.

Concat(S1, S2, S3) S1 + S2 + S3


Funcin Length(s): Devuelve un entero que es la longitud lgica del string s

Length(nombre) 10
Procedimiento Delet: Delet(s, posicin, nmero)

Delet(nombre,3,4) Mulago
Elimina a partir del tercer carcter, 4 caracteres (rcie). Procedimiento Insert: Insert(cad1,s, posicin)

Insert(nombre, 'ju', 4) Murjucielago


Inserta el string s o en nuestro caso los caracteres entre apstrofos en cad1, a partir del carcter posicin. Funcin Pos: Pos(S1, S2) devuelve la posicin donde S1 = S2

Pos(nombre, 'ci', ) 4
Devuelve la posicin de un string dentro de la cadena.
Pgina 132 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

Funcin Copy: Copia parte de un string y lo almacena en otro.

S2 := Copy(S1, posicin, nmero) S2 := Copy(Nombre, 5, 4) "iela"


Procedimiento Str: Str(valor,cad1) Convierte un nmero en un string.

Str(1573, S1) "1" "5" "7" "3"


Procedimiento Val: Val(S1,nmero, cdigo) Ingresa un string S1 y devuelve un valor, si lo puede convertir el cdigo ser 0, caso contrario indica la posicin del carcter que no pudo convertir.

Str(S1, V1, C1) si S1 = "1" "5" "." "7" "3" V1 =15.73 y C1 = 0 Str(S1, V1, C1) si S1 = "1" "5" "a" "7" "3" V1 = 0 y C1 = 3
Funcin Upcase: Convierte minsculas a maysculas. Upcase (char)

Upcase (a) A Upcase (A) A Upcase (4) 4

FUNCIONES PARA MANEJO DE PANTALLA y TECLADO


La unidad Crt posee una serie de rutinas de salida a pantalla y otras sin salida a pantalla como Delay, Sound, NoSound, ClrEol Borra todos los caracteres desde la posicin actual del cursor hasta el final de la lnea sin mover el cursor. ClrScr Borra todos los caracteres de la pantalla y coloca el cursor en la esquina superior izquierda. Si se esta trabajando en una ventana, borrar los caracteres de la ventana y coloca el cursor en la esquina superior izquierda de la ventana.
Pgina 133 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

DelLine Borra la lnea donde se halla el cursor. Las lneas que se hallan por debajo son desplazadas hacia arriba. GotoXY Coloca el cursor en la coordenada x y. X le indica la columna 1 a 80, e Y el nmero de lnea de 1 a 25. El ngulo superior izquierdo tiene coordenadas (1,1). Si se opera en una ventana, las coordenadas son relativas a la ventana. GotoXY(x, y) x e y son de algn tipo entero. InsLine Inserta una lnea vaca donde se halla el cursor. Desplazando las dems una hacia abajo. HighVideo Selecciona caracteres de alta intensidad. LowVideo Selecciona caracteres de baja intensidad. NormalVideo Fija el atributo del texto al valor que tena inmediatamente antes que el programa fuera ejecutado. TextBackground (Color :Byte) Define el color de fondo. Color toma valores de 0 a 7. TextColor (Color : Byte) Define el color del texto 0 a 15, y 128 (parpadeo). WhereX : byte Devuelve la columna donde se halla el cursor. WhereY : byte Devuelve la lnea donde se halla el cursor. Window : (x1, y1, x2, y2 :byte) Define una ventana de texto, dando las coordenadas del vrtice superior izquierdo y del vrtice inferior derecho. Sound (Frec : word) Emite un sonido de una frecuencia (Frec en herzios)

Pgina 134 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

NoSound Interrumpe la emisin de sonido. Delay (ms : word) Detiene la ejecucin del programa durante ms milisegundos. ReadKey char Lee un carcter del teclado. El carcter no se visualiza en pantalla. Key Pressed : boolean. Devuelve el valor verdadero si se pulsa una tecla, y falso en caso contrario.

SUBRANGO ENUMERADOS CONJUNTOS


SUBRANGO:
Un tipo subrango se define a partir de un tipo ordinal, especificando dos valores constantes de ese tipo, que a partir de aqu sern el lmite inferior y superior del conjunto de datos de esa clase. Un tipo subrango es un por ser un subconjunto de un tipo ordinal es tambin ordinal, y sus valores se ordenan de la misma forma que estn ordenados en el tipo patrn del cual derivan. Ejemplos 1 ..10 F .. I a .. z 0 .. 9 este tipo subrango consta de los elementos 1,2,3,4,5,6,7,8,9,10 este subrango consta de los caracteres F, G, H, l este subrango consta de los caracteres a hasta z este subrango consta de los caracteres 0 a 9 en la

Para operar con el tipo subrango, se pueden hacer de dos maneras distintas. a) Creando un tipo y luego asignndolo b) Definindolo directamente a una variable declaracin de variables

type IntervaloEnteros = -100..100; var Grande : integer; Reducido : IntervaloEnteros;

var Grande : integer; Reducido : -100..100;

El tipo subrango es esencialmente utilizado para dos fines: 1. Mejorar la legibilidad y la comprensin 2. Aumentar la fiabilidad de los programas, ya que Pascal detecta si un valor recibe un valor fuera del intervalo declarado.
Pgina 135 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

El tipo subrango puede ser ledo de teclado como cualquier otra tipo de variable (Read o ReadLn), y presentado a travs de pantalla por medio de los procedimientos correspondientes (Write, WriteLn). Compatibilidad de tipos: Los tipos subrangos y los tipos de donde proceden, son compatibles, en el sentido de que cualquier tipo de subrango pertenece al patrn. En el ejemplo anterior es legtima la sentencia:

Grande := Reducido;
Tambin es legtimo el cdigo de programa

ReadLn (Grande); Reducido := Grande;


Sin embargo, si al leer con Readln (Grande) se toma para Grande un valor de 500 (fuera del rango IntervaloEnteros), la sentencia de aplicacin

Reducido := Grande
produce un mensaje de error. Como ya se ha dicho un uso importante de los tipos subrangos es detectar ciertos errores de programacin o carga de datos. Si se espera que una variable tome valores siempre en un cierto rango, entonces se debe declarar esa variable que adopte el tipo subrango. De este modo, si la variable de tipo subrango toman un valor fuera del rango especificado, se producir un mensaje de error. 10.3.4. La directiva del compilador R Turbo Pascal no siempre produce un mensaje de error cuando el valor de un tipo subrango est fuera de su rango definido. Sin embargo, puede tener la posibilidad de visualizar dichos mensajes de error, insertando la siguiente lnea en el archivo que contenga su programa: ($R+) Esta lnea se denomina directiva del compilador. Su valor por defecto (desactivada) es $R-, que no realiza la verificacin de los ndices del subrango, pero que por el contrario aumenta la velocidad de ejecucin. Durante la fase de depuracin y puesta a punto de un programa es aconsejable utilizar la directiva $R+, insertndola al principio del programa.

ENUMERADOS:
Pascal permite otro tipo de dato ordinal denominado tipo enumerado. Estos tipos de datos son definidos por el usuario. Un tipo enumerado se compone de un conjunto de valores referenciados por identificadores. Estos valores constituyen una lista de identifica- dores de constantes que el programador debe indicar en la parte del programa reservada a las declaraciones. Eligiendo adecuadamente nombres significativos para los identificadores se pueden hacer programas ms fciles de leer. Ejemplos
Pgina 136 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

type Vehiculos = (avion, barco, tren, automovil, moto, colectivo); Frutas = (frutillas, manzana, pera, naranja, duraznos);
Estos tipos pueden ser asignados a variables. As, por ejemplo, se puede declarar

Var Transporte : Vehiculos; Postre : Frutas;


Caractersticas Un tipo de dato enumerado es un tipo ordinal cuyo orden se indica por la disposicin de los valores en la definicin. El nmero de orden de cada elemento comienza en 0 para el primer elemento.

type Arcoiris = (Verde, Amarillo, Rojo, Azul, Verde);


Verde es el elemento nmero 0. Amarillo es el elemento nmero 1. Mircoles es el elemento tercero (3). Las variables de tipo enumerado slo pueden tomar valores de estos tipos.

type Dia (lunes, martes, miercoles, jueves, viernes, sabado, domingo); var Semana : dia;
Las sentencias siguientes son vlidas:

Semana := miercoles; while Semana = jueves do


Los nicos operadores que pueden acompaar a los enumerados son los operadores de relacin y de asignacin.

lunes < martes verdadera jueves < viernes verdadera


La expresin

Colegio < martes


produce un error de sintaxis, ya que los valores mostrados se asocian con dos tipos diferentes. El operador de asignacin puede definir el valor de una variable cuyo tipo es un tipo enumerado. Dado que estn ordenados los valores de un tipo enumerado, pueden ser comparados con la ayuda de operadores relacionales. Mediante las sentencias selectivas y repetitivas es posible dar gran flexibilidad a su lenguaje. Ejemplo a) Ejemplo b)

Pgina 137 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

if hoy < sabado then Write (Dia laborable) Else Write (Fin de semana);

While hoy <> domingo do


Ejemplo c)

For hoy := lunes to viernes do

Los procedimientos de entrada/salida no pueden leer o escribir datos de tipo enumerado.

Write (jueves); producir un error ReadLn (jueves); producir un error


Si se desea obtener una salida se debe utilizar una sentencia Case

Case hoy of lunes : Write ("Lunes"); martes : Write ("Martes"); miercoles : Write ("Mircoles"); jueves : Write ("Jueves"); viernes : Write ("Viernes"); sabado : Write ("Sbado") else Write ("Domingo") end;
Un valor no puede figurar en dos tipos enumerados diferentes. Los tipo enumerado no pueden leerse o escribirse en los archivos de texto. Subrangos de tipo enumerados Se pueden declarar subrangos de tipo enumerado Por ejemplo

type mes = (enero, febrero, marzo, abril, mayo, junio, julio, agosto, septiembre, octubre, noviembre, diciembre); primavera verano otonio invierno var mensual : mes; vendimia : otonio; = octubre .. diciembre; = enero.. marzo; = abril .. junio; = julio .. septiembre;

Pgina 138 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

vendimia := abril; vendimia := julio; Funciones Ordinales

sentencia vlida sentencia no vlida

Los tipos de datos ordinales como ya nos hemos referido, cada valor tiene un nico predecesor (excepto el primero) y un nico sucesor (excepto el ltimo). Basndose en esta propiedad Pascal incorpora tres funciones predefinidas. Ord, Pred y Succ. Ord Determina la posicin relativa de un elemento en la serie, las series no numricas comienzan por la posicin 0 (cero). Por ejemplo:

type mes = (enero, febrero, marzo, abril, mayo, junio, julio, agosto, septiembre, octubre, noviembre, diciembre); var {* definicin de las variables *} A : Integer;

begin {* Comienzo del programa *} ...... A := ord(junio); Writeln ('El ordinal de Junio es: ',A); {* Salida del resultado *}
A debe ser de tipo ordinal (byte o integer), el resultado de esta carrera es 5. Pred y Succ Pred devuelve el predecesor del argumento y Succ devuelve el sucesor del argumento.

Pred (marzo) febrero Succ (marzo) abril Pred (enero) indefinido Succ (diciembre) indefinido
Aunque no se vea a simple vista su utilidad estas funciones pueden ser aplicadas para ejemplos como el siguiente.

Pgina 139 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

While mensual <= diciembre do begin A := Ord (mensual); mensual := Succ(mensual); end; CONJUNTOS
Es otro tipo de datos estructurado con el que se puede operar en Pascal. es el conjunto (set). Una variable de tipo set se denomina conjunto. El concepto es idntico al matemtico, y con este tipo de datos se puede realizar las mismas operaciones que las vistas en matemtica (unin, interseccin, etc.). En Pascal el conjunto de elementos se representan entre corchetes y separados por comas El mximo nmero de elementos de un conjunto es 256. Como en el lgebra existe el conjunto vaco, es aquel que no contiene ningn elemento. Declaraciones de tipos de datos conjuntos Para declarar o definir variables tipo conjunto, se deber definir en funcin de un tipo base que deber ser ordinal. Ejemplos

type mes = (enero, febrero, marzo, abril, mayo, junio, julio, agosto, septiembre, octubre, noviembre, diciembre); meses = set of mes; digitos = set of byte; (no acepta otro tipo de enteros) caracteres = set of char; var Periodo, Cuatrimestre, Trimestre : meses; Posicion: digitos;
El conjunto como cualquier otra variable parte de una condicin de vaco. Los elementos pueden ser colocados en los conjuntos utilizando una sentencia de asignacin.

Periodo := [ ]; Posicion := [3, 5, 6, 8] Cuatrimestre := [abril..julio];


En el primer caso se le asign ser un conjunto vaco, en el segundo de los casos estar compuesto por esos cuatro elementos (3, 5, 6, 8), y en el ltimo de los casos sern los meses (abril, mayo, junio, julio). Dos tipos de conjuntos son compatibles, si tienen los tipos base compatibles. En este caso sus variables representativas se pueden utilizar en sentencias de asignacin.

Periodo := Trimestre := [ ];
Una variable de tipo conjunto se suele inicializar al conjunto vaco o al conjunto universal.
Pgina 140 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

Include A partir de la versin 7 de Pascal. Una de las formas para agregar un elemento a un conjunto es a travs del procedimiento include. Exclude Tambin es una modificacin de la versin 7. Exclude es un procedimiento para eliminar un elemento a un conjunto.

Ejemplos

Posicion :=[3, 5, 6, 8]; A := 15; include(Posicion, 22); include(Posicion, A); exclude(Posicion, 22); exclude(Posicion, A);
En ambos casos se da como parmetros el conjunto (Posicion) y el elemento a agregar o quitar. El mismo puede darse como valor o como una variable, de esta ltima forma la variable debe ser de igual tipo que el tipo base del conjunto. La relacin In Determina si un elemento pertenece o no a un conjunto. El resultado de evaluar la expresin relacional puede ser true o false. El tipo de datos de elemento y la lista de elementos deben ser compatibles. Ejemplo

if A in Posicion then

if 15 in Posicion then

La variable A y los elementos de Posicion deben ser compatibles. OPERACIONES CON CONJUNTOS En Pascal es posible realizar tres operaciones binarias sobre ellos que son: unin, interseccin y diferencia. Unin (+) Las tres operaciones cumplen estrictamente las reglas del lgebra de conjuntos. Por lo tanto la unin de dos conjuntos da como resultante otro conjunto que tiene por elementos a los elementos comunes y no comunes de ambos conjuntos. La unin de conjunto se representa por el smbolo de la suma.

Pgina 141 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

Alfa := [3, 5, 8, 14]; Beta := [2, 5, 9, 14, 22]; Capa := Alfa + Beta;
Ejemplo

Capa = [2, 3, 5, 8, 9, 14, 22]

La unin es el segundo mtodo para ingresar un elemento a un conjunto

ReadLn(A); Posicion := Posicion + [A]


Diferencia (-) La diferencia entre dos conjuntos da otro conjunto que tiene por elementos, todos los elementos del primer conjunto que no pertenecen al segundo. Se representa por el smbolo de la diferencia. Capa := Alfa - Beta; Capa = [3, 8] Capa := Beta - Alfa; Capa = [2, 9, 22] La diferencia es el segundo mtodo para sacar un elemento a un conjunto Ejemplo

ReadLn(A); Posicion := Posicion - [A]


Interseccin (*) La interseccin entre dos conjuntos da otro conjunto que tiene por elementos, todos los elementos comunes a ambos conjuntos. Se representa por el smbolo del producto. Capa := Alfa * Beta; Capa = [5, 14] COMPARACIN DE CONJUNTOS Los conjuntos se pueden comparar entre s mediante el uso de los operadores relacionales (=, <> , < =, > =). Los operandos deben ser del mismo tipo base. El resultado de la comparacin es un valor lgico: true o false. Igualdad de Conjuntos Dos conjuntos son iguales, cuando sus tipos de base son equivalentes, y adems todo elemento del primer conjunto pertenece al segundo y todo elemento del segundo conjunto pertenece al primero. Sub y Superconjunto Un conjunto Alfa es subconjunto (esta incluido) de otro Beta, si todo elemento de Alfa pertenece a Beta, pero no todo elemento de Beta pertenece a Alfa. En dicho caso Beta ser un superconjunto de Alfa

Pgina 142 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

LOS CONJUNTOS COMO PARMETROS Los conjuntos se pueden utilizar como parmetros de funciones y procedimientos. En el caso de una funcin, se debe recordar que la misma devuelve un nico valor, por lo tanto su tipo deber ser un dato simple y no puede ser un conjunto. Ejemplo Realizar un programa que determine los nmeros primos de entre 1 y N elegido por el usuario (menor que 65536). Utilizando la Criba de Eratstenes. La idea de la criba es la siguiente: Dado una serie ordenada de valores, por ejemplo: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 se prueba cuales son mltiplos de dos y se los elimina de la serie 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 se busca el siguiente de la serie (3) y se elimina los mltiplos de l 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 y as sucesivamente. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 El ltimo valor con que se prueba es con R el cual es la parte entera de la raz cuadrada del mayor de los valores de la serie.

Pgina 143 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

program Criba_de_Eratostenes; {* Ejemplo de conjuntos *} {* Desarrollo del Ing. Fernando J. LAGE *} {* Septiembre 1998*} uses wincrt,windos; {* declaraciones de librerias, para correr bajo Windows *} {* crt,dos;*} {* declaraciones de librerias, para correr bajo DOS *} const Enter = #13; Ln = #13#10; {* Indica un salto de rengln *} type Valores = set of byte; {* Tipo conjunto *} var {* definicin de las variables *} Criba : Valores; N, S: Byte; h : char; procedure ingresos; begin {* Comienzo del procedimiento de ingreso de valores *} repeat Write ('Ingrese un valor mayor que 0 y menor o igual 255 '); Readln (N); until (N>0) and (N<255) end; {* Fin del procedimiento ingreso*} function Extremo(A:Byte):Integer; {funcin que devuelve la parte entera de la raz cuadrada } var Raiz : Real; begin {* Comienzo de la funcin Extremo *} Raiz := Sqrt(A); Extremo := Trunc(Raiz); end; {* Fin de la funcin Extremo *}

Pgina 144 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

procedure Llenado(var Alfa : Valores; {* tipo conjunto *} Beta : Byte); var i : Byte; begin {* Comienzo del procedimiento de llenado de valores *} WriteLn (Ln,Ln,'Elementos del conjunto original : '); For i := 1 to Beta do begin Write (i,' '); Alfa := Alfa + [i] {* Agrega un elemento al conjunto *} end end; {* Fin del procedimiento Llenado *} function Multiplo(A,B:Byte):Boolean; {* Funcin que devuelve si un nmero es mltiplo o no *} var Mul : Byte; begin {* Comienzo de la funcin Extremo *} Mul := ((B div A)*A); Multiplo := Mul=B end; {* Fin de la funcin Extremo *} procedure Primos(var Alfa : Valores; {* tipo conjunto *} Beta, Gama: Byte); var i,j : Byte; begin {* Comienzo del procedimiento de bsqueda de valores no primos*} WriteLn (Ln, Ln, 'Elementos del conjunto original : '); For i := 2 to Gama do If i in Alfa Then For j := i+1 to Beta do If j in Alfa then If Multiplo(i,J) then Alfa := Alfa - [j]; end; {* Fin del procedimiento Primos *}

Pgina 145 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

procedure salidas (Beta :Valores); {* tipo conjunto *} var i : byte; begin {* Comienzo del procedimiento de egreso de valores *} Writeln (' ',LN); {* Se deja renglones en blanco *} For i := 1 to N do if i in Beta then begin Write (' ',i); {* Salida del resultado *} exclude (Beta,i) end; Writeln (' son primos'); {* Salida del resultado *} Writeln (' ', Ln, Ln, Ln, Ln); {* Deja cinco renglones en blanco *} writeln ('Presione un tecla para terminar'); {* Salida de mensaje *} read(h); ClrScr; end; {* Fin del procedimiento salidas*} begin {* Comienzo del programa *} {* Se limpia la pantalla *} ClrScr; {* Declaro al conjuto vacio *} Criba := []; {* Ingreso del extremo superior *} Ingresos; {* Llenado del conjunto *} Llenado(Criba, N); {* Clculo de el extremo de bsqueda *} S := Extremo(N); {* Obtencin de los nmeros primos *} Primos(Criba,N,S); {* Salida de resultados *} Salidas(Criba); end. {* Fin del programa *}

ORDENACIN, BSQUEDA E INTERCALACIN


Los procesos que consumen ms tiempo durante la operacin de un ordenador, son ordenacin, bsqueda e intercalacin. La ordenacin se clasifica en interna (matrices), y

Pgina 146 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

externa (archivos). Las tcnicas ordenacin, mezcla e intercalacin deben ser dominados por el alumno. ORDENACIN Es un proceso para clasificar los elementos de un array en un orden particular. Por ejemplo, clasificar un conjunto de nmeros en orden creciente o una lista de nombres por orden alfabtico. La clasificacin es una operacin tan frecuente en programas de computadora que una gran cantidad de algoritmos han sido diseados para clasificar listas de elementos con eficacia y rapidez. La eleccin de un determinado algoritmo depende del tamao del vector o array a clasificar, el tipo de datos y la cantidad de memoria disponible. La ordenacin o clasificacin es el proceso de organizar datos en algn orden o secuencia especfica tal como creciente o decreciente para datos numricos o alfabticamente para datos de caracteres. Los mtodos de ordenacin se dividen en dos categoras: ordenacin interna (vectores, tablas, matrices) ordenacin externa (archivos) La ordenacin de arrays se maneja en la memoria RAM, por lo tanto se hace a gran velocidad y acceso aleatorio. La ordenacin de archivos se suele hacer sobre soportes de almacenamiento externo, discos, cintas, etc.. Estos dispositivos son ms lentos en las operaciones de entradasalida, pero pueden contener mayor cantidad de informacin. Los mtodos de ordenacin que desarrollaremos podrn ser explicados a vectores, pueden ser extendidos a matrices o tablas, ya que toda ordenacin de tabla o matriz se basa en la ordenacin de una fila o columna, que no es otra cosa que un vector. Los ms populares son: Intercambio Seleccin Insercin

MTODO DE INTERCAMBIO O DE BURBUJEO El algoritmo de clasificacin de intercambio o de la burbuja, debera ser denominado de decantacin y se basa en el principio de comparar pares de elementos adyacentes e intercambiarlos entre s hasta que estn todos ordenados. Partamos que poseemos el siguiente vector y se desea ordenar en forma ascendente(el menor en la posicin V(1) y el ltimo en V(9)): V(1) V(2) V(3) V(4) V(5) V(6) V(7) 64 28 13 23 79 54 25

Pgina 147 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

V(8) V(9) Los pasos a dar son:


1. 2. 3.

18 41

Comparar V(1) y V(2). Si estn en orden, se mantienen como estn; caso contrario se intercambian entre s. A continuacin se comparan los elementos 2 y 3; de nuevo si no estn en orden, se intercambian sino no. Y as sucesivamente, hasta que cada elemento del vector ha sido comparado con sus elementos adyacentes y se han realizado los intercambios necesarios. Pseudicdigo desde I = 1 hasta 8 hacer si elemento (I) > elemento (I + 1) entonces intercambiar elementos (I, I+ 1) fin si fin desde N-S I = 1 hasta 8 elemento (I) > elemento (I + 1) intercambiar elementos (I, I+ 1)

El mtodo se expresa as:

Intercambiar es un procedimiento para trocar los valores de dos elementos A(I), A(I + l), es una accin compuesta que contiene las siguientes acciones: AUX A(I) A(I) A(I + 1) A(I + 1) AUX El valor ms grande rpidamente baja al ltimo lugar, mientras el ms pequeo sube posicin a posicin hacia el comienzo de la lista al igual que las burbujas de aire en una botella de gaseosa. Tras realizar un recorrido completo por todo el vector, el elemento ms grande habr llegado a ocupar la ltima posicin. En el segundo recorrido, el segundo elemento llegar a la penltima, y as sucesivamente. Ahora veremos como funciona esta idea en el ejemplo anterior.

Nmero de paso
Inic V(1) V(2) V(3) V(4) V(5) V(6) V(7) 64 28 13 23 79 54 25

1
28 13 23 64 54 25 18

2
13 23 28 54 25 18 11

3
13 23 28 25 18 11 54

4
13 23 25 18 11 28 54

5
13 23 18 11 25 28 54

6
13 18 11 23 25 28 54

7
13 11 18 23 25 28 54

8
11 13 18 23 25 28 54

Pgina 148 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

V(8) V(9)

18 11

11 79

64 79

64 79

64 79

64 79

64 79

64 79

64 79

El pseudo cdigo de este algoritmo de ordenacin, es el que desarrollamos en los siguientes pasos Pseudocdigo algoritmo burbuja1 lNlClO para I 1 hasta N 1 hacer para J 1 hasta N 1 hacer si X(J) > X(J + 1) entonces AUX X(J) X(J) X(J + 1) X(J+ 1) AUX fin si fin para fin para El diagrama N-S del algoritmo de burbuja1: I 1 hasta N 1 J 1 hasta N 1 X(J) > X(J + 1) AUX X(J) X(J+ 1) {intercambiar} X(J) X(J + 1) AUX {intercambiar}

Si se efecta n-1 veces la operacin sobre un vector de n valores se tiene ordenada el vector. Cada operacin requiere n-1 comprobaciones o test y como mximo n-1 intercambios. La ordenacin total exigir un mximo de (n 1) *(n l) = (n 1)2 intercambios de elementos. Las sucesivos situaciones de los elementos del vector se ve en el listado anterior. Si observamos en detalle notamos, que en le segundo paso no es necesario llegar a la ltima posicin del vector ya que en el se encuentra el mayor valor, en el tercer paso los dos ltimos valores ya estn ordenados. Y as sucesivamente. Por lo cual en esta ordenacin hay un mximo de cambios igual:
Pgina 149 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

(n 1) + (n 2) + (n 3) + ... + 3 + 2 + 1 = n * (n 1) / 2 intercambios de elementos.

n * (n 1) 2 Para optimizar este algoritmo su pseudocdigo deber ser el siguiente. (n 1) 2


Pseudocdigo algoritmo burbuja2 INICIO para I 1 hasta N 1 hacer para J 1 hasta N I hacer si X(J) > X(J + 1) entonces AUX X(J) X(J) X(J + 1) X(J+ 1) AUX fin si fin para fin para {intercambiar}

Como se puede notar el nico cambio que sufri el pseudocdigo es N-I en lugar de N-1 en el segundo para, este cambio no alterar el diseo del diagrama N-S por lo cual no lo repetiremos. Segunda mejora Esta segunda mejora toma el caso cuando aun no cumplidos todos los ciclos el vector ya se encuentra ordenado. En este caso es posible que estemos realizando ciclos innecesarios, los que consumen tiempo de procesador sin beneficio. Para evitar este problema lo que se har es colocar una bandea. Su funcin es que cuando en un ciclo no se haga ningn cambio (lo que implica que el vector ya esta ordenado), la bandera indique esto y se detenga el proceso. Pseudocdigo algoritmo burbuja3

Pgina 150 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

lNlClO Bandera F (falso) I 1 mientra Bandera = F y I < N hacer Bandera V (verdadero) para J 1 hasta N I hacer si X(J) > X(J + 1) entonces AUX X(J) X(J) X(J + 1) X(J+ 1) AUX Bandera F fin si Incrementa I fin para fin para El diagrama N-S del algoritmo de burbuja3: Bandera F (falso) Bandera = F y I < N Bandera V (verdadero) J 1 hasta N I X(J) > X(J + 1) AUX X(J) X(J+ 1) {intercambiar} X(J) X(J + 1) AUX F I 1 {intercambiar}

Bandera

Incremente I

Pgina 151 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

Cdigo en Pascal del procedimiento para el algoritmo de burbuja3:

program Ordenamiento_Burbuja; {* Ejemplo del ordenamiento por el mtodo de burbujeo *} {* Burbujeo mejorado con bandera *} {* Archivo BurbujaB.Pas *} {* Desarrollo del Ing. Fernando J. LAGE *} {* Octubre 1998*} uses wincrt,windos; {* declaraciones de librerias, para correr bajo Windows *} {* crt,dos;*} {* declaraciones de librerias, para correr bajo DOS *} const Enter = #13; Ln = #13#10; type {* Definicin de tipos *} Numeros = 1..3200; Vector = array[1..256]of Numeros; Dato : Vector; Filas : Byte; procedure IntercambioE (var Capa, Omega : Numeros); {* IntercambioE produce el intercambio de dos valores del vector *} var Aux : Numeros; {* elemento auxiliar *} begin {* Comienzo del procedimiento IntercambioE *} Aux := Capa; Capa := Omega; Omega := Aux End; {* Fin del procedimiento IntercambioE*}

Var

Pgina 152 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

procedure BurbujaB (var Alfa: Vector; Elementos: integer); {* BurbujaB produce el ordenamiento usando el mtodo de la burbuja *} {* Optimizado por el uso de una Bandera *} var Bandera : Boolean; Iteracion, Contador : Integer; {* Iteracion reemplaza I del pseudocdigo *} {* Contador a J del pseudocdigo *} begin {* Comienzo del procedimiento BurbujaB *} Bandera := False; Iteracion := 1; While (Bandera = False) and (Iteracion < Elementos) do begin Bandera := True; For Contador := 1 to Elementos - Iteracion do If Alfa[Contador] > Alfa[Contador + 1] then Begin Intercanbio (Alfa[Contador],Alfa[Contador + 1]); Bandera := False End; {* Fin del If*} Inc(Iteracin) End {* Fin del While*} {* Fin del procedimiento BurbujaB*}

End;

begin {* Comienzo del programa *} {* Se limpia la pantalla *} ClrScr; ........................ {* Llamado al procedimientos BurbujaB *} BurbujaB(Dato,Filas); ........................ end. {* Fin del programa *}
MTODO POR INSERCIN
I

Este mtodo consiste en insertar un elemento en el vector en una parte ya ordenada de este vector y comenzar de nuevo con los elementos restantes. Por ser utilizado generalmente por los jugadores de cartas se le conoce tambin por el nombre de mtodo de la baraja. Este mtodo, para usarlo en forma optima, debe aplicarse a medida que se carga el vector. As, por ejemplo, supongamos el caso del ejemplo anterior. Insercin mientras se carga el vector
Pgina 153 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

Nmero de paso
Ing. V(1) V(2) V(3) V(4) V(5) V(6) V(7) V(8) V(9)

64
64

28
28 64

13
13 28 64

23
13 23 28 64

79
13 23 28 64 79

54
13 23 28 54 64 79

25
13 23 25 28 54 64 79

18
13 18 23 25 28 54 64 79

11
11 13 18 23 25 28 54 64 79

Cuando ingresa el primer valor (64) se lo debe colocar en la primera posicin. Cuando ingrese el segundo (28), se lo comparar con el primero y si es menor se desplaza el primero a la segunda posicin y se coloca el segundo en dicho lugar. Caso contrario se agrega detrs del ltimo. Cuando ingrese el tercero se chequera con el segundo si es menor el segundo se chequea contra el primero y si es menor que este se desplaza una posicin hacia abajo el segundo y el tercero, y se coloca en primer lugar el dato. Si hubiera sido mayor que el primero solo se desplaza el segundo y se hubiera colocado ah, sino simplemente se hubiera colocado en la tercera posicin. Este proceso se repite con cada elemento del vector. Otra forma de implementar lo mismo, es compara el valor con cada elemento del vector desde el ltimo hasta encontrar uno menor y en cada caso que es mayor (el elemento del vector) desplazar una posicin hacia abajo. Aqu vamos a desarrollar, pseudocdigo, diagrama N-S y cdigo Pascal para este ltimo caso. Pseudocdigo algoritmo insercin1 para I 1 hasta N hacer Leo Dato J I - 1 Mientras Auxiliar < X(J) o J >0 hacer X(J+1) X(J) J J - 1 fin mientras X(J+1) Auxiliar fin para fin

Pgina 154 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

El diagrama N-S del algoritmo de insercin1: I 1 hasta N Auxiliar Dato J I - 1 Auxiliar < X(J) o J > 0 X(J+ 1) Auxiliar J J-1 X(J+1) Auxiliar

El cdigo Pascal que pasmos a desarrollar para este caso se divide en un programa principal donde se lee y escribe el vector, y procedimiento donde se ordena el vector a medida que ingresan los datos.

Cdigo Pascal del algoritmo de Imsercin1:

program Ordenamiento_Insercion; {* Ejemplo del ordenamiento por el mtodo de Insercin *} {* Insercin mejorado con bandera y trabaja mientras carga el vector*} {* Archivo Insercio.Pas *} {* Desarrollo del Ing. Fernando J. LAGE *} {* Octubre 1998*} uses wincrt,windos; {* declaraciones de librerias, para correr bajo Windows *} {* crt,dos;*} {* declaraciones de librerias, para correr bajo DOS *} const Enter = #13; Ln = #13#10; type {* Tipo conjunto *} Numeros = 1..3200; Vector = array[1..5]of Numeros;
Dato I, J : Vector; : Byte;

Var Valor : Numeros;

Pgina 155 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

procedure Insercion (var Alfa:Vector; Val:Numeros; Elemento: Byte); {* Insercin produce el ordenamiento usando el mtodo de insercin *} {* El cual utiliza una Bandera *} {* Alfa es el vector que contienen los datos *} {* Val es el dato y Elemento la cantidad de valores cargados *} var Iteracion : Integer; {* Iteracion reemplaza al J del pseudocdigo *} begin {* Comienzo del procedimiento Insercion *} Iteracion := Elemento - 1; While (Val < Alfa[Iteracion]) and (Iteracion > 0) do Begin Alfa [Iteracion+1]:= Alfa [Iteracion]; Dec(Iteracion); End; {* Fin del While *} Alfa[Iteracion + 1] := Val; End; {* Fin del procedimiento Insercion *} begin {* Comienzo del programa *} {* El programa solo juega con 5 valores porque es demostrativo *} {* Se limpia la pantalla *} ClrScr; For I := 1 to 5 do begin {* Carga del dato *} Write ('Dato(',I:1,')= '); ReadLn (Valor); {* Llamado al procedimientos Insercion *} Insercion( Dato, Valor, I); end; {* Listado del dato *} For J := 1 to 5 do WriteLn ('Dato(',J:2,')= ',Dato[J]); end. {* Fin del programa *}
Insercin en un vector ya almacenado Supongamos que el vector se encuentra ya almacenado y lo queremos ordenas. En este caso comenzamos enviando a una variable auxiliar el segundo elemento del vector (28), Luego se compara esta variable con el primer valor, si es menor se desplaza el primer valor una posicin hacia abajo y se coloca en el primer lugar el contenido de la variable auxiliar, caso contrario el contenido de la variable auxiliar se coloca en la segunda posicin.

Pgina 156 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

Luego se toma el tercer valor del vector (13) y se lo pasa a la variable y se lo compara con el segundo valor del vector si es menor el segundo valor se copia en la tercera posicin y se compara la variable con primer valor (aqu nos encontramos en el caso anterior), caso contrario copiamos el valor auxiliar en la tercera posicin. As sucesivamente hasta que llegamos a la ltima posicin del vector. Debe tenerse en cuenta que cuando estamos trabajando con el elemento n del vector, los n-1 elementos anteriores ya han sido ordenados, lo que implica que hasta la posicin n-1 el vector est ordenado, y es en dicho rango donde realizaremos la bsqueda de la nueva posicin del dato por lo cual para optimizar dicha bsqueda se podr realizar por el mtodo de Bsqueda Binaria, lo que aumentar la eficiencia. El desarrollo con Bsqueda Binaria se ver ms adelante.

Nmero de paso
Ing. V(1) V(2) V(3) V(4) V(5) V(6) V(7) V(8) 64 28 13 23 79 54 25 18

1
28 64 13 23 79 54 25 18

2
13 28 64 23 79 54 25 18

3
13 23 28 64 79 54 25 18

4
13 23 28 64 79 54 25 18

5
13 23 28 54 64 79 25 18

6
13 23 25 28 54 64 79 18

7
13 18 23 25 28 54 64 79

8
11 13 18 23 25 28 54 64

V(9) 11 11 11 11 11 11 11 11 79 El algoritmo de insercin propiamente dicho no sufre modificaciones lo nico que se debe modificar es el programa principal donde se lee y escribe el vector, y procedimiento donde se ordena el vector a medida que ingresan los datos. Cdigo Pascal del algoritmo de llamado insercin1:

begin {* Comienzo del programa *} {* El programa solo juega con 5 valores porque es demostrativo *} {* Se limpia la pantalla *} ClrScr; For I := 1 to 5 do begin {* Carga del dato *} Write ('Dato(',I:1,')= '); ReadLn (Valor); end;

Pgina 157 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

For I := 2 to 5 do begin {* Carga del dato *} Valor := Dato [I]; {* Llamado al procedimientos Insercion *} Insercion( Dato, Valor, I); end; {* Listado del dato *} For J := 1 to 5 do WriteLn ('Dato(',J:2,')= ',Dato[J]); end. {* Fin del programa *}
El algoritmo de insercin se mejora notablemente aplicando el mtodo de bsqueda binaria para encontrar el lugar de insercin. Este mtodo tiene un nmero de comparaciones igual a:

C=

n2 n 2 n2 n 4

Cuando n esta ordenado en sentido inverso al deseado

C=

ORDENACIN POR SELECCIN Este mtodo se basa en buscar el elemento menor del vector y colocarlo en primera posicin. Luego se busca el mayor que se encuentra entre el segundo elemento y el ltimo, y se coloca en la segunda posicin, y as sucesivamente. Los pasos sucesivos a dar son: 1. Seleccionar el elemento menor del vector de n elementos. 2. Intercambiar dicho elemento con el primero. 3. Repetir estas operaciones con los n l elementos restantes, seleccionando el segundo elemento; luego continuamos con los n 2 elementos restantes hasta que slo quede el mayor. Aplicaremos en el ejemplo anterior el mtodo para poder aclararlo.

Pgina 158 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

Nmero de paso
Ing. V(1) V(2) V(3) V(4) V(5) V(6) V(7) V(8) V(9) 64 28 13 23 79 54 25 18 11

1
11 28 13 23 79 54 25 18 64

2
11 13 28 23 79 54 25 18 64

3
11 13 18 23 79 54 25 28 64

4
11 13 18 23 79 54 25 28 64

5
11 13 18 23 25 54 79 28 64

6
11 13 18 23 25 28 79 54 64

7
11 13 18 23 25 28 54 79 64

8
11 13 18 23 25 28 54 64 79

1. Entre las posiciones V(1) y V(9) el menor valor se halla en V(9) y es el nmero 11 este valor lo intercambio con V(1) 2. Entre las posiciones V(2) y V(9) el menor valor se halla en V(3) y es el nmero 13 este valor lo intercambio con V(2) 3. Entre las posiciones V(3) y V(9) el menor valor se halla en V(8) y es el nmero 18 este valor lo intercambio con V(3) 4. Y as sucesivamente hasta llegar a buscar entre V(8) y V(9) (entre V(n-1) y V(n). Que ser el ltimo caso. Ahora vamos a desarrollar, pseudocdigo, diagrama N-S y cdigo Pascal para este algoritmo. Pseudocdigo algoritmo seleccin para I 1 hasta N - 1 hacer Aux V(I) K I para J J+1 hasta N hacer si V(J) < Aux Aux V(J) K J fin_si fin_para V(K) V(I) V(I) Aux fin_para entonces

Pgina 159 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

El diagrama N-S del algoritmo de seleccin: I 1 hasta N - 1 Aux V(I) K I J J+1 hasta N V(J) < Aux Aux V(J) K J

V(K) V(I) V(I) Aux

Cdigo Pascal del algoritmo del procedimiento de seleccin

procedure Seleccion (var Alfa: Vector; Elemento: Byte); {* Seleccin produce el ordenamiento usando el mtodo del mismo nombre *} {* Alfa es el vector que contienen los datos *} {* Elemento la cantidad de valores cargados *} var I, J, K : Integer; Aux: Numeros;

Pgina 160 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

begin

{* Comienzo del procedimiento Seleccin *} Begin Aux := Alfa[I]; K := I; For J := I + 1 To Elemento do If Alfa [J] < Aux then Begin Aux := Alfa [J]; K := J; End; {* Fin del If y del For J *} Alfa[K] := Alfa[I]; Alfa[I] := Aux; End; {* Fin del For I *} {* Fin del procedimiento Seleccin *}

For I := 1 To Elemento 1 do

End;
Mtodo de Shell

Es una mejora del mtodo de insercin directa que se utiliza cuando el nmero de elementos a ordenar es grande. El mtodo se denomina "Shell" en honor de su creador Donald Shell. El mtodo Shell se basa en fijar el tamao de los saltos constantes, pero de ms de una posicin. Supongamos un vector de elementos de n posiciones, en lugar de compara la primera con la segunda. la segunda con la tercera y as sucesivamente hasta comparar la n-1 posicin con la posicin n. Define una apertura igual a la mitad de n (entera), y compara la primera posicin con la (N/2)+1, la segunda con la (N/2)+2 y as sucesivamente hasta llegar (N/2)-1 con N. Con la misma apertura se repite el proceso hasta que en una vuelta no existan ms cambios. Aqu es cuando se reduce la apertura a la mitad (entero) y se repite el proceso de las comparaciones, hasta que no se produzcan cambios. En esta situacin se reduce el salto a la mitad. Y esto se hace as sucesivamente hasta que con salto uno en una vuelta no haya ms cambios. Aplicaremos en el ejemplo anterior el mtodo de Shell

Pgina 161 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

Nmero de paso
Ape V(1) V(2) V(3) V(4) V(5) V(6) V(7) V(8) V(9) 64 28 13 23 79 54 25 18 11

4
64 28 13 18 11 54 25 23 79

4
11 28 13 18 64 54 25 23 79

4
11 28 13 18 64 54 25 23 79

2
11 18 13 28 25 23 64 54 79

2
11 18 13 23 25 28 64 54 79

2
11 18 13 23 25 28 64 54 79

1
11 13 18 23 25 28 54 64 79

1
11 13 18 23 25 28 54 64 79

El algoritmo resultante expresado con la estructura iterar ser: Pseudocdigo algoritmo Shell

inicio E N+1 repetir E ent(E/2) repetir Salida Verdadero Para I 1 hasta N E hacer si X(I)> X(I+ E) entonces AUX X(I) X(I) X(I+ E) X(I + E) AUX SW Falso fin_si (fin para) hasta Salida = Verdadero hasta E= 1 fin

Pgina 162 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

El diagrama N-S del algoritmo de Shell: E N + 1 E entero (E/2) Salida Verdadero I 1 hasta N - E X(I) < X(I+E) Aux X(I) X(I) X(I+E) X(I+E) Aux

Salida = Verdadero E=1 Cdigo Pascal del algoritmo del procedimiento Shell

procedure Shell (var Alfa: Vector; N: Byte); {* Insercin produce el ordenamiento usando el mtodo de insercin *} {* Alfa es el vector que contienen los datos *} {* N es la cantidad de valores cargados *} var Salida : Boolean; Aux : Numeros; E, I : Byte;

Pgina 163 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

Repeat

begin {* Comienzo del procedimiento Shell *} E := N + 1; E := E div 2; Salida := True;

Repeat For I := 1 To (N-E) Do Begin


Aux := Alfa [I]; Alfa[I] := Alfa[I+E]; Alfa[I+E]:= Aux; Salida := False End

If Alfa[I] > Alfa[I+E] Then

Shell*}

Until Salida Until E= 1 End; {* Fin del procedimiento

Mtodo de ordenacin rpida ("quicksort") El mtodo de ordenacin rpida (quicksort) para ordenar o clasificar un vector o lista de elementos (array), se basa en el hecho de que es ms rpido y fcil de ordenar dos listas pequeas que una lista grande. Se denomina mtodo de ordenacin rpida y es debido Hoare. El mtodo se basa en la estrategia tpica de "divide y vencers. La lista a clasificar almacenada en un vector o array se divide en dos: una que contiene los valores menores o iguales a un cierto valor especfico y otra con todos los valores mayores que ese valor. El valor elegido puede ser cualquier valor arbitrario del vector y se denomina valor pivote. El primer paso es dividir la lista original en dos sublistas o subvectores y un valor de separacin. As, el vector V se divide en tres partes: - Subvector VI que contiene los valores inferiores o iguales. - El elemento de separacin. - Subvector VD que contiene los valores superior o iguales. Los subvectores VI y VD no estn ordenados, excepto en el caso de reducirse a un elemento. Consideremos la lista de valores.

La primera parte del desarrollo de este mtodo ha sido tomado del libro Fundamentos de programacin de Luis Joyanes Aguilar Pgina 164 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

18 11 27 13 9 4 16 Se elige un pivote, 13. Se recoge la lista desde el extreme izquierdo y se busca un elemento mayor que 13 (se encuentra el 18). A continuacin, se busca desde el extremo derecho un valor menor que 13 (se encuentra el 4). 18 11 27 13 9 4 16 Se intercambian estos dos valores y se produce la lista 4 11 27 13 9 18 16 Se sigue recorriendo el vector por la izquierda y se localiza el 27, y a continuacin otro valor bajo se encuentra a la derecha (el 9). Intercambiar estos dos valores y se obtiene 4 11 9 13 27 18 16 Al intentar este proceso una vez ms, se encuentra que las exploraciones de los dos extremes vienen juntos sin encontrar ningn futuro valor que est "fuera de lugar". En este punto se conoce que todos los valores a la derecha son mayores que todos los valores a la izquierda del pivote. Se ha realizado una particin en la lista original que se ha quedado dividida en dos listas ms pequeas: 4 11 9 [13] 27 18 16 Ninguna de ambas listas se encuentran ordenadas; sin embargo, basados en los resultados de esta primera particin, se pueden ordenar ahora las dos particiones independientemente. Esto es, si ordenamos la lista 4 11 9 y 27 18 16 la lista quedar ordenada. En el ejemplo siguiente, se parte de otra lista. 50, 30, 20, 80, 90, 70, 95, 85, 10, 15, 75, 25 el autor dice que se debe tomar como pivote el nmero 50, dividir la lista en dos y repetir los pasos anteriores. Es sin duda quicksort el mtodo ms rpido de ordenacin que existe. Pero el mismo se basa en que el pivote ser el elemento que quedar en el medio de la lista. Crear un algoritmo que sirva para quicksort es relativamente sencillo. Lograr un algoritmo que determine en una lista dada cual ser el elemento pivote es lo complejo. Por eso cada empresa de software tiene su propio algoritmo de quicksort.

ARCHIVOS
Un archivo o fichero (file) es una estructura de datos que reside en memoria secundaria, consistente en un conjunto de informaciones estructuradas en unidades de acceso denominadas registros, todos del mismo tipo y en nmero indeterminado. En contraste con los arreglos, el tamao de los archivos no es fijo, y est limitado solamente por la capacidad de almacenamiento disponible.
Pgina 165 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

Adems cuando uno apaga la mquina los arreglos se pierde su contenido, el contenido de los archivos no se pierde por esta causa. Los archivos en general, estn compuestos por registros. Mediante programas adecuados se pueden manipular los distintos tipos de archivos (texto, tipeados, no tipeados). Cada archivo es referenciado por un identificador (su nombre y su extensin). Cuando hablamos de archivos tipeados, nos referimos a un archivo de registros. Los registros en un archivo son de dos tipos. Registro lgico: que es cada uno de los componentes del archivo, conteniendo el conjunto de informaciones que se tratan de manera unitaria. Est constituido por uno o ms elementos denominados campos, que pueden ser de diferentes tipos y que a su vez pueden estar compuestos por subcampos. Si un archivo contiene la informacin de un conjunto de individuos u objetos, sus registros contienen la informacin de cada uno de ellos y los campos los diferentes dates que lo componen. Por ejemplo, en el archivo de empleados de una empresa, cada registro contiene la informacin de un empleado y los campos contienen su nombre, direccin, fecha de ingreso, etc. Registro fsico: o bloque corresponde a la cantidad de informacin que se transfiere en cada operacin de acceso (lectura o escritura). Un registro lgico y registro fsico, se diferencian en que el tamao y formato del registro lgico los define el programador, mientras que el tamao del registro fsico viene dado por las caractersticas fsicas de la computadora utilizada. En general, un bloque puede contener uno o ms registros, pero tambin puede ocurrir que un registro ocupe ms de un bloque. En el primer caso se dice que los registros estn bloqueados, denominndose factor de bloqueo al nmero de registros lgicos que contiene cada registro fsico. Para poder seleccionar un registro del conjunto que compone el archivo, se necesita un dato identificativo que lo distinga de los dems. Se denomina campo clave a un campo especial del registro que sirve para identificarlo. Algunos archivos en sus registros no tienen campo clave, mientras que otros pueden tener varios, denominndose a stos clave primaria, secundaria, etc. Por ejemplo, en el archivo de empleados antes citado, un campo clave podra ser el nmero de DNI y una clave secundaria el nombre completo del empleado. 1.1.1.1.1.3 CARACTERISTICAS DE LOS ARCHIVOS Las principales caractersticas que diferencian esta estructura de dates de las restantes son las siguientes:

Residencia en soportes de informacin externos, tambin denominados memorias secundarias o auxiliares, como son las cintas y discos (magnticos u opticos). Independencia respecto de los programas, lo que significa que la vida del archivo no est limitada por la vida del programa que lo cre y tambin que en diferentes momentos pueden hacer uso del mismo archivo diferentes programas.
Pgina 166 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

Permanencia de las informaciones almacenadas, es decir, la informacin contenida en un archivo no desaparece cuando se desconecta la computadora, a diferencia de todas las informaciones almacenadas en la memoria central. Gran capacidad de almacenamiento, siendo esta capacidad tericamente ilimitada; por el contrario, las estructuras de datos que residen en la memoria central tiene limitado su tamao por la capacidad de sta.

1.1.1.1.1.4 CLASIFICACIN DE LOS ARCHIVOS Los archivos se pueden clasificar por su tipo. 1.1.1.1.1.5 Tipos de archivos Los elementos de un archivo pueden ser de cualquier tipo, simple o estructurado, excepto un tipo archivo (file) o cualquier tipo estructurado con un componente tipo archivo. Los principales tipos de archivos son:
Archivo de datos: es una coleccin de datos localizados en un dispositivo de

entrada./salida

Archivo de programa: un programa codificado en un lenguaje especfico y localizado o almacenado en un dispositivo de almacenamiento. Archivo de texto: una coleccin de caracteres almacenados como una unidad en un dispositivo de almacenamiento.

1.1.1.1.1.6 Tipos de acceso a un archivo Existen dos modalidades para acceder a un archivo de datos: acceso secuencial y acceso directo o aleatorio.
Acceso secuencial exige el tratamiento elemento a elemento, es necesario

una exploracin secuencial, comenzando desde el primer elemento.


Acceso directo permite procesar o acceder a un elemento determinado. Si

se referencia correctamente almacenamiento.

por

su

posicin

en

el

soporte

de

OPERACIONES SOBRE ARCHIVOS


Entre las operaciones ms usuales que se realizan con archivos destacan la creacin, copia, consulta, clasificacin, concatenacin, interseccin, fusin, particin, actualizacin, reorganizacin y borrado. Estas operaciones se llevan a cabo bien por un programa del usuario, o bien por un programa del propio sistema operativo de la computadora. Las operaciones ms usuales a nivel de registro son: insercin, supresin, modificacin y consulta del contenido de los mismos. Estas operaciones se hacen generalmente a travs de programas de actualizacin.

Pgina 167 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

Creacin Consiste en la escritura o grabacin en un soporte determinado de todos los registros que van a conformar el archivo. Los dates pueden ser introducidos desde un teclado, pueden preceder de otro archivo o ser obtenidos como resultado de algn proceso. Copia Es una de las operaciones ms usadas y consiste en crear un archivo nuevo como duplicacin de otro existente. La copia puede realizarse en el mismo o en diferente soporte de informacin. Un caso particular de esta operacin es la impresin (copia en impresora) de un archivo. Consulta Se realiza para obtener el contenido de uno o varios registros. En muchos casos va precedida de una bsqueda de los mismos. Por ejemplo, si se desean conocer todos los datos de un alumno, almacenados en el archivo de alumnos, lo haremos mediante un programa al que proporcionamos el nmero de matrcula como dato de entrada, que ser utilizado para realizar la bsqueda y sacar por pantalla o impresora el resto de campos almacenados en el registro correspondiente a ese nmero de matrcula.

Clasificacin u ordenacin Esta operacin consiste en reubicar los registros, de tal forma que queden ordenados con respecto a los valores de un campo que denominamos clave de ordenacin. En un archivo clasificado sern mucho ms rpidas las consultas que se realicen por medio del campo que rija la ordenacin. Por ejemplo, ser muy til clasificar alfabticamente el archivo de alumnos por el campo nombre, ya que la mayora de las consultas se harn utilizando este campo. Concatenacin Dados dos archivos con registros de igual estructura, se trata de obtener uno slo en que figuren todos los registros del primero, y a continuacin todos los del segundo. Esta operacin se puede generalizar para ms de dos archivos. Interseccin Dados dos archivos de igual estructura, se trata de obtener otro archivo en el que figuren los registros comunes a ambos. Por ejemplo, si tenemos el archivo de alumnos matriculados en un centro en primer curso y deseamos saber quienes son repetidores, realizaremos una interseccin con el archivo de alumnos matriculados en primer curse el ao o aos anteriores. Fusin o mezcla A partir de dos archivos de igual estructura clasificados por un mismo campo, se obtiene como resultado un archivo que contiene los registros de ambos y que mantiene la ordenacin. La fusin o mezcla de archivos no clasificados consiste en la concatenacin de los mismos. Particin Consiste en descomponer un archivo en dos, atendiendo a alguna caracterstica de sus registros.

Pgina 168 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

Por ejemplo, podemos realizar una particin del archivo de alumnos en dos, segn el valor del campo EDAD; el primero contendr los mayores y el segundo los menores de una determinada edad. Actualizacin Es la operacin de modificar un archivo de situacin por medio de un archivo de movimientos, conteniendo altas, bajas y modificaciones que hay que realizar sobre el archivo maestro para ponerlo al da. Reorganizacin La operacin de reorganizacin consiste en reubicar los registros de un archivo que ha sufrido actualizaciones, de tal manera que se ocupen los posibles huecos libres intermedios, resultantes de bajas de registros, para optimizar la ocupacin de la memoria, liberando la que no estaba aprovechada. Borrado Eliminacin total del archivo cuando ya no se necesite, dejando libre el espacio de memoria que ocupaba en el soporte utilizado. 1.1.1.1.1.7 ARCHIVOS EN TURBO PASCAL Todos los archivos de Turbo Pascal, con independencia de su tipo, comparten caractersticas comunes. Todos los archivos se utilizan como entrada y/o salida

El sistema operativo almacena y accede a archivos, genera directorios, copia, renombra y transfiere archivos entre discos, memoria y dispositivos de E/S (modem, impresora...).

Los archivos se pueden almacenar en disquetes y unidades de discos duros. Existen otros dispositivos de almacenamiento (cinta, discos pticos, discos RAM, etc.), aunque son menos frecuentes. Los archivos de texto estndar de Turbo Pascal tienen la extensin .TXT; por consiguiente, es casi norma el uso de la extensin .DAT para aquellos archivos creados por Ud. O sus programas.

Tipos de archivos
Existen tres tipos de archivos de datos en Turbo Pascal:
texto (text) o secuenciales (acceso secuencial), son archivos que contienen texto

(carcter ASCII)
tipeados (tipificados) o con tipo (file of) (acceso aleatorio), aleatorios, archivos que

contienen datos de cualquier tipo como integer, byte, real, record... (datos con estructuras y contenidos conocidos)
no tipeados (no tipificados) o sin tipo (file). archivos en los que no se conoce su

estructura ni su contenido; estn concebidos para acceso de bajo nivel a los datos de un disco (E/S de bytes).

Pgina 169 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

LOS ARCHIVOS DE TEXTO (SECUENCIALES)


Un archivo de texto es un tipo estndar, estn constituidos por caracteres del cdigo ASCII. Un archivo de texto consta de una serie de lneas separadas por una marca fin de lnea (eoln, end of line). La marca fin de lnea es una secuencia de caracteres CR (carriage return) y LF (line feed), que se conoce como retorno de carro y avance de lnea. La combinacin CR/LF (cdigos ASCII 10 y 13) se conoce como delimitador y se obtiene pulsando la tecla Intro (Enter o Return), o bien las combinaciones de teclas CTRL-M, CTRL-J.
1.1.1.1.1.7.1 Declaracin de archivos

Para declarar un archivo como en otros casos se declara primero el tipo y luego una variable asociado al tipo.

Type T_Archivo = file of char; {* archivo de texto *} T_Texto = file of text; Var Archivo : T_Texto;

Pgina 170 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

PROCEDIMIENTOS Y FUNCIONES DE TRATAMIENTO DE ARCHIVOS.


Para todos los tipos de archivos Procedimientos Assign ChDir Close Erase GetDir MkDir Rename Reset Rewrite RmDir Funciones Eof IOResult Eoln SeekEof SeekEoln Append Flush Read Readln SetTexBuf Write Writeln Solo para archivos de texto

Ejemplo de cmo crear un archivo de texto Un archivo de texto est constituido por una serie de lneas de caracteres separados por CR/LF. Esta combinacin se obtiene, cuando se realiza una pulsacin de la tecla Intro. () Esto es una prueba de un archivo de texto Cada lnea en un archivo de texto finaliza con CR/LF, es decir un Retorno de Carro y un Avance de Lnea (lnea vaca) 45671.45 es la cantidad total Los archivos de texto se terminan con una marca final de archivo Ctrl-Z (eof, end of file). Cuando trabajamos con ellos en Pascal es obligatorio declararlos. Los archivos de texto se pueden crear con el editor del sistema operativo WordPad o con un programa de edicin de texto(Word, WordStar, etc.) en estos casos en el momento de grabarlos (Guardar Como) se elegir la opcin Slo Texto. Tambin se puede escribir un archivo utilizando el editor de Pascal. Funciones eoln//eof La funcin eoln devuelve el estado de fin de lnea de un archivo. Es una funcin de tipo lgico. Eoln (f) devuelve true si en la posicin actual del archivo (puntero) est la marca fin de lnea, o bien si eof (f) es true; en caso contrario devuelve false.

Pgina 171 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

Ejemplo de uso

While not eoln(f)


Donde f es el alias del archivo. WriteLn (eoln); La funcin eof (end of file), fin de archivo, devuelve el estado de un archivo de texto. Es una funcin de tipo lgico que indica si el fin del archivo se ha almacenado; devuelve true si se ha almacenado, false en caso contrario. Ejemplo de uso

While not eof(f)


Archivos tipo char Hay muy pocas diferencias entre un archivo de texto y un archivo de caracteres (char). La nica diferencia es que un archivo de texto se divide en lneas y un archivo de caracteres no. Los archivos de caracteres se leen y escriben carcter a carcter, mientras que los archivos de texto se leen lnea a lnea. La declaracin es mediante las palabras:

file of char; PROCESAMIENTO DE ARCHIVOS DE TEXTO


El tratamiento de archivos de cualquier archivo incluyendo los de texto, nos exige de los siguientes pasos: Declarar el archivo. Abrir el archivo. Leer o escribir datos de l, o en l. Cerrar el archivo.

Declaracin de un archivo
Para declarar un archivo debe realizarse los siguientes pasos: Declara una variable de tipo archivo TEXT. Asociar a esta variable el nombre de un archivo en disco (sentencia assign). Ejemplo de uso

Type Tipo_Archivo = file of char;


Var

Mi_Archivo : Tipo_Archivo; Archivito : text;


Como cualquier otra variable, una variable de tipo TEXT se puede definir local o globalmente; pero al contrario que otras estructuras, la longitud de una variable archivo no se precisa.

Pgina 172 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

Asignacin de archivos
La operacin de asignar un archivo establece una correspondencia entre variable tipo archivo con un archivo externo situado en un disco. Mirndolo desde otro punto de vista, ser asignarle un alias por el cual llamaremos al archivo en cuestin. Ejemplos

Begin ............. ............. assign (Mi_Archivo, Archivo1.txt); o Write (ingrese el nombre del archivo a usar); ReadLn (Nombre); assign (Archivito, Nombre); o assign (Archivito, C:\Algoritmos\practica\Archivo1.txt);
Despus que se ha asignado una referencia a un archivo, el mismo esta listo en el caso de los de texto para alguno de estos tres procedimientos: reset: abrir para leer, si se llama a un archivo no existente el programa aborta por error E/S. rewrite: crear un archivo nuevo, si existiera otro con ese nombre lo borra append: agrega informacin a un archivo existente, si no existe produce un error de E/S. La forma de en que se utilizan estos procedimientos es la siguiente. Siempre van despus de la asignacin Ejemplos

reset (Mi_Archivo); o rewrite (Archivito); o append (Archivito);


Pero cmo hacemos para que la sentencias reset no produzca un error si el archivo al cual hago referencia no existe. O cmo evito sobreescribir sobre un archivo existente (el cual guarda datos que an necesito, cuando ejecuto rewrite. Para esto casos se debe dar la directiva al compilador { $I+ }. Con esta se desactiva la deteccin de errores de Entrada/Salida y as se previene una parada en la ejecucin del programa ante la eventualidad de la ausencia de un archivo. Una posible solucin es la siguiente:

{ $I- ) reset (Archivito) { $I+ )


Pgina 173 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

if IOResult = 0 then {* el archivo existe *) else { * el archivo NO existe *}


La funcin IOResult devuelve el valor 0 si la sentencia reset se ha ejecutado correctamente. El correcto uso de la misma evitar los problemas ya descriptos.

Escritura de un archivo
Una vez que se ha abierto un archivo para escritura, los procedimientos a utilizar son: write y writeln sirven para escribir datos en el nuevo archivo. Ejemplos

Write (Archivito, Esto es lo que quedar grabado en el archivo); WriteLn (Archivito, y esto tambin quedar grabado); o var Texto : string [45]; Archivito : text; Write (Archivito,Texto); Lectura de un archivo
Los procedimientos read y readln se utilizan para la lectura de los datos situados en un archivo de tipo texto. Ejemplo

var Total, Horas : real; Nombre : string [30]; .................................... ReadLn (Archivito, Nombre, Horas,Total);
Las variables que usan los procedimientos read y readln pueden ser char, integer, real o string

Aadir datos a un archivo de textos


El procedimiento Append abre un archivo existente para aadir datos al final del mismo. Como ya se ha dicho, si el archivo no existe, se produce un error; y si ya estaba abierto, primero se cierra y luego se reabre. Ejemplo

program Agregar; uses Crt, dos;


Pgina 174 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

var Fichero : Text; begin Assign (Fichero,Archivo.TXT); Rewrite (Fichero); {* crea nuevo Fichero *) WriteLn (Fichero, Primera lnea); Close (Fichero); {* cierra archivo, guarda cambios *} Append (Fichero); (* Abre para aadir texto *) WriteLn (Fichero, esta lnea es agregada al texto original); Close (Fichero) end. REDIRECCIONAR LAS ENTRADAS/SALIDAS
Redireccionar es cambiar la direccin de salida o entrada del dato. La direccin normal de salida es la pantalla, cuando redirecciono puedo hacer que en lugar de salir el archivo por pantalla salga por impresora o se agregue a otro archivo. Con el sistema operativo D.O.S. esto era muy comn, pero con la aparicin de Windows en sus distintas versiones ha tendido a desaparecer su uso. En Turbo Pascal se puede efectuar una redireccin de la entrada estndar (el teclado) y de la salida estndar (la pantalla), y lograr con esto que nuestros programas sean ms flexibles. Ejemplo (Este ejemplo ha sido sacado del Libro de Joyanes Aguilar (Pag 506). Lee el contenido de un archivo y escribirlo en otro segundo archivo, carcter a carcter.

program Copia;
Uses

crt; var Fichero1, Fichero2 : Text ; Caracter : char; begin ClrScr; Assign (Fichero1, ); Rewrite (Fichero1); Assign (Fichero2, ); Reset (Fichero2); while not Eof (Fichero2) do begin Read (Fichero2, Car); Write (Fichero1, Car) end; Close (Fichero1); Close (Fichero2)
Pgina 175 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

end.
Los pasos a dar para la ejecucin de este programa son los siguientes. a) Compilemos este programa con el nombre Copia y obtendremos Copia.EXE. b) Desde el prompt (>) del DOS ejecute la orden Copia Ahora la pantalla esta limpia. Ingrese un texto (un rengln o menos) por teclado, cuando presione Enter, el texto volver a ser escrito en la pantalla. Hasta que presione <Ctrl Z>. Algunas aplicaciones de la redireccin (smbolo >) de este programa son: copia > lpt1 es igual que el anterior en lugar de escribir en pantalla lo hace por impresora copia < muestro.txt se ve por pantalla el contenido del archivo copia entrada.txt < > salida.txt copia el contenido del archivo entrada.txt en el archivo salida.txt copia entrada.txt < > lpt1 copia el contenido del archivo entrada.txt en la impresora, en otras palabras imprime el archivo entrada.txt.

Este programa funciona bien con DOS y Windows 3.1. NO se aconseja su uso con Windows 95 o posteriores por que se puede Colgar el sistema operativo.
Algunas funciones no vistas

GetDir (i,S): Busca el directorio actual. Si i es 0 la unidad es la actual, para 1 es la unidad A, 2 es B, 3 es C. S es la variable de tipo string, que contiene el directorio actual. ChDir(S(i)) :Cambia de directorio al indicado en S. i es la unidad y debe indicarse si el directorio pertenece a una unidad distinta de la actual. MkDir (S(i)): Crea el directorio S en la posicin actualen ese caso i no va, sino debe ser indicada la unidad y el camino. RmDir (S): Elimina el directorio S. Erase (F): Elimina el archivo F Rename (F1,F2): cambia el nombre del archivo F1 por F2. SetTexBuf (Archivo, Buf): asigna un buffer a un archivo de texto. Flush (Archivo): vaca el buffer al archivo en el disco. Todos estos comandos pueden dar errores de E/S por lo tanto es conveniente utilizar la directiva I para determinar la existencia o no de alguno de estos elementos. El siguiente programa es un programa que copia carcter a carcter.

program Copia; uses crt, dos; var Fichero1, Fichero2: Text; Caracter : char; begin ClrScr; Assign (Fichero1, 'c:\salida.txt'); Rewrite (Fichero1);
Pgina 176 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

Assign (Fichero2, 'c:\entrada.txt'); Reset (Fichero2); while not Eoln (Fichero2) do begin while not Eof (Fichero2) do begin Read (Fichero2, Caracter); Write (Fichero1, Caracter) end; readln(Fichero2); {* se usa para saltar el carcter de fin de lnea *} writeln(Fichero1) {* se usa para insertar el carcter de fin de lnea *} end; Close (Fichero1); Close (Fichero2) end.

Ejercitacin
1. Crear un programa que maneje un archivo donde se almacena el Apellido de una persona, su

edad, su estatura en metros (Ej: 1,75 m). El programa deber almacenar y listar los datos almacenados.
2. Modifique el programa anterior, de forma tal, que pueda listar los datos de una persona

solicitada por apellido. Si no existiera, debe mandar un mensaje de que no existe, y listar los apellidos existentes ordenados alfabticamente.
3. Realizar las modificaciones necesarias para que se pueda realizar modificaciones en los datos

grabados en el archivo.
4. Crear un programa que solo permita generar un archivo de texto, donde haya como mximo 80

caracteres por rengln. Pero deber evitarse cortar palabras. 5. Crear un programa que permita concatenar dos archivos de texto.
6. Crear un programa que dados dos archivos de texto, que contienen nmeros enteros, logre

realozar la interseccin entre ellos. 7. Dado un archivo que contienen una serie de nmeros, obtener un archivo ordenado.
8. Dado un archivo que contienen una serie de nmeros, obtener a partir de l dos archivos. En el

primero solo habr nmeros pares, y en el segundo solo impares.


9. Dado un archivo de texto, hacer un programa que logre reemplazar cada letra minscula por

otra minscula pero cuyo cdigo ASCII sea igual al de la primitiva ms 6. Cuando el cdigo de un valor que no corresponda a una minscula, el programa restar al cdigo 26, para obtener el nuevo cdigo. Cada letra mayscula ser reemplazada por otra mayscula siguiendo la misma regla que en el caso anterior. Los dems signos no sern reemplazados.

Pgina 177 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

10. Dado un archivo de texto, de varios renglones escribir un programa que tenga como salida otro

archivo donde los renglones estn escritos en orden inverso: Por ejemplo: Entrada Los das de octubre son hermosos. Los nios juegan en a plaza. Las madres disfrutan de esos momentos. Entrada Las madres disfrutan de esos momentos. Los nios juegan en a plaza. Los das de octubre son hermosos
11. Dado un archivo de texto, de un rengln. Escribir un programa que tenga como salida otro

archivo donde el rengln est escrito en orden inverso: Por ejemplo: Entrada Los das de octubre son hermosos Entrada sosomreh nos erbutco ed sad soL
12. Dado un archivo de texto, de varios renglones escribir un programa que tenga como salida otro

archivo donde los renglones estn escritos en orden inverso y que cada rengln esta escrito en sentido inverso. 13. Modificar el programa anterior para que no solo haga lo antes expresado. Sino que adems, pueda cambiar las letras como se pide en el problema 9.

REGISTROS
TIPO DE DATOS REGISTRO
Un registro (record) es un tipo de datos estructurado, que formado por un conjunto de datos que pueden ser del mismo tipo o de distintos tipos. A estos componentes se los denominan campos. Cada campo posee un nombre, que se declara en el tipo registro. Formato

Pgina 178 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

type t_ reg = record campo_1a, campo_1b : tipo 1; campo_2 : tipo 2; campo_n : tipo n end;
t_reg nombre de la estructura o dato registro campo_1 a campo_n, lista de los nombres de campos separados por comas, tipo puede ser cualquier tipo de dato estndar o definido por el usuario Un registro se suele representar grficamente en funcin de sus campos. Registro Campo_ 1 Ejemplos Campo_ 2 Campo_ 3 Campo_ n

type Empleado = record Nombre : string [30]; Edad : integer; Domicilio : string [40]; Salario : real end; Fecha = record Mes : (Enero, Febrero, Marzo, Abril, Mayo, Junio, Julio Agosto, Septiembre, Octubre, Noviembre, Diciembre); Dia : 1..31; Anio : 1900..2100 {*ao*} end ;
Estas declaraciones han creado un tipo de datos llamado Empleado -con cuatro campos: Nombre, Edad, Domicilio y Salario y otro denominado Fecha con tres campos: Mes, Dia (da) y Anio. (ao) Como cualquier otro tipo se puede asignar variable a l. Esto se obtiene con la declaracin var. Ejemplo

var Nacimiento : Fecha; Trabajador : Empleado;


Pgina 179 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

Las variables Nacimiento y Trabajador tienen la estructura especificada en la declaracin del tipo de registro Empleado y Fecha Otra forma de declarar el registro es en directamente en la variable: Ejemplo

var Nacimiento : record Mes : (Enero, Febrero, Marzo, Abril, Mayo, Junio, Julio, Agosto, Septiembre, Octubre, Noviembre, Diciembre); Dia : 1..31; Anio : 1900..2100 {*ao*} end ;
Acceso a los campos de un registro Se puede acceder a cada campo de un registro directamente utilizando un selector de campo de la forma

nombreReg. nombreCampo
La asignacin de datos para un registro de tipo Empleado seria:

Empleado.Nombre := "Julio Gustavo Garona"; Empleado.Edad := 43; Empleado.Domicilio := "Bernardo de Irigoyen 1250"; Empleado.Salario := 6532;
Una vez que los datos estn almacenados en un registro, se pueden manipular de igual forma que otros datos en memoria.

Write (Empleado.Nombre)
Operaciones sobre registros

se visualizar Julio Gustavo Garona

Tanto para la lectura o escritura de un registro, como ya hemos visto, se debe indicar el nombre de la variable y el campo sobre el cual leeremos o escribiremos. Cada campo se lee (o escribe), en forma individual). Se puede asignar el contenido de un registro a otro si ambos son del mismo tipo. Ejemplo:

var Ingreso, Egreso, Actual : Fecha;


La sentencia de asignacin de registros
Pgina 180 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

Egreso := Actual;
equivale a

Egreso.mes := Actual.mes; Egreso.dia := Actual.dia; Egreso.anio := Actual.anio;


La sentencia WITH Cuando los registros poseen varios campos la probabilidad de cometer un error en el nombre alguno de los campos o las variables aumenta. Para disminuir esta probabilidad se puede evitar escribir el nombre de la variable. La sentencia with permite referenciar el nombre del registro en su cabecera, y posteriormente para llamar a algn (o todos) campo, slo nombrando el campo indicado. Por ejemplo, dia en lugar de Egreso.dia. La sentencia with slo permite un medio fcil de manejar los diferentes campos de una variable de tipo registro. Para el ejemplo anterior tendramos:

with Egreso do begin mes := Actual.mes; dia := Actual.dia; anio := Actual.anio end;
Como se puede ver with esta asociado a la variable Egreso, por lo tanto no la nombramos en los pasos posteriores y solo nombramos los sus campos. Pero no esta asociada a la variable Actual lo que implica que debo nombrarla en cada caso. Cada With puede asignarse a una nica variable. (Se recomienda notar la cierta semejanza entre la estructura With y For) La estructura With se representa de la siguiente forma Pseudocdigo Con Egreso hacer mes Actual.mes dia Actual.dia Anio Actual.anio Fin Con N-S Egreso mes Actual.mes dia Actual.dia Anio Actual.anio

Pgina 181 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

Registros que contienen estructuras complejas En los ejemplos anteriores todos los campos de los registros eran tipos de datos simples, cadenas. Ahora veremos casos de registros que contienen estructuras ms complejas como matrices, o conjuntos. Ejemplos

type Mes = (Enero, Febrero, Marzo, Abril, Mayo, Junio, Julio, Agosto, Septiembre, Octubre, Noviembre, Diciembre); Dia =1..31; Anio = Array [Mes,Dia] of character; Concurrencia = Set of Mes;

R_Empleado = record Nombre : string [30]; Edad : integer; Domicilio : string [40]; Salario : real; Calendario : Anio; Asistencia : Concurrencia End;

En nuestro caso el registro R_Empleado se ha ampliado y dentro de l encontramos, un campo (Calendario) que es una tabla de 12(filas) X 31 (columnas), y otro (concurrencia que es un conjunto) Si deseramos escribir un cdigo para deja un registro en blanco el mismo debera se el siguiente.

Var Empleado, A_Empleado, S_Empleado : R_Empleado; Meses : Mes; Dias : Dia; Begin With S_Empleado do Begin Nombre := ''; Edad := 0; Domicilio := ''; Salario := 0; For Meses := Enero to Diciembre do For Dias := 1 to 31 do Calendario[Meses, Dias] :=''; Asistencia :=[] end;
Otra operacin vlida con estos registros (fuera de la estructura With), sera la siguiente.

Empleado.Asistencia := A_Empleado.Asistencia * S_Empleado.Asistencia;


Pgina 182 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

Debemos recordar que el campo Asistencia es tipo conjunto y la operacin interseccin (*) entre conjuntos es una operacin vlida. REGISTROS JERRQUICOS (ANIDADOS) Hasta aqu vimos campos de los registros de tipos de datos simples, cadenas o matrices o conjuntos. Ahora veremos registros donde uno o ms de sus campos que son otros registros. Un registro con uno o ms campos, los cuales son tipo registro, se denomina: registro jerrquico o registro anidado. Un ejemplo de esto sera sien el registro del empleado quisiramos agregar campos que almacenen fechas, tales como la de nacimiento, ingreso y egreso de la empresa, etc. Habra que modificar nuestro registro bsico de la siguiente forma.

type Fecha = record Mes : (Enero, Febrero, Marzo, Abril, Mayo, Junio, Julio Agosto, Septiembre, Octubre, Noviembre, Diciembre); Dia : 1..31; Anio : 1900..2100 {*ao*} end ; R_Empleado = record Nombre : string [30]; Edad : integer; Domicilio : string [40]; Salario : real; F_Ingreso : Fecha; F_Egreso : Fecha; end;
Otra forma de definir los mismos campos sera:

Pgina 183 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

R_Empleado = record Nombre : string [30]; Edad : integer; Domicilio : string [40]; Salario : real; F_Ingreso : record Mes : (Enero, Febrero, Marzo, Abril, Mayo, Junio, Julio, Agosto, Septiembre, Octubre, Noviembre, Diciembre); Dia : 1..31; Anio : 1900..2100 {*ao*} end ; F_Egreso : record Mes : (Enero, Febrero, Marzo, Abril, Mayo, Junio, Julio, Agosto, Septiembre, Octubre, Noviembre, Diciembre); Dia : 1..31; Anio : 1900..2100 {*ao*} end ; end;
Esta ltima forma resulta de lectura ms dificultosa que la primera, debido a los mltiples sangrados por lo cual no se recomienda su uso. Acceso a los campos de un registro anidado Para refenciar un campo de un registro anidado, se debe indicar el camino desde el nombre del registro hasta el campo especfico. Por ejemplo: Si se desea almacenar la fecha de ingreso de un empleado en la variable Empleado de tipo R_Empleado se deber asignar as:

Empleado.F_Ingreso.Mes := Enero; Empleado.F_Ingreso.Dia := 25; Empleado.F_Ingreso.Anio := 1998;


Sentencias WITH anidadas Cuando los registros estn anidados se puede utilizar sentencias With anidadas, para hacer el cdigo ms simple. Por ejemplo:

Pgina 184 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

With Empleado do begin WriteLn ('Introduzca el nombre'); ReadLn (Nombre); WriteLn ('Introduzca la edad'); ReadLn (Edad); WriteLn ('Introduzca el domicilio'); ReadLn (Domicilio); WriteLn ('Introduzca la salario'); ReadLn (Salario); With F_Ingreso do begin WriteLn ('Introduzca el da'); ReadLn (Dia); WriteLn ('Introduzca el anio'); ReadLn (Anio); end; end;
Como se puede observar nos ahorra cdigo. Tambin se puede ver que no se ha cargado el mes, no es un olvido sino que mes es del tipo Enumerado y habra que agregar mucho cdigo que lo nico que implicara hacer ms complejo e ilegible el ejemplo. Los registros como parmetros Los registros pueden ser utilizados como parmetros en funciones y en procedimientos. Una funcin no puede devolver un registro. En el caso de los procedimientos los registros pueden pasar por valor y por variable. Array de registros Los registros pueden ser agrupados en matrices de registros. Aunque los ms comunes toman la forma de una lista Pascal permite el uso de matrices de registros de n dimensiones. Se maneja como cualquier matriz, pero con el cuidado que cada dato es un registro completo.

type R_Empleado = record Nombre : string [30]; Edad : integer; Domicilio : string [40]; Salario : real end; V_Empleados = Array [1..365] of R_Empleado; Var
Pgina 185 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

Empleado : R_Empleado; Empleados : V_Empleados; Begin For N := 1 to 10 do Begin Write ('Ingrese el nombre :'); Readln (Empleados[N].Nombre); Write ('Ingrese la edad :'); Readln (Empleados[N].Edad); Write ('Ingrese la domicilio :'); Readln (Empleados[N].Domicilio); Write ('Ingrese la salario :'); Readln (Empleados[N].Salario); End

Pgina 186 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

El cdigo que esta en el ejemplo corresponde a una carga de datos en el vector de registros. Cuando se opera con vectores o matrices de registro los mismos pueden ser ordenados con los mismos algoritmos Pero se debe considerar dos cosas a) La comparacin se realiza utilizando un campo del registro b) Las variables que se usan en el intercambio, aun la auxiliar es tipo registro. REGISTROS VARIANTES Los registro usados hasta este punto se denominan registros invariantes o registros fijos. Esto se debe a que una vez que el tipo registro ha sido definido, cualquier registro de ese tipo debe incluir todos los campos incluidos en la definicin del tipo. Ahora veremos los registros variantes, que son aquellos tipos de registros que tienen algunos campos que son iguales para todas las variables de ese tipo (parte fija) y otros campos que pueden ser diferentes (parte variante). Por ejemplo, supongamos registros que contengan las referencias de los alumnos y de los profesores. Tanto alumnos como profesores tienen nombre, direccin y materia. Pero mientras los profesores tienen legajos, y salario, los alumnos poseen padrn, nota, condicin. Ambos datos pueden almacenarse en registros variantes con una parte fija (nombre, direccin y materia) y una parte variante (legajos, salario, padrn, nota, condicin). Los registros variantes se declaran de modo similar a los registros fijos excepto que hay un campo de indicador especial (tag) con una o ms opciones (variantes) del registro. Una sentencia case se utiliza para declarar los campos diferentes variantes. El indicador especial puede constar de una variable indicadora (con un tipo asignado) o slo un tipo.

type Nivel = (Alumno, Docente); R_Facultad = record Nombre : string [30]; Domicilio : string [40]; Materia : string [20]; Case Flag : Nivel of Docente : ( Legajo : Integer; Salario : real ); Alumno : ( Padron : Integer; Nota : Byte; Condicin : Char) end;
El tamao de un registro variante es constante, no importando cual de las opciones de la parte variante se elija. Siempre su tamao ser igual al necesario para almacenar la opcin que ocupe mayor espacio. Se pueden crear registros que posean campos para un nico caso. Por ejemplo si del alumno lo nico que nos interesara fueran sus datos generales (no el padrn, ni la nota, ni la condicin), para ese ejemplo el registro sera:
Pgina 187 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

type Nivel = (Alumno, Docente); R_Facultad = record Nombre : string [30]; Domicilio : string [40]; Materia : string [20]; Case Flag : Nivel of Docente : (Legajo : Integer ; Salario : real ); Alumno : ( ) end;
Registros variantes anidados Podemos tener el caso que un registro variante este dentro de otro registro variante. Esto es debido a la existencias de condiciones mltiples. Por ejemplo nuestro docente puede tener dedicacin parcial, semiexclusiva o exclusiva. Y en funcin de esto se determina distintos parmetros de trabajo. El registro posible sera:

type Nivel = (Alumno, Docente); Dedicacion = (Parcial, Semiexclusiva, Exclusiva); R_Facultad = record Nombre : string [30]; Domicilio : string [40]; Materia : string [20]; Case Flag1: Nivel of Docente : ( Legajo : Integer; Salario : real; H_Clase : byte); Case Flag2 : Dedicacion of Exclusiva : ( H_Aten_Alumnos : byte; H_Investigacin : byte); Semiexclusiva : ( H_Aten_Alumnos : byte); Parcial Alumno : ( Padron : Integer; Nota : Byte; Condicin : Char) end;
Ahora vamos a dar un ejemplo de un procedimiento que almacena datos en este registro.

: ( );

Pgina 188 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

Procedure Carga ( Var Registro : R_Facultad); Var Alfa, Beta : char; Begin With Registro do begin WriteLn ('Ingrese el nombre'); ReadLn (Nombre); WriteLn (' Ingrese el domicilio'); ReadLn (Domicilio); WriteLn (' Ingrese la materia'); ReadLn (Materia); WriteLn (' Ingrese "A" si es alumno y "D" si es docente '); ReadLn (Alfa); If Alfa = "D" Then Flag1 := Docente Else Flag1 := Alumno; Case Flag1 of Docente : begin WriteLn (' Ingrese el salario'); ReadLn (Salario); WriteLn (' Ingrese la cantidad de horas de clase'); ReadLn (H_Clase); WriteLn (' Ingrese tipo de dedicacin Parcial "P", Semiexclusiva "S" o Exclusiva "E"); ReadLn (Beta);

Pgina 189 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

Case Beta of "P" : Flag2 := Parcial; "S" : Flag2 := Semiexclusiva; "E" : Flag2 := Exclusiva; end; {* Case Beta * } Case Flag2 of Exclusiva : begin WriteLn ('Ingrese horas de atencin alumnos'); ReadLn (H_Aten_Alumnos); WriteLn ('Ingrese horas de investigacin'); ReadLn (H_Investigacin); end; Semiexclusiva : begin WriteLn ('Ingrese horas atencin alumnos'); ReadLn (H_Aten_Alumnos) end end; {* Case Flag2 * } end; {* Docente * } Alumno : begin WriteLn (' Ingrese el padrn'); ReadLn (Padron); WriteLn (' Ingrese la nota'); ReadLn (Nota); WriteLn (' Ingrese la condicin "R" regular y "L" libre'); ReadLn (Condicion); end; {* Alumno * } end; {* Flag1 * } end; {* Procedimiento carga * }
Como se puede el cdigo de este procedimiento es largo, aunque el mismo carece de control de entradas. Lo correcto sera particionarlo en varios procedimientos y funciones pequeas que puedan manejar tambin el control de ingresos. Constantes de tipo Registro Para declara este tipo de constantes deberemos primero declarar el registro y luego la constante.

de

Pgina 190 de 191

ALGORITMOS y PROGRAMACIN 75.40

Algoritmos y Programacin I Clase Terica N 1


Introduccin a la Computacin
Autores : Ings. Cataldi - Lage

Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE

J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluzzi Sr P. Corradino Sr. F. Gmez

type R_Empleado = record Nombre : string [30]; Edad : integer; Domicilio : string [40]; Salario : real end; const Empleado : R_Empleado = (Nombre : "Juan Jos Prez "; Edad : 35; Domicilio : "Pavn 2446"; Salario : 3515.28);

Pgina 191 de 191

Potrebbero piacerti anche