Você está na página 1de 56

Tcnicatura Superior en Anlisis de Sistemas

I.S.F.T.N 132

DISEO DE ALGORITMOS
INTRODUCCION Desarrollar un programa para un computador significa: indicarle al computador, en un lenguaje que l pueda entender, todos y cada uno de los pasos que debe ejecutar para lograr el objetivo propuesto, pero antes de pensar en decirle al computador cmo hacer algo, es necesario que el programador sepa cmo hacerlo. Es all donde entra a jugar un papel preponderante el desarrollo de algoritmos, pues antes de escribir un programa es necesario disear el algoritmo para solucionar el problema en cuestin. Qu es un Programa? Es un conjunto de instrucciones escritas en lenguaje apropiado para una computadora, ordenadas lgicamente para lograr la solucin de un problema que se desee resolver. Qu es una Instruccin? Es la una unidad mnima de comunicacin para comunicarse con la computadora. Es un enunciado que indica al computador una accin a ejecutar, que debe cumplir con un conjunto de reglas o normas predefinidas. Para construir un programa se requiere un anlisis y un conocimiento claro y profundo del problema que se quiere resolver, as como el dominio de un lenguaje de programacin que permita transmitir las instrucciones a la computadora. El primer paso necesario para disear un programa es el planeamiento y el anlisis del problema que se requiere resolver. Una vez clarificada la cuestin, se construir un procedimiento de clculo, paso a paso, mediante el cual se pueda obtener la solucin del problema. La resolucin de problemas tiene cuatro etapas: 1. Formulacin y entendimiento del problema o propuesta. 2. Eleccin de un mtodo o procedimiento para hallar la solucin. 3. Codificacin, o sea expresar el procedimiento elegido de forma tal que pueda ser interpretado por el procesador que se va utilizar. 4. Ejecucin del procedimiento para obtener la solucin del problema. Los procedimientos que se construyen para la resolucin de cualquier problema se llaman algoritmos, consisten en una secuencia ordenada de acciones que llevan a la solucin del problema en un nmero finito de pasos. PROCESAMIENTO DE DATOS Todo problema por resolver requiere de un proceso, que partiendo de datos iniciales nos permite arribar a nuevos datos. Dato: es un trmino utilizado para designar nmeros, letras y smbolos que se refieren a un objeto, situacin u otro factor y apropiado para comunicacin, procesamiento e interpretacin. Los datos son la materia prima con la que el ordenador va a elaborar su producto, que no es otro que el resultado de la ejecucin del programa. Cuando los datos son procesados y utilizados en una aplicacin en particular se convierten en informacin. Informacin: es el significado que los seres humanos le asignan a los datos. Por lo tanto la palabra informacin tiene un significado ms amplio que los datos ya que los datos son una coleccin de smbolos que pueden o no tener un significado, pueden o no ser tiles. Los datos se convierten en informacin y tienen un significado de acuerdo al contexto, de tal forma que el usuario puede actuar y tomar una decisin al recibirla. Por ejemplo los datos: Ivan Ferrari, Callao 85, 6740, Chacabuco, Buenos Aires, no tienen en si mismos un significado o sea no se convierten en informacin hasta que no sepamos que se trata del nombre, el domicilio, el cdigo postal, la localidad y la provincia de un cliente. Los datos deben ser procesados para obtener la informacin que es lo que nos va ha ser significativo y til en la aplicacin que estemos realizando. Un proceso de datos es una secuencia de operaciones para producir un resultado especfico. Un sistema de informacin es un conjunto de mtodos, procedimientos, tcnicas unificadas para lograr informacin a partir de los datos primarios.

Porf. Silvina M.Gimnez

Pgina N 1

PROGRAMACION I

Turbo Pascal 7.0

Por la tanto, el esquema quedara representado as:

ENTREDA Datos PROCESO SALIDA


La informacin obtenida en un proceso puede servir para otro proceso. VARIABLES Y CONSTANTES Para que un programa sea realmente til tiene que procesar datos, y eso requiere el uso de variables. Las variables son lugares de la memoria de la computadora que sirven para guardar valores, como pueden ser nmeros o caracteres. Para definir una variable, se le tiene que dar un nombre y un tipo. A una variable se la puede dar casi cualquier nombre, pero es mejor elegir un nombre significativo que describa la informacin que contiene la variable. Hay valores en un programa que se conocen antes de ejecutarlo, por ejemplo PI= 3,1416. Estos valores le damos el nombre de constantes. TIPOS DE DATOS Dato de tipo entero: representa a un nmero entero, esto es a una secuencia de dgitos decimales precedidos o no por un signo de suma o resta. Puede ser cualquier letra, palabra o conjuntos de caracteres siempre que se aclare que es un dato entero. Se definen del siguiente modo: DIAS: ENTERO Dato de tipo real: define a un elemento del conjunto de nmeros reales. Este dato representa una parte entera y una fraccionaria, separadas por un punto decimal y procedidos o no por el signo correspondiente. Se definen del siguiente modo: IMPORTE: REAL Dato de tipo carcter: este tipo de dato consiste en un carcter encerrado entre apstrofos, por ejemplo a, 2, son datos de tipo carcter y se definen de la siguiente manera. NOMBRE: CARACTER Dato de tipo booleano: se dice que un dato es booleano o pertenece al lgebra de Boole, cuando solo puede tomar dos valores: abierto o cerrado, alto o bajo, cero o uno, verdadero o falso. Se definen del siguiente modo: VENTANA: BOOLEANO OPERADORES Operadores booleanos que proporcionan un valor de tipo booleano: NOT (no) obtiene el valor opuesto del dato booleano sobre el que se aplica. Realiza la negacin. AND (y) efecta el producto lgico; el resultado ser falso, si al menos unos de los operandos tiene el valor falso OR (o) representa la operacin de suma lgica; en ella el resultado ser verdadero si al menos uno de los operandos tiene el valor verdadero. Existen una serie de operadores que se denominan relacionales: = : indica la igualdad entre dos expresiones <>: operador de desigualad > : relacin mayor que < : relacin menor que
Pgina N 2 Porf. Silvina M.Gimnez

Algoritmo Informacin

Tcnicatura Superior en Anlisis de Sistemas

I.S.F.T.N 132

>=: relacin mayor o igual que <=: relacin menor o igual que Otros operadores son los aritmticos como la suma, resta, multiplicacin y divisin. ASIGNACIN Cada variable se puede imaginar como una hoja de papel en blanco de un block de notas, en la que se puede ir anotando con lpiz un valor, el valor actual; luego es posible borrar el contenido de esa hoja del block y volver anotar otro valor, con lo que se habr actualizado el contenido de la variable en cuestin. Estas dos acciones, de accionar un valor a una variable y actualizar su valor cuando sea necesario se denominan sentencia de asignacin cuyo formato es el siguiente: <VARIABLE>:= <Expresin> := operador de asignacin, este asigna el valor situado a su derecha, a la variable que le precede. La zona <Expresin> puede ser una constante, una variable previamente declarada y con un valor ya asignado o bien una expresin matemtica o lgica. INICIALIZACIN DE VARIABLES Cuando nosotros definimos una variable en el programa por ejemplo A: entero, la mquina le asigna a dicha variable un lugar en la memoria, pero este lugar est sucio con informacin que ya se utilizo, entonces para poder definir un lugar limpio que permita hacer clculos correctos se debe inicializar la variable, esto significa darle un valor cualquiera elegido por nosotros. A:= 10 Si estuviramos hablando de un dato de tipo carcter que lo hemos definido del siguiente modo C: carcter el valor para inicializarlo puede ser blanco o una expresin de caracteres. C: C:= LA SUMA ES ALGORITMO Se sabe que la palabra algoritmo se dio en honor del matemtico persa del siglo IX, Khowrizm. Con ste trmino se hace referencia a un conjunto de reglas, ordenadas de forma lgica, para desarrollar un clculo o para solucionar un problema, ya sea de forma manual o utilizando una mquina. Actualmente es frecuente hablar de algoritmo como paso previo al desarrollo de un programa de computador. Para que la solucin de un problema sea llevada hasta un lenguaje de programacin, los pasos expresados en el algoritmo deben ser lo ms detallados posible, de manera que cada uno de ellos implique una operacin trivial; es decir, que los pasos no impliquen procesos que requieran de una solucin algortmica. En caso de presentarse esta situacin, el algoritmo debe ser refinado, lo que equivale a desarrollar nuevamente el algoritmo para la tarea concreta a la que se hace mencin. Si el problema que se desea solucionar es muy grande o complejo, es recomendable dividirlo en tareas que se puedan abordar independientemente y que resulten ms sencillas de solucionar. A esto se le llama diseo modular. Existen varias tcnicas para representar algoritmos, las ms conocidas son: pseudocdigo, diagrama de flujo y diagrama Nassi/Schneiderman o tambin conocida como diagramas de Chapin. Caractersticas de un algoritmo Un algoritmo debe tener al menos las siguientes caractersticas: Ser preciso: esto significa que las operaciones o pasos del algoritmo deben desarrollarse en un orden estricto, ya que el desarrollo de cada paso debe obedecer a un orden lgico. Ser definido. Ya que en el rea de programacin, el algoritmo se desarrolla como paso fundamental para desarrollar un programa, es necesario tener en cuenta que el computador solo desarrollar las tareas programadas y con los datos suministrados; es decir, no puede improvisar y tampoco se inventar o adivinar el dato que necesite para realizar un proceso. Por eso, el algoritmo debe estar plenamente definido; esto es, que cuantas veces se ejecute, el resultado depende estrictamente de los datos suministrados. Si se ejecuta con un mismo conjunto de datos de entrada, el resultado ser siempre el mismo. Ser finito: esta caracterstica implica que el nmero de pasos de un algoritmo, por grande y complicado que sea el problema que soluciona, debe ser limitado. Todo algoritmo, sin importar el nmero de pasos
Porf. Silvina M.Gimnez Pgina N 3

PROGRAMACION I

Turbo Pascal 7.0

que incluya, debe llegar a un final. Para hacer evidente esta caracterstica, en la representacin de un algoritmo siempre se incluyen los pasos inicio y fin. Presentacin formal: para que el algoritmo sea entendido por cualquier persona interesada es necesario que se exprese en alguna de las formas comnmente aceptadas; pues, si se describe de cualquier forma puede no ser muy til ya que solo lo entender quien lo dise. Las formas de presentacin de algoritmos son: el pseudocdigo, diagrama de flujo y diagramas de Nassi/Schneiderman, entre otras. Correccin: el algoritmo debe ser correcto, es decir debe satisfacer la necesidad o solucionar el problema para el cual fue diseado. Para garantizar que el algoritmo logre el objetivo, es necesario ponerlo a prueba; a esto se le llama verificacin o prueba de escritorio. Eficiencia: hablar de eficiencia o complejidad de un algoritmo es evaluar los recursos de cmputo que requiere para almacenar datos y para ejecutar operaciones frente al beneficio que ofrece. En cuanto menos recursos requiere ser ms eficiente el algoritmo.

El cumplimiento de las caractersticas mencionadas anteriormente permitir determinar si un procedimiento es o no es algortmico. El primer paso en el diseo de un algoritmo es conocer la temtica a tratar, el segundo ser pensar en las actividades a realizar y el orden en que deben ejecutarse para lograr el objetivo, el tercero y no menos importante es la presentacin formal. PSEUDOCODIGO Es un medio para representar la estructura interna de un programa. Tiene la ventaja de acercarse bastante al cdigo final y ser, adems, fcil de leer y escribir. El pseudocdigo es una tcnica de especificacin de algoritmos que utiliza una descripcin textual, por ello se apoya en expresiones del lenguaje natural; sin embargo, dado que el lenguaje natural es muy extenso y se presta para la ambigedad, solo se utiliza un conjunto de palabras, a las que se denomina palabras reservadas. Las palabras reservadas ms utilizadas son: Inicio Si Mientras Entero Incrementar Fin Sino Repita Real Decrementar Leer Entonces Hasta Cadena Escribir Hacer Para Lgico

PROGRAMACIN ESTRUCTURADA Para que un programa sea fcilmente comprensible y susceptible de ser modificado con posterioridad debe ser claro, inteligible y corto, el empleo de bifurcaciones incondicionales (instrucciones que rompen la secuencia de ejecucin de un programa) es desaconsejable ya que dificulta el anlisis y seguimiento del mismo. Al evitar su presencia se lograra una ejecucin ordenada de las instrucciones, de esta forma los programas se podrn dividir en pequeos trozos o mdulos que otorgan una gran flexibilidad al programa en orden a futuras modificaciones. LENGUAJE ESTRUCTURADO Del mismo modo que ha de partir de los tres colores primarios (rojo, azul, amarillo), mezclndolos adecuadamente es posible conseguir toda la gama del espectro; partiendo de tres estructuras se puede escribir cualquier programa. Estas son: Secuencial De bifurcacin Repetitivas o Iterativas. El concepto de estructuracin se refiere tanto al programa en s, como a los datos mismos. Estos ltimos pueden estructurarse para reducir la complejidad de los algoritmos de trabajo, aumentar la claridad de un programa y, en definitiva, conseguir un mayor rendimiento. Estructuras secuenciales Son aquellas que se ejecutan una despus de otra. Se tienen tres tipos de instrucciones secuenciales: la declaracin de variables, asignacin, instruccin Leer e instruccin Escribir.

Pgina N 4

Porf. Silvina M.Gimnez

Tcnicatura Superior en Anlisis de Sistemas

I.S.F.T.N 132

La mayora de algoritmos actan sobre un conjunto de datos suministrados por el usuario y se espera que a partir de dichos valores y desarrollando los procesos programados se genere informacin de salida o resultados. Declaracin de variables Teniendo en cuenta la compatibilidad con la mayora de los lenguajes, se recomienda que desde el diseo del programa se utilice una forma determinada para la declaracin de las variables. Esta consiste en escribir el tipo de datos y la lista de identificadores que se tendrn de dicho tipo, separando cada identificador por medio de comas (,). Para mejorar la claridad de la declaracin se puede colocar dos puntos (:) para separar el tipo de datos de la lista de identificadores. Ejemplo: Entero: edad Real: estatura, peso, sueldo Cadena: nombre, direccin Aunque algunos lenguajes de programacin permiten declarar las variables en el momento en que se las necesita, es aconsejable, en favor de los buenos hbitos de programacin, siempre declarar las variables antes de utilizarlas y el sitio ms adecuado es el inicio del programa o de la funcin. Asignacin Asignar un valor a una variable equivale a decir que se guarda dicho valor en la posicin de memoria reservado para la variable en mencin. Por lo tanto, para poder realizar una asignacin es necesario primero haber declarado una variable, con lo cual se reserva un espacio de memoria suficiente para guardar un dato del tipo especificado. Una expresin de asignacin tiene la forma: Variable = expresin Donde la expresin puede estar formada por un valor, por un conjunto de valores y operadores o por una funcin. Ejemplos: Edad = 10 Estatura = 1.80 Resultado = 2*3 Donde edad y resultado son variables de tipo entero y estatura de tipo real que se supone declaradas previamente. Una asignacin tiene tres partes, una variable, el signo igual y la expresin cuyo valor se asigna a la variable. La variable siempre va a la izquierda del igual, mientras que la expresin siempre estar a la derecha. Ejemplos: Entero: X, Y X = 10 Y=X*2+8 En este ejemplo, la variable Y contendr el valor 28. Instruccin Leer La instruccin LEER se utiliza para enviar informacin desde un dispositivo de entrada de datos hacia la memoria. En la memoria los datos son ubicados mediante el identificador (nombre de variable) utilizado como complemento de la instruccin LEER. La instruccin de entrada se representa as: Leer <lista de identificadores de variables> Ejemplo: Leer a, b Donde "a" y "b" son las variables que recibirn los valores y que deben haberse declarado previamente. Instruccin Escribir Esta instruccin permite enviar datos desde la memoria hacia un dispositivo de salida como la pantalla o la impresora. La informacin que se enva puede ser constante o tambin el contenido de variables. Escribir <lista de constantes y variables> Ejemplo: Escribir a, b Cuando se escriben ms de una variable es necesario separarlas con comas (,) y los mensajes se escriben entre comillas dobles " ". Si una variable es escrita entre comillas se mostrar el identificador y no el contenido.
Porf. Silvina M.Gimnez Pgina N 5

PROGRAMACION I

Turbo Pascal 7.0

Estructuras de bifurcacin, decisin o seleccin Las estructuras de bifurcacin o tambin llamadas de seleccin permiten que el algoritmo tome decisiones y ejecute u omita algunos procesos dependiendo del cumplimiento de una condicin. En esta operacin el ordenador escoge la accin a ejecutar dentro de un conjunto de posibilidades. Esta eleccin esta determinada por la validez de un clculo aritmtico-lgico. Si <condicin> entonces <accin 1> Sino <accin 2> Se puede ejecutar ms de una accin si la condicin se cumple y ms de una si la condicin no se cumple, en este caso se trata de sentencias compuestas y se marcan dentro de un bloque con las palabras Inicio y Fin. Entonces las sentencia quedara de la siguiente manera: Si <condicin> entonces Inicio <accin 1> <accin 2> <accin n> Fin Sino Inicio <accin 1> <accin 2> <accin n> Fin Su especialidad es romper el flujo del programa en un determinado punto del mismo, dependiendo si se cumple una condicin establecida. Si es cierta la condicin se ejecutara una o ms sentencias especficas, mientras que si la condicin es falsa se ejecutaran otras sentencias. La aplicacin ms frecuente de la sentencia Si/entonces/Sino es la de seleccionar una entre varias opciones. Decisin mltiple Muchas decisiones deben tomarse, no solo entre dos alternativas, sino de un conjunto mayor. Estos casos bien pueden solucionarse utilizando condicionales dobles anidados; sin embargo, en favor de la claridad del algoritmo y la facilidad para el programador, es mejor utilizar una estructura de decisin mltiple, la cual es fcil de llevar a un lenguaje de programacin, ya que stos incluyen alguna instruccin con este fin. La decisin mltiple determina el valor de una variable y dependiendo de ste sigue un curso de accin. Es importante tener en cuenta que solo se verifica la condicin de igualdad entre la variable y la constante. Estructuras de repeticin En la solucin de algunos problemas es necesario ejecutar repetidas veces una instruccin o un conjunto de instrucciones. En algunos casos, el nmero de repeticiones se conoce con anterioridad, mientras que en otras depende de clculos o estados de variables que se dan dentro de la solucin del problema. Para solucionar este tipo de problemas se utiliza un tipo de estructuras a las que se conocen como estructuras de repeticin, bucles o ciclos. Un ciclo consiste en un grupo de acciones que se ejecutan repetidas veces dependiendo del cumplimiento de una condicin. Ciclo Mientras Este ciclo consiste en un conjunto de instrucciones que se repiten mientras se cumpla una condicin. De igual manera que en los condicionales, la condicin es evaluada y retorna un valor lgico, que puede ser verdadero o falso. En el caso del ciclo mientras las instrucciones contenidas en la estructura de repeticin se ejecutarn solamente si al evaluar la condicin se genera un valor verdadero; es decir, si la condicin se cumple; en caso contrario, se ejecutar la instruccin que aparece despus de Fin mientras.

