introduccion lenguaje pascal 9958 completo

81
Introducción al lenguaje Pascal Autor: [email protected] 1 mailxmail - Cursos para compartir lo que sabes

Upload: jovana-davalillo

Post on 02-Jul-2015

261 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Introduccion Lenguaje Pascal 9958 Completo

Introducción al lenguaje PascalAutor: [email protected]

1

mailxmail - Cursos para compartir lo que sabes

Page 2: Introduccion Lenguaje Pascal 9958 Completo

Presentación del curso

Pascal es un lenguaje de alto nivel y de propósito general (es aplicable a un grannúmero de aplicaciones diversas) desarrollado por el profesor suizo Niklaus Wirthcomo un lenguaje para enseñar la programación con un método disciplinado ysistemático. Wirth trató de eliminar las inconsistencias de otros lenguajes deprogramación de su época y además que sirviera para enseñar las técnicas deprogramación a sus alumnos.

En este curso te proponemos que lo conozcas.

2

mailxmail - Cursos para compartir lo que sabes

Page 3: Introduccion Lenguaje Pascal 9958 Completo

1. Introducción

Pascal y Turbo Pascal

Pascal es un lenguaje de alto nivel y de propósito general (es aplicable a un grannúmero de aplicaciones diversas) desarrollado por el profesor suizo Niklaus Wirthcomo un lenguaje para enseñar la programación con un método disciplinado ysistemático. Wirth trató de eliminar las inconsistencias de otros lenguajes deprogramación de su época y además que sirviera para enseñar las técnicas deprogramación a sus alumnos.

Una versión preliminar del lenguaje apareció en 1968 y a finales de 1970 apareció elprimero compilador totalmente completo.

Las diferentes versiones ofrecían interpretaciones ligeramente diferentes queimpedían la compatibilidad entre ellas. Por estas razones, mediante diferentesproyectos, se logró la estandarización bajo las normas ISO (International StandardsOrganization), ANSI (American National Standards Institute) y IEEE (Institute ofElectrical and Electronics Engineers). Sin embargo, las versiones más popularesconocidas como UCSD (Construida por Regents) y Turbo Pascal (de Borland) no estánestandarizadas. Esta última es la más conocida y la más utilizada.

  Características principales

-       Excelente para el aprendizaje de la información.

-       Lenguaje de propósito 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 función o procedimiento).

-       Riqueza en los tipos de datos.

Turbo Pascal

Fue lanzado por la firma Borland International en 1983 a modo experimental. Fuetodo un éxito, pues además de funcionar, compilaba y corría los programas másrápido.

Las versiones han evolucionado de la 1.0 hasta la 7.0 que cuenta con una bibliotecade objetos denominada Turbo Visión.

3

mailxmail - Cursos para compartir lo que sabes

Page 4: Introduccion Lenguaje Pascal 9958 Completo

2. Programación descendente (Top - Down)

La programación descendente o "Top - Down" es el proceso mediante el cual unproblema se descompone en una serie de niveles o pasos sucesivos de refinamiento(stepwise). La metodología descendente consiste en efectuar una relación entre lassucesivas etapas de estructuración de modo que exista una relación entre ellasmediante entradas y salidas de información. El problema se descompone en variasestructuras jerárquicas, de forma que se pueda considerar cada estructura desdedos puntos de vista: ¿qué hace? y ¿cómo lo hace?

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

El diseño descendente se representa así:

4

mailxmail - Cursos para compartir lo que sabes

Page 5: Introduccion Lenguaje Pascal 9958 Completo

3. Programación modular

La programación modular es uno de los métodos de diseño más flexibles y potentespara mejorar la productividad de un programa. En programación modular elprograma se divide en módulos (partes independientes), cada una de las cualesejecuta una única función o actividad y se codifican independientemente de otrosmódulos. Cada uno de estos módulos se analiza, codifica y pone a punto porseparado.

Cada programa contiene un módulo denominado programa principal que controlatodo lo que sucede; se transfiere el control a los submódulos o subprogramas. Estosejecutan su función y una vez completada su tarea, devuelven el control al móduloprincipal.

Cada submódulo se puede descomponer en otros submódulos, dependiendo de lacomplejidad de la tarea a realizar y la subdivisión continúa hasta que cada módulotenga una sola tarea para ejecutar..

Un submódulo puede realizar tareas de distinta naturaleza como: entrada, salida,manipulación de datos, control de otros módulos o una combinación de éstos. Unmódulo puede transferir temporalmente (bifurcar) el control a otro módulo; sinembargo, cada módulo debe eventualmente devolver el control al módulo del cualrecibió originalmente el control.

5

mailxmail - Cursos para compartir lo que sabes

Page 6: Introduccion Lenguaje Pascal 9958 Completo

4. Conceptos básicos de Pascal: datos y tipos dedatos

Concepto de dato

Los diferentes objetos de información con los que trabaja un programa en Pascal seconocen como datos. Todos los datos tienen un tipo asociado con ellos. Pueden serde tipo carácter, entero, un número real, etc.

La asignación de tipos a los datos persigue dos objetivos:

-         Detectar errores de operaciones en programas.

-         Determinar cómo ejecutar las operaciones.

Clasificación de los tipos de datos 

Tipos de datos enteros

Turbo Pascal dispone de cinco tipos predefinidos (no necesitan una nueva definiciónde parte del programador pues cada tipo tiene un límite) que permiten representarvalores enteros.

Si se asigna un valor fuera del límite 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 están entre -32.768 y 32.767.

Longint: A partir de la versión 4.0 se amplía 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 cuandose debe trabajar con valores pequeños y se desea economizar memoria. Ocupan 1byte de memoria.

6

mailxmail - Cursos para compartir lo que sabes

Page 7: Introduccion Lenguaje Pascal 9958 Completo

Word: Se utiliza cuando se desea representar únicamente valores positivos. Ocupandos bytes de memoria y van de 0 a 65.535.

7

mailxmail - Cursos para compartir lo que sabes

Page 8: Introduccion Lenguaje Pascal 9958 Completo

5. Identificadores y expresiones

Identificadores

Representan los objetos de un programa (constantes, variables, tipos de datos,procedimientos, funciones, unidades, programas y campos de registros). Unidentificador es una secuencia de caracteres de cualquier longitud, pero el límitesignificativo es de 63 caracteres.

Existen tres reglas básicas para nombrar los identificadores:

Debe comenzar con una letra (A a Z, mayúsculas o minúsculas). No puede contenerblancos.

Los caracteres permitidos después del primer carácter son letras, dígitos y elcarácter de subrayado ( _ ).

No se puede utilizar una palabra reservada como identificador. Las palabrasreservadas son aquellos términos que tienen un significado especial para Pascal y nose pueden utilizar para otros propósitos.

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 expresión es un conjunto de datos o funciones unidos por operadoresaritméticos.

Pascal soporta los siguientes operadores:

Reglas para la evaluación de expresiones

Todas las subexpresiones entre paréntesis se evalúan primero. Cuando existansubexpresiones con paréntesis anidados se evalúan de dentro hacia fuera. Elparéntesis más interno se evalúa primero.

Prioridad de operaciones. Dentro de una misma expresión o subexpresión, losoperadores se evalúan en el siguiente orden:

1º        *,/, div, mod

2º        +, -     

Regla asociativa izquierda. Los operadores en una misma expresión o subexpresióncon igual nivel de prioridad ( *, / ) se evalúan de izquierda a derecha.

8

mailxmail - Cursos para compartir lo que sabes

Page 9: Introduccion Lenguaje Pascal 9958 Completo

con igual nivel de prioridad ( *, / ) se evalúan de izquierda a derecha.

Ejemplos:

a.      4 + 2 * 5               (primero la multiplicación, luego la suma)

4 +   10  

  14

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

                   46 div 5

                          9

Práctica

Evalúe 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 operación:

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

9

mailxmail - Cursos para compartir lo que sabes

Page 10: Introduccion Lenguaje Pascal 9958 Completo

6. Concepto de sentencia

Las sentencias son pasos que describen las acciones algorítmicas que pueden serejecutadas. Se clasifican según su operatividad en ejecutables y no ejecutables. Las ejecutables son aquellas que especifican operaciones de cálculos aritméticos yentradas/salidas de datos y no ejecutables son las que no realizan ninguna acciónconcreta, sino que ayudan a la legibilidad el programa sin afectar su ejecución. Lassentencias ejecutables son aquellas que aparecen en el cuerpo del programa luegode 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 cédula: `);

      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,

         ` ` ,´años´);

End.

1 0

mailxmail - Cursos para compartir lo que sabes

Page 11: Introduccion Lenguaje Pascal 9958 Completo

1 1

mailxmail - Cursos para compartir lo que sabes

Page 12: Introduccion Lenguaje Pascal 9958 Completo

7. Sentencias simples y sentencias compuestas

2.3.1Sentencias simples

Es una sentencia que no contiene ninguna otra sentencia. Se clasifican en:asignación y procedure.

2.3.1.1 Sentencia de asignación

La sentencia de asignación se utiliza para asignar (almacenar) valores o variables. Laasignación es una operación que sitúa un valor determinado en una posición dememoria. La operación de asignación puede representar en un pseudocódigo con elsímbolo `?´, para denotar que el valor situado a su derecha se almacena en lavariable a la izquierda.

