SlideShare una empresa de Scribd logo
1 de 34
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.
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
¿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
forman una cadena
Sumar carácter + entero restar,
multiplicar por entero
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
ALMACENANDO DATOS
TIPO DE DATO #bytes Representación interna En ANSI C
ENTEROS 2
4
8
Positivos: conjunto de bits
38 -> 00100110
Negativos:Complemento a Dos
-38 -> 11011001
int
long
REALES 8
16
Mantisa x base(exponente)
387.53 -> 38753 x 10-2
00000000100101110110000111111110
float
double
CARACTERES 1 ASCII
11000000 -> ‘A’
char
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
100
101
102
103
104
char c;
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
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;
1000
1001
1002
1003
1004
1005
1000
int *pt, x;
x = 3;
pt = &x;
3
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 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
Ejercicio
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
17
22
0
0
163
1004
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
 Ejemplo: x = 5
printf(“%dn”,x);
funct(x);
printf(“%dn”,x);
void funct(int y){
y = y+1;
printf(“%dn”,y);
}
Se imprime 5, el valor de x no
cambia aunque la función haya
intentado modificarla
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(“%dn”,x);
funct(&x);
printf(“%dn”,x);
void funct(int *py){
*py = *py+1;
printf(“%dn”,*py);
}
Se imprime 6, el valor de x cambió
dentro de la función
Ejercicio
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
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
0 1 2 3 4 ...
A
99
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 elemento
A[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
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í:
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
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 trabajarn”,n);
...
}
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
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?
102 108 104
La suma indica que p se mueva 2
“enteros” mas adelante
Cada entero equivale a 4 bytes
100 + 2*4 = 108
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);
}
1000
1008
1016
Lista[0]
Lista[1]
Lista[2]
p
p2
p1
p se mueve 2
desfases
p retrocede un
desfase
Da el total de desfases
entre p1 y p2
1
1.1
1.2
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
 El paso de arreglos, es un paso por referencia Ejercicio
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
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;
USANDO ESTRUCTURAS
primero inicial
ultimo
snombre
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 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
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 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;
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

La actualidad más candente

Sistema De Gestión De Base De Datos
Sistema De Gestión De Base De DatosSistema De Gestión De Base De Datos
Sistema De Gestión De Base De DatosGuillermo Chirinos
 
INSTRUCCIONES BÁSICAS PARA C++
INSTRUCCIONES BÁSICAS PARA C++INSTRUCCIONES BÁSICAS PARA C++
INSTRUCCIONES BÁSICAS PARA C++Idalia Tristan
 
Unidad 4 Mad Modelado Analisis Casos De Uso
Unidad 4 Mad Modelado Analisis Casos De UsoUnidad 4 Mad Modelado Analisis Casos De Uso
Unidad 4 Mad Modelado Analisis Casos De UsoSergio Sanchez
 
Diccionario de datos
Diccionario de datosDiccionario de datos
Diccionario de datosJorge Garcia
 
Diagrama UML de Clases
Diagrama UML de ClasesDiagrama UML de Clases
Diagrama UML de ClasesAdal Dg
 
Cuestionario
CuestionarioCuestionario
CuestionarioJose Nava
 
Analisis Y DiseñO Orientado A Objetos
Analisis Y DiseñO Orientado A ObjetosAnalisis Y DiseñO Orientado A Objetos
Analisis Y DiseñO Orientado A Objetosyoiner santiago
 
Variables de-programación
Variables de-programaciónVariables de-programación
Variables de-programaciónKarenNaranjoH
 
Teoria de Automatas & Lenguajes Formales
Teoria de Automatas & Lenguajes FormalesTeoria de Automatas & Lenguajes Formales
Teoria de Automatas & Lenguajes FormalesErivan Martinez Ovando
 
Arreglos programacion
Arreglos programacionArreglos programacion
Arreglos programacionashildir
 
Interfaces De Entrada Y Salida
Interfaces De Entrada Y SalidaInterfaces De Entrada Y Salida
Interfaces De Entrada Y SalidaBigbossH
 
2 1 vistas arquitectonicas
2 1 vistas arquitectonicas2 1 vistas arquitectonicas
2 1 vistas arquitectonicaslandeta_p
 
Clase3 Programación Orientada a Objetos
Clase3 Programación Orientada a ObjetosClase3 Programación Orientada a Objetos
Clase3 Programación Orientada a Objetosdesimartinez
 
Fundamentos de Programación - Unidad I: Diseño Algorítmico
Fundamentos de Programación - Unidad I: Diseño AlgorítmicoFundamentos de Programación - Unidad I: Diseño Algorítmico
Fundamentos de Programación - Unidad I: Diseño AlgorítmicoJosé Antonio Sandoval Acosta
 

La actualidad más candente (20)

Sistema De Gestión De Base De Datos
Sistema De Gestión De Base De DatosSistema De Gestión De Base De Datos
Sistema De Gestión De Base De Datos
 
INSTRUCCIONES BÁSICAS PARA C++
INSTRUCCIONES BÁSICAS PARA C++INSTRUCCIONES BÁSICAS PARA C++
INSTRUCCIONES BÁSICAS PARA C++
 
