SlideShare una empresa de Scribd logo
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
   Utilizar correctamente las estructuras, punteros a
    estructuras, arreglos de estructuras, etc.
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
INFORMACIÓN
      Es el resultado deseado luego de procesar los datos
      Los datos, al ser procesados, se convierten en
       información útil o resultados.

    Empleado              Horas                       Datos de salida(se muestran
    Juan, Perez           160                                en el monitor)
    Pedro, Rodriguez      155                               Juan, Perez        $320
    Luis, Pozo            120                               Pedro, Rodriguez   $310
                                                            Luis, Pozo         $240
    Valor por hora = $2



Datos de entrada(ingresados x
           teclado)               Procesamiento:
                                  Calcular salarios
¿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
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
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
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   Sumar carácter + entero restar,
                       forman una cadena                     multiplicar por entero
Y EN LA COMPUTADORA?
                                                                1000
   Solo vienen integrados los tipos de datos básicos
                                                                1001
 En la computadora
                                                                1002
    Cada byte es un casillero y tiene una dirección en memoria
                                                                1003
 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
ALMACENANDO DATOS
TIPO DE DATO   #bytes   Representación interna             En ANSI C

ENTEROS        2        Positivos: conjunto de bits        int
               4        38 -> 00100110                     long
               8        Negativos:Complemento a Dos
                        -38 -> 11011001

REALES         8        Mantisa x base(exponente)          float
               16       387.53 -> 38753 x 10-2             double
                        00000000100101110110000111111110
CARACTERES     1        ASCII                              char
                        11000000 -> ‘A’
DECLARACION DE                                                      Al declarar una variable se
                                                                    le asigna espacio en

VARIABLES                                                           memoria y una dirección
                                                                    para dicho espacio

   Una declaración de variables en C incluye
        Tipo de dato y
        Nombre de variable(identificador)                                100
                                                                                         4 bytes,
                                                          int a;          101
                                                                                         dir: 100
        Ejemplo:                                                         102
           int a, b;                                      char c;         103
                                                                                         1 byte,
                                                                          104            dir: 104
           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
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
                                                             1000
                                                                    &a es
    Ejemplo:                                                1001   1000
           int a;
           a = 3;                                            1002
           printf(“Valor:%d Dir: %d”, a, &a);
                                                             1003
    Un puntero
         Es una variable que puede almacenar dirección de
          memoria
DECLARACION DE
PUNTEROS
                                    int *p;
   Un tipo de dato
        El puntero solo podrá almacenar direcciones de
         memoria de variables del tipo especificado
                                                         1000
        Se pueden definir punteros de cualquier tipo:   1001       3      x
                                                         1002
              float *pf;                                 1003

              char *pc;
                                                         1004
                                                         1005
                                                                1000 pt
   Un identificador que siempre va antecedido del operador *
                         int *pt, x;                 pt almacena la
                         x = 3;                  dirección de x, se dice
                         pt = &x;                 que pt apunta a x
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);                            Es equivalente a :
Ejercicio                                                                        c = ‘N’
                             *pc1 = ‘N’
                             printf(“%c”,c);                              Imprime ‘N’ pues c ya
                                                                                cambio
EJERCICIO EN CLASE
 int x,y;
 int *p1,*p2;
                        1000                -42
                                             17
                                             22                x
 x = -42;
 y = 163;               1004                163
                                             22                y
 p1 = &x;
                        1008           1004
                                       1000
                                        1004
                                        1000
                                         0                     p1
 p2 = &y;
 *p1 = 17;              1012            1004
                                        1004
                                          0                    p2
 *p2 = x+5;
 *p1 = *p2;
                Es equivalente a escribir
                         x = y;
 p1 = p2;                                          Esto indica que p1
                                                    ahora apunta a la
 p1 = NULL;                                       misma variable que p2

 p2 = NULL;          Esto es equivalente a “encerar” el
                  puntero, y decir que no apunta a ninguna
                                   variable
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
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
                  x = 5
   Ejemplo:      printf(“%dn”,x);
                                                      Se imprime 5, el valor de x no
                  funct(x);                          cambia aunque la función haya
                  printf(“%dn”,x);                       intentado modificarla

                  void funct(int y){
                          y = y+1;
                          printf(“%dn”,y);
                  }
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 *
                         x = 5
   Ejemplo:             printf(“%dn”,x);                Se imprime 6, el valor de x cambió
                         funct(&x);                              dentro de la función
                         printf(“%dn”,x);
                         void funct(int *py){
                                 *py = *py+1;
                                 printf(“%dn”,*py);
Ejercicio
                         }
