Tema12. Manejo de Estructuras

Anuncio
FUNDAMENTOS DE PROGRAMACIÓN
Sabino Miranda Jiménez
Universidad Autónoma del Estado de México (UAEM)
[email protected]
UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO
Estructuras en C
Una estructura es
 Una colección de una o más variables
 Mismo tipo o diferentes tipos
 Agrupas por un mismo nombre
Ventajas:
 Ayudan a organizar los datos
 Se tratan como una sola unidad
UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO
Ejemplo de estructura de datos
Registro de un empleado
Empleado
 Nombre
 Domicilio
 NoSeguridadSocial
 Salario
Nombre
 Nombre
 Apellido_Paterno
 Apellido Materno
UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO
Ejemplo de estructura de datos
La graficación de un punto
Punto
Coordenada_X
Cooredenada_Y
En C se utiliza la siguiente forma para declarar la
estructura
struct punto{
int x;
int y;
}
UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO
Ejemplo de estructura de datos en C
struct punto {
int x;
int y;
};
Etiqueta o nombre de la
estructura
Miembros o Elementos
La declaración struct define un tipo de dato.
Se pueden definir variables al terminar la llave derecha
struct { … } x,y,z;
Si no se declaran variables no reserva espacio, sólo es la
declaración.
La etiqueta se usa para declaraciones posteriores de
variables
UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO
Declaración de variables de tipo
estructura
struct punto punto1,punto2;
Inicialización por medio de asignación
struct punto punto1={10,20};
Inicialización por medio de los miembros de la
estructura. Operador punto “.”
punto1.x=10;
punto1.y=20;
UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO
Anidamiento de estructuras
Rectángulo
Punto1 Punto2
Punto3 Punto4
struct rect {
struct punto p1;
struct punto p2;
struct punto p3;
struct punto p4;
};
UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO
Ejemplo en C
#include <stdio.h>
struct punto {
int x;
int y;
};
int main()
{
struct punto pt1 ={10,20};
struct punto pt2;
pt2.x=20;
pt2.y=30;
printf("Punto1(x,y)= (%d,%d)\n",pt1.x,pt1.y);
printf("Punto2(x,y)= (%d,%d)\n”, pt2.x,pt2.y);
return 0;
}
UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO
Salida
Punto1(x,y)= (10,20)
Punto2(x,y)= (20,30)
UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO
Ejemplo de estructura anidada en C
#include <stdio.h>
#include <conio.h>
struct punto {
int x;
int y;
};
struct rect {
struct punto pt1;
struct punto pt2;
struct punto pt3;
struct punto pt4;
};
punto(x,y)
punto(x,y)
UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO
Ejemplo de estructura anidada en C
int main()
{
struct rect rec ={10,20,1,2,10,11,5,6};
printf("Coordenadas Punto3(x,y)= (%d,%d)\n",rec.pt3.x,rec.pt3.y);
rec.pt3.x=1000;
rec.pt3.y=2000;
printf("Coordenadas Punto3(x,y)= (%d,%d)\n",rec.pt3.x,rec.pt3.y)
return 0;
}
UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO
Salida
Coordenadas Punto3(x,y)= (10,11)
Coordenadas Punto3(x,y)= (1000,2000)
UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO
Propiedades de las estructuras en C
Dado que las estructuras se definen como un tipo
de dato más, se aplican las propiedades de los
tipos de datos como:
Parámetro de función
• Por valor
• Por referencia
Arreglo de estructuras
Apuntadores a estructuras
Retorno de tipo de dato a estructura
UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO
Ejemplo: estructuras & funciones
#include <stdio.h>
#include <conio.h>
struct punto {
int x;
int y;
};
void imprimePunto(struct punto p)
{
printf("Coordenadas Punto(x,y)= (%d,%d)\n",p.x,p.y);
}
UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO
Ejemplo: estructuras & funciones
int main()
{
struct punto pt1 ={10,20};
struct punto pt2;
pt2.x=20;
pt2.y=30;
printf("Punto1\n");
imprimePunto(pt1);
printf("Punto2\n");
imprimePunto(pt2);
getche();
return 0;
}
UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO
Salida
Punto1
Coordenadas Punto(x,y)= (1,2)
Punto2
Coordenadas Punto(x,y)= (5,10)
UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO
Ejemplo: Arreglos de estructuras (1)
#include <stdio.h>
struct punto {
int x, y;
};
struct rect {
struct punto pts[4];
};
UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO
Ejemplo: Arreglos de estructuras (2)
void imprimePunto(struct punto p); // Prototipo
void imprimeRectArr(struct rect r); // Prototipo
int main()
{
struct rect rec ={10,20,1,2,10,11,5,6};
imprimeRectArr(rec);
rec.pts[2].x=1000;
rec.pts[2].y=2000;
printf("\n\nRectángulo modificado\n");
imprimeRectArr(rec);
getche();
return 0;
}
UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO
Ejemplo: Arreglos de estructuras (3)
void imprimePunto(struct punto p)
{
printf(" (%d,%d)\n",p.x,p.y);
}
void imprimeRectArr(struct rect r)
{
for(int i=0; i<4;i++)
{
printf("Punto %d=",i+1);
imprimePunto(r.pts[i]);
}
}
UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO
Salida
Punto 1= (10,20)
Punto 2= (1,2)
Punto 3= (10,11)
Punto 4= (5,6)
Rectángulo modificado
Punto 1= (10,20)
Punto 2= (1,2)
Punto 3= (1000,2000)
Punto 4= (5,6)
UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO
Ejemplo: Retorno de estructuras (1)
#include <stdio.h>
#include <conio.h>
struct punto {
int x;
int y;
};
void imprimePunto(struct punto p);
// Prototipo
struct punto muevePunto(struct punto p, int inc); // Prototipo
UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO
Ejemplo: Retorno de estructuras (2)
int main()
{
struct punto pt1 ={1,2};
struct punto pt2;
printf("Punto1\n");
imprimePunto(pt1);
pt2 = muevePunto(pt1,5);
printf("Punto2\n");
imprimePunto(pt2);
return 0;
}
UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO
Ejemplo: Retorno de estructuras (3)
void imprimePunto(struct punto p)
{
printf("Coordenadas Punto(x,y)= (%d,%d)\n", p.x, p.y);
}
struct punto muevePunto(struct punto p, int inc)
{
p.x = p.x+ inc;
p.y = p.y+ inc;
return p;
}
UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO
Salida
Punto1
Coordenadas Punto(x,y)= (1,2)
Punto2
Coordenadas Punto(x,y)= (6,7)
UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO
Ejercicio.
Realizar un programa que determine el área de un rectángulo dado
por los cuatro puntos que lo definen.
El usuario captura los puntos del rectángulo en parejas (x,y).
Recuerde que para determinar la distancia entre dos puntos se usa
la siguiente fórmula.
UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO
Definición de sinónimos para tipos de
Datos
En C, se cuenta con un keyword para definir sinónimos de los tipos
de datos: typedef
typedef tipo_dato nombre_sinonimo;
Ejemplo: usar Entero en lugar del tipo de dato int
typedef int Entero;
Entero num;
num=45;
typedef struct rect{ … } Rectangulo;
Rectangulo r ; // equivale a struct rect r
UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO
Estructuras en C: variables mixtas
struct trabajador
{
char nombre[100];
int edad;
char puesto[100];
};
UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO
Ejemplo: Arreglos de estructuras
UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO
Ejemplo: Arreglos de estructuras (1)
#include <stdio.h>
typedef struct trabajador {
char nombre[100];
int edad;
char puesto[100];
} Empleado;
void LeeRegistro(Empleado* noms, int tam);
void imprimeDatos(Empleado* noms, int tam);
UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO
Ejemplo: Arreglos de estructuras (2)
int main()
{
Empleado nombres[10];
LeeRegistro(nombres,3);
imprimeDatos(nombres,3);
return 0;
}
UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO
Ejemplo: Arreglos de estructuras (3)
void LeeRegistro(Empleado* noms, int tam)
{
int ed;
for(int i=0;i<tam;i++)
{
printf("\nRegistro No %d", i+1);
printf("\nNombre:");
gets(noms[i].nombre);
printf("Edad:");
scanf("%d",&noms[i].edad);
fflush(stdin); // descartar el <ENTER> capturado por scanf
//getchar(); // alternativa para linux
printf("Puesto:");
gets(noms[i].puesto);
}
}
UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO
Ejemplo: Arreglos de estructuras (4)
void imprimeDatos(Empleado* noms, int tam)
{
int i;
for(i=0; i<tam; i++)
{
printf("\nRegistro No %d", i+1);
printf("\nNombre: %s",noms[i].nombre );
printf("\nEdad: %d",noms[i].edad);
}
}
Ejercicio
• Crear un archivo con los datos capturados para el
empleado
• Cada línea del archivo representa los datos de un
empleado. El archivo tiene el siguiente formato
nombre|edad|puesto
Ejemplo de salida
Juan|32|Programador
María|25|administrativo
Pedro|38|Analista
Descargar