Formato

Variable ? expresión

En Pascal el operador `?´ se sustituye por el símbolo :=, que se denomina carácterde asignación.

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 incrementándose en 5).

2.3.1.2 Sentencia procedure

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

Ejemplo:

Program Calcula;

Var

      Valor1:                 Integer;

      Valor2:                 Integer;

  Procedure Elmayor;

Begin

      I f    Valor1> Valor2 then          

        Begin  

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

1 2

mailxmail - Cursos para compartir lo que sabes

Page 13: Introduccion Lenguaje Pascal 9958 Completo

            Readln

        End

      Else

         I f 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 sólo una acción, cuando se cumpla o nose cumpla una determinada condición, se deben realizar diferentes acciones. Esto esposible gracias a las sentencias compuestas. Una sentencia compuesta es unconjunto de sentencias separadas por puntos y comas y encerradas entre laspalabras begin y end.

Ejemplo:

Begin

      Readln (Numero);

      Numero:= Numero+1;

      Write (`El número es `,Numero)

End.

1 3

mailxmail - Cursos para compartir lo que sabes

Page 14: Introduccion Lenguaje Pascal 9958 Completo

8. Entradas y salidas de información

2.4.1 Concepto de entrada

Una entrada de datos o valores es equivalente al término lectura. La entrada olectura de datos se refiere a la recepción de valores provenientes de un dispositivoperiférico de entrada como un teclado, una unidad de disco, un escáner, etc. y sudireccionamiento hacia zonas de memoria de la computadora.

Es la entrada la operación que nos permite proporcionar datos durante la ejecuciónde un programa. Los datos que se pueden leer son: enteros, reales, caracteres ocadenas. NO se puede leer un boolean por tener valores preestablecidos (V o F).

Los datos estructurados como arrays, registros o conjuntos, no se pueden leerglobalmente y se suele recurrir a diseñar procedimientos específicos.

Los procedimientos de lectura son: Read y ReadLn. Estos esperan a que se pulse latecla 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 número: `);

      Readln (i);

      Write (`Introduzca el segundo número: `);

      Readln (j);

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

End.

2.4.2 Concepto de salida

Los programas para ser útiles deben proporcionar información de salida(resultados). Esta salida toma información de la memoria y la sitúa o almacena en: lapantalla, en un dispositivo de almacenamiento (disco duro o flexible), o en unpuerto de E/S (puertos serie para comunicaciones o impresoras).

El procedimiento que se utiliza para visualizar o escribir la información es el Write oel WriteLn. Tanto el Write como el WriteLn cumplen la misma función, o seadesplegar información. La diferencia es que el WriteLn despliega la información ysalta a la línea siguiente.

2.4.2.1 Ejemplo

Program Resultado;

1 4

mailxmail - Cursos para compartir lo que sabes

Page 15: Introduccion Lenguaje Pascal 9958 Completo

