TIPOS DE DATOS

34
TIPOS DE DATOS ESTRUCTURAS DE DATOS

description

TIPOS DE DATOS. ESTRUCTURAS DE DATOS. 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 - PowerPoint PPT Presentation

Transcript of TIPOS DE DATOS

Page 1: TIPOS DE DATOS

TIPOS DE DATOS

ESTRUCTURAS DE DATOS

Page 2: TIPOS DE DATOS

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

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

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

¿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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

UNIONES Permite que una variable se interprete de varias formas distintas,

dependiendo de la necesidad En una estructura

Siempre es válido referirse a cualquier miembro de la misma Si hay n miembros, hay n cajones de memoria

En una unión Solo trabajaremos con un miembro a la vez Hay un solo cajón de memoria, capaz de almacenar al mas grande de los

miembros Si el elemento escogido es mas pequeño, sobrara espacio

Page 33: TIPOS DE DATOS

UNIONES

typedef union ValorPolimorifco{

int valor_entero;

float valor_real;

};

ValorPolimorfico a;

a.valor_entero = 9;

a.valor_real = 8.9;

typedef union ValorPolimorifco{

int valor_entero;

float valor_real;

Tdato tipo;

};

ValorPolimorfico a;

printf(“Tipo de dato:”);

a.tipo = GetInteger();

if a.tipo == Entero then

a.valor_entero = 9;

elseif a.tipo == Real then

a.valor_real = 8.9;

typedef enum {Entero, Real} Tdato;

Page 34: TIPOS DE DATOS

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