SlideShare una empresa de Scribd logo
1 de 52
Descargar para leer sin conexión
UNIVERSIDAD DE PANAMA
Facultad de Informática. Electrónica y
Comunicaciones
Curso de Programación 2
Tema 1
Estructuras
Profesor Saulo Aizprúa
I SEMESTRE 2016
Tipos de datos estructurados
• Tipo de datos que no son simples
• Simples
– Números
– Letras
– Verdadero/falso
• Estructurados o compuestos
– Combinaciones de tipos simples
– Los arreglos son tipo de datos estructurados
Tipos de datos definidos por el
usuario
• Al momento de hacer un programa, el
usuario puede definir sus propios tipos de
datos
– Mayor claridad.
– Aumenta el significado semántico del código.
– Simplificar declaración de variables.
Tipos de datos definidos por el
usuario
• Typedef
– Define un nuevo nombre para un tipo de dato.
– El nombre original sigue siendo válido.
typedef <tipo> <nuevo nombre>;
typedef int positivo;
Tipos de datos definidos por el
usuario
typedef int positivo;
typedef int negativo;
int main(){
positivo a,b;
negativo c,d;
a=1;
b=2;
c=-a;
d=-b;
printf("%d %d %d %dn",a,b,c,d);
}
Tipos de datos definidos por el
usuario
• Otra forma de definir tipos de datos es componer
varios datos simples en uno solo.
• Esto se denonima estructura.
• Una estructura es un tipo de dato que contiene un
conjunto de valores relacionados entre si de forma
lógica.
• Estos valores pueden ser de distinto tipo.
• Generalmente, se refiere a un concepto más
complejo que un número o una letra.
Estructuras
• Una estructura puede verse como una colección
devariables que se referencia bajo un nombre en
común.
• Cada una de estas variables se denominan
“miembros” de la estructura. Otras
denominaciones son:
– Campo
– elemento
– atributo
Declaración de estructuras
• La definicion de una estructura se realiza
fuera de cualquier función, generalmente en
la parte superior del archivo.
• Para definir una estructura requerimos:
– Un nombre
– Una lista de miembros
• Nombre
• Tipo
Declaración de estructuras
struct mi_estructura{
int miembro1;
char miembro2;
double miembro3;
…
};
Reservada Nombre único
Lista de
miembrosDeclaración
Termino de la declaración
Declaración de estructuras
• La declaración de una estructura no crea
variables.
• Solo se define el nombre y sus miembros.
• Debe estar definida para poder ser utilizada
(posición en el código).
Uso de estructuras
• Una vez que se ha declarado la estructura
puede ser utilizada.
• Para utilizarla hay que definir variables del
tipo “estructura”.
• Para definir estas variables se utiliza la
siguiente sintaxis:
struct nombre_estructura nombre_variable;
Uso de estructuras
struct mi_estructura{
int miembro1;
char miembro2;
double miembro3;
};
…
struct mi_estructura1;
struct mi_estructura2;
Dos variables del
tipo mi_estructura
Operaciones con estructuras
• Una vez definidas las variables, es necesario
realizar operaciones con ellas.
• Lo realmente útil no es la estructura, sino sus
miembros.
• Para acceder a los valores de los miembros de una
variable de tipo estructura se utiliza el operados
unario “.”.
• Cada miembro es una variable común y corriente.
Operaciones con estructuras
struct mi_estructura{
int miembro1;
char miembro2;
double miembro3;
};
…
struct mi_estructura1;
mi_estructura1.miembro1=1024;
mi_estructura1.miembro2=‘x’;
mi_estructura1.miembro3=12.8;
Operaciones con estructuras
struct mi_estructura1;
Printf(“m1=%d, m2=%d, m3=%dn”,
mi_estructura1.miembro1=1024,
mi_estructura1.miembro2=‘x’,
mi_estructura1.miembro3=12.8);
Ejemplo
• A la antigua
char nombreAlumno [64];
int edadAlumno;
double promedioAlumno;
• Con estructuras
struct alumno{
char nombre[64];
int edad;
double promedio;
};
Operaciones con estructuras
• Operador de asignacion
– Copia una variable de estructura a otra
(miembro por miembro)
• Operadores de comparación
– No tiene sentido a nivel de estructuras, solo a
nivel de miembros.
Estructuras y funciones
• Para pasar miembros de una estructura a
una función, se utiliza el mismo esquema de
las variables comunes.
void mostrarNota(int nota);
int validarNota(int *nota);
…
Struct alumno a1;
if(validarNota(&a1.nota))
mostrarNota(a1.nota);
Estructuras y funciones
• Para pasar estructuras completas como
parámetros se debe especificar el tipo
completo de la estructura en la definición
del parámetro.
Estructuras y funciones
void mostrarAlumno(struct alumno a){
printf("rol: %d-%c, edad: %dn",
a.rol, a.dig, a.edad);
}
void inicializarAlumno(struct alumno *a){
(*a).rol=0;
(*a).dig='0';
(*a).edad=0;
}
…
struct alumno a1;
inicializarAlumno(&a1);
mostrarAlumno(a1);
Estructuras y funciones
• La notacion ‘(*).’ Se puede resumir con ‘->’.
• Agrega claridad al código.
• Se denomina operador “flecha”.
void inicializarAlumno(struct alumno *a){
a->rol=0;
a->dig='0';
a->edad=0;
}
Estructuras y funciones
• Para devolver estructuras como resultado de
una función, se utiliza el mismo esquema de
siempre.
• El resultado se copia a la variable que lo
recibe.
Estructuras y funciones
struct vector{
double x;
double y;
};
struct vector sumar(struct vector v1, struct vector v2){
struct vector vres;
vres.x = v1.x + v2.x;
vres.y = v1.y + v2.y;
return vres;
}
Estructuras y funciones
int main(){
struct vector va;
struct vector vb;
struct vector vc;
va.x=0.5;
va.y=1;
vb.x=1;
vb.y=0.5;
vc = sumar(va,vb);
printf("res: %.2f,%.2fn",vc.x,vc.y);
}
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.
Estructuras anidadas
struct punto{
double x;
double y;
};
struct circunferencia{
struct punto centro;
double radio;
};
Estructuras anidadas
double perimetro(struct circunferencia c){
return 2*PI*c.radio;
}
double area(struct circunferencia c){
return PI*c.radio*c.radio;
}
Estructuras anidadas
double distancia(struct punto p1, struct punto p2){
return sqrt( pow(p2.x+p1.x,2) + pow(p2.y+p1.y,2));
}
int intersectan(struct circunferencia c1,struct
circunferencia c2){
double dist = distancia(c1.centro, c2.centro);
printf("%.2f vs %.2fn",dist,c1.radio+c2.radio);
return (dist < c1.radio+c2.radio);
}
Estructuras anidadas
int main(){
struct circunferencia ca;
struct circunferencia cb;
ca.centro.x=0;
ca.centro.y=0;
ca.radio = 1;
cb.centro.x=1.9;
cb.centro.y=0;
cb.radio = 1;
printf("p:%.2f, a:%.2f,
int?%sn",perimetro(ca),area(ca),
(intersectan(ca,cb)?"Si":"No"));
}
Estructuras anidadas
Arbol binario:
Estructura formada
Con nodos de los
cuales cuelgan cero,
uno o dos hijos, lo
Cuales son a su vez
arboles binarios
Estructuras anidadas
Valor nulo  0
Puntero nulo  NULL
Estructuras anidadas
struct arbol_binario{
int valor;
struct arbol_binario hijo_derecho;
struct arbol_binario hijo_izquierdo;
};
struct arbol_binario{
int valor;
struct arbol_binario* hijo_derecho;
struct arbol_binario*
hijo_izquierdo;
Estructuras anidadas
void mostrar(struct arbol_binario arbol){
printf("%d ",arbol.valor);
if(arbol.hijo_derecho!=0)
mostrar(*arbol.hijo_derecho);
if(arbol.hijo_izquierdo!=0)
mostrar(*arbol.hijo_izquierdo);
}
Estructuras anidadas
int main(){
struct arbol_binario arbol;
struct arbol_binario hoja1;
struct arbol_binario hoja2;
hoja1.valor=1;
hoja1.hijo_derecho=0;
hoja1.hijo_izquierdo=0;
hoja2.valor=2;
hoja2.hijo_derecho=0;
hoja2.hijo_izquierdo=0;
arbol.valor=0;
arbol.hijo_derecho=&hoja1;
arbol.hijo_izquierdo=&hoja2;
mostrar(arbol);
}
int main(){
struct arbol_binario arbol;
struct arbol_binario hoja1;
struct arbol_binario hoja2;
hoja1.valor=1;
hoja1.hijo_derecho=0;
hoja1.hijo_izquierdo=0;
hoja2.valor=2;
hoja2.hijo_derecho=0;
hoja2.hijo_izquierdo=&arbol;
arbol.valor=0;
arbol.hijo_derecho=&hoja1;
arbol.hijo_izquierdo=&hoja2;
mostrar(arbol);
}
Estructuras anidadas
struct alumno{
int rol;
char dig;
double notas[3];
};
double promedio(struct alumno a){
return (a.notas[0] + a.notas[1] +
a.notas[2])/3.0;
}
Estructuras anidadas
int main(){
struct alumno a;
a.rol=1;
a.dig='1';
a.notas[0]=55;
a.notas[1]=50;
a.notas[2]=61;
printf("Prom: %.2fn",promedio(a));
}
Arreglos de estructuras
• Se puede crear arreglos cuyos elementos
sean variables de estructura.
• Se definen de manera similar al caso
común.
tipo arreglo[N]
struct estructura arreglo[N];
Arreglos de estructuras
struct alumno{
int rol;
int promedio;
};
int main(){
int i, suma=0;
struct alumno alumnos[N];
double promedio;
for(i=0;i<N;i++){
printf("Ingrese rol y nota: ");
scanf("%d
%d",&alumnos[i].rol,&alumnos[i].promedio);
}
for(i=0;i<N;i++)
suma+=alumnos[i].promedio;
promedio = (1.0*suma)/N;
printf("Promedio del curso: %.1f",promedio);
}
Arreglos de estructuras
struct alumno{
int rol;
char dig;
double notas[3];
};
int main(){
struct alumno alumnos[N];
int i=0;
for(i=0;i<N;i++){
alumnos[i].rol=i;
alumnos[i].dig='1'+i;
alumnos[i].notas[0]=40+5*i;
alumnos[i].notas[1]=alumnos[i].notas[0]*0.5;
alumnos[i].notas[2]=alumnos[i].notas[0]*1.6;
}
for(i=0;i<N;i++){
printf("%d)Prom: %.2fn",i+1,promedio(alumnos[i]));
}
return 1;
}
Arreglos de estructuras
int main(){
struct alumno alumnos[N];
int i=0;
for(i=0;i<N;i++){
printf("Ingrese rol:");
scanf("%d-%c",
&alumnos[i].rol, &alumnos[i].dig);
printf("Ingrese notas:");
scanf("%lf %lf %lf",
&alumnos[i].notas[0],
&alumnos[i].notas[1],
&alumnos[i].notas[2]);
}
for(i=0;i<N;i++){
printf("%d-%c: %.2fn",
alumnos[i].rol,
alumnos[i].dig,
promedio(alumnos[i]));
}
return 1;
}
Búsqueda de estructuras
• La búsqueda de estructuras es similar a la
búsqueda de datos simples.
• Existen dos detalles importantes:
– Definir el concepto de igualdad entre
estructuras
• No se puede usar “= =“
• Puede ser a través de un campo
• Puede ser a través de varios campos
– Definir valor “no encontrado”
Búsqueda de estructuras
struct album{
char grupo[32];
char titulo[32];
int precio;
};
Ambos campos
definen la igualdad
Búsqueda de estructuras
int main(){
struct album coleccion[N];
char g[32],t[32];
llenar(coleccion);
printf("Ingrese grupo: ");gets(g);
printf("Ingrese titulo: ");gets(t);
/*Buscar album*/
if(/*verificar si se encontro*/)
printf("Precio: %dn", /*Mostrar precio*/);
else
printf("No esta en stockn");
}
Búsqueda de estructuras
int buscar1(char grupo[], char titulo[], struct album coleccion[]){
int i;
for(i=0;i<N;i++){
if(strcmp(grupo, coleccion[i].grupo)==0 &&
strcmp(titulo, coleccion[i].titulo)==0)
return i;
}
return -1;
}
…
int pos;
pos = buscar1(g,t, coleccion);
if(pos>=0)
printf("1)Precio: %dn", coleccion[pos].precio);
else
printf("1)No esta en stockn");
Se devuelve la posicion donde se
encontró el elemento
Posición inválida
Búsqueda de estructuras
struct album buscar2(char grupo[], char titulo[], struct album
coleccion[]){
struct album a;
int i;
a.precio=-1;
for(i=0;i<N;i++){
if(strcmp(grupo, coleccion[i].grupo)==0 &&
strcmp(titulo, coleccion[i].titulo)==0)
a =coleccion[i];
}
return a;
}
…
struct album a;
a = buscar2(g,t, coleccion);
if(a.precio>0)
printf("2)Precio: %dn", a.precio);
else
printf("2)No esta en stockn");
Se devuelve la estructura
encontrada.
Devuelve precio inválido
Búsqueda de estructuras
void buscar3(struct album *a, struct album coleccion[]){
int i;
a->precio=-1;
for(i=0;i<N;i++){
if(strcmp(a->grupo, coleccion[i].grupo)==0 &&
strcmp(a->titulo, coleccion[i].titulo)==0)
a->precio = coleccion[i].precio;
}
}
…
struct album a;
strcpy(a.grupo,g);
strcpy(a.titulo,t);
buscar3(&a, coleccion);
if(a.precio>0)
printf("3)Precio: %dn", a.precio);
else
printf("3)No esta en stockn");
“Rellena” los datos que
faltan
“Llena” parcialmente la
estructura
Ordenamiento de estructuras
• Al igual que en las busquedas, el
procedimiento es similar.
• Solo falta definir la relación de orden
– Puede estar definida por un solo campo
– Puede estar defnida por varios campos
• Por lo general, se define un campo principal y otro
para el “desempate”.
Ordenamiento de estructuras
void bubblesort_up(struct album coleccion[]){
int i,j;
for(i=1;i<N;i++)
for(j=0;j<(N-i);j++)
if(coleccion[j].precio>coleccion[j+1].precio){
struct album aux = coleccion[j+1];
coleccion[j+1] = coleccion[j];
coleccion[j] = aux;
}
}
Ordenamiento de estructuras
struct cliente{
char apellido[32];
char nombre[32];
int gasto_mensual;
};
Ordenamiento de estructuras
void bubblesort_up(struct cliente cartera[]){
int i,j;
for(i=1;i<N;i++)
for(j=0;j<(N-i);j++)
if(cmp(cartera[j],cartera[j+1])>0){
struct cliente aux = cartera[j+1];
cartera[j+1] = cartera[j];
cartera[j] = aux;
}
}
•Menor que cero, primero menor que el segundo
•Igual a cero, primero igual al segundo
•Mayor que cero, primero mayor que el segundo
Ordenamiento de estructuras
int cmp(struct cliente c1, struct cliente c2){
return c1.gasto_mensual- c2.gasto_mensual);
}
int cmp(struct cliente c1, struct cliente c2){
int m = strcmp(c1.apellido, c2.apellido);
if(m!=0)
return m;
else{
m=strcmp(c1.nombre, c2.nombre);
if(m!=0)
return m;
else
return c1.gasto_mensual-c2.gasto_mensual;
}
}
Fin tema 1
Estructuras

Más contenido relacionado

La actualidad más candente

La actualidad más candente (19)

Elementos De Una Clase
Elementos De Una ClaseElementos De Una Clase
Elementos De Una Clase
 
Manual laboratorio de programación i
Manual laboratorio de programación iManual laboratorio de programación i
Manual laboratorio de programación i
 
Tipos de Datos y Expresiones
Tipos de Datos y ExpresionesTipos de Datos y Expresiones
Tipos de Datos y Expresiones
 
5.1 estructura de una clase.
5.1 estructura de una clase.5.1 estructura de una clase.
5.1 estructura de una clase.
 
Java y-xml
Java y-xmlJava y-xml
Java y-xml
 
Constante y variable
Constante y variableConstante y variable
Constante y variable
 
Elementos de una clase
Elementos de una claseElementos de una clase
Elementos de una clase
 
Estructura c
Estructura c Estructura c
Estructura c
 
Conceptos basicos
Conceptos basicosConceptos basicos
Conceptos basicos
 
Guia de Algoritmos del profesor Victor Gavidia -UNEFM - CAES
Guia de Algoritmos del profesor Victor Gavidia -UNEFM - CAESGuia de Algoritmos del profesor Victor Gavidia -UNEFM - CAES
Guia de Algoritmos del profesor Victor Gavidia -UNEFM - CAES
 
Tema 1 Datos y tipos de datos
Tema 1    Datos y tipos de datosTema 1    Datos y tipos de datos
Tema 1 Datos y tipos de datos
 
Unidad 2
Unidad 2Unidad 2
Unidad 2
 
Diseño de la logica
Diseño de la logicaDiseño de la logica
Diseño de la logica
 
Tipo de operadores
Tipo de operadoresTipo de operadores
Tipo de operadores
 
Ap n° 7 rios,m. fernanda
Ap n° 7 rios,m. fernandaAp n° 7 rios,m. fernanda
Ap n° 7 rios,m. fernanda
 
Estructuras
EstructurasEstructuras
Estructuras
 
Elementos de programas
Elementos de programasElementos de programas
Elementos de programas
 
Datos simples
Datos simples Datos simples
Datos simples
 
1.tipos de datos
1.tipos de datos1.tipos de datos
1.tipos de datos
 

Destacado

Modul65 cineclubismo
Modul65 cineclubismoModul65 cineclubismo
Modul65 cineclubismoCarla Marinho
 
8 tips för ökad konvertering i Multivärlden
8 tips för ökad konvertering i Multivärlden8 tips för ökad konvertering i Multivärlden
8 tips för ökad konvertering i MultivärldenMartin Sangell
 
PrEP Update from the International HIV Treatment, Prevention, and Adherence C...
PrEP Update from the International HIV Treatment, Prevention, and Adherence C...PrEP Update from the International HIV Treatment, Prevention, and Adherence C...
PrEP Update from the International HIV Treatment, Prevention, and Adherence C...Office of HIV Planning
 
Trasplante y donación de órganos: una esperanza de vida.
Trasplante y donación de órganos: una esperanza de vida.Trasplante y donación de órganos: una esperanza de vida.
Trasplante y donación de órganos: una esperanza de vida.Ariadna Barradas Rubio
 
Зимове птаство України (частина 2)
Зимове птаство України (частина 2)Зимове птаство України (частина 2)
Зимове птаство України (частина 2)Оціночки
 
Психологический феномен сериала
Психологический феномен сериалаПсихологический феномен сериала
Психологический феномен сериалаNataliya Shylo
 
On Sigmund Freud's 'Outline of Psychoanalysis'
On Sigmund Freud's 'Outline of Psychoanalysis'On Sigmund Freud's 'Outline of Psychoanalysis'
On Sigmund Freud's 'Outline of Psychoanalysis'Shiva Kumar Srinivasan
 
Ci3T: Behavior Specific Praise
Ci3T: Behavior Specific Praise Ci3T: Behavior Specific Praise
Ci3T: Behavior Specific Praise Cathryn Monroe
 
Plantas Técnicas de Piso, Teto e Demolir-Construir
Plantas Técnicas de Piso, Teto e Demolir-ConstruirPlantas Técnicas de Piso, Teto e Demolir-Construir
Plantas Técnicas de Piso, Teto e Demolir-Construirdanilosaccomori
 

Destacado (18)

Modul65 cineclubismo
Modul65 cineclubismoModul65 cineclubismo
Modul65 cineclubismo
 
таємниця різдва
таємниця різдватаємниця різдва
таємниця різдва
 
Digital photo editing
Digital photo editingDigital photo editing
Digital photo editing
 
Review of Kabbalah and Criticism
Review of Kabbalah and CriticismReview of Kabbalah and Criticism
Review of Kabbalah and Criticism
 
Chapter 09 GAME 100
Chapter 09 GAME 100Chapter 09 GAME 100
Chapter 09 GAME 100
 
9. tmch presentation
9. tmch presentation9. tmch presentation
9. tmch presentation
 
8 tips för ökad konvertering i Multivärlden
8 tips för ökad konvertering i Multivärlden8 tips för ökad konvertering i Multivärlden
8 tips för ökad konvertering i Multivärlden
 
PrEP Update from the International HIV Treatment, Prevention, and Adherence C...
PrEP Update from the International HIV Treatment, Prevention, and Adherence C...PrEP Update from the International HIV Treatment, Prevention, and Adherence C...
PrEP Update from the International HIV Treatment, Prevention, and Adherence C...
 
Trasplante y donación de órganos: una esperanza de vida.
Trasplante y donación de órganos: una esperanza de vida.Trasplante y donación de órganos: una esperanza de vida.
Trasplante y donación de órganos: una esperanza de vida.
 
Зимове птаство України (частина 2)
Зимове птаство України (частина 2)Зимове птаство України (частина 2)
Зимове птаство України (частина 2)
 
Mobile governance
Mobile governanceMobile governance
Mobile governance
 
Tugas 1
Tugas 1Tugas 1
Tugas 1
 
Психологический феномен сериала
Психологический феномен сериалаПсихологический феномен сериала
Психологический феномен сериала
 
On Sigmund Freud's 'Outline of Psychoanalysis'
On Sigmund Freud's 'Outline of Psychoanalysis'On Sigmund Freud's 'Outline of Psychoanalysis'
On Sigmund Freud's 'Outline of Psychoanalysis'
 
Ci3T: Behavior Specific Praise
Ci3T: Behavior Specific Praise Ci3T: Behavior Specific Praise
Ci3T: Behavior Specific Praise
 
Plantas Técnicas de Piso, Teto e Demolir-Construir
Plantas Técnicas de Piso, Teto e Demolir-ConstruirPlantas Técnicas de Piso, Teto e Demolir-Construir
Plantas Técnicas de Piso, Teto e Demolir-Construir
 
Stadsgids izegem 2014
Stadsgids izegem 2014Stadsgids izegem 2014
Stadsgids izegem 2014
 
Wegwijs in koksijde_2015-2016
Wegwijs in koksijde_2015-2016Wegwijs in koksijde_2015-2016
Wegwijs in koksijde_2015-2016
 

Similar a Estructuras de datos en C

Unidad%2 bxii estructuras
Unidad%2 bxii estructurasUnidad%2 bxii estructuras
Unidad%2 bxii estructurasjeoselyn
 
Clase 10_ programacion
Clase 10_ programacionClase 10_ programacion
Clase 10_ programaciondiego MC
 
ESTRUCTURAS Y UNIONES EN C++
ESTRUCTURAS Y UNIONES EN C++ESTRUCTURAS Y UNIONES EN C++
ESTRUCTURAS Y UNIONES EN C++die_dex
 
Programación II_modulo1lolololololo9oo.pptx
Programación II_modulo1lolololololo9oo.pptxProgramación II_modulo1lolololololo9oo.pptx
Programación II_modulo1lolololololo9oo.pptxhassanbadredun
 
Estructuras de datos en Introducción a la Programación
Estructuras de datos en Introducción a la ProgramaciónEstructuras de datos en Introducción a la Programación
Estructuras de datos en Introducción a la ProgramaciónFacultad de Ciencias y Sistemas
 
GuíA De PráCtica 2
GuíA De PráCtica 2GuíA De PráCtica 2
GuíA De PráCtica 2louis
 
3. Uso De Variables De Tipo Valor
3.  Uso De Variables De Tipo Valor3.  Uso De Variables De Tipo Valor
3. Uso De Variables De Tipo ValorEsteban Soraire
 
conceptos basicos lenguajes de programacion.pdf
conceptos basicos lenguajes de programacion.pdfconceptos basicos lenguajes de programacion.pdf
conceptos basicos lenguajes de programacion.pdfcarlosquiza2
 
Estructura de Datos
Estructura de DatosEstructura de Datos
Estructura de Datosluna_72
 
Lenguajec 1
Lenguajec 1Lenguajec 1
Lenguajec 1joeshego
 
1.Tipos de Datos.ppt
1.Tipos de Datos.ppt1.Tipos de Datos.ppt
1.Tipos de Datos.pptmarcos793515
 
1.Tipos de Datos.ppt
1.Tipos de Datos.ppt1.Tipos de Datos.ppt
1.Tipos de Datos.pptSANTOS400018
 
Tipos de Datos y su tipologia en contexto.ppt
Tipos de Datos y su tipologia en contexto.pptTipos de Datos y su tipologia en contexto.ppt
Tipos de Datos y su tipologia en contexto.pptricardosusa5
 
Lenguajec diapositivas
Lenguajec diapositivasLenguajec diapositivas
Lenguajec diapositivastacubomx
 

Similar a Estructuras de datos en C (20)

Unidad%2 bxii estructuras
Unidad%2 bxii estructurasUnidad%2 bxii estructuras
Unidad%2 bxii estructuras
 
Clase 10_ programacion
Clase 10_ programacionClase 10_ programacion
Clase 10_ programacion
 
ESTRUCTURAS Y UNIONES EN C++
ESTRUCTURAS Y UNIONES EN C++ESTRUCTURAS Y UNIONES EN C++
ESTRUCTURAS Y UNIONES EN C++
 
Programación II_modulo1lolololololo9oo.pptx
Programación II_modulo1lolololololo9oo.pptxProgramación II_modulo1lolololololo9oo.pptx
Programación II_modulo1lolololololo9oo.pptx
 
Estructuras de datos en Introducción a la Programación
Estructuras de datos en Introducción a la ProgramaciónEstructuras de datos en Introducción a la Programación
Estructuras de datos en Introducción a la Programación
 
2 punteros y lenguaje c
2 punteros y lenguaje c2 punteros y lenguaje c
2 punteros y lenguaje c
 
GuíA De PráCtica 2
GuíA De PráCtica 2GuíA De PráCtica 2
GuíA De PráCtica 2
 
Apuntadores y listas
Apuntadores y listasApuntadores y listas
Apuntadores y listas
 
3. Uso De Variables De Tipo Valor
3.  Uso De Variables De Tipo Valor3.  Uso De Variables De Tipo Valor
3. Uso De Variables De Tipo Valor
 
Datos y algoritmos
Datos y algoritmosDatos y algoritmos
Datos y algoritmos
 
conceptos basicos lenguajes de programacion.pdf
conceptos basicos lenguajes de programacion.pdfconceptos basicos lenguajes de programacion.pdf
conceptos basicos lenguajes de programacion.pdf
 
Estructura de Datos
Estructura de DatosEstructura de Datos
Estructura de Datos
 
Lenguajec 1
Lenguajec 1Lenguajec 1
Lenguajec 1
 
1.Tipos de Datos.ppt
1.Tipos de Datos.ppt1.Tipos de Datos.ppt
1.Tipos de Datos.ppt
 
1.Tipos de Datos.ppt
1.Tipos de Datos.ppt1.Tipos de Datos.ppt
1.Tipos de Datos.ppt
 
1.Tipos de Datos.ppt
1.Tipos de Datos.ppt1.Tipos de Datos.ppt
1.Tipos de Datos.ppt
 
Tipos de Datos y su tipologia en contexto.ppt
Tipos de Datos y su tipologia en contexto.pptTipos de Datos y su tipologia en contexto.ppt
Tipos de Datos y su tipologia en contexto.ppt
 
Lenguajec diapositivas
Lenguajec diapositivasLenguajec diapositivas
Lenguajec diapositivas
 
Tipos de Datos Abstractos (TDA)
Tipos de Datos Abstractos (TDA)Tipos de Datos Abstractos (TDA)
Tipos de Datos Abstractos (TDA)
 
Tipos De Datos
Tipos De DatosTipos De Datos
Tipos De Datos
 

Último

Identificación de componentes Hardware del PC
Identificación de componentes Hardware del PCIdentificación de componentes Hardware del PC
Identificación de componentes Hardware del PCCesarFernandez937857
 
Herramientas de Inteligencia Artificial.pdf
Herramientas de Inteligencia Artificial.pdfHerramientas de Inteligencia Artificial.pdf
Herramientas de Inteligencia Artificial.pdfMARIAPAULAMAHECHAMOR
 
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADODECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADOJosé Luis Palma
 
Historia y técnica del collage en el arte
Historia y técnica del collage en el arteHistoria y técnica del collage en el arte
Historia y técnica del collage en el arteRaquel Martín Contreras
 
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.pptDE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.pptELENA GALLARDO PAÚLS
 
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...JAVIER SOLIS NOYOLA
 
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptx
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptxEXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptx
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptxPryhaSalam
 
Registro Auxiliar - Primaria 2024 (1).pptx
Registro Auxiliar - Primaria  2024 (1).pptxRegistro Auxiliar - Primaria  2024 (1).pptx
Registro Auxiliar - Primaria 2024 (1).pptxFelicitasAsuncionDia
 
cortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahuacortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahuaDANNYISAACCARVAJALGA
 
EXPECTATIVAS vs PERSPECTIVA en la vida.
EXPECTATIVAS vs PERSPECTIVA  en la vida.EXPECTATIVAS vs PERSPECTIVA  en la vida.
EXPECTATIVAS vs PERSPECTIVA en la vida.DaluiMonasterio
 
La Función tecnológica del tutor.pptx
La  Función  tecnológica  del tutor.pptxLa  Función  tecnológica  del tutor.pptx
La Función tecnológica del tutor.pptxJunkotantik
 
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptxOLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptxjosetrinidadchavez
 
Planificacion Anual 4to Grado Educacion Primaria 2024 Ccesa007.pdf
Planificacion Anual 4to Grado Educacion Primaria   2024   Ccesa007.pdfPlanificacion Anual 4to Grado Educacion Primaria   2024   Ccesa007.pdf
Planificacion Anual 4to Grado Educacion Primaria 2024 Ccesa007.pdfDemetrio Ccesa Rayme
 
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptxTIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptxlclcarmen
 
30-de-abril-plebiscito-1902_240420_104511.pdf
30-de-abril-plebiscito-1902_240420_104511.pdf30-de-abril-plebiscito-1902_240420_104511.pdf
30-de-abril-plebiscito-1902_240420_104511.pdfgimenanahuel
 
Estrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónEstrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónLourdes Feria
 
Informatica Generalidades - Conceptos Básicos
Informatica Generalidades - Conceptos BásicosInformatica Generalidades - Conceptos Básicos
Informatica Generalidades - Conceptos BásicosCesarFernandez937857
 
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptxACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptxzulyvero07
 
Heinsohn Privacidad y Ciberseguridad para el sector educativo
Heinsohn Privacidad y Ciberseguridad para el sector educativoHeinsohn Privacidad y Ciberseguridad para el sector educativo
Heinsohn Privacidad y Ciberseguridad para el sector educativoFundación YOD YOD
 
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOSTEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOSjlorentemartos
 

Último (20)

Identificación de componentes Hardware del PC
Identificación de componentes Hardware del PCIdentificación de componentes Hardware del PC
Identificación de componentes Hardware del PC
 
Herramientas de Inteligencia Artificial.pdf
Herramientas de Inteligencia Artificial.pdfHerramientas de Inteligencia Artificial.pdf
Herramientas de Inteligencia Artificial.pdf
 
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADODECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
 
Historia y técnica del collage en el arte
Historia y técnica del collage en el arteHistoria y técnica del collage en el arte
Historia y técnica del collage en el arte
 
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.pptDE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
 
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
 
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptx
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptxEXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptx
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptx
 
Registro Auxiliar - Primaria 2024 (1).pptx
Registro Auxiliar - Primaria  2024 (1).pptxRegistro Auxiliar - Primaria  2024 (1).pptx
Registro Auxiliar - Primaria 2024 (1).pptx
 
cortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahuacortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahua
 
EXPECTATIVAS vs PERSPECTIVA en la vida.
EXPECTATIVAS vs PERSPECTIVA  en la vida.EXPECTATIVAS vs PERSPECTIVA  en la vida.
EXPECTATIVAS vs PERSPECTIVA en la vida.
 
La Función tecnológica del tutor.pptx
La  Función  tecnológica  del tutor.pptxLa  Función  tecnológica  del tutor.pptx
La Función tecnológica del tutor.pptx
 
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptxOLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
 
Planificacion Anual 4to Grado Educacion Primaria 2024 Ccesa007.pdf
Planificacion Anual 4to Grado Educacion Primaria   2024   Ccesa007.pdfPlanificacion Anual 4to Grado Educacion Primaria   2024   Ccesa007.pdf
Planificacion Anual 4to Grado Educacion Primaria 2024 Ccesa007.pdf
 
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptxTIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
 
30-de-abril-plebiscito-1902_240420_104511.pdf
30-de-abril-plebiscito-1902_240420_104511.pdf30-de-abril-plebiscito-1902_240420_104511.pdf
30-de-abril-plebiscito-1902_240420_104511.pdf
 
Estrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónEstrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcción
 
Informatica Generalidades - Conceptos Básicos
Informatica Generalidades - Conceptos BásicosInformatica Generalidades - Conceptos Básicos
Informatica Generalidades - Conceptos Básicos
 
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptxACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
 
Heinsohn Privacidad y Ciberseguridad para el sector educativo
Heinsohn Privacidad y Ciberseguridad para el sector educativoHeinsohn Privacidad y Ciberseguridad para el sector educativo
Heinsohn Privacidad y Ciberseguridad para el sector educativo
 
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOSTEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
 

Estructuras de datos en C

