Vous êtes sur la page 1sur 11

Carlos R. del Razo Chias.

Lenguaje de programacin I
Tarea 8
1. Tipos de datos estructurados.
En el tratamiento y procesamiento de informacin a veces se hace necesario manejar tipos
de datos ms complejos que sobrepasan el concepto de tipo de dato elemental. Se introduce
as el concepto de estructuras de datos o tipo de datos estructurados. Se puede decir
que hay dos tipos bsicos de estructuras de datos:

Las colecciones de datos de un mismo tipo: Listas, vectores, matrices


Las agrupaciones de datos de tipos no necesariamente iguales: Registros.

Las variables de tipo elemental constan nicamente de un solo componente a la que se


puede asignar un nico valor; las variables de tipo estructurado estarn formadas por
mltiples componentes cada una de las cuales tomar un determinado valor, por lo que se
puede considerar que una variable de tipo estructurado tiene mltiples valores.
1.1.

Registros.

Cuando para definir una determinada entidad se requieren varios datos, se pueden agrupar
todos esos datos en una nica estructura; entonces se acaba de crear un registro.
A cada uno de los componentes de un registro se les llama campos del registro, y cada uno
de ellos ser de un tipo de dato determinado.
1.2.

Vectores y matrices.

Un vector es una construccin ms homognea, ya que constar de un nmero finito de


componentes del mismo tipo. Dicho tipo recibe el nombre de tipo base. En un vector, todos
los componentes guardarn un orden, por tanto, cualquiera de ellos estar perfectamente
identificada con el nombre del vector y un ndice que indique la posicin que ocupa dentro
del vector (su orden).
Al declarar un dato de tipo vector ser imprescindible indicar su tipo base y su tamao
(nmero de componentes que admite); y, por lo general, en todos los lenguajes de
programacin el ndice que se emplea para acceder a los componentes podr tomar valores
entre 0 y el nmero de componentes del vector menos 1 (ej: si el vector tiene 10
componentes las posiciones de estos estarn comprendidas entre 0 y 9).

A veces para identificar un componente de una estructura de este tipo, es vez de un nico
ndice, puede ser que se necesiten dos, tres, , o ms, en este caso se estara hablando de
matrices de 2, 3, o ms dimensiones; Tantas dimensiones como ndices se necesiten para
identificar los componentes de la estructura (un vector es un caso particular de matriz de
una nica dimensin).

En programacin, para referirse de forma genrica a vectores y matrices se suele emplear el


trmino array y al igual que en el caso de las matrices se hablar de arrays de 1, 2, 3, , n
dimensiones. Una posible declaracin y utilizacin de arrays sera:

1.2.1.

Arrays (Arreglos).

Un arreglo es una tabla compuesta por celdas que contienen, todas, valores de un mimo tipo.

El anterior es un ejemplo de arreglo de enteros compuesto por nueve celdas. Cada celda
tiene un valor distinto (puede no serlo) y cada una es independiente de las dems. Como
pueden ver todas las celdas estn numeradas del 1 al 9. Estos valores son llamados
subndices y son los que usaremos para dirigirnos a una celda especfica. La sintaxis de un
arreglo es la siguiente:

Se debe indicar un nombre para el arreglo (identificador), luego, al igual que en los
subrangos va un signo de igual (=) y la palabra reservada array (arreglo en ingls) seguida
inmediatamente por un subrango entre parntesis rectos [ ] el cual indicar la dimensin del
arreglo (cuantas celdas tendr). Luego colocamos la palabra reservada of y un tipo para los
valores que habr en cada celda. El subrango entre parntesis rectos, adems de indicar
cuntas celdas tendr el arreglo, tambin indica cmo se numeran:

1.2.2.

Utilizacin de arreglos.

A continuacin se muestra un ejemplo de Arreglo con Enteros de 10 celdas cuyos ndices van
del 1 al 10 y a cada celda se le dar el mismo valor que su ndice. (a la primera 1, a la
segunda 2, ):

