AnteriorPosterior

5.2. Definición de tipos

  Curso: Programación en Pascal (v5), por Nacho Cabanes

5.2. Definición de tipos.

El "tipo" de una variable es lo que determina qué clase de valores podremos guardar en ella. En los programas que hemos creado hasta ahora, el "tipo" es lo que indicamos junto al nombre de una variable cuando la declaramos. Por ejemplo,

var PrimerNumero: real;

indica que vamos a usar una variable que se va a llamar PrimerNumero y que almacenará números reales (con decimales), mientras que

const intentos: integer = 3;

indica que vamos a usar una variable llamada intentos, que guardará números enteros y que tendrá como valor inicial 3.

También podemos crear nuestros tipos de datos, a partir de los tipos básicos que permite el lenguaje, usando la palabra "type". Así, por ejemplo, podemos crear una nueva versión del ejemplo de "array de records" del apartado 4.3.3, definiendo

(* ARR_REC2.PAS, "array" de varios "record" *)
(* Segunda version, con "const" y "type"    *)
(* Parte de CUPAS5, por Nacho Cabanes       *)
 
program RecordArray2;
 
const
    maxDatos = 10;
 
type
    ficha = record
        nombre: string[30];
        edad: byte;
    end;
 
var
    datos: array [1..maxDatos] of ficha;
 
begin
    datos[1].nombre := 'Ignacio';
    datos[1].edad := 23;
    write('El primer nombre es ', datos[1].nombre );
    write(' y la primera edad ', datos[1].edad);
end.
 
 
(* Resultado:
El primer nombre es Ignacio y la primera edad 23
*)
 

Esto añade legibilidad, pero no es imprescindible. Entonces... ¿no será necesario definir tipos? Sí, en algunas circunstancias concretas sí será necesario. Un primer ejemplo en cuando tenemos dos variables declaradas de igual forma en distintas partes del programa, como en este ejemplo:

(* TIPOS1.PAS, asignacion INCORRECTA de tipos *)
(*            No compila !!!                  *)
(* Parte de CUPAS5, por Nacho Cabanes         *)
 
program Tipos1;
 
var
    ficha1: record
        nombre: string;
        email: string;
        anyoNacimiento: integer;
    end;
 
    ficha2: record
        nombre: string;
        email: string;
        anyoNacimiento: integer;
    end;
 
begin
    ficha1.nombre := 'Pepe';
    ficha1.email := 'p@p.com';
    ficha1.anyoNacimiento := 1990;
 
    ficha2 := ficha1;
    writeLn( ficha2.nombre );
end.  
 

Aunque a nuestros ojos parezca que ambas variables son del mismo tipo, para el compilador no es así, de modo que el programa anterior no compilará correctamente.

Podríamos declarar ambas a la vez, de la siguiente forma:

var
    ficha1, ficha2: record
        nombre: string;
        email: string;
        anyoNacimiento: integer;
    end;

pero eso no servirá si las variables están en zonas separadas del programa (algo que nos empezará a ocurrir pronto). En ese caso, no habrá más remedio que crear un nuevo tipo de datos, y declarar ambas variables como pertenecientes a dicho tipo:

(* TIPOS2.PAS, asignacion correcta de tipos *)
(* Parte de CUPAS5, por Nacho Cabanes       *)
 
program Tipos2;
 
type TipoFicha = record 
        nombre: string;
        email: string;
        anyoNacimiento: integer;
    end;
 
var
    ficha1: TipoFicha;
    ficha2: TipoFicha;
 
begin
    ficha1.nombre := 'Pepe';
    ficha1.email := 'p@p.com';
    ficha1.anyoNacimiento := 1990;
 
    ficha2 := ficha1;
    writeLn( ficha2.nombre );
end.  
 

Y habrá más casos en los que sea imprescindible declarar tipos, como cuando vayamos a volcar nuestros "record" a fichero, pero eso lo veremos más adelante.

Ejercicio propuesto 5.2.1: Crea un tipo de datos "DiasSemana", con valores enumerados desde "lunes" hasta "domingo". Crea una variable de ese tipo y asígnale el valor "viernes".
Ejercicio propuesto 5.2.2: Crea un tipo de datos "DiasMes", que será un subrango del 1 al 31. Crea una variable de ese tipo, pide su valor al usuario y muestra el valor siguiente al introducido.
Ejercicio propuesto 5.2.3: Crea un tipo de datos "ConjuntoNumeros", que será un conjunto de datos tipo byte. Crea una variable de ese tipo, dándole un valor inicial vacío. Luego añade el número 35, el 43 y el 74.
Ejercicio propuesto 5.2.4: Crea una nueva versión de la "agenda0b" (apartado 4.3.3), llamada, "agenda1", que use una constante para la capacidad del array y que declare un tipo de datos "tipoPersona", que representará un "record" de nuestra agenda.

Actualizado el: 20-07-2014 23:50

AnteriorPosterior