TIPOS DE DATOS
COMPUESTOS
   En ocasiones se necesitan            TIPO           FORMATO                    Bytes
                                                        DECLARACION
    tipos de datos mas complejos,
                                         ARREGLOS       int arrEj[10];             10*2 = 20
    y estructurados
       Variables que almacenen mas de   ESTRUCTURAS typedef struct TReg{          2 + 100 =
                                                          int ID;                  102
        un valor
                                                          char Texto[100];
       Variables que representen                       }Reg;
        información de la vida real      UNIONES        typedef union TUn{         100
       Estarán formados a partir de                            int ID;
                                                                char Texto[100];
        tipos de datos simples
                                                        }Un;
   En C, tenemos:
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           A
      El numero de elementos (dimensión)
                                                                    0    1    2   3   4   ... 99
   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
Tipo de dato:

OPERACIONES                           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;
REPRESENTACION INTERNA
   Cuantos bytes ocupa un tipo de dato o variable?       1000    Lista[0]
      En C lo indica el operador sizeof
      Ejemplo:
                                                          1008    Lista[1]
           int a;
           printf(“%d %d”, sizeof(int), sizeof(a));
                                                          1016    Lista[2]
   El computador internamente
      No almacena la dirección de todos los elementos del
       arreglo                                             1024   Lista[3]
      Solo almacena la dirección del primer elemento
                                                                  Lista[4]
      El resto lo calcula así:                            1032


         &Lista[i]   -> &Lista[0] + (i*sizeof(Lista[0]))
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   int *a; //No se reserva nada
                                                 ..
        La reserva seria dinámica               /*Cuando se desee, se reserva*/
                                                 a = malloc(sizeof(int));
                                                 //La variable normalmente
   En C se usan                                 *a = 3;
        Punteros y                  #include <stdlib.h>
                                     void *malloc(size_t size);
        Las funciones de librería
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
     main(){                                     usar una constante o una variable,o
                                                          cualquier expresión
               int *arreglo, n;
               printf(“Ingrese el tamaño del arreglo:”);
               n = GetInteger();
               arreglo = malloc(sizeof(int)*n);
               printf(“Ahora tiene %d elementos para trabajarn”,n);
               ...
     }
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
         int *a;            variable
         a = malloc...;
         …
         free(a);
                                             Ejercicio
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;                                La suma indica que p se mueva 2
                                                    “enteros” mas adelante
         int *p;                                Cada entero equivale a 4 bytes
         p = &x;                                        100 + 2*4 = 108

   Si la dirección de x es un valor 100 y decimos
         p = p+2;
   Que dirección almacena pi?          102       108           104
p2
EJERCICIO EN CLASE
main(){
          double Lista[3];     p               1000
          double *p,*p1,*p2;                                            Lista[0]
                                                             1
          int k;                               1008
          Lista[0] = 1;                                      1.1        Lista[1]
          Lista[1] = 1.1;
          Lista[2] = 1.2;                      1016
                                                                        Lista[2]
          p = Lista;                                         1.2
          p = p + 2;
          printf(“%d”, *p);    p se mueve 2                             p1
          p = p - 1;             desfases
          printf(“%d”, *p);
          p1 = Lista+2;            p retrocede un
          p2 = &Lista[0];              desfase
          k = p1-p2;
          printf(“%d”, k);         Da el total de desfases
                                       entre p1 y p2
}
             Ejercicio
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
                                                          Ejercicio
        El paso de arreglos, es un paso por referencia
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];
                   (0,0)   (0,1)   (0,2)   A[0]          A[0][0] A[0]1]   A[0][2]


                   (1,0)   (1,1)   (1,2)   A[1]          A[1][0] A[1][1] A[1][2]
 Ejercicio
                   (2,0)   (2,1)   (2,2)   A[2]          A[2][0] A[2][1] A[2][2]
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:        typedef struct TNombreCompleto{
                            char Primero[10];
                            char Inicial;
                            char Ultimo[10];
                    }NombreCompleto;

   Es la declaración del nuevo “tipo de dato”: NombreCompleto
   Con este tipo de dato, podremos crear “variables”:
             NombreCompleto snombre, enombre;
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          snombre
    misma “estructura”                     primero          inicia
    Cada dato tiene diferente                               l
    tamaño y espacio en
                                                                            Ejercicio
    memoria
                                           ultimo
    Cada dato representa una
    información diferente
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
UNIONES
                                  typedef enum {Entero, Real} Tdato;

                                  typedef union ValorPolimorifco{
                                         int valor_entero;
typedef union ValorPolimorifco{          float valor_real;
       int valor_entero;                 Tdato tipo;
       float valor_real;          };
};
                                  ValorPolimorfico a;