Uses

      Crt;

  Var       Nombre : String[30];   Begin

      Clrscr;

      Nombre := `Pedro Picapiedra´;

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

End.

1 5

mailxmail - Cursos para compartir lo que sabes

Page 16: Introduccion Lenguaje Pascal 9958 Completo

9. Práctica

1.      Hacer un programa que lea su cédula, su nombre y su teléfono y los imprimaen pantalla.

2.      Hacer un programa que lea tres números, que calcule el mayor y el menor deesos números y los imprima.

3.      Hacer un programa que lea un código de producto, su descripción, su preciounitario, las unidades compradas y el precio total a pagar e imprima el resultado.

4.      Hacer un programa que lea dos números y que imprima el resultado de susuma, su resta, su multiplicación y su división.

5.      Hacer un programa que lea la cédula 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 susalario 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 números para tres variables a, b y c. Conbase en los valores almacenados, calcule la expresión  ((a+7*c)/(b+2-a)+2*b).

1 6

mailxmail - Cursos para compartir lo que sabes

Page 17: Introduccion Lenguaje Pascal 9958 Completo

10. Estructuras de control

3.1.1 Expresiones lógicas

Son acciones alternativas o decisiones que determinan el cumplimiento o no de unadeterminada condición.

Por ejemplo, supongamos que se desea diseñar un programa para calcular el salariosemanal de un empleado que trabaja por horas; la empresa paga un 1.5% adicionalpor todas las horas trabajadas superiores a 40. El algoritmo de cálculo de pago seríael 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 relación

Se utilizan para expresar condiciones y describen una relación entre dos valores.

Es importante recordar aquí el orden de evaluación de expresiones aritméticas:

3.1.3 Operadores lógicos

Las expresiones lógicas pueden combinarse para formar expresiones máscomplejas. Esto se logra utilizando los operadores lógicos: and, or y not.

La operación and (y) combina dos condiciones simples y produce un resultadoverdadero sí y sólo sí los dos operandos de la expresión son verdaderos.

La operación o r (o) es verdadera si uno de los dos operandos es verdadero.

La operación not  (no) actúa sobre una sola condición simple u operando ysimplemente niega o invierte su valor.

Esto se puede demostrar más fácilmente mediante las tabla de verdad para cadaoperador.

3.1.3.1 Operador and

1 7

mailxmail - Cursos para compartir lo que sabes

Page 18: Introduccion Lenguaje Pascal 9958 Completo

3.1.3.2 Operador or

3.1.3.3 Operador not

1 8

mailxmail - Cursos para compartir lo que sabes

Page 19: Introduccion Lenguaje Pascal 9958 Completo

11. Selección de acciones alternativas

3.2.1 La sentencia IF

Puesto que las expresiones lógicas toman el valor verdadero o falso, se necesita unasentencia de control que indique a la computadora que ejecute una sentencia encaso de que la expresión 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 número `);

     Read (Numero);

     I f   Numero > 0.0 Then

            Begin

                 Writeln (`El número introducido es positivo´);

                 Readln

            End      Else             Begin

                Writeln (`El número 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 - elsedentro de otra sentencia if - then - else, se dice que dichas sentencias estánanidadas.

Ejemplo:

Program Mayor;

  Uses

    Wincrt;       

Var

    A,B,C : Integer;

1 9

mailxmail - Cursos para compartir lo que sabes

Page 20: Introduccion Lenguaje Pascal 9958 Completo

    A,B,C : Integer;

    Elmayor : Integer;  

  Begin

     Writeln (`Digite tres números enteros `);

     Readln (A,B,C);

     I f   A > B Then

            I f   A > C Then

                 Elmayor := A

            Else

                 Elmayor := C

     Else                      

            I f   B > C Then

                 Elmayor := B

            Else

                 Elmayor := C;

     Writeln (`El número mayor es: `,Elmayor)

End.

3.2.2 La sentencia CASE

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

Ejemplo:

Program Cursor;

(* Este programa mueve el cursor a través de la pantalla mediante las teclaspredefinidas, cuando se presiona otra tecla, emite un pitido de advertencia*)

  Uses

    Wincrt;       

Var

    X,Y : Integer;

    C : Char;

  Begin

     Clrscr;

      X := 40;

2 0

mailxmail - Cursos para compartir lo que sabes

Page 21: Introduccion Lenguaje Pascal 9958 Completo

      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.

2 1

mailxmail - Cursos para compartir lo que sabes

Page 22: Introduccion Lenguaje Pascal 9958 Completo

12. Condiciones compuestas

En numerosas ocasiones las expresiones de control de un ciclo pueden sercondiciones lógicas compuestas, como las siguientes:

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

            While not (A <= 5) do

            While (A <> B) and not Eof (input) do

Ejemplo:

Diseñar un programa que verifique si un número es primo.

Program  Primos;

Var

   Primo                       : bolean;

   Número                   : Integer;

Begin

   Primo: =       True;

   Divisor := 2;

   WriteLn (`Introduzca un entero positivo: `);           

   ReadLn (Numero);

   While (Divisor < Numero) and Primo do

            Begin

               I f 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.

2 2

mailxmail - Cursos para compartir lo que sabes

Page 23: Introduccion Lenguaje Pascal 9958 Completo

13. Ciclos

Es una estructura de control que permite la repetición de una serie determinada desentencias. Se le llama también bucle o lazo.

El cuerpo del ciclo o bucle contiene las sentencias que se repiten. Pascalproporciona tres estructuras o sentencias de control para especificar la repetición: while, repeat, forwhile, 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 númerodeterminado de veces, y cuyo número se conozca por anticipado. Para aplicacionesde este tipo se utiliza la sentencia FOR.

La sentencia FOR requiere que conozcamos por anticipado el número de veces quese ejecutan las sentencias que se encuentran dentro del ciclo.  El ciclo for seincremente automáticamente.

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;          

2 3

mailxmail - Cursos para compartir lo que sabes

Page 24: Introduccion Lenguaje Pascal 9958 Completo

Ejemplos:

For C :=  5 downto 1 do

      Begin

            Write (`C´);

            Writeln

      End;

Lo anterior produce la siguiente salida:

5

4

3

2

1

También 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 ciclocondicional que se repite hasta que la condición se hace verdadera.

El diagrama de flujo se representa de la siguiente manera:

                          

El seudocódigo se representa así:

2 4

mailxmail - Cursos para compartir lo que sabes

Page 25: Introduccion Lenguaje Pascal 9958 Completo

Repetir

       Sentencias

Hasta_que condición           

Sintaxis:

Repeat

      Begin

            Sentencia 1;

            Sentencia 2;

            ...

            ...

            ...

            Sentencia n;

      End;

Until expresion lógica

Ejemplo:

(* El siguiente programa imprime las secuencias de caracteres hasta que se presionecualquier 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.

2 5

mailxmail - Cursos para compartir lo que sabes

Page 26: Introduccion Lenguaje Pascal 9958 Completo

14. Práctica

1. Los patos de un granjero se venden a precios especiales si son grandes pero nodemasiado. Diseñe un programa que lea el número de patos que posee el granjero yel peso de cada ave. Al final debe especificar cuántos patos pesan entre 1.5 kilos y 2kilos inclusive.

2. Diseñe un programa para calcular e imprimir los primeros 2000 números enterospositivos.

3. Leer las notas de 50 exámenes e imprimir cuántos de ellos tienen nota mayor oigual a 70.

4. Hacer un programa que lea los montos de las N ventas hechas por una tienda enun día y que imprima el monto total de ventas y el monto promedio.

5. Hacer un programa que lea 10 valores numéricos (positivos y negativos). Debeimprimir el número de valores negativos, el número de valores iguales a cero y elpromedio de valores positivos.

6. Encuentre la suma de los primeros 50 números enteros pares.

7. El interés simple se calcula mediante la fórmula A=P(1+i*n), donde A=Monto deInterés, P=Capital, N=Número de años e i=tasa de interés.

8. Hacer un programa que lea: P, i, y N e imprima el monto de interés a través delnúmero de años leído.

9. Diseñe un programa para calcular la nómina semanal de una compañía con Nempleados. Por cada empleado, se debe leer: Nº de empleado, salario por hora ynúmero de horas trabajadas. Por cada empleado se debe imprimir: Nº de empleado,salario bruto, impuesto federal, impuesto estatal, cuota del seguro social y salarioneto. Los impuestos federales son el 15% del salario bruto, los estatales el 6% y elseguro social el 7%. El salario se calcula de la siguiente manera: Por las primeras 40horas o menos se paga el salario normal por hora. Por las horas extra (más de 40)se paga 1.5% adicional por hora.

10. Diseñe un programa para calcular cuántas veces se puede dividir un número Xentre un número Y de tal manera que el resultado de la división sea un númeroentero.

2 6

mailxmail - Cursos para compartir lo que sabes

Page 27: Introduccion Lenguaje Pascal 9958 Completo

15. Subprogramas: Funciones y Procedimientos

4.1 Procedimientos 

  4.1.1 Concepto

Un procedimiento es un programa que realiza una tarea específica. Puede recibircero o más valores del programa que llama y devolver cero o más valores alprograma que realizó la llamada. Un procedimiento está compuesto de un grupo desentencias a las que se asigna un nombre (identificador) y constituye una unidad deprograma. La tarea asignada al procedimiento se ejecuta siempre que Pascalencuentra el nombre del procedimiento.

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

4.1.2 Declaración de un procedimiento

Al igual que los identificadores, los procedimientos deben declararse dentro delcuerpo del programa. La declaración de un procedimiento NO indica a lacomputadora que ejecute las instrucciones dadas, sino que indica a la computadoracuáles son estas instrucciones y dónde están 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 llamanVariables Locales y a las que se ubican en  el cuerpo principal, fuera de losprocedimientos, 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 deexistir, una lista de parámetros formales.

Una sección de declaración que puede contener constantes, variables e incluso otrosprocedimientos.

Una sección ejecutable: el cuerpo del procedimiento.

Ejemplo:

Program  Recuadro;

Var I : Integer;

Procedure  Estrellas;

2 7

mailxmail - Cursos para compartir lo que sabes

Page 28: Introduccion Lenguaje Pascal 9958 Completo

(* 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 organización de un programa en procedimientos lo hace más fácil de escribir ydepurar. Los procedimientos no deben exceder de 25 líneas.

Las ventajas de utilizar procedimientos son:

Facilita el diseño descendente.

Los procedimientos se pueden ejecutar más de una vez en un programa y/o endiferentes programas, ahorrando tiempo de programación.

El uso de procedimientos facilita la división de las tareas entre un equipo deprogramadores y se pueden comprobar individualmente.

2 8

mailxmail - Cursos para compartir lo que sabes

Page 29: Introduccion Lenguaje Pascal 9958 Completo

16. Parámetros

4.2.1 Concepto

Un parámetro es un método para pasar información (valores a variables) delprograma principal a un procedimiento y viceversa.

Un parámetro es, prácticamente, una variable cuyo valor debe ser ya seaproporcionado por el programa principal al procedimiento o ser devuelto desde elprocedimiento hasta el programa principal. Por consiguiente, existen dos tipos deparámetros:

-         Parámetros de entrada: Sus valores deben ser proporcionados por elprograma principal.

-         Parámetros de salida: Son parámetros cuyos valores se calcularán en elprocedimiento y se deben devolver al programa principal para su proceso posterior.

4.2.2 Transferencia de información desde y/o hasta los procedimientos

Existen dos tipos de procedimientos:

-         Procedimientos sin parámetros: No existe comunicación entre el programaprincipal y los procedimientos ni viceversa.

-         Procedimientos con parámetros: Existe comunicación entre el programaprincipal y los procedimientos o entre dos procedimientos.

Ejemplo 1:

(Parámetros de entrada)

Procedure RecuadroDos (N : Integer);

Var

            J : Integer;

Begin

            For J := 1 to  N do

                        Write(`*´)

End;

Ejemplo 2:

(Parámetros de entrada/salida)

El procedimiento Geometria recibe la longitud y anchura de un rectángulo, calcula elárea y perímetro del rectángulo y devuelve los valores obtenidos al programaprincipal.

Procedure Geometria (Longitud, Anchura : Real; Var Area, Perímetro : Real);

Begin

            Area := Longitud * Anchura;

2 9

mailxmail - Cursos para compartir lo que sabes

Page 30: Introduccion Lenguaje Pascal 9958 Completo

            Perimetro := 2 * (Longitud + Anchura)

End;

4.2.3 Parámetros actuales y formales

Las sentencias llamadas a procedimientos constan de dos partes: un nombre deprocedimiento y una lista de parámetros llamados actuales:

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

Los parámetros actuales pa1, pa2, pa3, ... deben tener unos valores que se pasan alprocedimiento nombreproc.

En la declaración de un procedimiento cuando se incluyen parámetros, éstos sedenominan parámetros formales o ficticios (pf1, pf2, pf3, ...). Ellos sirven paracontener los valores de los parámetros actuales cuando se invoca el procedimiento.

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

El valor de los parámetros actuales no se conoce cuando se declara elprocedimiento, sin embargo, cuando se ejecuta la sentencia de llamada alprocedimiento es preciso que tengan valores asignados, ya que en caso contrario seproducirá un error.

Program Correspondencia;

Uses Wincrt;

Var

    X,Y,A,P : real;

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

Begin (* Geometría *)

            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 perímetro es: ', P:6:2)

End.

3 0

mailxmail - Cursos para compartir lo que sabes

Page 31: Introduccion Lenguaje Pascal 9958 Completo

3 1

mailxmail - Cursos para compartir lo que sabes

Page 32: Introduccion Lenguaje Pascal 9958 Completo

17. Parámetros valor y parámetros variable

4.2.4.1 Parámetros valor

Son parámetros unidireccionales que se utilizan para proporcionar información a unprocedimiento, pero no pueden devolver valores. Si la palabra var no aparecedelante del parámetro formal en un procedimiento, la computadora supone que elparámetro formal es un parámetro valor. En la llamada al procedimiento el valor delparámetro actual se pasa a la variable que represente el parámetro actual. Este valorpuede ser modificado dentro del programa, pero su valor no se puede devolver alprograma o procedimiento llamante.

4.2.4.2 Parámetros variable

En la declaración de un procedimiento, los nombres de los parámetros variablesestán precedidos con la palabra var. Los parámetros variable se utilizan tanto pararecibir como para transmitir valores entre el subprograma y el programa llamante.Estos parámetros pueden actuar como parámetros de salida o de entrada/salida.

El siguiente ejemplo ilustra la diferencia entre parámetros valor y variable en Pascal yla 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;

3 2

mailxmail - Cursos para compartir lo que sabes

Page 33: Introduccion Lenguaje Pascal 9958 Completo

            B := 3;

            C := 4;

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

            Imprimir (A, B, C);

           Pasar(A, B, C);

            WriteLn ('Después 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

Después del retorno del procedimiento Pasar

a = 2               b = 3               c = 6

3 3

mailxmail - Cursos para compartir lo que sabes

Page 34: Introduccion Lenguaje Pascal 9958 Completo

18. Subprogramas: Funciones y Procedimientos

4.2 Paso de parámetros (repaso...) 

  4.2.1 Ejemplo

En este ejemplo  los parámetros formales a y b recibe, cuando son llamados, losvalores contenidos en los parámetros 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 números es ',max:4:2);

End;

Begin

     repeat

       write ('Introduzca dos números ');

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

Program Intercambio;

Uses wincrt;

3 4

mailxmail - Cursos para compartir lo que sabes

Page 35: Introduccion Lenguaje Pascal 9958 Completo

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.

3 5

mailxmail - Cursos para compartir lo que sabes

Page 36: Introduccion Lenguaje Pascal 9958 Completo

19. Funciones en Turbo Pascal

Una función es un subprograma que recibe como argumentos o parámetros datosde un tipo numérico o no numérico (char, string, bolean u otros) y devuelve unresultado. Esta característica le diferencia de un procedimiento.

El pseudocódigo es el siguiente:

Nombre_función (argumento1,argumento2,...);

Los argumentos es lo que se conoce en Pascal como parámetros. Para podercalcular el valor o resultado de la función, todo lo que se necesita conocer es el valoro valores de los parámetros respectivos.

                           

4.3.1 Funciones aritméticas o matemáticas 

4.3.2 Funciones definidas por el usuario

Además de las funciones predefinidas citadas anteriormente, es posible que elusuario pueda declarar sus propias funciones de igual modo que declara susprocedimientos.

Una función es un subprograma que devuelve un único resultado al programa osubprograma que le llamó. La sintaxis es muy similar a la de un procedimiento.

Function nombre (parámetros): tipo

(declaración de variables locales)

begin

            <cuerpo de la función>

            nombre de la función := valor de la función

end;

  Comparación 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 función es un identificador.Sin embargo, el nombre de la función se refiere a la posición de memoria quecontiene el valor devuelto por la función.

La lista de los parámetros formales son los identificadores utilizados para recibirvalores del programa.

3 6

mailxmail - Cursos para compartir lo que sabes

Page 37: Introduccion Lenguaje Pascal 9958 Completo

El tipo de datos del resultado coincide con el tipo expresado en la cabecera de lafunción.

En el cuerpo de la función tiene que existir una sentencia de asignación como lasiguiente:

Nombre_función := valor_función

La función sólo devuelve un valor, el procedimiento puede devolver cero, uno ovarios valores.

El tipo de dato del resultado de la función debe estar indicado en la cabecera  ypuede 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 número entero: ');

   Readln (Num);

   El_cubo(Num);

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

End.

3 7

mailxmail - Cursos para compartir lo que sabes

Page 38: Introduccion Lenguaje Pascal 9958 Completo

20. Práctica general

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

Debe utilizar un procedimiento de cálculo tomando como parámetro el salario bruto(utilice una variable diferente al del programa principal). Finalmente, debe calcular ladeducción de la Caja y del Banco Popular  y el salario neto.

La salida del programa debe ser la siguiente:

El empleado (nombre), cédula No. (id_empleado), obtuvo un salario neto de...

Sus deducciones suman ....

Hacer un programa de funciones aritméticas que lea un  número real y mediante unmenú y utilizando procedimientos para cada función calcule:

-         El seno de ese número

-         El cuadrado de ese número

-         La raíz cuadrada de ese número

-         La parte decimal del número

-         La parte entera del número

Diseñe un programa que mediante una función calcule la suma de los números queestán en un rango establecido. (Por ejemplo de 1 a 100). Pruebe con varios rangos.

Escribir un programa que, mediante una función devuelva el valor del día de lasemana en respuesta a la entrada de la letra inicial de dicho día.

Mediante una función, determinar el número de días de un mes dado.

Escriba un programa que mediante una función determine si un número es primo.

3 8

mailxmail - Cursos para compartir lo que sabes

Page 39: Introduccion Lenguaje Pascal 9958 Completo

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 número de empleados a procesar: ');

       readln (n);

       While i <= n do

        begin

         clrscr;

         write ('Id. del empleado ',i,' de ',n,' : ');

         readln (id_empleado);

         write ('Nombre: ');

         readln (nom_empleado);

         write ('Salario bruto: ');

3 9

mailxmail - Cursos para compartir lo que sabes

Page 40: Introduccion Lenguaje Pascal 9958 Completo

         readln (sal_bruto);

         writeln;

         calcula(sal_bruto);

         writeln;

         writeln ('El salario neto de ',nom_empleado,' es ',salario_neto:10:2);

         writeln ('Sus deducciones fueron ',tod_ded:10:2);

         writeln;

         writeln ('Presione enter para continuar...');

         readln;

         i := i+1;

       end;

End.Respuesta No. 3.

Program sumas;

Uses wincrt;

Var i,n:integer;

Function Sumar (N : integer) : integer;

     Var suma : integer;

Begin

     Suma := 0;

     For i:= 1 to N do

       suma := suma + i;

       Sumar := Suma;

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

     Readln;

End;

Begin

     Write ('Digite el número máximo: ');

     Readln (N);

     Sumar (N);

End.

Respuesta No. 6.

4 0

mailxmail - Cursos para compartir lo que sabes

Page 41: Introduccion Lenguaje Pascal 9958 Completo

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<=Q div 2) do

                        Begin

                            P := Q mod D <> 0;

                            D := D + 1

                        End;

            Primo := P

            End

End;

Begin

            Writeln ('Introduzca un entero positivo o cero para terminar: ');

            Readln (N);

            While N > 0 do

               Begin

                        If Primo (N) then

                                   Writeln (N,' es primo')

                        Else   

4 1

mailxmail - Cursos para compartir lo que sabes

Page 42: Introduccion Lenguaje Pascal 9958 Completo

                                   Writeln (N,' no es primo');

                                   Writeln ('Introduzca otro entero');

                                   Readln (N);

               End;

            Writeln

End.

"AÚN EN LA ADVERSIDAD, PUEDES MANEJAR TUS PROPIAS CONDICIONES CONGARRA Y FORTALEZA. HAZLO CON LA CONVICCIÓN FIRME DEL LEÓN Y CON LAELEGANCIA DEL ÁGUILA EN LAS ALTURAS.

4 2

mailxmail - Cursos para compartir lo que sabes

Page 43: Introduccion Lenguaje Pascal 9958 Completo

22. Arreglos

Introducción

Primero que todo, es importante conocer el concepto de estructura de datos. Unaestructura de datos es "una colección de datos organizados de un modo particular."Las estructuras de datos pueden ser de dos tipos: estáticas y dinámicas.

Las estructuras de datos estáticas son aquellas a las que se le asigna una cantidadfija de memoria cuando se declara la variable. Las estructuras de datos dinámicasson aquellas cuya ocupación de memoria puede aumentar o disminuir durante eltiempo de ejecución. Entre las estructuras de datos estáticas podemos encontrar losvectores y los arreglos, tema que estudiaremos a continuación.

5.0 Concepto  

Un array (se suele traducir como arreglo) es una estructura de datos en la que sealmacena una colección de datos del mismo tipo, por ejemplo, los salarios de losempleados de una empresa.

Un array es una lista de un número determinado de elementos del mismo tipo. Secaracteriza por:   -         Almacenar los elementos del array en posiciones dememoria continua.

-         Tener un único nombre de variable (por ejemplo salarios) que represente atodos los elementos. Éstos a su vez se diferencian por un índice o subíndice.

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

4 3

mailxmail - Cursos para compartir lo que sabes

Page 44: Introduccion Lenguaje Pascal 9958 Completo

23. Arrays unidimensionales: Los vectores

Un array de una dimensión (unidimensional), también llamado vector o fi la, es untipo de datos estructurado compuesto de un número determinado de elementos, detamaño fijo y elementos homogéneos (del mismo tipo). La característica de tamañofijo se refiere a que el tamaño del array debe ser conocido en tiempo de compilación.

Por ejemplo, si deseamos conservar las puntuaciones de los 50 estudiantes de unexamen de informática, se necesita reservar cincuenta posiciones de memoria, darun nombre al arreglo y a cada uno de los 50 estudiantes asignarles una posición oíndice del arreglo.

5.1.1 Declaración de un array o vector

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

Type

            Nombre_array = array [rango del subíndice] of tipo;

Nombre_array: Se refiere a un nombre de identificador válido.

Tipo_subíndice: Puede ser boolean, char o un rango de tipo enumerado.

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

Ejemplos:

Type

4 4

mailxmail - Cursos para compartir lo que sabes

Page 45: Introduccion Lenguaje Pascal 9958 Completo

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

Type

  Luces = (Rojo, Verde, Ámbar);

Type

  DiasDeSemana=(Lunes, Martes, Miércoles, 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 subíndice indica quelos salarios van de los empleados cuya inicial es A hasta la Z).

Las declaraciones de tipo array no crea ninguna variable específica de tipo array,sino que proporciona información 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 variablesreferenciadas al array.

Otro ejemplo de aplicación 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 delarray van de 1 a 500 y contendrán 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 algunaestructura repetitiva, ya sea un while, repeat o for.

Ejemplos:

4 5

mailxmail - Cursos para compartir lo que sabes

Page 46: Introduccion Lenguaje Pascal 9958 Completo

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

While I <= 100 do                                       Repeat                                   Readln(Notas[I]);

     Begin                                                         Read (Notas[I]);    

            Read (Notas [I]);                                  I := I + 1      

            I := I+1                                    Until I > 100

    End;         

5.1.2.1 Escritura

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

For I := 1 to Numero do

  Writeln (Notas [I]:3);

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

4 6

mailxmail - Cursos para compartir lo que sabes

Page 47: Introduccion Lenguaje Pascal 9958 Completo

24. Arrays bidimensionales: Tablas o matrices

Un array bidimensional (también llamado tabla o matriz) es un array con dosíndices. Al igual que los vectores deben ser ordinales. Se declaran de igual maneraque los arrays de una dimensión.

5.2.1 Declaración de un array bidimensional

Al igual que en los arrays unidimensionales o vectores, se crean con declaraciones typetype 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 osubíndices, 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 unaclase de informática con notas en cuatro asignaturas.

Program Promedio;

Var

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

  I,J                  : Integer;

  Suma,Prom: Real;

4 7

mailxmail - Cursos para compartir lo que sabes

Page 48: Introduccion Lenguaje Pascal 9958 Completo

  Suma,Prom: Real;

Begin

    For I := 1 to 25 do

            Begin

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

                Writeln (`En una misma línea 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.

4 8

mailxmail - Cursos para compartir lo que sabes

Page 49: Introduccion Lenguaje Pascal 9958 Completo

25. Práctica

Escriba un programa que almacene en un vector los días de la semana.

Escriba un programa que almacene en un vector su nombre.

Escriba un programa que almacene en un vector los números pares del 1 al 10.

Escriba un programa que lea diez números enteros y los invierta.

Escriba un programa que lea las dimensiones de una matriz, las lea, visualice lamatriz 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 contenerconsonantes y vocales. El algoritmo de encriptación será sustituir cada vocal por elnúmero que le corresponde. (A=1, E=2,O=3,I=4,U=5).

Escribir un programa que en una matriz almacene los números 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 números pares del 1 al 40 ylos imprima.

" CUANDO EL DOLOR LLEGUE A TU VIDA PARA AGOBIARTE, NO TE DES PORVENCIDO. LA AFLICCIÓN TE HACE MÁS HOMBRE O MÁS MUJER, SI LA SABESVENCER CON DIGNIDAD. TE SANTIFICA. TE MADURA. TE ENGRANDECE."

4 9

mailxmail - Cursos para compartir lo que sabes

Page 50: Introduccion Lenguaje Pascal 9958 Completo

26. Cadenas (Strings)

6.1  Definición

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

Los datos tipo char y string permiten la manipulación de datos no numéricos.

Una cadena de caracteres o string es una serie de caracteres cuya longitud (númerode caracteres que contiene) puede variar de 1 hasta 255 caracteres. Turbo Pascaltiene el tipo de dato string que almacena información de texto. Este dato se puedealmacenar en constantes y en variables de cadena. Una variable de cadena estádeclarada para la palabra string seguida de la longitud máxima de la cadenaencerrada entre corchetes.

6.1.1 Declaración de una variable tipo string

Las variables de cadena se pueden declarar las de cualquier otro tipo, ya sea en lasección 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, haríamos la declaración así:

Type

    Cadena80 = string [80];

   Cadena40 = string [40];

Var

    Mensaje : Cadena80;

   Nombre : Cadena40;

Es importante recordar que si se declara como Type inmediatamente después,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 bienoperaciones de lectura / escritura en los programas.

Por ejemplo:

Program Ejemplo;

Var

    Mensaje = string[40];

Begin

5 0

mailxmail - Cursos para compartir lo que sabes

Page 51: Introduccion Lenguaje Pascal 9958 Completo

   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 físicamente es una estructura de una secuencia de 0 hasta 255caracteres de longitud. Sin embargo, la ocupación en memoria de una cadena es unnúmero de bytes igual al de caracteres de la cadena más uno. Así la cadena:

`Programador´

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

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

Var

      Puesto : String[20];

Sucede que, entonces, la longitud lógica de la variable será de 11 bytes pero lalongitud física será de 20 bytes pues así fue definida.

6.1.3 Asignación de cadenas

A las variables de cadena, como se ha visto, se pueden dar valores con unasentencia de asignación o con una sentencia de lectura (read). Ambas situaciones sepueden describir con la ecuación:

Destino                      fuente

Donde destino es la cadena a la que se da un valor y fuente es la expresión decadena que contiene el correspondiente valor. Esta ecuación actúa como lasentencia de asignación que evalúa la cadena fuente y se almacena en la variable dela cadena destino.

Dependiendo del tamaño (longitud de la cadena) de las cadenas fuente y destino sepueden presentar tres casos diferentes que analizaremos a partir de la siguientedeclaración de variables de cadena.

  Var

      Cad1  :  String [8];

      Cad2  :  String [11];

5 1

mailxmail - Cursos para compartir lo que sabes

Page 52: Introduccion Lenguaje Pascal 9958 Completo

      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 posición de cad2 se rellena con uncarácter.

      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 sólo hay 11 caracteres en cad2. La cadenaCad3 seguirá teniendo una longitud máxima de 15 caracteres, pero sólo sealmacenan 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 máxima =1 5

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 destinono se puede almacenar totalmente. En este caso se trunca la cadena destino y sealmacenan en Cad1 los primeros ocho caracteres (de izquierda a derecha) de Cad2.

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

                        1 2 3  4  5 6   7 8                                                     longitud máxima= 8

5 2

mailxmail - Cursos para compartir lo que sabes

Page 53: Introduccion Lenguaje Pascal 9958 Completo

27. Operaciones con strings

Las operaciones básicas con strings son: asignación, comparación y concatenación.

6.2.1 Asignación

Es posible asignar una cadena a otra cadena, incluso aunque esta última sea delongitud física más pequeña. En este caso, no se produce ningún error en tiempo decompilación ni en tiempo de ejecución. Se producirá un truncamiento de los datosde la cadena mayor a la longitud física máxima de la cadena más pequeña.

Ejemplo:

Var

      Cad1 : string[15];

Begin

      Cad1 := `Hola Margarita, cómo estás?´

End.

En este caso se asignará a Cad1 la cadena `Hola Margarita,´. Se producirá untruncamiento de los datos de la cadena mayor a la longitud física máxima de lacadena más pequeña.

6.2.2 Comparaciones

Las comparaciones de cadenas de caracteres se hacen según el orden de loscaracteres en el código ASCII y con los operadores de relación.

         `0´ < `1´                               `1´ < `2´                                       `8´ < `9´

      `A´ < `B´                          `C´ < `D´                                `M´ > `B´

         `a´ < `h´                               `m´ > `b´                                     `p´ < `r´

6.2.3 Concatenación

Otra operación básica que se pueda realizar con cadenas es la concatenación. Laoperación de concatenación. La concatenación es el proceso de combinar dos o máscadenas en una sola cadena. Turbo Pascal proporciona dos métodos independientespara realizar la concatenación.

a.      Mediante el operador de concatenación (+)

Frase := `Perro que ladra´ + `no muerde, ´ +´mientras esté ladrando´

            produciría una sola cadena almacenada en la variable Frase:

            `Perro que ladra no muerde, mientras esté ladrando´

b.      Mediante la función concat

Program union;

Var

5 3

mailxmail - Cursos para compartir lo que sabes

Page 54: Introduccion Lenguaje Pascal 9958 Completo

      Cad1,Cad2,Cad3 : string [40];

Begin

      Cad1 := `Programa´;

      Cad2 := ` de computadora´;

      Cad3 := Concat (Cad1,Cad2);

      Write (`La frase completa es `,Cad3);

End.   

6.2.4 Otras funciones y procedimientos con cadenas

Las cadenas permiten otras operaciones como las siguientes:

-         Función Lenght : Proporciona la longitud lógica de una cadena de caracteresy devuelve un valor entero. La sintaxis es:

            Lenght (cadena)

Ejemplo:

            Lenght (`Esto es una prueba´);      

            Esta instrucción devolvería el valor de 16.

-         Función Delete : Borra o elimina una subcadena de una cadena. Unasubcadena es una cadena contenida dentro de otra de mayor longitud. La sintaxis es:

                        Delete (cadena,posición,número)

                        Cadena : Representa la cadena original o fuente

                        Posición : Representa la posición del primer carácter a suprimir

Número: Es la cantidad de caracteres que se borrarán (debe ser un valor entero)

-         Función Insert: Inserta una subcadena en una cadena. La sintaxis es lasiguiente:

                        Insert (Cad1,cadena,posición)

                        Cad1: Cadena a insertar

                        Cadena : Cadena donde se insertará

                        Posición: Carácter a partir del cual se insertará Cad1

Si una vez insertada la nueva cadena el tamaño total excede al límite de la variable,se truncará la cadena hasta su longitud máxima.

-         Función Pos (Posición): Esta función permite determinar si una cadena estácontenida en otra. En este caso, la función devuelve la posición donde comienza lacadena buscada en la cadena fuente. Si la cadena no existe, se devuelve unresultado de 0. Utiliza la siguiente sintaxis:

                        Pos (Cadena buscada, Cadena fuente)  

5 4

mailxmail - Cursos para compartir lo que sabes

Page 55: Introduccion Lenguaje Pascal 9958 Completo

-         Función Copy (Copiar): Esta función devuelve una cadena de caracteres(subcadena) extraída de una cadena.

                        Copy (Cadena,Posición, Número)

                        Cadena : Expresión tipo cadena (fuente)

                        Posición : Primer caracter a extraer (tipo entero)

                        Número : Total de caracteres a extraer (tipo entero)

Si la posición es mayor que la longitud de "Cadena", se devuelve una cadena vacía;si el número especifica más caracteres que los indicados desde posición, sólo sedevuelve el resto de la cadena.

Ejemplo:

            Ch := `Esto es una cadena muy larga´;

            Ch2 := Copy (Ch,1,18);

            Write (Ch2)

Esto produciría la cadena `Esto es una cadena´.

-         Función de conversión a mayúsculas (Upcase)

La función Upcase toma un argumento de tipo char y devuelve la correspondienteequivalencia de la expresión en mayúscula. Si la expresión ya está en mayúscula ono tiene ningún carácter equivalente en mayúscula, se devuelve el carácter sinmodificar.

Sintaxis: Upcase (Letra)

Letra es de tipo char. Por ejemplo: Upcase (`a´) devuelve `A´.

-         Acceso a posiciones individuales en una cadena

Como las cadenas son arrays, se puede acceder a sus elementos en formaindividual. Ejemplo:

            Nombre := ´Picapiedra´

Entonces:

            Nombre[1]   P                      

            Nombre[2]    i                       

            Nombre[3]    c                      

            Nombre[4]   a                       

            Nombre[5]   p                       

            Nombre[6]   i

            Nombre[7]   e                       

            Nombre[8]   d                       

5 5

mailxmail - Cursos para compartir lo que sabes

Page 56: Introduccion Lenguaje Pascal 9958 Completo

            Nombre[9]   r            

            Nombre[10] a                      

5 6

mailxmail - Cursos para compartir lo que sabes

Page 57: Introduccion Lenguaje Pascal 9958 Completo

28. Práctica 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 números pares del 1 al 10.

3.      Escribir un programa que en una matriz almacene los números primos del 1 al100 y que al final del programa, en una variable proporcione la suma.

4.      Escriba un programa que lea diez números 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 minúscula y laconvierta a mayúscula. Utilice procedimientos.

7.      Escriba un programa para almacenar la siguiente tabla, que cuente los votos eimprima 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 longitudde la cadena y contar el número de vocales que tiene la palabra o frase.

5 7

mailxmail - Cursos para compartir lo que sabes

Page 58: Introduccion Lenguaje Pascal 9958 Completo

29. Punteros

Introducción

Como vimos anteriormente en la lección número 5, las estructuras de datos dinámicas son aquellas cuya ocupación de memoria puede aumentar o disminuirdurante el tiempo de ejecución. Mediante los punteros, tema que estudiaremos acontinuación, podemos crear estructuras de datos dinámicas que tienen capacidadde variar en tamaño y ocupar tanta memoria como realmente requieran. Estasestructuras son llamadas punteros.

7.1 Concepto

Los punteros son también llamados apuntadores. Son tipos de datos que permitencrear estructuras de datos dinámicas, las cuales pueden variar en tamaño y memoriarequerida. Las variables que se crean y se destruyen durante la ejecución se llaman variables dinámicas o anónimas. Así, durante la ejecución de un programa, puedehaber una posición de memoria específica asociada con una variable dinámica yposteriormente puede no existir ninguna posición de memoria asociada con ella.

Una estructura de datos dinámica es una colección de elementos llamados nodos dela estructura - normalmente tipo registro- que se enlazan o encadenan juntos. Esteenlace se establece asociando con cada nodo un puntero que apunta al nodosiguiente de la estructura.

Las estructuras de datos dinámicas son útiles para almacenar y procesar conjuntosde datos cuyos tamaños cambian durante la ejecución del programa, por ejemplo, elconjunto de trabajos que se han introducido en una computadora y están esperandosu ejecución o el conjunto de nombres de pasajeros y asignación o el conjunto denombres de pasajeros y asignación respectiva de asientos de un vuelo de avióndeterminado.

Pascal proporciona los métodos para asignar y liberar espacio de memoriautilizando punteros y los procedimientos new  y dispose.

El tipo de datos puntero es de tipo simple pues no se puede romper en otroscomponentes más pequeños, como sí sucede con el array o el registro. Los punterosson variables que se utilizan para almacenar la dirección de memoria de otravariable. Las variables que se utilizan para almacenar direcciones son llamadas variables punterovariables puntero o simplemente puntero.

Gráficamente se representa así

Al definir un puntero se debe indicar el tipo de valores que se almacenarán en lasposiciones designadas por los punteros. Esto se debe a que los diferentes tipos dedatos requieren distintas cantidades de memoria para almacenar sus constantes,una variable puntero puede contener una dirección de una posición de memoriaadecuada sólo para un tipo dado.

Por esta razón se dice que un puntero apunta a una variable particular, es decir, a

5 8

mailxmail - Cursos para compartir lo que sabes

Page 59: Introduccion Lenguaje Pascal 9958 Completo

otra posición de memoria.

Una variable tipo puntero contiene la dirección de la posición de otra variable.

7.1.1 Declaración de punteros

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

La sintaxis para la declaración 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 gráfico es el siguiente, donde la variable P contiene 059164 que es ladirección de memoria donde está la variable entera apuntada 345:

5 9

mailxmail - Cursos para compartir lo que sabes

Page 60: Introduccion Lenguaje Pascal 9958 Completo

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 contienenvalores de tipo real. La posición de memoria designada por el valor de la variablepuntero P se representa por P^. Se pueden asignar valores a P^ y utilizar valores deP^ en expresiones tal como cualquier otra variable. Si P apunta a posiciones quecontiene 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 ladeclaración, debido a que el objeto o dirección P^ no existe. Antes de que unprograma utilice un puntero, se requiere abrir espacio para el tipo de datos objetode la dirección del puntero. Para iniciar un puntero se debe utilizar el procedimiento NEW.

7.2.1 New

La declaración de un puntero P no crea una celda de memoria para apuntar a ella. Elprocedimiento (sentencia) New se utiliza para crear la celda de memoria P; es decir,el procedimiento New crea una variable dinámica y establece que una variablepuntero apunte a ella.

Sintaxis:

New (P)

P representa la variable puntero.

La sentencia New (P); llama al procedimiento New que asigna almacenamiento paraun valor determinado y sitúa la dirección de esta celda de memoria en la variablepuntero P. Una vez que se asigna almacenamiento para un valor de tipodeterminado al que está apuntando P, se puede almacenar un valor en esa celda dememoria y manipularlo.

Ejemplo:

New (Ptr);

Ptr^ := `Mckenna´;

La sentencia New (Ptr) crea una celda vacía de memoria a la que apunta Ptr. Lasegunda sentencia sitúa el valor `Mckenna´ en esa celda de memoria.

6 0

mailxmail - Cursos para compartir lo que sabes

Page 61: Introduccion Lenguaje Pascal 9958 Completo

Gráficamente se representaría así:

7.2.2 Dispose

El procedimiento Dispose libera la posición de memoria ocupada por una variabledinámica.

Sintaxis:

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

Gráficamente 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 ni l se utilizapara dar un valor a una variable puntero que no apunta a ninguna posición, nilpuede 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 elargumento es nil o e el argumento tiene un valor. Su sintaxis es:

6 1

mailxmail - Cursos para compartir lo que sabes

Page 62: Introduccion Lenguaje Pascal 9958 Completo

                        Function Assigned (Var P) : Bolean;

P debe ser una referencia de un puntero o tipo procedimiento. La función devuelveverdadero (true) si P no es nil o falso (false) si es nil. Una posible aplicación puedeser la siguiente:

Var P : Pointer;

Begin

  P : nil;

  I f Assigned (P) then

     Writeln (`Prueba Uno´);

     P := @P;

  I f Assigned (P) then

     Writeln (`Prueba Dos´);

End.

La llamada Assigned(P) correspondiente a la evaluación de P <> nil para una variablepuntero, mientras @P <> nil se corresponde a una variable por procedimiento.

6 2

mailxmail - Cursos para compartir lo que sabes

Page 63: Introduccion Lenguaje Pascal 9958 Completo

31. Archivos y registros

Concepto de registro

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

Los componentes de un registro se denominan campos. Cada campo tiene unnombre llamado identificador de campo, que es algún identificador elegido por elprogramador cuando se declara el tipo de registro y un tipo que se especificacuando se declara el tipo de dato record.

6 3

mailxmail - Cursos para compartir lo que sabes

Page 64: Introduccion Lenguaje Pascal 9958 Completo

32. Declaración 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 más nombres de campos que componen el registro.

Tipo: Puede ser cualquier tipo de dato estándar o definido por el usuario.

Un registro se suele representar gráficamente en función 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;

6 4

mailxmail - Cursos para compartir lo que sabes

Page 65: Introduccion Lenguaje Pascal 9958 Completo

33. Manipulación 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 campodesignador o selector de campo de la forma:

            NombreReg.NombreCampo

Los datos mostrados anteriormente en Empleado mediante una secuencia desentencias de asignación:       

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

            Empleado.Edad := 34;

            Empleado.Domicilio := `Calle El Último Grito´;

            Empleado.Salario := 245320;

Una vez que los datos están almacenados en un registro, se pueden manipular deigual 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 números caractereso cadenas. Un registro al ser una estructura compuesta (distintos tipos de datos) espreciso efectuar las operaciones de lectura y escritura individualmente.

Otra operación que se puede realizar entre registros es la asignación (copia delcontenido de un registro en otro del mismo tipo). Si A y D son variables registro delmismo 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

6 5

mailxmail - Cursos para compartir lo que sabes

Page 66: Introduccion Lenguaje Pascal 9958 Completo

La tarea de escribir el selector de campo completo cada vez que se referencia uncampo de un registro es tediosa, sobre todo si el números es grande. La sentencia WITHWITH permite referenciar el nombre del registro en su cabecera y posteriormentepara llamar a algún campo sólo se necesita el nombre del campo y no el selector decampo completo, con el nombre del registro (por ejemplo, Edad en vez deCliente.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.

6 6

mailxmail - Cursos para compartir lo que sabes

Page 67: Introduccion Lenguaje Pascal 9958 Completo

34. Archivos tipificados o aleatorios

Son archivos que pueden contener datos tipo integer, real o record. Para declarar unarchivo 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 Creación 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 operación Assign establece una correspondencia entre la variable tipo archivo conun archivo externo situado en disco.

8.3.1 Apertura de un archivo

Luego de haber sido asignado, el archivo debe ser abierto. Esta operación se realizapor medio de uno de los dos procedimientos predefinidos: rewrite y reset.

8.3.1.1 Reset

Abre un nuevo archivo existente para una operación de lectura. Si se intenta llamar aReset 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; encaso contrario, el archivo queda abierto para una operación de escritura.

Sintaxis:

Rewrite (f);

6 7

mailxmail - Cursos para compartir lo que sabes

Page 68: Introduccion Lenguaje Pascal 9958 Completo

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

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

-          Por el contrario, las sentencias assign y rewrite suponen la existencia delarchivo llamado en el disco. Si este archivo no existe, las sentencias anterioresproducirán errores de ejecución.

El siguiente programa define un tipo registro (cliente) y a continuación rellena (ponevalores en los campos) en la variable correspondiente. Otra variable del mismo tipose asigna a la primera variable y los campos de la segunda variable se imprimen unoa 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.Dirección := `Calle El Último Grito´;

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

   Readln (Cliente.Edad);

   Cliente.Saldo := 245320;

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

   (* Visualización de los campos de Aux *)

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

   Writeln (`Dirección:         `, Aux.Direccion);

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

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

6 8

mailxmail - Cursos para compartir lo que sabes

Page 69: Introduccion Lenguaje Pascal 9958 Completo

End.

Este método de lectura/escritura campo a campo es engorroso. Pascal proporcionala sentencia with que facilitará el proceso de lectura/escritura de los registros.

8.3.2 - 8.3.3 Manipulación 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 writelnsirven 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 efectúa 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;

6 9

mailxmail - Cursos para compartir lo que sabes

Page 70: Introduccion Lenguaje Pascal 9958 Completo

   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);

7 0

mailxmail - Cursos para compartir lo que sabes

Page 71: Introduccion Lenguaje Pascal 9958 Completo

35. Archivos de texto

Un archivo de texto es un tipo estándar, como se ha comentado anteriormente.Consta de una serie de líneas separadas por una marca de fin de línea (eoln, "end ofline"). La marca de fin de línea se obtiene pulsando la tecla Enter o bien lacombinación de teclas CTRL M.

8.4.1 Declaración de un archivo texto

El formato general para declarar una variable tipo text es:

Var

   NombreVariable : Text;

Nombrevariable es cualquier nombre válido de variable.

La longitud de una variable tipo text NO se indica.

8.4.2 Manipulación de archivos de texto

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

El procedimiento Append abre un archivo existente para añadir datos al final delmismo.

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 línea de un archivo. Es una función tipo lógico.

La sintaxis es:

Eoln (var f: text);

f es una variable de archivo de texto. Para llamar a la función se procede así:

eoln (f)

Devuelve true si en la posición actual del archivo está la marca de fin de línea o sieof (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 lógico e indica si el fin dearchivo se ha almacenado mediante true, caso contrario devuelve false. La sintaxises la siguiente:

Eof (var:text);                                                               eoln(f) llamada a la función

7 1

mailxmail - Cursos para compartir lo que sabes

Page 72: Introduccion Lenguaje Pascal 9958 Completo

Práctica

1.       Cree un archivo con sus datos personales: Cédula, nombre, dirección,teléfono,email.

2.       Abra el archivo creado y agréguele cuatro registros más con otros datos.

3. Cree un archivo de números enteros de 1 a 100, léalo y visualícelo en pantalla.

" AMA  COMO  SI NUNCA TE HUBIESEN HERIDO TRABAJA   COMO  SI  NO NECESITARAS  EL  DINERO BAILA COMO SI NADIE TE ESTUVIERA MIRANDO Y VIVECADA DÍA COMO SI FUERA EL ÚLTIMO DE TU VIDA."

7 2

mailxmail - Cursos para compartir lo que sabes

Page 73: Introduccion Lenguaje Pascal 9958 Completo

36. Unidades en Turbo Pascal

Introducción

9.1.1 Concepto

Una unidad es un conjunto de constantes, tipos de datos variables, procedimientosy funciones. Cada unidad es como un programa independiente Pascal o bien unalibrería de declaraciones que se pueden poner en un programa y que permiten queéste se pueda dividir y compilar independientemente. Una unidad puede utilizarotras unidades y posee una parte que puede contener instrucciones de iniciación.

Una unidad contiene uno o más procedimientos, funciones constantes definidas  y aveces otros elementos. Se puede compilar, probar y depurar una unidadindependientemente de un programa principal. Una vez que una unidad ha sidocompilada y depurada, no necesita compilarse más veces, Turbo Pascal se encargade enlazar  la unidad al programa que utiliza esa unidad, empleando siempre enesta tarea menor tiempo que en la propia compilación. Los procedimientos,funciones y constantes que se definen en una unidad pueden ser utilizados porcualquier futuro programa que escriba sin tener que ser declarados en el programa.

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

Turbo Pascal proporciona siete unidades estándar para el uso del programador: SystemSystem, Graph, DOS, Crt, Printer, Turbo3 y Graph3. Las cinco primeras sirven paraescribir sus programas y las dos últimas para mantener compatibilidad conprogramas y archivos de datos creados con la versión 3.0 de Turbo Pascal. Las sieteunidades están almacenadas en el archivo TURBO/.TPL (librería de programasresidente propia del programa Turbo Pascal). La versión 7.0 introdujo dos nuevasunidades WinDos y Strings.

9.1.2 Estructura de una unidad

Una unidad está constituida de cuatro partes: cabecera de la unidad, sección deinterface (interfaz), sección implementation (implementación) y sección initialization(inicialización).

Formato:

Unit <identif icador>

      Interface

      Uses <lista de unidades>;  (* opcional *)

            (* declaraciones públicas de objetos *)   

      Implementation

            (* declaraciones privadas *)

            (* definición de procedimientos y funciones públicos *)

begin

7 3

mailxmail - Cursos para compartir lo que sabes

Page 74: Introduccion Lenguaje Pascal 9958 Completo

            (* código de inicialización *) (* opcional *)

end

9.1.2.1 Cabecera de la unidad

La cabecera de la unidad comienza con la palabra reservada unit, seguida por elnombre de la unidad (identificador válido). Es similar a una cabecera de programa,donde la palabra reservada unit reemplaza a la palabra reservada program. Porejemplo para crear una unidad denominada MiUnidad se ha de utilizar la cabecerade la unidad, así:                      

                                               Unit MiUnidad;

El nombre de la unidad es arbitrario, pero debe coincidir con el nombre del archivoque 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 extensión TPU (Turbo PascalUnit). Si el nombre de la unidad es diferente del nombre del archivo, el programaprincipal no podrá encontrar el archivo TPU (Turbo Pascal Unit). Si el nombre de launidad 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 seincluyan en la cláusula uses que aparece inmediatamente después de la palabra interface, y separadas por comas.

9.1.2.2 Sección de interfaz

La sección de interface (interfaz) es la parte de la unidad que sirve para conectardicha unidad con otras unidades y programas. Esta sección se conoce como "la partepública" de la unidad, ya que todos los objetos que figuren en esta sección son visiblesvisibles desde el exterior o exportables. Las restantes unidades y programas tienenacceso a la información contenida en la sección de interface.

En la interfaz de la unidad se pueden declarar constantes, tipos de datos, variables yprocedimientos. Los procedimientos y funciones visibles a cualquier programa queutilice la unidad se declaran aquí, pero sus cuerpos, reales - implementaciones- seencuentran en la sección de implementación. La sección de interfaz indica a unprogramador cuáles procedimientos y funciones se pueden utilizar en un programa.La sección de implementación indica al compilador cómo implementarlos.

  Ejemplo de declaración

Unit Rayo;

Interface

      Uses

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

      Var

            a, b, c : integer;

7 4

mailxmail - Cursos para compartir lo que sabes

Page 75: Introduccion Lenguaje Pascal 9958 Completo

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

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

9.1.2.3 Sección de implementación

La sección de implementación es estrictamente privada; su contenido no esexportable. Sólo los procedimientos o funciones que aparecen en la seccióninterface pueden ser invocados desde el exterior de la unidad. Esta sección contieneel cuerpo de los procedimientos y funciones declarados en la sección 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.

Nótese que la declaración de una unidad está terminada por la palabra reservada End y un punto.

9.1.2.3 Sección de iniciación

La sección de iniciación puede contener instrucciones pero también puede estarvacía. Estas instrucciones sirven, por ejemplo, para iniciar variables. La ejecución deestas instrucciones se efectúa en el momento del lanzamiento o ejecución de unprograma que utiliza la unidad antes de la ejecución de la primera instrucción delcuerpo del programa.

En la sección de iniciación se inicializa cualquier estructura de datos (variables) queutilice la unidad y las hace disponibles (a través del interface) al programa que lasutiliza. Comienza con la palabra reservada begin seguida por una secuencia desentencias y termina con "end. ".

7 5

mailxmail - Cursos para compartir lo que sabes

Page 76: Introduccion Lenguaje Pascal 9958 Completo

La sección de iniciación debe llamarse antes de que el cuerpo del programa seejecute.

7 6

mailxmail - Cursos para compartir lo que sabes

Page 77: Introduccion Lenguaje Pascal 9958 Completo

37. Aplicación

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

La cláusula uses de la parte de interface sólo es necesaria cuando la unidad actualllame a otras unidades. Todos los procedimientos y funciones en la sección deinterface deben ser definidos en la sección de implementación.

La cabecera de los procedimientos y funciones declarados en la parte de interfacedeben ser idénticos a la cabecera de las mismas funciones definidas en la parte deimplementación; sin embargo, es posible escribir la cabecera en forma abreviada enla sección de implementación.

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 código fuente de una unidad, se compila de igual formaque un programa, pero el archivo obtenido no es ejecutable directamente. Tiene laextensión TPU (Turbo Pascal Unit).

7 7

mailxmail - Cursos para compartir lo que sabes

Page 78: Introduccion Lenguaje Pascal 9958 Completo

Para utilizar esa unidad dentro de un programa, debe incluir una sentencia usespara 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 losvalores de dos variables, así como calcular su valor máximo.

Unit Demo1;

Interface

   Procedure Intercambio (Var I,J : Integer);      

   Function Máximo (I, J : Integer) : Integer;

Implementation

   Procedure Intercambio;

   Var

      Aux : Integer;

   Begin

      Aux := I;

      I := J;

      J := Aux

   End;

Function Máximo;

Begin

   I f  I>J then

      Maximo := I

   Else

      Maximo :=J

End;

End.

Una vez que lo haya escrito, guárdelo en disco con el nombre de Demo1.PAS, acontinuación, compílelo hacia el disco. El código objeto se llamará Demo1.TPU. Estaunidad la utilizaremos en el siguiente programa:

Program Prueba;

Uses

7 8

mailxmail - Cursos para compartir lo que sabes

Page 79: Introduccion Lenguaje Pascal 9958 Completo

    Demo1;

Var

      X,Y : Integer;

   Begin

      Write (`Introducir dos números enteros: `);

      Readln (X,Y);

      Intercambio (X,Y);

      Writeln (X,´ `,Y);

      Writeln (`El valor máximo es: `, Máximo (X,Y));

 End.

7 9

mailxmail - Cursos para compartir lo que sabes

Page 80: Introduccion Lenguaje Pascal 9958 Completo

38. Aplicaciones

9. 3. 1 Utilización de unidades estándar

El archivo TURBO.TPL que contiene todas las unidades estándar se carga enmemoria central a la vez que el propio compilador y está disponible en cualquiermomento, con la ayuda de la cláusula uses.

Como se ha visto anteriormente, un programa debe contener la cláusula uses,situada inmediatamente después de la cabecera.

9. 3. 1. 1 Unidad System

Esta unidad contiene todos los procedimientos y funciones estándar de Turbo Pascalrelativas a entradas/salidas, cadena de caracteres, gestión de memoria, etc.

9. 3. 1. 2 Unidad Wincrt

Esta unidad proporciona un conjunto específico de declaraciones para entrada ysalida: constantes, variables, procedimientos y funciones, que permiten el acceso alcontrol de los modos de pantalla, al teclado, a los colores, al posicionamiento delcursor, etc.

La mayoría de los programas de Pascal que hacen uso de la pantalla pararepresentar salidas recurren a la unidad Wincrt. Algunos procedimientos quenecesitan de esta unidad son:        

                        Clrscr: Limpia la pantalla

                        KeyPressed: Detecta la pulsación 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 yfunciones relacionadas con el sistema operativo DOS y la gestión de archivos. Lossubprogramas que constituyen esta unidad no existen en Pascal estándar. Estaunidad no necesita ninguna otra unidad en su declaración.

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;

8 0

mailxmail - Cursos para compartir lo que sabes

Page 81: Introduccion Lenguaje Pascal 9958 Completo

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.

8 1

mailxmail - Cursos para compartir lo que sabes