Pgina N 6

Porf. Silvina M.Gimnez

Tcnicatura Superior en Anlisis de Sistemas

I.S.F.T.N 132

A diferencia de otros ciclos, el ciclo mientras comienza evaluando la expresin condicional, si el resultado es verdadero se ejecutarn las instrucciones que estn entre el mientras y el fin mientras, al encontrarse la lnea fin mientras se volver a evaluar la condicin, si se cumple se ejecutarn nuevamente las instrucciones y as sucesivamente hasta que la condicin deje de cumplirse, en cuyo caso, el control del programa pasa a la lnea que aparece despus de fin mientras. Si en la primera pasada por el ciclo mientras la condicin no se cumple las instrucciones que estn dentro del ciclo no se ejecutarn ni una sola vez. Mientras <condicin> hacer <accin 1> Puede suceder al igual que en el caso anterior sentencias compuestas las cuales se resuelven de la siguiente manera: Mientras <condicin> hacer Inicio <accin 1> <accin 2> <accin n> Fin Sentencia Mientras/hacer: la <condicin>es la que determina el nmero de veces que se repetir la <accin 1>, esta se ejecutara siempre que la <condicin> sea cierta. Hay que prever que la variable de control de la expresin modifique su valor en forma apropiada dentro del bucle, en caso contrario, se podra caer, en un bucle infinito, sin final, error muy difcil de detectar y lo que comnmente se conoce como Loop Sentencia Repetir/hasta: sea cual fuere el valor de la expresin en la primera pasada se ejecutara primero la sentencia, para pasar despus a la evaluacin de la condicin. Esto significa que siempre se ejecutara al menos una vez la sentencia interior del bucle Repetir <accin 1> <accin 2> <accin n> hasta <condicin> Ciclo Para Este ciclo, al igual que los dems, permite ejecutar repetidas veces una instruccin o un grupo de ellas, pero a diferencia de otras instrucciones de repeticin, sta maneja el valor inicial, el valor de incremento o decremento y el valor final de la variable de control como parte de la instruccin. Cuando al ejecutarse un algoritmo se encuentra una instruccin para la variable de control (contador) toma el valor inicial, se verifica que el valor inicial no sobrepase el valor final y luego se ejecutan las instrucciones del ciclo. Al encontrar la instruccin fin para, se produce el incremento y se vuelve a verificar que la variable de control no haya superado el lmite admitido, y se vuelven a ejecutar las instrucciones que estn dentro del ciclo, y as sucesivamente tantas veces como sea necesario hasta que se supere el valor final establecido. El ciclo para termina en el momento en que la variable de control (contador) sobrepasa el valor final; es decir, que la igualdad est permitida y las instrucciones se ejecutan cuando el contador es igual al valor final. Este ciclo puede presentarse de tres maneras: la primera es la ms comn, cuando se produce un incremento de 1 en cada iteracin, en cuyo caso no es necesario escribir explcitamente. Sentencia Para/hasta: se repetir el bucle tantas veces como valores intermedios haya entre los valores inicial y final de la variable de control del bucle. Para <valor inicial> hasta <valor final> hacer Inicio <accin 1> <accin 2> <accin n> Fin
Porf. Silvina M.Gimnez Pgina N 7

PROGRAMACION I

Turbo Pascal 7.0

En esta sentencia tanto la variable de control como su valor inicial y final deben ser del mismo tipo. El valor de la variable de control no debe ser alterado por las sentencias del bucle. El funcionamiento es el siguiente: en principio se asigna a la variable de control el valor inicial y se chequea si ya se ha llegado al valor final, en cuyo caso no se ejecutara el bucle ninguna vez. Si no alcanza el valor final se ejecutara el bucle y se incrementara el valor de la variable de control antes de ser comprobado nuevamente. Este proceso se repite hasta que la variable de control llegue al valor final, pasando a ejecutar la prxima sentencia del programa. El segundo caso de utilizacin del ciclo Para es cuando el incremento es diferente de 1, en cuyo caso se escribir la palabra incrementar seguida del valor a sumar en cada iteracin. Para <valor inicial> hasta <valor final> incrementar valor hacer Inicio <accin 1> <accin 2> <accin n> Fin En tercer lugar, el ciclo para no siempre se incrementa desde un valor inicial hasta un valor mayor, puede suceder que se requiera que se disminuya desde un valor inicial alto, hasta un valor menor. En este caso ser suficiente con escribir decrementar en vez de incrementar. La utilizacin adecuada e ingeniosa de las estructuras presentadas permite el diseo de algoritmos de aceptable nivel de complejidad, como se ha mostrado en los ejemplos. Finalmente, el diseo de algoritmos no solo requiere conocer metodologas de representacin, sino tambin desarrollar el pensamiento lgico para generar soluciones y esto se consigue mediante el desarrollo de ejercicios.

Pgina N 8

Porf. Silvina M.Gimnez

Tcnicatura Superior en Anlisis de Sistemas

I.S.F.T.N 132

PROGRAMACIN ESTRUCTURADA
EL LENGUAJE PASCAL El matemtico y fsico francs Pascal (1623-1662) fue el constructor, a los 19 aos, de la primera calculadora mecnica conocida, denominada "Pascaline", que permita sumar y restar directamente. En su honor se bautiz como PASCAL un nuevo lenguaje de programacin; quiz el ms representativo de los lenguajes estructurados. Fue ideado, a principios de los aos 70 por el matemtico Nicklaus Wirth, profesor del Instituto Federal de Tecnologa de Zurich. Cuando lo concibi, lo hizo con propsitos estrictamente acadmicos, tanto para ilustrar los conceptos de la programacin estructurada, como para disponer de una herramienta adecuada para la enseanza de la informtica. Su descripcin del lenguaje es lo que se conoce como PASCAL ESTANDAR. PASCAL es un lenguaje de propsito general que ha alcanzado gran difusin como lenguaje de enseanza y de desarrollo de aplicaciones. Si el Pascal estndar tena numerosas imperfecciones, las nuevas versiones de compiladores de PASCAL han ido completando y corrigiendo el estndar. Esto ha hecho que las versiones comerciales del lenguaje incluyan extensiones del estndar que las hace incompatibles entre s. La versin que populariz este lenguaje fue la TURBO PASCAL, de la compaa americana Borland, que ha presentado recientemente la versin 7.0 del compilador. Otra versin de Pascal, menos conocida que la de Borland es UCSD-PASCAL (desarrollada por la Universidad de California, San Diego). El lenguaje Pascal ha inspirado otros lenguajes posteriores como MODULA-2 y ADA.

DEFINICION DE LENGUAJE DE PROGRAMACION Un Lenguaje de Programacin es un lenguaje utilizado por las personas para comunicarle a un ordenador un algoritmo o descripcin de la tarea que ha de realizar. Como todo lenguaje, consta de: A. Un conjunto finito de smbolos: vocabulario. B. Un conjunto finito de reglas, sintaxis, para la construccin de frases correctas, llamadas instrucciones (Exactitud de disposicin). C. Una semntica o aplicacin que asocie un significado a cada posible construccin del lenguaje (Exactitud tipogrfica) Podemos jerarquizar los elementos que constituyen los lenguajes de programacin en el esquema siguiente: PROGRAMA

SUBPROGRMAS (Procedimientos y Funciones)

INSTRUCCIONES

VARIABLES CONSTANTES OPERADORES

PALABRAS IDENTIFICADORES RESERVADAS

En esta jerarqua, el PROGRAMA es la unidad bsica de ejecucin. Consiste en un conjunto de INSTRUCCIONES o SENTENCIAS escritas en un lenguaje particular, que representan la solucin de un problema. En otras palabras, se puede decir que un 'programa' es la elaboracin de un algoritmo escrito en un lenguaje especfico para la comunicacin con los ordenadores. En programacin es muy frecuente que un conjunto de instrucciones se utilicen del mismo modo (o en la misma secuencia) en varias ocasiones dentro del mismo programa, e incluso en programas diferentes. Lo que suele hacerse en estas situaciones es escribir 'aparte' tal conjunto de instrucciones e identificarlo con
Porf. Silvina M.Gimnez Pgina N 9

PROGRAMACION I

Turbo Pascal 7.0

un nombre (identificador) concreto, de tal modo que en el programa se invoca a ese conjunto de instrucciones escribiendo nicamente su nombre o poco ms. Estos conjuntos de instrucciones reciben as el nombre de SUBPROGRAMAS, que dependiendo del lenguaje de programacin o de sus caractersticas reciben los nombres de procedimientos, funciones, subrrutinas, etc. Tanto los programas como los subprogramas estn formados por INSTRUCCIONES que son las frases de los lenguajes de programacin. Los elementos constitutivos de las instrucciones de los lenguajes de programacin, en general se reducen a los recogidos en el esquema anterior y que podemos definir de la siguiente manera: una variable en programacin es un espacio de memoria reservado para contener un dato de un cierto tipo, cuyo contenido puede variar durante la ejecucin del programa al que pertenece y que es reconocida en el mismo por el identificador (nombre) que el programador le ha asignado. Una constante en programacin es un espacio de memoria reservado para contener un dato concreto de un cierto tipo, cuyo contenido es fijado de antemano y no puede variar durante la ejecucin del programa al que pertenece, y es reconocida por el mismo por el identificador que el programador le ha asignado. Un operador es un smbolo que relaciona datos (operandos) para constituir una expresin. Los operadores ms habituales son los operadores aritmticos, los operadores lgicos y los operadores relacionales. Las palabras reservadas son, como indica su nombre, palabras con un cometido especfico, de modo que si se intentan utilizar para nombrar (identificar) algn elemento de la programacin, se producir un error sintctico. Identificadores son los nombres que el programador asigna a los distintos elementos de la programacin (constantes, variables, programas, procedimientos), cuando los utiliza. INTERPRETES Y COMPILADORES Las instrucciones que 'entienden' los ordenadores se expresan por medio de unos y ceros. Es lo que se conoce por cdigo mquina o lenguaje mquina, y es especfico de cada mquina (o lo que es lo mismo en la actualidad, de cada microprocesador). Cada byte tiene un significado concreto para la mquina. El conjunto de instrucciones en cdigo mquina que un microprocesador es capaz de ejecutar se conoce como set de instrucciones de ese microprocesador. Todo programa que se ejecute en un ordenador, debe ser un conjunto de instrucciones de las disponibles en el SET del microprocesador que gobierne el ordenador. Escribir programas en cdigo mquina es pesadsimo para el programador y exige un conocimiento profundo de la arquitectura del microprocesador que se utilice. No obstante, fue el modo de programar en los principios de la informtica; el programa resultante era directamente comprendido por la mquina. Posteriormente, y para facilitar un poco la tarea de la programacin, se invent el lenguaje ensamblador, que consiste en utilizar en vez de cada cdigo binario de instruccin un nombre simblico que recuerde para qu sirve, y para las direcciones de memoria el sistema de numeracin hexadecimal. Cada instruccin ensamblador corresponde a una instruccin en cdigo mquina, pero es evidente que el lenguaje ensamblador es ms cmodo de utilizar por el programador. Ahora bien, el microprocesador no es capaz de ejecutar directamente el cdigo ensamblador y se precisa un proceso de traduccin a lenguaje mquina. Un programa, denominado programa ensamblador se encarga de traducir las instrucciones ensamblador a instrucciones binarias para as generar el programa ejecutable. Las instrucciones de cdigo mquina (y por tanto tambin las de ensamblador), por separado, permiten hacer nicamente cosas muy simples, para expresar tareas ms complicadas deberamos escribir gran cantidad de instrucciones mquina o ensamblador. Para evitar este problema y acercar el lenguaje de comunicacin hombre-mquina al lenguaje natural, se inventaron los lenguajes conocidos como lenguajes de alto nivel, los cuales utilizan instrucciones muy potentes (en el sentido de que una nica instruccin es capaz, por ejemplo, de escribir en pantalla el resultado de una larga expresin matemtica) y que su escritura es bastante parecida al lenguaje natural. Lenguajes de alto nivel son, entre otros, FORTRAN, COBOL, BASIC, PASCAL, C. Con este tipo de lenguajes la tarea de programar se simplifica mucho; sin embargo el proceso de traduccin a cdigo mquina se complica considerablemente. De hecho, hay dos mecanismos de traduccin: por medio de lo que se denomina ejecucin bajo intrprete o por medio de un proceso de compilacin. Cuando se ejecuta un programa bajo intrprete, lo que est funcionando en el ordenador es un programa intrprete, que va tomando una a una las instrucciones del nuestro y haciendo que el ordenador ejecute el paquete de instrucciones de cdigo mquina correspondiente. Es decir, un intrprete toma una instruccin del programa en alto nivel, la traduce a cdigo mquina y la ejecuta; toma la siguiente instruccin y as sucesivamente hasta fin de programa. El intrprete no crea una versin ejecutable del programa. Por el contrario, la otra alternativa consiste en generar un programa ejecutable por medio de un programa compilador. Este traductor convierte una a una las instrucciones de alto nivel a cdigo mquina, pero no las ejecuta hasta que ha traducido el programa completo. El programa escrito en un lenguaje de
Pgina N 10 Porf. Silvina M.Gimnez

Tcnicatura Superior en Anlisis de Sistemas

I.S.F.T.N 132

alto nivel se denomina programa fuente y el programa traducido a cdigo ejecutable se denomina programa objeto. En ambos casos es evidente que hay que escribir el programa en el lenguaje de alto nivel elegido. Para ello se utiliza un editor o programa editor, que nos permite escribir y modificar el programa fuente con mucha facilidad, as como guardarlo en disco o imprimirlo. Este programa suele venir incluido en el paquete del traductor. El hecho de crear un programa objeto tiene la ventaja de que una vez traducido su ejecucin sucesivas veces es rapidsima, ya que no hay que repetir el proceso en cada ejecucin. LENGUAJES ESTRUCTURADOS La Programacin Estructurada es una tcnica de programacin que permite escribir programas fcilmente legibles, autoexplicativos y fciles de modificar. La programacin estructurada NO ES un nuevo lenguaje de programacin, sino un mtodo para escribir programas en cualquier lenguaje. El lenguaje PASCAL es muy estructurado y prcticamente obliga a utilizar esta tcnica. Las caractersticas que diferencian a los lenguajes estructurados de los dems, son las siguientes: 1. La posibilidad de prescindir de la estructura de salto incondicional. Pues, todo programa se puede construir con la utilizacin explcita de las siguientes estructuras bsicas: a) Secuencia simple de instrucciones. b) Repeticin (condicional o incondicional) de instrucciones. c) Seleccin de unas instrucciones u otras segn un resultado previo. 2. La modularidad consiste en la posibilidad de codificar diferentes partes (mdulos) de un programa de manera independiente para despus enlazarlos y construir el programa completo. Dependiendo del lenguaje, estos mdulos sern o no compilables independientemente. En cualquier caso, esta caracterstica permite presentar el programa como una secuencia relativamente simple de tareas de gran potencia, que se describen con detalle en otra parte del programa o incluso fuera de l. 3. La estructuracin de datos consiste en la posibilidad de crear nuevos tipos de dato para utilizar en la codificacin de programas, si los tipos de dato predefinidos que ofrece el lenguaje no se adaptan a nuestra necesidad concreta. ESTRUCTURAS BASICAS DE CONTROL EN LENGUAJES DE ALTO NIVEL Secuencia Simple de Instrucciones Se ejecutan en orden secuencial Instruccin i Instruccin j Sin embargo, si este fuera el nico orden de ejecucin posible, el programa tendra que realizar siempre las mismas acciones, independientemente de los datos que se le dieran como entrada en cada ejecucin. Con el fin de poder dotar a los programas de cierta capacidad de decisin sobre los tratamientos que debe aplicar en cada caso, es por lo que los lenguajes de programacin de alto nivel permiten la definicin de otras estructuras de control alternativas a la secuencial. Los dos tipos de estructuras de control bsicas, existentes en casi todos los lenguajes de programacin son: La estructura de seleccin o decisin. La estructura de iteracin o repeticin. Estructura de seleccin o decisin En Pascal existen tres estructuras diferentes de decisin: las estructuras IF...THEN, IF...THEN...ELSE, y CASE. Las dos primeras permiten decidir entre dos alternativas; la tercera permite realizar una seleccin mltiple, de ms de dos opciones. La estructura IF...THEN Esta estructura permite decidir, durante la ejecucin de un programa, si una instruccin o bloque de instrucciones se debe ejecutar o no, dependiendo del resultado de una cierta condicin. Su sintaxis general es la siguiente: IF Condicin THEN Instruccin o Bloque ;
Porf. Silvina M.Gimnez Pgina N 11

PROGRAMACION I

Turbo Pascal 7.0

