Está en la página 1de 16

Universidad Nacional Autónoma de Nicaragua, León.

Facultad Ciencias y Tecnología. Departamento de Computación.


Laboratorio de Programación Estructurada
Guía #13: Declaración de tipos propios (Estructuras)

LABORATORIO DE PROGRAMACIÓN ESTRUCTURADA


GUÍA #13(presencial):
Declaración de tipos propios (Estructuras)

OBJETIVO:
• Crear nuevos tipos de datos haciendo uso de arreglo de estructuras.

M.Sc. Ana María Salgado Grillo Página 1


Universidad Nacional Autónoma de Nicaragua, León.
Facultad Ciencias y Tecnología. Departamento de Computación.
Laboratorio de Programación Estructurada
Guía #13: Declaración de tipos propios (Estructuras)

Arreglo de estructuras

Matriz de estructuras o matriz de registros, son matrices cuyos elementos son de algún tipo de
estructura.

Para definir una matriz de estructuras, es necesario declarar un tipo de estructura que coincida
con el tipo de los elementos de la matriz.

struct alumno
{
long matricula;
char apellidos[100]; char
nombres[100]; struct
date fechaNac; enum
carrera car; float
promedio;
char direccion[100];
};

struct alumno est[100];

Se accede a los elementos igual que los array.


est[0].matricula
est[0].apellidos

matricul apellidos nombre fechaNa ca promedio direccio matricul apellidos nombre fechaNac …
a s c r n
a s

est[0] est[1
]

M.Sc. Ana María Salgado Grillo Página 2


Universidad Nacional Autónoma de Nicaragua, León.
Facultad Ciencias y Tecnología. Departamento de Computación.
Laboratorio de Programación Estructurada
Guía #13: Declaración de tipos propios (Estructuras)

Ejercicio resuelto # 1
El programa presentado a continuación, lee del teclado los datos de un arreglo de estructuras
de tipo “struct alumno” y los visualiza, haciendo uso de una estructura anidada para
almacenar la fecha de nacimiento.

/*alumnoEstructuraAnidadaArray.c*/

#include <stdio.h> #include


<stdlib.h>
enum carrera
{
Sistemas = 1,
Telematicas = 2,
Biologia = 3,
Quimica = 4,
Matematicas = 5
};

struct date
{
int dia, mes, anyo;
};
struct alumno
{
long matricula;
char apellidos[100]; char
nombres[100]; struct
date fechaNac; enum
carrera car; float
promedio;
char direccion[100];

M.Sc. Ana María Salgado Grillo Página 3


Universidad Nacional Autónoma de Nicaragua, León.
Facultad Ciencias y Tecnología. Departamento de Computación.
Laboratorio de Programación Estructurada
Guía #13: Declaración de tipos propios (Estructuras)

};

int main()
{
struct alumno est[100];
int i,N;
printf("\nDatos de cuántos estudiantes desea introducir?:");
scanf("%d",&N);
for(i = 1; i <= N; i++)
{
printf("\nDatos del estudiante #%d:\n",i);
printf("-----------------------\n");
fflush(stdin);
printf("Ingrese el número de matrícula del alumno(entero largo):");
scanf("%ld",&est[i].matricula);
fflush(stdin);
printf("Ingrese los apellidos del alumno(cadena de caracteres):");
gets(est[i].apellidos);
fflush(stdin);
printf("Ingrese los nombres del alumno(cadena de caracteres):");
gets(est[i].nombres);
printf("Ingrese la fecha de nacimimiento(dd/mm/aa):");
scanf("%d/%d/%d",&est[i].fechaNac.dia, &est[i].fechaNac.mes, &est[i].fechaNac.anyo);
fflush(stdin);
printf("\nCarrera del alumno(entero):");
printf("\nSistemas = 1\n");
printf("Telematicas = 2\n"); printf("Biologia =
3\n"); printf("Quimica = 4\n");
printf("Matematicas = 5\n");
printf("Introduzca el numero que corresponde a la carrera:\n");
scanf("%d",&est[i].car);
fflush(stdin);
printf("Promedio del alumno(real):");
scanf("%f",&est[i].promedio);
fflush(stdin);
printf("Dirección del alumno(cadena de caracteres):");
gets(est[i].direccion);
}
M.Sc. Ana María Salgado Grillo Página 4
Universidad Nacional Autónoma de Nicaragua, León.
Facultad Ciencias y Tecnología. Departamento de Computación.
Laboratorio de Programación Estructurada
Guía #13: Declaración de tipos propios (Estructuras)

system("pause");
system("cls");
for(i = 1; i <= N; i++)
{
printf("\n\nDatos del aprendiente #%d:\n",i);
printf("-----------------------\n");
printf("El estudiante con matricula %ld:",est[i].matricula); printf("%s
%s",est[i].apellidos, est[i].nombres); printf("\nCon fecha de
nacimimiento: ");
printf("%d/%d/%d",est[i].fechaNac.dia, est[i].fechaNac.mes, est[i].fechaNac.anyo);
printf("\nEstudia la carrera : "); if(est[i]. car == 1)
printf("Sistemas\n"); if(est[i]. car == 2)
printf("Telematicas\n"); if(est[i]. car == 3) printf("Biologia\
n"); if(est[i]. car == 4)
printf("Quimica\n");
if(est[i]. car == 5)
printf("Matematicas\n");
printf("Con un promedio de : %.2f",est[i].promedio);
printf("\nVive en:%s", est[i].direccion);
}
return 0;
}

M.Sc. Ana María Salgado Grillo Página 5


Universidad Nacional Autónoma de Nicaragua, León.
Facultad Ciencias y Tecnología. Departamento de Computación.
Laboratorio de Programación Estructurada
Guía #13: Declaración de tipos propios (Estructuras)

Salida en pantalla:

M.Sc. Ana María Salgado Grillo Página 6


Universidad Nacional Autónoma de Nicaragua, León.
Facultad Ciencias y Tecnología. Departamento de Computación.
Laboratorio de Programación Estructurada
Guía #13: Declaración de tipos propios (Estructuras)

M.Sc. Ana María Salgado Grillo Página 7


Universidad Nacional Autónoma de Nicaragua, León.
Facultad Ciencias y Tecnología. Departamento de Computación.
Laboratorio de Programación Estructurada
Guía #13: Declaración de tipos propios (Estructuras)

M.Sc. Ana María Salgado Grillo Página 8


Universidad Nacional Autónoma de Nicaragua, León.
Facultad Ciencias y Tecnología. Departamento de Computación.
Laboratorio de Programación Estructurada
Guía #13: Declaración de tipos propios (Estructuras)

Ejercicio resuelto # 2

Leer 10 estructuras del arreglo de tipo "empleado" que contiene la siguiente información:
• nombre
• dirección (numCasa, barrio, ciudad)  edad
• sexo (M = masculino, F = femenino)
a) listar los empleados menores de 35 años
b) listar los empleados que viven en el barrio Subtiava
c) listar los empleados que viven en el barrio Subtiava y son menores de 35 años