  • 1. UNIVERSIDAD DE PANAMA Facultad de Informática. Electrónica y Comunicaciones Curso de Programación 2 Tema 1 Estructuras Profesor Saulo Aizprúa I SEMESTRE 2016
  • 2. Tipos de datos estructurados • Tipo de datos que no son simples • Simples – Números – Letras – Verdadero/falso • Estructurados o compuestos – Combinaciones de tipos simples – Los arreglos son tipo de datos estructurados
  • 3. Tipos de datos definidos por el usuario • Al momento de hacer un programa, el usuario puede definir sus propios tipos de datos – Mayor claridad. – Aumenta el significado semántico del código. – Simplificar declaración de variables.
  • 4. Tipos de datos definidos por el usuario • Typedef – Define un nuevo nombre para un tipo de dato. – El nombre original sigue siendo válido. typedef <tipo> <nuevo nombre>; typedef int positivo;
  • 5. Tipos de datos definidos por el usuario typedef int positivo; typedef int negativo; int main(){ positivo a,b; negativo c,d; a=1; b=2; c=-a; d=-b; printf("%d %d %d %dn",a,b,c,d); }
  • 6. Tipos de datos definidos por el usuario • Otra forma de definir tipos de datos es componer varios datos simples en uno solo. • Esto se denonima estructura. • Una estructura es un tipo de dato que contiene un conjunto de valores relacionados entre si de forma lógica. • Estos valores pueden ser de distinto tipo. • Generalmente, se refiere a un concepto más complejo que un número o una letra.
  • 7. Estructuras • Una estructura puede verse como una colección devariables que se referencia bajo un nombre en común. • Cada una de estas variables se denominan “miembros” de la estructura. Otras denominaciones son: – Campo – elemento – atributo
  • 8. Declaración de estructuras • La definicion de una estructura se realiza fuera de cualquier función, generalmente en la parte superior del archivo. • Para definir una estructura requerimos: – Un nombre – Una lista de miembros • Nombre • Tipo
  • 9. Declaración de estructuras struct mi_estructura{ int miembro1; char miembro2; double miembro3; … }; Reservada Nombre único Lista de miembrosDeclaración Termino de la declaración
  • 10. Declaración de estructuras • La declaración de una estructura no crea variables. • Solo se define el nombre y sus miembros. • Debe estar definida para poder ser utilizada (posición en el código).
  • 11. Uso de estructuras • Una vez que se ha declarado la estructura puede ser utilizada. • Para utilizarla hay que definir variables del tipo “estructura”. • Para definir estas variables se utiliza la siguiente sintaxis: struct nombre_estructura nombre_variable;
  • 12. Uso de estructuras struct mi_estructura{ int miembro1; char miembro2; double miembro3; }; … struct mi_estructura1; struct mi_estructura2; Dos variables del tipo mi_estructura
  • 13. Operaciones con estructuras • Una vez definidas las variables, es necesario realizar operaciones con ellas. • Lo realmente útil no es la estructura, sino sus miembros. • Para acceder a los valores de los miembros de una variable de tipo estructura se utiliza el operados unario “.”. • Cada miembro es una variable común y corriente.
  • 14. Operaciones con estructuras struct mi_estructura{ int miembro1; char miembro2; double miembro3; }; … struct mi_estructura1; mi_estructura1.miembro1=1024; mi_estructura1.miembro2=‘x’; mi_estructura1.miembro3=12.8;
  • 15. Operaciones con estructuras struct mi_estructura1; Printf(“m1=%d, m2=%d, m3=%dn”, mi_estructura1.miembro1=1024, mi_estructura1.miembro2=‘x’, mi_estructura1.miembro3=12.8);
  • 16. Ejemplo • A la antigua char nombreAlumno [64]; int edadAlumno; double promedioAlumno; • Con estructuras struct alumno{ char nombre[64]; int edad; double promedio; };
  • 17. Operaciones con estructuras • Operador de asignacion – Copia una variable de estructura a otra (miembro por miembro) • Operadores de comparación – No tiene sentido a nivel de estructuras, solo a nivel de miembros.
  • 18. Estructuras y funciones • Para pasar miembros de una estructura a una función, se utiliza el mismo esquema de las variables comunes. void mostrarNota(int nota); int validarNota(int *nota); … Struct alumno a1; if(validarNota(&a1.nota)) mostrarNota(a1.nota);
  • 19. Estructuras y funciones • Para pasar estructuras completas como parámetros se debe especificar el tipo completo de la estructura en la definición del parámetro.
  • 20. Estructuras y funciones void mostrarAlumno(struct alumno a){ printf("rol: %d-%c, edad: %dn", a.rol, a.dig, a.edad); } void inicializarAlumno(struct alumno *a){ (*a).rol=0; (*a).dig='0'; (*a).edad=0; } … struct alumno a1; inicializarAlumno(&a1); mostrarAlumno(a1);
  • 21. Estructuras y funciones • La notacion ‘(*).’ Se puede resumir con ‘->’. • Agrega claridad al código. • Se denomina operador “flecha”. void inicializarAlumno(struct alumno *a){ a->rol=0; a->dig='0'; a->edad=0; }
  • 22. Estructuras y funciones • Para devolver estructuras como resultado de una función, se utiliza el mismo esquema de siempre. • El resultado se copia a la variable que lo recibe.
  • 23. Estructuras y funciones struct vector{ double x; double y; }; struct vector sumar(struct vector v1, struct vector v2){ struct vector vres; vres.x = v1.x + v2.x; vres.y = v1.y + v2.y; return vres; }
  • 24. Estructuras y funciones int main(){ struct vector va; struct vector vb; struct vector vc; va.x=0.5; va.y=1; vb.x=1; vb.y=0.5; vc = sumar(va,vb); printf("res: %.2f,%.2fn",vc.x,vc.y); }
  • 25. 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.
  • 26. Estructuras anidadas struct punto{ double x; double y; }; struct circunferencia{ struct punto centro; double radio; };
  • 27. Estructuras anidadas double perimetro(struct circunferencia c){ return 2*PI*c.radio; } double area(struct circunferencia c){ return PI*c.radio*c.radio; }
  • 28. Estructuras anidadas double distancia(struct punto p1, struct punto p2){ return sqrt( pow(p2.x+p1.x,2) + pow(p2.y+p1.y,2)); } int intersectan(struct circunferencia c1,struct circunferencia c2){ double dist = distancia(c1.centro, c2.centro); printf("%.2f vs %.2fn",dist,c1.radio+c2.radio); return (dist < c1.radio+c2.radio); }
  • 29. Estructuras anidadas int main(){ struct circunferencia ca; struct circunferencia cb; ca.centro.x=0; ca.centro.y=0; ca.radio = 1; cb.centro.x=1.9; cb.centro.y=0; cb.radio = 1; printf("p:%.2f, a:%.2f, int?%sn",perimetro(ca),area(ca), (intersectan(ca,cb)?"Si":"No")); }
  • 30. Estructuras anidadas Arbol binario: Estructura formada Con nodos de los cuales cuelgan cero, uno o dos hijos, lo Cuales son a su vez arboles binarios
  • 31. Estructuras anidadas Valor nulo  0 Puntero nulo  NULL
  • 32. Estructuras anidadas struct arbol_binario{ int valor; struct arbol_binario hijo_derecho; struct arbol_binario hijo_izquierdo; }; struct arbol_binario{ int valor; struct arbol_binario* hijo_derecho; struct arbol_binario* hijo_izquierdo;
  • 33. Estructuras anidadas void mostrar(struct arbol_binario arbol){ printf("%d ",arbol.valor); if(arbol.hijo_derecho!=0) mostrar(*arbol.hijo_derecho); if(arbol.hijo_izquierdo!=0) mostrar(*arbol.hijo_izquierdo); }
  • 34. Estructuras anidadas int main(){ struct arbol_binario arbol; struct arbol_binario hoja1; struct arbol_binario hoja2; hoja1.valor=1; hoja1.hijo_derecho=0; hoja1.hijo_izquierdo=0; hoja2.valor=2; hoja2.hijo_derecho=0; hoja2.hijo_izquierdo=0; arbol.valor=0; arbol.hijo_derecho=&hoja1; arbol.hijo_izquierdo=&hoja2; mostrar(arbol); } int main(){ struct arbol_binario arbol; struct arbol_binario hoja1; struct arbol_binario hoja2; hoja1.valor=1; hoja1.hijo_derecho=0; hoja1.hijo_izquierdo=0; hoja2.valor=2; hoja2.hijo_derecho=0; hoja2.hijo_izquierdo=&arbol; arbol.valor=0; arbol.hijo_derecho=&hoja1; arbol.hijo_izquierdo=&hoja2; mostrar(arbol); }
  • 35. Estructuras anidadas struct alumno{ int rol; char dig; double notas[3]; }; double promedio(struct alumno a){ return (a.notas[0] + a.notas[1] + a.notas[2])/3.0; }
  • 36. Estructuras anidadas int main(){ struct alumno a; a.rol=1; a.dig='1'; a.notas[0]=55; a.notas[1]=50; a.notas[2]=61; printf("Prom: %.2fn",promedio(a)); }
  • 37. Arreglos de estructuras • Se puede crear arreglos cuyos elementos sean variables de estructura. • Se definen de manera similar al caso común. tipo arreglo[N] struct estructura arreglo[N];
  • 38. Arreglos de estructuras struct alumno{ int rol; int promedio; }; int main(){ int i, suma=0; struct alumno alumnos[N]; double promedio; for(i=0;i<N;i++){ printf("Ingrese rol y nota: "); scanf("%d %d",&alumnos[i].rol,&alumnos[i].promedio); } for(i=0;i<N;i++) suma+=alumnos[i].promedio; promedio = (1.0*suma)/N; printf("Promedio del curso: %.1f",promedio); }
  • 39. Arreglos de estructuras struct alumno{ int rol; char dig; double notas[3]; }; int main(){ struct alumno alumnos[N]; int i=0; for(i=0;i<N;i++){ alumnos[i].rol=i; alumnos[i].dig='1'+i; alumnos[i].notas[0]=40+5*i; alumnos[i].notas[1]=alumnos[i].notas[0]*0.5; alumnos[i].notas[2]=alumnos[i].notas[0]*1.6; } for(i=0;i<N;i++){ printf("%d)Prom: %.2fn",i+1,promedio(alumnos[i])); } return 1; }
  • 40. Arreglos de estructuras int main(){ struct alumno alumnos[N]; int i=0; for(i=0;i<N;i++){ printf("Ingrese rol:"); scanf("%d-%c", &alumnos[i].rol, &alumnos[i].dig); printf("Ingrese notas:"); scanf("%lf %lf %lf", &alumnos[i].notas[0], &alumnos[i].notas[1], &alumnos[i].notas[2]); } for(i=0;i<N;i++){ printf("%d-%c: %.2fn", alumnos[i].rol, alumnos[i].dig, promedio(alumnos[i])); } return 1; }
  • 41. Búsqueda de estructuras • La búsqueda de estructuras es similar a la búsqueda de datos simples. • Existen dos detalles importantes: – Definir el concepto de igualdad entre estructuras • No se puede usar “= =“ • Puede ser a través de un campo • Puede ser a través de varios campos – Definir valor “no encontrado”
  • 42. Búsqueda de estructuras struct album{ char grupo[32]; char titulo[32]; int precio; }; Ambos campos definen la igualdad
  • 43. Búsqueda de estructuras int main(){ struct album coleccion[N]; char g[32],t[32]; llenar(coleccion); printf("Ingrese grupo: ");gets(g); printf("Ingrese titulo: ");gets(t); /*Buscar album*/ if(/*verificar si se encontro*/) printf("Precio: %dn", /*Mostrar precio*/); else printf("No esta en stockn"); }
  • 44. Búsqueda de estructuras int buscar1(char grupo[], char titulo[], struct album coleccion[]){ int i; for(i=0;i<N;i++){ if(strcmp(grupo, coleccion[i].grupo)==0 && strcmp(titulo, coleccion[i].titulo)==0) return i; } return -1; } … int pos; pos = buscar1(g,t, coleccion); if(pos>=0) printf("1)Precio: %dn", coleccion[pos].precio); else printf("1)No esta en stockn"); Se devuelve la posicion donde se encontró el elemento Posición inválida
  • 45. Búsqueda de estructuras struct album buscar2(char grupo[], char titulo[], struct album coleccion[]){ struct album a; int i; a.precio=-1; for(i=0;i<N;i++){ if(strcmp(grupo, coleccion[i].grupo)==0 && strcmp(titulo, coleccion[i].titulo)==0) a =coleccion[i]; } return a; } … struct album a; a = buscar2(g,t, coleccion); if(a.precio>0) printf("2)Precio: %dn", a.precio); else printf("2)No esta en stockn"); Se devuelve la estructura encontrada. Devuelve precio inválido
  • 46. Búsqueda de estructuras void buscar3(struct album *a, struct album coleccion[]){ int i; a->precio=-1; for(i=0;i<N;i++){ if(strcmp(a->grupo, coleccion[i].grupo)==0 && strcmp(a->titulo, coleccion[i].titulo)==0) a->precio = coleccion[i].precio; } } … struct album a; strcpy(a.grupo,g); strcpy(a.titulo,t); buscar3(&a, coleccion); if(a.precio>0) printf("3)Precio: %dn", a.precio); else printf("3)No esta en stockn"); “Rellena” los datos que faltan “Llena” parcialmente la estructura
  • 47. Ordenamiento de estructuras • Al igual que en las busquedas, el procedimiento es similar. • Solo falta definir la relación de orden – Puede estar definida por un solo campo – Puede estar defnida por varios campos • Por lo general, se define un campo principal y otro para el “desempate”.
  • 48. Ordenamiento de estructuras void bubblesort_up(struct album coleccion[]){ int i,j; for(i=1;i<N;i++) for(j=0;j<(N-i);j++) if(coleccion[j].precio>coleccion[j+1].precio){ struct album aux = coleccion[j+1]; coleccion[j+1] = coleccion[j]; coleccion[j] = aux; } }
  • 49. Ordenamiento de estructuras struct cliente{ char apellido[32]; char nombre[32]; int gasto_mensual; };
  • 50. Ordenamiento de estructuras void bubblesort_up(struct cliente cartera[]){ int i,j; for(i=1;i<N;i++) for(j=0;j<(N-i);j++) if(cmp(cartera[j],cartera[j+1])>0){ struct cliente aux = cartera[j+1]; cartera[j+1] = cartera[j]; cartera[j] = aux; } } •Menor que cero, primero menor que el segundo •Igual a cero, primero igual al segundo •Mayor que cero, primero mayor que el segundo
  • 51. Ordenamiento de estructuras int cmp(struct cliente c1, struct cliente c2){ return c1.gasto_mensual- c2.gasto_mensual); } int cmp(struct cliente c1, struct cliente c2){ int m = strcmp(c1.apellido, c2.apellido); if(m!=0) return m; else{ m=strcmp(c1.nombre, c2.nombre); if(m!=0) return m; else return c1.gasto_mensual-c2.gasto_mensual; } }