En la lnea 3 indicamos que comenzar la declaracin de tipos para, luego, en la lnea 4


declarar el tipo arr que ser un arreglo de 10 celdas numeradas del 1 al 10 del tipo entero.
Como arr es un tipo su propsito es declarar variables de ese tipo, por lo tanto en la lnea 7
declaramos la variable arreglo1 del tipo arr. Podemos, al igual que con los tipos primitivos,
declarar tantas variables como queramos de cualquier tipo que nosotros mismos definamos;
en este caso tenemos solo una, pero podra tener ms y cada una seria independiente. En la
lnea 9 comienza nuestro programa, el cual consta de diez lneas de asignacin donde en
cada una le damos un valor a cada celda del arreglo. Cada celda del arreglo funciona como
una variable independiente, por tanto, en ese arreglo tenemos diez variables del tipo integer.
Para referirnos a una celda debemos dar el nombre de nuestro arreglo (no el nombre del tipo
sino el de la variable de ese tipo) seguido por el ndice entre parntesis rectos de la celda a
la que queremos ir. De este modo, en la lnea 10, al escribir arreglo1[1]:= 1 estamos diciendo
que vaya a la primera celda de arreglo1 y le asigne el valor 1.
Todo lo que sigue del programa es asignar a las celdas restantes el valor que queremos y
termina nuestro programa. Sin embargo no es muy til tener que escribir instruccin por
instruccin para dar un valor a cada celda.
Imaginen un arreglo de 1000 celdas, tendramos un programa de 1000 lneas solo en
asignaciones. Veamos el mismo programa pero asignando los mismos valores a cada celda
de una forma ms inteligente:

Hemos sustituido las 10 lneas de asignacin por una instruccin FOR que va de 1 a 10. Se
ha colocado la variable de control i dentro los parntesis rectos que indican el ndice de
nuestras celdas. De este modo, cuando i valga 1 estaremos hablando de la primera celda,
cuando i pase a valer 2 estaremos hablando de la segunda celda, y as sucesivamente hasta
10.
Ahora veremos lo mismo pero asignando el doble del ndice a cada celda:

1.2.3.

Write y Read de un arreglo.

En este caso se agreg un For que en cada iteracin escribe el valor de una de las celdas.
Del mismo modo, si se quisiera hacer Read de un arreglo para que el usuario ingrese los
valores de cada celda se debe hacer para cada celda por separado.
1.2.4.

Declaracin annima de un arreglo.

Este programa es igual al anterior solo que se ha quitado la declaracin de tipos y se ha


declarado el arreglo directamente como variable. De este modo solo se usar como arreglo1
y no como tipo por lo cual no podremos declarar variables como en los casos anteriores. No
est mal si declaran siempre los arreglos como tipo, pero se debe tener en cuenta que un
arreglo como tipo ocupa ms memoria que uno declarado annimamente.
1.3.

Punteros.

Toda la informacin que se maneja en un programa estar siempre almacenada en la


memoria principal del ordenador. La memoria est formada por multitud de bytes ubicados
de forma consecutiva, por lo que podra considerarse que la memoria principal del ordenador
es un gran vector de bytes. Si un PC tiene una memoria de 32 Megabytes entonces:

Luego la memoria de este PC ser un vector de 33.554.432 componentes donde cada


componente ser un byte. Dichos componentes estarn numeradas desde el 0 hasta el 225
-1.
Si un dato se encuentra en la posicin 25.000 se dir que dicho dato est en la direccin de
memoria 25.000. Cuando un dato ocupa varios bytes (varias direcciones de memoria) se
dir que su direccin de memoria es la del primero de sus bytes.
Un puntero es una variable cuyo valor es una direccin de memoria; o dicho de otro modo;
un puntero indica en que direccin de memoria se encuentra un determinado dato o
informacin. En terminologa informtica tambin se dice que una variable de tipo puntero
apunta a un determinado dato y grficamente se suele indicar as:

