Sie sind auf Seite 1von 11

TEMA_9 -------- Definicin_tipos

1. Introduccin Aparte del tipo de datos predefinidas en C (int, char y float), el programador tambin puede definirse sus propios tipos de datos en uso de la instruccin typedef, por ejemplo: typedef int TipoEdad; typedef char TipoSexo; typedef float TipoAltura; Una vez declarados los tipos se pueden definir y declarar variables de esos tipos que acabamos de definir, por ejemplo sera vlido: TipoEdad edad1, edad2; TipoSexo sexo; TipoAltura altura; Y podramos utilizar estas variables como las variables que hemos visto hasta ahora: edad2 = edad1 +10; sexo = H; altura = 1.72; Nota: Con definicin de tipo mejoramos en muchos casos la legibilidad del programa, pero slo con definicin de tipo simples como en estos ejemplos no podramos abarcar y resolver todos los problemas que nos puedan plantear, por tanto necesitamos utilizar otros tipos "ms potentes", por ejemplo: tipo enumerado, tipo vector, tipo cadena o string, registros, ... 2. Tipo enumerado Cuando definimos tipos enumerados indicar todos los posibles valores que puede tomar ese tipo. Por ejemplo: typedef enum tipodia {Lunes, Martes, Mircoles, Jueves, Viernes, Sbado, Domingo}; typedef enum TipoMes {Enero, Febrero, Marzo, Abril, Mayo, Junio, Julio, Agosto, Septiembre, Octubre, Noviembre, Diciembre}; typedef enum TipoEstadoCivil {Casado, Soltero, Viudo, Separado}; typedef enum TipoColor {Rojo, Amarillo, Azul}; typedef enum TipoDireccion {Norte, Sur, Este, Oeste}; Todos los elementos de un tipo enumerado o lista enumerada tienen asignado un nmero que hace referencia al lugar que ocupan en la lista (comienza por 0). Por ejemplo, dado la siguiente lista enumerada: typedef enum TipoPieza {Rey, Reina, Alfil, Caballo, Torre, Peon}; El elemento Rey tiene asociado el 0, Reina el 1, Alfil el 2, Caballo el 3, Torre el 4 y Peon el 5. Los tipos enumerados se consideran tipos ordinales (al igual que los int y char), ya que tienen un orden establecido de antemano. Una vez hemos definido un tipo de datos enumerado ya podemos definir variables de ese tipo de la siguiente manera: Tipodia da; TipoMes mes; 1

TipoColor color = Rojo; da = Martes; color = Azul; mes = abril; Como los tipos enumerados son ordinales, podemos utilizarlos en comparaciones como por ejemplo: If (mes>=Julio) { ... } while (da<Sbado) { .... } Para hacer referencia al lugar que ocupa un elemento en la lista lo hacemos as: int (Abril) -> 3 int (Viudo) -> 2 int (Martes) -> 1 Para hacer referencia al elemento que ocupa una determinada posicin lo hacemos as: TipoMes (3) -> Abril TipoEstadoCivil (2) -> Viudo Tipod (1) -> Martes Podemos ir pasando de un elemento a otro de una lista enumerada de la siguiente manera: da = jueves; da = tipodia (int (da) +1); mes = Julio; mes = TipoMes (int (mes) -1); En el primer caso tendramos: da = viernes; mes = junio; Tipo predefinido bool El tipo predefinido bool se puede considerar como un tipo enumerado con dos valores: typedef enum bool {false, true}; Se cumple: int (false) 0 y int (true) 1 EJEMPLO 1: tipos enumerados Qu mostrar el siguiente programa?

EJEMPLO 2: tipos enumerados Qu mostrar ahora el programa?

Ejemplo 3: Tipo enumerados Qu hace el siguiente programa?