ValorPolimorfico a;               printf(“Tipo de dato:”);
a.valor_entero = 9;               a.tipo = GetInteger();
a.valor_real = 8.9;               if a.tipo == Entero then
                                         a.valor_entero = 9;
                                  elseif a.tipo == Real then
                                         a.valor_real = 8.9;
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

Más contenido relacionado

PPT
DOC
SeúDocodigo
PDF
PDF
Ejercicios uml
PDF
Arreglos C#
DOCX
Inføяmǻticǻ ii objetivo 1.2.5
PPSX
Tema 1-2 identificadores - variable y constante
PPTX
Tutorial tipos de dato
SeúDocodigo
Ejercicios uml
Arreglos C#
Inføяmǻticǻ ii objetivo 1.2.5
Tema 1-2 identificadores - variable y constante
Tutorial tipos de dato

La actualidad más candente (17)

PDF
Arreglos en c ++
PPT
Lenguajec intorduccionui
DOCX
Utpl(programacion t4..)
PPT
Presentacion 3
PPT
Presentacion 4
PPTX
Introduccion a la programacion
PDF
El primer objetivo de un programa informático es el manejo de datos
DOC
Guia de programacion Delfina 2010
PPTX
1. vers. cap-3_tipos_dedatos
DOCX
Metodología para la solución de problemas
DOCX
PPT
Clase 3introduccion a_lenguace_c
PPTX
Programación
PDF
PDF
Aejemplosc
PDF
3.3.- Operadores y Expresiones
PPTX
Elementos de un programa c++
Arreglos en c ++
Lenguajec intorduccionui
Utpl(programacion t4..)
Presentacion 3
Presentacion 4
Introduccion a la programacion
El primer objetivo de un programa informático es el manejo de datos
Guia de programacion Delfina 2010
1. vers. cap-3_tipos_dedatos
Metodología para la solución de problemas
Clase 3introduccion a_lenguace_c
Programación
Aejemplosc
3.3.- Operadores y Expresiones
Elementos de un programa c++
Publicidad

Destacado (20)

PDF
State Symposium Uttarakhand 2008
PDF
Madera ecológica
PDF
Competencias parentales bt
PPTX
Maria Malerba - Bari 13/09/2016
PDF
PPTX
Metabolink IRCCS Casa Sollievo della Sofferenza 14 settembre 2016
PPT
Giov Hooligans
PDF
Leyes
PPTX
PPTX
Bram Buckingham%20 Palace[1]
PPTX
Sesión 15
PDF
Saborin.[1]
PPT
Comics
PDF
FINAL Quinlan Case Comp Program 2016
PPTX
Impatto della digitalizzalizone della PA sui professionisti - Elisa Santorsol...
PPT
Gennaro Ranieri - Amministratore unico InnovaPuglia
PPSX
Entretenimento .
PPTX
Cross selling upload
PPT
Animal Husbandry World Vision 2
State Symposium Uttarakhand 2008
Madera ecológica
Competencias parentales bt
Maria Malerba - Bari 13/09/2016
Metabolink IRCCS Casa Sollievo della Sofferenza 14 settembre 2016
Giov Hooligans
Leyes
Bram Buckingham%20 Palace[1]
Sesión 15
Saborin.[1]
Comics
FINAL Quinlan Case Comp Program 2016
Impatto della digitalizzalizone della PA sui professionisti - Elisa Santorsol...
Gennaro Ranieri - Amministratore unico InnovaPuglia
Entretenimento .
Cross selling upload
Animal Husbandry World Vision 2
Publicidad

Similar a ED 01 tipos_datos (20)

