Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Tecnologías Industriales
Fundamentos de Informática
Tema 9
Estructuras de datos
char nombre[20];
char apellidos[40];
char dni[10];
printf("Dame el DNI:");
fgets(dni, K, stdin);
printf("\nDatos Personales\n");
printf("Nombre % s\n",nombre);
printf("Apellidos: %s\n",apellidos);
printf("Nombre: % s\n",dni);
return 0;
Fundamentos de }Informática ICAI – 1º GITI Tema 9: Estructuras de datos 5
Problemas de la solución 1
• La aproximación presentada tiene los siguientes “peros”:
– Toda la información relacionada con una misma persona se encuentra dispersa
en muchas variables.
• El programa sería difícil de mantener y de comprender.
– ¿Cómo podríamos modificar nuestro programa para que, en vez de almacenar
la información relativa a una única persona, pudiera almacenar esa misma
información para 100 personas?
• Modificar el programa y adaptarlo a nuevas necesidades sería complicado.
Solución 2
• Definir una estructura en C de la siguiente forma:
struct persona {
char nombre[N];
char apellidos[M];
char dni[K];
};
Atención:
En este curso, vamos a utilizar la sentencia typedef para la definición de las
estructuras pues facilita la legibilidad del código.
#include <stdio.h>
#include <string.h>
typedef struct {
char nombre[20];
char apellidos[40];
char dni[10];
} T_PERSONA;
int main(void) {
T_PERSONA persona;
strcpy(persona.nombre,”Javier”);
strcpy(persona.dni,”123456H”);
return 0;
}
typedef struct {
char nombre[20];
char apellidos[40];
char dni[10];
T_FECHA f_nacimiento;
} T_PERSONA;
• Ejemplo:
typedef struct {
int dia;
int mes;
int anio;
} T_FECHA;
int main(void) {
T_FECHA fecha1; // Variable de tipo T_FECHA
T_FECHA *p_fecha; // Puntero a variable de tipo T_FECHA
fecha1.dia = 12;
fecha1.mes = 4;
fecha1.anio = 2002;
puntero=&persona;
printf("\n\nDatos Personales\n");
printf("Nombre % s\n", puntero->nombre);
printf("Apellidos: %s\n", puntero->apellidos);
printf("Nombre: % s\n", puntero->dni);
return 0;
}
#include <stdio.h>
typedef struct {
double real;
double imag;
} T_COMPLEJO;
#include <stdio.h>
typedef struct { ¡¡MUCHO MEJOR DE ESTA FORMA!!
double real;
double imag;
}T_COMPLEJO;
NOTA: En este programa no se hace ninguna copia de las variables de tipo estructura, se pasa su referencia.
int Suma(T_NUMEROS *puntero); /*función para sumar los campos de una estructura*/
int main(void) {
T_NUMEROS numeros;
int resultado;
numeros.numero1=1;
numeros.numero2=2;
numeros.numero3=3;
resultado=Suma(&numeros);
printf(“El resultado de la suma es % d\n”, resultado);
}
int Suma(T_NUMEROS *puntero) {
return (puntero->numero1 + puntero->numero2 + puntero->numero3);
}
/* Inicializaciones */
encontrado = 0; // encontrado y existe valen siempre lo mismo (podríamos usar solo una de las dos)
for(i=0; i<N && encontrado == 0; i++)
if (tabla[i].no_cuenta ==ncuenta) {
}
strcpy(reg->nombre, tabla[i].nombre);
reg->no_cuenta = tabla[i].no_cuenta; *reg = tabla[i];
reg->tipo_cuenta=tabla[i].tipo_cuenta;
reg->saldo = tabla[i].saldo;
encontrado = 1;
existe=1 ; /*valor 1 devuelto por la función si existe el cliente*/
}
}
return(existe);
}
Nota: esta función busca en el vector “tabla” el cliente que tiene ese número de cuenta y devuelve la estructura correspondiente
usando paso por referencia.
cliente.no_cuenta = -1 ; /* Inicializaciones */
encontrado = 0;
for(i=0; i<N && encontrado == 0; i++) {
if (tabla[i].no_cuenta == ncuenta) {
cliente=tabla[i];
encontrado = 1;
}
}
return(cliente);
}
Nota: esta función busca en el vector “tabla” el cliente que tiene ese número de cuenta y
devuelve la estructura correspondiente al cliente de forma directa.
do {
printf("Introduzca la dimensión de los vectores: ");
scanf("%d", &dim);
} while (dim <= 0);
www.comillas.edu