• No se han encontrado resultados

TEMA 9. Definición de Tipos

N/A
N/A
Protected

Academic year: 2021

Share "TEMA 9. Definición de Tipos"

Copied!
19
0
0

Texto completo

(1)

TEMA 9

(2)

Mediante la definición de tipos de datos por el

programador se consigue que cada información

que maneja el computador tenga su sentido

específico.

El tipo establece los posibles valores que puede

Definición de Tipos

El tipo establece los posibles valores que puede

tomar ese dato. Además, al igual que sucedía con

los tipos predefinidos, a cada nuevo tipo que se

define se asocian un conjunto de operaciones que

se pueden realizar con él. Por tanto, la definición

de tipos supone crear un nuevo nivel de

(3)

Aunque los tipos simples predefinidos vistos son útiles para cualquier propósito (que no requiera tipos estructurados), es conveniente que el programador

pueda definir sus propios tipos simples por dos razones principalmente:

1) Interpretación de cada valor. Si una variable representa un número de naranjas y otra un número de personas, y representamos ambas variables con tipo “int”

podríamos sumar naranjas y personas, lo cual no tiene mucho sentido. Sería mejor poder definir un tipo NARANJAS y otro PERSONAS.

2) Dejar claro el rango de los posibles valores. Si sabemos a priori que para resolver

Definición de Tipos

2) Dejar claro el rango de los posibles valores. Si sabemos a priori que para resolver cierto problema el valor de una variable nunca va a salirse de cierto rango, es

conveniente declarar la variable con un nuevo tipo que se corresponda a dicho rango para que, en el caso de que por error tome un valor fuera de este rango, el

compilador nos avise de ello.

La especificación de nuevos tipos se realiza usando una declaración de tipo. Por ejemplo:

typedef int TipoEdad; typedef char TipoSexo;

(4)

Tipos enumerados. Definición

Consiste en una enumeración de todos los posibles valores que

puede tomar una variable de dicho tipo encerrados entre llaves. Una variable de tipo enumerado sólo podrá tomar, en un determinado momento, uno de esos valores.

Para crear un nuevo tipo de dato se enumeran todos los posibles

valores que puede tomar separados por comas (,) y encerrados entre llaves .

llaves .

Cada posible valor se describe mediante un identificador (que al mismo tiempo quedan declarados como valores constantes).

typedef enum TpoEnum {id1, id2, ..., idN};

La enumeración implica un orden que se establece entre los valores enumerados. Este orden se define de forma implícita e impone que el primer elemento de la lista ocupa la posición 0, el siguiente la 1, y así sucesivamente hasta el último, que ocupa la posición N-1, siendo N el número de elementos enumerados.

(5)

Los tipos enumerados se emplean de manera similar a los tipos predefinidos. El identificador de tipo se puede emplear para definir variables de ese tipo, y los

identificadores de los valores enumerados se emplean como las constantes con nombre.

Uso de tipos enumerados

Función Uso

Un dato de tipo enumerado se puede pasar como

argumento de procedimientos o funciones y puede ser el resultado de una función.

Función Uso

int( X ) Posición que ocupa X en la lista de su enumeración TipoEnumerado( N) Valor en la posición N del tipo TipoEnumerado

(6)

No existen operaciones aritméticas definidas para los tipos enumerados. Por lo tanto, es INVÁLIDO:

typedef enum Color {Rojo, Azul, Verde}; Color Color1 = Rojo;

Color1 = Color1 + 1;

Sí se pueden utilizar, en cambio, el procedimiento general

Uso de tipos enumerados

Sí se pueden utilizar, en cambio, el procedimiento general

int() o TipoEnumerado() para pasar de un valor a otro en

la enumeración.

Color1 = Color(int(Color1) +1);

Hay que tener en cuenta que se pueden producir errores al emplear los procedimientos al sumar o restar tipos enumerados si se excede el rango del

(7)

El tipo predefinido bool

El tipo predefinido bool es el identificador del tipo, y las constantes simbólicas TRUE y FALSE corresponden a los valores de verdad cierto y falso, respectivamente.

typedef enum bool {false, true};

Por lo tanto se pueden declarar variables de tipo bool, y Por lo tanto se pueden declarar variables de tipo bool, y estas a su vez se pueden usar tanto en funciones y

procedimientos, pasándolas como argumento o devolviéndolas como resultado.

Existen diferentes funciones predefinidas que devuelven un valor de tipo booleano. A estas funciones se les llama predicados.

(8)

Expresiones lógicas:

El tipo predefinido bool

Operador Operación lógica

&& Conjunción || Disyunción

! Negación

Resultado de las expresiones lógicas:

A B A && B A || B !A

TRUE TRUE TRUE TRUE FALSE TRUE FALSE FALSE TRUE FALSE FALSE TRUE FALSE TRUE TRUE FALSE FALSE FALSE FALSE TRUE

(9)

Los tipos de datos vistos hasta el momento se

denominan escalares, y son datos simples, en el

sentido de que no se pueden descomponer.

Un tipo estructurado de datos, o estructura de datos,

es un tipo cuyos valores se construyen agrupando

Tipos estructurados

es un tipo cuyos valores se construyen agrupando

datos de otros tipos más sencillos. A sus elementos

se les denominan componentes.

Todos los tipos estructurados se definen a partir de

tipos simples combinados.

(10)

Sirven para permitir la generalización de la

declaración, referencia y manipulación de

datos del mismo tipo.

Un vector está constituido por una serie de

valores, todos ellos del mismo tipo, a los

Tipo formación y su necesidad

valores, todos ellos del mismo tipo, a los

que se les da un nombre común que

identifica a toda la estructura globalmente.

Cada valor concreto dentro de la

estructura se distingue por su índice o

