1 / 34

TIPOS DE DATOS

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

moses
Download Presentation

TIPOS DE DATOS

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. TIPOS DE DATOS ESTRUCTURAS DE DATOS

  2. 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.

  3. 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

  4. Datos de salida(se muestran en el monitor) Empleado Horas Juan, Perez Pedro, Rodriguez Luis, Pozo 160 155 120 Juan, Perez $320 Pedro, Rodriguez $310 Luis, Pozo $240 Valor por hora = $2 Procesamiento: Calcular salarios Datos de entrada(ingresados x teclado) INFORMACIÓN • Es el resultado deseado luego de procesar los datos • Los datos, al ser procesados, se convierten en información útil o resultados.

  5. ¿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

  6. 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

  7. 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

  8. 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.

  9. 1000 1001 1002 1003 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

  10. ALMACENANDO DATOS

  11. 100 101 102 103 104 DECLARACION DE VARIABLES Al declarar una variable se le asigna espacio en memoria y una dirección para dicho espacio • 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 4 bytes, dir: 100 int a; char c; 1 byte, dir: 104

  12. 1000 1001 1002 1003 DIRECCIONES DE MEMORIA • Las variables • Tienen direcciones de memoria • Si deseamos conocer dicha dirección • En lenguaje C • Se usa el operador & de dirección &a es 1000 • Ejemplo: int a; a = 3; printf(“Valor:%d Dir: %d”, a, &a); • Un puntero • Es una variable que puede almacenar dirección de memoria

  13. DECLARACION DE PUNTEROS int *p; • 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 * x 1000 3 1001 1002 1003 1000 1004 pt 1005 • int *pt, x; pt almacena la dirección de x, se dice que pt apunta a x • x = 3; • pt = &x;

  14. CONSULTANDO CONTENIDO • Si un puntero apunta a una variable • A través del puntero se puede llegar a conocer todo sobre la variable • Ejemplo: • char c, *pc1, *pc2; • pc1 = &c; • Si quiero conocer la dirección, uso directamente el puntero • printf(“%d”, pc1); //Imprimo la dir. Almacenada por pc1 • pc2 = pc1; //pc2 almacena la misma dir. que pc1 • Si quiero conocer el contenido al que apunta un puntero, uso el operador *, sobre dicho puntero Es equivalente a : printf(“%c”, c); • c = ‘A’ • printf(“%c”, *pc1); • *pc1 = ‘N’ • printf(“%c”,c); Es equivalente a : c = ‘N’ Ejercicio Imprime ‘N’ pues c ya cambio

  15. 1000 x 1004 y 1008 p1 1012 p2 EJERCICIO EN CLASE int x,y; int *p1,*p2; x = -42; y = 163; p1 = &x; p2 = &y; *p1 = 17; *p2 = x+5; -42 17 22 163 22 1000 1004 1004 1000 0 1004 1004 0 *p1 = *p2; Es equivalente a escribir x = y; Esto indica que p1 ahora apunta a la misma variable que p2 p1 = p2; p1 = NULL; p2 = NULL; Esto es equivalente a “encerar” el puntero, y decir que no apunta a ninguna variable

  16. 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

  17. 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 = 5 printf(“%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

  18. 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 = 5 printf(“%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

  19. 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:

  20. 0 1 2 3 4 99 ARREGLOS • Conjunto de elementos • Finito, Ordenado y Homogéneo, • Todos sus elementos son del mismo tipo • Un arreglo estático se declara int 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 A ...

  21. OPERACIONES Tipo de dato: Conjunto de valores y operaciones definidas solo para esos valores • 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 elemento A[3] = 2; //Almaceno un valor en el elemento 3 de A for(i = 0; i < 100; i++) A[i] = 0;

  22. 1000 Lista[0] 1008 Lista[1] Lista[2] 1016 Lista[3] 1024 Lista[4] 1032 REPRESENTACION INTERNA • 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í: &Lista[i] -> &Lista[0] + (i*sizeof(Lista[0]))

  23. RESERVA DE MEMORIA DINAMICA a no apunta a otra variable, tiene memoria propia, solo para el • 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 int *a; //No se reserva nada .. /*Cuando se desee, se reserva*/ a = malloc(sizeof(int)); //La variable normalmente *a = 3; #include <stdlib.h> void *malloc(size_t size);

  24. 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); ... }

  25. Y LIBERA.. • Al pedir memoria dinámicamente • Se debe liberar dentro del programa • En C se libera usando la función free Cuando se libera para una variable int *a; a = malloc...; … free(a); Ejercicio

  26. 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 ejemplo int x; int *p; p = &x; • Si la dirección de x es un valor 100 y decimos p = p+2; • Que dirección almacena pi? La suma indica que p se mueva 2 “enteros” mas adelante Cada entero equivale a 4 bytes 100 + 2*4 = 108 102 108 104

  27. p2 p 1000 Lista[0] 1008 Lista[1] 1016 Lista[2] p1 EJERCICIO EN CLASE main(){ 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); } 1 1.1 1.2 p se mueve 2 desfases p retrocede un desfase Da el total de desfases entre p1 y p2 Ejercicio

  28. 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 cabecera float CalcPromedio(float A[], int size); float funct(float B[]); • En el cuerpo de la función float CalcPromedio(float A[], int size){ ….. A[i] = 3; } • Siempre recuerde que • El paso de arreglos, es un paso por referencia Ejercicio

  29. A[0] A[0][0] A[0]1] A[0][2] A[1] A[1][0] A[1][1] A[1][2] A[2] A[2][0] A[2][1] A[2][2] 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 int A[3][3]; Ejercicio

  30. 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;

  31. primero inicial ultimo USANDO ESTRUCTURAS • 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’; Los registros de tipo NombreCompleto, tendrán la misma “estructura” Cada dato tiene diferente tamaño y espacio en memoria Cada dato representa una información diferente snombre Ejercicio

  32. 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

  33. UNIONES typedef enum {Entero, Real} Tdato; 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 union ValorPolimorifco{ int valor_entero; float valor_real; }; ValorPolimorfico a; a.valor_entero = 9; a.valor_real = 8.9;

  34. 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

More Related