Post on 08-Dec-2018
4. DATOSProgramación I
Los datos manejados por una computadora pueden ser entendidos de dos maneras distintas:
• Desde el punto de vista físico
• tiene que ver con el consumo de áreas de almacenamiento que ocupan (bytes que ocupan en memoria)
• Desde el punto de vista de relevancia
• lo que importa es el significado y el valor que el usuario les otorga
Fuente: Ramírez (2007)
Dato
• Es el conjunto de representaciones simbólicas no significativas, dado que no se tiene la capacidad de reconocerles un significado más allá del que tienen los símbolos que componen a dicho dato.
Información
• Es el conjunto de datos que en determinada cantidad y forma aumenta el conocimiento o reduce la incertidumbre respecto a un sujeto, evento o circunstancia. La información sólo podrá ser considerada como tal si se tiene la capacidad de reconocerla.
Conocimiento
• Es la información cuando se tiene la capacidad para usarla en actividades del plano real y limitado. Tiene naturaleza práctica.
Fuente: Ramírez (2007)
Entendidos desde el punto de vista de relevancia…
Acciones que es posible realizar con los datos:
• Recopilación
• Procesamiento
• Generación
• Divulgación
Fuente: Ramírez (2007)
Entendidos desde el punto de vista de relevancia…
En términos computacionales, los valores que pueden ser manejados tienen la siguiente:
Nat
ura
leza
Numéricos
Enteros
Reales
ComplejosAlfanuméricos
Fechas
Nulos
Booleanos
Entendidos desde el punto de vista de relevancia…
Fuente: Ramírez (2007)
Propiedades de los datos
• DominioEs el conjunto de valores válidos para un dato. A la cantidad de valores permitidos en un dominio se le llama amplitud de dominio.
• TipoEs un dominio nominado de datos que permite el almacenamiento de una determinada naturaleza de dato, atendiendo un grado de exactitud específico, causando un consumo determinado de almacenamiento.
• ValorEs la expresión almacenada como dato en un momento determinado.
Fuente: Ramírez (2007)
Entendidos desde el punto de vista de relevancia…
Datos en el lenguaje C
Tip
os
de
dat
os
sim
ple
sNuméricos
Enteros
(punto o coma fija)
Con signo
Sin signo
Reales (punto o coma flotante)
Precisión simple
Precisión doble
Caracter
Nulos
Entendidos desde el punto de vista de relevancia…
Datos en el lenguaje C
Tip
os
de
dat
os
estr
uct
ura
do
s o
der
ivad
os
de
los
fun
dam
enta
les Arreglos
Cadenas
Uniones
Registros o estructuras
Punteros
Funciones
Entendidos desde el punto de vista de relevancia…
Fuente: Ceballos Sierra (1995)
Tipos de datos simples en el lenguaje CPalabras reservadas para declarar variables de tipo entero con variantes
Cómo se representan en memoria(depende del compilador usado y el sistema operativo)
Dominio o rango del tipo de dato
Formatoprintf y scanf
shortshort intsigned shortsigned short int
2 bytes = 16 bitsEl dominio se calcula usandocomplemento a 2:[-2n-1, 2n-1 - 1], n número de bits
[-32 768, 32 767] %hd%hi
unsigned shortunsigned short int
2 bytes = 16 bitsEl dominio se calcula usandobinario puro o sin signo: [0, 2n - 1]
[0, 65 535] %hu
int, signed, signed int 4 bytes = 32 bits [-2 147 483 648, 2 147 483 647]
%i%d
unsigned, unsigned int 4 bytes = 32 bits [0, 4 294 967 295] %u
longlong intsigned longsigned long int
4 bytes = 32 bits8 bytes = 64 bits (GNU/Linux)
[-2 147 483 648, 2 147 483 647][-9223372036854775808,9223372036854775807]
%ld
unsigned longunsigned long int
4 bytes = 32 bits8 bytes = 64 bits (GNU/Linux)
[0, 4 294 967 295][0, 18446744073709551615]
%lu
Entendidos desde el punto de vista físico…
Continuación…
Palabras reservadas para declarar variables de tipo entero con variantes
Cómo se representan en memoria(si se usa el compilador C99)
Dominio o rango del tipo de dato Formatoprintf y scanf
long longlong long intsigned long longsigned long long int
8 bytes = 64 bits [-9 223 372 036 854 775 808,9 223 372 036 854 775 807]
%lld%I64d%I64u(últimos 2solo para windows)
unsigned long longunsigned long long int
8 bytes = 64 bits [0,18 446 744 073 709 551 615]
%llu
En general se tiene el tipo de dato int pero se forman distintos dominios con los modificadores:
short, signed, unsigned y long
Entendidos desde el punto de vista físico…
Continuación…Palabras reservadas para declarar variables de tipo real
Cómo se representan en memoria(depende del compilador usado y el sistema operativo)
Dominio o rango del tipo de dato Formatoprintf y scanf
float 4 bytes = 32 bits
El dominio se calcula usandonotación normalizada (conceptos de mantisa, fracción, exponente)
6 a 7 dígitos significativos
[-3.402823e+38, -1.175494e-38] U 0 U [1.175494e-38, 3.402823e+38]
%f%e%E
double 8 bytes = 64 bits
15 a 16 dígitos significativos
[-1.79793e+308, -2.225074e-308] U 0 U [2.225074e-308, 1.797693e+308]
%f, %e%E%lf (scanf)
long double 12 bytes = 96 bits16 bytes = 128 bits (GNU/Linux)
[-1.189731e+4932, -3.362103e-4932] U 0 U [3.362103e-4932,1.89731e+4932]
%Lf%Le%Lg
Entendidos desde el punto de vista físico…
Continuación…
Palabras reservadas para declarar variables de tipo caracter
Cómo se representan en memoria(depende del compilador usado y el sistema operativo)
Dominio o rango del tipo de dato Formatoprintf y scanf
charsigned char
1 bytes = 8 bits
El dominio se calcula usandocomplemento a 2:[-2n-1, 2n-1 - 1], n número de bits
[-128 , 127]Cada número entero representa o codifica a un único caracter
%c
unsigned char 1 bytes = 8 bits
El dominio se calcula usandobinario puro o sin signo: [0, 2n - 1]
[0, 255]
Cada número entero representa o codifica a un único caracter
%c
Entendidos desde el punto de vista físico…
Fuente: Ceballos Sierra(1995)
De acuerdo a lo anterior, los errores que pueden ocurrir con losvalores y los tipos de datos son:
• De dominio, cuando el valor está fuera del dominio del tipo
• Overflow o desbordamiento, el valor es demasiado grande para ser representado
• Underflow, el valor es demasiado pequeño para serrepresentado
• Sign, el valor no está permitido para el tipo de dato
Fuente: Ceballos Sierra(1995)
Conversión implícita de tipos
Cuando los operandos que intervienen en una operación son de tipos diferentes, antes de realizar la operación especificada, automáticamente el compilador convierte o promueve los tipos de los valores a un tipo en común (conversión estándar) de acuerdo a las siguientes reglas, las cuales se aplican en el orden expuesto para cada operación binaria perteneciente a una expresión, siguiendo el orden de evaluación (orden de prioridad):
Fuente: Ceballos Sierra (1995)
1. Si un operando es de tipo long double, el otro operando es convertido a tipo long double.
2. Si un operando es de tipo double, el otro operando es convertido a tipo double.
3. Si un operando es de tipo float, el otro operando es convertido a tipo float.
4. Un char o un short, con o sin signo, se convertirán a un int, si el tipo int puede representar todos los valores del tipo original, o a unsignedint en caso contrario. Generalmente los caracteres se convierten a enteros con extesión de signo.
5. Si un operando es de tipo unsigned long, el otro operando es convertido a unsigned long.
6. Si un operando es de tipo long, el otro operando es convertido a tipo long.
7. Si un operando es de tipo unsigned int, el otro operando es convertido a tipo unsigned int.
En resumen:
• Los operandos que intervienen en una determinada operación son convertidos al tipo del operando de precisión más alta.
• Las constantes reales son de tipo double por defecto.
• Una expresión booleana da como resultado un 1 si es verdadera o un 0 si es falsa.
• En una asignación, el valor de la parte derecha es convertido al tipo de la variable de la izquierda , según las siguientes reglas:
• Los reales se convierten a enteros truncando la parte fraccionaria
• Un double pasa a float redondeando y perdiendo precisión si el valor double no puede ser representado exactamente como float
Fuente: Ceballos Sierra (1995)
Conversión explícita de tipos
Se puede realizar una conversión explícita mediante cast o casting
Sintáxis:
(nombre del tipo) expresión
Ejemplo:
sqrt( (double) n+2 )
La expresión es convertida al tipo especificado si esa conversión estápermitida, en caso contrario se obtendrá un error.
En lo posible es mejor no utilizarla porque puede producir resultadosinesperados
Fuente: Ceballos Sierra (1995)
Ejemplos
…
long a;
unsigned char b;
int c, f;
float d;
…
f = a + b * c / d;
…
• 1. Orden de prioridad: *, /, +
• El valor de b se convierte al tipo int, a esto se le conoce como conversion ensanchante (menos a más precisión)
• El resultado tipo int de la multiplicaciónse convierte a float y el resultado de la división es tipo float
• El valor de a se convierte a float
• El resultado tipo float de la suma se convierte al tipo int para asignar, a estose le conoce como conversiónestrechante (de más a menos precisión)
…
float f;
f = 3.0 / 7.0;
if ( f == 3.0/7.0) printf (“Iguales”);
else printf (“Diferentes”);
…
• 3.0 y 7.0 son constantes literales y pordefecto son de tipo double
• El resultado de la división es del tipodouble pero se convierte a float (conversión estrechante)
• EL mismo valor double es comparadocon con el de float y no son iguales
• Solución: double num;
• Solución: if (f==3.0f/3.0f)
Fuente: Jiménez Millán (2013)
Tener en cuenta que, en las conversiones pueden ocurrir uno de dos errores:
PLOSS, pérdida parcial de significaciónTLOSS, pérdida total de significación
Referencias
• Ceballos Sierra, F. J. (1995). Curso de programación C/C++. Madrid: RA-MA.• Jiménez Millán, A. (2013). Curso de C++ (2.2.5 Conversiones estándar). Recuperado
de www.zator.com/Cpp• Ramírez, F. (2007). Introducción a la programación. Algoritmos y su implementación
en Visual Basic. NET, C#, y C++ (2a. ed.). México: Alfaomega.