UNIDAD 4 ESTRUCTURAS Y UNIONESgalia.fc.uaslp.mx/~rmariela/programacion/unidad41.pdfContenido...
Transcript of UNIDAD 4 ESTRUCTURAS Y UNIONESgalia.fc.uaslp.mx/~rmariela/programacion/unidad41.pdfContenido...
UNIDAD 4
ESTRUCTURAS Y UNIONESProgramación
Primavera 2010
Contenido
Definición de estructura
Procesamiento de una estructura
Tipos de datos definidos por el usuario (typedef)
Estructuras y apuntadores
Paso de estructuras a una función
Uniones
Enumeraciones
Definición de Estructuras
� Una estructura es una colección de una o mas variables, de tipos posiblemente diferentes, agrupadas bajo un solo nombre
Las estructuras nos ayuda a organizar datos � Las estructuras nos ayuda a organizar datos complejos ya que nos permite el manejo de una grupo de datos como si fueran una unidad
� Las estructuras son comúnmente conocidas como registros.
Definición de estructura
� Cada uno de los datos que componen la estructura
es denominado campo y se le identifica con un
nombre único.
� Ejemplo:� Ejemplo:
� Empleado en una compañía tiene varios datos
asociado a el tales como
� Nombre
� Nivel
� Salario
� Domicilio
Ejemplo
� Por cada alumno de una universidad se requiere
almacenar la siguiente información:
� Matricula (entero)
� Nombre (cadena de caracteres)� Nombre (cadena de caracteres)
� Carrera (cadena de caracteres)
� Promedio (real)
� Domicilio (cadena de caracteres)
Alumno
Matricula Nombre Carrera Promedio Domicilio
Campos
Declaración de la Estructura
� La estructura se declara utilizando la palabra reservada struct seguida de la lista de campos entre llaves
� Ejemplo:struct alumno{
int matricula;char nombre[30];char carrera[30];float promedio;char domicilio[30];
};
Acceso a campos
� Para acceder a cada uno de los campos que componen la estructura debemos utilizar el operador punto
El acceso se realiza de la siguiente manera� El acceso se realiza de la siguiente manera
� nombre_variable.campo
� Ejemplo:struct alumno A;gets (A.nombre );
Inicialización de estructuras
� Las estructuras pueden ser inicializadas de la
siguiente manera
struct alumno A = {120,”Maria”,”Contabilidad”,8.9, struct alumno A = {120,”Maria”,”Contabilidad”,8.9, “Niño Artillero 120”};
Alumno
Matricula
120
Nombre
Maria
Carrera
Contabilidad
Promedio
8.9
Domicilio
Niño Artillero 120
Ejemplo
struct fecha{
int day;
int month;
int year;
fecha
day};
struct fecha today;
today.day = 13;
today.month = 4;
today.year = 2010;
day
month
year
Ejemplo
struct alumno{
int matricula;
char nombre[30];
struct fecha birth;
alumno
}
struct alumno A={120,”Hugo”,4,12,1970};
printf("%d/%d/%d\n",
A.birth.day,
A.birth.month,
A.birth.year);
matricula nombre fecha
día mes año
Ejercicio
� Declare una estructura
que contenga los
siguientes datos de
una cuenta bancaria
� inicialice los datos
para que contenga
� 0589465
� Ahorros
� Numero de cuenta
� tipo de cuenta
� nombre del titular
� Saldo
Ahorros
� Martin Jiménez
� 1085.25
� Incremente el saldo en
2000.00 pesos
Typedef
� La palabra reservada typedef nos permite definir alias o sinónimos para tipos de datos existentes.
� Ejemplo:
typedef struct{int day;int month;int year ;existentes.
� Al crear estos alias podemos utilizar nombres mas cortos para los tipos de datos que estamos definiendo.
int year ;} date;
date hoy;
Ejercicio
� Utilizando typedef define la siguiente estructura de los empleados de una empresa
� Nombre de empleado
� Departamento en la
� Primero deberás definir la estructura del domicilio con los siguientes datos
� Domicilio� Calle
� Numero� Departamento en la empresa
� Sueldo
� Domicilio� Calle
� Numero
� Código Postal
� Localidad
� Numero
� Código Postal
� Localidad
Arreglo de Estructuras
� Un arreglo de estructuras se define de la siguiente manera
typedef struct{char name[30];
int matricula;
� Para acceder a los campos de cada registro usamos el operador punto de la siguiente forma
for(i = 0; i < size; i++)
{
printf("Nombre del alumno:");
gets (lista[i].nombre);int matricula;
float promedio
}alumno;
alumno lista[50];
gets (lista[i].nombre);
printf("Matricula: ");
scanf("%d",&lista[i].matricula);
printf("Promedio: ");
scanf("%f",&lista[i].promedio);
fflush(stdin);
}
Ejemplo
� Realice un programa que lea 10 registros de alumnos.
� Cada registro deberá contener los siguientes datos
� Nombre del alumno
Matricula� Matricula
� Promedio
� El programa deberá llenar los 10 registros y mostrar los datos
� Después deberá ser capaz de buscar un alumno por número de matricula y desplegar sus datos
Lectura
void lectura(alumno lista[], int n)
{
int i;
for(i = 0; i < n; i++)
{
printf("Registro No. %d\n",i);
printf("Nombre del alumno: "); gets(lista[i].nombre);
printf("Matricula: ");scanf("%d",&lista[i].matricula);
printf("Promedio: ");scanf("%f",&lista[i].promedio);
fflush(stdin);
}
}
Impresión
void imprime(alumno lista[], int n)
{
for(int i = 0; i < size; i++)
{
printf (" Nombre del alumno : %s \ n",lista [ i ]. nombre );printf (" Nombre del alumno : %s \ n",lista [ i ]. nombre );
printf("Matricula:%d\n",lista[i].matricula);
printf("Promedio:%2.2f\n",lista[i].promedio);
}
}
busqueda
int busqueda (alumno lista [], int n, int mat)
{
for( int i = 0; i < n; i ++)for( int i = 0; i < n; i ++)
if( lista [i]. matricula == mat)
return i;
return -1;
}
Programa Principal#include <stdio.h>
#include <stdlib.h>
#define size 10
typedef struct{
char nombre[30];
int matricula;
float promedio;
} alumno;
void lectura(alumno lista[], int n);
void imprime ( alumno lista [], int n);void imprime ( alumno lista [], int n);
int busqueda(alumno lista[], int n, int mat);
int main()
{
int i,mat;
alumno lista[size];
printf("Proporciona los siguientes datos\n");
lectura(lista,size);
printf("Los datos leidos fueron\n");
imprime(lista,size);
Programa Principal
printf("Proporciona una matricula para ser buscada ");
scanf("%d",&mat);
i = busqueda(lista,size,mat);
if (i != -1)
{
printf (" Registro No. %d \ n",i );printf (" Registro No. %d \ n",i );
printf("Nombre del alumno: %s\n",lista[i].nombre);
printf("Matricula: %d\n",lista[i].matricula );
printf("Promedio: %2.2f\n",lista[i].promed io);
}
else
printf("La matricula no esta dada de alta\n");
system("pause");
return 0;
}
Ejemplo 2
� Modifique la función de escritura para evitar
matriculas duplicadas
Lectura
void lectura(alumno lista[], int n)
{
int mat,i=0;
while(i < n)
{
printf("Registro No. %d\n",i);
printf("Matricula: ");scanf("%d",&mat);
if (busqueda(lista,i,mat)== -1)
{
lista[i].matricula = mat;
printf("Nombre del alumno: "); gets(lista[i].nombre) ;
printf("Promedio: ");scanf("%f",&lista[i].promedio );
fflush(stdin); i++;
}
else printf("Este dato ya se encuentra registrado\n");
}
}
Ejercicio
� Escribe una programa que utilice una estructura para
representar a los números complejos
� Un número complejo tiene parte real e imaginaria
iyxa +=� Declare una estructura que permita el manejo de ambos
números. Estos números son reales.
� Realice una función que realice la suma de números
imaginarios.
� La suma se realiza de la siguiente manera
iyxa +=
);()( syirxba +++=+