Este documento trata sobre estructuras anidadas. Explica qué son las estructuras anidadas y cómo se pueden usar estructuras dentro de otras estructuras, como estructuras dentro de estructuras o bucles dentro de bucles. También incluye ejemplos de código que ilustran el uso de estructuras anidadas como árboles binarios y registros de alumnos.
1. UNIVERSIDAD ANDINA
“NÉSTOR CÁCERES VELÁSQUEZ”
FACULTAD DE INGENIERÍA Y CIENCIAS
PURAS
CAP INGENIERÍA CIVIL
TEMA : Estructuras anidadas
Presentado Por :
Apaza Coaquira Edward Jhonatan
Choque Istalla Pablo Roberto
Galarza Gonzales Anthony Jhosep
Tipula Yanapa Carlos Gabriel
Calcina Aza Joel
2. Estructura
program circulo
Real :: r, area
write (*,*) 'Escribe el radio r:'
read (*,*) r
area = 3.14159*r*r
write (*,*) 'Area = ', area
stop
end
Este programa lee un
número real r y muestra
el área del círculo con
radio r.
3. UNIONES
ES SIMILAR A LA DE "ESTRUCTURA", LA
DIFERENCIA ENTRE LAS DOS ES QUE EN UNA
ESTRUCTURA, LOS MIEMBROS OCUPAN
DIFERENTES ÁREAS DE LA MEMORIA, PERO
EN UNA UNIÓN, LOS MIEMBROS OCUPAN LA
MISMA ÁREA DE MEMORIA.
4. Uniones
Una unión es una estructura en la que se comparte una región de memoria para
almacenar datos de tipos distintos.
El tamaño de la unión es igual al del tipo de datos más grande.
union prueba{
int a;
float b;
char c;
};
main(){
prueba x;
x.a = 5;
printf("a= %d, b= %f, c= %cn",x.a,x.b,x.c);
x.b = 5.0;
printf("a= %d, b= %f, c= %cn",x.a,x.b,x.c);
x.c = '5';
printf("a= %d, b= %f, c= %cn",x.a,x.b,x.c);
getch();
}
b
prueba
c
a
a= 5, b= 0.000000, c= ♣
a= 1084227584, b=
5.000000, c=
a= 1084227637, b=
5.000025, c= 5
5. Estructuras y Uniones
En la creación de soluciones para algunos problemas surge la
necesidad de agrupar datos de diferente tipo o de manejar datos
que serían muy difícil de describir en los tipos de datos primitivos,
esta es la situación en la que debemos aprovecharnos de las
características que hacen al lenguaje C especial, o sea el uso de
estructuras, uniones y punteros .
Programación en C/Estructuras y Uniones
6. Una estructura puede estar dentro de otra estructura
a esto se le conoce como anidamiento o estructuras
anidadas. Ya que se trabajan con datos en
estructuras si definimos un tipo de dato en una
estructura y necesitamos definir ese dato dentro de
otra estructura solamente se llama el dato de la
estructura anterior.
Estructuras Anidadas
7.
8. Estructuras Anidados
if (x > 0) then
if (x >= y) then
write(*,*) 'x es positivo y x >= y'
else
write(*,*) 'x es positivo pero, x < y'
endif
elseif (x < 0) then
write(*,*) 'x es negativo'
else
write(*,*) 'x es cero'
endif
9. Estructuras anidadas
Las estructuras pueden contener a
otras estructuras como
componentes.
Una estructura que tiene
componentes de tipo estructura se
llama estructura anidada.
10. Ejemplo
Ejemplo de estructuras anidadas
struct fecha{
int dia,mes,anyo;
};
struct persona{
char nombre[20];
char apellido[20];
fecha nacimiento;
int edad;
int sexo;
char CURP[19];
char telefono[20];
};
nombre apellido nacimiento edad sexo CURP telefono
dia mes año
11. Desplegar una fecha
void despliegaFecha(fecha f){
printf("%d de ",f.dia);
switch(f.mes){
case 1:printf("ene");break;
case 2:printf("feb");break;
case 3:printf("mar");break;
case 4:printf("abr");break;
case 5:printf("may");break;
case 6:printf("jun");break;
case 7:printf("jul");break;
case 8:printf("ago");break;
case 9:printf("sep");break;
case 10:printf("oct");break;
case 11:printf("nov");break;
case 12:printf("dic");break;
}
printf(" de %dn",f.anyo);
}
12. Acceso a estructuras
anidadas
Se puede acceder a los campos de una estructura
anidada mediante el operador “.”. Por ejemplo:
persona per,*per2;
per.nacimiento.dia = 5;
per.nacimiento.mes = 7;
per.nacimiento.anyo = 1998;
per2->nacimiento.dia = 1;
per2->nacimiento.mes = 8;
per2->nacimiento.anyo = 2005;
Note que el campo anidado se accede mediante el operador “.” y el no anidado
mediante “->”.
13. dia mes año
calle colonia ciudad estado pais numero
nombreapellidos
direccionDatos personales
nombre apellidos calle colonia ciudad estado pais num cp
fecha
direccionStruct
nombreStruct
Gráfico de las estructuras
14. depto trabajo
posicion
empleado
dirnom
nombre apellidos calle colonia ciudad estado pais num cp
nombredireccion
depto trabajo
trabajo salario numDepto fechaIngreso
dia mes año
estudiante
direccionDatos personales
nombre apellidos calle colonia ciudad estado pais num cp
nombredireccion carrera promedio creditos
15. Ejemplos
Despliega nombre y teléfono de los pacientes con la máxima gravedad.
for(i = 0;i<50;i++)
if(pas[i].condicion==5)
printf(“Nombre: %s, telefono: %sn”,
pas[i].nombre,pas[i].telefono);
Calcula porcentaje de pacientes hombres y mujeres
suma = 0;sumaF = 0;
for(i = 0;i<50;i++)
if(pas[i].sexo==‘H’)
sumaH++;
else
sumaF++;
printf(“% de Hombres= %.2fn”,sumaH/50*100);
printf(“% de Mujeres= %.2fn”,sumaF/50*100);
16. Estructuras anidadas
Nada impide que los miembros de una estructura
sean a su vez tipos de datos estructurados, es
decir:
Otras estructuras
Arreglos
Estas estructuras se denominan anidadas.
Incuso pueden ser estructuras recursivas.
17. Ejemplo
struct fecha{
int dia,mes,anyo;
};
struct persona{
char nombre[20],apellido[20];
fecha nacimiento;
char sexo;
union{
struct {
float peso,estatura;
}varon;
struct {
int medidas[3];
}hembra;
};
};
31. Según lo expresado, las estructuras de decisión simple y doble permiten seleccionar entre dos
alternativas posibles. Sin embargo, la instrucción SI-ENTONCES puede ser utilizada también en casos
de selección de más de dos alternativas. Esto es posible anidando estas instrucciones. Es decir, una
estructura SI-ENTONCES puede contener a otra, y esta a su vez a otra. La representación en
pseudocódigo es la siguiente:
SI <condición_1> ENTONCES
< sentencias_1 >
SINO
SI <condición_2> ENTONCES
< sentencias_2 >
SINO
SI <condición_3> ENTONCES
< sentencias_3 >
SINO
.
.
FIN-SI
FIN-SI
FIN-SI
Estructura de selección. Sentencias anidadas.
Como se puede observar, el anidamiento de
instrucciones alternativas permite ir descartando
valores hasta llegar al bloque de instrucciones
que se debe ejecutar.
En las instrucciones SI anidadas, las
instrucciones ENTONCES y FIN-SI se aplican
automáticamente a la instrucción SI anterior más
próxima.
A fin de que las estructuras anidadas sean más
fáciles de leer, es práctica habitual aplicar sangría
al cuerpo de cada una.
32. Ejemplo: Un sensor toma (lee) la temperatura ambiente y de
acuerdo al rango en que se encuentre, debe emitir un mensaje.
La escala es la siguiente:
Mayor que 100 “Temperatura muy alta – Mal
funcionamiento”
Entre 91 y 100 “Rango normal”
Entre 51 y 90 “Bajo el rango normal”
Menor que 50 “Muy frío – Apague el equipo”
ALGORITMO Sensor
INICIO
LEER temperatura
SI temperatura > 100 ENTONCES
ESCRIBIR “Temperatura muy alta – Mal funcionamiento”
SINO
SI temperatura > 90 ENTONCES
ESCRIBIR “Rango normal”
SINO
SI temperatura > 50 ENTONCES
ESCRIBIR “Bajo el rango normal”
SINO
ESCRIBIR “Muy frío – Apague equipo”
FIN-SI
FIN-SI
FIN-SI
FIN
Estructura de selección. Sentencias anidadas.
33. La sentencia IR-A (go to)
La sentencia GO TO pertenece a un grupo de sentencias conocidas como sentencias de salto
(jump). La característica de este grupo es hacer que el flujo de control salte a otra parte del
programa. Otras sentencias de este grupo son interrumpir o romper (BREAK), continuar
(CONTINUE), volver (RETURN), lanzar (THROW). Las dos primeras se utilizan generalmente con
sentencias de alternativa múltiple. Para retornar de la ejecución de funciones o métodos se usa
RETURN.
La sentencia GO TO se utilizaba mucho en los primeros lenguajes de programación porque era
la única manera de saltar de una instrucción del programa a otra.
Esta instrucción consta de una sentencia IR_A y una sentencia asociada con una etiqueta.
Cuando se ejecuta esta instrucción, se transfiere el control del programa a la etiqueta asociada.
Estructura de selección. Sentencias anidadas. Casos
Particulares
34. La sentencia IR-A (go to)
La representación en pseudocódigo es la siguiente:
INICIO
.
.
IR_A etiqueta_1
.
.
FIN
etiqueta_1:
. // El flujo salta aquí
El efecto de esta instrucción es transferir sin condiciones el control del programa a la etiqueta
especificada. Es una de las operaciones más primitivas para traspasar el control de una parte del
programa a otra. Sin embargo, su uso produce código inconsistente, incompleto o complicado de
mantener. Justamente por ello en los años 60 y 70, cuando surgió la programación estructurada, la
comunidad informática se expresó a favor de otras sentencias de control (IF ó bucles FOR y DO-
WHILE) en lugar del GOTO.
Estructura de selección. Sentencias anidadas.
Casos Particulares
35. La sentencia IR-A (go to)
Tal creencia está tan arraigada que el GOTO es
muy criticado y desaconsejado por todos los que
se dedican a la enseñanza de la programación.
Si bien la instrucción GOTO puede parecer útil y
muy flexible, es precisamente en esa flexibilidad
donde radica su peligro y los motivos de su
obsolescencia.
6.5 Estructura de selección. Sentencias anidadas.
Casos Particulares
36. En un algoritmo puede existir y es muy frecuente que
existan 2 o más bucles. Dependiendo de la forma en
que estén dispuestos, estos pueden ser anidados o
independientes.
Decimos que los bucles están anidados cuando están
dispuestos de forma tal que unos son interiores a
otros; y los bucles serán independientes cuando son
extremos unos con otros.
Así como se podían anidar estructuras de selección,
también es posible insertar un bucle dentro de otro.
Las reglas para construir estructuras repetitivas
anidadas son iguales en ambos casos: la estructura
interna debe estar incluida totalmente dentro de la
externa y no puede existir solapamiento.
Diseño de bucles. Bucles Anidados
37. Diseño de bucles. Bucles Anidados
INDEPENDIENTES ANIDADAS
PERMITIDAS Y PROHIBIDAS
NIDOS CRUZADOS
SALIR DEL BUCLE ENTRAR AL BUCLE