Sintaxis de Pascal

Embed Size (px)

Citation preview

  • 5/27/2018 Sintaxis de Pascal

    1/39

    Sintaxis y Semntica del Lenguaje

    Sintaxis y Semntica del LenguajeEl lenguaje Pascal

    Este apunte resume las componentes bsicas del lenguaje Pascal. Paraobtener mayor informacin se recomienda consultar la siguiente bibliografa:

    -. Programacin en TURBO Pascal Versiones 5.5, 6.0, 7.0. L. JoyanesAguilar, Segunda edicin. Ed. McGraw Hill-. Intermediate problem solving. Segunda edicin. Helman - Veroff

    Introduccin

    Pascal es un lenguaje que permite programar en forma estructurada y

    modularizada. Esto significa que es posible dividir al programa en mdulos(implementados utilizando procedimientos y funciones) y organizado de manera talque se pueda leer con facilidad. Esto ltimo tiene que ver con una buenaindentacin, comentarios, nombres mnemotcnicos, etc. Aunque estas ltimascaractersticas NO son imprescindibles en un programa Pascal, en la ctedra seexigir su cumplimiento.

    Tipos

    El lenguaje Pascal es tipado, lo que significa que casi1

    todas sus variablesdeben tener un tipo asignado explcitamente.El tipo de una variable determina el rango de valores que la misma puede

    contener y el conjunto de operaciones que se pueden aplicar sobre ella. En Pascalexisten tipos predefinidos (provistos por el lenguaje) y los definidos por elusuario.

    Tipos predefinidos

    Los tipos predefinidos son: Tipo entero Tipo real Tipo carcter Tipo lgico

    1Existen algunas excepciones que no se van a tratar aqu.

  • 5/27/2018 Sintaxis de Pascal

    2/39

    Sintaxis y Semntica del Lenguaje

    Tipo enteroUna variable de tipo entero (integer) ocupa, por lo general, 2 bytes2 de

    memoria y el rango de valores va desde -32768 a 32767. En realidad, existenotros 4 tipos de datos enteros, con diferentes rangos de valores:

    tipo Rango #bytesbyte 0..255 1shortint -128 ..127 1integer -32768..32767 2word 0..65535 2longint -2147483648.. 214748364 4

    Tipo realEl tipo real (real) est definido como punto flotante, es decir,

    fraccin*exponente. Turbo Pascal diferencia 3 tipos de flotantes:

    Tipo #bytessimple 4 bytesdoble 8 bytesextendido 10 bytes

    Tipo CarcterHay dos tipos de caracteres:

    Char: un nico carcter String: un conjunto de caracteres

    Este tipo de datos identifica letras, nmeros, signos de puntuacin y todosaquellos smbolos que aparecen en la tabla ASCII.Ejemplo:

    'a': el carcter a'la cadena': una cadena de caracteres1: el entero 1'1': el carcter 1

    El tipo string define cadenas de 255 caracteres (si pensamos que uncarcter en la mayora de las mquinas se almacena en un byte, entonces un stringocupar 255 bytes). Tambin es posible definir strings ms pequeos que 255.

    Ejemplo:string; define una cadena de 255 caracteresstring[20]: define una cadena de slo 20 caracteres

    2Esto depende tambin de la mquina / plataforma sobre la cual se est trabajando.

  • 5/27/2018 Sintaxis de Pascal

    3/39

    Sintaxis y Semntica del Lenguaje

    Tipo lgicoEn Pascal el tipo lgico (boolean) admite nicamente dos valores: true y

    false. Cualquier expresin lgica retorna valores de este tipo: verdadero o falso.

    OperacionesLo que se vio hasta ahora es la estructura que tiene los tipos predefinidos

    y el rango permitido de valores para cada uno, ahora se ver cules son lasoperaciones permitidas sobre cada tipo:

    OPERACIONES DE RELACIN: En todos los casos es posible realizar lasoperaciones de comparacin por menor, mayor, igualdad y desigualdad. (=, =, = o )

    OPERACIONES ARITMTICAS: Con los datos numricos (integer y real) esposible realizar las operaciones aritmticas: +, -, /, *.

    OPERACIONES LGICAS: Con los datos lgicos adems estn los operadoresAND, OR, NOT.

    OPERACIONES DE CONCATENACIN: Slo para los caracteres, y estrepresentada por el signo +.

    SubrangosA veces se necesitan variables que slo tomarn cierto rango de valores y

    no todo el permitido por el tipo. En estos casos, es posible acotar estos valoresespecificando slo el valor ms pequeo y el ms grande que dichas variablespueden tomar:

    constanteMenor.. constanteMayor

    Ejemplo:A..Z;1..100;

    Tipos definidos por el usuarioMuchas veces es necesario manejar informacin cuyo tipo no est provisto

    por el lenguaje. En este caso, pascal permite que el programador defina nuevostipos y los utilice luego. Un nuevo tipo se define utilizando la clusula type.

    Type nombreTipo = tipoExistente;

    Ejemplo:Type Edad = Integer;Type OtraEdad = 0..110;Type Cadena = string[30];

  • 5/27/2018 Sintaxis de Pascal

    4/39

    Sintaxis y Semntica del Lenguaje

    Los nombres de los tipos son indentificadores y, por lo tanto siguen lasreglas para nombrar identificadores que se detallan a continuacin.

    Identificadores

    Los identificadores en Pascal comienzan siempre con una letra (a..z,A..Z) ocon el smbolo _. y el resto pueden ser cualquier letra, _ y/o dgitos. Con unidentificador no solo hacemos referencia a un nombre de variable, sino quetambin a nombre de tipos, procedimientos, funciones, etc.

    Las letras maysculas y minsculas se consideran sin distincin y puedentener cualquier longitud.

    Declaracin de variables

    Todos los identificadores que se utilicen en un programa Pascal se DEBENdeclarar ANTES de su uso.

    Las variables se declaran utilizando la sentencia var.

    varx:integer define una variable denominada x de tipo integer.

    y: boolean define una variable denominada y de tipo boolean.z: 0..110 define una variable denominada z de tipo integer que slo

    puede tomar los valores de 0 a 110.

    E: Edad define una variable denominada e del tipo Edad (definidoanteriormente)

    E1:otraEdad define una variable denominada e1 del tipo otraEdad(definido anteriormente)

    Asignacin en Pascal

    La asignacin es el mecanismo por el cual se liga una variable a un valordeterminado. En Pascal la asignacin se representa por la operacin ":=".

    Ejemplo:a := 10;cad := 'esta es una cadena';

  • 5/27/2018 Sintaxis de Pascal

    5/39

    Sintaxis y Semntica del Lenguaje

    Estructuras de Control en Pascal

    En Pascal existen sentencias simples y compuestas. Las sentenciascompuestas se encierran entre las palabras claves begin-end.

    En esta seccin se detallarn cmo se definen en Pascal las estructuras decontrol.

    Sentencias CondicionalesPermiten realizar selecciones en el flujo de control del programa. Hay dos

    tipos de selecciones: Selecciones simples (if) Selecciones mltiples (case)

    Sentencias if

    Su forma general es:

    ifexpresinthen sentencia1else sentencia2

    donde:expresin es una expresin lgica que retorna true o false

    sentencia1 y sentencia2 son sentencias Pascal simples o compuestas.DESCRIPCIN:

    sentencia1 se ejecuta slo si expresin es verdadera, en casocontrario se ejecutar sentencia2

    NOTA: el else es opcional y NO hay cierre de la sentencia;

    Ejemplo:1) if num>10 then a:=a+1

    else a:=a-1;

    2) if num>10 then x:=x+1;

    Sentencia Case

    Su forma general es:case expresin

    Valor:sentenciasValor1, valor2:sentenciasValor3..valor4:sentencias;

  • 5/27/2018 Sintaxis de Pascal

    6/39

    Sintaxis y Semntica del Lenguaje

    Valor 5..valor6, valor7:sentenciaselsesentencias

    end;

    DESCRIPCIN

    : Permite elegir entre varias alternativas sin tener que anidar muchassentencias if. Consiste de una expresin que puede ser de cualquiertipo ordinal (con orden) y una lista de sentencias cada unaprecedidas por uno o ms valores del mismo tipo que la expresin. Deacuerdo al valor de la expresin se ejecutar aquella sentencia quecoincida con dicho valor. Si ninguna de las sentencias coincide, no seejecuta ninguna y se sigue en la instruccin siguiente al fin del case.Existe una clusula opcional, el else, con la cual, se generalizan todoslos valores no discriminados en el case:

    NOTA: el else es opcional y en este caso se cierra con el end final.

    Ejemplo:1) case sexo of

    f, F: mujeres:= mujeres +1m, M: varones := varones +1

    end;

    2) case edad of0..2: bebes := bebes +13..11: ninios:= ninios +112..17: adolescentes := adolescentes + 1else: adultos:=adultos+1

    end;

    Sentencias de Repeticin

    Estas sentencias permiten iterar o repetir una o ms sentencias. Existen

    tres diferentes sentencias: while repeat until for

    Sentencia while

    Su forma general es:

    while expresin dosentencia { puede ser simple o compuesta }

  • 5/27/2018 Sintaxis de Pascal

    7/39

    Sintaxis y Semntica del Lenguaje

    DESCRIPCIN:sentencia se ejecuta siempre que expresin sea verdadera. Cuandoes falsa, la iteracin termina y continua en la instruccin siguiente

    Ejemplo:............while num>0

    do num:= num-1;............

    Sentencia repeat until

    Su forma general es:

    repeatsentencia1sentencia2.....

    until expresin

    DESCRIPCIN:Antes de evaluar la expresin se ejecutan las sentencias encerradasen la instruccin y a continuacin se evala la expresin paradeterminar su valor de verdad. Si el verdadera, se vuelven aejecutar las sentencias, y si es falsa, la iteracin termina y continuaen la instruccin siguiente

    Ejemplo:............repeat

    num:= num-1;until num

  • 5/27/2018 Sintaxis de Pascal

    8/39

    Sintaxis y Semntica del Lenguaje

    Su forma general es:

    for ndice:= exp1 to exp2do sentencia { puede ser simple o compuesta}

    donde:la variable ndice es de algn tipo escalar (entero, char, boolean o

    enumerativo) y exp1 y exp2 deben ser del mismo tipo que ndice. La variable ndicese incrementa de a 1 (uno) despus de cada ejecucin del for. Se puededecrementar con downto en vez de to.

    DESCRIPCIN:Bsicamente se ejecuta un conjunto de sentencias un nmero finitode veces, mientras que una variable (el ndice o variable de control)

    pasa a travs de un rango de valores

    Ejemplo:............for i:=1 to 10 do x:=x+1;............

    Estructura de un programa Pascal

    Un programa Pascal est formado por los tipos, variables, procedimientos yfunciones que se necesitan para dicho programa. Todo objeto referenciado en elprograma debe estar declarado con anterioridad. El orden en el cual se declaranlos identificadores, no necesariamente debe ser el siguiente pero la ctedra lorecomienda.

    program nombre;{ para trabajar con unidades compiladas en forma separada}uses{ definicin de constantes}

    const{ declaracin de tipos definidos por el usuario}type{ declaracin de variables}var{ definicin de procedimientos y funciones}

    begin{ Cuerpo del programa}end.

  • 5/27/2018 Sintaxis de Pascal

    9/39

    Sintaxis y Semntica del Lenguaje

    Procedimientos y funciones

    Una de las formas de encarar un problema es descomponerlo en problemas omdulos ms pequeos y ms sencillos de implementar. En Pascal, estos mdulos se

    implementan mediante procedimientos y funciones. Tanto un procedimiento comouna funcin son subprogramas que realizan alguna tarea especifica.Las diferencias entre ellos son:

    Las funciones devuelven un nico valor a la unidad que la llamo (elprograma principal o un procedimiento o funcin) En cambio losprocedimientos pueden retornar 0, 1 o ms valores.

    Una funcin se referencia utilizando su nombre en una expresin,mientras que un procedimiento se referencia por una llamada oinvocacin.

    ProcedimientosLa forma general de declararlos es

    procedure nombreProc (lista de parmetros formales){ declaraciones locales }

    begin{ cuerpo del procedimiento }

    end;

    Se lo invoca en el programa principal o en otros subprogramas por sunombre:

    NombreProc;

    nombreProc(parmetros reales);

    Cuando se lo invoca, se localiza el procedimiento y se ejecutan lasinstrucciones del cuerpo, luego el control vuelve a la instruccin siguiente de dondese lo invoco.

    Ejemplo:program demo;...procedure A;

    beginend;

    ....begin......A;.....end.

    Definicin del procedimiento A

    Invocacin del procedimiento A

  • 5/27/2018 Sintaxis de Pascal

    10/39

    Sintaxis y Semntica del Lenguaje

    Que ventajas tiene la utilizacin de procedimientos?

    Ahorro de lneas de cdigo: no repetir cdigo en el mismo programa Reusabilidad: utilizar el mismo cdigo en distintos programas. Utilizarlos

    como un caja negra que acepta determinadas entradas y producedeterminadas salidas. Modularidad: se divide un problema en tareas o mdulos ms pequeos que

    pueden ser testados en forma separada.

    ParmetrosMarcan la comunicacin entre los procedimiento. Debe existir una

    correspondencia entre los parmetros reales y formales.(en numero, orden y tipo)

    Ejemplo:

    Program demoParametros;procedure UNO(a: integer, b:real)beginend;

    varx: integer;

    y: real;begin

    UNO(x); { incorrecta }UNO(y); { incorrecta }UNO(y,x); { incorrecta }

    UNO(x,y) { correcta }end.

    Pascal posee dos tipos de pasaje de parmetros: por valor o por referencia

    Por valor: En la llamada al procedimiento el valor del parmetro real se copia en elparmetro formal y si el parmetro forma se modifica el parmetro real no.Por referencia: lo que se pasa es la direccin del parmetro real, por lo tantocualquier modificacin del parmetro formal quedara reflejado en el parmetroreal.

    Ejemplo:Program demoReferencia;

    procedure DOS(var a:integer)begin

    a:= a+1;end;var x:integer;begin

    x:=4;

    DOS(x);end;

  • 5/27/2018 Sintaxis de Pascal

    11/39

    Sintaxis y Semntica del Lenguaje

    En la teora se explicarn detalladamente las diferencias.Otro ejemplo de pasaje de parmetros:

    program OtroEjemplo;var a, b : integer;procedure Cambio(x,y : integer)var

    z:integer;begin

    z:=x;x:=y;

    y:=z;end;

    begin writeln(Ingrese dos nmeros);readln(a,b);Cambiar(a,b);writeln(El primer numero que ingreso fue,a);writeln(El segundo numero fue,b);

    end.

    Si este programa intenta intercambiar los valores ledos por teclado, lohace realmente? Corregirlo.

    Cundo se debe utilizar parmetros por valor y cundo por referencia?

    Si la informacin que se pasa al procedimiento no tiene que ser devueltafuera del procedimiento, el parmetro formal que representa la informacinpuede ser un parmetro valor (parmetro de entrada)

    Si se tiene que devolver informacin al programa llamador, el parmetroformal que representa esa informacin debe ser un parmetro porreferencia (parmetro salida)

    Si la informacin que se pasa al procedimiento puede ser modificada y sedevuelve un nuevo valor, el parmetro formal que representa esainformacin debe ser un parmetro por referencia (parmetro entrada \salida)

    FuncionesExisten funciones predefinidas por el lenguaje que se pueden utilizar en

    expresiones: Ord(), Abs(), Sin(), etc.El usuario puede definir sus propias funciones de igual forma que los

    procedimientos.

  • 5/27/2018 Sintaxis de Pascal

    12/39

    Sintaxis y Semntica del Lenguaje

    function nombre(parmetros):tipo{ declaraciones locales}begin

    cuerpo de la funcinnombre:= valor de la funcinend;

    El nombre de la funcin se refiere a la posicin de memoria que contiene elvalor devuelto por la misma.

    El tipo de datos del resultado debe coincidir con el tipo declarado en lacabecera de la funcin.

    La asignacin ultima siempre debe existir.No debe realizar ninguna otra tarea que calcular el valor del tipo del

    nombre. (para no tener efectos laterales)Ej:function triple (num : real) : realbegin

    triple := 3*num;end;

    Variables locales y globales

    Las variables que intervienen en un programa con procedimientos pueden

    ser de dos tipos: locales y globales.

    Una variable local es aquella que est declarada dentro de un subprograma yse dice que es local al subprograma. Una variable local slo est disponible duranteel funcionamiento del mismo.

    Las variables declaradas en el programa principal se denominan variablesglobales. A diferencia de las variables locales cuyos valores se pueden utilizar slodentro del subprograma en que estn declaradas, las variables globales pueden serutilizadas en el programa principal y en todos los subprogramas declarados en l.

    program variablesLocYGlob;var x,y:integer;procedure A(x:integer)var

    z:integer;begin

    end;begin

    ..........

    end.

  • 5/27/2018 Sintaxis de Pascal

    13/39

    Sintaxis y Semntica del Lenguaje

    En el caso de que coincidan en un mismo programa, dos variable con unmismo nombre, una global y otra local, la variable local enmascara a la global.

    Efectos laterales

    Pascal permite a los subprogramas (procedimiento y funciones) modificar elvalor de las variables globales que no son parmetros reales o actuales.

    Ejemplo:......var m:integer;procedure MalaPrctica;begin

    writeln(Introduzca un numero);readln(m);

    end;

    ......

    Este ejemplo no da ningn error de compilacin ni en ejecucin. En otraspalabras, esto est permitido en Pascal. El valor de m se modifica dentro delprocedimiento y, por consiguiente si a partir de ah se utiliza en el programallamador, tomar ese ltimo valor.

    Un efecto lateral es la accin de modificar el valor de una variable globalen un subprograma.

    No se recomienda que un programa produzca efectos laterales. Por qu?

    Ejemplo: (Pensar qu sucede en el siguiente ejemplo)programEfectosLaterales;var

    j:integer;

    procedure Lateral;begin

    for j:= 1 to 100do writeln(J ahora vale, j);

    end;

    beginj:= 8;writeln(j); { se visualiza 8 }Lateral;writeln(j); { se visualiza 100 }

    end.

    La interaccin o comunicacin entre un procedimiento / funcin y elprograma (o subprograma) debe realizarse completamente a travs de los

    parmetros y no de variables globales.

  • 5/27/2018 Sintaxis de Pascal

    14/39

    Sintaxis y Semntica del Lenguaje

    mbito o alcance de un identificador

    Los programas Pascal tienen estructura tipo rbol. El programa principal es

    la raz y de ste penden muchas ramas (procedimiento y funciones).Ejemplo:

    program Principal;procedure A;

    procedure C;beginend;procedure D;beginend;

    beginend;procedure B;beginend;

    beginend.

    Un programa puede contener diferentes bloques (procedimiento yfunciones) y un procedimiento puede, a su vez contiene otros procedimientos

    anidados.La organizacin de los procedimientos se representa tambin como bloques

    de programa. Un bloque es la parte de declaracin y el cuerpo de programa oprocedimiento.

    De esta manera, el programa anterior puede verse como:

    Los bloques en los que un identificador puede ser utilizado se conocen comombito o alcance. El alcance es la seccin de programa en la que un identificador esvlido, y donde puede ser referenciado.

    Reglas de alcance de Pascal:

    Principal

    A B

    C D

  • 5/27/2018 Sintaxis de Pascal

    15/39

    Sintaxis y Semntica del Lenguaje

    1.- Un identificador declarado en un bloque P, puede ser utilizado en P y entodos los procedimientos y funciones anidados en l.

    2.- Si un identificador j declarado en el procedimiento P se redeclara enalgn procedimiento interno Q (encerrado en P), entonces el procedimiento Q y

    todos los encerrados en l no pertenecen al alcance de j.Ejemplo:

    program EjemploAnidado;const

    k=2.71828;var

    x,y:real;

    procedure A (var x:real)

    varm,n:integer;

    procedure B(w:real);var

    p,q :integer;begin...end;

    begin....end;procedure C(var letra:char);

    constIVA= 21;

    varx:char;

    begin...end;

    begin

    ...end.

    La constante k declarada en el programa principal tiene alcance en todo elprograma. La variable x es una variable global pero est redefinida en losprocedimientos A y C, por lo tanto tiene alcance slo en el programa principal y enel procedimiento B.

    Ejercicio: Marcar el alcance de todas las variables del ejercicio anterior.

  • 5/27/2018 Sintaxis de Pascal

    16/39

    Sintaxis y Semntica del Lenguaje

    Las reglas de alcance no se definen nicamente para el uso de variables. Enellas se habla de "identificadores" y esto abarca tambin a los nombres de losprocedimientos y funciones.

    Ejemplo:program Aprocedure B

    procedure Cbeginend;

    beginend;

    procedure D;procedure E

    beginend;procedure Bbeginend;

    beginend;

    beginend.

    Ejercicio: Marcar los alcances de todos los identificadores.

    Arreglos

    Un arreglo es un conjunto de elementos de un mismo tipo. Tiene un tamaofijo que NO puede excederse. Se puede acceder a sus elementos en cualquierorden (acceso directo y aleatorio)

    La forma de definirlo es:

    type arreglo = array[1..7] of real;

    varmaxTem : arreglo;

    varotroArreglo : array[1..10] of integer;

  • 5/27/2018 Sintaxis de Pascal

    17/39

    Sintaxis y Semntica del Lenguaje

    Se puede acceder directamente a un elemento del arreglo mediante unaexpresin llamada ndice encerrado entre corchetes.

    Ejemplo:

    maxTemp[5] : hace referencia al 5 elemento dentro del arreglo maxTemp.Si k es una variable entera cuyo valor es 5, entonces maxTemp[k] seala el

    5 elemento y maxTemp[k+1] el 6.

    Ejercicio:Inicializar el arreglo anterior con un valor determinado

    Tipos de los ndicesComo vemos, los ndices en un arreglo de tipo arreglo deben ser integer (de

    1 a 7). En general, los ndices deben ser de tipo de datos ordinales (con orden)

    como los enumerativos, por ejemplo. (los char, integer, etc.)

    typedias = ( DOM, LUN, MAR, MIE, JUE, VIE, SAB);arre1 = array [dias] of real;arre2 = array[a..z] of integer;

    vartemp. : arre1;codigo : arre2;

    temp, es otro arreglo de 7 elementos reales que NO tienen ndice reales(temps[MAR] es el 3 elemento de temp).

    Arreglos multidimensionalesSi se quiere generar las temperaturas mnimas de cada da de la semana

    durante 52 semanas (1 ao) se puede utilizar una matriz:

    type

    matriz = array[1..7,1.52] of real;

    vartempMin : matriz; { 7 filas por 52 columnas }

    tempMin[5,12] indica el elemento de la fila 5 y columna 12

    Esto se generaliza a ms dimensiones. Aunque en la prctica slo se utilizahasta 3 (Tensores).

    Arreglos de arreglos

  • 5/27/2018 Sintaxis de Pascal

    18/39

    Sintaxis y Semntica del Lenguaje

    En vez de declara un arreglo e dos dimensiones para las 52 semanas, sepuede declarar un arreglo de una sola dimensin de 52 arreglos de 7 elementos.

    type

    semanas = array[1..7] of real;tempAnuales = array[1..52] of semanas;

    vartemps : tempsAnuales;

    Aqu, temps[12] es una arreglo de 7 temperaturas correspondiente a las 12semana. Si pensamos en la informacin dividida en semanas individuales, estaestructura es ms adecuada que la otra. Para referenciar el 5 da de la semana 12:

    temps[12][5]

    Ejercicio:Inicializar el arreglo anterior con un valor determinado

    Podemos tener array de strings, integer, char, etc.

    Registros

    Mientras que un arreglo es una coleccin de elementos del mismo tiempo, unregistro es un grupo de tems relacionados que no necesariamente son del mismo

    tipo. Cada tem del registro se denomina campo.

    En forma general un registro en Pascal se define:record

    campo_1: tipo;campo_2: tipo;......campo_n: tipo;

    end;

    typeAlumno = record

    Nombre : string[30];Legajo : integer;Prom : real;end;

    varalu : Alumno;

  • 5/27/2018 Sintaxis de Pascal

    19/39

    Sintaxis y Semntica del Lenguaje

    Para referenciar un campo dentro del registro se debe calificar utilizandoel punto ( .) seguido por el identificador de campo.

    Ejemplo:

    alu.legajo := 12345;Se puede copiar un registro entero a otro.

    vara1, a2 : Alumno;.........a1 := a2;

    La sentencia WithPermite referir cada campo con solamente el identificador utilizando la

    sentencia with.ej:with a1 do

    beginnombre := Carlos Fernandez;legajo := 12345;prom := 4.50;

    end;

    Fuera del with se debe calificar el identificador de campo.

    writeln(a1.nombre, tiene promedio , a1.prom);

    NOTA:Si las sentencias dentro del with son muchas, se puede perder legibilidadporque se ven a los identificadores de campo como variables libres y, por lo tanto.se debe restringir el uso a pocas lneas.

    Registro dentro de registrosA veces es bueno tener un registro dentro de otro, para independizar

    datos. Por ejemplo si se quiere agregar al reg. del alumno un campo direccin(calle, numCasa y ciudad)type

    direccin = recordcalle : string[20];numCasa: integer;ciudad: string[20];

    end;Alumno = record

    nombre : string[20];

    legajo : integer;dir : direccin;

  • 5/27/2018 Sintaxis de Pascal

    20/39

    Sintaxis y Semntica del Lenguaje

    prom : real;end;

    var

    alu : Alumno;Cmo se referencia el campo calle dentro de alumno?

    alu.dir.calle

    Arreglo de registrosSi se quiere tener la informacin de los estudiantes correspondientes a una

    clase determinada, se podra definir el siguiente tipo de datos:

    type clase = array (1..90) of Alumno;

    varclase1: Clase;

    clase1[9].nombre : es el nombre del 9no. registro.clase1[9].nombre[1] : es la primera letra del campo nombre del 9 registro.clase1[9].dir.ciudad : es el campo ciudad del 9no. registro.

    Archivos

    A diferencia de los otros tipos de datos, los datos guardados en un archivoson permanentes, es decir, siguen existiendo despus que el programa termina suejecucin. De esta manera, pueden ser compartidos por varios programas.

    Un archivo es una coleccin de informacin (datos relacionados entre s)localizada o almacenada como una unidad en alguna parte de la computadora(memoria externa) A diferencia de los arreglos y registros, el tamao de estacoleccin no es fija y est limitado por la cantidad de memoria secundaria (disco o

    cinta) disponible. Es decir, los archivos son dinmicos, en cambio los registros oarreglos son estructuras estticas3.

    Los archivos permiten la comunicacin entre programas: un programa Apuede escribir su salida en un archivo y un programa B puede usarlo como entrada.

    3 Cuando se declara un arreglo se deben especificar el tamao (los lmites) que ocupar estaestructura. Lo mismo sucede con los registros, en donde se detallan cada uno de los campos que locompone en forma esttica. En cambio cuando se declara un archivo no se especifica ningn tamao. Amedida que se van agregando datos, el tamao se va incrementando dinmicamente (en memoria

    externa)

  • 5/27/2018 Sintaxis de Pascal

    21/39

    Sintaxis y Semntica del Lenguaje

    Modo de accesoExisten dos modalidades para acceder a un archivo:

    en forma secuencial: comenzando por el primero, se tratan loselementos en forma secuencial

    en forma aleatoria (acceso directo): se puede acceder a unelemento directamente a travs de su posicin.

    Pascal estndar slo permite acceso secuencial a los archivos, pero el TurboPascal tambin permite acceso directo.

    Archivos en Pascal

    Existen tres tipos de archivos en Turbo Pascal: Texto (text): con acceso secuencial. Tipados (con datos de un tipo especfico): con acceso aleatorio No tipados (con datos sin un tipo especficos: estos NO se tratarn en lamateria.

    Mecanismos para manipular archivosExisten varios procedimientos y funciones predefinidos en Pascal para

    trabajar con archivos. En este apunte slo se resumirn brevemente y serecomienda consultar la bibliografa para ms informacin:

    Por lo general, la secuencia de operaciones que se realizan con los archivoses la siguiente:

    1. Asignacin2. Apertura3. Tratamiento4. Cierre

    La secuencia anterior es vlida tanto para archivos de datos como paraarchivos de texto, pero las operaciones en cada caso, si bien se denominan de lamisma manera su funcionamiento y operacin no lo es. Por lo tanto se har unadistincin entre los distintos tipos de archivos: de texto y de datos.

    Archivos de TextoDeclaracin

    En forma general un archivo se declara:

    type texto:text;var archi: texto;

    archi1: text;

    ASIGNACIN DE ARCHIVOSPermite ligar un variable del programa de tipo archivo con un archivo

    externo (en el disco).

  • 5/27/2018 Sintaxis de Pascal

    22/39

    Sintaxis y Semntica del Lenguaje

    assign (nombreVariableArchivo, nombreExternoArchivo)

    nombreVariableArchivo: es el nombre del archivo dentro del programa (el utilizado

    en su declaracin)nombreExternoArchivo: es el nombre con el que se conoce el archivo por elsistema operativo (ejemplo: c:\sintaxis\trabajos\tp1.txt).

    Ejemplo:......

    var archivotexto: text archivo de textobegin

    assign(archivotexto, 'c:\sintaxis\trabajos\tp1.txt');....

    end;........

    APERTURA DEL ARCHIVODespus de ser asignado, el archivo debe ser abierto. Esto es posible

    utilizando uno de los tres procedimientos predefinidos: reset, rewrite y append.Reset: abre un archivo existente para lectura.Rewrite: crea y abre un nuevo archivo. Si el archivo ya existe, borra su

    contenido.Append: abre el archivo para escritura, pero slo para aadir al final.

    En cualquier caso es posible testear si se produjo algn error en lasoperaciones anteriores mediante la funcin IOResult4.

    LECTURA DE UN ARCHIVOSe refiere a la recuperacin de datos del archivo. Las operaciones para

    leer datos son read y readln5.

    Forma general:

    Read (archi, nomVar1, nomVar2, ....):

    Lee informacin del archivo archi y la almacena en las variables nomVar1,nomVar2, etc. Estas variables pueden ser del tipo char, integer, real o string.

    Ejemplo:............

    var archivo: text;linea: string[30];

    4Consultar la bibliografa para ms detalle.

    5ReadLn salta al principio de la siguiente lnea del archivo.

  • 5/27/2018 Sintaxis de Pascal

    23/39

    Sintaxis y Semntica del Lenguaje

    x: integer;begin

    assign(archivo, 'prueba1');reset(archivo);

    .....

    readLn(archivo, linea, x);.....end;

    ............

    ESCRITURA DE UN ARCHIVOSe refiere a la insercin de datos en el archivo. Las operaciones para leer

    datos son write y writeln6.

    Forma general:

    write (archi, nomVar1, nomVar2, ....):

    Escribe el contenido de nomVar1, nomVar2, etc. en el archivo archi. Estasvariables pueden ser del tipo char, integer, real o string.

    Ejemplo:......

    var archivo: text;linea: string[30];

    x: integer;.....

    writeln(archivo, linea, x);.....

    end;.......

    Aclaracin:

    El uso de write y writeln en archivos de texto es exactamente el mismo que

    el usado para mandar informacin a la pantalla. En realidad, en este caso se utilizaun archivo de texto predefinido denominado output (archivo estndar de salida)que se lo liga a la pantalla por defecto. Lo mismo sucede con la operacin read.Existe otro archivo predefinido, denominado input (archivo estndar de entrada)asociado al teclado.

    CIERRE DE UN ARCHIVOLa operacin para cerrar el archivo es close.

    Close (nombreArchivo)

    6WriteLn salta al principio de la siguiente lnea del archivo.

  • 5/27/2018 Sintaxis de Pascal

    24/39

    Sintaxis y Semntica del Lenguaje

    Funcin EOF()Es posible preguntar por fin de archivo (smbolo especial EOF) para

    testear cuando se termin o finaliza el archivo. Esto es lo que sigue a la ltima

    componente del archivo. Esta funcin retorna el valor true si se encuentra sealcanz el fin de archivo y false en caso contrario.Cuando se abre un archivo, un puntero indica la posicin del registro actual

    dentro del mismo. En este caso sealar la posicin cero (0). A medida que serealizan operaciones de lectura (o escritura) este puntero avanza a las siguientesposiciones hasta alcanzar la marca de fin de archivo.

    0 1 2 3 4 5 EOF

    Manejo simple de archivos de texto - Un ejemplo

    Supongamos que existe en el disco un archivo denominada entrada.txt yquiero copiar su contenido a otro archivo denominado salida.txt.

    program copioArchivo;var

    archiE, archiS: Text;linea: string[80];

    beginassign(archiE, 'c: \sintaxis\entrada.txt');assign(archiS, 'c: \sintaxis\salida.txt');reset(archiE);rewrite(archiS);while not eof(archiE)

    do beginreadLn(archiE,linea);writeLn(archiS,linea);

    end;

    close(archiE);close(archiS);

    end.

    Archivos de Datos

    DeclaracinEn forma general un archivo de datos se declara:

    file of tipoDeDatos

  • 5/27/2018 Sintaxis de Pascal

    25/39

    Sintaxis y Semntica del Lenguaje

    donde tipoDeDatos puede ser cualquier tipo predefinido o definido por el usuario.

    Puedo tener archivos de enteros, de caracteres, de registros, etc.

    var arch_Enteros : file of integer;arch_Notas : file of char

    Tambin es posible declarar un tipo archivo:type

    Item = recordnombre,domicilio : string[20];TE : string[15];

    end;AgendaTelefonica = file of Item;

    LECTURA DE UN ARCHIVOLa operacin para leer datos del archivo es read.

    Forma general:

    Read (archi, nomVar1, nomVar2, ....):

    Lee informacin del archivo archi y la almacena en las variables nomVar1,nomVar2, etc. Estas variables deben ser del mismo tipo que el archivo.Ejemplo:.........

    var archivo : file of integer;x, y : integer;

    beginassign(archivo, 'prueba2');reset(archivo);

    .....

    read(archivo, x, y);.....

    end;..........ESCRITURA DE UN ARCHIVO

    La operacin para escribir datos es write.

    Forma general:

    write(archi, expresion1, expresion2, ....):

  • 5/27/2018 Sintaxis de Pascal

    26/39

    Sintaxis y Semntica del Lenguaje

    Se almacena la informacin dada por expresion1, expresion2, etc, en elarchivo archi. Las expresiones anteriores deben ser del mismo tipo que el archivo.

    Ejemplo:var archivo : file of integer;

    x, y : integer;begin

    assign(archivo, 'prueba2');rewrite(archivo);

    .....write(archivo, x, y, 10);

    .....end;

    CIERRE DE UN ARCHIVO

    La operacin para cerrar el archivo es close.

    Close (nombreArchivo)

    Manejo simple de archivos de datos- Un ejemplo

    Este programa lee datos de alumnos de un archivo e imprime la cantidad dealumnos por comisin. Se supone que hay 100 comisiones y los alumnos tienenasignado un nmero de comisin entre 1 y 100.

    program promedio_de_alumnos;const

    MAX_ALUMNOS = 100;type

    Alumno = recordnyap : string[30];nroLegajo : integer;comision : 1..MAX_ALUMNOS;

    end;

    Archi_Alumnos = file of Alumnos;

    varal : Alumnos;archi : Archi_Alumnos;comisiones : array [1..MAX_ALUMNOS] of integer;

    beginAssign(archi, 'c: \sintaxis\datos.dat');Reset(archi);for i:=1 to MAX_ALUMNOS

    do comisiones[I]:=0;while not eof(archi)

    do begin

  • 5/27/2018 Sintaxis de Pascal

    27/39

    Sintaxis y Semntica del Lenguaje

    read(archi,al);comisiones[al.comision]:= comisiones[al.comision] +1;

    end;close(archi);for i:= 1 to MAX_ALUMNOS

    do if comisiones[I]0then writeln(La comisin,i,tiene , comisiones[i], alumnos)end.

    Operaciones para el acceso aleatorio

    En Turbo Pascal existe un conjunto de operaciones predefinidas para poderacceder en forma directa a alguna componente del archivo de datos.

    PROCEDIMIENTO SEEK: permite posicionar el puntero del archivo en una posicindeterminada.

    Seek (archivo, nmeroRegistro)Suponiendo que el primer registro del archivo es el cero (0) , entonces

    nmeroRegistro es un valor entre 0 y la cantidad de elementos del archivo.

    Ejemplo:

    Seek (agenda, 5) mueve el puntero al sexto registro (se comienza desdeel 0!!)

    FUNCIN FILEPOS:Devuelve la posicin actual del archivo (nmero de registro) enforma de un longint. Si est al principio del mismo, devuelve cero (0)

    Filepos(archivo);

    FUNCIN FILESIZE:Devuelve la cantidad de registros del archivo Si el archivoest vaco devuelve cero (0).

    Filesize(archivo);

    Resumen:

    A continuacin se detallan la lista de operaciones para manipular archivos enPascal.

    Operacin Descripcin ObservacinAssign Permite ligar la variable

    dentro del programa conel archivo fsico en el

    Aplicado tanto a archivosde texto como de datos.

  • 5/27/2018 Sintaxis de Pascal

    28/39

    Sintaxis y Semntica del Lenguaje

    discoReset Permite abrir un archivo

    para lectura/escrituraAplicado tanto a archivosde texto7como de datos

    Rewrite Permite abrir un archivo

    para escritura

    Aplicado tanto a archivos

    de texto como de datos.Append Permite abrir un archivopara escritura (paraaadir al final)

    Slo archivos de texto.

    Read Permite leer datos de unarchivo

    Aplicado tanto a archivosde texto como de datos.

    Readln Idem read, solo que saltaa la lnea siguiente

    Slo archivos de texto.

    Write Permite grabar datos a unarchivo

    Aplicado tanto a archivosde texto como de datos.

    WriteLn Idem read, solo que saltaa la lnea siguiente

    Slo archivos de texto.

    Eof Permite testear el fin dearchivo

    Aplicado tanto a archivosde texto como de datos.

    Eol Permite testear por fin delnea

    Slo archivos de texto.

    Seek Permite posicionarse en unnmero de registrodeterminado

    Slo archivos de datos

    Filepos Permite conocer el nmerode registro actual Slo archivos de datos

    Filesize Permite conocer lacantidad de registros delarchivo

    Slo archivos de datos

    Close Cierra un archivopreviamente abierto.

    Aplicado tanto a archivosde texto como de datos.

    Manejo de archivos de datos con acceso directo- Un ejemplo

    El siguiente ejemplo se encuentra disponible en el libro de Joyanez Aguilar(pg. 521) en forma completa. En esta seccin slo se har nfasis en lamanipulacin del archivo en forma directa.

    Enunciado:Se dispone de un archivo (ya creado) de estudiantes de un instituto. La

    informacin que se cuenta en el archivo es la siguiente:

    7Si es de tipo text solo lectura.

  • 5/27/2018 Sintaxis de Pascal

    29/39

    Sintaxis y Semntica del Lenguaje

    Nombre del alumno, domicilio y edad.

    Se quiere realizar un programa que realice altas, bajas, modificaciones y

    consultas a este archivo.

    Implementacin en Pascal

    program accesoAleatorio;uses Crt;type

    Cadena = string [40];Domicilio= record

    calle : string [20];

    numero: integer;ciudad: string[20];end;

    Alumno = recordnombre : cadena;edad : 0..99;dom : Domicilio;

    end;ArchivoAlumnos = file of Alumno;

    var

    archi : ArchivoAlumnos;opcion : char;

    procedure LeerRegistro(var alu: Alumno);begin

    with alu dobegin

    writeln('Nombre: '); readLn(nombre);writeln('Edad: '); readLn(edad);writeln(Domicilio - Calle: '); readLn(dom.calle);writeln(Domicilio - Nmero: '); readLn(dom.numero);writeln(Domicilio - Ciudad: '); readLn(dom.ciudad);

    end;end;function Posicion( nom: cadena; var archi: ArchivoAlumnos) : integer;var reg: Alumno;

    esta: boolean;begin

    esta:= false;seek(archi, 0);while not wof(archi) and not esta

    do begin

    Read(archi, alu)esta:= alu.nombre = nom;

  • 5/27/2018 Sintaxis de Pascal

    30/39

    Sintaxis y Semntica del Lenguaje

    end;if esta

    then Posicion:= filePos(archi) -1else Posicion:= -1;

    end;

    procedure MostrarDatosAlumno(alu: Alumno);{Muestra en la pantalla los datos del alumno alu}begin

    ........end;

    procedure Modificar(var archi: ArchivoAlumnos);var alu: Alumno;

    nom: Cadena;begin

    Reset(archi);WriteLn('Introduzca el nombre del alumno a modificar';ReadLn(nom);i := Posicion (nom, archi);if i= -1

    then writeLn('El alumno buscado NO se est en el archivo')else begin

    seek(archi, i);read(archi, alu);MostrarDatosAlumno(alu);

    writeLn ('Introduzca los nuevos datos:');LeerRegistro(alu);i := filePos(archi) -1;write(archi, alu);writeLn ('Los datos se han modificado.');

    end;end;

    procedure Consultar(var archi: ArchivoAlumnos);{Permite consultar los datos de un alumno }begin

    ......end;

    procedure Eliminar(var archi: ArchivoAlumnos);{Permite eliminar los datos de un alumno }begin

    ......end;procedure Agregar(var archi: ArchivoAlumnos);{Permite agregar un nuevo alumno al archivo}begin

    ......end;

  • 5/27/2018 Sintaxis de Pascal

    31/39

    Sintaxis y Semntica del Lenguaje

    begin { Comienzo del programa principal}Assign(archi, 'c:\sintaxis\alumnos.dat');Repeat

    ClrScr;

    WriteLn('Men Principal:');WriteLn('1.- Agregar Alumno');WriteLn('2.- EliminarAlumno');WriteLn('3.- Modificar Alumno');WriteLn('4.- Consultar Alumno');WriteLn('5.- Listado total de alumnos ');WriteLn('6.- Salir del sistema');WriteLn('Elija una opcin:');repeat

    opcion := readKey;until opcion >='1' and opcion

  • 5/27/2018 Sintaxis de Pascal

    32/39

    Sintaxis y Semntica del Lenguaje

    Las variables de tipo puntero apuntan a variables denominadas dinmicas.Estas variables se crean en forma explcita por medio del procedimiento new dePascal.

    new(p)

    asigna memoria a la variable apuntada por p.Ejemplo: (el seguimiento de este program se realizar en a teora)program demopunteros;type

    ptr=^integer;var

    p,q:ptr;begin

    new(p);p^:= 1;

    new (q);q^:=2;writeln(p^, q^);p^:= q^+1;writeln(p^, q^);p:=q;writeln(p^, q^);p^:= 7;writeln(p^, q^);new(p);q:=p;

    end.Listas encadenadas

    Una lista encadenada tiene la siguiente forma:

    Una lista es una sucesin de nodos. Cada nodo tiene un valor y un puntero alsiguiente nodo. El ltimo nodo tiene un valor especial denominado nil que indica alfin de la lista

    Definicin de listas en Pascal:

    Type lista = ^nodo;Nodo = record

    Dato: ...Psig:lista

    Punter

    o nulo

    Principio

    de la lista

    Nodo

  • 5/27/2018 Sintaxis de Pascal

    33/39

    Sintaxis y Semntica del Lenguaje

    End;

    Siempre se accede a la lista por su comienzo: el puntero inicial a la misma:

    Var pi: lista.Cmo se recorre una lista? El procedimiento bsico es el siguiente:

    Situarse la principio de la listaMientas no se llegue al final de la lista

    Do beginImprimir el dato del nodo actualPasar al siguiente nodo

    End;

    Implementacin en Pascal:

    Procedure imprimirLista(pi:lista)Var aux:listabegin{Situarse la principio de la lista}aux:= pi;

    {Mientas no se llegue al final de la lista}

    while aux nildo begin{Imprimir el dato del nodo actual}writeln(aux^dato);{Pasar al siguiente nodo}aux:=axu^psig;end;

    end;

    Operaciones para el manejo de la lista

    Insertar al principio:Procedure insertarPpio (var l:lista, elem:integer)Var nuevo: lista;Begin

    New(nuevo);Nuevo^dato:=elem;Nuevo^psig:=l;L:=nuevo;

    End.

    Insertar al final:

  • 5/27/2018 Sintaxis de Pascal

    34/39

    Sintaxis y Semntica del Lenguaje

    Procedure insertarFinal (var l:lista, elem:integer)Var nuevo, actual, anterior: lista;Begin

    New(nuevo);Nuevo^dato:=elem;

    Nuevo^psig:=nil;actual:=l;anterior:=nil;while actualnil

    do beginanterior:=actual;actual:=actual^psig;end;

    if anteriornilthen anterior^psig:=nuevo;else l:= nuevo;

    End.

    Insertar ordenado:Procedure insertarOrdenado (var l:lista, elem:integer)Var nuevo, actual, anterior: lista;Begin

    new(nuevo);nuevo^dato:=elem;

    actual:=l;

    anterior:=nil;while actualnil and actual^dato

  • 5/27/2018 Sintaxis de Pascal

    35/39

    Sintaxis y Semntica del Lenguaje

    Guardar la lista en un archivo:Procedure SalvarADisco(pi: lista; nom : cadena)){ Guarda la lista en un archivo cuyo nombre es nom}Var

    archi: file of integer;

    aux : lista;begin

    assign(archi, nom);rewrite(archi);aux := pi;while aux nil

    do beginwrite (archi, aux^.dato);aux := aux ^.psig;

    end;close (archi);

    end;

    Armar la lista con datos de un archivo:Procedure ArmoLista (var pi: lista; nom : cadena)){ Arma una lista ordenada con los enteros almacenados en el archivo cuyo nombre es nom}var

    archi: file of integer;x: integer;

    beginassign(archi, nom);

    reset(archi);pi := nil;while not eof(archi)

    do beginread (archi, x);InsertarOrdenado(pi, x);

    end;close (archi);

    end;

  • 5/27/2018 Sintaxis de Pascal

    36/39

    Sintaxis y Semntica del Lenguaje

    Ejercicio completo

    EnunciadoSe tiene informacin sobre la asignacin de cursos a profesores de un

    Instituto (nombre y apellido y cursos que dicta con su horario, a lo sumo tres).Todos los cursos se dictan los das lunes, mircoles y viernes; cada curso tiene elmismo horario todos los das. Por ejemplo, Arquitectura I, de 10 a 12 hs.

    Se desea realizar un programa que permita modificar, para algunosprofesores, uno de los cursos que dicta (el primero, el segundo o el tercero),siempre que el nuevo horario no se superponga con el de otro de los que dicta eseprofesor). Se desea grabar en un archivo la informacin actualizada ordenadaalfabticamente.

    Idea: Pensar en una solucin general y de esta manera dividir el problema enmdulos.

    I)Cargar la informacin en memoria, en una listaActualizar la informacinVolver a grabar la informacin actualizada en disco

    II)/*Cargar la informacin en memoria, en una lista*/

    abrir archivo de datoswhile haya datosdo begin

    leer datosguardarlo ordenado en la lista

    end

    /*Actualizar la info*/Ingresar pedido de modificacin (nombre del profe, nro de curso, ttulo y

    horario)

    While haya pedidosdo begin

    Analizar cambio en los cursosIngresar otro pedido

    end

    /*Volver a grabar la info actualizada en disco*/( grabar la lista en el archivo)......

  • 5/27/2018 Sintaxis de Pascal

    37/39

    Sintaxis y Semntica del Lenguaje

    III)/*Analizar cambio en los cursos*/buscar el profesor en la listaif esta

    then beginif no hay superposicin horariathen begin

    modificar cursoguardarloend

    else avisar que hay superposicin horaria con el nuevo cursoend

    else avisar que el profe no esta

    IMPLEMENTACION EN PASCAL

    program infoProfesores;

    typecadena = string [30];curso = record

    titulo: string[30];horaI, horaF: real;

    end;

    trescursos = array[1..3] of curso;

    profesor = recordnombre: cadena;cursos: trescursos;

    end;archiProfes = file of profesor;listaProfes = ^ nodoProfe;nodoProfe = record

    dato: profesor;

    psig: listaProfes;end;

    varlista: listaProfes;

    procedure CargarInfo (var lista: listaProfes);var

    profe: profesor;archi: archiProfes;

    begin

    Assign(archi, profes.dat);Reset(archi);

  • 5/27/2018 Sintaxis de Pascal

    38/39

    Sintaxis y Semntica del Lenguaje

    lista = nil;while not eof(archi)

    do beginread(archi, profe)InsertarOrdenado(lista, profe) /*el que ya hicieron*/

    end;Close( archi);end;

    procedure ActualizarInfo (var lista: listaProfes);var

    profe: Cadena;nro: integer;cur: curso;

    beginwriteln( Ingrese el nombre del profesor a modificar (ZZ para finalizar));read(profe);while profe ZZ

    do beginwriteln( Ingrese el nro del curso, ttulo, hora inicial y hora final);read ( nro, cur.ttulo, cur.horaI, cur.horaF);AnalizarCambio(lista, profe, nro, cur);writeln( Ingrese el nombre del profesor a modificar (ZZ para finalizar));read(profe)end;

    end;

    procedure AnalizarCambio (var lista: listaProfes; profe: Cadena; n:integer;nuevoCurso:curso);var

    regProfe: profesor

    beginif Buscar(lista, profe) /* busca por el nombre*/

    then begin

    regProfe =Recuperar(lista, profe); /* recupera por el nombre*/if not SuperposicinHoraria (nuevoCurso, regProfe.cursos, n)then begin

    regProfe.cursos[n] = nuevoCursoInsertarOrdenado(lista, regProfe)end;else writeln( No se puede hacer el cambio por superposicinhoraria);

    endelse writeln( El profesor no est registrado);

    end;

    function SuperposicinHoraria (nuevo: curso, cursos : trescursos; n: integer): boolean;

  • 5/27/2018 Sintaxis de Pascal

    39/39

    Sintaxis y Semntica del Lenguaje

    begin{Se deber testear que el horario del curso n no se superponga con los otros dos. }

    ..............end;

    begin /* del programa ppal */CargarInfo(lista);ActualizarInfo(lista);GrabarInfo(lista)

    end.