introduccion lenguaje pascal 9958 completo
TRANSCRIPT
Introducción al lenguaje PascalAutor: [email protected]
1
mailxmail - Cursos para compartir lo que sabes
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
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
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
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
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
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
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
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
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
1 1
mailxmail - Cursos para compartir lo que sabes
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
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
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
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
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
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
3.1.3.2 Operador or
3.1.3.3 Operador not
1 8
mailxmail - Cursos para compartir lo que sabes
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
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
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
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
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
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
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
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
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
(* 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
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
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
3 1
mailxmail - Cursos para compartir lo que sabes
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
- 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
Nombre[9] r
Nombre[10] a
5 6
mailxmail - Cursos para compartir lo que sabes
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
(* 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
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
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
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
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
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
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
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