Professional Documents
Culture Documents
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:
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.
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).
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, ):
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.
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.
Punteros.
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.
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.
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
Ord
Round
Trunc
Int
IntToStr
IntToHex
StrToInt
StrToIntDef
Convierte una cadena en un nmero, usando un valor por defecto si la cadena no es correcta.
Val
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
Copia una porcin de una cadena tipo Pascal en una cadena de terminacin nula.
FloatToDeci
mal
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
TextToFloat
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:
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.
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