En la prctica el valor concreto que tiene una variable de tipo puntero no ser (por lo
general) un dato de inters para el programador, lo que ms importa de un puntero es que
apunta a un determinado valor que s interesa conocer; en otras palabras; los datos que hay
en memoria s interesan, las direcciones de memoria en que se encuentran, por lo general,
no.
Para el ejemplo que se muestra en la figura anterior, lo interesante ser conocer y poder
acceder al Valor que tenemos en memoria, pero saber que ese valor est en la posicin de
memoria 25.000 probablemente sea una informacin irrelevante. Lo que interesa del
puntero es saber que nos permite acceder al Valor.
2. Conversiones entre tipos de datos.
Pascal puede considerarse como un lenguaje fuertemente tipeado, lo que quiere decir que
los tipos de datos estn muy diferenciados. Esta filosofa facilita la deteccin de errores en el
programa en el momento de compilarlo.
Por esta razn, la conversin entre diferentes tipos no es realizada directamente por el
compilador cuando es necesaria (conversin implcita), sino a travs de una funcin de
conversin (conversin explcita).

En Turbo- Pascal existen construcciones especiales para la conversin entre tipos que se
denominan moldes de tipos o Casting. La sintaxis de los moldes es la siguiente:

2.1.

Convertir Cadena numrica a valor Numrico.

Sintaxis: Val(Cadena, Numero, Codigo_Error)


El propsito de este procedimiento es convertir la cadena de caracteres que contiene un
nmero en forma de string al valor que representa. Si la conversin puede hacerse sin
errores, entonces el valor es almacenado en Numero siempre que el valor convertido sea
vlido
para
el
tipo
de
dato
que
fue
declarado Numero.
En
caso
de
xito, Codigo_Error valdr cero.
En caso de que Cadena no contenga un valor que pueda ser convertido, Numero no ser
modificado y Codigo_Error contendr un valor mayor a cero que ser la posicin
en Cadena del caracter que impide la conversin.

Se debe tener en cuenta que Turbo Pascal usa la notacin anglosajona para los nmeros
reales por lo tanto el punto, y no la coma, es el separador de decimales. Los espacios en
blanco tambin invalidan la conversin. Son admisibles los caracteres '+' y '-' e indicaran el
signo del nmero resultante siempre que estn al inicio de la cadena.

Por lo tanto, los caracteres que puede contener CadNum seran, para poder convertir a un
tipo entero: '0'..'9' '+' '-'.
Para poder convertir a un tipo real adems de los caracteres vlidos indicados para enteros
se agrega la letra 'E' (mayscula o minscula) para poder formar la notacin cientfica y el
caracter punto'.' como separador de decimales: '0'..'9' '.' '+' '-' 'E' 'e'.

2.2.

Convertir un valor Numrico a una Cadena de Caracteres.

Sintaxis: Str(Numero, Cadena)

Este procedimiento hace lo inverso de val(), es decir, recibe un valor numrico (sea una
constante numrica o una variable numrica como integer, byte, word, real, etc...) y lo
convierte a su representacin en un string. El valor numrico puede formatearse como se
hara al momento de imprimirse por pantalla.

A continuacin se presenta una tabla resumen con las distintas rutinas para los diferentes
tipos de conversiones:
Tabla: Rutinas del sistema para la conversin entre tipos
Rutina

Descripcin

Chr

Convierte un nmero ordinal en un carcter ANSI.

Ord

Convierte un valor de tipo ordinal en el nmero que indica su orden.

Round

Convierte un valor de tipo real en un nmero de tipo entero, redondeando su valor.

Trunc

Convierte un valor de tipo real en un nmero de tipo entero, truncando su valor.

Int

Extrae la parte entera del argumento de valor en coma flotante.

IntToStr

Convierte un nmero en una cadena.

IntToHex

Convierte un nmero en una cadena con su representacin hexadecimal.

StrToInt

Convierte una cadena en un nmero, provocando una excepcin si la cadena no representa un


entero vlido.

StrToIntDef

Convierte una cadena en un nmero, usando un valor por defecto si la cadena no es correcta.

