tipos de datos
TRANSCRIPT
![Page 1: Tipos De Datos](https://reader036.vdocuments.co/reader036/viewer/2022062706/557b1f65d8b42a796a8b48b6/html5/thumbnails/1.jpg)
TIPOS DE DATOS
ESTRUCTURAS DE DATOSwww.espol.edu.ec
www.fiec.espol.edu.ec
![Page 2: Tipos De Datos](https://reader036.vdocuments.co/reader036/viewer/2022062706/557b1f65d8b42a796a8b48b6/html5/thumbnails/2.jpg)
OBJETIVOS
Manejo correcto y apropiado de punteros y reserva de
memoria dinámica
Reconocer el tipo de dato void y void * en C como una
herramienta de potencial importancia
Diferenciar entre arreglos y estructuras
Utilizar correctamente las estructuras, punteros a
estructuras, arreglos de estructuras, etc.
![Page 3: Tipos De Datos](https://reader036.vdocuments.co/reader036/viewer/2022062706/557b1f65d8b42a796a8b48b6/html5/thumbnails/3.jpg)
DATO Información en bruto, sin ningún significado Dado un enunciado, evento o acción, los datos
Permiten representar sus actores o participantes Analizándolos, se podrá obtener resultados deseados
Analicemos el siguiente hecho: El estudiante de nombre Pedro Velez de 22 años, tiene un promedio de 7.5
Podemos tomar los siguientes datos Nombre: Pedro Velez -> Conjunto de Caracteres Edad: 22 -> entero Promedio: 7.5 -> real
![Page 4: Tipos De Datos](https://reader036.vdocuments.co/reader036/viewer/2022062706/557b1f65d8b42a796a8b48b6/html5/thumbnails/4.jpg)
INFORMACIÓN Es el resultado deseado luego de procesar los datos Los datos, al ser procesados, se convierten en
información útil o resultados.
Procesamiento:Calcular salarios
Juan, Perez $320
Pedro, Rodriguez $310
Luis, Pozo $240
Datos de salida(se muestran en el monitor)
Datos de entrada(ingresados x teclado)
Juan, Perez
Pedro, Rodriguez
Luis, Pozo
160
155
120
Empleado Horas
Valor por hora = $2
![Page 5: Tipos De Datos](https://reader036.vdocuments.co/reader036/viewer/2022062706/557b1f65d8b42a796a8b48b6/html5/thumbnails/5.jpg)
¿Cómo representar los datos?
Los seres humanos: Usamos lenguaje natural o símbolos Ejemplo:
Para representar números, usamos el sistema decimal Para representar palabras, usamos el abecedario
La computadora: Usa conjuntos de 1s y 0s El dato mas pequeño en el computador es
Un 1 o un 0 -> bit
El conjunto de 8 bits -> 1 byte
![Page 6: Tipos De Datos](https://reader036.vdocuments.co/reader036/viewer/2022062706/557b1f65d8b42a796a8b48b6/html5/thumbnails/6.jpg)
TIPOS DE DATOS Los datos se clasifican en TIPOS Son los diferentes dominios existentes. Ejemplo:
Edad, Año de Nacimiento, Numero de multas Tienen dominio numérico
Nombre, Dirección, Num. Cedula, Caen en el dominio de la información tipo texto
Y las operaciones permitidas para dicho dominio
Un conjunto de valores y operaciones definidas solo para esos valores
![Page 7: Tipos De Datos](https://reader036.vdocuments.co/reader036/viewer/2022062706/557b1f65d8b42a796a8b48b6/html5/thumbnails/7.jpg)
RECORDAR Un tipo de dato es el conjunto de valores
Al que puede pertenecer una constante Que puede asumir una variable o expresión Que puede ser generado por una función
De una constante, variable o expresión Se puede deducir su tipo de dato Ya sea de su forma o de su declaración Sin necesidad que se ejecute ningún proceso
Las operaciones entre datos Necesitan participantes (argumentos) de determinado tipo Producen resultados de otro o el mismo tipo
![Page 8: Tipos De Datos](https://reader036.vdocuments.co/reader036/viewer/2022062706/557b1f65d8b42a796a8b48b6/html5/thumbnails/8.jpg)
TIPOS DE DATOS BASICOS Los podemos distinguir fácilmente, están en el diario vivir:
El Sr. Vera de 63 años tiene cedula No. 0908815533, y paga $120 de impuestos
Son tipos de datos simples Que permiten representar información numérica, caracteres, etc.
NOMBRE CONJUNTO DE VALORES OPERACIONES
Enteros Negativos y positivos sin decimal Sumar, restar, dividir, multiplicar, residuo
Reales Negativos y positivos, con decimal Sumar, restar, dividir, multiplicar
Lógicos Verdadero o Falso(1 o 0) And, Or, Not
Caracteres Letras, números, especiales, juntos forman una cadena
Sumar carácter + entero restar, multiplicar por entero
![Page 9: Tipos De Datos](https://reader036.vdocuments.co/reader036/viewer/2022062706/557b1f65d8b42a796a8b48b6/html5/thumbnails/9.jpg)
Y EN LA COMPUTADORA? Solo vienen integrados los tipos de datos básicos En la computadora
Cada byte es un casillero y tiene una dirección en memoria
Los datos (números y letras) se almacena en estos casilleros
¿Cuantas casilleros ocupa un dato? Depende de su tipo y del hardware de la computadora Un entero puede ocupar casillas de hasta 4 bytes Un doble siempre ocupara mas, por su mayor precisión
PERO, un carácter SIEMPRE ocupara casillas de 1 byte
1000
1001
1002
1003
![Page 10: Tipos De Datos](https://reader036.vdocuments.co/reader036/viewer/2022062706/557b1f65d8b42a796a8b48b6/html5/thumbnails/10.jpg)
ALMACENANDO DATOS
TIPO DE DATO #bytes Representación interna En ANSI C
ENTEROS 248
Positivos: conjunto de bits38 -> 00100110Negativos:Complemento a Dos-38 -> 11011001
intlong
REALES 816
Mantisa x base(exponente)
387.53 -> 38753 x 10-2
00000000100101110110000111111110
floatdouble
CARACTERES 1 ASCII11000000 -> ‘A’
char
![Page 11: Tipos De Datos](https://reader036.vdocuments.co/reader036/viewer/2022062706/557b1f65d8b42a796a8b48b6/html5/thumbnails/11.jpg)
DECLARACION DE VARIABLES Una declaración de variables en C incluye
Tipo de dato y Nombre de variable(identificador) Ejemplo:
int a, b;float c;
¿Para que se declaran variables? Especifica cuanta memoria debe reservarse y Como se van a interpretar dichos datos
f = a + b Es una suma de enteros, que al final se convierte a real
Al declarar una variable se le asigna espacio en memoria y una dirección para dicho espacio
int a;4 bytes,dir: 100
1 byte,dir: 104
100101102103104
char c;
![Page 12: Tipos De Datos](https://reader036.vdocuments.co/reader036/viewer/2022062706/557b1f65d8b42a796a8b48b6/html5/thumbnails/12.jpg)
DIRECCIONES DE MEMORIA
1000
1001
1002
1003
&a es 1000
Las variables Tienen direcciones de memoria
Si deseamos conocer dicha dirección En lenguaje C Se usa el operador & de dirección
Ejemplo:int a;a = 3;printf(“Valor:%d Dir: %d”, a, &a);
Un puntero Es una variable que puede almacenar dirección de memoria
![Page 13: Tipos De Datos](https://reader036.vdocuments.co/reader036/viewer/2022062706/557b1f65d8b42a796a8b48b6/html5/thumbnails/13.jpg)
DECLARACION DE PUNTEROS
Un tipo de dato El puntero solo podrá almacenar direcciones de
memoria de variables del tipo especificado Se pueden definir punteros de cualquier tipo:
float *pf;
char *pc;
Un identificador que siempre va antecedido del operador *pt almacena la
dirección de x, se dice que pt apunta
a x
x
pt
int *p;
100010011002100310041005
1000
int *pt, x;x = 3;pt = &x;
3
![Page 14: Tipos De Datos](https://reader036.vdocuments.co/reader036/viewer/2022062706/557b1f65d8b42a796a8b48b6/html5/thumbnails/14.jpg)
CONSULTANDO CONTENIDO Si un puntero apunta a una variable
A través del puntero se puede llegar a conocer todo sobre la variable Ejemplo:
c = ‘A’
printf(“%c”, *pc1);
*pc1 = ‘N’
printf(“%c”,c);
Es equivalente a :printf(“%c”, c);
Es equivalente a :c = ‘N’
Imprime ‘N’ pues c ya cambio
char c, *pc1, *pc2;pc1 = &c;
Si quiero conocer la dirección, uso directamente el punteroprintf(“%d”, pc1); //Imprimo la dir. Almacenada por pc1pc2 = pc1; //pc2 almacena la misma dir. que pc1
Si quiero conocer el contenido al que apunta un puntero, uso el operador *, sobre dicho puntero
Ejercicio
![Page 15: Tipos De Datos](https://reader036.vdocuments.co/reader036/viewer/2022062706/557b1f65d8b42a796a8b48b6/html5/thumbnails/15.jpg)
EJERCICIO EN CLASE
*p1 = *p2;
int x,y;
int *p1,*p2;
x = -42;
y = 163;
p1 = &x;
p2 = &y;
*p1 = 17;
*p2 = x+5;
1000
1004
Es equivalente a escribir x = y;p1 = p2;
Esto indica que p1 ahora apunta a la
misma variable que p2
1004
p1 = NULL;
p2 = NULL; Esto es equivalente a “encerar” el puntero, y decir que no apunta a
ninguna variable
1000
1004
1008
1012
x
y
p1
p2
-42
22
1000
1004
1722
0
0
163
1004
![Page 16: Tipos De Datos](https://reader036.vdocuments.co/reader036/viewer/2022062706/557b1f65d8b42a796a8b48b6/html5/thumbnails/16.jpg)
PASO DE PARAMETROS Las funciones son porciones de código
Ejecutan una tarea especifica
Usualmente toman datos de entrada->parámetros
Y retornan un valor
Los parámetros se pueden enviar de dos formas: Por valor
Por referencia
![Page 17: Tipos De Datos](https://reader036.vdocuments.co/reader036/viewer/2022062706/557b1f65d8b42a796a8b48b6/html5/thumbnails/17.jpg)
PASO POR VALOR La función no recibe la variable enviada
Recibe una copia Similar a cuando va al hacer algún tramite y le piden al cédula
No entrega la cédula verdadera Entrega una copia La verdadera estará segura, aunque quemen y destruyan la copia
Ejemplo: x = 5printf(“%d\n”,x);funct(x);printf(“%d\n”,x);
void funct(int y){y = y+1;printf(“%d\n”,y);
}
Se imprime 5, el valor de x no cambia aunque la función haya
intentado modificarla
![Page 18: Tipos De Datos](https://reader036.vdocuments.co/reader036/viewer/2022062706/557b1f65d8b42a796a8b48b6/html5/thumbnails/18.jpg)
PASO POR REFERENCIA Aquí si la función recibe exactamente la variable enviada
No hay copias Si algo se le hace al parámetro, se le esta haciendo a la variable Para esto, se usan punteros La función trabaja con un puntero a la variable enviada
Sabe todo sobre esa variable y se pude acceder a través de *
Ejemplo: x = 5printf(“%d\n”,x);funct(&x);printf(“%d\n”,x);
void funct(int *py){*py = *py+1;printf(“%d\n”,*py);
}
Se imprime 6, el valor de x cambió dentro de la función
Ejercicio
![Page 19: Tipos De Datos](https://reader036.vdocuments.co/reader036/viewer/2022062706/557b1f65d8b42a796a8b48b6/html5/thumbnails/19.jpg)
TIPOS DE DATOS COMPUESTOS En ocasiones se necesitan
tipos de datos mas complejos, y estructurados Variables que almacenen mas de
un valor Variables que representen
información de la vida real Estarán formados a partir de
tipos de datos simples
En C, tenemos:
TIPO FORMATO DECLARACION
Bytes
ARREGLOS int arrEj[10]; 10*2 = 20
ESTRUCTURAS typedef struct TReg{int ID;char Texto[100];
}Reg;
2 + 100 = 102
UNIONES typedef union TUn{int ID;char Texto[100];
}Un;
100
![Page 20: Tipos De Datos](https://reader036.vdocuments.co/reader036/viewer/2022062706/557b1f65d8b42a796a8b48b6/html5/thumbnails/20.jpg)
ARREGLOS Conjunto de elementos
Finito, Ordenado y Homogéneo, Todos sus elementos son del mismo tipo
Un arreglo estático se declaraint A[100];
El tipo de los elementos, el identificador y El numero de elementos (dimensión)
Cada elemento del arreglo tiene un índice En C, siempre el índice mas pequeño es el 0: limite inferior El limite superior, es 1 menos que la dimensión
Si el arreglo tiene 100 elementos, el índice mas alto es el 99
Y si un entero ocupa 4 bytes, el arreglo ocupa 400 bytes seguidos
0 1 2 3 4 ...
A
99
![Page 21: Tipos De Datos](https://reader036.vdocuments.co/reader036/viewer/2022062706/557b1f65d8b42a796a8b48b6/html5/thumbnails/21.jpg)
OPERACIONES No basta con la declaración, para ser tratado como un tipo
de dato Faltan las operaciones para actuar sobre él
Consulta de un elemento//Consulto el contenido de los elementos 4 y 5 de A
printf(“%d %d”,A[4], A[5]);
Modificación de un elementoA[3] = 2; //Almaceno un valor en el elemento 3 de A
for(i = 0; i < 100; i++)A[i] = 0;
Tipo de dato:Conjunto de valores y
operaciones definidas solo para esos valores
![Page 22: Tipos De Datos](https://reader036.vdocuments.co/reader036/viewer/2022062706/557b1f65d8b42a796a8b48b6/html5/thumbnails/22.jpg)
REPRESENTACION INTERNA
1000
1008
1016
1024
1032
Lista[0]
Lista[1]
Lista[2]
Lista[3]
Lista[4]
&Lista[i] -> &Lista[0] + (i*sizeof(Lista[0]))
Cuantos bytes ocupa un tipo de dato o variable? En C lo indica el operador sizeof Ejemplo:
int a;
printf(“%d %d”, sizeof(int), sizeof(a));
El computador internamente No almacena la dirección de todos los elementos del
arreglo Solo almacena la dirección del primer elemento El resto lo calcula así:
![Page 23: Tipos De Datos](https://reader036.vdocuments.co/reader036/viewer/2022062706/557b1f65d8b42a796a8b48b6/html5/thumbnails/23.jpg)
RESERVA DE MEMORIA DINAMICA La declaración de una variable
Siempre reserva memoria Aunque la variable no se use, ya se reservo memoria para ella: ESTATICA
Si deseamos reservar memoria, pero no en la declaración Si no, a voluntad dentro del programa La reserva seria dinámica
En C se usan Punteros y Las funciones de librería
#include <stdlib.h>void *malloc(size_t size);
int *a; //No se reserva nada../*Cuando se desee, se reserva*/a = malloc(sizeof(int)); //La variable normalmente*a = 3;
a no apunta a otra variable,
tiene memoria propia, solo para
el
![Page 24: Tipos De Datos](https://reader036.vdocuments.co/reader036/viewer/2022062706/557b1f65d8b42a796a8b48b6/html5/thumbnails/24.jpg)
ARREGLOS DINAMICOS En ocasiones deseamos usar arreglos
Donde no hayamos “predefinido” cuantos elementos max. tendremos Queremos usar arreglos dinámicos
Se declara el arreglo “potencial”:int *arreglo;
Dentro del programa, se pide memoria cuando se necesite:arreglo = malloc(sizeof(int)*20); Para indicar el nuevo tamaño se
puede usar una constante o una variable,o cualquier expresión
main(){int *arreglo, n;printf(“Ingrese el tamaño del arreglo:”);n = GetInteger();arreglo = malloc(sizeof(int)*n);printf(“Ahora tiene %d elementos para trabajar\n”,n);...
}
![Page 25: Tipos De Datos](https://reader036.vdocuments.co/reader036/viewer/2022062706/557b1f65d8b42a796a8b48b6/html5/thumbnails/25.jpg)
Y LIBERA.. Al pedir memoria dinámicamente Se debe liberar dentro del programa En C se libera usando la función free
int *a;
a = malloc...;
…
free(a);
Cuando se libera para una variable
Ejercicio
![Page 26: Tipos De Datos](https://reader036.vdocuments.co/reader036/viewer/2022062706/557b1f65d8b42a796a8b48b6/html5/thumbnails/26.jpg)
ARITMETICA DE PUNTEROS Los operadores + y –
Se pueden usar con punteros Pero el significado de la operación cambia un poco
Si un entero ocupa 4 bytes, tomemos este ejemploint x;int *p;p = &x;
Si la dirección de x es un valor 100 y decimosp = p+2;
Que dirección almacena pi? 102 108 104
La suma indica que p se mueva 2 “enteros” mas adelante
Cada entero equivale a 4 bytes100 + 2*4 = 108
![Page 27: Tipos De Datos](https://reader036.vdocuments.co/reader036/viewer/2022062706/557b1f65d8b42a796a8b48b6/html5/thumbnails/27.jpg)
EJERCICIO EN CLASEmain(){
double Lista[3];double *p,*p1,*p2;
int k;Lista[0] = 1;Lista[1] = 1.1;Lista[2] = 1.2;p = Lista;p = p + 2;printf(“%d”, *p);p = p - 1;printf(“%d”, *p);p1 = Lista+2;p2 = &Lista[0];k = p1-p2;printf(“%d”, k);
}
1000
1008
1016
Lista[0]
Lista[1]
Lista[2]
p
p2
p1p se mueve 2 desfases
p retrocede un desfase
Da el total de desfases entre p1 y
p2
1
1.1
1.2
Ejercicio
![Page 28: Tipos De Datos](https://reader036.vdocuments.co/reader036/viewer/2022062706/557b1f65d8b42a796a8b48b6/html5/thumbnails/28.jpg)
PASO DE ARREGLOS A FUNCIONES
Al pasar un arreglo a una función debe tomarse en cuenta ¿Necesitare también el tamaño del arreglo? Si es así, también debe incluirse como parámetro
En prototipos y cabecerafloat CalcPromedio(float A[], int size);
float funct(float B[]);
En el cuerpo de la funciónfloat CalcPromedio(float A[], int size){
…..A[i] = 3;
}
Siempre recuerde que El paso de arreglos, es un paso por referencia Ejercicio
![Page 29: Tipos De Datos](https://reader036.vdocuments.co/reader036/viewer/2022062706/557b1f65d8b42a796a8b48b6/html5/thumbnails/29.jpg)
ARREGLOS BIDIMENSIONALES La programación ofrece innumerables opciones Un elemento de un arreglo, puede ser otro arreglo
int A[3][3]; A[3] es un arreglo de tres elementos Cada elemento es otro arreglo de 3 elementos enteros
(0,0) (0,1) (0,2)
(1,0) (1,1) (1,2)
(2,0) (2,1) (2,2)
A[0]
A[1]
A[2]
A[0][0]
A[1][0]
A[2][0]
A[0]1]
A[1][1]
A[2][1]
A[0][2]
A[1][2]
A[2][2]
int A[3][3];
Ejercicio
![Page 30: Tipos De Datos](https://reader036.vdocuments.co/reader036/viewer/2022062706/557b1f65d8b42a796a8b48b6/html5/thumbnails/30.jpg)
ESTRUCTURAS o REGISTROS Es un grupo de “componentes”. Cada componente
Tiene su propio identificador, y Se conoce como “elemento” o “campo” de la estructura
Ejemplo:
Es la declaración del nuevo “tipo de dato”: NombreCompleto Con este tipo de dato, podremos crear “variables”:
NombreCompleto snombre, enombre;
typedef struct TNombreCompleto{char Primero[10];char Inicial;char Ultimo[10];
}NombreCompleto;
![Page 31: Tipos De Datos](https://reader036.vdocuments.co/reader036/viewer/2022062706/557b1f65d8b42a796a8b48b6/html5/thumbnails/31.jpg)
USANDO ESTRUCTURAS
primero
inicial
ultimo
snombreLos registros de tipo NombreCompleto, tendrán la misma “estructura” Cada dato tiene diferente tamaño y espacio en memoriaCada dato representa una información diferente
snombre es una variable de tipo NombreCompleto Tiene la misma forma que la del nuevo tipo de dato Cada miembro/campo ocupa memoria Para acceder a un campo, se indica,
La variable seguida de un punto y del nombre del campo. Ejemplo
snombre.Inicial = ‘L’;
Ejercicio
![Page 32: Tipos De Datos](https://reader036.vdocuments.co/reader036/viewer/2022062706/557b1f65d8b42a796a8b48b6/html5/thumbnails/32.jpg)
AMBITO DE VARIABLES Los parámetros y variables, dentro de una función,
Son variables con ámbito local Solo son validas en ese ambiente,
Las variables también pueden tener un ámbito “global” Empiezan a existir desde su declaración, y Son liberadas con el alcance de un archivo: variables externas
Para darle privacidad a una variable Para que no pueda ser vista por otros archivos, Se la declara static, con ámbito global para archivo únicamente