3. Tipos estructurados Todos los tipos de datos que hemos visto hasta ahora son tipos de datos escalares y simples, que no se pueden descomponer en otras ms simples. Con estos tipos de datos podemos resolver problemas muy sencillos. Vamos a ver ahora los tipos de datos estructurados, sern tipo de datos formadas por otros tipos ms simples. 3.1 Tipos vector o array Supongamos que tenemos una empresa que tiene 40 sucursales y que cada final de mes se dedica a recoger las ventas que ha hecho cada una de estas sucursales y sumarlas con el fin de obtener el total de ventas netas a lo largo del mes. Por almacenar las ventas de las 40 sucursales dentro de nuestro programa la primera solucin que se nos vendra a la cabeza sera declarar 40 variables de tipo 'int', pedir sus 40 valores y hacer la suma de las cuarenta variables inmediatamente despus. En la prctica nunca se utiliza una solucin as, y lo que se hace es agrupar todos los valores dentro de una variable de tipo vector. Un vector es una variable compuesta, que puede almacenar muchos valores de un mismo tipo. Nombre: V Posicin: 0 1 2 3 4 n-3 n-2 n-1 Valores: V0 V1 V2 V3 ... ... ... Vn-3 Vn-2 Vn-1 Declaracin de vectores: typedef float TipoVectorNotes [100]; typedef char TipoNom [30]; typedef int TipoTemperatures [12]; typedef int TipoVector [20]; Tambin podemos definir vectores basados en otros tipos ya definidos por el programador, por ejemplo si definimos los siguientes tipos enumerados: typedef enum tipod {Lunes, Martes, Mircoles, Jueves, Viernes, Sbado, Domingo}; typedef enum TipoEstatCivil {Casado, Soltero, Viudo, Separado}; typedef enum TipoColor {Rojo, Amarillo, Azul}; 4

Podramos definir los siguientes vectores: typedef tipod TipoAgenda [7]; typedef TipoColor TipoPaleta [3]; Inicializar un vector Consiste en dar valores iniciales a un vector. Lo podemos hacer en el mismo momento de definir la variable vector: typedef int TipoTemperaturas [12]; TipoTemperaturas temperaturas = {12,13,16,19,20,35,29,30,20,16,14,13}; typedef float TipoVectorNotas [100]; TipoVectorNotas notas = {5.7,8.5,9.0,3.4}; O tambin lo podemos hacer en cualquier parte del cuerpo del programa con asignaciones, por ejemplo Qu harn las siguientes instrucciones? temperaturas [2] = 18; temperaturas [11] = 5; notas [2] = 2.4; notas [3] = 6.0; Nota: En C+-, no es posible asignar el contenido de un vector a otro del mismo tipo: V2 = V1; INCORRECTO la asignacin global de vectores lo haremos mediante un recorrido del vector. Por ejemplo, para asignar el contenido del vector V1 al contenido del vector V2 lo haremos as: for (int i = 1; i<num_elementos; i++) { V2[i] = V1[i]; } Ejemplo: Programa que genera un vector para almacenar 5 nmeros enteros ledos por el teclado y los muestre una vez creado.

Ejemplo: El problema de calcular el total de las ventas de todas las sucursales, haciendo uso de vectores, el podramos resolver de la siguiente forma:

Ejemplo: Programa que guarda en un vector llamado Datos, 20 enteros y nos calcula la posicin del elemento que contiene el valor mximo.

3.2 Vectores de caracteres (cadenas o strings) Una cadena de caracteres o string es un vector de caracteres que finaliza con un carcter especial llamado carcter final de cadena y que se representa por \0 Para crear, por ejemplo, Una cadena de caracteres de la palabra "hola", sus elementos debern ser:

La declaracin de una cadena de caracteres es igual que cualquier otro vector, pero hay que tener en cuenta, que hay que reservar un espacio ms para el carcter final de cadena \0. Por lo tanto si se quiere declarar una cadena de caracteres que pueda guardar frases de tamao N, en la declaracin la declararemos como de tamao N +1 6

