SlideShare una empresa de Scribd logo
1 de 38
Programación II
UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO
FACULTAD DE ESTUDIOS SUPERIORES ACATLÁN
LICENCIATURA EN MATEMÁTICAS APLICADAS Y COMPUTACIÓN
Enero 2024
Martín Mendieta
2
Objetivo del curso
El alumno aplicará los elementos avanzados de la
programación utilizando el lenguaje C, para la solución
de diversos problemas computacionales.
3
Temario
Índice temático Teóricas Prácticas
1. Tipos de datos derivados 8 4
2. Apuntadores y memoria dinámica 16 8
3. Manejo de archivos con C 12 6
4. Manipulación de bits 4 2
5. Graficación básica con C 16 8
6. Introducción a la programación orientada 8 4
a objetos
4
Reglas y forma de evaluación
• Las asistencias sí cuentan
• No se puede usar celular
• 30% exámenes de unidad
• 30% proyecto final
• 30% tareas
• 10% participación
5
1. Tipo de datos derivados
Objetivo : El alumno desarrollara programas utilizando tipo de
datos derivados
Temas:
1.1 Estructuras (struct)
1.1.1 Definición
1.1.2 Inicialización de estructuras
1.1.3 Acceso a campos
1.1.4 Funciones y estrudturas
1.1.5 Arreglos de tipo struct
1.2 Typedef
1.3 Union
1.4 Enumeración
6
1.1 Estructuras (struct)
Objetivos:
• Comprender el concepto de estructuras en C.
• Aprender a declarar, definir y manipular estructuras.
• Aplicar estructuras en la creación de programas más complejos.
7
Tipo de datos derivados.- Estructuras (struct)
Los tipos de datos vistos hasta ahora (enteros, reales, caracteres y lógicos) se
denominan simples porque no pueden descomponerse en otros datos más simples
aun.
Los tipos de datos complejos son aquellos que se componen de varios datos simples y,
por lo tanto, pueden dividirse en partes más sencillas. A los tipos de datos complejos se
les llama estructuras de datos.
Las estructuras de datos pueden ser de dos tipos:
Estáticas
Dinámicas
Ocupan un espacio determinado en la memoria del
ordenador. Este espacio es invariable y lo especifica el
progamador durante la escritura del código fuente.
Son aquéllas cuyo espacio ocupado en la memoria
puede modificarse durante la ejecución del programa.
8
Tipo de datos derivados.- Estructuras (struct)
Estáticas
Dinámicas
Fundamentales
Pilas
Listas
Colas
Grafos
Arboles
Estructurados
Entero, Flotante,
Char, Booleano
String, arreglo,
Conjunto,
Archivo, registro
Los tipos estáticos son los que no
cambian al momento de ejecución y
cuyo tamaño ha sido definido
previamente.
Por otro lado los tipos de datos
dinámicos son flexible y cambian al
momento de ejecución.
9
Tipo de datos derivados.- Estructuras (struct)
Además, se pueden mencionar como una clase de estructura de datos diferente
las estructuras externas, entendiendo como tales aquéllas que no se almacenan
en la memoria principal RAM del ordenador, sino en alguna memoria secundaria
(típicamente, un disco duro).
Las estructuras externas, también podemos denominarles archivos o ficheros,
son en realidad estructuras dinámicas almacenadas en memoria secundaria.
10
Tipo de datos derivados.- Estructuras (struct)
Un array unidimensional (vectores ó arreglos) es una agrupación de muchos
datos individuales del mismo tipo bajo el mismo nombre. Cada dato individual
de un array lo podemos accesar mediante un índice.
Declaración:
tipo_de_datos nombre_arreglo[número_de_elementos];
Por ejemplo: Int serie[5];
Se puede acceder a cada uno de los números que forman el arreglo escribiendo
a continuación del nombre un numero entre corchetes, este numero se
denomina índice.
Del ejemplo anterior: Int serie[5];
serie[2] = 20;
Serie[3] = 15;
Serie[4] = serie[2] + serie[3];
Printf(“&i”,serie[4]);
11
Tipo de datos derivados.- Estructuras (struct)
? ? 20 15 35
Valores
Posiciones 0 1 2 3 4
Los arreglos en C deben manipularse elemento a elemento. No se pueden
modificar todos los elementos a la vez.
La inicialización de los valores de un arreglo puede hacerse directamente en el
momento declararlo, ejemplo:
int serie[5] = {5, 3, 7, 9, 14};
o Cada elemento del arreglo es una variable que puede utilizarse de forma
independiente de los demás elementos.
12
Tipo de datos derivados.- Estructuras (struct)
Recorrido de un arreglo:
Esto lo hacemos de forma secuencial a cada elemento del arreglo, uno tras otro. Para
ello utilizamos un bucle con un contador, el cual nos sirve para acceder a cada uno
de los elementos del arreglo.
for (i=0; i <=4; i++)
{
v[i] = 0;
}
Una de las operaciones más típicas que se realizan con arreglos es ordenar sus
elementos mediante algún criterio, en los números de menor a mayor o viseversa.
O cualquier otro criterio que resulte útil para resolver un problema.
 Método de la burbuja o de intercambio directo
 Método de selección directa
 Metodo rápido o quicksort