número de orden que ocupa en la serie.

(11)

Una estructura de tipo vector se declara de la siguiente forma:

typedef TpoEle TpoVec [Nelem]; En donde:

TpoVec: Es el nombre del nuevo tipo de vector que se declara.

Declaración e inicialización de vectores

Nelem: Es el número de elementos que constituye el vector. TpoEle: Puede ser cualquier tipo y corresponde al tipo de dato que constituye cada uno de los elementos del vector.

La inicialización de un vector afecta a todos sus elementos, por tanto la notación será tal que así:

(12)

Al manejar datos estructurados de tipo vector se puede operar con cada elemento por separado.

Referencia a un elemento:

vector [ índice ];

Un elemento de un vector puede formar parte de cualquier

Operaciones con elementos de vectores

Un elemento de un vector puede formar parte de cualquier expresión con constantes, variables u otros elementos.

Como indice para designar un elemento de un vector se puede utilizar una variable o expresión, siempre que sean de tipo entero.

(13)

Al usar los vectores en el paso de argumentos en

procedimientos o funciones, se pasan por defecto por referencia.

void LeerVector (TipoVector v) {…} …

LeerVector (vectorUno);

Paso de argumentos de tipo vector

Al llamar al procedimiento la variable que se pase se hará por referencia, cambiando totalmente si esta se modificara dentro de él.

Si no queremos que se modifiquen los valores del vector, deberemos definir la función o procedimiento tal que así:

(14)

Cualquier vector cuya declaración sea de la forma

siguiente se considera una cadena o String con

independencia de su longitud particular (N):

typedef char Nombre [N];

Características:

Vector de caracteres: Cadena (String)

Características:

El primer elemento de una cadena siempre es el de índice igual a cero.

En un vector de esta clase se pueden almacenar textos de diferentes longitudes (si caben). Para distinguir la longitud útil en cada momento se reserva siempre espacio para un carácter más, y se hace que toda ristra termine con un

(15)

Vector de caracteres: Cadena (String)

Para inicializar la cadena se haría de la siguiente forma:

TipoCadena idioma = “ingles”;

Se pueden poner menos caracteres de los que tiene por defecto la cadena, pero nunca más.

Como la utilización de cadenas es muy habitual se dispone de la librería string (<string.h>) que posee varias funciones como las siguientes:

siguientes:

Función Uso

strcpy (c1, c2) Copia c2 en c1

strcat (c1, c2) Concatena c2 a continuación de c1 strlen (c1) Devuelve la longitud de c1

strcmp (c1, c2) Devuelve un resultado cero si c1 y c2 son iguales; menor que cero si c1 precede a c2 en orden alfabético, y mayor que cero si c2

(16)

En el procedimiento de escritura printf podemos

usar constantes o valores de cadena empleando

el formato de escritura %s para string o cadena.

printf(“Datos: %s - %s\n”, “Jose”, apellido);

Tambien podemos usar las cadenas con el

Vector de caracteres: Cadena (String)

Tambien podemos usar las cadenas con el

procedimiento de lectura scanf utilizando

tambien el formato de lectura %s para string o

cadena.

printf(“Nombre y Apellido? “);

(17)

Es un dato estructurado que contiene

varios elementos de información, que son

sus componentes, cada uno de los cuales

pueden ser de un tipo diferente.

Los esquemas de tupla pueden usarse

El esquema tupla

Los esquemas de tupla pueden usarse

definiéndolos como estructuras de tipo

registro. Un registro es una estructura de

datos formada por una colección de

elementos de información llamados

(18)

Definición de registros:

La declaración se hace utilizando la palabra clave struct. typedef struct Tipo-registro {

Tipo-campo-1 nombre-campo-1; Tipo-campo-2 nombre-campo-2;

...

Tipo registro (struct)

Tipo-campo-N nombre-campo-N;

}; Ej.:

typedef struct TipoFecha { int dia;

TipoMes mes; int anno;

(19)

Uso de registros:

Inicialización:

TipoFecha hoy = { 12, Marzo, 2009 } ;

Al manejar datos estructurados de tipo registro se

Tipo registro (struct)

Al manejar datos estructurados de tipo registro se dispone de dos posibilidades: operar con el dato

completo, o bien operar con cada campo por separado.

Asignación:

registro1 = registro2

Referencia a un campo:

Referencias

Documento similar

• reducir las fuerzas de fricción entre el polímero fundido y las partes metálicas de la máquina. • reducir las fuerzas de fricción durante las operaciones de

Volviendo a la jurisprudencia del Tribunal de Justicia, conviene recor- dar que, con el tiempo, este órgano se vio en la necesidad de determinar si los actos de los Estados

Si bien este ejercicio tuvo efecto en la reducción de precios, muy pronto se aprendería la lección de usar el tipo de cambio nominal como un anc la a la política de

Sin embargo, mientras que la primera de tales actividades tiene lugar necesariamente siempre que exista una petición de referéndum, las otras dos no se llevan a cabo en todo caso,

Árbol completo es un árbol cuyos nodos corresponden a los nodos numerados (la numeración se realiza desde la raíz hacia las hojas y, en cada nivel, de izquierda a derecha) de 1 a

I El tipo Bool -&gt; Bool está formado por todas las funciones cuyo argumento y valor son booleanos.. I Ejemplo de tipo Bool -&gt; Bool Prelude&gt;

De esta forma se planea explicar de qué manera un abuso infantil puede desarrollar episodios de tipo psicótico, que puede llegar a ser un detonante para generar psicosis u

1. LAS GARANTÍAS CONSTITUCIONALES.—2. C) La reforma constitucional de 1994. D) Las tres etapas del amparo argentino. F) Las vías previas al amparo. H) La acción es judicial en