Unidad 4 Mad Modelado Analisis Casos De Uso
Unidad 4 Mad Modelado Analisis Casos De UsoUnidad 4 Mad Modelado Analisis Casos De Uso
Unidad 4 Mad Modelado Analisis Casos De Uso
 
Pseudocodigo pptx
Pseudocodigo pptxPseudocodigo pptx
Pseudocodigo pptx
 
Diccionario de datos
Diccionario de datosDiccionario de datos
Diccionario de datos
 
Diagrama UML de Clases
Diagrama UML de ClasesDiagrama UML de Clases
Diagrama UML de Clases
 
Cuestionario
CuestionarioCuestionario
Cuestionario
 
Analisis y diseño de sistemas
Analisis y diseño de sistemasAnalisis y diseño de sistemas
Analisis y diseño de sistemas
 
Analisis Y DiseñO Orientado A Objetos
Analisis Y DiseñO Orientado A ObjetosAnalisis Y DiseñO Orientado A Objetos
Analisis Y DiseñO Orientado A Objetos
 
Variables de-programación
Variables de-programaciónVariables de-programación
Variables de-programación
 
Análisis estructurado
Análisis estructuradoAnálisis estructurado
Análisis estructurado
 
Teoria de Automatas & Lenguajes Formales
Teoria de Automatas & Lenguajes FormalesTeoria de Automatas & Lenguajes Formales
Teoria de Automatas & Lenguajes Formales
 
Arreglos programacion
Arreglos programacionArreglos programacion
Arreglos programacion
 
Interfaces De Entrada Y Salida
Interfaces De Entrada Y SalidaInterfaces De Entrada Y Salida
Interfaces De Entrada Y Salida
 
2 1 vistas arquitectonicas
2 1 vistas arquitectonicas2 1 vistas arquitectonicas
2 1 vistas arquitectonicas
 
Clase3 Programación Orientada a Objetos
Clase3 Programación Orientada a ObjetosClase3 Programación Orientada a Objetos
Clase3 Programación Orientada a Objetos
 
Fundamentos de Programación - Unidad I: Diseño Algorítmico
Fundamentos de Programación - Unidad I: Diseño AlgorítmicoFundamentos de Programación - Unidad I: Diseño Algorítmico
Fundamentos de Programación - Unidad I: Diseño Algorítmico
 
modelo entidad-relacion
modelo entidad-relacionmodelo entidad-relacion
modelo entidad-relacion
 
Fundamentos de programación
Fundamentos de programaciónFundamentos de programación
Fundamentos de programación
 
Operadores
OperadoresOperadores
Operadores
 

Similar a 1.Tipos de Datos.ppt

00 Tipos de Datos.ppt
00 Tipos de Datos.ppt00 Tipos de Datos.ppt
00 Tipos de Datos.pptArmando Lopez
 
Elementos para solucionar problemas en seudocódigo c5. p1.
Elementos para solucionar problemas en seudocódigo c5. p1.Elementos para solucionar problemas en seudocódigo c5. p1.
Elementos para solucionar problemas en seudocódigo c5. p1.DENIRAMIREZANDRADE
 
Estructura de Datos y tipos de Datos - Informática
Estructura de Datos y tipos de Datos - InformáticaEstructura de Datos y tipos de Datos - Informática
Estructura de Datos y tipos de Datos - InformáticaJairoMaxKevinMartine
 
fundamentos de algoritmos básico intermedio.ppt
fundamentos de algoritmos básico intermedio.pptfundamentos de algoritmos básico intermedio.ppt
fundamentos de algoritmos básico intermedio.pptLDACORGANIZACION
 
estructura de datos y algoritmos repaso
estructura de  datos y algoritmos repasoestructura de  datos y algoritmos repaso
estructura de datos y algoritmos repasoricardosusa5
 
Operadores y expresiones
Operadores y expresionesOperadores y expresiones
Operadores y expresionesJorge Ñauñay
 
Tipos de dato y expresiones en C++
Tipos de dato y expresiones en C++Tipos de dato y expresiones en C++
Tipos de dato y expresiones en C++Obmaro García
 
Elementos para solucionar problemas en seudocódigo c4. p1.
Elementos para solucionar problemas en seudocódigo c4. p1.Elementos para solucionar problemas en seudocódigo c4. p1.
Elementos para solucionar problemas en seudocódigo c4. p1.DENIRAMIREZANDRADE
 
3. Uso De Variables De Tipo Valor
3.  Uso De Variables De Tipo Valor3.  Uso De Variables De Tipo Valor
3. Uso De Variables De Tipo ValorEsteban Soraire
 
Elementos para solucionar problemas en seudocodigo c4. p1.pptx
Elementos para solucionar problemas en seudocodigo c4. p1.pptxElementos para solucionar problemas en seudocodigo c4. p1.pptx
Elementos para solucionar problemas en seudocodigo c4. p1.pptxDenRamrezAndrade
 

Similar a 1.Tipos de Datos.ppt (20)

