O slideshow foi denunciado.
Seu SlideShare está sendo baixado. ×

Tema 5 - Estructuras de datos.pdf

Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Próximos SlideShares
Transparencias8
Transparencias8
Carregando em…3
×

Confira estes a seguir

1 de 59 Anúncio

Mais Conteúdo rRelacionado

Semelhante a Tema 5 - Estructuras de datos.pdf (20)

Mais recentes (20)

Anúncio

Tema 5 - Estructuras de datos.pdf

  1. 1. Programación I. Tema 5 Programación I. Tema 5 Estructuras de datos
  2. 2. Curso 06/07 Programación I: Estructuras de datos. Tema 5 - 2 Contenido Contenido „ Arrays de una y varias dimensiones „ Ejemplos de arrays en C. „ Cadenas de caracteres „ Funciones básicas para el manejo de cadenas de caracteres en C „ Ejemplos de cadena de caracteres en C „ Estructuras „ Ejemplos de estructuras en C
  3. 3. Programación I. Tema 5 Programación I. Tema 5 Estructuras de datos. ARRAYS
  4. 4. Curso 06/07 Programación I: Estructuras de datos. Tema 5 - 4 Vectores: Un primer problema Vectores: Un primer problema „ Diseñar y codificar un programa que controle las ventas y existencias de un almacén. „ Dicho almacén sólo dispone de dos tipos de artículos. Libros y cuadernos. El programa deberá presentar al usuario un menú con las siguientes opciones: 1. Añadir existencias: permitirá al usuario añadir una cantidad cualquiera de libros o cuadernos al almacén. 2. Eliminar existencias: quitará del almacén una unidad de libros o de cuadernos. 3. Mostrar existencias: Sacará por pantalla la cantidad de libros y cuadernos que hay en el almacén. 4. Salir: Abandonará el programa. „ El programa no guardará al acabar los datos que esté manejando y al arrancar preguntará al usuario por las existencias iniciales de libros y de cuadernos.
  5. 5. Curso 06/07 Programación I: Estructuras de datos. Tema 5 - 5 Arrays Arrays. Definición . Definición V = (V0,V1,V2,….,VN) V0 V1 VN V2 „ Coincide con el concepto matemático de vector. „ Un vector (o array) es: „ Una colección de variables todas del mismo tipo. „ Con un nombre único. (V) „ A los que se accede ó distingue mediante un índice.
  6. 6. Curso 06/07 Programación I: Estructuras de datos. Tema 5 - 6 Array Array: Declaración : Declaración „ Declaración: Un Array se declara: En notación de Diseño (entorno) Nombre Clase Tipo Funcionalidad MAX_ARTICULOS constante entero (5) Cantidad máxima de artículos de un almacén Articulos variable array de MAX_ARTICULOS de tipo entero Almacena los contadores de los artículos en el almacén referencia a que es un array número de elementos (índices de 0 a MAX_ARTICULOS-1) tipo base de todos los elementos del array
  7. 7. Curso 06/07 Programación I: Estructuras de datos. Tema 5 - 7 Vector: Declaración Vector: Declaración „ En C se declara: <tipo_base_de_los_elementos> NombreVariableArray [expresion] ……………………….. #define MAX_ARTICULOS 5 void main (void) { int articulos [MAX_ARTICULOS]; ………………………………………………….. } puede ser cualquier tipo (char, int , float, etc) nombre de la variable que referencia todo el array se calcula por el compilador y genera el numero de elementos
  8. 8. Curso 06/07 Programación I: Estructuras de datos. Tema 5 - 8 Vector: Declaración Vector: Declaración „ Ejemplo: #include <stdio.h> #define LONGITUD 58 void main (void) { int mi_tabla [150]; char mensaje [LONGITUD]; float distancias [ (LONGITUD*10) + 1 ]; long numeros [10], datos [20]; ...................
  9. 9. Curso 06/07 Programación I: Estructuras de datos. Tema 5 - 9 Arrays Arrays: Posicionamiento : Posicionamiento „ En Memoria se encuentran: A Posición 0 de memoria 0 1 2 N-1 100 102 xxx 101 Posición M de memoria nombre del array (A) índice que indica la posición relativa respecto del comienzo del array (empieza en 0) Los elementos de un array están en posiciones consecutivas de memoria Si A0 está en la posición 100 Æ A1 esta en 101Æ A2 en 102 etc.
  10. 10. Curso 06/07 Programación I: Estructuras de datos. Tema 5 - 10 Arrays Arrays: Asignación : Asignación „ Asignación de valores: „ A un array se le pueden asignar valores a sus elementos de dos formas: 1. Asignando inicialmente valores (inicialización) static <tipo_base> Nombre [expresion] = {exp1,…,expn} static int numeros [5] = {1,2,3,4,5}; static char vocales [ ] = {‘a’,‘e’,‘i’,‘o’,‘u’}; 100 101 102 103 104 105 106 107 108 109 posición0 posición M índices 0 1 2 3 4 1 2 3 4 5 a e i o u 0 1 2 3 4
  11. 11. Curso 06/07 Programación I: Estructuras de datos. Tema 5 - 11 Arrays Arrays: Asignación : Asignación 2. Asignando valores con sentencias de asignación a sus elementos: id_array [expresion] = expresion; posición0 posición N 100 102 103 104 101 0 1 2 3 4 ? ? ? 4 ? el nombre identifica todo el array el índice identifica todo el elemento int numeros [5]; ……………………………… numeros [3] = 4;
  12. 12. Curso 06/07 Programación I: Estructuras de datos. Tema 5 - 12 Arrays Arrays: Limitaciones de uso : Limitaciones de uso „ Para asignar valores a un array en tiempo de ejecución hay que hacerlo elemento a elemento. „ No se puede asignar el contenido de una variable de tipo array a otra utilizando una sentencia de asignación, ya que el nombre del array representa la dirección de almacenamiento del array. ERROR #include <stdio.h> void main (void) { int porcentaje [4] = { 7, 9, 12, 16}; int iva [4]; ..................... iva = porcentaje; /* Pretende copiar un array en el otro */
  13. 13. Curso 06/07 Programación I: Estructuras de datos. Tema 5 - 13 Arrays Arrays: Limitaciones de uso : Limitaciones de uso „ No se pueden comparar arrays. „ Para acceder a cada uno de los elementos se pueden usar expresiones, siempre que su resultado no exceda de los límites del array. int tabla [8]; int x; tabla [0] = 28; x = 2; tabla [(3*x)+1] = 32; tabla [8] = 10; /*fuera del ARRAY*/
  14. 14. Curso 06/07 Programación I: Estructuras de datos. Tema 5 - 14 Arrays Arrays: Ejemplo : Ejemplo „ Rellenar un array de enteros de tamaño MAX_ARRAY (10) con números leídos del teclado y comprobar si un número que se le pide al usuario esta dentro del array. „ El programa termina con un mensaje de encontrado o no. #include <stdio.h> #define MAX_ARRAY 10 void main (void) { int vectorEnteros [MAX_ARRAY]; int indice=0, numero; /* Aquí va el relleno del array */ fscanf (stdin,“%d”,&numero); fflush(stdin); while ((numero!=vectorEnteros[indice])&&(indice<MAX_ARRAY)) indice++; if (numero==vectorEnteros[indice]) fprintf(stdout,“se ha encontrado el numero %d: ”,numero); else fprintf(stdout,“no se ha encontrado el numero %d: ”,numero); }
  15. 15. Curso 06/07 Programación I: Estructuras de datos. Tema 5 - 15 Arrays Arrays de varias dimensiones de varias dimensiones „ Es posible disponer de arrays de más de una dimensión (2, 3, etc.). „ Si son de más dos dimensiones se conocen con el nombre de matrices. „ Se declaran con la siguiente sintaxis: tipo_base Nombre [expr1]….[exprN]; tamaño de la 1ª dimensión tamaño de la Nª dimensión
  16. 16. Curso 06/07 Programación I: Estructuras de datos. Tema 5 - 16 Arrays Arrays de varias dimensiones de varias dimensiones float tabla [3] [4]; char matriz [2] [5] = { {‘a’,’e’,’i’,’o’,’u’}, {‘b’,’c’,’d’,’f’,’h’} }; int cubo [3] [3] [3]; /* Declaración de matriz de tres dimensiones */ tabla [0] [0] = 12.7; tabla [1] [2] = 4.3; tabla tabla [][0] ? tabla [][1] ? tabla [][2] ? tabla [][3] ? tabla [][0] ? tabla [][1] ? tabla [][2] ? tabla [][3] ? tabla[0][] tabla [][0] ? tabla [][1] ? tabla [][2] ? tabla [][3] ? tabla[1][] tabla[2][]
  17. 17. Curso 06/07 Programación I: Estructuras de datos. Tema 5 - 17 Arrays Arrays de varias dimensiones: Ejemplo de varias dimensiones: Ejemplo „ Programa que inicializa los elementos de una tabla de dos dimensiones (10x20) con la suma de sus índices. void main (void) { int tabla[10][20]; int i,j; /* índices para recorrer las matrices */ for (i=0; i<10; i++) for (j=0; j< 20; j++) tabla[i][j]= i+j; }
  18. 18. Curso 06/07 Programación I: Estructuras de datos. Tema 5 - 18 Arrays Arrays & punteros & punteros „ En una declaración de un array tal como: int numeros [5]; „ la variable números representa un puntero constante (no se puede modificar) que contiene la dirección de la primera posición del array. „ Por ejemplo: char vocales [5]={‘a’,’e’,’i’,’o’,’u’}; char * letra; vocales letra 100 102 103 104 101 200 posición0 posición N 0 1 2 3 4 a e i o u ?
  19. 19. Curso 06/07 Programación I: Estructuras de datos. Tema 5 - 19 Arrays Arrays & punteros & punteros „ Por ejemplo: (¿Qué cosas están permitidas?) char vocales [5]={‘a’,’e’,’i’,’o’,’u’}; char * letra; char vocales [5]={‘a’,’e’,’i’,’o’,’u’}; char * letra; letra = vocales; /* equivale a letra=&vocales[0];*/ letra++; /* equivale a letra=&vocales[1];*/ /* o a letra=letra+1; */ letra = vocales; /* equivale a letra=&vocales[0];*/ letra++; /* equivale a letra=&vocales[1];*/ /* o a letra=letra+1; */ Por ejemplo: ¿Qué cosas no están permitidas? vocales = letra; vocales ++; vocales = letra; vocales ++; vocales es un puntero cte. vocales a b i o u letra
  20. 20. Programación I. Tema 5 Programación I. Tema 5 Estructuras de datos. CADENAS DE CARACTERES
  21. 21. Curso 06/07 Programación I: Estructuras de datos. Tema 5 - 21 Cadenas de caracteres Cadenas de caracteres „ Concepto: „ Es un array unidimensional en el que sus elementos son caracteres „ No existe un tipo específico. „ Declaración genérica de cadena de caracteres: char id_cadena []; char * id_cadena; „ Se inicializan como array normal o asignando una constante de tipo cadena de caracteres. „ Si no se especifica el tamaño del array, éste será el tamaño de la cadena más 1, ya que el compilador añade el carácter NULL (‘0’) al final de la cadena.
  22. 22. Curso 06/07 Programación I: Estructuras de datos. Tema 5 - 22 Cadenas de caracteres. Ejemplo Cadenas de caracteres. Ejemplo „ Ejemplos de declaración de variables como cadenas de caracteres en C: char asignatura [] = “programacion1”; 0 1 2 13 p r o g r a m a c i o n 1 0 0 1 2 13 p r o g r a m a c i o n 1 0 ? 24 char asignatura [25] = “programacion1”; char asignatura [13] = “programacion1”; 0 1 2 12 p r o g r a m a c i o n 1
  23. 23. Curso 06/07 Programación I: Estructuras de datos. Tema 5 - 23 Asignación de valores Asignación de valores „ A una cadena de caracteres se le puede asignar valores como a cualquier array „ En la declaración: char asignatura [25] = “programacion1”; asignatura = “programacion1”; „ Procesándola como cualquier array: no se puede asignar valores de esta forma char asignatura[25]=“programacion1”; fprintf(stdout,“la asignatura es:”); for(i=0;i<14;i++) fprintf(stdout,“%c”, asignatura[i]); ƒ Usando funciones de librería
  24. 24. Curso 06/07 Programación I: Estructuras de datos. Tema 5 - 24 Cadenas y punteros Cadenas y punteros „ Una cadena de caracteres puede manejarse mediante un puntero al primer elemento: 0 1 19 ? ? ? ? ? ? char nombre [20]; char *p; p = nombre; fscanf(stdin,“%s”, p); reserva memoria para la cadena NO reserva memoria para la cadena nombre letra 0 1 19 1 a z 0 ? si tecleamos “1az”
  25. 25. Curso 06/07 Programación I: Estructuras de datos. Tema 5 - 25 Cadenas y punteros Cadenas y punteros „ Una cadena de caracteres constante puede ser referenciada mediante un puntero, pero el contenido no se puede alterar mediante dicho puntero: „ Ejemplo char *p = “perro”; p = “gato”; /*incorrecto*/ p 0 1 p e r r o 0 g a t o 0 2 3 4 5 0 1 2 3 4
  26. 26. Curso 06/07 Programación I: Estructuras de datos. Tema 5 - 26 Funciones de cadenas de caracteres Funciones de cadenas de caracteres „ fgets #include <stdio.h> char * fgets (char *string, int n, FILE *stream ); #include <stdio.h> char * fgets (char *string, int n, FILE *stream ); ƒLee una línea de hasta n caracteres del fichero de entrada (stream) y los almacena en la cadena de caracteres especificada por string incluyendo el carácter de newLine (‘n’) y añadiendo ‘0’ al final. ƒSi leemos mas de n caracteres almacena n-1 y substituye el carácter n por ‘0’. ƒValor devuelto: •Si se ha ejecutado correctamente, devuelve un puntero a la cadena de caracteres leída. •Si ha habido algún error, devuelve un puntero a NULL.
  27. 27. Curso 06/07 Programación I: Estructuras de datos. Tema 5 - 27 Funciones de cadenas de caracteres Funciones de cadenas de caracteres „ fputs #include <stdio.h> int fputs (const char *string, FILE *stream ); #include <stdio.h> int fputs (const char *string, FILE *stream ); ƒCopia en el fichero de salida (stream) la cadena de caracteres especificada por string. ƒValor devuelto: •Si se ha ejecutado correctamente, devuelve un valor positivo. •Si ha habido algún error, devuelve EOF.
  28. 28. Curso 06/07 Programación I: Estructuras de datos. Tema 5 - 28 Funciones de cadenas de caracteres Funciones de cadenas de caracteres „ Ejemplo – fgets, fputs: •¿Cómo se controlarían los posibles errores? #include <stdio.h> void main (void) { char nombre [30]; printf (“Escriba su nombre: “); fgets (nombre,30,stdin); printf (“nSu nombre es: ”); fputs (nombre,stdout); .........................
  29. 29. Curso 06/07 Programación I: Estructuras de datos. Tema 5 - 29 Funciones de cadenas de caracteres Funciones de cadenas de caracteres „ Ejemplo – fgets, fputs: „ Codificar un programa en C que lea unas líneas de hasta N caracteres y las escriba en la pantalla. ƒ Terminará cuando se teclee una línea vacía. #include <stdio.h> #define N 80 void main (void) { char linea [N]; do { fgets(linea,N,stdin); /* precaución por si linea es menor de N */ if (linea[strlen (linea)-1]==‘n’) linea[strlen(linea)-1]=‘0‘; fputs (“la linea es: ”, stdout); fputs(linea, stdout); }while (linea[0]!=`0´); }
  30. 30. Curso 06/07 Programación I: Estructuras de datos. Tema 5 - 30 Funciones de cadenas de caracteres Funciones de cadenas de caracteres „ strcpy #include <string.h> char* strcpy (char* strDestination,const char* strSource); #include <string.h> char* strcpy (char* strDestination,const char* strSource); ƒCopia la cadena de caracteres strSource (que debe estar terminada en ‘0’) en la cadena de caracteres strDestination, incluido el ‘0’. ƒValor devuelto: •Si se ha ejecutado correctamente, devuelve un puntero a la cadena strDestination. •Si ha habido algún error, devuelve un puntero a NULL.
  31. 31. Curso 06/07 Programación I: Estructuras de datos. Tema 5 - 31 Funciones de cadenas de caracteres Funciones de cadenas de caracteres „ strcmp #include <string.h> int strcmp (const char* string1,const char* string2); #include <string.h> int strcmp (const char* string1,const char* string2); ƒCompara la cadena de caracteres string1 con la cadena de caracteres string2. •Ambas cadenas deben terminar en ‘0’. ƒValor devuelto: •Si string1 es igual a string2, devuelve un cero. •Si string1 es menor que string2, devuelve un número negativo. •Si string1 es mayor que string2, devuelve un número positivo.
  32. 32. Curso 06/07 Programación I: Estructuras de datos. Tema 5 - 32 Funciones de cadenas de caracteres Funciones de cadenas de caracteres „ strlen #include <string.h> int strlen (const char * string); #include <string.h> int strlen (const char * string); ƒHalla la longitud de la cadena de caracteres string (debe terminar en ‘0’). ƒValor devuelto: •Si se ha ejecutado correctamente, devuelve la longitud en bytes de la cadena string, sin incluir el ‘0’. •Si ha habido algún error, devuelve un cero.
  33. 33. Curso 06/07 Programación I: Estructuras de datos. Tema 5 - 33 Funciones de cadenas de caracteres Funciones de cadenas de caracteres „ Ejemplo - strcmp, strcpy, strlen: #include <stdio.h> #include <string.h> #define DIM 30 void main (void) { char nombre1 [DIM],nombre2 [DIM],nombre3 [DIM] = “Pepe”; int aux; fprintf (stdout,“ Escriba su nombre: “); fgets (nombre1, DIM, stdin); aux = strcmp (nombre1,nombre3); if (aux == 0) fprintf (stdout,“Hola %s, bienvenido”,nombre1); else { strcpy (nombre2,nombre1); fprintf (stdout,“Hola %s, tu nombre tiene %d letras”, nombre2, strlen (nombre2)); } }
  34. 34. Curso 06/07 Programación I: Estructuras de datos. Tema 5 - 34 Funciones de cadenas de caracteres Funciones de cadenas de caracteres „ strchr #include <string.h> char * strchr (const char * string, int c); #include <string.h> char * strchr (const char * string, int c); ƒBusca el carácter c en la cadena de caracteres string (debe terminar en ‘0’). ƒValor devuelto: •Si el carácter buscado se encuentra en la cadena, devuelve un puntero a la primera aparición del carácter. •Si el carácter no se encuentra, devuelve un puntero a NULL.
  35. 35. Curso 06/07 Programación I: Estructuras de datos. Tema 5 - 35 Funciones de cadenas de caracteres Funciones de cadenas de caracteres „ Ejemplo - strchr : #include <stdio.h> #include <string.h> void main (void) { char direccion [50]; int caracter = ‘M’; /* Carácter buscado */ char *punt; /* Apuntará al valor devuelto por strchr */ strcpy (direccion,”Calle Mayor n. 11“); punt = strchr (direccion,caracter); if (punt != NULL) fprintf (stdout,“El carácter %c está en la cadena %sn”,*punt,direccion); else fprintf (stdout,“El caracter %c no se ha encontrado.n”,caracter); }
  36. 36. Curso 06/07 Programación I: Estructuras de datos. Tema 5 - 36 Funciones de cadenas de caracteres Funciones de cadenas de caracteres „ strtok #include <string.h> char* strtok (char* strToken, const char* strDelimit); #include <string.h> char* strtok (char* strToken, const char* strDelimit); ƒBusca el siguiente delimitador strDelimit en la cadena de caracteres strToken (debe terminar en ‘0’). ƒValor devuelto: •Cada vez que se invoca devuelve un puntero a una palabra de la cadena strToken, en la que se consideran como delimitadores de palabra los especificados en strDelimit. •Cuando no se encuentran más palabras, devuelve un puntero a NULL.
  37. 37. Curso 06/07 Programación I: Estructuras de datos. Tema 5 - 37 Funciones de cadenas de caracteres Funciones de cadenas de caracteres „ Ejemplo - strtok : la primera vez se pasa la cadena y el resto el valor NULL #include <stdio.h> #include <string.h> void main (void) { char *cad = “Prueba, cadena-pequeña- con separadores, varios.fin”; char *palabra; palabra = strtok (cad, “ ,.-”); while (palabra != NULL) { fprintf (stdout,“%sn”,palabra); palabra = strtok (NULL, “ ,.-”); } }
  38. 38. Curso 06/07 Programación I: Estructuras de datos. Tema 5 - 38 Funciones de cadenas de caracteres Funciones de cadenas de caracteres „ Ejercicio propuesto : „ Presentar un mensaje por pantalla indicando si una secuencia de 10 caracteres es palíndromo. ƒ Una secuencia de caracteres es palíndromo si se lee igual de derecha a izquierda que de izquierda a derecha. Mirar si es palíndromo INICIO Mientras principio<final y sean iguales los elementos del array de índices principio y final hacer principio <- siguiente(principio+1) final<-anterior(final-1) finMientras FIN
  39. 39. Curso 06/07 Programación I: Estructuras de datos. Tema 5 - 39 Funciones de cadenas de caracteres Funciones de cadenas de caracteres „ Codificación “palíndromo”: #include <stdio.h> #define LONGITUD 10 void main (void) { char secuencia[LONGITUD+1]; /* palabra a analizar */ int principio = 0, palin; int final = LONGITUD-1; fprintf(stdout,“Teclee una secuencia de 10 caracteres: n”); gets(secuencia); while ((principio < final)&& (palin = (secuencia[principio]==secuencia[final]))) { principio = principio + 1; final = final - 1; } if (palin) fprintf(stdout,“Es una secuencia palíndromo); else fprintf(stdout,“No es una secuencia palíndromo); }
  40. 40. Programación I. Tema 5 Programación I. Tema 5 Estructuras de datos. ESTRUCTURAS
  41. 41. Curso 06/07 Programación I: Estructuras de datos. Tema 5 - 41 Estructuras. Definición Estructuras. Definición „ Concepto: „ Conjunto de N elementos heterogéneos que están agrupados bajo un único nombre. „ Heterogéneo: pueden ser de distinto tipo „ Es un tipo definido por el programador „ Los miembros de una estructura pueden ser a su vez otras estructuras.
  42. 42. Curso 06/07 Programación I: Estructuras de datos. Tema 5 - 42 Estructuras. Declaración Estructuras. Declaración „ Notación de diseño: Nombre Clase Tipo variable Objeto compuesto de 4 objetos de tipo cadena de 30 caracteres (nombre, apellidos, dirección, DNI) y un objeto de tipo entero (edad) Funcionalidad pepe Se emplea para almacenar las características de la persona pepe ƒ Sintaxis en en C ƒstruct: palabra reservada para la estructura ƒtipo : miembros que forman la estructura ƒtypedef : declaración de nuevos tipos •Existen 3 formas de declaración …
  43. 43. Curso 06/07 Programación I: Estructuras de datos. Tema 5 - 43 Estructuras. Declaración en C Estructuras. Declaración en C „ Sintaxis (1): „ Se declara la estructura y se define la variable de tipo estructura al mismo tiempo. struct <nombre de la estructura> { <tipo> <nombre del campo>; <tipo> <nombre del campo>; .................. } <variable de tipo estructura>; puede ser cualquier tipo (char, int , float, etc)
  44. 44. Curso 06/07 Programación I: Estructuras de datos. Tema 5 - 44 Estructuras. Declaración en C Estructuras. Declaración en C „ Ejemplo 1: #include <stdio.h> void main (void) { struct persona { char nombre [30]; char apellidos [30]; char direccion [30]; int edad; char dni [30]; } pepe; /* pepe es una variable de tipo struct persona */ .............
  45. 45. Curso 06/07 Programación I: Estructuras de datos. Tema 5 - 45 Estructuras. Declaración en C Estructuras. Declaración en C „ Sintaxis (2): „ Se declara primero la estructura y después se define la variable de tipo estructura. „ Ventaja: pueden definirse otras variables del mismo tipo sin tener que repetir la estructura. struct <nombre de la estructura> { <tipo> <nombre del campo>; <tipo> <nombre del campo>; ................. }; struct <nombre de la estructura> <variable de tipo estructura>;
  46. 46. Curso 06/07 Programación I: Estructuras de datos. Tema 5 - 46 Estructuras. Declaración en C Estructuras. Declaración en C „ Ejemplo 2: #include <stdio.h> void main (void) { struct persona { char nombre [30]; char apellidos [30]; char direccion [30]; int edad; char dni [30]; }; struct persona pepe; struct persona amigos [10];
  47. 47. Curso 06/07 Programación I: Estructuras de datos. Tema 5 - 47 Estructuras. Declaración en C Estructuras. Declaración en C „ Sintaxis (3): -recomendado- „ Se declara un nuevo tipo de datos que se puede usar como cualquier otro tipo de datos predefinido en C al declarar las variables. „ Ventaja: independencia de la declaración del tipo de datos y la definición de variables de ese tipo typedef struct [ <nombre de la estructura> ] { <tipo> <nombre del campo>; <tipo> <nombre del campo>; ................ } <nombre del tipo estructura>;
  48. 48. Curso 06/07 Programación I: Estructuras de datos. Tema 5 - 48 Estructuras. Declaración en C Estructuras. Declaración en C „ Ejemplo 3: -recomendado- #include <stdio.h> typedef struct { char nombre [30]; char apellidos [30]; char direccion [30]; int edad; char dni [30]; } TPersona; void main (void) { TPersona pepe, juan; TPersona amigos [10];
  49. 49. Curso 06/07 Programación I: Estructuras de datos. Tema 5 - 49 Estructuras. Nuevos tipos de datos Estructuras. Nuevos tipos de datos „ Notación de diseño con “typedef”: „ Si el programador declara un nuevo tipo de datos con “typedef”, para el diseño del entorno es válida la siguiente declaración: Nombre Clase Tipo variable TPersona (definido más abajo) Funcionalidad pepe Se emplea para almacenar las características de la persona pepe •tipo TPersona se describiría a continuación....
  50. 50. Curso 06/07 Programación I: Estructuras de datos. Tema 5 - 50 Estructuras. Acceso Estructuras. Acceso „ Formas de acceso a los miembros de una estructura: „ 1. Mediante la variable de tipo estructura <variable de tipo estructura> . <nombre del campo>; „ 2. Mediante un puntero a la variable de tipo estructura: <puntero a la variable de tipo estructura> -> <nombre del campo>; „ A todos los efectos, el campo de una estructura es una variable de un tipo determinado y se puede tratar como tal.
  51. 51. Curso 06/07 Programación I: Estructuras de datos. Tema 5 - 51 Estructuras. Acceso Estructuras. Acceso „ Ejemplo 1: typedef struct persona { char nombre[30]; char apellidos[30]; int edad; }TPersona; ... ... .. ... ... ... ... ... ... TPersona persona; strcpy(persona.nombre,“Antonio”); strcpy(persona.apellidos,“Martinez Santos”); persona.edad=30;
  52. 52. Curso 06/07 Programación I: Estructuras de datos. Tema 5 - 52 Estructuras. Acceso Estructuras. Acceso „ Ejemplo 2: typedef struct persona { char nombre[30]; char apellidos[30]; int edad; }TPersona; ... ... .. ... ... ... ... ... ... TPersona *persona; strcpy(persona->nombre,“Antonio”); strcpy(persona->apellidos,“Martinez Santos”); persona->edad=30;
  53. 53. Curso 06/07 Programación I: Estructuras de datos. Tema 5 - 53 Estructuras. Acceso Estructuras. Acceso „ Ejemplo 3: „ Definición y acceso a las variables en la misma sentencia: typedef struct persona { char nombre[30]; char apellidos[30]; int edad; }TPersona; ... ... .. ... ... ... ... ... ... TPersona persona={“Antonio”, “Martinez Santos”, 30}; TPersona *pers1; strcpy((*pers1).nombre,“Ana”; ) /*Igual que strcpy(pers1->nombre,“Ana”); */
  54. 54. Curso 06/07 Programación I: Estructuras de datos. Tema 5 - 54 Estructuras. Asignación de valores Estructuras. Asignación de valores „ La asignación de valores a una estructura se puede hacer campo a campo, o asignando el contenido de una variable de tipo estructura a otra del mismo tipo, ya que el nombre de la estructura representa el contenido de la variable. TPersona persona={“Antonio”, “Martinez Santos”, 30}; TPersona pers1; strcpy(pers1.nombre, persona.nombre); strcpy(pers1.apellidos, persona.apellidos); pers1.edad = persona.edad; /* o bien */ pers1 = persona; /* Es necesario que o las dos estructuras sean del mismo tipo. */
  55. 55. Curso 06/07 Programación I: Estructuras de datos. Tema 5 - 55 Estructuras. Ejercicios Estructuras. Ejercicios „ Ejercicio 1: „ Definir los tipos de datos TElem1 y TElem2. siguiente nombre precio stock nombre año color anterior Tcosa1 TElem1 TElem2 Tcosa2
  56. 56. Curso 06/07 Programación I: Estructuras de datos. Tema 5 - 56 Estructuras. Ejercicios Estructuras. Ejercicios „ Ejercicio 2: „ Dadas las siguientes variables. ƒ TElem1 elemento1; ƒ TElem2 elemento2; 1. Pedir por pantalla los datos correspondientes a las variables “elemento1” y “elemento2”, almacenándolos en los campos correspondientes de las estructuras. 2. Asignar los punteros de las estructuras de forma que apunten como se indicaba en el ejercicio anterior. 3. Mostrar por pantalla los datos almacenados en la variable “elemento1” direccionando los campos de su estructura a través de la variable “elemento2”.
  57. 57. Curso 06/07 Programación I: Estructuras de datos. Tema 5 - 57 Estructuras. Ejercicios Estructuras. Ejercicios „ Ejercicio 3: „ Definir los arrays “punteros” y “amigos”, haciendo que los punteros apunten según se indica en la figura. punteros[0] punteros : punteros[1] punteros[MAX -1] amigos[0] nombre: ”AB” telefono: ”xx” edad: 20 peso: 70 TPersona amigos[1] nombre: ”BC” telefono: ”xx” edad: 21 peso: 68 TPersona amigos[2] nombre: ”CD” telefono: ”xx” edad: 22 peso: 66 TPersona amigos[MAX-1] nombre: telefono: ”xx” edad: peso: TPersona amigos : punteros[2]
  58. 58. Curso 06/07 Programación I: Estructuras de datos. Tema 5 - 58 Estructuras. Ejercicios Estructuras. Ejercicios „ Ejercicio 4: 1. Inicializar el array “amigos” tal y como se indica en la figura del ejercicio 3 a través del array “punteros”. 2. Mostrar por pantalla el contenido del array “amigos” empezando por el elemento MAX-1 y terminando por el cero, sin usar para nada el array “punteros”.
  59. 59. Programación I. Tema 5 Programación I. Tema 5 Estructuras de datos

×