tutorial turbo pascal (completo).pdf

61
Tutorial Básico Pascal

Upload: juliajb

Post on 20-Oct-2015

164 views

Category:

Documents


11 download

TRANSCRIPT

  • Tutorial Bsico Pascal

  • 1. Introduccin

    Pascal y Turbo Pascal

    Pascal es un lenguaje de alto nivel y de propsito general (es aplicable a un gran nmero de aplicaciones diversas) desarrollado por el profesor suizo Niklaus Wirth como un lenguaje para ensear la programacin con un mtodo disciplinado y sistemtico. Wirth trat de eliminar las inconsistencias de otros lenguajes de programacin de su poca y adems que sirviera para ensear las tcnicas de programacin a sus alumnos.

    Una versin preliminar del lenguaje apareci en 1968 y a finales de 1970 apareci el primero compilador totalmente completo.

    Las diferentes versiones ofrecan interpretaciones ligeramente diferentes que impedan la compatibilidad entre ellas. Por estas razones, mediante diferentes proyectos, se logr la estandarizacin bajo las normas ISO (International Standards Organization), ANSI (American National Standards Institute) y IEEE (Institute of Electrical and Electronics Engineers). Sin embargo, las versiones ms populares conocidas como UCSD (Construida por Regents) y Turbo Pascal (de Borland) no estn estandarizadas. Esta ltima es la ms conocida y la ms utilizada.

    Caractersticas principales

    - Excelente para el aprendizaje de la informacin. - Lenguaje de propsito general. - Lenguaje procedimental (orientado a rdenes). - Lenguaje estructurado (Permite while, for y repeat y no necesita el goto). - Lenguaje recursivo (Puede llamarse a s mismo una funcin o procedimiento). - Riqueza en los tipos de datos.

    Turbo Pascal

    Fue lanzado por la firma Borland International en 1983 a modo experimental. Fue todo un xito, pues adems de funcionar, compilaba y corra los programas ms rpido.

    Las versiones han evolucionado de la 1.0 hasta la 7.0 que cuenta con una biblioteca de objetos denominada Turbo Visin.

  • 2. Programacin descendente (Top - Down) La programacin descendente o "Top - Down" es el proceso mediante el cual un problema se descompone en una serie de niveles o pasos sucesivos de refinamiento (stepwise). La metodologa descendente consiste en efectuar una relacin entre las sucesivas etapas de estructuracin de modo que exista una relacin entre ellas mediante entradas y salidas de informacin. El problema se descompone en varias estructuras jerrquicas, de forma que se pueda considerar cada estructura desde dos puntos de vista: qu hace? y cmo lo hace?

    Las estructuras desde los dos puntos de vista se representan de la siguiente forma:

    El diseo descendente se representa as:

    3. Programacin modular La programacin modular es uno de los mtodos de diseo ms flexibles y potentes para mejorar la productividad de un programa. En programacin modular el programa se divide en mdulos (partes independientes), cada una de las cuales ejecuta una nica funcin o actividad y se codifican independientemente de otros mdulos. Cada uno de estos mdulos se analiza, codifica y pone a punto por separado.

    Cada programa contiene un mdulo denominado programa principal que controla todo lo que sucede; se transfiere el control a los submdulos o subprogramas. Estos ejecutan su funcin y una vez completada su tarea, devuelven el control al mdulo principal.

    Cada submdulo se puede descomponer en otros submdulos, dependiendo de la complejidad de la tarea a realizar y la subdivisin contina hasta que cada mdulo tenga una sola tarea para ejecutar..

    Un submdulo puede realizar tareas de distinta naturaleza como: entrada, salida, manipulacin de datos, control de otros mdulos o una combinacin de stos. Un mdulo puede transferir temporalmente (bifurcar) el control a otro mdulo; sin embargo, cada mdulo debe eventualmente devolver el control al mdulo del cual recibi originalmente el control.

  • 4. Conceptos bsicos de Pascal: datos y tipos de datos Concepto de dato

    Los diferentes objetos de informacin con los que trabaja un programa en Pascal se conocen como datos. Todos los datos tienen un tipo asociado con ellos. Pueden ser de tipo carcter, entero, un nmero real, etc.

    La asignacin de tipos a los datos persigue dos objetivos:

    - Detectar errores de operaciones en programas.

    - Determinar cmo ejecutar las operaciones.

    Clasificacin de los tipos de datos

    Tipos de datos enteros

    Turbo Pascal dispone de cinco tipos predefinidos (no necesitan una nueva definicin de parte del programador pues cada tipo tiene un lmite) que permiten representar valores enteros.

    Si se asigna un valor fuera del lmite de cada tipo, producir un mensaje de error:

    Error 76: Constant out of range

    Byte: Son los datos comprendidos entre 0 y 255. Integer: Enteros que estn entre -32.768 y 32.767. Longint: A partir de la versin 4.0 se ampla el rango de los enteros. Van desde: -2.147,483.647 hasta 2.147,483.647. Shortint: Son datos enteros comprendidos entre -128 y 127. Son utilizados cuando se debe trabajar con valores pequeos y se desea economizar memoria. Ocupan 1 byte de memoria. Word: Se utiliza cuando se desea representar nicamente valores positivos. Ocupan dos bytes de memoria y van de 0 a 65.535.

  • 5. Identificadores y expresiones Identificadores

    Representan los objetos de un programa (constantes, variables, tipos de datos, procedimientos, funciones, unidades, programas y campos de registros). Un identificador es una secuencia de caracteres de cualquier longitud, pero el lmite significativo es de 63 caracteres.

    Existen tres reglas bsicas para nombrar los identificadores:

    Debe comenzar con una letra (A a Z, maysculas o minsculas). No puede contener blancos.

    Los caracteres permitidos despus del primer carcter son letras, dgitos y el carcter de subrayado ( _ ).

    No se puede utilizar una palabra reservada como identificador. Las palabras reservadas son aquellos trminos que tienen un significado especial para Pascal y no se pueden utilizar para otros propsitos.

    Algunas palabras reservadas son: absolute, and, array, begin, const, div, do, downto, else, if, in,label,mod,not,of, packed, procedure, record, set, shr, then,to, unit, uses, var, while, xor.

    Expresiones

    Una expresin es un conjunto de datos o funciones unidos por operadores aritmticos.

    Pascal soporta los siguientes operadores:

    Reglas para la evaluacin de expresiones

    Todas las subexpresiones entre parntesis se evalan primero. Cuando existan subexpresiones con parntesis anidados se evalan de dentro hacia fuera. El parntesis ms interno se evala primero.

    Prioridad de operaciones. Dentro de una misma expresin o subexpresin, los operadores se evalan en el siguiente orden:

    1 *,/, div, mod

    2 +, -

    Regla asociativa izquierda. Los operadores en una misma expresin o subexpresin con igual nivel de prioridad ( *, / ) se evalan de izquierda a derecha.

  • Ejemplos:

    a. 4 + 2 * 5 (primero la multiplicacin, luego la suma)

    4 + 10

    14

    b. 23 * 2 div 5 (de izquierda a derecha, primero * y luego div)

    46 div 5

    9

    Prctica

    Evale las siguientes expresiones:

    8 * 5 * (7+2 - (4 + 4)) R/ 40

    (1 + 6) * 5 div 7 mod 4 + 1 R/ 2

    3 + 4 - 14 /2 R/ 0

    2 * (2 + 6 * 4) R/ 52

    Especifique el orden de desarrollo de la siguiente operacin:

    a - (b + c div d) + e * f

    6. Concepto de sentencia Las sentencias son pasos que describen las acciones algortmicas que pueden ser ejecutadas. Se clasifican segn su operatividad en ejecutables y no ejecutables. Las ejecutables son aquellas que especifican operaciones de clculos aritmticos y entradas/salidas de datos y no ejecutables son las que no realizan ninguna accin concreta, sino que ayudan a la legibilidad el programa sin afectar su ejecucin. Las sentencias ejecutables son aquellas que aparecen en el cuerpo del programa luego de la palabra begin.

    Estructura de un programa en Pascal

    Program Nombre;

    Uses

    Crt,Printer;

    Var

    Cedula: String[16];

    Apellido1: String[15];

    Apellido2: String[15];

  • Nombre: String[20];

    Edad: Integer; Begin

    Clrscr;

    Write (`Digite la cdula: `);

    Readln (Cedula);

    Write (`Digite el primer apellido: );

    Readln (Apellido1);

    Write (`Digite el segundo apellido: `);

    Readln (Apellido2);

    Write (`Digite el nombre: `);

    Readln (Nombre);

    Write (`Digite la edad: `);

    Readln (Edad);

    Write (`El empleado se llama `,Apellido1, `,Apellido2, `,Nombre, `,y tiene `,Edad,

    ` `,aos);

    End.

    7. Sentencias simples y sentencias compuestas 2.3.1Sentencias simples

    Es una sentencia que no contiene ninguna otra sentencia. Se clasifican en: asignacin y procedure.

    2.3.1.1 Sentencia de asignacin

    La sentencia de asignacin se utiliza para asignar (almacenar) valores o variables. La asignacin es una operacin que sita un valor determinado en una posicin de memoria. La operacin de asignacin puede representar en un pseudocdigo con el smbolo `?, para denotar que el valor situado a su derecha se almacena en la variable a la izquierda.

    Formato

    Variable ? expresin

    En Pascal el operador `? se sustituye por el smbolo :=, que se denomina carcter de asignacin.

    Ejemplos:

  • A := 16 (Se le asigna 16 a la variable A)

    Inicial := `LJ (Se asigna el texto LJ a la variable Inicial)

    N1 := N2 (El valor de la variable N1 se cambia por el valor de la variable N2).

    N1 := N1 + 5 (El valor de N1 se modifica incrementndose en 5). 2.3.1.2 Sentencia procedure

    Un procedure o procedimiento es un subprograma que realiza una tarea especfica. Estos son ejecutados cuando Pascal encuentra el nombre del procedimiento. Deben estar declarados antes de ser referenciados dentro del programa.

    Ejemplo:

    Program Calcula;

    Var

    Valor1: Integer;

    Valor2: Integer;

    Procedure Elmayor;

    Begin

    If Valor1> Valor2 then

    Begin

    Write (`El mayor es: `,Valor1);

    Readln

    End

    Else

    If Valor1< Valor2 then

    Begin

    Write (`El mayor es: `,Valor2);

    Readln

    End

    Else

    Begin

  • Write (`Son iguales);

    Readln

    End

    End;

    Begin

    Write (`Digite un valor: `);

    Readln (Valor1);

    Write (`Digite otro valor: `);

    Readln (Valor2);

    Elmayor

    End.

    2.3.2 Sentencias compuestas

    En numerosas ocasiones, en vez de realizar slo una accin, cuando se cumpla o no se cumpla una determinada condicin, se deben realizar diferentes acciones. Esto es posible gracias a las sentencias compuestas. Una sentencia compuesta es un conjunto de sentencias separadas por puntos y comas y encerradas entre las palabras begin y end.

    Ejemplo:

    Begin

    Readln (Numero);

    Numero:= Numero+1;

    Write (`El nmero es `,Numero)

    End.

    8. Entradas y salidas de informacin

    2.4.1 Concepto de entrada

    Una entrada de datos o valores es equivalente al trmino lectura. La entrada o lectura de datos se refiere a la recepcin de valores provenientes de un dispositivo perifrico de entrada como un teclado, una unidad de disco, un escner, etc. y su direccionamiento hacia zonas de memoria de la computadora.

    Es la entrada la operacin que nos permite proporcionar datos durante la ejecucin de un programa. Los datos que se pueden leer son: enteros, reales, caracteres o cadenas. NO se puede leer un boolean por tener valores preestablecidos (V o F).

  • Los datos estructurados como arrays, registros o conjuntos, no se pueden leer globalmente y se suele recurrir a disear procedimientos especficos.

    Los procedimientos de lectura son: Read y ReadLn. Estos esperan a que se pulse la tecla ENTER antes de asignar un valor a la variable.

    2.4.1.1 Ejemplo

    Program Suma;

    Uses

    Crt;

    Var i,j : integer; Begin

    Clrscr;

    Write (`Introduzca el primer nmero: `);

    Readln (i);

    Write (`Introduzca el segundo nmero: `);

    Readln (j);

    WriteLn (`La suma es `,i+j);

    End.

    2.4.2 Concepto de salida

    Los programas para ser tiles deben proporcionar informacin de salida (resultados). Esta salida toma informacin de la memoria y la sita o almacena en: la pantalla, en un dispositivo de almacenamiento (disco duro o flexible), o en un puerto de E/S (puertos serie para comunicaciones o impresoras). El procedimiento que se utiliza para visualizar o escribir la informacin es el Write o el WriteLn. Tanto el Write como el WriteLn cumplen la misma funcin, o sea desplegar informacin. La diferencia es que el WriteLn despliega la informacin y salta a la lnea siguiente.

    2.4.2.1 Ejemplo

    Program Resultado;

    Uses

    Crt;

    Var Nombre : String[30]; Begin

    Clrscr;

    Nombre := `Pedro Picapiedra;

    WriteLn (`Nuestro personaje se llama `,Nombre);

  • End.

    9. Prctica 1. Hacer un programa que lea su cdula, su nombre y su telfono y los imprima en pantalla. 2. Hacer un programa que lea tres nmeros, que calcule el mayor y el menor de esos nmeros y los imprima. 3. Hacer un programa que lea un cdigo de producto, su descripcin, su precio unitario, las unidades compradas y el precio total a pagar e imprima el resultado. 4. Hacer un programa que lea dos nmeros y que imprima el resultado de su suma, su resta, su multiplicacin y su divisin. 5. Hacer un programa que lea la cdula de un trabajador, su nombre y su salario. Debe calcular el 8% correspondiente al rebajo de la CCSS y el 1% del Banco Popular, el total de deducciones y el salario neto. Al final debe imprimir lo siguiente: "Estimado empleado: (nombre). En este mes su salario se desglosa as:

    Salario bruto: (Salario) 8% CCSS: (CCSS) 1% Banco Popular: (BP) Total de deducciones: (Totded) Salario Neto: (Salneto)

    6. Escriba un programa que lea tres nmeros para tres variables a, b y c. Con base en los valores almacenados, calcule la expresin ((a+7*c)/(b+2-a)+2*b).

    10. Estructuras de control

    3.1.1 Expresiones lgicas

    Son acciones alternativas o decisiones que determinan el cumplimiento o no de una determinada condicin.

    Por ejemplo, supongamos que se desea disear un programa para calcular el salario semanal de un empleado que trabaja por horas; la empresa paga un 1.5% adicional por todas las horas trabajadas superiores a 40. El algoritmo de clculo de pago sera el siguiente:

    Leer HorasTrabajadas

    Si HorasTrabajadas>40 entonces

    Adicional ?(HorasTrabajadas-40)*SalarioHora*1.5%

    Si no

    Adicional ?(HorasTrabajadas * SalarioHora)

    Fin_Si

    3.1.2 Operadores de relacin

    Se utilizan para expresar condiciones y describen una relacin entre dos valores.

  • Es importante recordar aqu el orden de evaluacin de expresiones aritmticas:

    3.1.3 Operadores lgicos

    Las expresiones lgicas pueden combinarse para formar expresiones ms complejas. Esto se logra utilizando los operadores lgicos: and, or y not.

    La operacin and (y) combina dos condiciones simples y produce un resultado verdadero s y slo s los dos operandos de la expresin son verdaderos.

    La operacin or (o) es verdadera si uno de los dos operandos es verdadero.

    La operacin not (no) acta sobre una sola condicin simple u operando y simplemente niega o invierte su valor.

    Esto se puede demostrar ms fcilmente mediante las tabla de verdad para cada operador.

    3.1.3.1 Operador and

    3.1.3.2 Operador or

    3.1.3.3 Operador not

    11. Seleccin de acciones alternativas 3.2.1 La sentencia IF

    Puesto que las expresiones lgicas toman el valor verdadero o falso, se necesita una sentencia de control que indique a la computadora que ejecute una sentencia en caso de que la expresin sea verdadera y otra sentencia en el caso de que sea falsa. Esto se logra mediante la sentencia IF. El siguiente ejemplo describe su utilidad.

  • Ejemplo:

    Program Numeros;

    Var

    Numero : Real;

    Begin

    Writeln (`Introduzca un nmero `);

    Read (Numero);

    If Numero > 0.0 Then

    Begin

    Writeln (`El nmero introducido es positivo);

    Readln

    End Else Begin

    Writeln (`El nmero introducido es negativo);

    Readln

    End;

    End.

    3.2.1 Sentencias IF anidadas

    La sentencia que sigue a la palabra reservada then o else puede ser cualquiera, incluso otra sentencia if - then - else. Cuando existe una sentencia if - then - else dentro de otra sentencia if - then - else, se dice que dichas sentencias estn anidadas.

    Ejemplo:

    Program Mayor;

    Uses

    Wincrt;

    Var

    A,B,C : Integer;

    Elmayor : Integer;

    Begin

    Writeln (`Digite tres nmeros enteros `);

  • Readln (A,B,C);

    If A > B Then

    If A > C Then

    Elmayor := A

    Else

    Elmayor := C

    Else

    If B > C Then

    Elmayor := B

    Else

    Elmayor := C;

    Writeln (`El nmero mayor es: `,Elmayor)

    End.

    3.2.2 La sentencia CASE

    La sentencia CASE se utiliza para elegir entre diferentes alternativas. Una sentencia CASE se compone de varias sentencias simples. Cuando un CASE se ejecuta, una y slo una de las sentencias simples se selecciona y se ejecuta.

    Ejemplo:

    Program Cursor;

    (* Este programa mueve el cursor a travs de la pantalla mediante las teclas predefinidas, cuando se presiona otra tecla, emite un pitido de advertencia*)

    Uses

    Wincrt;

    Var

    X,Y : Integer;

    C : Char;

    Begin

    Clrscr;

    X := 40;

  • Y := 10;

    GotoXY (X,Y);

    Write (`*);

    Repeat

    C := Readkey;

    GotoXY (X,Y);

    Write (` `);

    Case C of

    `S : Y := Y - 1;

    `B : Y := Y + 1;

    `D : X := X + 1;

    `I : X := X - 1;

    `P : Exit

    Else

    Write (Chr(7)

    End;

    GotoXY (X,Y);

    Write (`*)

    Until C = `P

    End.

    12. Condiciones compuestas En numerosas ocasiones las expresiones de control de un ciclo pueden ser condiciones lgicas compuestas, como las siguientes:

    While (Datos >= 100) and (Datos >= 1000) do

    While not (A

  • Program Primos;

    Var

    Primo : bolean;

    Nmero : Integer;

    Begin

    Primo: = True;

    Divisor := 2;

    WriteLn (`Introduzca un entero positivo: `);

    ReadLn (Numero);

    While (Divisor < Numero) and Primo do

    Begin

    If Numero mod Divisor = 0 then

    Primo := False;

    Divisor := Divisor + 1

    End;

    If primo = True then

    Writeln (Numero,` ` , ` es primo)

    Else

    Writeln (Numero,` ` , ` no es primo)

    End.

    13. Ciclos Es una estructura de control que permite la repeticin de una serie determinada de sentencias. Se le llama tambin bucle o lazo.

    El cuerpo del ciclo o bucle contiene las sentencias que se repiten. Pascal proporciona tres estructuras o sentencias de control para especificar la repeticin: while, repeat, for.

    Nos ocuparemos de estudiar el ciclo FOR y el ciclo REPEAT.

    3.4.1 La sentencia FOR

    En numerosas ocasiones se puede desear un bucle que se ejecute un nmero determinado de veces, y cuyo nmero se conozca por anticipado. Para aplicaciones de este tipo se utiliza la sentencia FOR.

  • La sentencia FOR requiere que conozcamos por anticipado el nmero de veces que se ejecutan las sentencias que se encuentran dentro del ciclo. El ciclo for se incremente automticamente.

    Sintaxis:

    For variable := valor inicial to valor final do

    Sentencia;

    Ejemplos:

    1.

    For c := 1 to 5 do

    Begin

    Write (`aa);

    Write (`BB)

    End;

    Al ejecutarse, visualiza:

    AaBBaaBBaaBBaaBBaaBB

    For Caracter := `A to `Z do

    WriteLn (Caracter);

    3. 4. 1. 1 Decremento del contador FOR (Downto)

    El contador del ciclo se puede decrementar de uno en uno en lugar de incrementar. La sintaxis es la siguiente:

    For variable := valor inicial downto valor final do

    Sentencia;

    Ejemplos:

    For C := 5 downto 1 do

    Begin

    Write (`C);

    Writeln

    End;

    Lo anterior produce la siguiente salida:

  • 5

    4

    3

    2

    1

    Tambin podemos encontrar ciclos FOR anidados:

    For m := 1 to 10 do

    begin

    For n := 10 downto 2 do

    WriteLn (m,n)

    end;

    3.4.2 La sentencia REPEAT

    Es una variante de la sentencia while. La sentencia REPEAT especifica un ciclo condicional que se repite hasta que la condicin se hace verdadera.

    El diagrama de flujo se representa de la siguiente manera:

    El seudocdigo se representa as:

    Repetir

    Sentencias

    Hasta_que condicin

    Sintaxis:

    Repeat

  • Begin

    Sentencia 1;

    Sentencia 2;

    ...

    ...

    ...

    Sentencia n;

    End;

    Until expresion lgica

    Ejemplo:

    (* El siguiente programa imprime las secuencias de caracteres hasta que se presione cualquier tecla *)

    Uses wincrt;

    Var m : char;

    n : integer;

    Begin

    Repeat

    Begin

    Write ('a e i o u');

    Write ('1 2 3 4 5');

    End;

    Until keypressed

    End.

    14. Prctica 1. Los patos de un granjero se venden a precios especiales si son grandes pero no demasiado. Disee un programa que lea el nmero de patos que posee el granjero y el peso de cada ave. Al final debe especificar cuntos patos pesan entre 1.5 kilos y 2 kilos inclusive. 2. Disee un programa para calcular e imprimir los primeros 2000 nmeros enteros positivos. 3. Leer las notas de 50 exmenes e imprimir cuntos de ellos tienen nota mayor o igual a 70. 4. Hacer un programa que lea los montos de las N ventas hechas por una tienda en un da y que imprima el monto total de ventas y el monto promedio. 5. Hacer un programa que lea 10 valores numricos (positivos y negativos). Debe imprimir el

  • nmero de valores negativos, el nmero de valores iguales a cero y el promedio de valores positivos. 6. Encuentre la suma de los primeros 50 nmeros enteros pares. 7. El inters simple se calcula mediante la frmula A=P(1+i*n), donde A=Monto de Inters, P=Capital, N=Nmero de aos e i=tasa de inters. 8. Hacer un programa que lea: P, i, y N e imprima el monto de inters a travs del nmero de aos ledo. 9. Disee un programa para calcular la nmina semanal de una compaa con N empleados. Por cada empleado, se debe leer: N de empleado, salario por hora y nmero de horas trabajadas. Por cada empleado se debe imprimir: N de empleado, salario bruto, impuesto federal, impuesto estatal, cuota del seguro social y salario neto. Los impuestos federales son el 15% del salario bruto, los estatales el 6% y el seguro social el 7%. El salario se calcula de la siguiente manera: Por las primeras 40 horas o menos se paga el salario normal por hora. Por las horas extra (ms de 40) se paga 1.5% adicional por hora. 10. Disee un programa para calcular cuntas veces se puede dividir un nmero X entre un nmero Y de tal manera que el resultado de la divisin sea un nmero entero.

    15. Subprogramas: Funciones y Procedimientos 4.1 Procedimientos

    4.1.1 Concepto

    Un procedimiento es un programa que realiza una tarea especfica. Puede recibir cero o ms valores del programa que llama y devolver cero o ms valores al programa que realiz la llamada. Un procedimiento est compuesto de un grupo de sentencias a las que se asigna un nombre (identificador) y constituye una unidad de programa. La tarea asignada al procedimiento se ejecuta siempre que Pascal encuentra el nombre del procedimiento.

    Los procedimientos es obligatorio declararlos y deben ser declarados antes de que puedan ser referenciados en el cuerpo del programa. En Pascal reciben el nombre de PROCEDURE.

    4.1.2 Declaracin de un procedimiento

    Al igual que los identificadores, los procedimientos deben declararse dentro del cuerpo del programa. La declaracin de un procedimiento NO indica a la computadora que ejecute las instrucciones dadas, sino que indica a la computadora cules son estas instrucciones y dnde estn localizadas cuando sea necesario.

    El formato del procedimiento es el siguiente:

    Procedure nombreproc;

    Declaraciones locales

    Begin

    Cuerpo del procedimiento

    End;

    A las variables que se encuentran dentro de un procedimiento se les llaman Variables Locales y a las que se ubican en el cuerpo principal, fuera de los procedimientos, se les llama Variables Globales.

    En resumen, un procedimiento, al igual que un programa, consta de tres partes:

  • Una cabecera del procedimiento que proporciona el nombre del mismo y, en caso de existir, una lista de parmetros formales.

    Una seccin de declaracin que puede contener constantes, variables e incluso otros procedimientos.

    Una seccin ejecutable: el cuerpo del procedimiento.

    Ejemplo:

    Program Recuadro;

    Var I : Integer;

    Procedure Estrellas;

    (* Este procedimiento visualiza 15 asteriscos *)

    Begin

    For I := 1 to 15 do

    Write (`*)

    End;

    Begin

    Estrellas; (* Llamado del procedure *);

    Write (`Mensajes);

    Estrellas; (* Nuevo llamado del procedure *);

    End.

    4.1.3 Ventajas de utilizar procedimientos

    La organizacin de un programa en procedimientos lo hace ms fcil de escribir y depurar. Los procedimientos no deben exceder de 25 lneas.

    Las ventajas de utilizar procedimientos son:

    Facilita el diseo descendente.

    Los procedimientos se pueden ejecutar ms de una vez en un programa y/o en diferentes programas, ahorrando tiempo de programacin.

    El uso de procedimientos facilita la divisin de las tareas entre un equipo de programadores y se pueden comprobar individualmente.

  • 16. Parmetros

    4.2.1 Concepto

    Un parmetro es un mtodo para pasar informacin (valores a variables) del programa principal a un procedimiento y viceversa.

    Un parmetro es, prcticamente, una variable cuyo valor debe ser ya sea proporcionado por el programa principal al procedimiento o ser devuelto desde el procedimiento hasta el programa principal. Por consiguiente, existen dos tipos de parmetros:

    - Parmetros de entrada: Sus valores deben ser proporcionados por el programa principal.

    - Parmetros de salida: Son parmetros cuyos valores se calcularn en el procedimiento y se deben devolver al programa principal para su proceso posterior.

    4.2.2 Transferencia de informacin desde y/o hasta los procedimientos

    Existen dos tipos de procedimientos:

    - Procedimientos sin parmetros: No existe comunicacin entre el programa principal y los procedimientos ni viceversa.

    - Procedimientos con parmetros: Existe comunicacin entre el programa principal y los procedimientos o entre dos procedimientos.

    Ejemplo 1:

    (Parmetros de entrada)

    Procedure RecuadroDos (N : Integer);

    Var

    J : Integer;

    Begin

    For J := 1 to N do

    Write(`*)

    End;

    Ejemplo 2:

    (Parmetros de entrada/salida)

    El procedimiento Geometria recibe la longitud y anchura de un rectngulo, calcula el rea y permetro del rectngulo y devuelve los valores obtenidos al programa principal.

    Procedure Geometria (Longitud, Anchura : Real; Var Area, Permetro : Real);

    Begin

  • Area := Longitud * Anchura;

    Perimetro := 2 * (Longitud + Anchura)

    End;

    4.2.3 Parmetros actuales y formales

    Las sentencias llamadas a procedimientos constan de dos partes: un nombre de procedimiento y una lista de parmetros llamados actuales:

    Nombreproc (pa1,pa2, pa3,...);

    Los parmetros actuales pa1, pa2, pa3, ... deben tener unos valores que se pasan al procedimiento nombreproc.

    En la declaracin de un procedimiento cuando se incluyen parmetros, stos se denominan parmetros formales o ficticios (pf1, pf2, pf3, ...). Ellos sirven para contener los valores de los parmetros actuales cuando se invoca el procedimiento.

    Procedure nombreproc (pf1, pf2, pf3, ...)

    El valor de los parmetros actuales no se conoce cuando se declara el procedimiento, sin embargo, cuando se ejecuta la sentencia de llamada al procedimiento es preciso que tengan valores asignados, ya que en caso contrario se producir un error.

    Program Correspondencia;

    Uses Wincrt;

    Var

    X,Y,A,P : real;

    Procedure Geometria (Longitud, Anchura : Real; Var Area, Perimetro : Real);

    Begin (* Geometra *)

    Area := Longitud * Anchura;

    Perimetro := 2 * (Longitud + Anchura)

    End;

    Begin

    WriteLn ('Introducir longitud: ');

    Readln (X);

    WriteLn ('Introducir anchura: ');

    Readln (Y);

    Geometria (X,Y,A,P); (* Llamada al procedimiento *)

  • WriteLn ('El rea es: ', A:6:2);

    WriteLn ('El permetro es: ', P:6:2)

    End.

    17. Parmetros valor y parmetros variable 4.2.4.1 Parmetros valor

    Son parmetros unidireccionales que se utilizan para proporcionar informacin a un procedimiento, pero no pueden devolver valores. Si la palabra var no aparece delante del parmetro formal en un procedimiento, la computadora supone que el parmetro formal es un parmetro valor. En la llamada al procedimiento el valor del parmetro actual se pasa a la variable que represente el parmetro actual. Este valor puede ser modificado dentro del programa, pero su valor no se puede devolver al programa o procedimiento llamante.

    4.2.4.2 Parmetros variable

    En la declaracin de un procedimiento, los nombres de los parmetros variables estn precedidos con la palabra var. Los parmetros variable se utilizan tanto para recibir como para transmitir valores entre el subprograma y el programa llamante. Estos parmetros pueden actuar como parmetros de salida o de entrada/salida.

    El siguiente ejemplo ilustra la diferencia entre parmetros valor y variable en Pascal y la correspondencia entre ellos.

    Program EjemploParametros;

    Uses Wincrt;

    Var

    A,B,C : Integer;

    Procedure Imprimir (D, E, F : Integer);

    Begin

    WriteLn ('A = ', D:1, ' ':5,'B = ', E:1,' ':5,'C = ', F:1)

    End;

    Procedure Pasar (D,E : Integer; Var F : Integer);

    Begin

    Writeln ('Entrada al procedimiento Pasar');

    Imprimir (D, E, F);

    F := D * E;

    WriteLn ('Salida del procedimiento Pasar');

  • Imprimir (D, E, F)

    End;

    Begin

    A := 2;

    B := 3;

    C := 4;

    WriteLn ('Antes de llamar al procedimiento Pasar');

    Imprimir (A, B, C);

    Pasar(A, B, C);

    WriteLn ('Despus de llamar al procedimiento Pasar');

    Imprimir (A, B, C);

    End.

    La salida de este programa es:

    Antes de llamar al procedimiento Pasar

    a = 2 b = 3 c = 4

    Entrada al procedimiento Pasar

    a = 2 b = 3 c = 4

    Salida del procedimiento Pasar

    a = 2 b = 3 c = 6

    Despus del retorno del procedimiento Pasar

    a = 2 b = 3 c = 6

    18. Subprogramas: Funciones y Procedimientos 4.2 Paso de parmetros (repaso...)

    4.2.1 Ejemplo

    En este ejemplo los parmetros formales a y b recibe, cuando son llamados, los valores contenidos en los parmetros actuales de x e y.

    Program Calculo;

    Uses wincrt;

  • Var

    x,y : real;

    Procedure mayor (a,b : real);

    Var

    max : real;

    Begin

    if a > b then

    max := a

    else

    max := b;

    writeln ('El mayor de los dos nmeros es ',max:4:2);

    End;

    Begin

    repeat

    write ('Introduzca dos nmeros ');

    readln (x,y);

    mayor (x,y)

    until x = 0

    End.

    4.2.2 Ejemplo

    El siguiente ejemplo muestra un intercambio de valores de dos variables con un procedimiento.

    Program Intercambio;

    Uses wincrt;

    Var

    x,y : real;

    resp : char;

    Procedure cambio (var a,b : real);

    Var

  • aux : real;

    Begin

    aux := a;

    a := b;

    b := aux;

    writeln ('Ahora el valor de a es ',a:5:2,' y el valor de b es ',b:5:2);

    End;

    Begin

    repeat

    clrscr;

    write ('Introduzca el valor para x ');

    readln (x);

    write ('Introduzca el valor para y ');

    readln (y);

    cambio(x,y);

    writeln;

    write ('Desea continuar (S/N)?');

    readln (resp);

    until (resp = 'N') or (resp = 'n')

    End.

    19. Funciones en Turbo Pascal

    Una funcin es un subprograma que recibe como argumentos o parmetros datos de un tipo numrico o no numrico (char, string, bolean u otros) y devuelve un resultado. Esta caracterstica le diferencia de un procedimiento.

    El pseudocdigo es el siguiente:

    Nombre_funcin (argumento1,argumento2,...);

    Los argumentos es lo que se conoce en Pascal como parmetros. Para poder calcular el valor o resultado de la funcin, todo lo que se necesita conocer es el valor o valores de los parmetros respectivos.

  • 4.3.1 Funciones aritmticas o matemticas

    4.3.2 Funciones definidas por el usuario

    Adems de las funciones predefinidas citadas anteriormente, es posible que el usuario pueda declarar sus propias funciones de igual modo que declara sus procedimientos.

    Una funcin es un subprograma que devuelve un nico resultado al programa o subprograma que le llam. La sintaxis es muy similar a la de un procedimiento.

    Function nombre (parmetros): tipo

    (declaracin de variables locales)

    begin

    nombre de la funcin := valor de la funcin

    end;

    Comparacin entre funciones y procedimientos

    En vez de la palabra procedure se debe utilizar la palabra function

    Al igual que en los procedimientos, el nombre de una funcin es un identificador. Sin embargo, el nombre de la funcin se refiere a la posicin de memoria que contiene el valor devuelto por la funcin.

    La lista de los parmetros formales son los identificadores utilizados para recibir valores del programa.

    El tipo de datos del resultado coincide con el tipo expresado en la cabecera de la funcin.

    En el cuerpo de la funcin tiene que existir una sentencia de asignacin como la siguiente:

    Nombre_funcin := valor_funcin

    La funcin slo devuelve un valor, el procedimiento puede devolver cero, uno o varios valores.

    El tipo de dato del resultado de la funcin debe estar indicado en la cabecera y puede ser tipo char, integer, real o bolean.

    Ejemplo:

  • Program Cubo;

    Uses

    Wincrt;

    Var

    Num,valor : integer;

    Function El_cubo (Numero: integer):integer;

    Begin

    valor := Num*Num*Num;

    End;

    Begin

    Write ('Digite un nmero entero: ');

    Readln (Num);

    El_cubo(Num);

    Write ('El cubo de ',Num,' es ',valor);

    End.

    20. Prctica general 1. Hacer un programa que calcule lea el Id. del empleado, el nombre del empleado y el salario bruto.

    Debe utilizar un procedimiento de clculo tomando como parmetro el salario bruto (utilice una variable diferente al del programa principal). Finalmente, debe calcular la deduccin de la Caja y del Banco Popular y el salario neto.

    La salida del programa debe ser la siguiente:

    El empleado (nombre), cdula No. (id_empleado), obtuvo un salario neto de...

    Sus deducciones suman ....

    Hacer un programa de funciones aritmticas que lea un nmero real y mediante un men y utilizando procedimientos para cada funcin calcule:

    - El seno de ese nmero

    - El cuadrado de ese nmero

    - La raz cuadrada de ese nmero

    - La parte decimal del nmero

  • - La parte entera del nmero

    Disee un programa que mediante una funcin calcule la suma de los nmeros que estn en un rango establecido. (Por ejemplo de 1 a 100). Pruebe con varios rangos.

    Escribir un programa que, mediante una funcin devuelva el valor del da de la semana en respuesta a la entrada de la letra inicial de dicho da.

    Mediante una funcin, determinar el nmero de das de un mes dado.

    Escriba un programa que mediante una funcin determine si un nmero es primo.

    21. Respuestas Respuesta No 1.

    Program Salario;

    Uses wincrt;

    Var

    id_empleado,i,n : integer;

    nom_empleado : string [40];

    sal_bruto,salario_neto,tod_ded: real;

    resp : char;

    Procedure calcula (var sal_brut : real);

    Var

    cc_ss,b_p : real;

    Begin

    cc_ss := sal_brut * 0.08;

    b_p := sal_brut * 0.01;

    tod_ded := cc_ss + b_p;

    salario_neto := sal_brut - tod_ded

    End;

    Begin

    i:=1;

    Write ('Digite el nmero de empleados a procesar: ');

  • readln (n);

    While i

  • Suma := 0;

    For i:= 1 to N do

    suma := suma + i;

    Sumar := Suma;

    Write ('La suma de los nmeros del 1',' al ',n, ' es: ',suma);

    Readln;

    End;

    Begin

    Write ('Digite el nmero mximo: ');

    Readln (N);

    Sumar (N);

    End.

    Respuesta No. 6.

    Program TestPrimos;

    Uses Wincrt;

    Var

    N : integer;

    Function Primo (Q : integer) : boolean;

    Var

    D : integer;

    P : boolean;

    Begin

    If Q < 4 then

    Primo := True

    Else

    Begin

    P:= True;

    D := 2;

  • While P and (D 0 do

    Begin

    If Primo (N) then

    Writeln (N,' es primo')

    Else

    Writeln (N,' no es primo');

    Writeln ('Introduzca otro entero');

    Readln (N);

    End;

    Writeln

    End.

    22. Arreglos Introduccin

    Primero que todo, es importante conocer el concepto de estructura de datos. Una estructura de datos es "una coleccin de datos organizados de un modo particular." Las estructuras de datos pueden ser de dos tipos: estticas y dinmicas.

    Las estructuras de datos estticas son aquellas a las que se le asigna una cantidad fija de memoria cuando se declara la variable. Las estructuras de datos dinmicas son aquellas cuya ocupacin de memoria puede aumentar o disminuir durante el tiempo de ejecucin. Entre las

  • estructuras de datos estticas podemos encontrar los vectores y los arreglos, tema que estudiaremos a continuacin.

    5.0 Concepto

    Un array (se suele traducir como arreglo) es una estructura de datos en la que se almacena una coleccin de datos del mismo tipo, por ejemplo, los salarios de los empleados de una empresa.

    Un array es una lista de un nmero determinado de elementos del mismo tipo. Se caracteriza por: - Almacenar los elementos del array en posiciones de memoria continua.

    - Tener un nico nombre de variable (por ejemplo salarios) que represente a todos los elementos. stos a su vez se diferencian por un ndice o subndice.

    - Se puede accesar directa o aleatoriamente los elementos del array.

    23. Arrays unidimensionales: Los vectores

    Un array de una dimensin (unidimensional), tambin llamado vector o fila, es un tipo de datos estructurado compuesto de un nmero determinado de elementos, de tamao fijo y elementos homogneos (del mismo tipo). La caracterstica de tamao fijo se refiere a que el tamao del array debe ser conocido en tiempo de compilacin.

    Por ejemplo, si deseamos conservar las puntuaciones de los 50 estudiantes de un examen de informtica, se necesita reservar cincuenta posiciones de memoria, dar un nombre al arreglo y a cada uno de los 50 estudiantes asignarles una posicin o ndice del arreglo.

    5.1.1 Declaracin de un array o vector

    Siempre se deben declarar luego de las constantes (si existen). Un array o vector se declara por medio del tipo de array. La sintaxis es la siguiente:

  • Type

    Nombre_array = array [rango del subndice] of tipo;

    Nombre_array: Se refiere a un nombre de identificador vlido.

    Tipo_subndice: Puede ser boolean, char o un rango de tipo enumerado.

    Tipo: Se refiere al tipo de los elementos del vector. Todos los elementos deben ser del mismo tipo.

    Ejemplos:

    Type

    X = array [1..8] of real;

    Type

    Luces = (Rojo, Verde, mbar);

    Type

    DiasDeSemana=(Lunes, Martes, Mircoles, Jueves, Viernes, Sabado, Domingo);

    ConjuntoDias = array

    Type

    Salarios = array [A..Z] of real;

    (En este caso es de tipo real porque el salario es de ese tipo. El subndice indica que los salarios van de los empleados cuya inicial es A hasta la Z).

    Las declaraciones de tipo array no crea ninguna variable especfica de tipo array, sino que proporciona informacin del array como un todo.

    Para declarar una variable tipo array, se utiliza la siguiente sintaxis:

    Type

    Valores = array [1..10] of real;

    Var

    Precios : Valores;

    Primeramente se crea el tipo del array y luego se declara la o las variables referenciadas al array.

    Otro ejemplo de aplicacin puede ser el siguiente:

    Const

    Max = 500;

  • Type

    Texto = array [1..Max] of char;

    Var

    Palabras, Letras: Texto;

    En este ejemplo se crean dos variables arrays: Palabras y Letras. Las posiciones del array van de 1 a 500 y contendrn un valor tipo caracter.

    5.1.2 Lectura y escritura de un vector

    5.1.2.1 Lectura

    Para leer un vector se debe hacer elemento a elemento y se requiere de alguna estructura repetitiva, ya sea un while, repeat o for.

    Ejemplos:

    I := 1; I := 1; For I:= 1 to n do

    While I 100

    End;

    5.1.2.1 Escritura

    Para visualizar un vector, igualmente, es necesario situarlo dentro de una estructura repetitiva.

    For I := 1 to Numero do

    Writeln (Notas [I]:3);

    Writeln; (* Evita que todas las salidas del vector aparezca en la misma lnea *)

    24. Arrays bidimensionales: Tablas o matrices

    Un array bidimensional (tambin llamado tabla o matriz) es un array con dos ndices. Al igual que los vectores deben ser ordinales. Se declaran de igual manera que los arrays de una dimensin.

    5.2.1 Declaracin de un array bidimensional

    Al igual que en los arrays unidimensionales o vectores, se crean con declaraciones type y var y deben ser de tipo ordinales o subrango. Se deben indicar:

    - El nombre del array

  • - Tipo del array

    - Rango permitido

    Ejemplo:

    Type

    Tabla = array [1..25,1..4] of real;

    Var

    Grados : Tabla;

    Para localizar o almacenar un valor en el array se deben especificar dos posiciones o subndices, uno para la fila y otro para la columna.

    5.2.2 Escritura de una matriz

    Para escribir un vector, se debe hacer referencia tanto a la fila como a la columna. As:

    For fila := 1 to 3 do

    Begin

    For Columna := 1 to 4 do

    Write (A[Fila, Columna]:4);

    End;

    Ejemplo:

    Calcular el promedio de cada estudiante de una lista de veinticinco alumnos de una clase de informtica con notas en cuatro asignaturas.

    Program Promedio;

    Var

    Notas : Array [1..25,1..4] of real;

    I,J : Integer;

    Suma,Prom: Real;

    Begin

    For I := 1 to 25 do

    Begin

    Write (`Notas del estudiante: ,I:1);

    Writeln (`En una misma lnea digite todas las notas);

  • Suma := 0;

    For J := 1 to 4 do

    Begin

    Read (Notas[I,J]);

    Suma := Suma + Notas[I,J]

    End;

    Readln;

    Prom := Suma/4;

    Writeln (`La nota promedio del estudiante `,I:1, es `,Prom:1:1)

    End

    End.

    25. Prctica Escriba un programa que almacene en un vector los das de la semana.

    Escriba un programa que almacene en un vector su nombre.

    Escriba un programa que almacene en un vector los nmeros pares del 1 al 10.

    Escriba un programa que lea diez nmeros enteros y los invierta.

    Escriba un programa que lea las dimensiones de una matriz, las lea, visualice la matriz y que encuentre el menor y mayor elemento de esa matriz y sus posiciones.

    Escriba un programa que encripte un password de siete letras debe contener consonantes y vocales. El algoritmo de encriptacin ser sustituir cada vocal por el nmero que le corresponde. (A=1, E=2,O=3,I=4,U=5).

    Escribir un programa que en una matriz almacene los nmeros primos del 1 al 100.

    Escriba un programa que capture e imprima la siguiente tabla:

    Distrito Candidato A Candidato B Candidato C

    1 194 48 206

    2 180 20 320

    3 221 90 821

    4 432 50 946

    Escriba un programa que almacene en una matriz los nmeros pares del 1 al 40 y los imprima.

  • 26. Cadenas (Strings) 6.1 Definicin

    Pascal, como cualquier otro lenguaje, debe tener la capacidad de procesar frases como "Presione ENTER para continuar", "Calculando...", "Proceso terminado", etc.

    Los datos tipo char y string permiten la manipulacin de datos no numricos.

    Una cadena de caracteres o string es una serie de caracteres cuya longitud (nmero de caracteres que contiene) puede variar de 1 hasta 255 caracteres. Turbo Pascal tiene el tipo de dato string que almacena informacin de texto. Este dato se puede almacenar en constantes y en variables de cadena. Una variable de cadena est declarada para la palabra string seguida de la longitud mxima de la cadena encerrada entre corchetes.

    6.1.1 Declaracin de una variable tipo string

    Las variables de cadena se pueden declarar las de cualquier otro tipo, ya sea en la seccin var o en type.

    Si se declara como var, se hace de la siguiente manera:

    Var

    Mensaje : string [80];

    Nombre : string [40];

    Si la cadena es declarada como type, haramos la declaracin as:

    Type

    Cadena80 = string [80];

    Cadena40 = string [40];

    Var

    Mensaje : Cadena80;

    Nombre : Cadena40;

    Es importante recordar que si se declara como Type inmediatamente despus, dentro de las variables, se debe declarar una variable que haga referencia al Type.

    Una vez declaradas las variables de cadena se pueden realizar asignaciones o bien operaciones de lectura / escritura en los programas.

    Por ejemplo:

    Program Ejemplo;

    Var

    Mensaje = string[40];

  • Begin

    Mensaje := `Hola mis amigos, por favor estudien bastante;

    Write (`Mi mensaje de hoy para ustedes es: `),Mensaje;

    Writeln;

    Write (`Presione enter...);

    Readln

    End.

    6.1.2 Longitud de una cadena

    Una cadena fsicamente es una estructura de una secuencia de 0 hasta 255 caracteres de longitud. Sin embargo, la ocupacin en memoria de una cadena es un nmero de bytes igual al de caracteres de la cadena ms uno. As la cadena:

    `Programador

    tiene una longitud de 11 caracteres, entonces ocupar en memoria 12 bytes. Esto se debe a que el primer byte en una cadena, contiene la longitud de la cadena actualmente almacenada en memoria.

    Supongamos que esta palabra corresponde a un dato almacenado en la variable PUESTO que fue definida de la siguiente manera:

    Var

    Puesto : String[20];

    Sucede que, entonces, la longitud lgica de la variable ser de 11 bytes pero la longitud fsica ser de 20 bytes pues as fue definida.

    6.1.3 Asignacin de cadenas

    A las variables de cadena, como se ha visto, se pueden dar valores con una sentencia de asignacin o con una sentencia de lectura (read). Ambas situaciones se pueden describir con la ecuacin:

    Destino fuente

    Donde destino es la cadena a la que se da un valor y fuente es la expresin de cadena que contiene el correspondiente valor. Esta ecuacin acta como la sentencia de asignacin que evala la cadena fuente y se almacena en la variable de la cadena destino.

    Dependiendo del tamao (longitud de la cadena) de las cadenas fuente y destino se pueden presentar tres casos diferentes que analizaremos a partir de la siguiente declaracin de variables de cadena.

  • Var

    Cad1 : String [8];

    Cad2 : String [11];

    Cad3 : String [15];

    Cad4 : String [11];

    6.1.3.1 Caso I. Las longitudes de la cadena destino y fuente son iguales

    Supongamos que se ejecuta la sentencia

    Cad2 := `informatica;

    Este caso no presenta problemas, pues cada posicin de cad2 se rellena con un carcter.

    Cad2 I N F O R M A T I C A

    1 2 3 4 5 6 7 8 9 10 11

    Lo mismo sucede si se ejecuta la sentencia

    Cad4 := Cad2;

    6.1.3.2 Caso II. La longitud de la cadena destino es mayor que la cadena fuente

    Supongamos que ahora se ejecuta la sentencia

    Cad3 := Cad2;

    Resultar que Cad3 tiene 15 caracteres y slo hay 11 caracteres en cad2. La cadena Cad3 seguir teniendo una longitud mxima de 15 caracteres, pero slo se almacenan en ella ahora 11 caracteres y su longitud actual ser de 11.

    Cad3 I N F O R M A T I C A longitud actual = 11

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 longitud mxima = 15

    6.1.3.3 Caso II. La longitud de la cadena destino es mayor que la cadena fuente

    Supongamos que se trata de ejecutar ahora

    Cad1 := Cad2;

    En este caso, como Cad1 tiene una longitud de ocho caracteres, la cadena destino no se puede almacenar totalmente. En este caso se trunca la cadena destino y se almacenan en Cad1 los primeros ocho caracteres (de izquierda a derecha) de Cad2.

    Cad1 I N F O R M A T longitud actual = 11

    1 2 3 4 5 6 7 8 longitud mxima = 8

  • 28. Prctica para el examen 1. Escriba un programa que almacene en una cadena su nombre y lo invierta.

    2. Escriba un programa que almacene en un vector los nmeros pares del 1 al 10.

    3. Escribir un programa que en una matriz almacene los nmeros primos del 1 al 100 y que al final del programa, en una variable proporcione la suma.

    4. Escriba un programa que lea diez nmeros enteros y los invierta.

    5. Escriba un programa que cuente las vocales de una palabra.

    6. Escriba un programa que lea una cadena de caracteres en minscula y la convierta a mayscula. Utilice procedimientos.

    7. Escriba un programa para almacenar la siguiente tabla, que cuente los votos e imprima el candidato ganador.

    Distrito Candidato A Candidato B Candidato C

    1 194 48 206

    2 180 20 320

    3 221 90 140

    4 432 50 821

    8. Hacer un programa que lea una cadena de caracteres, que imprima la longitud de la cadena y contar el nmero de vocales que tiene la palabra o frase.

    29. Punteros

    Introduccin

    Como vimos anteriormente en la leccin nmero 5, las estructuras de datos dinmicas son aquellas cuya ocupacin de memoria puede aumentar o disminuir durante el tiempo de ejecucin. Mediante los punteros, tema que estudiaremos a continuacin, podemos crear estructuras de datos dinmicas que tienen capacidad de variar en tamao y ocupar tanta memoria como realmente requieran. Estas estructuras son llamadas punteros.

    7.1 Concepto

    Los punteros son tambin llamados apuntadores. Son tipos de datos que permiten crear estructuras de datos dinmicas, las cuales pueden variar en tamao y memoria requerida. Las variables que se crean y se destruyen durante la ejecucin se llaman variables dinmicas o annimas. As, durante la ejecucin de un programa, puede haber una posicin de memoria especfica asociada con una variable dinmica y posteriormente puede no existir ninguna posicin de memoria asociada con ella.

  • Una estructura de datos dinmica es una coleccin de elementos llamados nodos de la estructura - normalmente tipo registro- que se enlazan o encadenan juntos. Este enlace se establece asociando con cada nodo un puntero que apunta al nodo siguiente de la estructura.

    Las estructuras de datos dinmicas son tiles para almacenar y procesar conjuntos de datos cuyos tamaos cambian durante la ejecucin del programa, por ejemplo, el conjunto de trabajos que se han introducido en una computadora y estn esperando su ejecucin o el conjunto de nombres de pasajeros y asignacin o el conjunto de nombres de pasajeros y asignacin respectiva de asientos de un vuelo de avin determinado.

    Pascal proporciona los mtodos para asignar y liberar espacio de memoria utilizando punteros y los procedimientos new y dispose.

    El tipo de datos puntero es de tipo simple pues no se puede romper en otros componentes ms pequeos, como s sucede con el array o el registro. Los punteros son variables que se utilizan para almacenar la direccin de memoria de otra variable. Las variables que se utilizan para almacenar direcciones son llamadas variables puntero o simplemente puntero.

    Grficamente se representa as

    Al definir un puntero se debe indicar el tipo de valores que se almacenarn en las posiciones designadas por los punteros. Esto se debe a que los diferentes tipos de datos requieren distintas cantidades de memoria para almacenar sus constantes, una variable puntero puede contener una direccin de una posicin de memoria adecuada slo para un tipo dado.

    Por esta razn se dice que un puntero apunta a una variable particular, es decir, a otra posicin de memoria.

    Una variable tipo puntero contiene la direccin de la posicin de otra variable.

    7.1.1 Declaracin de punteros

    Se puede declarar un puntero a una variable carcter, a un array de enteros, a un registro, o a cualquier otro tipo de dato. Y se pueden declarar como Var o Type.

    La sintaxis para la declaracin de un puntero es la siguiente:

    Var

    Nombre-variable : ^ identificador - tipo

    Ejemplo:

    Var

    Ptr : ^Real

    La variable Ptr apunta a un tipo de dato TipoElemento.

    Un ejemplo grfico es el siguiente, donde la variable P contiene 059164 que es la direccin de memoria donde est la variable entera apuntada 345:

  • 30. Operaciones con punteros Como se dijo anteriormente, los punteros se crean con las declaraciones:

    Type

    PuntX = ^Real;

    Var

    P : PuntX;

    P es una variable puntero de tipo PuntX que apunta a posiciones que contienen valores de tipo real. La posicin de memoria designada por el valor de la variable puntero P se representa por P^. Se pueden asignar valores a P^ y utilizar valores de P^ en expresiones tal como cualquier otra variable. Si P apunta a posiciones que contiene reales, P^ es una variable real.

    Ejemplo:

    P^ := 1000 El valor de P^ es 1000

    3 * P^ + 500 El valor de P^ es 3500

    Sin embargo, estas operaciones no se pueden realizar directamente luego de la declaracin, debido a que el objeto o direccin P^ no existe. Antes de que un programa utilice un puntero, se requiere abrir espacio para el tipo de datos objeto de la direccin del puntero. Para iniciar un puntero se debe utilizar el procedimiento NEW.

    7.2.1 New

    La declaracin de un puntero P no crea una celda de memoria para apuntar a ella. El procedimiento (sentencia) New se utiliza para crear la celda de memoria P; es decir, el procedimiento New crea una variable dinmica y establece que una variable puntero apunte a ella.

    Sintaxis:

    New (P)

    P representa la variable puntero.

    La sentencia New (P); llama al procedimiento New que asigna almacenamiento para un valor determinado y sita la direccin de esta celda de memoria en la variable puntero P. Una vez que se asigna almacenamiento para un valor de tipo determinado al que est apuntando P, se puede almacenar un valor en esa celda de memoria y manipularlo.

    Ejemplo:

    New (Ptr);

  • Ptr^ := `Mckenna;

    La sentencia New (Ptr) crea una celda vaca de memoria a la que apunta Ptr. La segunda sentencia sita el valor `Mckenna en esa celda de memoria.

    Grficamente se representara as:

    7.2.2 Dispose

    El procedimiento Dispose libera la posicin de memoria ocupada por una variable dinmica.

    Sintaxis:

    Dispose (P) (* P es una variable tipo puntero *)

    Grficamente se representa as:

    Dispose destruye la variable referenciada por P y devuelve su zona de memoria

    7.2.2.1 Constante nil

    Pascal proporciona una constante predefinida, nil (nulo. La constante nil se utiliza para dar un valor a una variable puntero que no apunta a ninguna posicin, nil puede ser asignad a un puntero de cualquier tipo.

    P:= nil;

    P:=5

    Ejemplo:

    Var

    P,Q : ^Integer;

    Begin

    New (P);

    P^ :=8;

    Q^ :=P;

    Q^ :=5;

  • Dispose (P)

    End.

    7.2.3 Assigned

    Determina si un puntero o variable de tipo procedimiento es nil. Especifica si el argumento es nil o e el argumento tiene un valor. Su sintaxis es:

    Function Assigned (Var P) : Bolean;

    P debe ser una referencia de un puntero o tipo procedimiento. La funcin devuelve verdadero (true) si P no es nil o falso (false) si es nil. Una posible aplicacin puede ser la siguiente:

    Var P : Pointer;

    Begin

    P : nil;

    If Assigned (P) then

    Writeln (`Prueba Uno);

    P := @P;

    If Assigned (P) then

    Writeln (`Prueba Dos);

    End.

    La llamada Assigned(P) correspondiente a la evaluacin de P nil para una variable puntero, mientras @P nil se corresponde a una variable por procedimiento.

    31. Archivos y registros Concepto de registro

    Un registro (record) es un tipo de datos estructurado (denominado dato record) que consta de un conjunto de elementos que pueden ser del mismo tipo o de tipos diferentes.

    Los componentes de un registro se denominan campos. Cada campo tiene un nombre llamado identificador de campo, que es algn identificador elegido por el programador cuando se declara el tipo de registro y un tipo que se especifica cuando se declara el tipo de dato record.

    32. Declaracin de datos tipo registro La sintaxis para declarar un registro es la siguiente:

    Type

    Nombre_reg = record

  • Lista id1 : Tipo1;

    Lista id2 : Tipo2;

    Lista id3 : Tipo3;

    .

    .

    .

    Lista idN : TipoN;

    End;

    Nombre_reg: Nombre de la estructura o registro.

    Lista id: Lista de uno o ms nombres de campos que componen el registro.

    Tipo: Puede ser cualquier tipo de dato estndar o definido por el usuario.

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

    Empleado

    Tipo cadena Tipo Entero Tipo cadena Tipo real

    Ejemplo:

    Type

    Empleado = record

    Nombre : String[30];

    Edad : Integer;

    Domicilio : String[40];

    Salario : Real;

    End;

    33. Manipulacin de datos tipo registro 8.2.1 Acceso a los campos de un registro

    Se puede acceder a cada campo de un registro directamente utilizando un designador o selector de campo de la forma:

    NombreReg.NombreCampo

  • Los datos mostrados anteriormente en Empleado mediante una secuencia de sentencias de asignacin:

    Empleado.Nombre := `Chi-ki-tico;

    Empleado.Edad := 34;

    Empleado.Domicilio := `Calle El ltimo Grito;

    Empleado.Salario := 245320;

    Una vez que los datos estn almacenados en un registro, se pueden manipular de igual forma que otros datos en memoria.

    Write (Empleado.Nombre); (* Visualiza Chi-ki-tico *)

    8.2.2 Operaciones sobre registros

    Los procedimientos de lectura y escritura permiten nicamente nmeros caracteres o cadenas. Un registro al ser una estructura compuesta (distintos tipos de datos) es preciso efectuar las operaciones de lectura y escritura individualmente.

    Otra operacin que se puede realizar entre registros es la asignacin (copia del contenido de un registro en otro del mismo tipo). Si A y D son variables registro del mismo tipo, la sentencia:

    A := D

    copia todos los valores asociados con el registro D al registro A.

    Ejemplo:

    Type

    Stock = record

    Numeros : Integer;

    Nombre : String[20];

    Precio : Real;

    end;

    Var

    Articulo : Stock

    8.2.3 La sentencia WITH

    La tarea de escribir el selector de campo completo cada vez que se referencia un campo de un registro es tediosa, sobre todo si el nmeros es grande. La sentencia WITH permite referenciar el nombre del registro en su cabecera y posteriormente para llamar a algn campo slo se necesita el nombre del campo y no el selector de campo completo, con el nombre del registro (por ejemplo, Edad en vez de Cliente.Edad).

  • Sintaxis:

    With Camporegistro do

    Begin

    (* Sentencias que hacen referencia a campos de Camporegistro *)

    End;

    Camporegistro: Nombre o nombres de registros.

    Sentencias: Relacionadas con los campos.

    Ejemplo:

    Program Ejemplo;

    Type

    Empleado = record

    Nombre : String [20];

    Edad : Integer;

    Empresa : String [30];

    End;

    Var

    Socio : Empleado;

    Deducciones : Real;

    Begin

    With Socio do

    Begin

    Readln (Nombre);

    Neto := Salario - Deducciones;

    Writeln (Empresa);

    End;

    End.

  • 34. Archivos tipificados o aleatorios

    Son archivos que pueden contener datos tipo integer, real o record. Para declarar un archivo se procede de la siguiente manera:

    Type

    Nombrearchivo = file oftipo de datos

    Ejemplo:

    Type

    Nombres = file of string[60];

    Var

    Nom: Nombres;

    8.3.1 Creacin de un archivo tipificado

    Para crear un archivo se utilizan las sentencias Assign la cual crea el archivo y Rewrite para abrir el archivo.

    La sintaxis es la siguiente:

    Assign (f,nombre);

    f: Nombre interno del archivo dentro del programa.

    nombre: Nombre externo con el que se conoce al archivo por el sistema operativo.

    La operacin Assign establece una correspondencia entre la variable tipo archivo con un archivo externo situado en disco.

    8.3.1 Apertura de un archivo

    Luego de haber sido asignado, el archivo debe ser abierto. Esta operacin se realiza por medio de uno de los dos procedimientos predefinidos: rewrite y reset.

    8.3.1.1 Reset

    Abre un nuevo archivo existente para una operacin de lectura. Si se intenta llamar a Reset y el archivo especificado no existe, se producir un error de E/S (entrada/salida).

    Sintaxis:

    Reset (NombreArch);

    8.3.1.2 Rewrite

    Crea y abre un nuevo archivo. Si el archivo ya existe, Rewrite borra su contenido; en caso contrario, el archivo queda abierto para una operacin de escritura.

    Sintaxis:

  • Rewrite (f);

    Existen algunos aspectos importantes que se deben tomar en cuenta al utilizar la sentencia Rewrite:

    - Si al abrir el archivo de texto, con assign y reset, ya existe en el disco, la sentencia Rewrite lo rescribir, en otras palabras, "se perderT el archivo contiguo.

    - Por el contrario, las sentencias assign y rewrite suponen la existencia del archivo llamado en el disco. Si este archivo no existe, las sentencias anteriores producirn errores de ejecucin.

    El siguiente programa define un tipo registro (cliente) y a continuacin rellena (pone valores en los campos) en la variable correspondiente. Otra variable del mismo tipo se asigna a la primera variable y los campos de la segunda variable se imprimen uno a uno.

    Program Visualiza_Registros;

    Type

    Datos = record

    Nombre : String [80];

    Direccion : String [80];

    Edad : Integer;

    Saldo : Real

    End;

    Var

    Aux, Cliente : Datos;

    Begin

    Write (`Digite el nombre del cliente: `);

    Readln (Cliente.Nombre);

    Cliente.Direccin := `Calle El ltimo Grito;

    Write (`Digite la edad del cliente: `);

    Readln (Cliente.Edad);

    Cliente.Saldo := 245320;

    Aux := Cliente; (* Transfiere los datos al registro Aux *)

    (* Visualizacin de los campos de Aux *)

    Writeln (`Nombre: `, Aux.Nombre);

  • Writeln (`Direccin: `, Aux.Direccion);

    Writeln (`Edad: `, Aux.Edad:1);

    Writeln (`Saldo: `, Aux.Saldo:1:1);

    End.

    Este mtodo de lectura/escritura campo a campo es engorroso. Pascal proporciona la sentencia with que facilitar el proceso de lectura/escritura de los registros.

    8.3.2 - 8.3.3 Manipulacin de archivos tipificados y funciones

    8.3.2.1 Escritura de un archivo

    Una vez que se ha abierto el archivo para escritura, las sentencias write y writeln sirven para escribir datos en el nuevo archivo.

    Sintaxis:

    Write (f,v1,v2,...);

    f es una variable tipo archivo.

    v1,v2,... son variables del tipo de datos.

    Ejemplos:

    1. Write (demo,Esto es una prueba de escritura);

    Writeln (demo,y esta es la siguiente prueba);

    2. Var NombreArch : string[60];

    archtex : text;

    ...

    ...

    Write (`Nombre de archivo);

    Readln (NombreArch);

    Assign (Archtex,NombreArch);

    Reset (Archtex);

    8.3.2.2 Lectura de un archivo

    La lectura de un archivo se efecta mediante las sentencias read o readln.

    Sintaxis:

    Read (f,v1,v2,...);

  • f es una variable tipo archivo.

    v1,v2,... son variables del tipo de datos.

    Ejemplo:

    Var

    Horas : Real;

    Archivo : Text;

    Mensaje : string [30];

    Begin

    Assign (Archivo,Demo);

    Reset (Archivo);

    ...

    ...

    Readln (Archivo,Mensaje,Horas);

    End.

    8.3.2.3 Cierre de un archivo

    Para cerrar un archivo se utiliza la siguiente sintaxis:

    Close (Nombrearchivo);

    35. Archivos de texto

    Un archivo de texto es un tipo estndar, como se ha comentado anteriormente. Consta de una serie de lneas separadas por una marca de fin de lnea (eoln, "end of line"). La marca de fin de lnea se obtiene pulsando la tecla Enter o bien la combinacin de teclas CTRL M.

    8.4.1 Declaracin de un archivo texto

    El formato general para declarar una variable tipo text es:

    Var

    NombreVariable : Text;

    Nombrevariable es cualquier nombre vlido de variable.

    La longitud de una variable tipo text NO se indica.

    8.4.2 Manipulacin de archivos de texto

  • Las operaciones de Assign, Rewrite y Reset se utilizan de igual forma que en los archivos tipificados.

    El procedimiento Append abre un archivo existente para aadir datos al final del mismo.

    La sintaxis es:

    Append (f)

    8.4.3 Funciones

    Algunas funciones son: Append, Read, Readln, Write y Writeln, Eoln y Eof.

    8.4.3.1 Eoln

    Devuelve el estado de fin de lnea de un archivo. Es una funcin tipo lgico.

    La sintaxis es:

    Eoln (var f: text);

    f es una variable de archivo de texto. Para llamar a la funcin se procede as:

    eoln (f)

    Devuelve true si en la posicin actual del archivo est la marca de fin de lnea o si eof (f) es true; caso contrario devuelve false.

    8.4.3.2 Eof (End of file)

    Devuelve el estado de un archivo de texto. Es de tipo lgico e indica si el fin de archivo se ha almacenado mediante true, caso contrario devuelve false. La sintaxis es la siguiente:

    Eof (var:text); eoln(f) llamada a la funcin

    Prctica

    1. Cree un archivo con sus datos personales: Cdula, nombre, direccin, telfono,email.

    2. Abra el archivo creado y agrguele cuatro registros ms con otros datos.

    3. Cree un archivo de nmeros enteros de 1 a 100, lalo y visualcelo en pantalla.

    36. Unidades en Turbo Pascal

    Introduccin

    9.1.1 Concepto

    Una unidad es un conjunto de constantes, tipos de datos variables, procedimientos y funciones. Cada unidad es como un programa independiente Pascal o bien una librera de declaraciones que se pueden poner en un programa y que permiten que ste se pueda dividir y compilar independientemente. Una unidad puede utilizar otras unidades y posee una parte que puede contener instrucciones de iniciacin.

  • Una unidad contiene uno o ms procedimientos, funciones constantes definidas y a veces otros elementos. Se puede compilar, probar y depurar una unidad independientemente de un programa principal. Una vez que una unidad ha sido compilada y depurada, no necesita compilarse ms veces, Turbo Pascal se encarga de enlazar la unidad al programa que utiliza esa unidad, empleando siempre en esta tarea menor tiempo que en la propia compilacin. Los procedimientos, funciones y constantes que se definen en una unidad pueden ser utilizados por cualquier futuro programa que escriba sin tener que ser declarados en el programa.

    Las unidades tienen una estructura similar a los programas y en consecuencia requieren un formato estricto, y es preciso declararlas por el usuario como si se tratara de un programa o subprograma.

    Turbo Pascal proporciona siete unidades estndar para el uso del programador: System, Graph, DOS, Crt, Printer, Turbo3 y Graph3. Las cinco primeras sirven para escribir sus programas y las dos ltimas para mantener compatibilidad con programas y archivos de datos creados con la versin 3.0 de Turbo Pascal. Las siete unidades estn almacenadas en el archivo TURBO/.TPL (librera de programas residente propia del programa Turbo Pascal). La versin 7.0 introdujo dos nuevas unidades WinDos y Strings.

    9.1.2 Estructura de una unidad

    Una unidad est constituida de cuatro partes: cabecera de la unidad, seccin de interface (interfaz), seccin implementation (implementacin) y seccin initialization (inicializacin).

    Formato:

    Unit

    Interface

    Uses ; (* opcional *)

    (* declaraciones pblicas de objetos *)

    Implementation

    (* declaraciones privadas *)

    (* definicin de procedimientos y funciones pblicos *)

    begin

    (* cdigo de inicializacin *) (* opcional *)

    end

    9.1.2.1 Cabecera de la unidad

    La cabecera de la unidad comienza con la palabra reservada unit, seguida por el nombre de la unidad (identificador vlido). Es similar a una cabecera de programa, donde la palabra reservada unit reemplaza a la palabra reservada program. Por ejemplo para crear una unidad denominada MiUnidad se ha de utilizar la cabecera de la unidad, as:

    Unit MiUnidad;

  • El nombre de la unidad es arbitrario, pero debe coincidir con el nombre del archivo que contiene. Por ejemplo, si la unidad se denomina Test

    Unit Test;

    El archivo que contiene el programa fuente de la unidad se debe llamar Test.PAS. Cuando turbo Pascal combina la unidad, le asigna la extensin TPU (Turbo Pascal Unit). Si el nombre de la unidad es diferente del nombre del archivo, el programa principal no podr encontrar el archivo TPU (Turbo Pascal Unit). Si el nombre de la unidad es diferente del nombre del archivo, el programa principal no podr encontrar el archivo TPU.

    Una unidad creada por el usuario puede utilizar otras unidades, siempre que se incluyan en la clusula uses que aparece inmediatamente despus de la palabra interface, y separadas por comas.

    9.1.2.2 Seccin de interfaz

    La seccin de interface (interfaz) es la parte de la unidad que sirve para conectar dicha unidad con otras unidades y programas. Esta seccin se conoce como "la parte pblica" de la unidad, ya que todos los objetos que figuren en esta seccin son visibles desde el exterior o exportables. Las restantes unidades y programas tienen acceso a la informacin contenida en la seccin de interface.

    En la interfaz de la unidad se pueden declarar constantes, tipos de datos, variables y procedimientos. Los procedimientos y funciones visibles a cualquier programa que utilice la unidad se declaran aqu, pero sus cuerpos, reales - implementaciones- se encuentran en la seccin de implementacin. La seccin de interfaz indica a un programador cules procedimientos y funciones se pueden utilizar en un programa. La seccin de implementacin indica al compilador cmo implementarlos.

    Ejemplo de declaracin

    Unit Rayo;

    Interface

    Uses

    DOS, Graph, Crt; (* se utilizan las unidades DOS, Graph y Crt *)

    Var

    a, b, c : integer;

    Function Exponencial (a, b : integer) : real;

    Procedure Dividir (x, y : integer; var cociente : integer);

    9.1.2.3 Seccin de implementacin

    La seccin de implementacin es estrictamente privada; su contenido no es exportable. Slo los procedimientos o funciones que aparecen en la seccin interface pueden ser invocados desde el exterior de la unidad. Esta seccin contiene el cuerpo de los procedimientos y funciones declarados en la seccin de interface.

    Unit Rayo;

  • Interface

    Function Exponencial (A, B : Integer) : Real;

    Procedure Dividir (X, Y : Integer; Var Cociente : Integer);

    Implementation Function Exponencial (A, B : Integer) : Real; Var

    P, I : Integer;

    Begin

    P := 1;

    For I := 1 to B do

    P := P * ;

    Exponencial := P

    End;

    Procedure Dividir (X, Y : Integer; Var Cociente : Integer);

    Begin

    Cociente := X div Y

    End;

    End.

    Ntese que la declaracin de una unidad est terminada por la palabra reservada End y un punto.

    9.1.2.3 Seccin de iniciacin

    La seccin de iniciacin puede contener instrucciones pero tambin puede estar vaca. Estas instrucciones sirven, por ejemplo, para iniciar variables. La ejecucin de estas instrucciones se efecta en el momento del lanzamiento o ejecucin de un programa que utiliza la unidad antes de la ejecucin de la primera instruccin del cuerpo del programa.

    En la seccin de iniciacin se inicializa cualquier estructura de datos (variables) que utilice la unidad y las hace disponibles (a travs del interface) al programa que las utiliza. Comienza con la palabra reservada begin seguida por una secuencia de sentencias y termina con "end. ".

    La seccin de iniciacin debe llamarse antes de que el cuerpo del programa se ejecute.

  • 37. Aplicacin Una unidad tiene una estructura muy similar a la de un programa.

    La clusula uses de la parte de interface slo es necesaria cuando la unidad actual llame a otras unidades. Todos los procedimientos y funciones en la seccin de interface deben ser definidos en la seccin de implementacin.

    La cabecera de los procedimientos y funciones declarados en la parte de interface deben ser idnticos a la cabecera de las mismas funciones definidas en la parte de implementacin; sin embargo, es posible escribir la cabecera en forma abreviada en la seccin de implementacin.

    Unit utilidad; (* este nombre de la unidad debe coincidir con el nombre del

    archivo de programa *) Interface

    Uses

    Wincrt, Printer;

    Procedure Frase (Texto : String);

    Implementation

    Uses

    Printer;

    Var

    MiVar : Integer

    Procedure Frase;

    Begin

    Clrscr;

    GotoXY ((80-Lenght (Texto)) div 2,1)

    Write (texto);

    End.

    Begin

    MiVar := 0

    End.

    Una vez que se dispone el cdigo fuente de una unidad, se compila de igual forma que un programa, pero el archivo obtenido no es ejecutable directamente. Tiene la extensin TPU (Turbo Pascal Unit).

  • Para utilizar esa unidad dentro de un programa, debe incluir una sentencia uses para indiciar al compilador que est utilizando esa unidad.

    ProgramPrueba;

    Uses Utilidad;

    Ejemplo:

    Escribir una unidad que conste a su vez de un procedimiento para intercambiar los valores de dos variables, as como calcular su valor mximo.

    Unit Demo1;

    Interface

    Procedure Intercambio (Var I,J : Integer);

    Function Mximo (I, J : Integer) : Integer;

    Implementation

    Procedure Intercambio;

    Var

    Aux : Integer;

    Begin

    Aux := I;

    I := J;

    J := Aux

    End;

    Function Mximo;

    Begin

    If I>J then

    Maximo := I

    Else

    Maximo :=J

    End;

    End.

  • Una vez que lo haya escrito, gurdelo en disco con el nombre de Demo1.PAS, a continuacin, complelo hacia el disco. El cdigo objeto se llamar Demo1.TPU. Esta unidad la utilizaremos en el siguiente programa:

    Program Prueba;

    Uses

    Demo1;

    Var

    X,Y : Integer;

    Begin

    Write (`Introducir dos nmeros enteros: `);

    Readln (X,Y);

    Intercambio (X,Y);

    Writeln (X, `,Y);

    Writeln (`El valor mximo es: `, Mximo (X,Y));

    End.

    38. Aplicaciones 9. 3. 1 Utilizacin de unidades estndar

    El archivo TURBO.TPL que contiene todas las unidades estndar se carga en memoria central a la vez que el propio compilador y est disponible en cualquier momento, con la ayuda de la clusula uses.

    Como se ha visto anteriormente, un programa debe contener la clusula uses, situada inmediatamente despus de la cabecera.

    9. 3. 1. 1 Unidad System

    Esta unidad contiene todos los procedimientos y funciones estndar de Turbo Pascal relativas a entradas/salidas, cadena de caracteres, gestin de memoria, etc.

    9. 3. 1. 2 Unidad Wincrt

    Esta unidad proporciona un conjunto especfico de declaraciones para entrada y salida: constantes, variables, procedimientos y funciones, que permiten el acceso al control de los modos de pantalla, al teclado, a los colores, al posicionamiento del cursor, etc.

    La mayora de los programas de Pascal que hacen uso de la pantalla para representar salidas recurren a la unidad Wincrt. Algunos procedimientos que necesitan de esta unidad son:

    Clrscr: Limpia la pantalla

  • KeyPressed: Detecta la pulsacin de una tecla

    Sound: Hace sonar el altavoz interno

    Window: Define una ventana de texto en la pantalla

    9. 3. 1. 3 Unidad WinDos

    Esta unidad contiene declaraciones, constantes, tipos, variables, procedimientos y funciones relacionadas con el sistema operativo DOS y la gestin de archivos. Los subprogramas que constituyen esta unidad no existen en Pascal estndar. Esta unidad no necesita ninguna otra unidad en su declaracin.

    Algunos procedimientos importantes son: GetTime, SetTime, DiskSize, GetAttr.

    Ejemplo:

    Visualizar la hora en la esquina superior derecha de la pantalla.

    Program Hora;

    Uses

    Wincrt,Windos;

    Var

    Horas, Minutos, Segundos, Centesimas : Word;

    Begin

    Clrscr;

    While not keypressed do

    Begin

    Gotoxy (64,1);

    GetTime(Horas, Minutos, Segundos, Centesimas);

    (* Hora reloj interno *)

    Writeln (Horas:2, `;, minutos:2,`:, Segundos:2,:,Centesimas:2)

    End

    End.