typedef char NombreVector [N+1] Por ejemplo, si queremos en un vector guardar palabras de tamao mximo 10 caracteres, la cadena la tendremos que definir como: typedef char palabra [11]; Ejemplo de definicin de cadenas e inicializacin: typedef char TipoNombre [20]; typedef char TipoDomicilio [30]; TipoNombre nombre = "Xavier Fontana; TipoDomicilio calle = "C / Colon - 24; Al igual que los otros tipos de vectores es INCORRECTO la asignacin completa de una cadena. Por ejemplo; nombre = "Pepe"; O nom1 = nom2;

Ejemplo: Programa que nos pide un nombre y una direccin y nos muestra lo que ha ledo.

En C y C+- tenemos una librera que contiene funciones especializadas para el tratamiento de cadenas de caracteres y que se llama <string.h> Entre las funciones que ms utilizaremos tenemos: strlen (cadena) Devuelve la longitud de una cadena strcmp (cadena1, cadena2) Compara dos cadenas y devuelve 0 si las dos son iguales, devuelve un valor negativo si cadena1 va antes que cadena2 en el diccionario y devuelve un valor positivo si cadena1 va despus que cadena2 en el diccionario. strcpy (cadena1, cadena2) Copia cadena2 en cadena1 strcat (cadena1, cadena2) Concatena cadena2 a continuacin de cadena1. Ejemplo: Programa que nos muestra la longitud de una cadena.

Ejemplo: Programa que nos pide un usuario y contrasea continuamente hasta que introducimos las correctas.

4. Tipo tupla o registro En los apartados anteriores hemos visto que un vector nos permite agrupar un conjunto de datos donde todos ellos son del mismo tipo. En ocasiones existe la necesidad de agrupar datos de diferente tipo, como por ejemplo los datos de la cuenta bancaria de un cliente (nombre cliente, n de cuenta, saldo disponible, etc, ..). Para poder guardar un conjunto de datos de distinto tipo, simples o compuestas, en C se define un nuevo tipo de datos compuesto llamado estructura. As pues, una estructura o registro es un tipo de datos compuesto que puede guardar un conjunto de datos de diferentes tipos. En cada uno de los datos o elementos guardados dentro de una estructura se llama campo. 8

La definicin de una estructura en C + + tiene la siguiente sintaxis: typedef struct nombre_estructura { tipo_dato campo1; tipo_dato campo2; ......................... tipo_dato campoN; }; EJEMPLO: Se quiere definir una estructura en C que contenga las principales datos de una tarjeta de crdito. typedef struct TipoTarjeta { int num_tarjeta; char tipo_compte; char nombre[40]; float saldo; }; Ejemplo: Estructura para guardar fechas typedef enum TipoMes {Enero, Febrero, Marzo, Abril, Mayo, Junio, Julio, Agosto, Septiembre, Octubre, Noviembre, Diciembre}; typedef struct TipoFecha { int da; TipoMes mes; int anno; }; Podemos definir variables de tipo registro as TipoFecha fecha1, fecha2; Y tambin podemos inicializarlas TipoFecha fecha1 = {15, Noviembre, 2010}; OPERACIONES BSICAS CON ESTRUCTURAS Las operaciones con estructuras se realizan normalmente sobre cada uno de los campos de la estructura., exceptuando la operacin de asignacin, la cual tambin se puede aplicar sobre la estructura completa. En este ltimo caso, se copian todos los valores de una variable estructura en otra, esta copia de los valores de una variable se producir siempre que las dos variables pertenecen al mismo tipo de estructura. ACCESO A UNA ESTRUCTURA Dado que los campos de una estructura se procesa generalmente de forma individual, deber poder acceder a cada uno de estos campos individuales. Para acceder a un determinado campo para poder leer o escribir en el lo haremos: variable.campo donde: - variable: se refiere al nombre de una variable de tipo estructura - campo: nombre del campo definido dentro de la estructura El punto (.) Separa el nombre de la variable del nombre del campo elegido.

Ejemplo uso de registros

EJEMPLO: Programa que nos guarda los datos de un trabajador a un registro y nos las muestra en un determinado formato:

Qu modificacin haramos al programa para que nos pudiera guardar un determinado nmero de registros, uno para cada uno de los trabajadores?

10

11

Das könnte Ihnen auch gefallen