Solución:

/*empleadoEstructuraArray.cpp*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

M.Sc. Ana María Salgado Grillo Página 9


Universidad Nacional Autónoma de Nicaragua, León.
Facultad Ciencias y Tecnología. Departamento de Computación.
Laboratorio de Programación Estructurada
Guía #13: Declaración de tipos propios (Estructuras)

typedef struct
{
int numCasa;
char barrio[50];
char ciudad[50];
}adress;

typedef struct
{
char nombre[100];
adress direccion; int
edad; char sexo;
}empleado;

int main()
{
empleado e[10];
int i,N;
printf("\nDatos de cuantos empleados desea introducir?: ");

M.Sc. Ana María Salgado Grillo Página 10


Universidad Nacional Autónoma de Nicaragua, León.
Facultad Ciencias y Tecnología. Departamento de Computación.
Laboratorio de Programación Estructurada
Guía #13: Declaración de tipos propios (Estructuras)

scanf("%d",&N);
for(i = 0; i < N; i++)
{
printf("\nDatos del empleado #%d:\n",i+1);
printf("-----------------------\n");
fflush(stdin);
printf("Ingrese el nombre: ");
gets(e[i].nombre); fflush(stdin);
printf("Ingrese la direccion...");
printf("\nNumero de casa: ");
scanf("%d",&e[i].direccion.numCasa);
fflush(stdin);

printf("Barrio?: ");
gets(e[i].direccion.barrio); fflush(stdin);

printf("Ciudad?: ");
gets(e[i].direccion.ciudad);
fflush(stdin);

printf("Ingrese la edad: ");


scanf("%d",&e[i].edad);

fflush(stdin);
printf("\nSexo(M/F)...: ");
e[i].sexo = getchar();
}

system("pause");
system("cls");

printf("\nEmpleados menores de 35 anyos\n");


printf("--------------------------------\n");
for(i = 0; i < N; i++)
{
if(e[i].edad < 35)
{

M.Sc. Ana María Salgado Grillo Página 11


Universidad Nacional Autónoma de Nicaragua, León.
Facultad Ciencias y Tecnología. Departamento de Computación.
Laboratorio de Programación Estructurada
Guía #13: Declaración de tipos propios (Estructuras)

printf("El trabajador %s, ",e[i].nombre); printf("que reside en la


siguiente direccion: Casa #: %d, Barrio: %s, Ciudad:
%s",e[i].direccion.numCasa,e[i].direccion.barrio,e[i].direccion.ciudad);
printf("\nEdad: %d, Sexo: %c\n",e[i].edad, e[i].sexo);
}
}

printf("\nEmpleados que viven en el barrio Subtiava\n");


printf("--------------------------------------------\n");

for(i = 0; i < N; i++)


{
if(strcmp("Subtiava",e[i].direccion.barrio) == 0)
{
printf("El trabajador %s, ",e[i].nombre); printf("que reside en la siguiente direccion: Casa #:
%d, Barrio: %s, Ciudad:
%s",e[i].direccion.numCasa,e[i].direccion.barrio,e[i].direccion.ciudad);
printf("\nEdad: %d, Sexo: %c\n",e[i].edad, e[i].sexo);
}

printf("\nEmpleados que viven en el barrio Subtiava y son menores de 35 años\n");


printf("---------------------------------------------------------------------\n");
for(i = 0; i < N; i++)
{
if(strcmp("Subtiava",e[i].direccion.barrio) == 0 && e[i].edad < 35)
{
printf("El trabajador %s, ",e[i].nombre); printf("que
reside en la siguiente direccion: Casa #: %d, Barrio: %s, Ciudad:
%s",e[i].direccion.numCasa,e[i].direccion.barrio,e[i].direccion.ciudad);
printf("\nEdad: %d, Sexo: %c\n",e[i].edad, e[i].sexo);
}

M.Sc. Ana María Salgado Grillo Página 12


Universidad Nacional Autónoma de Nicaragua, León.
Facultad Ciencias y Tecnología. Departamento de Computación.
Laboratorio de Programación Estructurada
Guía #13: Declaración de tipos propios (Estructuras)

return 0;
}

Salida en pantalla:

M.Sc. Ana María Salgado Grillo Página 13


Universidad Nacional Autónoma de Nicaragua, León.
Facultad Ciencias y Tecnología. Departamento de Computación.
Laboratorio de Programación Estructurada
Guía #13: Declaración de tipos propios (Estructuras)

Ejercicios propuestos

1. Un importante banco, cuya casa central se encuentra ubicada en Managua, lleva la


información de sus clientes en un arreglo unidimensional. Este se encuentra ordenado en
función del número de cuenta. El banco almacena la siguiente información de cada cliente:
• Número de cuenta(entero largo).
• Nombre del cliente(cadena de caracteres).
• Domicilio(estructura).
o Calle y número(cadena de caracteres). o Código postal(cadena de caracteres). o
Colonia(cadena de caracteres). o Ciudad(cadena de caracteres).
o Teléfono(cadena de caracteres).
• Saldo(real).

Dato:
• CLI[N] (donde CLI es un arreglo unidimensional de tipo estructuras CLIENTE de N
elementos, 1<= N <= 100).

Escribe un programa en C que realice las siguientes operaciones:


a) Depósitos. Al recibir el número de cuenta de un cliente y un monto determinado, debe
actualizar el saldo.

M.Sc. Ana María Salgado Grillo Página 14


Universidad Nacional Autónoma de Nicaragua, León.
Facultad Ciencias y Tecnología. Departamento de Computación.
Laboratorio de Programación Estructurada
Guía #13: Declaración de tipos propios (Estructuras)

b) Retiros. Al recibir el número de cuenta de un cliente y un monto determinado por medio


de un cheque o un retiro de un cajero, el programa debe actualizar el saldo. El cajero no
puede pagar el cheque o autorizar el retiro si el saldo es insuficiente.

Nota: El programa debe realizar y validar diferentes transacciones. El fin de datos se expresa al
ingresar el número 0.

2. En una escuela privada de la ciudad de México, almacenan la información de cada uno de


sus alumnos en un arreglo unidimensional de tipo estructura. Se almacena la siguiente
información de cada alumno:

• Matrícula del alumno(entero).


• Nombre y apellido(cadena de caracteres).
• Domicilio(estructura).
o Calle y número(cadena de caracteres). o Código postal(entero). o Colonia(cadena
de caracteres). o Ciudad(cadena de caracteres).
o Teléfono(cadena de caracteres).
• Nivel de estudios(estructura).
o Nivel(cadena de caracteres).
o Grado(entero). o Salón(cadena de caracteres).
o Calificaciones(arreglo unidimensional de estructuras).
 Materia(cadena de caracteres).
 Promedio(real).

Dato:
• ESCUELA[N] (donde ESCUELA es un arreglo unidimensional de tipo estructura Alumno, 1
<=N <=1000).
M.Sc. Ana María Salgado Grillo Página 15
Universidad Nacional Autónoma de Nicaragua, León.
Facultad Ciencias y Tecnología. Departamento de Computación.
Laboratorio de Programación Estructurada
Guía #13: Declaración de tipos propios (Estructuras)

Nota: Cada alumno tiene 7 materias en sus cursos.

Escribe un programa en C que realice lo siguiente:


a) Al recibir como dato la matrícula de un alumno, calcule e imprima el promedio general
del mismo.
b) Al recibir como datos el nivel de estudios(primaria, secundaria o preparatoria), el grado y
la sección, liste la matrícula de todos los alumnos, el nombre y su promedio.
c) Al recibir como datos el nivel de estudios(primaria, secundaria o preparatoria), el grado y
la sección, obtenga el alumno que tiene el mayor promedio. Debe escribir la matricula, su
nombre y el promedio correspondiente.

M.Sc. Ana María Salgado Grillo Página 16

También podría gustarte