donde IF y THEN son palabras reservadas y Condicin es cualquier expresin cuyo resultado sea BOOLEAN (TRUE o FALSE). Si Condicin es TRUE se ejecuta la Instruccin o Bloque de instrucciones que sigue a la palabra THEN; si es FALSE, se pasa a ejecutar la siguiente instruccin del programa. Tngase en cuenta que en Pascal, para delimitar un bloque de sentencias se utilizan las palabras reservadas BEGIN...END; (con punto y coma). Expresin booleana

Cierto o falso?

Cierto

Falso

Ejecutar sentencias

Continuar con el programa Diagrama de flujo de la estructura IF-THEN Estructura IF..THEN..ELSE Esta estructura es una extensin de la anterior en la que se selecciona la ejecucin de un bloque de instrucciones u otro, dependiendo de que la condicin sea TRUE o FALSE. La sintaxis general de esta estructura es: IF Condicin THEN (Instr. o Bloque A) ELSE (Instr. o Bloque B) ; La instruccin inmediatamente anterior a ELSE no lleva punto y coma, ya que el compilador supondra que ha finalizado una estructura del tipo IF...THEN. Encontrar luego un ELSE no tiene sentido y se produce un error de compilacin. La sentencia If-Then proporciona una sola rama, que se ejecuta cuando la sentencia booleana es cierta. A menudo, un programa requiere dos ramas: una que se ejecute si es cierto y la otra si es falso. Para esto se utiliza la estructura de control de la sentencia If-Then-Else. Esta sentencia funciona de la siguiente manera: si la evaluacin es cierta, se ejecuta el bloque de cdigo que sigue a la sentencia Then; si es falsa, se ejecuta el bloque de cdigo que sigue a la sentencia Else. En ambos casos, cuando finaliza el bloque de cdigo seleccionado, el control del programa salta hasta el final de la sentencia If-Then-Else Expresin booleana

Falso

Cierto o falso?

Cierto

Ejecutar sentencias del Sino Continuar con el programa

Ejecutar sentencias del Si-Entonces

Diagrama de flujo de la estructura IF-THEN-ELSE


Pgina N 12 Porf. Silvina M.Gimnez

Tcnicatura Superior en Anlisis de Sistemas

I.S.F.T.N 132

La estructura If-Then proporciona una rama y la estructura If-Then-Else proporciona dos. Pero qu ocurre cuando se necesita expresar una serie de condiciones?. En estos casos se puede ampliar la sentencia If-Then-Else con la sentencia Else-If. Las sentencias Else-If permite encadenar sentencias booleanas, lo que proporciona al programa la capacidad de bifurcacin mltiple. El elemento de esta figura es el camino que toma del programa cuando encuentra la primera expresin booleana como falsa. En lugar de ejecutar un bloque de cdigo, el programa evala una segunda expresin booleana; aqu donde entra en juego la sentencia Else-If. Si esta expresin es falsa, el programa ejecuta el ltimo bloque de cdigo. Expresin booleana

Cierto o falso? Falso Sentencia booleana

Cierto

Ejecutar sentencias

Cierto o falso? Falso

Cierto

Ejecutar sentencias Ejecutar sentencias Continuar con el programa

Diagrama de flujo de Bifurcacin Mltiple Las sentencia If-Then anidadas Una forma de permitir al programa que considere dos o ms condiciones separadas antes de embarcarse en el curso de una accin es el anidamientos de las sentencias If-Then. Una sentencia If-Then anidada puede producir esquemas de bifurcacin muy complejos. Expresin booleana

Cierto o falso?

Cierto

Sentencia booleana

Cierto o falso?

Cierto

Ejecutar sentencias

Ejecutar sentencias

Ejecutar sentencias

Continuar con el programa Diagrama de flujo de estructura IF-THEN anidadas


Porf. Silvina M.Gimnez Pgina N 13

PROGRAMACION I

Turbo Pascal 7.0

La estructura CASE La estructura CASE es una estructura de decisin que permite elegir entre ms de dos alternativas. Sintcticamente consiste en una expresin, el Selector (que frecuentemente ser una variable), situada entre las palabras reservadas CASE y OF, y a continuacin una lista de instrucciones o bloques de instrucciones, precedidas cada una de ellas por una o ms constantes (denominadas constantes o etiquetas del Case) del mismo tipo que el selector. La estructura acaba con END;. CASE Selector OF Et.1 : Instr. o bloque A ; Et.2 : Instr. o bloque B ; ... Et.N : Instr. o bloque N ; END; El selector ha de ser de un tipo ordinal de 1 o 2 bytes de tamao; es decir, un selector no puede ser de tipo LONGINT. Tampoco podremos utilizar para selectores el tipo STRING. Una etiqueta CASE puede constar de cualquier nmero de constantes o subrangos separados por comas, del mismo tipo (o compatible) que el selector. La sentencia o bloque que se ejecuta debe ser precedida por una etiqueta que coincida con el valor del selector o por un subrango que contenga el valor del selector en el momento de la ejecucin. Si queremos indicar lo que se debe hacer si no coincide con ninguno de los valores que hemos enumerado, usamos else: CASE Selector OF Et.1 : Instr. o bloque A; Et.2 : Instr. o bloque B ; ... Et.N : Instr. o bloque N ; ELSE Instr. o bloque alternativo; END; La estructura de iteracin o repeticin condicionales En Pascal existen dos estructuras diferentes de repeticin condicional: el bucle WHILE ... DO y el bucle REPEAT...UNTIL. En ellas, el nmero de veces que se ha de ejecutar un conjunto de instrucciones depende de una condicin: expresin cuyo resultado ha de ser BOOLEAN. El bucle WHILE...DO La sintaxis general de la estructura WHILE...DO es: WHILE Condicin DO Instruccin o Bloque ; donde WHILE y DO son palabras reservadas y Condicin es cualquier expresin cuyo resultado sea BOOLEAN. Esta estructura confiere al programa la capacidad de repetir un tratamiento mientras que los datos cumplan una condicin indicada. El bucle WHILE-DO examina la condicin antes de ejecutar cualquier sentencia del bloque. Si es cierta ejecuta el bloque de cdigo que sigue y si es falsa salta hasta la prxima sentencia despus del END. WHILE (condicin booleana) DO BEGIN { Sentencias } END; Las estructuras de iteracin tambin se denominan BUCLES. Ntese una caracterstica muy importante de estos dos tipos de bucles: el nmero de veces que se ha de repetir el bucle es, en principio, indeterminado: depender del conjunto de instrucciones A. Por esta razn se conocen como bucles condicionales.

Pgina N 14

Porf. Silvina M.Gimnez

Tcnicatura Superior en Anlisis de Sistemas

I.S.F.T.N 132

El bucle REPEAT...UNTIL La sintaxis general de este bucle la podemos ver en la siguiente, donde REPEAT y UNTIL son palabras reservadas y Condicin es cualquier expresin cuyo resultado sea BOOLEAN. REPEAT Instruccin o Instrucciones UNTIL Condicin ; En este caso la ejecucin de la instruccin o instrucciones se repetir hasta (until) que la Condicin sea verdadera. REPEAT { Sentencias } UNTIL (condicin booleana); Hay tres diferencias importantes entre el bucle REPEAT...UNTIL y el bucle WHILE...DO: 1. La instruccin o conjunto de instrucciones en el bucle REPEAT...UNTIL se ejecuta al menos una vez, ya que la evaluacin de la Condicin se realiza al finalizar la estructura; es decir, la primera vez que se ejecuta no se ha comprobado an la condicin. Esto no ocurre en el bucle WHILE...DO. 2. El bucle REPEAT...UNTIL se ejecuta HASTA que la Condicin sea cierta y el bucle WHILE...DO se ejecuta MIENTRAS la Condicin sea cierta. 3. El bucle REPEAT...UNTIL puede ejecutar un conjunto de instrucciones sin tener que delimitarlo como un bloque con BEGIN...END;. Sirva como razn que tanto REPEAT como UNTIL son palabras reservadas que, en este caso, realizan la doble funcin de delimitar estructura y bloque de instrucciones. Estructura de repeticin incondicional: El Bucle FOR El bucle FOR es una estructura de repeticin presente en la mayora de los lenguajes de programacin. En Pascal, el bucle FOR es a la vez limitado y potente, como veremos enseguida. Esta estructura ejecuta una instruccin o bloque de instrucciones un nmero prefijado de veces. Su sintaxis general es la siguiente: FOR Contador := Valor Inicial TO Valor Final DO Instr. o Bloque ; donde FOR, TO y DO son palabras reservadas, Contador es una variable de cualquier tipo ordinal y Valor Inicial y Valor Final son cualesquiera expresiones cuyo resultado sea del mismo tipo que Contador. La variable Contador parte del Valor Inicial y se incrementa en una unidad cada vez que se ejecuta la Instruccin o Bloque de Instrucciones, hasta llegar al Valor Final. FOR C:=VI TO VF DO BEGIN { Sentencias } END; Tengamos en cuenta varios detalles muy importantes: 1. No se puede cambiar el valor de la variable de control (Contador) mediante una instruccin (asignacin, READLN) dentro del bucle; es decir, esta debe seguir su incrementacin automtica unidad a unidad. Cualquier intento de modificar su valor producir un error. 2. El Valor Final que ha de alcanzar el Contador se lee al comienzo de la estructura, de forma que si este valor fuera modificado durante alguna de las repeticiones del bucle, el nmero de veces que se ejecuta ste no se ver afectado. Evidentemente, si se trata de un bucle incondicional, el nmero de ejecuciones no debe depender de lo que ocurra en su interior. 3. Si el Valor Final fuese menor o anterior que el Valor Inicial, el bucle no se ejecutara ninguna vez. Si los valores coinciden el bucle se ejecuta una sola vez.

Porf. Silvina M.Gimnez

Pgina N 15

PROGRAMACION I

Turbo Pascal 7.0

Existe una forma alternativa de la estructura FOR para cuando se desea que la variable ndice (Contador) vaya cambiando de valor en orden descendiente. Consiste en utilizar la palabra reservada DOWNTO en lugar de TO: FOR Contador := Valor Inicial DOWNTO Valor Final DO Instr. o Bloque ; En este caso, si Valor Inicial es menor o posterior a Valor Final, el bucle no se ejecuta ninguna vez. FOR C:=VF DOWNTO VI DO BEGIN { Sentencias } END; La principal limitacin del bucle FOR es que slo nos permite incrementar o decrementar el contador en una unidad, en cada ejecucin del bucle. Sus principales ventajas son la sencillez de sintaxis y la posibilidad de utilizar como contador una variable de cualquier tipo ordinal (entero, char, boolean, subrango o cualquier tipo abstracto). ESTRUCTURA DE UN PROGRAMA PASCAL Todo programa escrito en lenguaje Pascal, del ms simple al ms complejo, tiene la siguiente estructura:

PROGRAM Nombre_del_programa; ZONA de DECLARACIONES BEGIN ZONA de INSTRUCCIONES END.

Es decir, existen dos zonas claramente diferenciadas separadas por unas palabras impuestas (reservadas) por el lenguaje: la Zona de Declaraciones y la Zona de Instrucciones del programa. La primera est delimitada por la Cabecera del programa y por la palabra reservada BEGIN, y en ella se declaran o se definen todos los elementos habituales de programacin (variables, subprogramas, etc.) que se van a utilizar en el programa y que estn disponibles en el lenguaje. La Zona de Instrucciones, delimitada por las palabras reservadas BEGIN y END, es la zona de las instrucciones ejecutables (las cuales utilizan los elementos declarados en la zona de declaraciones), es decir, la codificacin del algoritmo que resuelve el problema para el que fue diseado el programa. La cabecera del programa consta de la palabra reservada PROGRAM seguida del Nombre del Programa y de punto y coma (;). El punto y coma es el separador de sentencias en Pascal. El Nombre del Programa es un Identificador. Muy pocas sentencias en Pascal no llevan al final punto y coma. Entre las pocas excepciones se encuentran BEGIN (que marca el comienzo de un bloque de instrucciones) y END final de programa, que lleva un punto. En los programas Pascal podrn aparecer varios END seguidos de punto y coma, como ya veremos, pero END. (con punto) slo hay uno: el que marca final de programa.

PALABRAS RESERVADAS En Pascal (nos referiremos en lo sucesivo a la versin TURBO PASCAL 7.0 de la compaa BORLAND) existe un conjunto de palabras con un cometido especfico. Son las Palabras Reservadas. Si se intentan utilizar para nombrar (identificar) algn elemento de la programacin se producir un error de compilacin.
Pgina N 16 Porf. Silvina M.Gimnez

Tcnicatura Superior en Anlisis de Sistemas

I.S.F.T.N 132

Las palabras reservadas de Turbo Pascal son las siguientes:

AND ARRAY ASM BEGIN CASE CONST CONSTRUCTOR DESTRUCTOR DIV DO DOWNTO ELSE END

FILE FOR FUNCTION GOTO IF IMPLEMENTATION IN INHERITED INLINE INTERFACE LABEL MOD NIL

NOT OBJECT OF OR PACKED PROCEDURE PROGRAM RECORD REPEAT SET SHL SHR STRING

THEN TO TYPE UNIT UNTIL USES VAR WHILE WITH XOR

IDENTIFICADORES Los Identificadores son los nombres que tienen los elementos de la programacin: Constantes, Variables, Tipos de Dato, Programas, Procedimientos, Funciones, Unidades y los Campos de los Registros. El programador, a la hora de escribir el programa tiene que poner nombre a las constantes, variables, etc. que utilice, ajustndose a las siguientes reglas: 1. Un identificador puede tener cualquier longitud, pero slo son significativos los primeros 63 caracteres. 2. Debe comenzar por una letra o el carcter de subrayado. 3. Despus del primer carcter puede ir cualquier secuencia de letras y nmeros o caracteres de subrayado. Ningn otro carcter est permitido. 4. Al igual que ocurre con las palabras reservadas, el compilador no distingue para los identificadores letras maysculas y minsculas. Es decir, los identificadores EXPO y expo son indistinguibles. Para el Pascal no existen diferencias entre maysculas y minsculas, as que a un identificador denominado "valor" se le puede referir como "VALOR" o "VaLoR". Todo identificador en Pascal debe ser definido previamente a su utilizacin. El lenguaje Pascal ya tiene de antemano identificadas algunas constantes, variables, tipos de dato, unidades, procedimientos y funciones que son elementales para comenzar un proceso de programacin o que son muy habituales en la misma, ahorrando as al programador la pesada tarea de describirlas. Por ejemplo las definiciones de los tipos de dato ms habituales, los procedimientos de lectura de datos por teclado y de escritura en pantalla, etc. Los identificadores de estos elementos conocidos de antemano por el compilador se denominan Identificadores Predefinidos y tienen una misin concreta inicialmente. Sin embargo, si el programador les asigna una misin diferente en la zona de declaraciones de su programa, pierden su definicin previa. En esto se diferencian de las palabras reservadas. UNIDADES TURBO PASCAL De la gran cantidad de constantes, variables, procedimientos, etc. predefinidos, unos son especficos de la estructura bsica del lenguaje, otros son especficos del manejo de la pantalla, otros lo son para relacionar el Pascal con el sistema operativo, etc. Por esta razn, y alguna ms, estos elementos estn agrupados en grupos denominados UNIDADES predefinidas ('Units'). Estas Unidades no se 'cargan' en memoria cuando 'entramos' en Turbo Pascal, sino que permanecen en disco. Cuando escribamos un programa y utilicemos en l algn elemento de alguna Unidad, declararemos (en la Zona de Declaraciones del programa) qu Unidad o Unidades requerimos para poder compilar y ejecutar nuestro programa. En este caso las Unidades correspondientes se cargarn en memoria para poder realizar dichos procesos. Es lgico pensar que no en todos los programas se van a utilizar todas las Unidades, por lo que el aprovechamiento de memoria se convierte en otra razn para agrupar los elementos predefinidos en Unidades.
Porf. Silvina M.Gimnez Pgina N 17

PROGRAMACION I

Turbo Pascal 7.0

Las Unidades predefinidas o Unidades estndar del Turbo Pascal 7.0 son ocho: SYSTEM, CRT, PRINTER, DOS, OVERLAY, GRAPH, TURBO3 y GRAPH3. De ellas, las dos ltimas estn diseadas para permitir la compatibilidad de programas y archivos de datos creados con la versin 3.0 de Turbo Pascal. De las otras seis Unidades, diremos que SYSTEM contiene todos los elementos bsicos y ms habituales del lenguaje y, como se utiliza prcticamente en todos los programas, se carga automticamente, de modo que no necesita ser declarada en la Zona de Declaraciones de los programas. CRT contiene todos los elementos relativos al control de pantalla; PRINTER los relativos al control de impresora; DOS los relativos a la relacin de Turbo Pascal con el sistema operativo; OVERLAY los relativos a la gestin de Overlays y GRAPH los relativos a procesos grficos. La declaracin USES Para declarar una unidad, o lo que es lo mismo, dejarla lista para ser utilizada, se utiliza la palabra reservada USES que debe ir inmediatamente despus de la sentencia PROGRAM, despus se escriben los nombres de las unidades que se utilizarn.

Pgina N 18

Porf. Silvina M.Gimnez

Tcnicatura Superior en Anlisis de Sistemas

I.S.F.T.N 132

TIPOS DE DATOS
INTEGER CHAR BOOLEAN ENUMERADO SUBRANGO

PREDEFINIDOS ORDINALES SIMPLES DEFINIDOS POR


EL USUARIO

NO ORDINALES DATOS ESTATICOS CADENA STRING ARRAY CONJUNTO REGISTRO ARCHIVO FUNCIONES PROCEDIMIENTOS LISTAS COLAS(FIFO) PILAS(LIFO) ARBOLES TABLAS GRAFOS

REALES

ESTRUCTURADOS

PROCEDURAL

DATOS DINAMICOS

LINEALES

NO LINEALES

