Capitulo EXTRA STRUCT.

Anuncio
Estructura
IWI-131 Programación
Paralelo 1
Estructura: Colección de variables que se referencia bajo el
mismo nombre.
Arreglos: Colección de variables de un mismo tipo que se
referencia utilizando un nombre en común.
8: Estructuras
Una estructura es un nuevo tipo de dato.
La idea es tratar a un grupo de variables como una sola
unidad.
nombre, peso, edad, estatura: persona
José Miguel Herrera M.
Estudiante de Ingeniería Civil Informática - UTFSM
Estudiante de Magister en Ciencias de la Informática - UTFSM
procesador, memoria, t.video: computador
punto X, punto Y:
Declaración de una estructura
struct datos
{
char nombre[20];
Y
char direccion[20];
(x,y)
int codigo;
};
X
a:
struct punto
{
int x;
int y;
}
miembros de la estructura
struct datos a, b[3];
/* b es un arreglo de estructuras */
nombre:
....
direccion:
....
Para hacer referencia:
a.nombre[20] = ”Arturo”;
a.direccion[20] = ”calle2”;
codigo
a.codigo = 13330
3
Declaración de una estructura
4
Declaración de una estructura
struct datos
Son equivalentes
{
char nombre[20];
struct datos
char direccion[20];
{
char nombre[20];
int codigo;
char direccion[20];
};
struct datos a, b[3];
/* b es un arreglo de estructuras */
0
b:
nombre:
direccion:
codigo
2
Declaración de una estructura
Una declaración es un nuevo tipo de dato:
struct nombre_estructura
{
tipo miembro_1;
tipo miembro_2;
.
tipo miembro_n;
}
punto
1
....
....
nombre:
direccion:
int codigo;
};
2
....
....
codigo
b[1].nombre[20] = ”Arturo”;
b[1].direccion[20] = ”Calle2”;
b[1].codigo = 13330;
nombre:
direccion:
struct datos a, b[3];
....
....
struct datos
{
char nombre[20];
char
direccion[20
];
int codigo;
} datos a, b[3];
codigo
5
6
1
Declaración de una estructura
Estructuras anidadas
struct fecha{
Utilizando typedef
int dia;
typedef struct direc
int mes;
{
int anio;
char nombre[30];
};
char calle[40];
struct persona{
char ciudad[20];
char nombre[20];
char estado[3];
struct fecha nacimiento;
unsigned int codigo;
};
} sdirec;
struct persona p;
sdirec info_direc;
¿ Como haríamos referencia ?
sdirec info_direc2 = {"Vicente", "calle 2000", "Chile", "LA", 12345};
7
Paso por referencia de un miembro
Paso por valor de un miembro
void f1(int x){
8
/* declaración de la función */
void f1(int *x){
.........
}
}
void main(void){
void main(void){
struct ejemplo{
struct ejemplo{
int paso1;
int codigo;
} a;
int paso1;
int codigo;
} a;
a.codigo = 700;
f1( a.codigo );
/* declaración de la función */
.........
a.codigo = 700;
f1( &a.codigo );
/* llamada a la función */
printf( ”Valor es %d”, a.codigo);
}
/* llamada a la función */
printf( ”Valor es %d”, a.codigo);
9
Paso por valor de estructuras
}
10
Ejemplo
struct vector {
Mediante 2 puntos, definir un rectángulo en un plano
int x,y,z;
};
struct vector suma(struct vector v1, struct vector v2){
(x1, y1)
v1.x += v2.x;
v1.y += v2.y;
v1.z += v2.z;
return (v1);
}
(x2, y2)
void main(void){
struct vector v1, v2, v3;
...
v3 = suma(v1,v2);
}
11
12
2
Ejemplo
Ejemplo 3
#include <stdio.h>
Implementar una función que calcule la distancia del origen
(0,0) al punto (x1, y1).
struct persona{
int edad;
char nombre[];
};
(x1, y1)
int main(void){
struct persona p1;
strcpy(p1.nombre, "Juan");
p1.edad = 10;
(x2, y2)
scanf(”%s”, p1.persona )
scanf(”%d”, &p1.edad )
printf("%s\n", p1.nombre );
printf("%d", p1.edad );
return 0;
13
Ejemplo
}
14
Ejemplo
Ejemplo (se mostrará en clases)
Realizar un programa que permita ingresar 30 datos de
alumnos de un curso. Para cada alumno es necesario tener la
siguiente información:
nombre, rol, año nacimiento, las notas de 3 certámenes,
promedio final y estado (R o A si reprobó o aprobó,
respectivamente). Los últimos dos son calculados por el
programa.
15
El programa debe mostrar los datos del alumno, el promedio
de los 3 certámenes y si aprobó o reprobó.
16
3
Descargar