PPTX
Manejo de puntero spresentacion
PPT
Tipos De Datos
PPT
Tipos de Datos en Java, String Entero Decimales
PPT
1.Tipos de Datos.ppt
PPT
1.Tipos de Datos.ppt
PPT
1.Tipos de Datos.ppt
PPT
1.tipos de datos
PPT
Tipos de Datos y su tipologia en contexto.ppt
PPT
00 Tipos de Datos.ppt
PPTX
Tipos de datos
PPTX
Estructura sintactica de los lenguajes de programacion
PPTX
6. entidades primitivas para el diseño de instrucciones
PPT
fundamentos de algoritmos básico intermedio.ppt
PPT
5-EDA-teo.ppt
PPT
5-EDA-teo.ppt
PPT
5-EDA-teo.ppt
PPT
estructura de datos y algoritmos repaso
PPT
Estructura de Datos y tipos de Datos - Informática
PPSX
Presentación Datos y operaciones básicas.ppsx
PPT
Introduccion al lenguaje c_EderHenriquez
Manejo de puntero spresentacion
Tipos De Datos
Tipos de Datos en Java, String Entero Decimales
1.Tipos de Datos.ppt
1.Tipos de Datos.ppt
1.Tipos de Datos.ppt
1.tipos de datos
Tipos de Datos y su tipologia en contexto.ppt
00 Tipos de Datos.ppt
Tipos de datos
Estructura sintactica de los lenguajes de programacion
6. entidades primitivas para el diseño de instrucciones
fundamentos de algoritmos básico intermedio.ppt
5-EDA-teo.ppt
5-EDA-teo.ppt
5-EDA-teo.ppt
estructura de datos y algoritmos repaso
Estructura de Datos y tipos de Datos - Informática
Presentación Datos y operaciones básicas.ppsx
Introduccion al lenguaje c_EderHenriquez

Más de A J (6)

PPT
ED 03 2_listas especiales
 
PPT
ED 03 1_listas
 
PPT
ED 02 2_tda_arra_u
 
PPT
ED 02 1_tda
 
PDF
ED 02 0_tda_definicion_td_as-bnf
 
PPT
ED 01 tipos_datos_ejercicios
 
ED 03 2_listas especiales
 
ED 03 1_listas
 
ED 02 2_tda_arra_u
 
ED 02 1_tda
 
ED 02 0_tda_definicion_td_as-bnf
 
ED 01 tipos_datos_ejercicios
 

Último (20)

PDF
Salcedo, J. et al. - Recomendaciones para la utilización del lenguaje inclusi...
PDF
COMUNICACION EFECTIVA PARA LA EDUCACION .pdf
PDF
Breve historia de los Incas -- Patricia Temoche [Temoche, Patricia] -- Breve ...
PDF
CONFERENCIA-Deep Research en el aula universitaria-UPeU-EduTech360.pdf
PDF
Integrando la Inteligencia Artificial Generativa (IAG) en el Aula
PPTX
AGENTES PATÓGENOS Y LAS PRINCIPAL ENFERMEAD.pptx
PDF
Lección 6 Escuela Sab. A través del mar rojo.pdf
DOCX
2 GRADO UNIDAD 5 - 2025.docx para primaria
PDF
PFB-MANUAL-PRUEBA-FUNCIONES-BASICAS-pdf.pdf
PPT
Cosacos y hombres del Este en el Heer.ppt
PDF
Híper Mega Repaso Histológico Bloque 3.pdf
PDF
Romper el Circulo de la Creatividad - Colleen Hoover Ccesa007.pdf
PDF
Guia de Tesis y Proyectos de Investigacion FS4 Ccesa007.pdf
PDF
Fundamentos_Educacion_a_Distancia_ABC.pdf
PDF
IDH_Guatemala_2.pdfnjjjkeioooe ,l dkdldp ekooe
PDF
el - LIBRO-PACTO-EDUCATIVO-GLOBAL-OIEC.pdf
PDF
Escuelas Desarmando una mirada subjetiva a la educación
DOCX
V UNIDAD - SEGUNDO GRADO. del mes de agosto
PDF
La Evaluacion Formativa en Nuevos Escenarios de Aprendizaje UGEL03 Ccesa007.pdf
PDF
Salvese Quien Pueda - Andres Oppenheimer Ccesa007.pdf
Salcedo, J. et al. - Recomendaciones para la utilización del lenguaje inclusi...
COMUNICACION EFECTIVA PARA LA EDUCACION .pdf
Breve historia de los Incas -- Patricia Temoche [Temoche, Patricia] -- Breve ...
CONFERENCIA-Deep Research en el aula universitaria-UPeU-EduTech360.pdf
Integrando la Inteligencia Artificial Generativa (IAG) en el Aula
AGENTES PATÓGENOS Y LAS PRINCIPAL ENFERMEAD.pptx
Lección 6 Escuela Sab. A través del mar rojo.pdf
2 GRADO UNIDAD 5 - 2025.docx para primaria
PFB-MANUAL-PRUEBA-FUNCIONES-BASICAS-pdf.pdf
Cosacos y hombres del Este en el Heer.ppt
Híper Mega Repaso Histológico Bloque 3.pdf
Romper el Circulo de la Creatividad - Colleen Hoover Ccesa007.pdf
Guia de Tesis y Proyectos de Investigacion FS4 Ccesa007.pdf
Fundamentos_Educacion_a_Distancia_ABC.pdf
IDH_Guatemala_2.pdfnjjjkeioooe ,l dkdldp ekooe
el - LIBRO-PACTO-EDUCATIVO-GLOBAL-OIEC.pdf
Escuelas Desarmando una mirada subjetiva a la educación
V UNIDAD - SEGUNDO GRADO. del mes de agosto
La Evaluacion Formativa en Nuevos Escenarios de Aprendizaje UGEL03 Ccesa007.pdf
Salvese Quien Pueda - Andres Oppenheimer Ccesa007.pdf