Las estructuras de datos Estticas son fijas y una vez compilado el programa no se pueden modificar, mientras que las estructuras de datos Dinmicas se crean durante la ejecucin del programa. TIPOS SIMPLES DE DATOS PREDEFINIDOS Los tipos Simples, los cuales consisten en conjuntos de valores elementales; es decir, que no pueden dividirse, ni tratarse parcialmente, etc. Los tipos Ordinales estn constituidos por valores elementales ordenados, cada uno de los cuales tiene asociado un ordinal (nmero entero que permite establecer una ordenacin de estos valores). Los tipos Ordinales, a su vez, se dividen en tipos Ordinales Predefinidos o conocidos y definidos de antemano por el lenguaje, y los tipos que deben ser Definidos por el Usuario, si es que ste quiere hacer uso de un tipo de dato no estndar. Tipos de dato Enteros
TIPO RANGO TAMAO (bytes)

SHORTINT INTEGER LONGINT BYTE WORD

-128 ... 127 -32.768 ... 32.767 -2.147.483.648 ... 2.147.483.647 0 ... 255 0 ... 65.535

1 2 4 1 2

El tipo de dato "Carcter" (CHAR) Es el tipo utilizado para manejar caracteres sueltos, tales como letras, nmeros del 0 al 9, signos de puntuacin, etc.
Porf. Silvina M.Gimnez Pgina N 19

PROGRAMACION I

Turbo Pascal 7.0

El identificador predefinido correspondiente a este tipo de dato es CHAR y el ordinal asociado a cada uno de los caracteres es su cdigo ASCII, el cual establece el orden en el conjunto de valores CHAR. As, por ejemplo, se cumple que: 'A' < 'S' 'Z' < 'a' Ya que los cdigos ASCII de 'A' y de 'Z' son respectivamente menores que los de 'S' y 'a'. El tipo de dato "Booleano" (BOOLEAN) Los valores del tipo Booleano son nicamente dos: Verdadero y Falso, que se representan mediante los identificadores predefinidos (constantes predefinidas) TRUE y FALSE. El identificador predefinido correspondiente a este tipo es BOOLEAN. Los ordinales asociados a cada valor son: Ordinal de FALSE: 0 Ordinal de TRUE : 1 Por tanto, FALSE < TRUE. TIPOS SIMPLES DE DATOS DEFINIDOS POR EL PROGRAMADOR Adems de los tipos simples predefinidos, es posible crear tipos ordinales nuevos, que pueden ser bien subconjuntos de los tipos predefinidos, o bien tipos de dato exclusivos, sin ninguna relacin con los tipos predefinidos. A los primeros se les denomina tipos Subrango y a los segundos tipos Abstractos o Enumerativos. Tipos Abstractos o Enumerativos La definicin de tipos de dato abstractos se realiza, en la zona de definiciones y declaraciones del programa, escribiendo en primer lugar la palabra reservada TYPE, a continuacin el identificador del tipo, despus un signo igual (=) y despus, los identificadores de los valores posibles separados entre s por comas y encerrados entre parntesis. Por ejemplo: PROGRAM GALICIA; TYPE PROGAL = (CORUA,LUGO,ORENSE,PONTEVEDRA); VAR PROV : PROGAL; < Resto del Programa > Como vemos, la definicin de un tipo abstracto se hace por enumeracin de todos sus posibles valores. Esta es la razn por la que tambin se les denomina tipos enumerativos. Caracterstica de estos tipos de datos: a) Los tipos abstractos son simples y ordinales: el compilador asociar los ordinales 0, 1, 2, ... a los valores del tipo en el orden en que han sido enumerados. As, en el ejemplo: 1. Ordinal de Corua = 0 Ordinal de Orense =2 2. Ordinal de Lugo = 1 Ordinal de Pontevedra = 3 b) Los datos de un tipo abstracto ocupan en memoria 1 byte si el tipo tiene enumerados hasta 256 valores, y 2 bytes si tiene ms de esta cantidad, hasta 65.536, que es el nmero mximo posible. c) Debemos tener en cuenta que los posibles valores de un tipo enumerativo deben ser exclusivos de ese tipo. As, no sera posible crear el tipo VOCALES formado por los valores 'A', 'E', 'I', 'O' y 'U' ya que estos lo son del tipo CHAR. d) Las variables de un tipo abstracto se pueden cargar por asignacin; por ejemplo: PROV := ORENSE; e) Pero no se pueden leer con READLN ni escribir con WRITE y WRITELN directamente, ya que estos son procedimientos predefinidos de lectura y escritura y servirn, por tanto, para leer y escribir datos de tipos predefinidos. Para leer y escribir datos de tipos abstractos tendremos que disear procedimientos especficos. Tipos Subrango Un tipo subrango es un subconjunto de valores de un tipo ordinal denominado tipo base (host type). En la definicin de un tipo subrango se escriben, despus del identificador del tipo y del signo igual (=), los valores mnimo y mximo que pertenecen al subrango, separados por dos puntos seguidos. Ejemplos de tipo subrango seran:
Pgina N 20 Porf. Silvina M.Gimnez

Tcnicatura Superior en Anlisis de Sistemas

I.S.F.T.N 132

TYPE PLANTA = 1 .. 15; VIVIENDA = 'A' .. 'E'; Notemos tres cosas de estos tipos: a) Al definir un tipo subrango no se especifica el tipo base, que es reconocido automticamente mediante los valores mnimo y mximo. b) Una variable de tipo subrango tiene todas las propiedades de las variables del tipo base, aunque sus valores deben estar en el rango especificado. As las variables: VAR PISO : PLANTA; LETRA : VIVIENDA; c) Tienen las propiedades de los tipos BYTE y CHAR respectivamente: espacio de memoria ocupado, operadores disponibles, etc.. d) Una caracterstica importante de los tipos subrango es que no es necesario definirlos como tipos y, por tanto, podemos declarar variables subrango directamente. Por ejemplo: PROGRAM CONTABLE; VAR PISO : 1..15; LETRA : 'A'..'E'; < Resto del Programa > TIPOS REALES
TIPO RANGO CIF. SIG. TAMAO (bytes)

REAL SINGLE DOUBLE EXTENDED COMP

2.9 x 10-39 ... 1.7 x 1038 1.5 x 10-45 ... 3.4 x 1038 5.0 x 10-324 ... 1.7 x 10308 3.4 x 10-4932 ... 1.1 x 104932 - 263 + 1 ... 263 + 1

11 7 15 19 19

6 4 8 10 8

El PASCAL define el tipo de dato REAL aquellos que tienen una parte entera y una parte decimal. Los nmeros reales se denominan frecuentemente nmeros de coma flotante. Estos nmeros son manejados internamente en notacin cientfica, en la cual un numero, N, se representa de la forma: N = M x BE donde M se denomina Mantisa y su valor puede estar comprendido entre: 1 <= M < B donde B es la Base del sistema de numeracin utilizado y E es el Exponente. El nmero de dgitos de la mantisa (cifras significativas) y el rango de valores del exponente depender del compilador utilizado. Turbo Pascal utiliza 6 bytes para almacenar datos de tipo REAL: 5 para la mantisa y 1 para el exponente. Escritura en Pantalla del tipo REAL Los procedimientos de escritura en pantalla en lenguaje PASCAL son WRITE y WRITELN. Utilizados con valores REAL directamente, obtenemos la salida en forma exponencial, con 11 cifras significativas. En la notacin para los nmeros reales, el signo de la mantisa ocupa siempre un carcter, aunque en los nmeros positivos no se escriba el signo (+). Para obtener en pantalla nmeros REAL en notacin decimal (sin exponente) existe un formato, en el que se especifica la anchura y el nmero de cifras decimales: WRITE ( R : Anchura : Decimales ); donde R es cualquier dato de tipo REAL. Operadores para el tipo REAL Los operadores aritmticos disponibles para el tipo REAL son: + * /
Porf. Silvina M.Gimnez

: : : :

SUMA RESTA MULTIPLICACION DIVISION


Pgina N 21

PROGRAMACION I

Turbo Pascal 7.0

Si el operador de divisin (/) se utiliza con operandos enteros, el resultado es un valor de tipo REAL. Los operadores multiplicativos (* y /) son igual de prioritarios, y son ms prioritarios que los aditivos (+ y -). El resto de las reglas de prioridad (ejecucin de izquierda a derecha, uso de parntesis, etc.) son las mismas que para los tipos enteros. Los operadores relacionales o de comparacin pueden utilizarse con valores de tipo REAL, para dar un resultado BOOLEAN. TIPO DE DATO STRING Cuando construimos programas en Turbo Pascal, necesitamos con mucha frecuencia manejar caracteres: unas veces caracteres sueltos y otras veces secuencias o cadenas de caracteres. Para el procesamiento de caracteres sueltos existe el ya conocido tipo CHAR; las cadenas de caracteres se denominan Strings, y para su manejo existe en Turbo Pascal el tipo de dato STRING (Identificador predefinido). La declaracin de variables de tipo STRING es un tanto peculiar; en ella debemos especificar, despus de la palabra STRING, y entre corchetes, el nmero mximo de caracteres que puede contener, que llamaremos longitud mxima. Una vez declarada, una variable se puede cargar por asignacin o por teclado. Una variable de tipo STRING ocupa en memoria un nmero de bytes superior en una unidad a la longitud mxima de la misma; es decir, un byte por cada carcter que puede almacenar, ms uno que utiliza para guardar la longitud del string en cada instante, que denominaremos longitud actual (length). Por ejemplo, para una variable de longitud mxima 15, que contuviese la cadena 'ZAMORA', tendramos en memoria algo como: Longitud Actual (Length) = 6 6 Z A M O R A

Longitud Mxima = 15 La longitud mxima de una variable de tipo STRING puede ir de 1 a 255 caracteres. Si en la declaracin de una variable de tipo STRING no se especifica su longitud mxima, se le asigna la longitud por defecto de 255 caracteres. Ejemplo: VAR CAD1,CAD2,CAD3 : STRING; BEGIN CAD1:='Longitud mxima de esta cadena 255 caracteres'; CAD2:='Ocupo en memoria 256 bytes'; CAD3:='Mi longitud actual (length) es 33'; Una variable de tipo STRING puede estar vaca (con longitud actual cero): es como sale de la zona de declaraciones del programa. En la zona de instrucciones, una variable STRING se puede vaciar, bien por asignacin: CAD := ''; sin espacio entre los dos apstrofos, bien por teclado: READLN (CAD); pulsando nicamente Return. Si en una variable de tipo STRING se intenta almacenar (por asignacin o por teclado) una cadena de ms caracteres que su longitud mxima, los caracteres que excedan a esa longitud son ignorados. Una de las caractersticas ms importantes del tipo STRING es que sus variables, una vez cargadas se pueden tratar carcter a carcter, en el rango 0...Length (longitud actual); por ejemplo, si CAD es una variable STRING[25], y C una variable de tipo BYTE podemos tener: CAD:='ZamoLa' WRITELN(CAD[3]); { Aparecer en pantalla el carcter m } READLN(CAD[5]); { Si tecleamos r ... } FOR C:=1 TO 6 DO CAD[C]:=UPCASE(CAD[C]); WRITELN(CAD); { ... obtendramos ZAMORA }
Pgina N 22 Porf. Silvina M.Gimnez

Tcnicatura Superior en Anlisis de Sistemas

I.S.F.T.N 132

Ahora bien, si se intenta leer (con READLN), escribir (con WRITE/LN) o asignar (con :=) un elemento ms all de la longitud actual, la operacin no tendr ningn efecto; es decir, la carga de una variable STRING no puede hacerse elemento a elemento, aunque s pueden hacerse modificaciones, o presentaciones en pantalla de los elementos existentes. Por ejemplo, con VAR S:STRING[15], las siguientes instrucciones produciran los siguientes efectos: S:='Coreses'; READLN(S[8]); WRITE(S[8]); S[7]:='S'; WRITE(S[7]); { Carga de la variable } { No se carga nada en la posicin 8 } { No se escribe nada en pantalla } { El elemento 7 se modifica } { Se escribe en pantalla S }

Hemos de decir tambin que se pueden declarar variables inicializadas (o constantes con tipo) de tipo STRING, por ejemplo: CONST MS_DOS : STRING = 'MicroSoft-Disk Operating System'; OS_2 : STRING [30] = Operting System 2'; Comparacin de Strings Los datos de tipo STRING pueden compararse con los operadores relacionales >, >=, <, <=, = y <>, para producir un resultado BOOLEAN. Todos los strings son compatibles entre s, de modo que pueden compararse variables y constantes STRING de distintas longitudes. Para comparar dos datos STRING se comienza por comparar el primer carcter de ambos strings y, si fueran diferentes, el resultado de la comparacin sera el que se tomara como resultado final Si las dos cadenas son de la misma longitud y todos sus caracteres coinciden, se concluye que ambas cadenas son iguales. Operador de Concatenacin Turbo Pascal dispone del operador binario de concatenacin (+) para unir o enlazar dos datos de tipo STRING. El resultado de la operacin S + T, donde S y T son de tipo STRING, es compatible con cualquier tipo STRING (pero no con el tipo CHAR). Si el resultado de la concatenacin se inten-ta almacenar en una variable de menor longitud que el resultado, se trunca a la longitud de la va-riable receptora. Si el resultado se va a dirigir a pantalla y excede de 255 caracteres, slo sern visualizados los 255 primeros. Ejemplo: 'TURBO' + 'PASCAL' = 'TURBOPASCAL'

Porf. Silvina M.Gimnez

Pgina N 23

PROGRAMACION I

Turbo Pascal 7.0

EL TIPO CONJUNTO (SET)

Un conjunto es un grupo de nmeros o caracteres relacionados. Los conjuntos se utilizan para comprobar si un carcter o nmero pertenece a un conjunto.
Podemos definir CONJUNTOS particulares de elementos de cualquiera de los siguientes tipos base: BYTE CHAR BOOLEAN Abstractos (de 1 byte) Es decir, podemos aislar conjuntos de elementos a partir de cualquier tipo ordinal de tamao 1 byte. Para definir una constante de tipo CONJUNTO, despus de la palabra CONST, el identificador de la constante y el signo igual, se escriben todos los elementos del tipo base que queremos que constituyan el conjunto, separados por comas y encerrados entre corchetes. Por ejemplo, conjuntos constantes vlidos seran: CONST VOCALES = ['A','E','I','O','U']; PARES = [2,4,6,8,0]; De esta manera, con el identificador VOCALES hemos aislado un conjunto de elementos del tipo base CHAR, y con el identificador PARES lo hemos hecho del tipo base BYTE. Si en la definicin de un conjunto, los elementos, o algunos de los elementos constituyentes son consecutivos, se puede utilizar una notacin similar a la de los subrangos. Por ejemplo: CONST HEXADIG = ['A'..'F','0'..'9']; NUMEROS = [0..100,125]; HEXADIG define un conjunto de 16 elementos del tipo base CHAR y NUMEROS un conjunto de 102 elementos del tipo BYTE. Para declarar variables de tipo CONJUNTO, despus de la palabra VAR, el identificador de la variable y los dos puntos, se escriben las palabras reservadas SET OF seguidas del identificador del tipo base o subrango del mismo. Por ejemplo: VAR LETRAS NUMERO MAYUS DECEN BOOLE : SET OF CHAR; : SET OF BYTE; : SET OF 'A'..'Z'; : SET OF 10..99; : SET OF BOOLEAN;

Cuando se declaran las variables de tipo SET no contienen ningn conjunto concreto: podemos decir que estn vacas. La carga con un conjunto concreto de elementos de una variable de tipo SET, se realiza con la instruccin de asignacin. As, las variables declaradas anteriormente se podran cargar, por ejemplo, con: LETRAS := ['A','E','I','O','U']; NUMERO := [1..50,75,91]; MAYUS := ['A','B','S']; DECEN := [10,20,30,40,50,60,70,80,90]; BOOLE := []; { conjunto vaco } El tipo base no puede tener ms de 256 valores posibles y los valores ordinales de los valores del tipo base deben estar en el rango 0..255. Por esta razn el tipo base de un SET no puede ser de los tipos SHORTINT, INTEGER, LONGINT ni WORD. Igualmente no puede serlo el subrango -100..100, por ejemplo, as como algn tipo abstracto con ms de 256 valores enumerados. Tambin es posible, como para otros tipos de datos, definir tipos SET, con TYPE: TYPE NOMBRE = STRING [15]; CALEN = SET OF 1..31; VAR NAME : NOMBRE;
Pgina N 24 Porf. Silvina M.Gimnez

Tcnicatura Superior en Anlisis de Sistemas

I.S.F.T.N 132

MES : CALEN; Por ltimo, podemos tambin definir constantes con tipo de tipo SET, de la forma habitual. Por ejemplo: TYPE DIGITOS = SET OF 0..9; CONST DIGIPARES : DIGITOS = [0,2,4,6,8]; Un gran inconveniente de los datos tipo SET es que no se pueden leer por teclado con READLN ni escribir en pantalla con WRITE/LN. Operadores Relacinales para el Tipo SET Con el tipo SET se pueden utilizar los siguientes operadores binarios de comparacin (que por tanto, dan resultado BOOLEAN), con los siguientes significados: OPERADOR = <> <= >= IN OPERACION Igualdad de Conjuntos Desigualdad de Conjuntos Subconjunto de Superconjunto de Pertenencia a TIPO DE OPERANDOS Tipos Set compatibles Tipos Set compatibles Tipos Set compatibles Tipos Set compatibles Operador izdo.: cualquier tipo ordinal T Operador decho.: Set cuyo tipo base sea compatible con T.