Val

Convierte una cadena


compatibilidad).

Str

Convierte un nmero en una cadena, usando parmetros de formateo (rutina tomada de Turbo
Pascal, disponible por compatibilidad).

StrPas

Convierte una cadena de terminacin nula (null-terminated) en una cadena de tipo Pascal. Esta
conversin se realiza automticamente sobre cadenas AnsiStrings en Delphi de 32 bits. (Vase la
seccin dedicada a las cadenas, ms adelante en este mismo captulo.)

StrPCopy

en un

nmero (rutina

tomada de

Turbo

Pascal,

disponible por

Copia una cadena tipo Pascal en una cadena de terminacin nula. Esta conversin se hace con un
simple moldeo (typecast) sobre0 PChar, en Delphi de 32 bits. (Vase la seccin dedicada a las

cadenas, ms adelante en este mismo captulo.)


StrPLCopy

Copia una porcin de una cadena tipo Pascal en una cadena de terminacin nula.

FloatToDeci
mal

Convierte un valor de coma flotante a un registro, incluyendo su representacin decimal


(exponentes, dgitos, signo).

FloatToStr

Convierte un valor de coma flotante a su representacin como cadena, con formato por defecto.

FloatToStrF

Convierte un valor de coma flotante a su representacin como cadena, con el formato especificado.

FloatToText

Copia un valor de coma flotante a un buffer (tampn) de cadena, con el formato especificado.

FloatToTextF Como la rutina anterior, copia un valor de coma flotante a un buffer (tampn) de cadena, con el
mt
formato especificado.
StrToFloat

Convierte una cadena Pascal a un valor de coma flotante.

TextToFloat

Convierte una cadena de terminacin nula a un valor de coma flotante.

3. Archivos de Texto.
Son muy frecuentes los programas en los que es necesario manejar textos, entendidos como
secuencias de caracteres de una longitud usualmente grande, como, por ejemplo, una carta,
un formulario, un informe o el cdigo de un programa en un lenguaje de programacin
cualquiera. Estos textos se almacenan en archivos de caracteres que reciben el nombre de
archivos de texto.
Los archivos de texto en Pascal se definen utilizando el tipo predefinido text. Este tipo de
datos es un archivo con tipo base char al que se aade una marca de fin de lnea. La
generacin y tratamiento del fin de lnea se realiza con los procedimientos
WriteLn(archivoDeTexto) y ReadLn(archivoDeTexto) y la funcin EoLn(archivoDeTexto), que
no se pueden utilizar con el tipo file.
El tipo text es un tipo estndar predefinido en Pascal, como integer o char, y por lo tanto, se
pueden declarar variables de este tipo de la siguiente forma:

En particular, los archivos input y output son de texto y representan la entrada y salida
estndar, que en vez de emplear un disco utilizan, normalmente, el teclado y la pantalla
como origen y destino de las secuencias de caracteres. Siempre que se utiliza una
instruccin Read o Write sin indicar el archivo, se asume que dichas operaciones se realizan
sobre los archivos input y output, respectivamente.
Ambos archivos, como es sabido, deben ser incluidos en el encabezamiento de todo
programa sin redeclararlos dentro del programa, ya que se consideran declarados
implcitamente como:

Adems de esta declaracin implcita se asumen, para los archivos input y output, las
instrucciones Reset(input) y ReWrite(output) efectuadas al empezar un programa.
Debido a que los archivos de texto son muy utilizados, Pascal proporciona, adems de las
instrucciones comunes a todos los archivos con tipo genrico, funciones especficas de gran
utilidad para los archivos de texto. Si archivoDeTexto es una variable de tipo text, solo
podramos realizar instrucciones de la forma Read(archivoDeTexto, c) o bien
Write(archivoDeTexto, c) siempre que c fuese de tipo char. Sin embargo, para los archivos
input y output se permite que c pueda ser tambin de tipo integer, real o incluso boolean o
un array de caracteres para el caso de Write. Pascal permite este hecho no solo a los
archivos input y output, sino a todos los archivos de tipo text.
Pascal tambin permite que las instrucciones Read y Write tengan varios parmetros cuando
se usan archivos de texto. As, la instruccin

es equivalente a:

y la instruccin

es equivalente a:

donde archivoDeTexto es un archivo de tipo text, los parmetros v1, v2,..., vN pueden ser de
tipo integer, real o char y los parmetros e1,e2,...,eM pueden ser de tipo integer, real, char,
boolean o un array de caracteres. Las operaciones de lectura y escritura en archivos de texto
son similares a los de input o output.
Los archivos de texto pueden estructurarse por lneas. Para manejar este tipo de
organizacin existen la funcin EoLn(archivoDeTexto) para detectar el fin de lnea y las
instrucciones de lectura y escritura ReadLn(archivoDeTexto) y WriteLn(archivoDeTexto). Su
funcionamiento se describe a continuacin:
La funcin booleana EoLn devuelve el valor True si se ha alcanzado la marca de fin de lnea o
False en otro caso. Cuando EoLn(ArchivoDeTexto) es True el valor de la variable apuntado por
el cursor (archivoDeTexto) es un caracter especial de fin de lnea.
La instruccin ReadLn(archivoDeTexto, v) lee el siguiente elemento del archivo, lo almacena
en v y salta todos los caracteres hasta llegar al caracter especial de fin de lnea, es decir, la
instruccin es equivalente a:

con lo que con la siguiente llamada a Read se leera el primer caracter de la siguiente lnea.
El parmetro v es opcional. Si se omite, el efecto de la instruccin Read(archivoDeTexto)
sera el mismo salvo que no se almacena la componente que est actualmente apuntada por
el cursor.
De la misma forma que Read, la instruccin ReadLn puede utilizarse con el formato:

La instruccin WriteLn(archivoDeTexto, expresin) se usa para escribir el valor de expresin


en el archivoDeTexto y poner la marca de fin de lnea. Asimismo, podemos omitir la
expresin, producindose entonces simplemente un salto de lnea.
Existe tambin la posibilidad de utilizar la instruccin:

Como una generalizacin de lo dicho en este tema sobre el uso de las funciones EoLn y EoF,
se observa que la estructura general de los programas que procesan archivos de texto
constan frecuentemente de dos bucles anidados: uno controlado por EoF y otro por EoLn,
como se muestra a continuacin, en un programa genrico de procesamiento de archivos de
texto.

En cualquiera de los casos considerados anteriormente, si se omite el archivo archivoDeTexto


se supondra por defecto el archivo input para el caso de Read o el archivo output para el
caso de Write, producindose, en tal caso, una lectura por teclado o una escritura por
pantalla respectivamente.
Finalmente se debe destacar que los archivos, al igual que todo tipo de datos compuesto, se
pueden pasar como parmetros en funciones y procedimientos, pero no pueden ser el
resultado de una funcin. No obstante, siempre se deben pasar como parmetros por
variable.

Referencias.
Cant, M. (2000). Pascal Esencial. Recuperado el 24 de Marzo de 2014, de Marco Cant
Books: http://www.marcocantu.com/epascal/Spanish/ch03data.htm
Pareja Flores, C., Ojeda Aciego, M., Quesada, A., ngel, & Rossi Jimnez, C. (s.f.). Algoritmos y
programacin en Pascal.
Rodrguez Sala, J. (2003). Introduccin a la programacin: teora y prctica. Alicante: Club
Universitario.
Rodrguez, V. (24 de Febrero de 2013). http://es.scribd.com/doc/127039187/Aprendiendo-aProgramar-Pascal. Recuperado el 3 de Marzo de 2014, de www.scribd.com:
http://es.scribd.com/doc/127039187/Aprendiendo-a-Programar-Pascal
Romero, D. (2009). Cadenas de caracteres en turbo pascal. Recuperado el 24 de Marzo de
2014, de La pgina de Driver Op: http://www.driverop.com.ar/pascal/strings#7-5