ED 01 tipos_datos

  • 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. INFORMACIÓN  Es el resultado deseado luego de procesar los datos  Los datos, al ser procesados, se convierten en información útil o resultados. Empleado Horas Datos de salida(se muestran Juan, Perez 160 en el monitor) Pedro, Rodriguez 155 Juan, Perez $320 Luis, Pozo 120 Pedro, Rodriguez $310 Luis, Pozo $240 Valor por hora = $2 Datos de entrada(ingresados x teclado) Procesamiento: Calcular salarios
  • 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. 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 Sumar carácter + entero restar, forman una cadena multiplicar por entero
  • 9. Y EN LA COMPUTADORA? 1000  Solo vienen integrados los tipos de datos básicos 1001  En la computadora 1002  Cada byte es un casillero y tiene una dirección en memoria 1003  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 TIPO DE DATO #bytes Representación interna En ANSI C ENTEROS 2 Positivos: conjunto de bits int 4 38 -> 00100110 long 8 Negativos:Complemento a Dos -38 -> 11011001 REALES 8 Mantisa x base(exponente) float 16 387.53 -> 38753 x 10-2 double 00000000100101110110000111111110 CARACTERES 1 ASCII char 11000000 -> ‘A’
  • 11. DECLARACION DE Al declarar una variable se le asigna espacio en VARIABLES memoria y una dirección para dicho espacio  Una declaración de variables en C incluye  Tipo de dato y  Nombre de variable(identificador) 100 4 bytes, int a; 101 dir: 100  Ejemplo: 102 int a, b; char c; 103 1 byte, 104 dir: 104 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
  • 12. 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 1000 &a es  Ejemplo: 1001 1000 int a; a = 3; 1002 printf(“Valor:%d Dir: %d”, a, &a); 1003  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 1000  Se pueden definir punteros de cualquier tipo: 1001 3 x 1002 float *pf; 1003 char *pc; 1004 1005 1000 pt  Un identificador que siempre va antecedido del operador * int *pt, x; pt almacena la x = 3; dirección de x, se dice pt = &x; que pt apunta a 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); Es equivalente a : Ejercicio c = ‘N’ *pc1 = ‘N’ printf(“%c”,c); Imprime ‘N’ pues c ya cambio
  • 15. EJERCICIO EN CLASE int x,y; int *p1,*p2; 1000 -42 17 22 x x = -42; y = 163; 1004 163 22 y p1 = &x; 1008 1004 1000 1004 1000 0 p1 p2 = &y; *p1 = 17; 1012 1004 1004 0 p2 *p2 = x+5; *p1 = *p2; Es equivalente a escribir x = y; p1 = p2; Esto indica que p1 ahora apunta a la p1 = NULL; misma variable que p2 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 x = 5  Ejemplo: printf(“%dn”,x); Se imprime 5, el valor de x no funct(x); cambia aunque la función haya printf(“%dn”,x); intentado modificarla void funct(int y){ y = y+1; printf(“%dn”,y); }
  • 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 * x = 5  Ejemplo: printf(“%dn”,x); Se imprime 6, el valor de x cambió funct(&x); dentro de la función printf(“%dn”,x); void funct(int *py){ *py = *py+1; printf(“%dn”,*py); Ejercicio }
  • 19. TIPOS DE DATOS COMPUESTOS  En ocasiones se necesitan TIPO FORMATO Bytes DECLARACION tipos de datos mas complejos, ARREGLOS int arrEj[10]; 10*2 = 20 y estructurados  Variables que almacenen mas de ESTRUCTURAS typedef struct TReg{ 2 + 100 = int ID; 102 un valor char Texto[100];  Variables que representen }Reg; información de la vida real UNIONES typedef union TUn{ 100  Estarán formados a partir de int ID; char Texto[100]; tipos de datos simples }Un;  En C, tenemos:
  • 20. 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 A  El numero de elementos (dimensión) 0 1 2 3 4 ... 99  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
  • 21. Tipo de dato: OPERACIONES 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. REPRESENTACION INTERNA  Cuantos bytes ocupa un tipo de dato o variable? 1000 Lista[0]  En C lo indica el operador sizeof  Ejemplo: 1008 Lista[1] int a; printf(“%d %d”, sizeof(int), sizeof(a)); 1016 Lista[2]  El computador internamente  No almacena la dirección de todos los elementos del arreglo 1024 Lista[3]  Solo almacena la dirección del primer elemento Lista[4]  El resto lo calcula así: 1032 &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 int *a; //No se reserva nada ..  La reserva seria dinámica /*Cuando se desee, se reserva*/ a = malloc(sizeof(int)); //La variable normalmente  En C se usan *a = 3;  Punteros y #include <stdlib.h> void *malloc(size_t size);  Las funciones de librería
  • 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 main(){ usar una constante o una variable,o cualquier expresión int *arreglo, n; printf(“Ingrese el tamaño del arreglo:”); n = GetInteger(); arreglo = malloc(sizeof(int)*n); printf(“Ahora tiene %d elementos para trabajarn”,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 int *a; variable 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; La suma indica que p se mueva 2 “enteros” mas adelante int *p; Cada entero equivale a 4 bytes p = &x; 100 + 2*4 = 108  Si la dirección de x es un valor 100 y decimos p = p+2;  Que dirección almacena pi? 102 108 104
  • 27. p2 EJERCICIO EN CLASE main(){ double Lista[3]; p 1000 double *p,*p1,*p2; Lista[0] 1 int k; 1008 Lista[0] = 1; 1.1 Lista[1] Lista[1] = 1.1; Lista[2] = 1.2; 1016 Lista[2] p = Lista; 1.2 p = p + 2; printf(“%d”, *p); p se mueve 2 p1 p = p - 1; desfases printf(“%d”, *p); p1 = Lista+2; p retrocede un p2 = &Lista[0]; desfase k = p1-p2; printf(“%d”, k); 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 Ejercicio  El paso de arreglos, es un paso por referencia
  • 29. 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]; (0,0) (0,1) (0,2) A[0] A[0][0] A[0]1] A[0][2] (1,0) (1,1) (1,2) A[1] A[1][0] A[1][1] A[1][2] Ejercicio (2,0) (2,1) (2,2) A[2] A[2][0] A[2][1] A[2][2]
  • 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: typedef struct TNombreCompleto{ char Primero[10]; char Inicial; char Ultimo[10]; }NombreCompleto;  Es la declaración del nuevo “tipo de dato”: NombreCompleto  Con este tipo de dato, podremos crear “variables”: NombreCompleto snombre, enombre;
  • 31. 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 snombre misma “estructura” primero inicia Cada dato tiene diferente l tamaño y espacio en Ejercicio memoria ultimo Cada dato representa una información diferente
  • 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; typedef union ValorPolimorifco{ float valor_real; int valor_entero; Tdato tipo; float valor_real; }; }; ValorPolimorfico a; ValorPolimorfico a; printf(“Tipo de dato:”); a.valor_entero = 9; a.tipo = GetInteger(); a.valor_real = 8.9; if a.tipo == Entero then a.valor_entero = 9; elseif a.tipo == Real then 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