Tipos SET compatibles son aquellos que tienen el mismo tipo base o tipos base compatible. Por ejemplo, SET OF CHAR es compatible con SET OF 'A'..'Z', y viceversa, si todos los elementos del primero se encuentran en el rango del segundo. Sin embargo SET OF CHAR no es compatible con SET OF BYTE. Si A y B son SET's compatibles, y T es un valor ordinal de su tipo base, sus comparaciones producen los siguientes resultados: a) A = B : es TRUE si y slo si A y B contienen exactamente los mismos elementos; en caso contrario resulta FALSE. b) A <> B : es TRUE si y slo si A y B no contienen exactamente los mismos elementos; en caso contrario resulta FALSE. c) A <= B : es TRUE si y slo si cada miembro de A lo es tambin de B; i.e., si A est incluido en B (A es subconjunto de B). d) A >= B : es TRUE si y slo si cada miembro de B lo es tambin de A; i.e., si A incluye a B (A es superconjunto de B). e) T IN A : retorna TRUE cuando el valor del operando de tipo ordinal, T, es un miembro del operando de tipo SET, A; en caso contrario devuelve FALSE. Otros Operadores para el Tipo SET Existen tres operadores binarios, con los smbolos +, - y *, de los operadores aritmticos, que aplicados a operandos de tipos SET compatibles adquieren los siguientes significados: OPERADOR + * OPERACION Unin de Conjuntos Diferencia de Conjuntos Interseccin de Conjuntos TIPO DE OPERANDOS Tipos Set compatibles Tipos Set compatibles Tipos Set compatibles

El resultado de estas operaciones sigue las reglas de la lgica de conjuntos: si A y B son SET's compatibles, entonces: a) A + B : resulta un conjunto formado por los elementos que estn en A, en B o en ambos. b) A - B : resulta un conjunto formado por los elementos que estn en A y no estn en B. c) A * B : resulta un conjunto formado por los elementos que estn simultneamente en A y B. Como esperbamos para las conocidas UNION, DIFERENCIA e INTERSECCION de conjuntos.
Porf. Silvina M.Gimnez Pgina N 25

PROGRAMACION I

Turbo Pascal 7.0

Almacenamiento en Memoria del Tipo SET Un dato de tipo SET se almacena en memoria como una vector de bits. Cada bit de la vector hace referencia a un elemento del tipo base que es susceptible de estar en el conjunto. Si el bit correspondiente a un elemento dado es un '1' significa que ese elemento est en el conjunto; si el bit es un '0', el elemento no est en el conjunto. Como el nmero mximo de elementos de un SET es 256, ningn SET ocupar en memoria ms de 256 bits o 32 bytes. EL TIPO DE DATO ARRAY Un ARRAY es una variable que repite un tipo de datos un nmero especfico de veces: Nombre: Array [limite inferior. .limite superior] of Tipo de Datos; El limite inferior y el limite superior son cualquier par de valores enteros legales donde el limite superior e mayor al limite inferior. Los elementos constitutivos de un ARRAY pueden ser de cualquiera de los tipos conocidos: simple, string, set e incluso array. Los array se utilizan normalmente cuando un programa incluye una lista recurrente de elementos. Se caracterizan por: a) Asignar posiciones contiguas de memoria. b) Acceso directo a cada posicin de array c) Referencia al mismo nombre de variable variando su ndice para ubicar cada elemento. Los arrays se clasifican en: Arrays Unidimensionales (Vectores) Arrays Multidimensionales (Matrices)

ARRAYs Unidimensionales (Vectores) Para crear (declarar) una variable de tipo Vector, hay que indicar dos cosas: a) Entre qu valores ordinales puede estar comprendido el ndice, lo que indica el nmero de posiciones o elementos del vector. b) Con qu tipo de datos se puede cargar la vector. Como ya se ha dicho, todos los elementos de la vector deber ser del mismo tipo. VAR Identificador : ARRAY [Indice] OF Tipo de Dato; Los siguientes son ejemplos vlidos de declaraciones de variables de tipos ARRAY: VAR ARTICULO CANT DEPTO PRECIO APELLIDO : ARRAY [1..10] OF INTEGER; : ARRAY ['A'..'F'] OF BYTE; : ARRAY [BYTE] OF CHAR; : ARRAY [101..200] OF REAL; : ARRAY [1..5] OF STRING[8];

Una variable de tipo ARRAY ocupa en memoria tantos bytes como los que ocupa un dato del tipo constituyente, multiplicado por el nmero de elementos de la vector. Este nmero viene dado por la frmula: Los elementos de una vector se podrn cargar, independientemente, por asignacin (:=) o por teclado (con READLN); igualmente, se podrn enviar a pantalla mediante WRITE/LN. Para indicar el elemento de la vector que se quiere utilizar, se escribe el identificador de la variable seguido de una constante, variable o expresin que proporcione el valor del ndice, escrita entre corchetes. Por ejemplo: CANT['C'] := 479; cargara en el elemento de ndice 'C' de la vector el valor BYTE 479:
Pgina N 26 Porf. Silvina M.Gimnez

Tcnicatura Superior en Anlisis de Sistemas

I.S.F.T.N 132

Indice

'A'

'B'

'C' 479

'D'

'E'

'F'

Veamos cuatro cuestiones importantes relativas a este tipo de dato, que hay que tener en cuenta a la hora de programar: i) Los ARRAYs siempre deben manejarse (cargarse, visualizarse, compararse, etc.) elemento a elemento. La nica instruccin posible con todos los elementos de los ARRAYs simultneamente, es la asignacin entre dos variables del mismo tipo ARRAY concreto. Por ejemplo, con los ARRAYs: VAR ZIPI,ZAPE : ARRAY [1..10] OF WORD; sera vlida la instruccin: ZIPI := ZAPE; ii) Como para todos los tipos de dato en Pascal, podemos definir tipos ARRAY, con TYPE, de la forma habitual: TYPE NOMBRES = ARRAY [1..100] OF STRING; NUMEROS = ARRAY [1..100] OF WORD; VAR VECTOR_1 : NOMBRES; VECTOR_2 : NUMEROS; El tamao mximo que admite el compilador para un tipo estructurado es de 65.520 bytes (ligeramente inferior a 64 K). Quiere esto decir, que no podemos declarar vectores, por ejemplo, del tipo: VAR GRANDE : ARRAY [WORD] OF BYTE; iv) Por ltimo, podemos tambin definir constantes con tipo (o variables inicializadas) de tipo ARRAY, de la siguiente forma: CONST DIAS : ARRAY [1..7] OF INTEGER = (-12,25,65,-1,7,111,0); Es decir, escribiendo entre parntesis, y separados por comas, todos los valores que debe contener la vector.

iii)

Porf. Silvina M.Gimnez

Pgina N 27

PROGRAMACION I

Turbo Pascal 7.0

ARRAYS BIDIMENSIONALES (MATRICES) Sabemos que los elementos constitutivos de un ARRAY pueden ser de cualquier tipo: simple, STRING, SET y ARRAY. Si los elementos de un ARRAY son a su vez ARRAYs unidimensionales, tendremos un tipo de dato con dos niveles de estructuracin: el ARRAY BIDIMENSIONAL que, en adelante, denominaremos frecuentemente tipo MATRIZ. Por ejemplo, una matriz matemtica de 3 filas y 4 columnas, de nmeros enteros positivos menores que 100, se podra almacenar en una variable de tipo ARRAY bidimensional tal como: VAR M : ARRAY [1..3] OF ARRAY [1..4] OF BYTE; es decir, con dos ndices: el primero de ellos har referencia al primer nivel de estructuracin y el segundo al segundo nivel de estructuracin. Segundo Indice 1 Primer Indice 1 2 3 2 3 4

Para utilizar un elemento de la matriz M, hay que utilizar dos ndices; por ejemplo, para cargar por asignacin el elemento de la fila 2, columna 3, escribiramos: M [2][3] := 69; e igualmente, para cargar un elemento desde el teclado o escribirlo en pantalla: READLN ( M [2][4] ); WRITELN ( M [1][1] ); Puede utilizarse una notacin ms cmoda tanto para la declaracin de variables, como para la utilizacin de los ndices: es la siguiente: VAR M : ARRAY [1..3,1..4] OF BYTE; BEGIN M [2,3] := 69; READLN ( M [2,4] ); WRITELN ( M [1,1] ); De esta forma, en la declaracin de variables, slo se escriben una vez las palabras reservadas ARRAY y OF y, entre corchetes, se encierran los rangos correspondientes a cada uno de los ndices, separados por comas. Para definir una constante con tipo de tipo MATRIZ, se encierran los valores constantes de cada dimensin entre parntesis independientes, separados por comas, as como los valores dentro de cada parntesis. Por ejemplo, la definicin: CONST M : ARRAY [1..2,1..3] OF BYTE = ( (1,2,3),(4,5,6) ); nos provee de una MATRIZ inicializada con los valores: M [1,1] = 1 M [1.2] = 2 M [1,3] = 3 M [2,1] = 4 M [2,2] = 5 M [2,3] = 6

Pgina N 28

Porf. Silvina M.Gimnez

Tcnicatura Superior en Anlisis de Sistemas

I.S.F.T.N 132

ARRAYS MULTIDIMENSIONALES Si los elementos constitutivos de un ARRAY son a su vez ARRAYs, y los elementos constitutivos de estos, son a su vez ARRAYs, y as sucesivamente, tenemos estructuras complejas de datos de un nmero cualquiera de dimensiones. Son los ARRAYs MULTIDIMENSIONALES, cuya utilizacin no supone ninguna dificultad, conocida la de los Arrays de dimensiones 1 y 2. As, por ejemplo, para declarar un ARRAY TRIDIMENSIONAL, se necesitaran 3 ndices: VAR RUBIK : ARRAY [1..3,1..3,1..3] OF INTEGER; de la misma forma que para utilizar un elemento concreto de la estructura: RUBIK [1,2,3] := -100;

Porf. Silvina M.Gimnez

Pgina N 29

PROGRAMACION I

Turbo Pascal 7.0

PROCEDIMIENTOS Y FUNCIONES
INTRODUCCIN Los SUBPROGRAMAS (que ocasionalmente, denominaremos tambin SUBRUTINAS), son conjuntos de instrucciones que realizan alguna tarea concreta, que por su utilizacin habitual en distintos programas, o por su repetido uso en un solo programa, conviene escribirlos una sola vez, identificarlos con un nombre (que puede ser cualquier identificador vlido) y, a partir de ese momento, utilizarlos las veces que necesitemos escribiendo nicamente su nombre o poco ms. La utilizacin de subprogramas en un programa, clarifica normalmente la zona de instrucciones de ste, ahorra tiempo y escritura, si un subprograma se utiliza ms de una vez y permite que un programa sea elaborado por ms de un programador, si se hace una correcta divisin del programa en mdulos (subprogramas). Los subprogramas pueden ser PROCEDIMIENTOS y FUNCIONES. Una FUNCION es un subprograma que da como resultado un valor, y slo uno, de un cierto tipo; puede recibir o no datos (parmetros) del programa principal, y se utiliza de la misma forma que un valor del tipo de dato del resultado. Un PROCEDIMIENTO, sin embargo, puede devolver o no valores al programa que lo utiliza, puede recibir o no parmetros del mismo, y se utiliza escribiendo el nombre del procedimiento seguido de la lista de parmetros, si los hubiera, encerrados entre parntesis, seguido de punto y coma. Ya conocemos gran cantidad de procedimientos y funciones que Turbo Pascal tiene predefinidos y que pertenecen a las unidades SYSTEM y CRT. Por ejemplo: CLRSCR DELAY (200) INC (1,3) VAL (S,X,C) KEYPRESSED UPCASE(CH) COPY (S,P,N) PROCEDIMIENTOS Los procedimientos no predefinidos que vaya a utilizar un programa, deben definirse en la zona de declaraciones del programa. Los procedimientos ms simples son aquellos que no reciben datos del programa principal ni entregan valores al mismo. Para describir (definir) un procedimiento, se escribe la palabra reservada PROCEDURE seguida del nombre del procedimiento (cualquier identificador vlido) y de punto y coma. La cabecera del procedimiento es: PROCEDURE Nombre; Las instrucciones que constituyen el procedimiento, deben ir delimitadas por BEGIN.. END; (con punto y coma), incluso aunque est constituido por una nica instruccin. Un procedimiento (al igual que una funcin), es un "bloque" no ejecutable independientemente, que debe ser incluido en un programa para llevar a cabo su cometido. Sin embargo, el parecido entre las estructuras de un programa y un procedimiento es muy grande. PROGRAM Nombre; Zona Declaraciones Globales BEGIN Zona Instr. Programa END.
Pgina N 30

Procedimiento que no precisa parmetros o argumentos. Procedimiento que recibe un parmetro. Procedimiento que recibe dos parmetros. Procedimiento que recibe tres parmetros. Funcin que no recibe parmetros. Devuelve un valor BOOLEAN. Funcin que recibe un parmetro. Devuelve un valor CHAR. Funcin que recibe tres parmetros. Devuelve un valor STRING.

PROCEDURE Nombre; Zona Declaraciones Locales BEGIN Zona Instr. Procedimiento END;
Porf. Silvina M.Gimnez

Tcnicatura Superior en Anlisis de Sistemas

I.S.F.T.N 132

Todas las constantes, variables, etc., descritas dentro de un procedimiento se denominan LOCALES de ese procedimiento, y no pueden utilizarse fuera de l. En esto se diferencian de las GLOBALES (del programa principal), que pueden utilizarse tanto en las instrucciones del programa como en las de cualquiera de sus subprogramas. Las variables locales se crean cuando comienza a ejecutarse el procedimiento y desaparecen cuando el procedimiento termina. No se produce ningn conflicto si variables locales y globales tienen los mismos identificadores: cuando aparece una variable en la compilacin y ejecucin de las instrucciones de un procedimiento, se busca primero en la zona de declaraciones locales Y, si se encuentra, sta es la variable que se utiliza; slo si no se encuentra, se busca en la zona de declaraciones del programa. Por tanto, si existen una variable local y una global con el mismo nombre, en el procedimiento siempre se utilizar la local. Es fcil deducir que la utilizacin de variables locales tiene las siguientes ventajas: a) El aprovechamiento de memoria, ya que las variables locales slo ocupan memoria durante la ejecucin del procedimiento. b) La posibilidad de escribir procedimientos exportables, es decir, que no necesitan utilizar variables del programa principal y, por tanto, pueden ser utilizados, sin modificar, en cualquier programa.

Parmetros Muy frecuentemente un procedimiento debe utilizar datos del programa principal para realizar su cometido. Es claro que una solucin sera que el procedimiento utilizase variables globales que contuviesen esos datos, prestando atencin a que el procedimiento no tuviese variables locales con los mismos Identificadores. Sin embargo, esta solucin no es satisfactoria, ya que el procedimiento quedara absolutamente ligado al programa al utilizar una variable del mismo, con lo que la exportabilidad del procedimiento se pierde. Tengamos en cuenta que sta es la caracterstica fundamental que se debe conseguir cuando se disean subprogramas. Por otro lado, no podemos utilizar variables locales del procedimiento, ya que se crean cuando ste comienza a ejecutarse, y no es posible pasarles valores antes de la ejecucin del procedimiento. Para resolver el problema, existe la posibilidad de TRANSFERIR datos al procedimiento en el preciso momento de su llamada, por medio de ciertas variables locales especiales, denominadas PARMETROS. Las clases de parmetros en Pascal son: Parmetros Valor y Parmetros Variable. Transferencia de Parmetros Valor Los Parmetros Valor se utilizan cuando el procedimiento debe recibir algn dato del programa principal para realizar su tarea, pero no te devuelve ningn valor. Estos parmetros sern las variables locales especiales que reciban esos datos del programa principal en el momento de la llamada al procedimiento. Para declarar Parmetros Valor, en la cabecera del procedimiento y a continuacin del nombre, se escriben los identificadores de los Parmetros seguidos de sus tipos, con la siguiente sintaxis: PROCEDURE NombreProc ( Parmetro1:tipo; Parmetro2:tipo; ... ); Si existe ms de un parmetro de un cierto tipo, se pueden separar por comas y escribir una sola vez el identificador del tipo, como es habitual. Cuando el programa llame al procedimiento, deber incluir, a continuacin del identificador del procedimiento y entre parntesis, los datos que deben ser transferidos a los respectivos Parmetros Valor. Es decir: NombreProc ( Dato 1, Dato2, ...) Obviamente los tipos de Dato 1 y Parmetro 1, Dato2 y Parrnetro2, etc., deben ser compatibles. De esta manera, podemos utilizar un procedimiento en cualquier programa sin preocupamos de las interioridades del mismo: slo debemos conocer qu hace, cules son los datos que requiere y en qu orden hay que suministrrselos. As, del procedimiento: GOTOXY (X,Y);
Porf. Silvina M.Gimnez Pgina N 31

PROGRAMACION I

Turbo Pascal 7.0

Sabemos que lo que hace es desplaza el cursor a la posicin de la pantalla que deseemos; que necesita dos datos de tipo BYTE que representan la fila y la columna en que deseamos situar el cursor y que el orden en que hay que suministrrselos es COLUMNA, FILA. El procedimiento no devuelve valores al programa principal: esto nos dice que los parmetros X e Y son parmetros valor. Los valores transferidos a X e Y pueden ser constantes, variables o expresiones, cuyo contenido o resultado sea de tipo BYTE. Transferencia de Parmetros Variable Frecuentemente tambin, los procedimientos deben devolver algn valor al programa principal. Por ejemplo, el procedimiento predefinido: VAL (S,I,C); recibe 3 parmetros del programa principal, S (STRING), I y C (INTEGER) y devuelve 2 valores al programa principal. Los Parmetros Valor no satisfacen esta necesidad, ya que son variables locales que desaparecen al finalizar el procedimiento, sin entregar valores al programa principal. Existe otra clase de parmetros que permiten recibir datos del programa en el momento de la llamada al procedimiento y devolver datos al programa en el momento de su finalizacin. Son los Parmetros Variable. Para declarar Parmetros Variable se debe poner, delante de sus identificadores, la palabra reservada VAR. As, el procedimiento: PROCEDURE ABC (FIN:CHAR; VAR TOT:BYTE); dispondra de un Parmetro Valor (FIN) y de un Parmetro Variable (TOT). En general, para Parmetros Variable, la cabecera del procedimiento adoptara la forma: PROCEDURE NombreProc (VAR Parmetro1:tipo; VAR Parmetro2:tipo); aunque el caso general sera que hubiese parmetros Valor y Variable en el mismo procedimiento. En el momento de la llamada al procedimiento, no existe ninguna diferencia con los Parmetros Valor, excepto que el valor que se transfiere a los Parmetros Variable no pueden ser constantes ni expresiones, sino que deben ser variables globales. Lo que ocurre con los Parmetros Variable es que, en el momento en que comienza la ejecucin del procedimiento, la variable global se transfiere al procedimiento, que la utiliza con el identificador del parmetro; sita en ella el valor que ha de entregar al programa principal y, al terminar el procedimiento, se transfiere al programa, en el que vuelve a recuperar su identificador original. Es decir, lo que se produce es una transferencia de variables durante la ejecucin del procedimiento.

