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 actual llame a otras unidades. Todos los procedimientos y funciones en la sección de interface deben ser definidos en la sección de implementación.
La cabecera de los procedimientos y funciones declarados en la parte de interface deben ser idénticos a la cabecera de las mismas funciones definidas en la parte de implementación; sin embargo, es posible escribir la cabecera en forma abreviada en la 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 forma que un programa, pero el archivo obtenido no es ejecutable directamente. Tiene la extensión TPU (Turbo Pascal Unit).
Para utilizar esa unidad dentro de un programa, debe incluir una sentencia uses para indiciar al compilador que está utilizando esa unidad.
ProgramPrueba;
Uses Utilidad;
Ejemplo:
Escribir una unidad que conste a su vez de un procedimiento para intercambiar los valores de dos variables, así como calcular su valor máximo.
Unit Demo1;
* Cursos Idiomas Extranjero Estudia inglés, francés, italiano alemán o chino en el extranjero
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
If 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, a continuación, compílelo hacia el disco. El código objeto se llamará Demo1.TPU. Esta unidad la utilizaremos en el siguiente programa:
Program Prueba;
Uses
Demo1;
Var
X,Y : Integer;
Begin
Write (`Introducir dos números enteros: `);
Readln (X,Y);
Intercambio (X,Y);
Writeln (X,´ `,Y);
Writeln (`El valor máximo es: `, Máximo (X,Y));
End.
Historia de pascal
miércoles, 23 de marzo de 2011
Unidades en Turbo Pascal
Introducción
Una unidad es un conjunto de constantes, tipos de datos variables, procedimientos y funciones. Cada unidad es como un programa independiente Pascal o bien una librería de declaraciones que se pueden poner en un programa y que permiten que éste se pueda dividir y compilar independientemente. Una unidad puede utilizar otras unidades y posee una parte que puede contener instrucciones de iniciación.
Una unidad contiene uno o más procedimientos, funciones constantes definidas y a veces otros elementos. Se puede compilar, probar y depurar una unidad independientemente de un programa principal. Una vez que una unidad ha sido compilada y depurada, no necesita compilarse más veces, Turbo Pascal se encarga de enlazar la unidad al programa que utiliza esa unidad, empleando siempre en esta tarea menor tiempo que en la propia compilación. Los procedimientos, funciones y constantes que se definen en una unidad pueden ser utilizados por cualquier futuro programa que escriba sin tener que ser declarados en el programa.
Las unidades tienen una estructura similar a los programas y en consecuencia requieren un formato estricto, y es preciso declararlas por el usuario como si se tratara de un programa o subprograma.
Turbo Pascal proporciona siete unidades estándar para el uso del programador: System, Graph, DOS, Crt, Printer, Turbo3 y Graph3. Las cinco primeras sirven para escribir sus programas y las dos últimas para mantener compatibilidad con programas y archivos de datos creados con la versión 3.0 de Turbo Pascal. Las siete unidades están almacenadas en el archivo TURBO/.TPL (librería de programas residente propia del programa Turbo Pascal). La versión 7.0 introdujo dos nuevas unidades WinDos y Strings.
Estructura de una unidad
Una unidad está constituida de cuatro partes: cabecera de la unidad, sección de interface (interfaz), sección implementation (implementación) y sección initialization (inicialización).
Formato:
Unit <identificador>
Interface
Uses <lista de unidades>; (* opcional *)
(* declaraciones públicas de objetos *)
Implementation
(* declaraciones privadas *)
(* definición de procedimientos y funciones públicos *)
begin
(* código de inicialización *) (* opcional *)
end
Cabecera de la unidad
La cabecera de la unidad comienza con la palabra reservada unit, seguida por el nombre de la unidad (identificador válido). Es similar a una cabecera de programa, donde la palabra reservada unit reemplaza a la palabra reservada program. Por ejemplo para crear una unidad denominada MiUnidad se ha de utilizar la cabecera de la unidad, así:
Unit MiUnidad;
El nombre de la unidad es arbitrario, pero debe coincidir con el nombre del archivo que contiene. Por ejemplo, si la unidad se denomina Test
Unit Test;
El archivo que contiene el programa fuente de la unidad se debe llamar Test.PAS. Cuando turbo Pascal combina la unidad, le asigna la extensión TPU (Turbo Pascal Unit). Si el nombre de la unidad es diferente del nombre del archivo, el programa principal no podrá encontrar el archivo TPU (Turbo Pascal Unit). Si el nombre de la unidad es diferente del nombre del archivo, el programa principal no podrá encontrar el archivo TPU.
Una unidad creada por el usuario puede utilizar otras unidades, siempre que se incluyan en la cláusula uses que aparece inmediatamente después de la palabra interface, y separadas por comas.
Sección de interfaz
La sección de interface (interfaz) es la parte de la unidad que sirve para conectar dicha unidad con otras unidades y programas. Esta sección se conoce como "la parte pública" de la unidad, ya que todos los objetos que figuren en esta sección son visibles desde el exterior o exportables. Las restantes unidades y programas tienen acceso 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 y procedimientos. Los procedimientos y funciones visibles a cualquier programa que utilice la unidad se declaran aquí, pero sus cuerpos, reales - implementaciones- se encuentran en la sección de implementación. La sección de interfaz indica a un programador 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
* Clases de Italiano Aprende o mejora tu Italiano con el Método Conversacional ¡Inscríbete!
Berlitz.com.mx/ItalianoEnlaces patrocinados
Unit Rayo;
Interface
Uses
DOS, Graph, Crt; (* se utilizan las unidades DOS, Graph y Crt *)
Var
a, b, c : integer;
Function Exponencial (a, b : integer) : real;
Procedure Dividir (x, y : integer; var cociente : integer);
Sección de implementación
La sección de implementación es estrictamente privada; su contenido no es exportable. Sólo los procedimientos o funciones que aparecen en la sección interface pueden ser invocados desde el exterior de la unidad. Esta sección contiene el 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.
Sección de iniciación
La sección de iniciación puede contener instrucciones pero también puede estar vacía. Estas instrucciones sirven, por ejemplo, para iniciar variables. La ejecución de estas instrucciones se efectúa en el momento del lanzamiento o ejecución de un programa que utiliza la unidad antes de la ejecución de la primera instrucción del cuerpo del programa.
En la sección de iniciación se inicializa cualquier estructura de datos (variables) que utilice la unidad y las hace disponibles (a través del interface) al programa que las utiliza. Comienza con la palabra reservada begin seguida por una secuencia de sentencias y termina con "end. ".
La sección de iniciación debe llamarse antes de que el cuerpo del programa se ejecute.
Una unidad es un conjunto de constantes, tipos de datos variables, procedimientos y funciones. Cada unidad es como un programa independiente Pascal o bien una librería de declaraciones que se pueden poner en un programa y que permiten que éste se pueda dividir y compilar independientemente. Una unidad puede utilizar otras unidades y posee una parte que puede contener instrucciones de iniciación.
Una unidad contiene uno o más procedimientos, funciones constantes definidas y a veces otros elementos. Se puede compilar, probar y depurar una unidad independientemente de un programa principal. Una vez que una unidad ha sido compilada y depurada, no necesita compilarse más veces, Turbo Pascal se encarga de enlazar la unidad al programa que utiliza esa unidad, empleando siempre en esta tarea menor tiempo que en la propia compilación. Los procedimientos, funciones y constantes que se definen en una unidad pueden ser utilizados por cualquier futuro programa que escriba sin tener que ser declarados en el programa.
Las unidades tienen una estructura similar a los programas y en consecuencia requieren un formato estricto, y es preciso declararlas por el usuario como si se tratara de un programa o subprograma.
Turbo Pascal proporciona siete unidades estándar para el uso del programador: System, Graph, DOS, Crt, Printer, Turbo3 y Graph3. Las cinco primeras sirven para escribir sus programas y las dos últimas para mantener compatibilidad con programas y archivos de datos creados con la versión 3.0 de Turbo Pascal. Las siete unidades están almacenadas en el archivo TURBO/.TPL (librería de programas residente propia del programa Turbo Pascal). La versión 7.0 introdujo dos nuevas unidades WinDos y Strings.
Estructura de una unidad
Una unidad está constituida de cuatro partes: cabecera de la unidad, sección de interface (interfaz), sección implementation (implementación) y sección initialization (inicialización).
Formato:
Unit <identificador>
Interface
Uses <lista de unidades>; (* opcional *)
(* declaraciones públicas de objetos *)
Implementation
(* declaraciones privadas *)
(* definición de procedimientos y funciones públicos *)
begin
(* código de inicialización *) (* opcional *)
end
Cabecera de la unidad
La cabecera de la unidad comienza con la palabra reservada unit, seguida por el nombre de la unidad (identificador válido). Es similar a una cabecera de programa, donde la palabra reservada unit reemplaza a la palabra reservada program. Por ejemplo para crear una unidad denominada MiUnidad se ha de utilizar la cabecera de la unidad, así:
Unit MiUnidad;
El nombre de la unidad es arbitrario, pero debe coincidir con el nombre del archivo que contiene. Por ejemplo, si la unidad se denomina Test
Unit Test;
El archivo que contiene el programa fuente de la unidad se debe llamar Test.PAS. Cuando turbo Pascal combina la unidad, le asigna la extensión TPU (Turbo Pascal Unit). Si el nombre de la unidad es diferente del nombre del archivo, el programa principal no podrá encontrar el archivo TPU (Turbo Pascal Unit). Si el nombre de la unidad es diferente del nombre del archivo, el programa principal no podrá encontrar el archivo TPU.
Una unidad creada por el usuario puede utilizar otras unidades, siempre que se incluyan en la cláusula uses que aparece inmediatamente después de la palabra interface, y separadas por comas.
Sección de interfaz
La sección de interface (interfaz) es la parte de la unidad que sirve para conectar dicha unidad con otras unidades y programas. Esta sección se conoce como "la parte pública" de la unidad, ya que todos los objetos que figuren en esta sección son visibles desde el exterior o exportables. Las restantes unidades y programas tienen acceso 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 y procedimientos. Los procedimientos y funciones visibles a cualquier programa que utilice la unidad se declaran aquí, pero sus cuerpos, reales - implementaciones- se encuentran en la sección de implementación. La sección de interfaz indica a un programador 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
* Clases de Italiano Aprende o mejora tu Italiano con el Método Conversacional ¡Inscríbete!
Berlitz.com.mx/ItalianoEnlaces patrocinados
Unit Rayo;
Interface
Uses
DOS, Graph, Crt; (* se utilizan las unidades DOS, Graph y Crt *)
Var
a, b, c : integer;
Function Exponencial (a, b : integer) : real;
Procedure Dividir (x, y : integer; var cociente : integer);
Sección de implementación
La sección de implementación es estrictamente privada; su contenido no es exportable. Sólo los procedimientos o funciones que aparecen en la sección interface pueden ser invocados desde el exterior de la unidad. Esta sección contiene el 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.
Sección de iniciación
La sección de iniciación puede contener instrucciones pero también puede estar vacía. Estas instrucciones sirven, por ejemplo, para iniciar variables. La ejecución de estas instrucciones se efectúa en el momento del lanzamiento o ejecución de un programa que utiliza la unidad antes de la ejecución de la primera instrucción del cuerpo del programa.
En la sección de iniciación se inicializa cualquier estructura de datos (variables) que utilice la unidad y las hace disponibles (a través del interface) al programa que las utiliza. Comienza con la palabra reservada begin seguida por una secuencia de sentencias y termina con "end. ".
La sección de iniciación debe llamarse antes de que el cuerpo del programa se ejecute.
Manipulación de datos tipo registro
Acceso a los campos de un registro
Se puede acceder a cada campo de un registro directamente utilizando un designador o selector de campo de la forma:
NombreReg.NombreCampo
Los datos mostrados anteriormente en Empleado mediante una secuencia de sentencias de 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 de igual forma que otros datos en memoria.
Write (Empleado.Nombre); (* Visualiza Chi-ki-tico *)
Operaciones sobre registros
Los procedimientos de lectura y escritura permiten únicamente números caracteres o cadenas. Un registro al ser una estructura compuesta (distintos tipos de datos) es preciso efectuar las operaciones de lectura y escritura individualmente.
Otra operación que se puede realizar entre registros es la asignación (copia del contenido de un registro en otro del mismo tipo). Si A y D son variables registro del mismo tipo, la sentencia:
A := D
copia todos los valores asociados con el registro D al registro A.
Ejemplo:
Type
Stock = record
Numeros : Integer;
Nombre : String[20];
Precio : Real;
end;
Var
Articulo : Stock
La sentencia WITH
La tarea de escribir el selector de campo completo cada vez que se referencia un campo de un registro es tediosa, sobre todo si el números es grande. La sentencia WITH permite referenciar el nombre del registro en su cabecera y posteriormente para llamar a algún campo sólo se necesita el nombre del campo y no el selector de campo completo, con el nombre del registro (por ejemplo, Edad en vez de Cliente.Edad).
Curso Linux básico-medio Nivel certificación, 12 pagos y beca 50% alumnos y profesores
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.
Se puede acceder a cada campo de un registro directamente utilizando un designador o selector de campo de la forma:
NombreReg.NombreCampo
Los datos mostrados anteriormente en Empleado mediante una secuencia de sentencias de 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 de igual forma que otros datos en memoria.
Write (Empleado.Nombre); (* Visualiza Chi-ki-tico *)
Operaciones sobre registros
Los procedimientos de lectura y escritura permiten únicamente números caracteres o cadenas. Un registro al ser una estructura compuesta (distintos tipos de datos) es preciso efectuar las operaciones de lectura y escritura individualmente.
Otra operación que se puede realizar entre registros es la asignación (copia del contenido de un registro en otro del mismo tipo). Si A y D son variables registro del mismo tipo, la sentencia:
A := D
copia todos los valores asociados con el registro D al registro A.
Ejemplo:
Type
Stock = record
Numeros : Integer;
Nombre : String[20];
Precio : Real;
end;
Var
Articulo : Stock
La sentencia WITH
La tarea de escribir el selector de campo completo cada vez que se referencia un campo de un registro es tediosa, sobre todo si el números es grande. La sentencia WITH permite referenciar el nombre del registro en su cabecera y posteriormente para llamar a algún campo sólo se necesita el nombre del campo y no el selector de campo completo, con el nombre del registro (por ejemplo, Edad en vez de Cliente.Edad).
Curso Linux básico-medio Nivel certificación, 12 pagos y beca 50% alumnos y profesores
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.
Cadenas ("Strings")
Pascal, como cualquier otro lenguaje, debe tener la capacidad de procesar frases como "Presione ENTER para continuar", "Calculando...", "Proceso terminado", etc.
Los datos tipo char y string permiten la manipulación de datos no numéricos.
Una cadena de caracteres o string es una serie de caracteres cuya longitud (número de caracteres que contiene) puede variar de 1 hasta 255 caracteres. Turbo Pascal tiene el tipo de dato string que almacena información de texto. Este dato se puede almacenar en constantes y en variables de cadena. Una variable de cadena está declarada para la palabra string seguida de la longitud máxima de la cadena encerrada entre corchetes.
Declaración de una variable tipo string
Las variables de cadena se pueden declarar las de cualquier otro tipo, ya sea en la secció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 bien operaciones de lectura / escritura en los programas.
Por ejemplo:
Program Ejemplo;
Var
Mensaje = string[40];
Begin
Mensaje := `Hola mis amigos, por favor estudien bastante´;
Write (`Mi mensaje de hoy para ustedes es: `),Mensaje;
Writeln;
Write (`Presione enter...´);
Readln
End.
Longitud de una cadena
Una cadena físicamente es una estructura de una secuencia de 0 hasta 255 caracteres de longitud. Sin embargo, la ocupación en memoria de una cadena es un nú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 se debe a que el primer byte en una cadena, contiene la longitud de la cadena actualmente almacenada en memoria.
Cadenas (Strings)
* Spa para parejas En el DF Consigue Spas para parejas En el DF & otras Ofertas. 50-90% Off!
Supongamos que esta palabra corresponde a un dato almacenado en la variable PUESTO que fue definida de la siguiente manera:
Var
Puesto : String[20];
Sucede que, entonces, la longitud lógica de la variable será de 11 bytes pero la longitud física será de 20 bytes pues así fue definida.
Asignación de cadenas
A las variables de cadena, como se ha visto, se pueden dar valores con una sentencia de asignación o con una sentencia de lectura (read). Ambas situaciones se pueden 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 de cadena que contiene el correspondiente valor. Esta ecuación actúa como la sentencia de asignación que evalúa la cadena fuente y se almacena en la variable de la cadena destino.
Dependiendo del tamaño (longitud de la cadena) de las cadenas fuente y destino se pueden presentar tres casos diferentes que analizaremos a partir de la siguiente declaración de variables de cadena.
Var
Cad1 : String [8];
Cad2 : String [11];
Cad3 : String [15];
Cad4 : String [11];
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 un cará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;
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 cadena Cad3 seguirá teniendo una longitud máxima de 15 caracteres, pero sólo se almacenan en ella ahora 11 caracteres y su longitud actual será de 11.
Cad3 I N F O R M A T I C A longitud actual = 11
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 longitud máxima = 15
La longitud de la cadena destino es mayor que la cadena fuente
Supongamos que se trata de ejecutar ahora
Cad1 := Cad2;
En este caso, como Cad1 tiene una longitud de ocho caracteres, la cadena destino no se puede almacenar totalmente. En este caso se trunca la cadena destino y se almacenan en Cad1 los primeros ocho caracteres (de izquierda a derecha) de Cad2.
Cad1 I N F O R M A T longitud actual = 11
1 2 3 4 5 6 7 8 longitud máxima = 8
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úmero de caracteres que contiene) puede variar de 1 hasta 255 caracteres. Turbo Pascal tiene el tipo de dato string que almacena información de texto. Este dato se puede almacenar en constantes y en variables de cadena. Una variable de cadena está declarada para la palabra string seguida de la longitud máxima de la cadena encerrada entre corchetes.
Declaración de una variable tipo string
Las variables de cadena se pueden declarar las de cualquier otro tipo, ya sea en la secció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 bien operaciones de lectura / escritura en los programas.
Por ejemplo:
Program Ejemplo;
Var
Mensaje = string[40];
Begin
Mensaje := `Hola mis amigos, por favor estudien bastante´;
Write (`Mi mensaje de hoy para ustedes es: `),Mensaje;
Writeln;
Write (`Presione enter...´);
Readln
End.
Longitud de una cadena
Una cadena físicamente es una estructura de una secuencia de 0 hasta 255 caracteres de longitud. Sin embargo, la ocupación en memoria de una cadena es un nú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 se debe a que el primer byte en una cadena, contiene la longitud de la cadena actualmente almacenada en memoria.
Cadenas (Strings)
* Spa para parejas En el DF Consigue Spas para parejas En el DF & otras Ofertas. 50-90% Off!
Supongamos que esta palabra corresponde a un dato almacenado en la variable PUESTO que fue definida de la siguiente manera:
Var
Puesto : String[20];
Sucede que, entonces, la longitud lógica de la variable será de 11 bytes pero la longitud física será de 20 bytes pues así fue definida.
Asignación de cadenas
A las variables de cadena, como se ha visto, se pueden dar valores con una sentencia de asignación o con una sentencia de lectura (read). Ambas situaciones se pueden 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 de cadena que contiene el correspondiente valor. Esta ecuación actúa como la sentencia de asignación que evalúa la cadena fuente y se almacena en la variable de la cadena destino.
Dependiendo del tamaño (longitud de la cadena) de las cadenas fuente y destino se pueden presentar tres casos diferentes que analizaremos a partir de la siguiente declaración de variables de cadena.
Var
Cad1 : String [8];
Cad2 : String [11];
Cad3 : String [15];
Cad4 : String [11];
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 un cará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;
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 cadena Cad3 seguirá teniendo una longitud máxima de 15 caracteres, pero sólo se almacenan en ella ahora 11 caracteres y su longitud actual será de 11.
Cad3 I N F O R M A T I C A longitud actual = 11
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 longitud máxima = 15
La longitud de la cadena destino es mayor que la cadena fuente
Supongamos que se trata de ejecutar ahora
Cad1 := Cad2;
En este caso, como Cad1 tiene una longitud de ocho caracteres, la cadena destino no se puede almacenar totalmente. En este caso se trunca la cadena destino y se almacenan en Cad1 los primeros ocho caracteres (de izquierda a derecha) de Cad2.
Cad1 I N F O R M A T longitud actual = 11
1 2 3 4 5 6 7 8 longitud máxima = 8
Parámetros
Un parámetro es un método para pasar información (valores a variables) del programa principal a un procedimiento y viceversa.
Un parámetro es, prácticamente, una variable cuyo valor debe ser ya sea proporcionado por el programa principal al procedimiento o ser devuelto desde el procedimiento hasta el programa principal. Por consiguiente, existen dos tipos de parámetros:
- Parámetros de entrada: Sus valores deben ser proporcionados por el programa principal.
- Parámetros de salida: Son parámetros cuyos valores se calcularán en el procedimiento 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 programa principal y los procedimientos ni viceversa.
- Procedimientos con parámetros: Existe comunicación entre el programa principal 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 programa principal.
Procedure Geometria (Longitud, Anchura : Real; Var Area, Perímetro : Real);
Begin
Area := Longitud * Anchura;
Perimetro := 2 * (Longitud + Anchura)
End;
Parámetros actuales y formales
Las sentencias llamadas a procedimientos constan de dos partes: un nombre de procedimiento 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 al procedimiento nombreproc.
En la declaración de un procedimiento cuando se incluyen parámetros, éstos se denominan parámetros formales o ficticios (pf1, pf2, pf3, ...). Ellos sirven para contener 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 el procedimiento, sin embargo, cuando se ejecuta la sentencia de llamada al procedimiento es preciso que tengan valores asignados, ya que en caso contrario se producirá un error.
Program Correspondencia;
Uses Wincrt;
Var
X,Y,A,P : real;
Procedure Geometria (Longitud, Anchura : Real; Var Area, Perimetro : Real);
Begin (* 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.
Un parámetro es, prácticamente, una variable cuyo valor debe ser ya sea proporcionado por el programa principal al procedimiento o ser devuelto desde el procedimiento hasta el programa principal. Por consiguiente, existen dos tipos de parámetros:
- Parámetros de entrada: Sus valores deben ser proporcionados por el programa principal.
- Parámetros de salida: Son parámetros cuyos valores se calcularán en el procedimiento 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 programa principal y los procedimientos ni viceversa.
- Procedimientos con parámetros: Existe comunicación entre el programa principal 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 programa principal.
Procedure Geometria (Longitud, Anchura : Real; Var Area, Perímetro : Real);
Begin
Area := Longitud * Anchura;
Perimetro := 2 * (Longitud + Anchura)
End;
Parámetros actuales y formales
Las sentencias llamadas a procedimientos constan de dos partes: un nombre de procedimiento 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 al procedimiento nombreproc.
En la declaración de un procedimiento cuando se incluyen parámetros, éstos se denominan parámetros formales o ficticios (pf1, pf2, pf3, ...). Ellos sirven para contener 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 el procedimiento, sin embargo, cuando se ejecuta la sentencia de llamada al procedimiento es preciso que tengan valores asignados, ya que en caso contrario se producirá un error.
Program Correspondencia;
Uses Wincrt;
Var
X,Y,A,P : real;
Procedure Geometria (Longitud, Anchura : Real; Var Area, Perimetro : Real);
Begin (* 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.
Ciclos
Es una estructura de control que permite la repetición de una serie determinada de sentencias. Se le llama también bucle o lazo.
El cuerpo del ciclo o bucle contiene las sentencias que se repiten. Pascal proporciona tres estructuras o sentencias de control para especificar la repetición: while, repeat, for.
Nos ocuparemos de estudiar el ciclo FOR y el ciclo REPEAT.
3.4.1 La sentencia FOR
En numerosas ocasiones se puede desear un bucle que se ejecute un número determinado de veces, y cuyo número se conozca por anticipado. Para aplicaciones de este tipo se utiliza la sentencia FOR.
La sentencia FOR requiere que conozcamos por anticipado el número de veces que se ejecutan las sentencias que se encuentran dentro del ciclo. El ciclo for se incremente 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;
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 ciclo condicional que se repite hasta que la condición se hace verdadera.
El cuerpo del ciclo o bucle contiene las sentencias que se repiten. Pascal proporciona tres estructuras o sentencias de control para especificar la repetición: while, repeat, for.
Nos ocuparemos de estudiar el ciclo FOR y el ciclo REPEAT.
3.4.1 La sentencia FOR
En numerosas ocasiones se puede desear un bucle que se ejecute un número determinado de veces, y cuyo número se conozca por anticipado. Para aplicaciones de este tipo se utiliza la sentencia FOR.
La sentencia FOR requiere que conozcamos por anticipado el número de veces que se ejecutan las sentencias que se encuentran dentro del ciclo. El ciclo for se incremente 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;
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 ciclo condicional que se repite hasta que la condición se hace verdadera.
Selección de acciones alternativas
La sentencia IF
Puesto que las expresiones lógicas toman el valor verdadero o falso, se necesita una sentencia de control que indique a la computadora que ejecute una sentencia en caso de que la 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);
If 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.
Sentencias IF anidadas
La sentencia que sigue a la palabra reservada then o else puede ser cualquiera, incluso otra sentencia if - then - else. Cuando existe una sentencia if - then - else dentro de otra sentencia if - then - else, se dice que dichas sentencias están anidadas.
Ejemplo:
Program Mayor;
Uses
Wincrt;
Var
A,B,C : Integer;
Elmayor : Integer;
Begin
Writeln (`Digite tres números enteros `);
Readln (A,B,C);
If A > B Then
If A > C Then
Elmayor := A
Else
Elmayor := C
Else
If B > C Then
Elmayor := B
Else
Elmayor := C;
* Fundación Foro Educación a distancia Psicoterapias Cognitivas y Psicología Positiva
Writeln (`El número mayor es: `,Elmayor)
End.
La sentencia CASE
La sentencia CASE se utiliza para elegir entre diferentes alternativas. Una sentencia CASE se compone de varias sentencias simples. Cuando un CASE se ejecuta, una y só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 teclas predefinidas, cuando se presiona otra tecla, emite un pitido de advertencia*)
Uses
Wincrt;
Var
X,Y : Integer;
C : Char;
Begin
Clrscr;
X := 40;
Y := 10;
GotoXY (X,Y);
Write (`*´);
Repeat
C := Readkey;
GotoXY (X,Y);
Write (` `);
Case C of
`S´ : Y := Y - 1;
`B´ : Y := Y + 1;
`D´ : X := X + 1;
`I´ : X := X - 1;
`P´ : Exit
Else
Write (Chr(7)
End;
GotoXY (X,Y);
Write (`*´)
Until C = `P´
End.
Puesto que las expresiones lógicas toman el valor verdadero o falso, se necesita una sentencia de control que indique a la computadora que ejecute una sentencia en caso de que la 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);
If 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.
Sentencias IF anidadas
La sentencia que sigue a la palabra reservada then o else puede ser cualquiera, incluso otra sentencia if - then - else. Cuando existe una sentencia if - then - else dentro de otra sentencia if - then - else, se dice que dichas sentencias están anidadas.
Ejemplo:
Program Mayor;
Uses
Wincrt;
Var
A,B,C : Integer;
Elmayor : Integer;
Begin
Writeln (`Digite tres números enteros `);
Readln (A,B,C);
If A > B Then
If A > C Then
Elmayor := A
Else
Elmayor := C
Else
If B > C Then
Elmayor := B
Else
Elmayor := C;
* Fundación Foro Educación a distancia Psicoterapias Cognitivas y Psicología Positiva
Writeln (`El número mayor es: `,Elmayor)
End.
La sentencia CASE
La sentencia CASE se utiliza para elegir entre diferentes alternativas. Una sentencia CASE se compone de varias sentencias simples. Cuando un CASE se ejecuta, una y só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 teclas predefinidas, cuando se presiona otra tecla, emite un pitido de advertencia*)
Uses
Wincrt;
Var
X,Y : Integer;
C : Char;
Begin
Clrscr;
X := 40;
Y := 10;
GotoXY (X,Y);
Write (`*´);
Repeat
C := Readkey;
GotoXY (X,Y);
Write (` `);
Case C of
`S´ : Y := Y - 1;
`B´ : Y := Y + 1;
`D´ : X := X + 1;
`I´ : X := X - 1;
`P´ : Exit
Else
Write (Chr(7)
End;
GotoXY (X,Y);
Write (`*´)
Until C = `P´
End.
Suscribirse a:
Entradas (Atom)