13
Tipo de datos derivados.- Estructuras (struct)
Definición:
Una estructura es un tipo de dato que permite agrupar diferentes tipos de
variables bajo un mismo nombre. Una estructura es una manera de organizar y
almacenar datos de manera más compleja que los tipos de datos básicos (como
int, float, etc.).
La definición de una estructura se realiza mediante la palabra clave ‘struct’, ,
seguida por un identificador que especifica el nombre de la estructura. Dentro
de las llaves ´{ }´, se enumeran las variables que formarán parte de la estructura,
junto con sus tipos de datos.
Las estructuras en C son útiles para organizar datos relacionados de manera más
clara y para pasar múltiples datos a funciones de manera eficiente.
14
Tipo de datos derivados.- Estructuras (struct)
#include <stdio.h>
#include <string.h>
struct persona {
char nombre [50];
int edad;
float altura;
};
Int main() {
// Declaración de una variable de tipo struct Persona
struct persona persona1;
// Asignación de valores a las variables de la estructura
strcpy (persona1.nombre, "Juan“);
persona1.edad = 25;
persona1.altura = 1.75;
// Acceso a los datos de la estructura
printf("Nombre: %sn", persona1.nombre);
printf("Edad: %dn", persona1.edad);
printf("Altura: %.2fn", persona1.altura);
return 0;
}
Cada dato que forma parte de la estructura
se le denomina miembro.
La variable persona1,
contiene la misma
estructura que
persona
El acceso a los miembros se
realiza con el nombre de la
variable y el del miembro
separado por un punto.
15
Tipo de datos derivados.- Estructuras (struct)
Como al miembro siempre se accede a través de un identificador de variable de
estructura exclusivo, no puede haber confusión entre dos miembros que tengan el
mismo nombre en diferentes estructuras.
struct s1 {
char c;
int i;
};
struct s2 {
char c;
float x;
};
struct s1 a;
struct s2 b;
Es posible a a.c y b.c sin ambiguedad
16
Tipo de datos derivados.- Estructuras (struct)
struct {
char apellido[60];
int id_estudiante;
char grado;
} s1, s2 ,s3;
struct estudiante {
char apellido[60];
int id_estudiante;
char grado;
};
struct estudiante s1, s2, s3;
17
Tipo de datos derivados.- Estructuras (struct)
.
Resumen:
• Se utiliza para definir un tipo de dato personalizado que agrupa diferentes
tipos de datos bajo un solo nombre.
• Una estructura (struct) permite organizar datos relacionados de manera que
se puedan acceder y manipular de manera conjunta.
struct NombreEstructura {
TipoDato1 miembro1;
TipoDato2 miembro2;
// Puedes agregar más miembros según sea necesario
};
struct Persona {
char nombre[50];
int edad;
float altura;
};
18
Tipo de datos derivados.- Estructuras (struct)
.
• Declaración de una variable de estructura:
struct Persona persona1; // Declaración de una variable de tipo Persona
• Acceso a los miembros de la estructura:
strcpy(persona1.nombre, "Juan");
persona1.edad = 25;
persona1.altura = 1.75;
• Acceso a los miembros mediante punteros:
struct Persona *pPersona = &persona1;
printf("Nombre: %s, Edad: %d, Altura: %.2fn", pPersona->nombre,
pPersona->edad, pPersona->altura);
19
Tipo de datos derivados.- Estructuras (struct)
.
Ejercicios:
• Define una estructura Libro que almacene información sobre un libro, como
el título, el autor y el año de publicación.
20
Tipo de datos derivados.- Estructuras (struct)
.
Ejercicios:
Define una estructura Libro que almacene información sobre un libro, como el
título, el autor y el año de publicación.
#include <stdio.h>
struct Libro {
char titulo[100];
char autor[50];
int anioPublicacion;
};
int main() {
struct Libro libro1 = {"Cien años de soledad", "Gabriel Garcia Marquez", 1967};
printf("Libro: %snAutor: %snAño de publicación: %dn", libro1.titulo, libro1.autor,
libro1.anioPublicacion);
return 0;
}
21
Tipo de datos derivados.- Funciones y estructuras
Paso de Estructuras a Funciones.
o Pasar una estructura completa como parámetro a una función
o Pasar un miembro de una estructura como parámetro a una función
En el primer caso, las variables basadas en estructuras se pueden pasar como
parámetros por valor o por referencia, existiendo entre ambos métodos las mismas
diferencias que en los tipos de datos simples.
Ejemplo: De nuestro ejemplo anterior la variable persona1 pasar por valor a una
función llamada escribir_persona1, seria:
escribir_persona1(persona1);
Por referencia seria :
escribir_persona1(&persona1)
22
Tipo de datos derivados.- Funciones y estructuras
Es importante que en la función especifiquemos en la declaración si el argumento se
pasa por valor o por referencia.
void escribir_persona1(struct persona persona1); por valor
void escribir_persona1(struct persona *persona1); por referencia
Dentro de la función, el acceso a los miembros de la estructura es diferente si esta ha
sido pasada por valor o por variable.
printf(“%s”,persona1.nombre);
printf(“%s”,persona1->nombre);
Por valor se hace a la manera habitual
Por variable , se sustituye el punto
por ->
23
Tipo de datos derivados.- Funciones y estructuras
Paso de miembros de estructuras como parámetros.
Los miembros de las estructuras se pueden manipular como cualquier otro dato del
mismo tipo que el miembro. Por ejemplo, como persona1.edad es de tipo entero (int),
puede realizarse con este miembro cualquier operación que también puede realizarse
con un numero entero, incluido el paso como parámetro de una función.
escribir_persona1(persona1.edad);
En la declaración de la función, el parámetro formal debe ser de tipo long int:
void escribir_persona1(long int edad)
Dentro del cuerpo de la función, la variable edad puede usarse como cualquier otra
variable de tipo entero.
Por valor pasamos solo el
miembro edad
24
Tipo de datos derivados.- Funciones y estructuras
Paso de miembros de estructuras como referencia.
Esto lo haremos igual que con cualquier otro tipo de dato entero, agregando el & a la
llamada:
escribir_numero(&persona1.edad);
Y en la declaración de la función el parámetro debe llevar el símbolo “*”
void escribir_numero(long int *edad);
25
.
Ejercicios:
1. Define una estructura llamada Rectangulo que tenga dos campos: base y
altura ambos de tipo float. Luego escribe una función llamada:
areaRectangulo que calcule y devuelva el área de un rectángulo dadas su
base y altura.
2. Crea una estructura llamada Persona que tenga 2 campos nombre (cadena
de caracteres) y edad (entero). Luego escriba una función llamada
imprimirPersona que tome una variable de tipo Persona como parámetro y
la imprima por pantalla.
3. Crea una estructura llamada Libro que tenga tres campos, titulo (cadena de
caracteres), autor (cadena de caracteres) y AnioPublicacion (entero).
Luego, escribe una función llamada mostrarLibro, que tome una variable
de tipo Libro, como parámetro y la imprima por pantalla.
Tipo de datos derivados.- Funciones y estructuras
26
#include <stdio.h>
struct Rectangulo {
float base;
float altura;
};
float areaRectangulo(struct Rectangulo r) {
return r.base * r.altura;
}
int main() {
struct Rectangulo rectangulo1 = {5.0, 3.0};
printf("Área del rectángulo: %.2fn", areaRectangulo(rectangulo1));
return 0;
}
Tipo de datos derivados.- Funciones y estructuras
1.-
27
#include <stdio.h>
struct Persona {
char nombre[50];
int edad;
};
void imprimirPersona(struct Persona p) {
printf("Nombre: %sn", p.nombre);
printf("Edad: %dn", p.edad);
}
int main() {
struct Persona persona1 = {"Juan", 25};
imprimirPersona(persona1);
return 0;
}
Tipo de datos derivados.- Funciones y estructuras
2.-
28
Tipo de datos derivados.- Funciones y estructuras
#include <stdio.h>
struct Libro {
char titulo[100];
char autor[50];
int anioPublicacion;
};
void mostrarLibro(struct Libro l) {
printf("Título: %sn", l.titulo);
printf("Autor: %sn", l.autor);
printf("Año de Publicación: %dn", l.anioPublicacion);
}
int main() {
struct Libro libro1 = {"Cien años de soledad", "Gabriel García Márquez", 1967};
mostrarLibro(libro1);
return 0;
}
3.-
29
Tipo de datos derivados.- Typedef
Tipos de datos definidos por el usuario.
Para eso utilizaremos la palabra reservada typedef.
typedef int entero;
A partir de esta declaración nuestro compilador reconocerá el tipo de dato entero, que
será exactamente igual al tipo predefinido int.
Ejemplo:
typedef struct
{
int dia;
int mes;
int anio;
} t_formato_fecha;
Hemos definido un nuevo tipo de dato,
llamado formato_fecha y ahora podríamos
definir variables de este tipo de dato:
t_formato_fecha fecha_hoy;
t_formato_fecha fecha_nacimiento;
30
Tipo de datos derivados.- Typedef
Los identificadores de los tipos de datos que creemos deben cumplir con las reglas
habituales de C (nada de caracteres especiales, ni espacios).
Como una buena practica es recomendable anteponer un identificador que nos
permita reconocer nuestros tipos de datos creados del resto, en este ejemplo estamos
utilizando la letra “t” para identificarlos.
Tipos de datos Complejos.
Es posible que los datos que componen un tipo complejo sean, a su vez de tipo
complejo.
Es posible tener un arreglo de estructuras, o una estructura cuyos miembros son
arreglos u otras estructuras.
31
Tipo de datos derivados.- Typedef
// Arreglo de estrcturas
struct fecha
{
int dia;
int mes;
int anio;
};
Struct fecha lista_de_fechas[100];
La variable lista_de_fechas es un arreglo de 100 elementos. Cada elemento no es un
dato de tipo simple, sino una estructura fecha. Para acceder al miembro dia del
elemento numero 5 del arreglo y asignarle el valor 20, tendríamos que hacer esto:
lista_de_fechas[5].dia=20;
32
Tipo de datos derivados.- Typedef
Estructuras de estructuras:
struct s_fecha
{
int dia;
int mes;
int anio;
};
struct s_hora
{
int hh; //horas
int mm; //minutos
int ss; //segundos
};
struct calentadio
{
struct s_fecha fecha;
struct s_hora hora;
};
struct calendario fecha_hoy;
La variable fecha_hoy es de tipo struct
calendario, que es un tipo a su vez está
compuesto de otras dos estructuras.
Acceso:
fecha_hoy.fecha.dia=5;
fecha_hoy.fecha.mes=12;
fecha_hoy.hora.hh=23;
33
Tipo de datos derivados.- union
Las uniones son muy similares a las estructuras y se declaran de manera análoga,
sustituyendo la palabra struct por union, y se utlizan exactamente igual.
Union datos_persona
{
long int numero;
char letra;
char nombre[50];
char apellidos[100];
};
Union datos_persona alumno; // declaración de la variable
La diferencia radica en que todos los miembros de la union comparten el mismo
espacio en memoria, de manera que solo se puede tener almacenado uno de los
miembro en cada elemento.
34
El tamaño de la union es igual al del elemento mas largo.
Del ejemplo anterior:
numero 4 bytes (32 bits)
letra 1 byte (8 bits)
nombre 50 bytes
apellidos 100 bytes
Por lo tanto, la union ocupa un espacio en memoria de 100 bytes, mientras que si fuera una
estructura ocuparía 155 bytes, ya que cada miembro se almacena en un espacio de
memoria propio.
alumno.numero=8205769
Estamos asignando el número 8205769 a los primeros 4 bytes de la union, si
posteriormente se hace esta otra asignación:
strcpy(alumno.nombre, “Maria”)
La cadena de “Maria” ocupara los primeros 50 bytes de la union, y por lo tanto, se habrá
perdido el número que habíamos almacenado.
Tipo de datos derivados.- union
35
Tipo de datos derivados.- union
alumno.numero = 8205769;
strcpy(alumno.nombre, “Maria”);
printf(“%d”, alumno.numero);
????????
Las uniones se utilizan exactamente igual que las estructuras, con la ventaja de que
ahorra espacio en memoria. Sin embargo, al compartir todos los miembros las mismas
posiciones de memoria, la utilidad de las uniones queda reducida a determinadas
problemáticas que queramos resolver, en las que esta limitante no represente un
problema.
36
Tipo de datos derivados.- enumeración
Una enumeración es un conjunto de constantes enteras. A la enumeración se le asigna
un nombre que, a todos los efectos, se comporta como un nuevo tipo de datos de
manera que las variables de este tipo son variables enteras que solo pueden contener
los valores especificados en la enumeración.
enum nombre_enumeracion {constante1=valor1, constante2=valor2……….
………………constanteN=valorN};
Ejemplo:
enum dias_semana {LUNES=1, MARTES=2, MIERCOLES=3, JUEVES=4,
VIERNES=5, SABADO=6, DOMINGO=7};
Las variables que declaran del tipo dias_semana serán, variables enteras y solo podrán
recibir los valores del 1 al 7.
días_semana dia;
dia=“LUNES”;
dia=1; Las dos asignaciones son equivalentes
37
Tipo de datos derivados.- enumeración
Si no se especifican los valores en la enumeración, C les asigna automáticamente
números enteros a partir de 0. Por ejemplo en la siguiente definición, la constante
LUNES valdrá 0, MARTES, 1, etc…
enum dias_semana { LUNES, MARTES, MIERCOLES, JUEVES, VIERNES, SABADO, DOMINGO};
Tenemos que considerar que los identificadores utilizados en una enumeración son
constantes enteras y que, por lo tanto, lo siguiente imprime en la pantalla un 2, y no la
palabra MIERCOLES.
dias_semana dia;
dia = MIERCOLES;
printf(“%i”,dia);
38
Ejercicios:

Más contenido relacionado

Similar a Programación II_modulo1lolololololo9oo.pptx

Unidad%2 bxii estructuras
Unidad%2 bxii estructurasUnidad%2 bxii estructuras
Unidad%2 bxii estructurasjeoselyn
 
TiposDeDatos de estructuras de datos en Java
TiposDeDatos de estructuras de datos en JavaTiposDeDatos de estructuras de datos en Java
TiposDeDatos de estructuras de datos en JavaJuan Carlos Mendez N.
 
Framework .NET 3.5 05 Tipo y jerarquía de objetos
Framework .NET 3.5 05 Tipo y jerarquía de objetosFramework .NET 3.5 05 Tipo y jerarquía de objetos
Framework .NET 3.5 05 Tipo y jerarquía de objetosAntonio Palomares Sender
 
Modulo 1- Curso de Estructura (Struct)
Modulo 1- Curso de Estructura (Struct)Modulo 1- Curso de Estructura (Struct)
Modulo 1- Curso de Estructura (Struct)Ing. Saulo Aizprua
 
Computacion estructuras
Computacion estructurasComputacion estructuras
Computacion estructurasManuel
 
Acceso a datos en aplicaciones web del entorno servidor
Acceso a datos en aplicaciones web del entorno servidorAcceso a datos en aplicaciones web del entorno servidor
Acceso a datos en aplicaciones web del entorno servidorJomicast
 
Tema 9 www.fresymetal.com
Tema 9 www.fresymetal.comTema 9 www.fresymetal.com
Tema 9 www.fresymetal.comFresyMetal
 
Maria taipe..presentaciones
Maria taipe..presentacionesMaria taipe..presentaciones
Maria taipe..presentacionesmary taipe
 
Maria taipe..presentaciones
Maria taipe..presentacionesMaria taipe..presentaciones
Maria taipe..presentacionesmary taipe
 
Objeto relacional bases datos 2
Objeto relacional bases datos 2Objeto relacional bases datos 2
Objeto relacional bases datos 2Velmuz Buzz
 
Presentacion de vectores
Presentacion de vectoresPresentacion de vectores
Presentacion de vectoresletty20151998
 
Presentacion de vectores y matrices
Presentacion de vectores y matricesPresentacion de vectores y matrices
Presentacion de vectores y matricesletty20151998
 

Similar a Programación II_modulo1lolololololo9oo.pptx (20)

Unidad%2 bxii estructuras
Unidad%2 bxii estructurasUnidad%2 bxii estructuras
Unidad%2 bxii estructuras
 
TiposDeDatos de estructuras de datos en Java
TiposDeDatos de estructuras de datos en JavaTiposDeDatos de estructuras de datos en Java
TiposDeDatos de estructuras de datos en Java
 
Framework .NET 3.5 05 Tipo y jerarquía de objetos
Framework .NET 3.5 05 Tipo y jerarquía de objetosFramework .NET 3.5 05 Tipo y jerarquía de objetos
Framework .NET 3.5 05 Tipo y jerarquía de objetos
 
Estructuras en c++
Estructuras en c++Estructuras en c++
Estructuras en c++
 
Sesion01EDx.pptx
Sesion01EDx.pptxSesion01EDx.pptx
Sesion01EDx.pptx
 
Modulo 1- Curso de Estructura (Struct)
Modulo 1- Curso de Estructura (Struct)Modulo 1- Curso de Estructura (Struct)
Modulo 1- Curso de Estructura (Struct)
 
Computacion estructuras
Computacion estructurasComputacion estructuras
Computacion estructuras
 
Introduccion
IntroduccionIntroduccion
Introduccion
 
Introduccion
IntroduccionIntroduccion
Introduccion
 
Acceso a datos en aplicaciones web del entorno servidor
Acceso a datos en aplicaciones web del entorno servidorAcceso a datos en aplicaciones web del entorno servidor
Acceso a datos en aplicaciones web del entorno servidor
 
Tema 9 www.fresymetal.com
Tema 9 www.fresymetal.comTema 9 www.fresymetal.com
Tema 9 www.fresymetal.com
 
Maria taipe..presentaciones
Maria taipe..presentacionesMaria taipe..presentaciones
Maria taipe..presentaciones
 
Maria taipe..presentaciones
Maria taipe..presentacionesMaria taipe..presentaciones
Maria taipe..presentaciones
 
Programacion no numerica2
Programacion no numerica2Programacion no numerica2
Programacion no numerica2
 
Objeto relacional bases datos 2
Objeto relacional bases datos 2Objeto relacional bases datos 2
Objeto relacional bases datos 2
 
Presentacion de vectores
Presentacion de vectoresPresentacion de vectores
Presentacion de vectores
 
Presentacion de vectores y matrices
Presentacion de vectores y matricesPresentacion de vectores y matrices
Presentacion de vectores y matrices
 
Estructura de registros
Estructura de registrosEstructura de registros
Estructura de registros
 
Estructura de datos benita
Estructura de datos benitaEstructura de datos benita
Estructura de datos benita
 
Estructura de datos benita
Estructura de datos benitaEstructura de datos benita
Estructura de datos benita
 

Último

Critica 1 Grupo 10 RodrigoBenitez_GinaGadea_AlexisGonzález.pdf
Critica 1 Grupo 10 RodrigoBenitez_GinaGadea_AlexisGonzález.pdfCritica 1 Grupo 10 RodrigoBenitez_GinaGadea_AlexisGonzález.pdf
Critica 1 Grupo 10 RodrigoBenitez_GinaGadea_AlexisGonzález.pdfRodrigoBenitez38
 
Posiciones del IDH a nivel global en México (1982-2024).pdf
Posiciones del IDH a nivel global en México (1982-2024).pdfPosiciones del IDH a nivel global en México (1982-2024).pdf
Posiciones del IDH a nivel global en México (1982-2024).pdfJC Díaz Herrera
 
Análisis de datos en acción: Optimizando el crecimiento de Cyclistic
Análisis de datos en acción: Optimizando el crecimiento de CyclisticAnálisis de datos en acción: Optimizando el crecimiento de Cyclistic
Análisis de datos en acción: Optimizando el crecimiento de CyclisticJamithGarcia1
 
Premios_nobel_por_grupo_racial_ (2024).pdf
Premios_nobel_por_grupo_racial_ (2024).pdfPremios_nobel_por_grupo_racial_ (2024).pdf
Premios_nobel_por_grupo_racial_ (2024).pdfJC Díaz Herrera
 
Reducción de la pobreza en Sexenio de AMLO (2018-2024).pdf
Reducción de la pobreza en Sexenio de AMLO (2018-2024).pdfReducción de la pobreza en Sexenio de AMLO (2018-2024).pdf
Reducción de la pobreza en Sexenio de AMLO (2018-2024).pdfJC Díaz Herrera
 
PANTEÓN DE Paris en historia de la arquitectura
PANTEÓN DE Paris en historia de la arquitecturaPANTEÓN DE Paris en historia de la arquitectura
PANTEÓN DE Paris en historia de la arquitecturaRosaHurtado26
 
Posiciones en el IDH global de EUA (1950-2024).pdf
Posiciones en el IDH global de EUA (1950-2024).pdfPosiciones en el IDH global de EUA (1950-2024).pdf
Posiciones en el IDH global de EUA (1950-2024).pdfJC Díaz Herrera
 
Cuáles son las características biológicas que están marcadas en tu individual...
Cuáles son las características biológicas que están marcadas en tu individual...Cuáles son las características biológicas que están marcadas en tu individual...
Cuáles son las características biológicas que están marcadas en tu individual...israel garcia
 
Industria musical de EUA vs Industria musical Corea del Sur (2024).pdf
Industria musical de EUA vs Industria musical Corea del Sur (2024).pdfIndustria musical de EUA vs Industria musical Corea del Sur (2024).pdf
Industria musical de EUA vs Industria musical Corea del Sur (2024).pdfJC Díaz Herrera
 
Posiciones_del_sionismo_en_los_imperios globales de la humanidad (2024).pdf
Posiciones_del_sionismo_en_los_imperios globales de la humanidad (2024).pdfPosiciones_del_sionismo_en_los_imperios globales de la humanidad (2024).pdf
Posiciones_del_sionismo_en_los_imperios globales de la humanidad (2024).pdfJC Díaz Herrera
 
Qué es un Histograma estadístico teoria y problema
Qué es un Histograma estadístico teoria y problemaQué es un Histograma estadístico teoria y problema
Qué es un Histograma estadístico teoria y problemaJoellyAlejandraRodrg
 
Reservas de divisas y oro en México en sexenio de AMLO (2018-2024).pdf
Reservas de divisas y oro en México en sexenio de AMLO (2018-2024).pdfReservas de divisas y oro en México en sexenio de AMLO (2018-2024).pdf
Reservas de divisas y oro en México en sexenio de AMLO (2018-2024).pdfJC Díaz Herrera
 
Evolución de la fortuna de la familia Slim (1994-2024).pdf
Evolución de la fortuna de la familia Slim (1994-2024).pdfEvolución de la fortuna de la familia Slim (1994-2024).pdf
Evolución de la fortuna de la familia Slim (1994-2024).pdfJC Díaz Herrera
 
Las familias más ricas del sionismo en el siglo XXI.pdf
Las familias más ricas del sionismo en el siglo XXI.pdfLas familias más ricas del sionismo en el siglo XXI.pdf
Las familias más ricas del sionismo en el siglo XXI.pdfJC Díaz Herrera
 
Ivu- taller de diseño arquitectonico l , adicion y sustraccion de cubos,
Ivu- taller de diseño arquitectonico l , adicion y sustraccion de cubos,Ivu- taller de diseño arquitectonico l , adicion y sustraccion de cubos,
Ivu- taller de diseño arquitectonico l , adicion y sustraccion de cubos,juberrodasflores
 
REPORTE DE INCIDENCIA DELICTIVA MARZO 2024.pdf
REPORTE DE INCIDENCIA DELICTIVA MARZO 2024.pdfREPORTE DE INCIDENCIA DELICTIVA MARZO 2024.pdf
REPORTE DE INCIDENCIA DELICTIVA MARZO 2024.pdfIrapuatoCmovamos
 
AA CUADRO DE TEORIA DEL CASO. (1) (1).docx
AA CUADRO DE TEORIA DEL CASO. (1) (1).docxAA CUADRO DE TEORIA DEL CASO. (1) (1).docx
AA CUADRO DE TEORIA DEL CASO. (1) (1).docxLuisAngelYomonaYomon
 
Data Warehouse.gestion de bases de datos
Data Warehouse.gestion de bases de datosData Warehouse.gestion de bases de datos
Data Warehouse.gestion de bases de datosssuser948499
 
Los_países_con_la_mayor_cantidad_de_rascacielos (2023).pdf
Los_países_con_la_mayor_cantidad_de_rascacielos (2023).pdfLos_países_con_la_mayor_cantidad_de_rascacielos (2023).pdf
Los_países_con_la_mayor_cantidad_de_rascacielos (2023).pdfJC Díaz Herrera
 
SUNEDU - Superintendencia Nacional de Educación superior Universitaria
SUNEDU - Superintendencia Nacional de Educación superior UniversitariaSUNEDU - Superintendencia Nacional de Educación superior Universitaria
SUNEDU - Superintendencia Nacional de Educación superior Universitariachayananazcosimeon
 

Último (20)

Critica 1 Grupo 10 RodrigoBenitez_GinaGadea_AlexisGonzález.pdf
Critica 1 Grupo 10 RodrigoBenitez_GinaGadea_AlexisGonzález.pdfCritica 1 Grupo 10 RodrigoBenitez_GinaGadea_AlexisGonzález.pdf
Critica 1 Grupo 10 RodrigoBenitez_GinaGadea_AlexisGonzález.pdf
 
Posiciones del IDH a nivel global en México (1982-2024).pdf
Posiciones del IDH a nivel global en México (1982-2024).pdfPosiciones del IDH a nivel global en México (1982-2024).pdf
Posiciones del IDH a nivel global en México (1982-2024).pdf
 
Análisis de datos en acción: Optimizando el crecimiento de Cyclistic
Análisis de datos en acción: Optimizando el crecimiento de CyclisticAnálisis de datos en acción: Optimizando el crecimiento de Cyclistic
Análisis de datos en acción: Optimizando el crecimiento de Cyclistic
 
Premios_nobel_por_grupo_racial_ (2024).pdf
Premios_nobel_por_grupo_racial_ (2024).pdfPremios_nobel_por_grupo_racial_ (2024).pdf
Premios_nobel_por_grupo_racial_ (2024).pdf
 
Reducción de la pobreza en Sexenio de AMLO (2018-2024).pdf
Reducción de la pobreza en Sexenio de AMLO (2018-2024).pdfReducción de la pobreza en Sexenio de AMLO (2018-2024).pdf
Reducción de la pobreza en Sexenio de AMLO (2018-2024).pdf
 
PANTEÓN DE Paris en historia de la arquitectura
PANTEÓN DE Paris en historia de la arquitecturaPANTEÓN DE Paris en historia de la arquitectura
PANTEÓN DE Paris en historia de la arquitectura
 
Posiciones en el IDH global de EUA (1950-2024).pdf
Posiciones en el IDH global de EUA (1950-2024).pdfPosiciones en el IDH global de EUA (1950-2024).pdf
Posiciones en el IDH global de EUA (1950-2024).pdf
 
Cuáles son las características biológicas que están marcadas en tu individual...
Cuáles son las características biológicas que están marcadas en tu individual...Cuáles son las características biológicas que están marcadas en tu individual...
Cuáles son las características biológicas que están marcadas en tu individual...
 
Industria musical de EUA vs Industria musical Corea del Sur (2024).pdf
Industria musical de EUA vs Industria musical Corea del Sur (2024).pdfIndustria musical de EUA vs Industria musical Corea del Sur (2024).pdf
Industria musical de EUA vs Industria musical Corea del Sur (2024).pdf
 
Posiciones_del_sionismo_en_los_imperios globales de la humanidad (2024).pdf
Posiciones_del_sionismo_en_los_imperios globales de la humanidad (2024).pdfPosiciones_del_sionismo_en_los_imperios globales de la humanidad (2024).pdf
Posiciones_del_sionismo_en_los_imperios globales de la humanidad (2024).pdf
 
Qué es un Histograma estadístico teoria y problema
Qué es un Histograma estadístico teoria y problemaQué es un Histograma estadístico teoria y problema
Qué es un Histograma estadístico teoria y problema
 
Reservas de divisas y oro en México en sexenio de AMLO (2018-2024).pdf
Reservas de divisas y oro en México en sexenio de AMLO (2018-2024).pdfReservas de divisas y oro en México en sexenio de AMLO (2018-2024).pdf
Reservas de divisas y oro en México en sexenio de AMLO (2018-2024).pdf
 
Evolución de la fortuna de la familia Slim (1994-2024).pdf
Evolución de la fortuna de la familia Slim (1994-2024).pdfEvolución de la fortuna de la familia Slim (1994-2024).pdf
Evolución de la fortuna de la familia Slim (1994-2024).pdf
 
Las familias más ricas del sionismo en el siglo XXI.pdf
Las familias más ricas del sionismo en el siglo XXI.pdfLas familias más ricas del sionismo en el siglo XXI.pdf
Las familias más ricas del sionismo en el siglo XXI.pdf
 
Ivu- taller de diseño arquitectonico l , adicion y sustraccion de cubos,
Ivu- taller de diseño arquitectonico l , adicion y sustraccion de cubos,Ivu- taller de diseño arquitectonico l , adicion y sustraccion de cubos,
Ivu- taller de diseño arquitectonico l , adicion y sustraccion de cubos,
 
REPORTE DE INCIDENCIA DELICTIVA MARZO 2024.pdf
REPORTE DE INCIDENCIA DELICTIVA MARZO 2024.pdfREPORTE DE INCIDENCIA DELICTIVA MARZO 2024.pdf
REPORTE DE INCIDENCIA DELICTIVA MARZO 2024.pdf
 
AA CUADRO DE TEORIA DEL CASO. (1) (1).docx
AA CUADRO DE TEORIA DEL CASO. (1) (1).docxAA CUADRO DE TEORIA DEL CASO. (1) (1).docx
AA CUADRO DE TEORIA DEL CASO. (1) (1).docx
 
Data Warehouse.gestion de bases de datos
Data Warehouse.gestion de bases de datosData Warehouse.gestion de bases de datos
Data Warehouse.gestion de bases de datos
 
Los_países_con_la_mayor_cantidad_de_rascacielos (2023).pdf
Los_países_con_la_mayor_cantidad_de_rascacielos (2023).pdfLos_países_con_la_mayor_cantidad_de_rascacielos (2023).pdf
Los_países_con_la_mayor_cantidad_de_rascacielos (2023).pdf
 
SUNEDU - Superintendencia Nacional de Educación superior Universitaria
SUNEDU - Superintendencia Nacional de Educación superior UniversitariaSUNEDU - Superintendencia Nacional de Educación superior Universitaria
SUNEDU - Superintendencia Nacional de Educación superior Universitaria
 

Programación II_modulo1lolololololo9oo.pptx

  • 1. Programación II UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO FACULTAD DE ESTUDIOS SUPERIORES ACATLÁN LICENCIATURA EN MATEMÁTICAS APLICADAS Y COMPUTACIÓN Enero 2024 Martín Mendieta
  • 2. 2 Objetivo del curso El alumno aplicará los elementos avanzados de la programación utilizando el lenguaje C, para la solución de diversos problemas computacionales.
  • 3. 3 Temario Índice temático Teóricas Prácticas 1. Tipos de datos derivados 8 4 2. Apuntadores y memoria dinámica 16 8 3. Manejo de archivos con C 12 6 4. Manipulación de bits 4 2 5. Graficación básica con C 16 8 6. Introducción a la programación orientada 8 4 a objetos
  • 4. 4 Reglas y forma de evaluación • Las asistencias sí cuentan • No se puede usar celular • 30% exámenes de unidad • 30% proyecto final • 30% tareas • 10% participación
  • 5. 5 1. Tipo de datos derivados Objetivo : El alumno desarrollara programas utilizando tipo de datos derivados Temas: 1.1 Estructuras (struct) 1.1.1 Definición 1.1.2 Inicialización de estructuras 1.1.3 Acceso a campos 1.1.4 Funciones y estrudturas 1.1.5 Arreglos de tipo struct 1.2 Typedef 1.3 Union 1.4 Enumeración
  • 6. 6 1.1 Estructuras (struct) Objetivos: • Comprender el concepto de estructuras en C. • Aprender a declarar, definir y manipular estructuras. • Aplicar estructuras en la creación de programas más complejos.
  • 7. 7 Tipo de datos derivados.- Estructuras (struct) Los tipos de datos vistos hasta ahora (enteros, reales, caracteres y lógicos) se denominan simples porque no pueden descomponerse en otros datos más simples aun. Los tipos de datos complejos son aquellos que se componen de varios datos simples y, por lo tanto, pueden dividirse en partes más sencillas. A los tipos de datos complejos se les llama estructuras de datos. Las estructuras de datos pueden ser de dos tipos: Estáticas Dinámicas Ocupan un espacio determinado en la memoria del ordenador. Este espacio es invariable y lo especifica el progamador durante la escritura del código fuente. Son aquéllas cuyo espacio ocupado en la memoria puede modificarse durante la ejecución del programa.
  • 8. 8 Tipo de datos derivados.- Estructuras (struct) Estáticas Dinámicas Fundamentales Pilas Listas Colas Grafos Arboles Estructurados Entero, Flotante, Char, Booleano String, arreglo, Conjunto, Archivo, registro Los tipos estáticos son los que no cambian al momento de ejecución y cuyo tamaño ha sido definido previamente. Por otro lado los tipos de datos dinámicos son flexible y cambian al momento de ejecución.
  • 9. 9 Tipo de datos derivados.- Estructuras (struct) Además, se pueden mencionar como una clase de estructura de datos diferente las estructuras externas, entendiendo como tales aquéllas que no se almacenan en la memoria principal RAM del ordenador, sino en alguna memoria secundaria (típicamente, un disco duro). Las estructuras externas, también podemos denominarles archivos o ficheros, son en realidad estructuras dinámicas almacenadas en memoria secundaria.
  • 10. 10 Tipo de datos derivados.- Estructuras (struct) Un array unidimensional (vectores ó arreglos) es una agrupación de muchos datos individuales del mismo tipo bajo el mismo nombre. Cada dato individual de un array lo podemos accesar mediante un índice. Declaración: tipo_de_datos nombre_arreglo[número_de_elementos]; Por ejemplo: Int serie[5]; Se puede acceder a cada uno de los números que forman el arreglo escribiendo a continuación del nombre un numero entre corchetes, este numero se denomina índice. Del ejemplo anterior: Int serie[5]; serie[2] = 20; Serie[3] = 15; Serie[4] = serie[2] + serie[3]; Printf(“&i”,serie[4]);
  • 11. 11 Tipo de datos derivados.- Estructuras (struct) ? ? 20 15 35 Valores Posiciones 0 1 2 3 4 Los arreglos en C deben manipularse elemento a elemento. No se pueden modificar todos los elementos a la vez. La inicialización de los valores de un arreglo puede hacerse directamente en el momento declararlo, ejemplo: int serie[5] = {5, 3, 7, 9, 14}; o Cada elemento del arreglo es una variable que puede utilizarse de forma independiente de los demás elementos.
  • 12. 12 Tipo de datos derivados.- Estructuras (struct) Recorrido de un arreglo: Esto lo hacemos de forma secuencial a cada elemento del arreglo, uno tras otro. Para ello utilizamos un bucle con un contador, el cual nos sirve para acceder a cada uno de los elementos del arreglo. for (i=0; i <=4; i++) { v[i] = 0; } Una de las operaciones más típicas que se realizan con arreglos es ordenar sus elementos mediante algún criterio, en los números de menor a mayor o viseversa. O cualquier otro criterio que resulte útil para resolver un problema.  Método de la burbuja o de intercambio directo  Método de selección directa  Metodo rápido o quicksort
  • 13. 13 Tipo de datos derivados.- Estructuras (struct) Definición: Una estructura es un tipo de dato que permite agrupar diferentes tipos de variables bajo un mismo nombre. Una estructura es una manera de organizar y almacenar datos de manera más compleja que los tipos de datos básicos (como int, float, etc.). La definición de una estructura se realiza mediante la palabra clave ‘struct’, , seguida por un identificador que especifica el nombre de la estructura. Dentro de las llaves ´{ }´, se enumeran las variables que formarán parte de la estructura, junto con sus tipos de datos. Las estructuras en C son útiles para organizar datos relacionados de manera más clara y para pasar múltiples datos a funciones de manera eficiente.
  • 14. 14 Tipo de datos derivados.- Estructuras (struct) #include <stdio.h> #include <string.h> struct persona { char nombre [50]; int edad; float altura; }; Int main() { // Declaración de una variable de tipo struct Persona struct persona persona1; // Asignación de valores a las variables de la estructura strcpy (persona1.nombre, "Juan“); persona1.edad = 25; persona1.altura = 1.75; // Acceso a los datos de la estructura printf("Nombre: %sn", persona1.nombre); printf("Edad: %dn", persona1.edad); printf("Altura: %.2fn", persona1.altura); return 0; } Cada dato que forma parte de la estructura se le denomina miembro. La variable persona1, contiene la misma estructura que persona El acceso a los miembros se realiza con el nombre de la variable y el del miembro separado por un punto.
  • 15. 15 Tipo de datos derivados.- Estructuras (struct) Como al miembro siempre se accede a través de un identificador de variable de estructura exclusivo, no puede haber confusión entre dos miembros que tengan el mismo nombre en diferentes estructuras. struct s1 { char c; int i; }; struct s2 { char c; float x; }; struct s1 a; struct s2 b; Es posible a a.c y b.c sin ambiguedad
  • 16. 16 Tipo de datos derivados.- Estructuras (struct) struct { char apellido[60]; int id_estudiante; char grado; } s1, s2 ,s3; struct estudiante { char apellido[60]; int id_estudiante; char grado; }; struct estudiante s1, s2, s3;
  • 17. 17 Tipo de datos derivados.- Estructuras (struct) . Resumen: • Se utiliza para definir un tipo de dato personalizado que agrupa diferentes tipos de datos bajo un solo nombre. • Una estructura (struct) permite organizar datos relacionados de manera que se puedan acceder y manipular de manera conjunta. struct NombreEstructura { TipoDato1 miembro1; TipoDato2 miembro2; // Puedes agregar más miembros según sea necesario }; struct Persona { char nombre[50]; int edad; float altura; };
  • 18. 18 Tipo de datos derivados.- Estructuras (struct) . • Declaración de una variable de estructura: struct Persona persona1; // Declaración de una variable de tipo Persona • Acceso a los miembros de la estructura: strcpy(persona1.nombre, "Juan"); persona1.edad = 25; persona1.altura = 1.75; • Acceso a los miembros mediante punteros: struct Persona *pPersona = &persona1; printf("Nombre: %s, Edad: %d, Altura: %.2fn", pPersona->nombre, pPersona->edad, pPersona->altura);
  • 19. 19 Tipo de datos derivados.- Estructuras (struct) . Ejercicios: • Define una estructura Libro que almacene información sobre un libro, como el título, el autor y el año de publicación.
  • 20. 20 Tipo de datos derivados.- Estructuras (struct) . Ejercicios: Define una estructura Libro que almacene información sobre un libro, como el título, el autor y el año de publicación. #include <stdio.h> struct Libro { char titulo[100]; char autor[50]; int anioPublicacion; }; int main() { struct Libro libro1 = {"Cien años de soledad", "Gabriel Garcia Marquez", 1967}; printf("Libro: %snAutor: %snAño de publicación: %dn", libro1.titulo, libro1.autor, libro1.anioPublicacion); return 0; }
  • 21. 21 Tipo de datos derivados.- Funciones y estructuras Paso de Estructuras a Funciones. o Pasar una estructura completa como parámetro a una función o Pasar un miembro de una estructura como parámetro a una función En el primer caso, las variables basadas en estructuras se pueden pasar como parámetros por valor o por referencia, existiendo entre ambos métodos las mismas diferencias que en los tipos de datos simples. Ejemplo: De nuestro ejemplo anterior la variable persona1 pasar por valor a una función llamada escribir_persona1, seria: escribir_persona1(persona1); Por referencia seria : escribir_persona1(&persona1)
  • 22. 22 Tipo de datos derivados.- Funciones y estructuras Es importante que en la función especifiquemos en la declaración si el argumento se pasa por valor o por referencia. void escribir_persona1(struct persona persona1); por valor void escribir_persona1(struct persona *persona1); por referencia Dentro de la función, el acceso a los miembros de la estructura es diferente si esta ha sido pasada por valor o por variable. printf(“%s”,persona1.nombre); printf(“%s”,persona1->nombre); Por valor se hace a la manera habitual Por variable , se sustituye el punto por ->
  • 23. 23 Tipo de datos derivados.- Funciones y estructuras Paso de miembros de estructuras como parámetros. Los miembros de las estructuras se pueden manipular como cualquier otro dato del mismo tipo que el miembro. Por ejemplo, como persona1.edad es de tipo entero (int), puede realizarse con este miembro cualquier operación que también puede realizarse con un numero entero, incluido el paso como parámetro de una función. escribir_persona1(persona1.edad); En la declaración de la función, el parámetro formal debe ser de tipo long int: void escribir_persona1(long int edad) Dentro del cuerpo de la función, la variable edad puede usarse como cualquier otra variable de tipo entero. Por valor pasamos solo el miembro edad
  • 24. 24 Tipo de datos derivados.- Funciones y estructuras Paso de miembros de estructuras como referencia. Esto lo haremos igual que con cualquier otro tipo de dato entero, agregando el & a la llamada: escribir_numero(&persona1.edad); Y en la declaración de la función el parámetro debe llevar el símbolo “*” void escribir_numero(long int *edad);
  • 25. 25 . Ejercicios: 1. Define una estructura llamada Rectangulo que tenga dos campos: base y altura ambos de tipo float. Luego escribe una función llamada: areaRectangulo que calcule y devuelva el área de un rectángulo dadas su base y altura. 2. Crea una estructura llamada Persona que tenga 2 campos nombre (cadena de caracteres) y edad (entero). Luego escriba una función llamada imprimirPersona que tome una variable de tipo Persona como parámetro y la imprima por pantalla. 3. Crea una estructura llamada Libro que tenga tres campos, titulo (cadena de caracteres), autor (cadena de caracteres) y AnioPublicacion (entero). Luego, escribe una función llamada mostrarLibro, que tome una variable de tipo Libro, como parámetro y la imprima por pantalla. Tipo de datos derivados.- Funciones y estructuras
  • 26. 26 #include <stdio.h> struct Rectangulo { float base; float altura; }; float areaRectangulo(struct Rectangulo r) { return r.base * r.altura; } int main() { struct Rectangulo rectangulo1 = {5.0, 3.0}; printf("Área del rectángulo: %.2fn", areaRectangulo(rectangulo1)); return 0; } Tipo de datos derivados.- Funciones y estructuras 1.-
  • 27. 27 #include <stdio.h> struct Persona { char nombre[50]; int edad; }; void imprimirPersona(struct Persona p) { printf("Nombre: %sn", p.nombre); printf("Edad: %dn", p.edad); } int main() { struct Persona persona1 = {"Juan", 25}; imprimirPersona(persona1); return 0; } Tipo de datos derivados.- Funciones y estructuras 2.-
  • 28. 28 Tipo de datos derivados.- Funciones y estructuras #include <stdio.h> struct Libro { char titulo[100]; char autor[50]; int anioPublicacion; }; void mostrarLibro(struct Libro l) { printf("Título: %sn", l.titulo); printf("Autor: %sn", l.autor); printf("Año de Publicación: %dn", l.anioPublicacion); } int main() { struct Libro libro1 = {"Cien años de soledad", "Gabriel García Márquez", 1967}; mostrarLibro(libro1); return 0; } 3.-
  • 29. 29 Tipo de datos derivados.- Typedef Tipos de datos definidos por el usuario. Para eso utilizaremos la palabra reservada typedef. typedef int entero; A partir de esta declaración nuestro compilador reconocerá el tipo de dato entero, que será exactamente igual al tipo predefinido int. Ejemplo: typedef struct { int dia; int mes; int anio; } t_formato_fecha; Hemos definido un nuevo tipo de dato, llamado formato_fecha y ahora podríamos definir variables de este tipo de dato: t_formato_fecha fecha_hoy; t_formato_fecha fecha_nacimiento;
  • 30. 30 Tipo de datos derivados.- Typedef Los identificadores de los tipos de datos que creemos deben cumplir con las reglas habituales de C (nada de caracteres especiales, ni espacios). Como una buena practica es recomendable anteponer un identificador que nos permita reconocer nuestros tipos de datos creados del resto, en este ejemplo estamos utilizando la letra “t” para identificarlos. Tipos de datos Complejos. Es posible que los datos que componen un tipo complejo sean, a su vez de tipo complejo. Es posible tener un arreglo de estructuras, o una estructura cuyos miembros son arreglos u otras estructuras.
  • 31. 31 Tipo de datos derivados.- Typedef // Arreglo de estrcturas struct fecha { int dia; int mes; int anio; }; Struct fecha lista_de_fechas[100]; La variable lista_de_fechas es un arreglo de 100 elementos. Cada elemento no es un dato de tipo simple, sino una estructura fecha. Para acceder al miembro dia del elemento numero 5 del arreglo y asignarle el valor 20, tendríamos que hacer esto: lista_de_fechas[5].dia=20;
  • 32. 32 Tipo de datos derivados.- Typedef Estructuras de estructuras: struct s_fecha { int dia; int mes; int anio; }; struct s_hora { int hh; //horas int mm; //minutos int ss; //segundos }; struct calentadio { struct s_fecha fecha; struct s_hora hora; }; struct calendario fecha_hoy; La variable fecha_hoy es de tipo struct calendario, que es un tipo a su vez está compuesto de otras dos estructuras. Acceso: fecha_hoy.fecha.dia=5; fecha_hoy.fecha.mes=12; fecha_hoy.hora.hh=23;
  • 33. 33 Tipo de datos derivados.- union Las uniones son muy similares a las estructuras y se declaran de manera análoga, sustituyendo la palabra struct por union, y se utlizan exactamente igual. Union datos_persona { long int numero; char letra; char nombre[50]; char apellidos[100]; }; Union datos_persona alumno; // declaración de la variable La diferencia radica en que todos los miembros de la union comparten el mismo espacio en memoria, de manera que solo se puede tener almacenado uno de los miembro en cada elemento.
  • 34. 34 El tamaño de la union es igual al del elemento mas largo. Del ejemplo anterior: numero 4 bytes (32 bits) letra 1 byte (8 bits) nombre 50 bytes apellidos 100 bytes Por lo tanto, la union ocupa un espacio en memoria de 100 bytes, mientras que si fuera una estructura ocuparía 155 bytes, ya que cada miembro se almacena en un espacio de memoria propio. alumno.numero=8205769 Estamos asignando el número 8205769 a los primeros 4 bytes de la union, si posteriormente se hace esta otra asignación: strcpy(alumno.nombre, “Maria”) La cadena de “Maria” ocupara los primeros 50 bytes de la union, y por lo tanto, se habrá perdido el número que habíamos almacenado. Tipo de datos derivados.- union
  • 35. 35 Tipo de datos derivados.- union alumno.numero = 8205769; strcpy(alumno.nombre, “Maria”); printf(“%d”, alumno.numero); ???????? Las uniones se utilizan exactamente igual que las estructuras, con la ventaja de que ahorra espacio en memoria. Sin embargo, al compartir todos los miembros las mismas posiciones de memoria, la utilidad de las uniones queda reducida a determinadas problemáticas que queramos resolver, en las que esta limitante no represente un problema.
  • 36. 36 Tipo de datos derivados.- enumeración Una enumeración es un conjunto de constantes enteras. A la enumeración se le asigna un nombre que, a todos los efectos, se comporta como un nuevo tipo de datos de manera que las variables de este tipo son variables enteras que solo pueden contener los valores especificados en la enumeración. enum nombre_enumeracion {constante1=valor1, constante2=valor2………. ………………constanteN=valorN}; Ejemplo: enum dias_semana {LUNES=1, MARTES=2, MIERCOLES=3, JUEVES=4, VIERNES=5, SABADO=6, DOMINGO=7}; Las variables que declaran del tipo dias_semana serán, variables enteras y solo podrán recibir los valores del 1 al 7. días_semana dia; dia=“LUNES”; dia=1; Las dos asignaciones son equivalentes
  • 37. 37 Tipo de datos derivados.- enumeración Si no se especifican los valores en la enumeración, C les asigna automáticamente números enteros a partir de 0. Por ejemplo en la siguiente definición, la constante LUNES valdrá 0, MARTES, 1, etc… enum dias_semana { LUNES, MARTES, MIERCOLES, JUEVES, VIERNES, SABADO, DOMINGO}; Tenemos que considerar que los identificadores utilizados en una enumeración son constantes enteras y que, por lo tanto, lo siguiente imprime en la pantalla un 2, y no la palabra MIERCOLES. dias_semana dia; dia = MIERCOLES; printf(“%i”,dia);