Pgina N 32

Porf. Silvina M.Gimnez

Tcnicatura Superior en Anlisis de Sistemas

I.S.F.T.N 132

FUNCIONES Las Funciones son subprogramas que devuelven al programa principal que las utiliza un valor, y slo uno, de algn tipo simple o de tipo STRING. Esta es la diferencia fundamental con los procedimientos. La estructura general de una funcin es prcticamente igual a la de un procedimiento: FUNCTION NombreFunc (Parmetros): Tipo Resultado; Zona Declaraciones Locales BEGIN Zona Instrucciones Funcin END; Como vemos, en la cabecera debemos escribir la palabra reservada FUNCTION seguida del nombre (cualquier identificador vlido) y de la lista de parmetros que deben recibir datos del programa principal. A continuacin, despus de dos puntos (:) se debe especificar el Tipo de Resultado que la funcin devuelve al programa principal. Hay que resaltar tres caractersticas muy importantes de las funciones: a) El nombre de la funcin cumple una doble misin: de Identificador de la misma y de Variable que mantiene el valor que la funcin entrega al programa principal. De hecho, la zona de instrucciones de una funcin, siempre debe contener, al menos, una sentencia de asignacin que asigne un valor al Identificador de la funcin: NombreFunc := Valor del Tipo Resultado; b) Como toda funcin entrega un solo valor al programa principal, y lo hace en la Variable Identificador, todos los parmetros de una funcin sern del tipo Parmetro Valor. c) Una funcin se utiliza como un dato del Tipo Resultado, es decir, o se asigna (sola o participando en una expresin) a una variable de un tipo compatible con el Tipo Resultado, o se dirige a pantalla con WRITE/LN: Variable:= NombreFunc (Parmetros); WRITE ( NombreFunc (Parmetros) );

Porf. Silvina M.Gimnez

Pgina N 33

PROGRAMACION I

Turbo Pascal 7.0

METODOS DE ORDENACION
Debido a que las estructuras de datos son utilizadas para almacenar informacin, para poder recuperar esa informacin de manera eficiente es deseable que este ordenada. Esto significa que los elementos tengan algn orden secuencial de acuerdo a un criterio de ordenamiento, el cual puede ser numrico, alfabtico o incluso alfanumrico, ascendente o descendente. A largo de los aos se han desarrollado muchos algoritmos de ordenacin, los ms conocidos son: la ordenacin por insercin directa (insertion sort), la ordenacin por seleccin (selection sort), la ordenacin de la burbuja (bubble sort), la ordenacin shell (shellsort) y ordenacin rpida (quick-sort). La eficiencia de un algoritmo se mide por el nmero de comparaciones e intercambios que tienen que hacer, es decir, se toma n como nmero de elementos que tiene el arreglo a ordenar y se dice que un algoritmo realiza O(n2) comparaciones cuando compara n veces los n elementos, n x n = n2. Principios generales sobre ordenacin: Los algoritmos de ordenacin comparan un elemento de un array con otro y, si dos elementos estn desordenados, los algoritmos cambian su orden en el array. El cdigo de este proceso sera: If a[p-1] > a[p] then aux:=a[p]; a[p]:=a[p-1]; a[p-1]:= aux; La principal diferencia entre los algoritmos es el mtodo por el cual se seleccionan los elementos del array que se van a ordenar. ORDENACIN POR INSERCIN DIRECTA (INSERTION SORT) Este mtodo es uno de los ms sencillos. Toma cada elemento del array para ser ordenado y lo compara con los que se encuentra en posiciones anteriores a la de l dentro del arreglo. Empieza por el segundo elemento y lo ordena respecto al primero. Luego sigue con el tercero y lo coloca en su posicin ordenada con respecto a los dos anteriores, as sucesivamente hasta recorrer todo el array. Si resulta que el elemento con el que se est comparando es mayor que el elemento a ordenar, lo cambia y sigue el recorrido hasta la primera posicin. Si por el contrario, resulta que el elemento es menor al elemento a ordenar, se detiene el proceso ya que esta ordenado.

ALGORITMO DE ORDENACIN POR INSERCIN DIRECTA


PROGRAM INSERTION SORT; USES CRT; TYPE vector=array[1..10] of integer; VAR v:vector; PROCEDURE MUESTRA(a:vector;t:integer); VAR i:integer; BEGIN FOR i:=1 to t DO WRITE(a[i],' '); WRITELN; END; PROCEDURE CAMBIO(VAR a:vector;p:integer); VAR aux: integer; BEGIN aux:=a[p];
Pgina N 34 Porf. Silvina M.Gimnez

Tcnicatura Superior en Anlisis de Sistemas

I.S.F.T.N 132

a[p]:=a[p-1]; a[p-1]:= aux; END; PROCEDURE INSERCION(VAR a:vector;t:integer); VAR e,j,i:integer; BEGIN FOR i:=2 to t DO BEGIN e:=a[i]; j:=i; WHILE (a[j-1] > e) AND (j > 1) DO BEGIN CAMBIO(a,j); DEC(j,1); END; END; END; BEGIN CLRSCR; WRITELN('ORDENAMIENTO POR INSERCION'); v[1]:=9; v[2]:=6; v[3]:=2; v[4]:=5; v[5]:=3; v[6]:=7; v[7]:=1; v[8]:=8; v[9]:=4; v[10]:=0; MUESTRA(v,10); INSERCION(v,10); MUESTRA(v,10); READKEY; END. ORDENACIN POR SELECCIN (SELECTION SORT) Este mtodo de ordenamiento consiste en encontrar el menor de todos los elementos del arreglo e intercambiarlo con el que esta en la primera posicin. Luego el segundo ms pequeo, y as sucesivamente hasta ordenar todo el arreglo.

ALGORITMO DE ORDENACIN POR SELECCIN DIRECTA


PROGRAM SELECTION SORT; USES CRT; TYPE vector=array[1..10] of integer; VAR v:vector; PROCEDURE MUESTRA(a:vector;t:integer); VAR i:integer; BEGIN FOR i:=1 to t DO WRITE(a[i],' '); WRITELN; END; PROCEDURE CAMBIO(VAR a:vector;p,i:integer); VAR aux:integer;
Porf. Silvina M.Gimnez Pgina N 35

PROGRAMACION I

Turbo Pascal 7.0

BEGIN aux:=a[p]; a[p]:=a[i]; a[i]:= aux; END; PROCEDURE SELECCION(VAR a:vector;t:integer); VAR e,i,j,k:integer; BEGIN FOR i:=1 to t DO BEGIN e:=a[i]; j:=i; FOR k:=(j+1) TO t DO BEGIN IF a[k] < e THEN BEGIN e:=a[k]; j:=k; END; END; IF j <> i THEN CAMBIO(a,j,i); DEC(j,1); END; END; BEGIN CLRSCR; WRITELN('ORDENACION POR SELECCION'); v[1]:=9; v[2]:=6; v[3]:=2; v[4]:=5; v[5]:=3; v[6]:=7; v[7]:=1; v[8]:=8; v[9]:=4; v[10]:=0; MUESTRA(v,10); SELECCION(v,10); MUESTRA(v,10); READKEY; END. ORDENACIN DE LA BURBUJA (BUBBLE SORT) Este mtodo comienza por el final de array que se va a ordenar y trabaja hacia atrs hasta al principio del array. El procedimiento compara cada elemento con su anterior. Si los elementos estn desordenados, los cambia. El procedimiento continua hasta que alcanza el principio del array. Se compara cada elemento adyacente, despus de la primera pasada el elemento menor flota hasta el principio del array. Despus de la segunda pasada, el segundo elemento ms pequeo flota hasta la segunda posicin del array, etc., hasta que el algoritmo haya recorrido el array una vez por cada elemento del array.

ALGORITMO ORDENACIN DE LA BURBUJA


PROGRAM BUBBLE SORT; USES CRT; TYPE vector=array[1..10] of integer; VAR v:vector; PROCEDURE MUESTRA(a:vector;t:integer); VAR
Pgina N 36 Porf. Silvina M.Gimnez

Tcnicatura Superior en Anlisis de Sistemas

I.S.F.T.N 132

i:integer; BEGIN FOR i:=1 to t DO WRITE(a[i],' '); WRITELN; END; PROCEDURE CAMBIO(VAR a:vector;p:integer); VAR aux:integer; BEGIN aux:=a[p]; a[p]:=a[p-1]; a[p-1]:= aux; END; PROCEDURE BURBUJA(VAR a:vector;t:integer); VAR j,i:integer; BEGIN FOR i:=2 to t DO BEGIN FOR j:=t DOWNTO i DO BEGIN IF a[j-1] > a[j] THEN CAMBIO(a,j); END; END; END; BEGIN CLRSCR; WRITELN('ORDENACION POR BURBUJA'); v[1]:=9; v[2]:=6; v[3]:=2; v[4]:=5; v[5]:=3; v[6]:=7; v[7]:=1; v[8]:=8; v[9]:=4; v[10]:=0; MUESTRA(v,10); BURBUJA(v,10); MUESTRA(v,10); READKEY; END. ORDENACIN SHELL (SHELLSORT) La ordenacin Shell es ms eficaz que la ordenacin burbuja. En primer lugar coloca los elementos aproximados donde van a estar en la ordenacin final y despus determina su localizacin exacta. La fuerza del algoritmo reside en el mtodo que utiliza para calcular la posicin final aproximada de un elemento. El concepto clave es el hueco, la distancia entre los elementos que se comparan. Si el hueco es 5, el primer elemento se compara con el sexto elemento, el segundo con el sptimo, etc. Una simple pasada a travs del array se ordena los elementos que hay dentro del hueco. El valor del hueco es arbitrario, aunque es habitual darle el valor de la mitad del numero de elementos del array (es decir n div 2). Hay muchas versiones de la ordenacin Shell varan en complejidad y eficiencia. Es difcil describir el funcionamiento de este algoritmo, ya que los algoritmos eficientes son difciles de expresar con palabras.

ALGORITMO ORDENACIN SHELL


PROGRAM SHELLSORT; USES CRT; TYPE
Porf. Silvina M.Gimnez Pgina N 37

PROGRAMACION I

Turbo Pascal 7.0

vector=array[1..10] of integer; VAR v:vector; PROCEDURE MUESTRA(a:vector;t:integer); VAR i:integer; BEGIN FOR i:=1 to t DO WRITE(a[i],' '); WRITELN; END; PROCEDURE CAMBIO(VAR a:vector;p1,p2:integer); VAR aux:integer; BEGIN aux:=a[p1]; a[p1]:=a[p2]; a[p2]:= aux; END; PROCEDURE SHELL(VAR a:vector;t:integer); VAR hueco,i,d,j:integer; BEGIN d:=0; hueco:= t div 2; WHILE (hueco > 0) DO BEGIN FOR j:=(hueco+1) TO t DO BEGIN i:= j - hueco; WHILE (i > 0) DO BEGIN d:= i + hueco; IF a[i] <= a[d] THEN i:=0 ELSE BEGIN CAMBIO(a,i,d); i:= i - hueco; END; END; END; hueco:= hueco div 2; END; END; BEGIN CLRSCR; WRITELN('ORDENACION SHELL'); v[1]:=9; v[2]:=6; v[3]:=2; v[4]:=5; v[5]:=3; v[6]:=7; v[7]:=1; v[8]:=8; v[9]:=4; v[10]:=0; MUESTRA(v,10); SHELL(v,10); MUESTRA(v,10); READKEY; ollllEND.
Pgina N 38 Porf. Silvina M.Gimnez

Tcnicatura Superior en Anlisis de Sistemas

I.S.F.T.N 132

ORDENACIN RAPIDA (QUICK-SORT) La ordenacin rpida es el rey de los algoritmos. Comienza estimando un valor de rango medio para le array. Si el array esta formado por nmeros del 1 al 10, el punto medio podra ser 5 o 6. el valor exacto del punto medio no es crucial. El procedimiento calcula un punto medio a partir de la media aritmtica de los elementos primero y ltimo de la porcin del array que va a ordenar. Una vez que el procedimiento selecciona un punto medio, coloca en la parte inferior del array los elementos que estn por debajo de dicho punto medio y los que estn por encima en la parte superior. En cada paso del proceso, la ordenacin rpida ordena los elementos de un segmento del array alrededor del punto medio. A medida que los segmentos se hacen ms y ms pequeos, el array se aproxima en su forma totalmente ordenada.

ALGORITMO ORDENACIN RAPIDA


PROGRAM QUICKSORT; USES CRT; TYPE vector=array[1..10] of integer; VAR v:vector; PROCEDURE MUESTRA(a:vector;t:integer); VAR i:integer; BEGIN FOR i:=1 to t DO WRITE(a[i],' '); WRITELN; END; PROCEDURE CAMBIO(VAR a:vector;izq,der:integer); VAR aux:integer; BEGIN IF izq<>der THEN BEGIN aux:=a[izq]; a[izq]:=a[der]; a[der]:= aux; END; END; PROCEDURE QUICK(VAR a:vector;izq,der:integer); VAR m,d,i:integer; BEGIN m:=(a[izq]+a[der]) div 2; i:=izq; d:=der; REPEAT WHILE a[i] < m DO INC(i,1); WHILE m < a[d] DO DEC(d,1); IF i <= d THEN BEGIN CAMBIO(a,i,d); INC(i,1); DEC(d,1); END; UNTIL i > d;
Porf. Silvina M.Gimnez Pgina N 39

PROGRAMACION I

Turbo Pascal 7.0

IF izq < d THEN QUICK(a,izq,d); IF i < der THEN QUICK(a,i,der); END; BEGIN CLRSCR; WRITELN('ORDENACION QUICK-SORT'); v[1]:=9; v[2]:=6; v[3]:=2; v[4]:=5; v[5]:=3; v[6]:=7; v[7]:=1; v[8]:=8; v[9]:=4; v[10]:=0; MUESTRA(v,10); QUICK(v,1,10); MUESTRA(v,10); READKEY; END.

Pgina N 40

Porf. Silvina M.Gimnez

I.S.F.T. N 132

Tcnicatura Superior en Anlisis y Desarrollo de Aplicaciones

REGISTRO (RECORD) El tipo Registro es el tipo estructurado que existe en Turbo Pascal para almacenar en una sola variable varios datos, que pueden ser de diferentes tipos (cualquier tipo Simple, tipo SET, tipo ARRAY e incluso tipo Registro). Denominaremos Campos a estos elementos de los registros, cada uno de los cuales debe llevar asociado un identificador propio para distinguirlo dentro del registro al que pertenece. El tipo Registro tiene asociada la palabra reservada RECORD; una declaracin genrica de una variable de este tipo sera: VAR IdentReg : RECORD IdCampo1 : tipo; IdCampo2 : tipo; ............................ IdCampoN : tipo; END; Es decir, a continuacin de la palabra VAR se escribe el identificador del registro seguido de dos puntos y de la palabra RECORD. A continuacin se escriben los identificadores de los campos constituyentes seguidos cada uno de ellos de dos puntos, su tipo y punto y coma. La declaracin de la estructura termina con END; (con punto y coma). As, si queremos declarar una variable de tipo registro, para contener los datos personales de un individuo, podramos declarar: VAR FICHA : RECORD NOMB:STRING[30]; DNI :STRING[9]; EDAD :BYTE; SEXO :CHAR; END; Podemos definir un Tipo Registro, con TYPE, antes de declarar variables: TYPE REG = RECORD NOMB :STRING[30]; DNI :STRING[9]; EDAD :BYTE; SEXO :CHAR; END; VAR FICHA : REG; Las variables de tipo RECORD, al igual que las de tipo ARRAY, deben leerse por teclado y escribirse en pantalla, elemento a elemento (campo a campo). La nica operacin que puede realizarse con todos los elementos simultneamente es la asignacin entre dos variables de idntico tipo RECORD (es decir, copiar una variable registro en otra). Por ejemplo, si FICHA1 y FICHA2 son dos variables del tipo REG definido anteriormente, podemos hacer: FICHA2 := FICHA1; Para referirnos a un campo concreto, IdCampoN, de una variable registro, IdentReg, debemos escribir en primer lugar el identificador del registro y, a continuacin, el identificador del campo, separados por un punto, es decir: IdentReg.IdCampoN := dato; READLN (IdentReg.IdCampoN); WRITE (IdentReg.IdCampoN); Se pueden definir constantes con tipo o variables inicializadas de tipo registro. Para ello, despus del identificador de la constante y del tipo de registro, se encierran entre parntesis los valores iniciales de los campos constituyentes, separados por punto y coma. El siguiente ejemplo, muestra mejor la idea de la sintaxis de esta definicin:

Porf. Silvina M.Gimnez

Pgina N 41

PROGRAMACION I

Turbo Pascal 7.0

