Professional Documents
Culture Documents
En el captulo anterior
Gonzalo Gabriel Mndez, M.Sc. 23/10/2013
Algo de terminologa
tipo *ptr // Puntero llamado ptr que apunta a variable de tipo tipo *ptr // Valor almacenado en espacio de memoria a donde ptr
apunta
*(ptr + i) // Valor almacenado en el i-simo espacio de memoria delante de donde ptr apunta &algo // Direccin o referencia de algo tipo *ptr = &algo // Puntero llamado ptr que apunta a variable de tipo tipo al que se le asigna la direccin de memoria de algo ptr++ // Incremento de posicin a la que ptr apunta
Ejemplo: Planteamiento
Tenemos dos arreglos que almacenan: (1) los nombres de un grupo
Ejemplo: Solucin
// Creacin de arreglos int notas[] = {23, 43, 67, 89, 72}; char *nombres[] = {"Alan", "Frank", "Mary", "John", "Lisa" };
Hasta ahora
Tipos de datos bsicos o simples Enteros, reales, caracteres, etc. Operaciones sobre cada uno Representan datos atmicos (pequeas unidades de informacin) Datos ms complejos o estructurados
200911147 201016284 200008423 200708295 7 Arreglos! 200719029 200810968 200827749 201024502 200002426 200115061
Nuevo estudiante
Alan Frank Mary John Lisa Carl Emily Jimmy Ann Marc Diane
IN-ICC-SM IN-ICC-SI IN-TEL IN-TLM IN-TLM IN-TEL IN-ICC-SI IN-ICC-ST IN-ICC-SM IN-TLM IN-TEL
23 43 67 89 72 80 86 30 74 100 87
Guayaquil Guayaquil Machala Salinas Guayaquil Milagro Babahoyo Guayaquil Salinas Salinas Ambato
17 9 11 13 15 8 7 7 6 11 9
7.98 6.32 8.33 9.03 6.43 7.39 9.00 6.07 6.77 7.46 8.34
200423176
Representacin de Datos
Alan
Marc
Emily Mary John Ann
Diane
7 arreglos (nonatural)
Frank
Lisa Jimmy
Carl
10
Factor P
Promedio Nota
Solucin en C
Estructuras de Datos
11
Estructuras de Datos
Gonzalo Gabriel Mndez, M.Sc. 23/10/2013
Definicin
Constituyen un tipo de dato ms complejo Agrupa componentes (datos simples) Cada componente tiene un identificador y se conoce como elemento o campo de la estructura
typedef struct Nombre_de_Estructura {
Sintaxis en C
} Nombre_de_Estructura;
Gonzalo Gabriel Mndez, M.Sc. 23/10/2013
13
Recordando typedef
Sirve para 1. Renombrar tipos de datos existentes (creando alias)
typedef int entero; entero count = 1; entero *ptr = &count;
2. Crear enumeraciones
typedef enum { LUNES, MARTES, MIERCOLES, JUEVES, VIERNES, SABADO, DOMINGO } DIA; DIA hoy = SABADO
3. Definir estructuras
Gonzalo Gabriel Mndez, M.Sc. 23/10/2013
14
Estructura Estudiante
Cmo se definira la estructura Estudiante del ejemplo anterior?
typedef struct Estudiante { char matrcula[9]; char nombre[100]; char carrera[10]; char ciudad[50]; int factorP; float promedio; int nota; } Estudiante; Estudiante estudiante1;
Despus de esta definicin, todos los Estudiantes tendrn la misma estructura en memoria
15
Acceso a campos
La variable seguida de un punto y del nombre del campo. Ejemplo:
Estudiante est; // Declaracin de la variable
// Asignacin de valores a campos est.promedio = 9.36; strcpy (est.matricula, 200305845); strcpy(est.nombre, Gonzalo Mndez Cobea) // Consulta de valores de campos printf("%d", est.factorP);
16
Estructuras: Ejemplos
Estructura para representar el nombre completo de una persona
typedef struct NombreCompleto { char primero[10]; char inicial; char ultimo[10]; } NombreCompleto;
17
Ejercicio
Utilizando la definicin que se muestra a continuacin para la estructura Punto, defina una nueva estructura para representar un Cuadrado en un plano cartesiano
typedef struct Punto { int x; int y; } Punto;
18
Propuestas de Solucin
// 1. Cuadrado est formado por cuatro puntos typedef struct Cuadrado { Punto p1, p2, p3, p4; } Cuadrado;
p1
p2
p4
// 2. Definido por dos puntos esquineros diagonalmente opuestos
p3
supIzq
typedef struct Cuadrado { Punto supIzq, infDer; } Cuadrado;
infDer
Gonzalo Gabriel Mndez, M.Sc. 23/10/2013
19
Propuestas de Solucin
// 3. Definido por un punto, una direccin hacia dnde se debe dibujar y la longitud del lado del cuadrado lado typedef enum { DERECHA_ARRIBA, DERECHA_ABAJO, IZQUIERDA_ARRIBA, IZQUIERDA_ARRIBA DERECHA_ARRIBA IZQUIERDA_ABAJO } Direccion; typedef struct Cuadrado { Punto p; int lado; Direccion dir; } Cuadrado;
p
IZQUIERDA_ABAJO DERECHA_ABAJO
20