00 Tipos de Datos.ppt
00 Tipos de Datos.ppt00 Tipos de Datos.ppt
00 Tipos de Datos.ppt
 
Tipos De Datos
Tipos De DatosTipos De Datos
Tipos De Datos
 
1.Tipos de Datos.ppt
1.Tipos de Datos.ppt1.Tipos de Datos.ppt
1.Tipos de Datos.ppt
 
Elementos para solucionar problemas en seudocódigo c5. p1.
Elementos para solucionar problemas en seudocódigo c5. p1.Elementos para solucionar problemas en seudocódigo c5. p1.
Elementos para solucionar problemas en seudocódigo c5. p1.
 
5-EDA-teo.ppt
5-EDA-teo.ppt5-EDA-teo.ppt
5-EDA-teo.ppt
 
5-EDA-teo.ppt
5-EDA-teo.ppt5-EDA-teo.ppt
5-EDA-teo.ppt
 
5-EDA-teo.ppt
5-EDA-teo.ppt5-EDA-teo.ppt
5-EDA-teo.ppt
 
Estructura de Datos y tipos de Datos - Informática
Estructura de Datos y tipos de Datos - InformáticaEstructura de Datos y tipos de Datos - Informática
Estructura de Datos y tipos de Datos - Informática
 
fundamentos de algoritmos básico intermedio.ppt
fundamentos de algoritmos básico intermedio.pptfundamentos de algoritmos básico intermedio.ppt
fundamentos de algoritmos básico intermedio.ppt
 
estructura de datos y algoritmos repaso
estructura de  datos y algoritmos repasoestructura de  datos y algoritmos repaso
estructura de datos y algoritmos repaso
 
Operadores y expresiones
Operadores y expresionesOperadores y expresiones
Operadores y expresiones
 
Tipos de dato y expresiones en C++
Tipos de dato y expresiones en C++Tipos de dato y expresiones en C++
Tipos de dato y expresiones en C++
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 
Elementos para solucionar problemas en seudocódigo c4. p1.
Elementos para solucionar problemas en seudocódigo c4. p1.Elementos para solucionar problemas en seudocódigo c4. p1.
Elementos para solucionar problemas en seudocódigo c4. p1.
 
3. Uso De Variables De Tipo Valor
3.  Uso De Variables De Tipo Valor3.  Uso De Variables De Tipo Valor
3. Uso De Variables De Tipo Valor
 
Datos
DatosDatos
Datos
 
datos
datos datos
datos
 
Tipos de datos en C
Tipos de datos en CTipos de datos en C
Tipos de datos en C
 
Elementos para solucionar problemas en seudocodigo c4. p1.pptx
Elementos para solucionar problemas en seudocodigo c4. p1.pptxElementos para solucionar problemas en seudocodigo c4. p1.pptx
Elementos para solucionar problemas en seudocodigo c4. p1.pptx
 
Tipos De Datos
Tipos De DatosTipos De Datos
Tipos De Datos
 

Último

How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.FlorenciaCattelani
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanamcerpam
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...JohnRamos830530
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxJorgeParada26
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosJhonJairoRodriguezCe
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21mariacbr99
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxFederico Castellari
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativanicho110
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIhmpuellon
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estossgonzalezp1
 

Último (10)

How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos Basicos
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 

1.Tipos de Datos.ppt

  • 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. 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
  • 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 forman una cadena Sumar carácter + entero restar, multiplicar por entero
  • 9. 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
  • 10. ALMACENANDO DATOS TIPO DE DATO #bytes Representación interna En ANSI C ENTEROS 2 4 8 Positivos: conjunto de bits 38 -> 00100110 Negativos:Complemento a Dos -38 -> 11011001 int long REALES 8 16 Mantisa x base(exponente) 387.53 -> 38753 x 10-2 00000000100101110110000111111110 float double CARACTERES 1 ASCII 11000000 -> ‘A’ char
  • 11. 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 100 101 102 103 104 char c;
  • 12. 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
  • 13. 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; 1000 1001 1002 1003 1004 1005 1000 int *pt, x; x = 3; pt = &x; 3
  • 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: 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 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 Ejercicio
  • 15. 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 17 22 0 0 163 1004
  • 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(“%dn”,x); funct(x); printf(“%dn”,x); void funct(int y){ y = y+1; printf(“%dn”,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(“%dn”,x); funct(&x); printf(“%dn”,x); void funct(int *py){ *py = *py+1; printf(“%dn”,*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: 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
  • 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  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
  • 21. 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 elemento A[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
  • 22. 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í:
  • 23. 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
  • 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 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 int *a; a = malloc...; … free(a); Cuando se libera para una variable 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? 102 108 104 La suma indica que p se mueva 2 “enteros” mas adelante Cada entero equivale a 4 bytes 100 + 2*4 = 108
  • 27. 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); } 1000 1008 1016 Lista[0] Lista[1] Lista[2] p p2 p1 p se mueve 2 desfases p retrocede un desfase Da el total de desfases entre p1 y p2 1 1.1 1.2 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. 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
  • 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. USANDO ESTRUCTURAS primero inicial ultimo snombre 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 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
  • 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 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;
  • 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