TYPE COORDENADAS = RECORD X,Y : BYTE; END; MES = (ENE,FEB,MAR,ABR,MAY,JUN,JUL,AGO,SEP,OCT,NOV,DIC); FECHA = RECORD D : 1..31; M : MES; A : 1900..2000; END; CONST ORIGEN : COORDENADAS = (X:0; Y:0); SANPEDRO : FECHA = (D:29; M:JUN; A:1993); LA SENTENCIA WITH La utilizacin ms habitual de los registros ser campo a campo. As, por ejemplo, para cargar por teclado completamente el registro FICHA de tipo REG, declarado en la seccin anterior, deberamos escribir las siguientes instrucciones: WRITE ('Escribe el nombre: '); READLN (FICHA.NOMB); WRITE ('Escribe el n de D.N.I.: '); READLN (FICHA.DNI); WRITE ('Escribe la edad: '); READLN (FICHA.EDAD); WRITE ('Escribe el sexo (V/M): '); READLN (FICHA.SEXO); Este conjunto de instrucciones hacen referencia a un solo identificador de registro. Para facilitar la escritura de estos conjuntos de instrucciones, existe en Pascal la sentencia WITH (palabra reservada), cuya sintaxis general es: WITH IdentReg DO BEGIN Conjunto de Instrucciones de utilizacin de los Campos de IdentReg. END; Avisa al compilador de que todas las instrucciones que engloba, hacen referencia al registro IdentReg, cuyo identificador se sita entre las palabras WITH y DO, lo que nos evita tener que repetir el identificador del registro en todas las instrucciones. Por ejemplo, el conjunto de instrucciones anterior para cargar por teclado el registro FICHA, lo podramos escribir: WITH FICHA DO BEGIN WRITE ('Escribe el nombre: '); READLN (NOMB); WRITE ('Escribe el n de D.N.I.: '); READLN (DNI); WRITE ('Escribe la edad: '); READLN (EDAD); WRITE ('Escribe el sexo (V/M): '); READLN (SEXO); END;

Pgina N 42

Porf. Silvina M.Gimnez

I.S.F.T. N 132

Tcnicatura Superior en Anlisis y Desarrollo de Aplicaciones

REGISTROS DE ESTRUCTURA VARIABLE Hasta ahora, hemos visto tipos de registros cuya estructura de campos es fija; es decir, definido un tipo registro concreto, todas las constantes o variables de ese tipo, tienen exactamente el mismo nmero de campos. Llamaremos a este tipo de registros, desde ahora, registros de estructura fija. Tambin podemos construir tipos registro constitudos por un conjunto de campos comunes (parte fija) a todos los registros del tipo y un conjunto de campos variables (parte variable), dependiendo del valor de uno de los campos de la parte fija (campo selector). Llamaremos a estos registros, registros de estructura variable. Ejemplo: Supongamos que queremos definir un tipo registro capaz de contener los datos personales de un empleado: NOMBRE, DOMICILIO y ESTADO CIVIL, de tal forma que si el estado civil es 'Casado', debe contener adems, los campos NOMBRE DEL CONYUGE y NUMERO DE HIJOS, y si el estado civil es 'Soltero', debe contener el campo EDAD. TYPE EMPLEADO : RECORD NOMBRE : STRING [30]; DOMICI : STRING [30]; CASE EC : CHAR OF C' : (CONYUGE: STRING [30]; NUMHIJO : BYTE); 'S' : (EDAD : BYTE); END; VAR UNO,DOS : EMPLEADO; Como vemos, los campos variables van escritos entre parntesis y separados por punto y coma, a continuacin de cada posible valor del campo selector. Lgicamente, el tipo del campo selector debe ser de algn tipo ordinal admitido por la instruccin CASE. Si alguno de los valores del campo selector no implica la existencia de campos variables, se reflejar en la declaracin escribiendo ( ). Por ejemplo, si en el caso anterior el valor 'Soltero' del campo selector EC no implicase aadir ms campos, escribiramos: TYPE EMPLEADO : RECORD NOMBRE : STRING [30]; DOMICI : STRING [30]; CASE EC : CHAR OF 'C' : (CONYUGE : STRING [30]; NUMHIJO : BYTE); 'S' : ( ); END; Por ejemplo, la carga por teclado de la variable UNO, de tipo EMPLEADO, sera: WITH UNO DO BEGIN WRITE('Nombre completo: '); READLN (NOMBRE); WRITE('Domicilio: '); READLN (DOMICI); WRITE('Estado civil: '); READLN (EC); IF UPCASE(EC) = 'C' THEN BEGIN WRITE('Nombre del conyuge: '); READLN (CONYUGE); WRITE('Nmero de hijos : '); READLN (NUMHIJO); END ELSE WRITE('Edad: '); READLN (EDAD); END;

Porf. Silvina M.Gimnez

Pgina N 43

PROGRAMACION I

Turbo Pascal 7.0

ARCHIVOS (FILE) Muchos programas informticos generan grandes cantidades de datos, que pueden ser utilizados por los mismos programas o quiz por programas diferentes. Por este motivo, estos datos deben conservarse de forma permanente y, por lo tanto, deben almacenarse, de forma ordenada, en memoria externa, normalmente en disco flexible o disco duro. Se denomina Fichero (File en ingls) a un conjunto de elementos o datos, que se almacenan en memoria externa, de forma organizada. Llamaremos registros, en general, a los elementos de los archivos, y deben ser todos del mismo tipo dentro del fichero. En un dispositivo de almacenamiento puede haber diferentes archivos. Estos se localizan desde los programas por su especificador, que consta de la unidad de disco (drive), ruta de acceso, nombre de fichero y extensin. Este especificador debe ser diferente para todos los archivos almacenados en una unidad de disco. Por ejemplo, un fichero que contuviese los datos referentes a los libros de una biblioteca, almacenado en disco flexible, podra tener el siguiente especificador: A: \ TERCERA \ BIBLIO.DAT Drive Ruta Nombre.Ext. Si la nica forma de localizar un elemento concreto de un fichero es comenzar por el primero e ir recorriendo un elemento tras otro, hasta llegar al deseado, se dice que el fichero est organizado secuencialmente o, simplemente, que se trata de un fichero secuencial. Cuando el acceso a un registro se puede hacer de forma directa, sin tener que pasar por los registros que le preceden, se dice que es un fichero aleatorio o que tiene organizacin aleatoria. En Turbo Pascal existen tres clases de archivos: Archivos de Texto Archivos con Tipo Archivos sin Tipo

Archivos en Turbo Pascal

Archivos de Texto Los archivos de texto consisten en una serie de lneas que terminar con un retorno de carro y un salto (CR/LF) y que contienen caracteres, palabras y frases. La combinacin de CR/LF se conoce como delimitador. Un delimitador marca el final de un elemento, como puede ser un campo, un registro o el final de una lnea. Los identificadores de archivo de texto se declaran igual que los identificadores de las variables a excepcin de que se utiliza la palabra reservada Text. Por ejemplo: Program ArchivoTexto; Var ArchTxt : Text; Instrucciones para trabajar con archivos de textos: Assign(ArchTxt,Ayuda.dat); Esta orden asigna a la variable ArchTxt el archivo de disco Ayuda.dat. Produce un enlace entre el identificador de archivo y el archivo de disco. Reset(ArchTxt); Abre el archivo de disco y lo prepara para extraer informacin de l. La orden Reset coloca el puntero de archivo al principio del archivo. Cualquier intento de abrir con Reset un archivo que no exista da un error de E/S. Rewrite(ArchTxt); Crea un archivo con el nombre que se le ha asignado con la sentencia Assign, si existe se borra su contenido y el puntero de archivo se coloca en el principio.

Pgina N 44

Porf. Silvina M.Gimnez

I.S.F.T. N 132

Tcnicatura Superior en Anlisis y Desarrollo de Aplicaciones

Append(ArchTxt); Conserva el contenido de un archivo y coloca el puntero justo al final del archivo. Como resultado cualquier dato que se aada al archivo se coloca a continuacin de lo que ya haba. Cualquier intento de utilizar Append en un archivo que no exista se genera un error de E/S. Close(ArchTxt); Cierra el archivo una vez finalizado su uso. Adems asegura que todos los datos que hay en buffers temporales se almacenan en disco. La orden Close libera tambin el manejador de archivo. Un manejador de archivo es el mecanismo que el DOS proporciona a los programas para ayudarles a manejar operaciones sobre el archivo. Una vez que se cierra un archivo, no se puede volver a utilizar para entrada o salida hasta que se vuelva a abrir con Reset, Rewrite o Append. El enlace entre el identificador de archivo y el archivo de disco se mantiene incluso despus de que se haya cerrado el archivo. Por lo tanto, para reabrir un archivo no es necesario repetir la orden Assign. Readln(ArchTxt, cad); Lee los caracteres de la lnea actual del archivo y los coloca en la variable cad. Despus de haber ledo los caracteres, el puntero del archivo se salta cualquier carcter restante de la lnea y se traslada al principio de la siguiente lnea del archivo. Read(ArchTxt, cad); Este procedimiento despus de leer la cadena, coloca el puntero del archivo justo detrs del ltimo carcter ledo. Si Read encuentra un CR/LF que indique que ha llegado al final de lnea, detiene la lectura de caracteres y adems no avanza el puntero del archivo hasta que se utilice un procedimiento Readln. Eof(ArchTxt); Esta funcin detecta el final del archivo. Eof es una funcin booleana que toma el valor cierto solo cuando el puntero del archivo esta al final del archivo. Se utiliza para recorrer el archivo desde el principio hasta el final. La sentencia While Not Eof(ArchTxt) do indica que se ejecute el siguiente bloque de cdigo hasta que Eof devuelva el valor TRUE, es decir, hasta que se lea el ltimo carcter del archivo. Eoln(ArchTxt); La funcin Eoln comprueba el final de una lnea. El resultado de Eoln es cieto cuando se cumple alguna de estas dos condiciones: cuando el puntero del archivo encuentra un retorno de carro y cuando el puntero del archivo alcanza al final del archivo. Se puede utiliza Eoln para leer uno a uno los caracteres de una lnea. SeekEof(ArchTxt) y SeekEoln(ArchTxt) La funcin SeekEof devuelve TRUE al el final de un archivo y SeekEoln devuelve TRUE al final de una lnea. Estas funciones poseen la capacidad nica de saltarse los caracteres ASCII del 0 al 32 cuando buscan el fin de fichero o el fin de lnea. Este rango incluye los caracteres estndar de control as como el carcter blanco. Writeln(ArchTxt, cad) y Write(ArchTxt, cad); Estos procedimientos envan datos a un archivo de texto, despus de prepararlo con Rewrite o Append.

Porf. Silvina M.Gimnez

Pgina N 45

PROGRAMACION I

Turbo Pascal 7.0

Ejemplo de cdigo de un programa en Pascal en el cual se utiliza un archivo de texto:


PROGRAM ARCH_TEXTO; USES CRT; VAR arch:text; linea:string; op:byte; BEGIN ASSIGN(arch,'NOTICIAS.txt'); {Realiza un enlace con el archivo de disco} REPEAT CLRSCR; GOTOXY(20,5); WRITELN('1:CREA UN ARCHIVO DE TEXTO'); GOTOXY(20,7); WRITELN('2:MUESTRA UN ARCHIVO DE TEXTO'); GOTOXY(20,9); WRITELN('3:AGREGA AL FINAL DEL ARCHIVO DE TEXTO'); GOTOXY(20,11); WRITELN('4:SALE DEL PROGRAMA'); GOTOXY(20,13); WRITE('INGRESE UNA OPCION: '); REPEAT GOTOXY(39,13); READLN(op); UNTIL op IN[1..4]; CLRSCR; CASE op OF 1:BEGIN GOTOXY(20,5); WRITELN('CREA EL ARCHIVO DE TEXTO'); REWRITE(arch); {Crea un archivo y lo prepara para escribir} READln(linea); WRITELN(arch,linea); CLOSE(arch) END; 2:BEGIN GOTOXY(20,5); WRITELN('MUESTRA UN ARCHIVO DE TEXTO'); WRITELN; RESET(arch); {Abre un archivo para consulta} WHILE NOT EOF(arch) DO {Comprueba fin de archivo} BEGIN WHILE NOT EOLN(arch) DO {Comprueba fin de lnea} BEGIN READ(arch,linea); WRITELN(linea); END; READLN(arch); {Realiza el salto de carro a la lnea sige.} END; CLOSE(arch); WHILE NOT KEYPRESSED DO; END; 3:BEGIN GOTOXY(20,5); WRITELN('AGREGA AL FINAL DEL ARCHIVO DE TEXTO'); APPEND(arch); {Abre un archivo existente para escritura} READLN(linea); WRITELN(arch,linea); CLOSE(arch) END; END; UNTIL op=4; END.

Pgina N 46

Porf. Silvina M.Gimnez

I.S.F.T. N 132

Tcnicatura Superior en Anlisis y Desarrollo de Aplicaciones

Archivos con tipo Los archivos con tipo son archivos que contienen datos de un tipo en particular, como Integers, Reales, Records. Etc. Los archivos con tipo proporcionan una entrada y una salida ms rpida que las de los archivos de texto. A diferencia de los archivos de texto que no estn estructurados, estos archivos tienen una estructura rgida que depende de y est definida por el tipo de datos que albergan. Por ejemplo como declarar un identificador de archivo con tipo: Program ArchivoConTipo; Var Arch : File of Real; esta declaracin indica que ese archivo se va a utilizar para almacenar solamente nmeros Reales. Los archivos con tipo, debido a que no estn hechos de lneas como los archivos de textos, no pueden utilizar las sentencias Readln y Writeln. Los archivos con tipos estn organizados en registros, de forma que cada elemento de datos representa un registro. La longitud de un registro se corresponde con el nmero de byte necesarios para almacenar el tipo de datos.

En este ejemplo se muestra como se declara un archivo con tipo utilizado primero para la salida y utilizado despus para entrada.
PROGRAM ArchivoConTipo; USES CRT; CONST t=3; VAR arch:FILE OF REAL; n:REAL; op,i:BYTE; BEGIN ASSIGN(arch,'NUMEROS.DAT'); {Realiza un enlace con el archivo de disco} REPEAT CLRSCR; GOTOXY(20,5); WRITELN('1:CREA UN ARCHIVO'); GOTOXY(20,7); WRITELN('2:MUESTRA UN ARCHIVO'); GOTOXY(20,9); WRITELN('3:SALE DEL PROGRAMA'); GOTOXY(20,11); WRITE('INGRESE UNA OPCION: '); REPEAT GOTOXY(39,11); READLN(op); UNTIL op IN[1..3]; CLRSCR; CASE op OF 1:BEGIN GOTOXY(20,5); WRITELN('CREA UN ARCHIVO'); REWRITE(arch); {Crea un archivo} FOR i:=1 TO t DO BEGIN READ(n); WRITE(arch,n) END; {Escribe en un archivo} END; 2:BEGIN GOTOXY(20,5); WRITELN('MUESTRA UN ARCHIVO'); RESET(arch); {Abre un archivo para consulta} WHILE NOT EOF(arch) DO {Comprueba fin de archivo} BEGIN READ(arch,n); WRITELN(n:0:3); END; WHILE NOT KEYPRESSED DO; END; END; UNTIL op=3; END.

Porf. Silvina M.Gimnez

Pgina N 47

PROGRAMACION I

Turbo Pascal 7.0

Procedimiento para archivos con tipo y sin tipo: Los archivos con tipo y sin tipo se conocen como archivos de acceso aleatorio, lo que significa que se puede acceder a los registros de un archivo en orden no secuencial. Esto se realiza en dos etapas: primero se coloca el puntero del archivo en el registro correcto y despus se lee el registro. Seek(Arch, pos_registro); Read(Arch, registro); La sentencia Seek mueve el puntero hasta el principio del registro deseado y despus que se ejecuta Read, el puntero del archivo se traslada automticamente al principio del registro siguiente. Los archivos con Tipo de Turbo Pascal comienzan en el registro 0. Cualquier intento de leer ms all del final del archivo produce un error de E/S. Tambin se utilizan otras dos funciones estndar, FileSize y FilePos. FileSize devuelve el nmero de registros del archivo; FilePos devuelve la posicin actual del puntero del archivo. Una caracterstica potente de los archivos de acceso aleatorio es la capacidad de actualizar registros en cualquier punto del archivo. Se utiliza el procedimiento Write sin una sentencia Rewrite anterior. La orden Rewrite slo es necesaria para crear un archivo. Una vez que el archivo existe, la orden Reset permite tanto leer como escribir en el archivo. El procedimiento Rename se utiliza para renombrar un archivo, primero es necesario asignarlo a una variable de tipo archivo y despus se debe llamar al procedimiento Rename especificando el nuevo nombre: Assign(Arch, ARCHIVO.ANT); Rename(Arch, ARCHIVO.NUE); El procedimiento Erase se utiliza para borrar un archivo, primero es necesario asignarlo a una variable de tipo archivo y despus se debe llamar al procedimiento Erase para borrarlo: Assign(Arch, ARCHIVO.ANT); Erase(Arch);

Pgina N 48

Porf. Silvina M.Gimnez

I.S.F.T. N 132

Tcnicatura Superior en Anlisis y Desarrollo de Aplicaciones

FUNCIONES Y PROCEDIMIENTOS DE TURBO PASCAL


Funciones Aritmticas Todas las funciones que aqu aparecen reciben un parmetro, que denotaremos X, y devuelven el resultado de las funciones matemticas ms usuales.
IDENTIFICADOR PARAMETRO RESULTADO SIGNIFICADO

ABS ARCTAN COS EXP FRAC INT LN SIN SQR SQRT

Real o Entero Real o Entero Real o Entero Real o Entero Real o Entero Real o Entero Real o Entero Real o Entero Real o Entero Real o Entero

Real o Entero Real Real Real Real Real Real Real Real o Entero Real

Valor Absoluto Arcotangente Coseno Exponencial Parte Decimal Parte Entera Logaritmo Neperiano Seno Cuadrado Raz Cuadrada

ABS (X), donde X puede ser Real o Entero, nos devuelve el valor absoluto de X, en el mismo tipo de dato que el parmetro; por ejemplo: ABS (-6.99) = 6.99 ABS (9.9) = 9.9 ABS (-2723) = 2723 ABS (203) = 203 ARCTAN (X), nos devuelve el ngulo expresado en radianes (recurdese que 360 = 2 radianes) cuya ngente trigonomtrica es X. El resultado es siempre Real. Por ejemplo: ARCTAN (1) = PI/4 { 45 } ARCTAN (2.0) = 1.1071487178E+00 { 6326'5.8" } COS (X), nos da el coseno de X (ngulo que debe venir expresado en radianes). El resultado es de tipo Real. Por ejemplo: COS (0) = 1.0 COS (PI/2) = 0.0 COS (PI) = -1.0 EXP (X), devuelve la exponencial de X; es decir, el valor Real e elevado a X, donde e es la base de los logaritmos neperianos o naturales (e = 2.7182818284). As: EXP (0) = 1.0 EXP (1) = e FRAC (X), nos da la parte fraccional de X, es decir: FRAC (X) = X - INT (X): FRAC (-8) = 0.0 FRAC (2.000) = 0.000 FRAC (-123.456) = -0.456 INT (X), nos da la parte entera de X. El resultado es Real. Por ejemplo: INT (-8) = -8.0 INT (2.000) = 2.000 INT (-123.456) = -123.000 LN (X), nos devuelve en tipo Real, el logaritmo neperiano de X. Por ejemplo: LN (1) = 0.0 LN (1.0) = 0.0 SIN (X), nos da el seno de X (ngulo que debe venir expresado en radianes). El resultado es de tipo Real. Por ejemplo: SIN (0) = 0.0 SIN (PI/2) = 1.0 SIN (PI) = 0.0 SQR (X), nos devuelve el cuadrado de X, es decir, X*X. El resultado es del mismo tipo que el argumento; es decir si X es entero, SQR(X) es entero; si X es real, SQR(X) es real. Por ejemplo: SQR (-2.0) = 4.0 SQR (69) = 4761 SQRT (X), retorna la raz cuadrada de X. El resultado es Real. Por ejemplo: SQRT (169.0) = 13.0 SQRT (169) = 13.0

Funciones de Transferencia
Porf. Silvina M.Gimnez Pgina N 49

PROGRAMACION I

Turbo Pascal 7.0

Se denominan Funciones de Transferencia aquellas que aplicadas a un parmetro de un cierto tipo, devuelven un valor de un tipo diferente. Todas las que hay en la Unidad System son:
IDENTIFICADOR PARAMETRO RESULTADO SIGNIFICADO

CHR ORD ROUND TRUNC

BYTE Tipo Ordinal REAL REAL

CHAR LONGINT LONGINT LONGINT

Carcter Asociado Ordinal Asociado Redondear Parmetro Truncar Parmetro

CHR (N), donde N es un dato de tipo BYTE, retorna el carcter cuyo valor ASCII asociado es N. Por ejemplo: CHR (27 + 9) = $ CHR (64) = @ CHR (165) = ORD (O), donde O es de cualquier tipo ordinal, nos da el nmero ordinal asociado al valor encerrado entre parntesis. Por ejemplo, si tenemos definido el tipo GALICIA = (CORUA, LUGO, ORENSE, PONTEVEDRA) en un programa, tendremos: ORD (LUGO) = 1 ORD (PONTEVEDRA) = 3 ORD ('@') = 64 ORD (CHR(123)) = 123 ROUND (R), donde R es un dato de tipo REAL, retorna un valor de tipo LONGINT, que es el valor de R redondeado al nmero entero ms cercano. Si R est exactamente en la mitad de dos nmeros enteros, el resultado es el nmero de mayor valor absoluto. Si el redondeo de R no est dentro del rango LONGINT se producir un error de ejecucin. Por ejemplo: ROUND (27.76) = 28 ROUND (-7.55) = -8 ROUND (1.627328E+5) = 162733 ROUND (7.55) = 8

TRUNC (R), donde R es un valor de tipo REAL, devuelve un valor de tipo LONGINT que es el valor de R truncado por el punto decimal. Si el trunque de R no est dentro del rango LONGINT, se producir un error de ejecucin. Por ejemplo: TRUNC (27.76) = 27 TRUNC (1.627328E+5) = 162732 TRUNC (-7.55) = -7 TRUNC (1.999999E12) = Error Procedimientos Ordinales Estos procedimientos modifican el valor de una variable de cualquier tipo ordinal. Los dos que existen en la Unidad System son:
IDENTIFICADOR SIGNIFICADO

DEC INC

Decrementa una variable Incrementa una variable

DEC (O,E), donde O es una variable de cualquier tipo ordinal y E es cualquier valor de tipo entero, produce el decremento de O en E unidades; es decir, DEC(O,E) corresponde a O:=O-E. Si el valor E no se especifica el decremento por defecto es en una unidad; i.e., DEC(O) correspondera a O:=O-1; Ejemplo de utilizacin : En el siguiente programa se decrementan con DEC variables de los tipos INTEGER, CHAR y BOOLEAN: PROGRAM LEON; VAR I:INTEGER; C:CHAR; B:BOOLEAN; BEGIN WRITELN('El programa carga las variables.'); I:=100; C:='L'; B:=TRUE; WRITELN('I = ',I); WRITELN('C = ',C); WRITELN('B = ',B); WRITELN('Modificamos las variables con DEC'); DEC(I); WRITE('I = ',I); DEC(C,4); WRITE('C = ',C); DEC(B); WRITE('B = ',B); END.
Pgina N 50 Porf. Silvina M.Gimnez

I.S.F.T. N 132

Tcnicatura Superior en Anlisis y Desarrollo de Aplicaciones

Obtendremos en pantalla despus de la decrementacin: I = 99 C=H B = FALSE INC (O,E), donde O es una variable de cualquier tipo ordinal y E es cualquier valor de tipo entero, produce el incremento de O en E unidades; es decir, INC(O,E) corresponde a O:=O+E. Si el valor E no se especifica el incremento por defecto es en una unidad; i.e., INC(O) correspondera a O:=O+1; Ejemplo de utilizacin: PROGRAM ZAMORA; VAR I:INTEGER; C:CHAR; B:BOOLEAN; BEGIN WRITELN('El programa carga las variables.'); I:=100; C:='L'; B:=FALSE; WRITELN('I = ',I); WRITELN('C = ',C); WRITELN('B = ',B); WRITELN('Modificamos las variables con INC'); INC(I); WRITE('I = ',I); INC(C,4); WRITE('C = ',C); INC(B); WRITE('B = ',B); END. Obtendremos en pantalla despus de la incrementacin: I = 101 C=P B = TRUE Funciones Ordinales Estas funciones se aplican a un parmetro de algn tipo ordinal. Devuelven al programa principal un valor del mismo o distinto tipo. Son las siguientes:
IDENTIFICADOR PARAMETRO RESULTADO SIGNIFICADO

ODD PRED SUCC

Tipo Entero Tipo Ordinal Tipo Ordinal

BOOLEAN Mismo Tipo Mismo Tipo

Prueba de Paridad Valor Precedente Valor Sucesor

ODD (E), donde E es un dato de cualquier tipo entero, nos devuelve el valor booleano TRUE si E es un nmero impar (odd) y FALSE en caso contrario. Ejemplo: ODD (MAXINT) = FALSE ODD(-MAXINT+1) = TRUE

PRED (O), donde O es un valor de cualquier tipo ordinal, devuelve un valor del mismo tipo ordinal: el predecesor de O. Por ejemplo, definido el tipo GALICIA: PRED (23) = 22 PRED (TRUE) = FALSE PRED ('a') = 'Z' PRED (LUGO) = CORUA

SUCC (O), donde O es un valor de cualquier tipo ordinal, devuelve un valor del mismo tipo ordinal: el sucesor (valor siguiente) de O. Por ejemplo: SUCC (23) = 24 SUCC ('a') = 'b'

Funciones Varias
IDENTIFICADOR PARAMETRO RESULTADO SIGNIFICADO

RANDOM SIZEOF UPCASE

Ninguno o WORD Variable o Tipo CHAR

REAL o WORD WORD CHAR

Generador Aleatorio Tamao del Parmetro Cambio a Maysculas

Porf. Silvina M.Gimnez

Pgina N 51

PROGRAMACION I

Turbo Pascal 7.0

RANDOM o RANDOM (W), es una funcin que puede recibir o no parmetro. Si no recibe argumento, el resultado es un nmero REAL aleatorio dentro del rango: 0 <= X < 1 Si recibe argumento, W, que debe ser un nmero entero positivo, el resultado es un nmero aleatorio de tipo WORD dentro del rango: 0 <= X < W Si el valor de W es igual a 0, el resultado de la funcin es 0. Ejemplo: PROGRAM SALAMANCA; BEGIN WRITELN('Primero "aleatorizo" la semilla'); RANDOMIZE; WRITE('Ahora obtengo un nmero real aleatorio: '); WRITELN(RANDOM); WRITELN('Ahora cargo la semilla con un valor concreto'); RANDSEED:=12; WRITE('Por ltimo obtengo un nmero entero aleatorio: '); WRITELN(RANDOM(100)); END. SIZEOF (Variable o Tipo), admite como parmetro el identificador de cualquier variable o de cualquier tipo de dato. El resultado, de tipo WORD, es el nmero de bytes de memoria que ocupa el parmetro. Por ejemplo, si hemos declarado las variables A de tipo BYTE y B de tipo BOOLEAN as como el tipo de dato abstracto GALICIA, podramos obtener que: SIZEOF (INTEGER) = 2 SIZEOF (GALICIA) = 1 SIZEOF (A) = 1 SIZEOF (B) = 1 SIZEOF (REAL) =6 SIZEOF (LONGINT) = 4

UPCASE (C), donde C es un dato de tipo carcter, retorna otro dato de tipo carcter: el argumento en maysculas. Si el parmetro no se encuentra en el rango 'a'..'z', no se ver afectado por la funcin. Por ejemplo: UPCASE ('r') = 'R' UPCASE ('T') = 'T' UPCASE(':') = ':' Procedimientos para el Tipo STRING IDENTIFICADOR DELETE INSERT STR VAL SIGNIFICADO - Borra en una cadena una subcadena - Inserta en una cadena una subcadena - Convierte un valor numrico en una cadena - Convierte una cadena en su representacin numrica

DELETE (S,P,N), donde S es una variable de tipo STRING y P y N son cualesquiera expresiones de tipo entero, elimina un Nmero N de caracteres de la Cadena S, a partir de la Posicin P. Por ejemplo, si S:='Si tu me dices ven, lo dejo todo.'; entonces: DELETE (S,10,11); convierte el contenido de S en: 'Si tu me lo dejo todo' Si P es mayor que la longitud actual de S, no se elimina ningn carcter. Ejemplo: VAR S:STRING[50]; P:WORD; N:BYTE; BEGIN S:='Disfruta hoy. Es ms tarde de lo que crees.'; P:=45; N:=15; DELETE (S,P,N); { No hace nada }

Pgina N 52

Porf. Silvina M.Gimnez

I.S.F.T. N 132

Tcnicatura Superior en Anlisis y Desarrollo de Aplicaciones

Si N es mayor que la longitud de S a partir de P, se eliminan todos los caracteres de S a partir de P. Por ejemplo, con las variables anteriores: S:=Tesis es una pelcula de Amenabar'; DELETE (S,12,MAXINT); { Resulta 'Tesis es una ' } INSERT (SO,SD,P), donde SO es una expresin de tipo STRING, SD es una variable de tipo STRING y P es una expresin entera, inserta la cadena SO (String Origen) en la cadena SD (String Destino) a partir de la posicin P. Si el resultado es de longitud superior a la longitud mxima de SD, se trunca a partir de esa longitud. Ejemplo: SD:='Fumar perjudica la salud'; INSERT ('SERIAMENTE',SD,17); WRITE (SD); { Resulta 'Fumar perjudica SERIAMENTE la salud' } STR (X,S), donde X es una expresin entera o real y S es una variable de tipo STRING, almacena en S, como una cadena alfanumrica, el valor X; es decir, convierte un valor numrico a su representacin STRING. Ejemplo: VAR I:INTEGER; R:REAL; S:STRING[15]; BEGIN I:=-123; R:=17.24; STR(I,S); { S se carga con '-123' } STR(R,S); { R se carga con '17.24' } VAL (S,X,C), donde S es una expresin de tipo STRING, X es una variable de tipo entero o real y C es una variable de tipo INTEGER, convierte S a su representacin numrica y almacena el resultado en X; si algn carcter de S hace imposible la transformacin, el nmero de orden del primer carcter culpable se almacena en C; en caso contrario C se carga con el valor 0. Observemos el siguiente ejemplo: VAR S:STRING[25]; X:BYTE; C:INTEGER; BEGIN X:=0; C:=0; S:='007 Licencia para matar'; DELETE(S,4,50); VAL(S,X,C); WRITE(S,' ',X,' ',C); presentara en pantalla: 007 7 0 Y sin embargo la secuencia: X:=0; C:=0; S:='007 Licencia para matar'; VAL(S,X,C); WRITE(S,' ',X,' ',C); dara: 007 Licencia para matar 0 4 es decir, no se realiza la conversin y en C aparece un 4, ya que el primer carcter que impide la conversin es el espacio en blanco que ocupa la cuarta posicin.

Porf. Silvina M.Gimnez

Pgina N 53

PROGRAMACION I

Turbo Pascal 7.0

Funciones para el Tipo STRING IDENTIFICADOR CONCAT COPY LENGTH POS PARAMETROS Strings Varios String Varios RESULTADO String String Byte Byte SIGNIFICADO - Concatena un conjunto de String - Extrae subcadena de una cadena - Longitud actual de un String - Busca una subcadena en una cadena

CONCAT (S1,S2,..,SN), donde S1,S2,..,SN son cualesquiera expresiones de tipo String, retorna la concatenacin de todos los strings pasados como parmetros. Si el resultado excede de la longitud mxima de la variable String receptora, se trunca a esta longitud; si el resultado se enva a pantalla y excede de 255 caracteres, slo se presentan los 255 primeros caracteres. Por ejemplo: CONCAT ('El',' hombre ','invisible.') = 'El hombre invisible.' Se obtiene el mismo resultado utilizando el operador de concatenacin (+). COPY (S,P,N), donde S es una expresin de tipo String y P y N son expresiones de tipo entero, devuelve un substring de S, de N caracteres, el primero de los cuales ocupa la posicin P en S. Por ejemplo: COPY ('FILOSOFIA',5,5) = 'SOFIA' Si P es mayor que la longitud actual de S, se obtiene una cadena vacia. Si N es mayor que el nmero de caracteres de S a partir de la posicin P, se obtienen los caracteres de S hasta el final de la cadena. Por ejemplo: COPY ('FILOSOFIA',10,5) = '' COPY ('FILOSOFIA',5,25) = 'SOFIA' LENGTH (S), donde S es una expresin de tipo String, devuelve la longitud actual de S. Por ejemplo: LENGTH ('FILOSOFIA') = 9 LENGTH (COPY ('FILOSOFIA',10,5)) = 0 POS (SB,S), donde SB y S son expresiones de tipo String, devuelve la posicin (tipo byte) de la primera aparicin de la subcadena SB en la cadena S. Si no aparece SB en S la funcin devuelve el valor 0. Por ejemplo: POS ('LOSO','FILOSOFIA') = 3 POS ('MO','FILOSOFIA') = 0

Pgina N 54

Porf. Silvina M.Gimnez

I.S.F.T. N 132

Tcnicatura Superior en Anlisis y Desarrollo de Aplicaciones

USO DE LAS COORDENADAS EN PASCAL El monitor de la computadora a igual que un mapa tiene posiciones que se definen con coordenadas. A las coordenadas de la pantalla se les hace referencia normalmente como x e y, donde x es la posicin de la columna y donde y la posicin de la fila. Para mover el cursor a cualquier posicin de coordenadas del monitor voy a usar la orden: Gotoxy (x,y) PROGRAM VENTANA; USES CRT; VAR x,y: byte; BEGIN CLRSCR; GOTOXY(2,2); WRITE(#201); FOR x:=3 TO 78 DO BEGIN GOTOXY(x,2); WRITE(#205); END; GOTOXY(X,2); WRITE(#187); FOR y:=3 TO 23 DO BEGIN GOTOXY(2,y); WRITE(#186); GOTOXY(78,y); WRITE(#186); END; CONTROL DEL COLOR CON TURBO PASCAL Color de fondo: TextColor , lo cual puede usar 16 colores. Color de primer plano: TextBackground, solo puede usar los colores oscuros. Colores claros Colores oscuros 8: Gris oscuro 0: Negro 9: Azul claro 1: Azul 10: Verde claro 2: Verde 11: Cin claro 3: Cin 12: Rojo claro 4: Rojo 13: Magenta claro 5: Magenta 14: Amarillo 6: Marrn 15: Blanco 7: Gris claro Cuando se invocan estas ordenes, los nuevos colores surten efecto con los consiguientes caracteres que se muestren, los caracteres que estn en pantalla mantienen sus colores originales. PROGRAM COLORES; USES CRT; VAR i: byte; BEGIN CLRSCR; FOR i:=0 TO 7 DO BEGIN TEXTCOLOR(i+8); TEXTBACKGROUND(i); GOTOXY(18,8+i); WRITELN('HOLA SOMOS ESTUDIANTES DE PROGRAMACION'); READKEY END; END.

Porf. Silvina M.Gimnez

Pgina N 55

PROGRAMACION I

Turbo Pascal 7.0

IMPLEMENTACION DE UNA UNIT

UNIT TIME; INTERFACE PROCEDURE ACTIVARRELOJ; PROCEDURE PARARRELOJ; IMPLEMENTATION USES CRT, DOS; VAR h,m,s,s100: word; parada, arranque: REAL; PROCEDURE ACTIVARRELOJ; BEGIN GETTIME(h,m,s,s100); arranque:=(h * 3600)+ (m * 60) + s + (s100 /100); END; PROCEDURE PARARRELOJ; BEGIN GETTIME(h,m,s,s100); parada:=(h * 3600)+ (m * 60) + s + (s100 /100); WRITELN('TIEMPO TRANSCURRIDO ',parada-arranque:0:16); END;

END.

Pgina N 56

Porf. Silvina M.Gimnez

Você também pode gostar