Vous êtes sur la page 1sur 12

Volumen 3 N 1

INDUSTRIAL DATA

Pag. 75 - 80

CLASES DE DATOS
Mg Edgar Ruiz Lizama1 eruizl@industrial.unmsm.pe eruizl@pucp.pe
RESUMEN El artculo presenta un enfoque moderno acerca del estudio de los tipos de datos soportados por un computador. Para el lenguaje C++, los datos se agrupan en clases de datos los cuales se estudian y se prueban con programas ejemplos. ABSTRACT This article presents a modern focus about the study of the types of data supported by a computer. For de language C++, the data group in classes of data wich are studied and they are proven with programs example. INTRODUCCION Al igual que C; C++ posee tipos de datos fundamentales o primitivos y tipos de datos derivados o estructurados. A decir verdad, un enfoque ms moderno conceptualiza los tipos de datos en C++ como correspondientes a clases de datos, siendo estos agrupados en: clase escalar, clase estructurada y clase apuntador o puntero. Ver figuras 1, 2, 3, y 4.

Figura 1: Las clase de datos en C++

Figura 2: La clase escalar

Actualizado por el autor el 27 de Marzo de 2012; para CodeBlocks 10.05 Edgar Ruiz Lizama

Volumen 3 N 1

INDUSTRIAL DATA

Pag. 75 - 80

Figura 3: La clase estructurada

Figura 4: La clase apuntador LA CLASE ESCALAR La clase escalar como acabamos de ver se divide en clase estndar y clase enumerada. La clase estndar a su vez se subdivide en cuatro clases: entero, flotante, caracter y booleana. CLASE ENTERO En matemticas los enteros son positivos y negativos cuya extensin es inconmensurable; es decir, desde - a +. Sin embargo; en el mundo real de las computadoras y para fines prcticos de implementacin los enteros negativos y positivos tienen un valor definido e incluyen tambin el cero. Para algunos compiladores C++, el rango de los enteros estndar va desde -32768 a 32767 y para otros como Dev-C++, va desde -2147483648 a +2147483647. Debido a que cada valor que se representa en un computador ocupa una determinada cantidad en bytes (1 byte = 8 bit) y por cuestiones de eficiencia en el procesamiento; C++ posee clases de enteros tales como short int, int, unsigned int, long int y unsigned long; tal como puede verse en la tabla 1 Tabla 1: Tipos de datos en la clase entero Clase entero short int o short int unsigned int long int o long unsigned long Tamao en bytes 1 o2 4 4 4 4 Rango de valores -128 a 127 o -32768 a +32767 -2147483648 a +2147483647 0 a 4294967295 -2147483648 a +2147483647 0 a 4294967295

Edgar Ruiz Lizama

Volumen 3 N 1

INDUSTRIAL DATA

Pag. 75 - 80

Segn el propio Bjarne Stroustrup, la razn para ofrecer ms de un tipo entero, ms que un tipo sin signo y ms que un tipo de coma flotante es permitir que el programador aproveche las caractersticas del hardware. En muchas mquinas, hay diferencias significativas en los requerimientos de memoria, tiempo de acceso y velocidad de clculo entre las variedades de tipos bsicos de datos. Si el programador conoce una mquina le resulta ms fcil elegir, el entero apropiado para una variable en particular, y en contrapartida el compilador no encuentra errores al 2 realizar la verificacin de tipos . Resumiendo dir que el tamao en bytes para un tipo de datos depende de la implementacin o versin del compilador y de la mquina en uso, por lo que los valores de la Tabla 1; podran ser diferentes en su mquina. Al respecto, lo animo a probar el ejemplo 1, que sigue a continuacin. Ejemplo 1: El programa bytes1.cpp realiza la comprobacin del tamao en bytes para la clase entero. #include <iostream> // mostrar el uso del operador sizeof using namespace std; int main() //bytes1.cpp { cout<<"Un short tiene "<<sizeof(short)<<" Bytes"<<endl; cout<<"Un int tiene "<<sizeof(int)<<" Bytes"<<endl; cout<<"Un unsigned tiene "<<sizeof(unsigned)<<" Bytes"<<endl; cout<<"Un unsigned int tiene "<<sizeof(unsigned int)<<" Bytes"<<endl; cout<<"Un long int "<<sizeof(long)<<" Bytes"<<endl; cout<<"Un unsigned long tiene "<<sizeof(unsigned long)<<" Bytes"<<endl; cout<<endl; return 0; }

Figura 5: Salida para el programa bytes1.cpp.

La funcin sizeof es una funcin predefinida en C y devuelve el tamao en bytes del objeto pasado como argumento. Adicionalmente, se puede comentar que sizeof para C++ es un operador predefinido. Ejemplo 2: El programa rangos.cpp muestra el rango de valores para la clase entero. #include <iostream> #include <climits> //para las constantes de limites en los rangos using namespace std;
2

Un buen programador prev los posibles valores que asumirn las variables de sus programas al entrar en ejecucin por lo que elige el tipo de dato adecuado, consiguiendo con ello programas ms eficientes y efectivos. Edgar Ruiz Lizama 3

Volumen 3 N 1

INDUSTRIAL DATA

Pag. 75 - 80

int main() // rangos.cpp { cout<<"Enteros Maximos y minimos"<<endl<<endl; cout<<"Entero sin signo maximo "<<UINT_MAX; cout<<"\nEntero corto con signo maximo "<<SHRT_MAX; cout<<"\nEntero corto con signo minimo "<<SHRT_MIN; cout<<"\nEntero largo con signo minimo "<<LONG_MIN; cout<<"\nEntero largo con signo maximo "<<LONG_MAX; cout<<"\nEntero con signo maximo "<<INT_MAX; cout<<"\nEntero con signo minimo "<<INT_MIN; cout<<"\nChar maximo "<<CHAR_MAX; cout<<"\nChar minimo "<<CHAR_MIN; cout<<"\nChar sin signo maximo "<<UCHAR_MAX; cout<<endl; return 0; } Observe que en el programa rangos1.cpp se incluye la librera <limits> puesto que en ella se encuentran definidas las constantes para los valores mximos y mnimos de los tipos de datos.

Figura 6: La salida para rangos1.cpp CLASE FLOTANTE En trminos matemticos el conjunto de los nmeros reales incluye a todos aquellos valores cuya representacin necesita el punto decimal y que van desde - hasta +. En notacin sintctica BNF (Backus-Naur Form) un nmero real se representa como: <numero-real> ::= (+ | -) <entero> . <entero> la cual se lee del siguiente modo: un nmero real es un signo + un signo - seguido de un entero seguido, de un punto, seguido de un entero; donde entero puede ser un dgito decimal o una secuencia de dgitos decimales. A su vez; entero y digito decimal son: <entero> ::= <digito-decimal> <digito-decimal> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 La clase flotante en C++, incluye a todos los enteros y a todo aquel valor que para su representacin necesita del punto decimal; tal como por ejemplo los nmeros: 1.0, 15.24, -4.05, y 3.2728. La tabla 2 muestra los tipos soportados por la clase flotante: float, double, long double.

Edgar Ruiz Lizama

Volumen 3 N 1

INDUSTRIAL DATA Tabla 2: Tipos de datos en la clase flotante Tamao en bytes 4 8 10 o 12 Rango de valores 3.4*10-38 a 3.4*1038 -308 308 1.7*10 a 1.7*10 -4932 4932 3.4*10 a 1.7*10

Pag. 75 - 80

Clase flotante float double long double

Los long double o dobles largos se representan en al menos 10 bytes. Pruebe con su compilador el programa bytes2.cpp. Ejemplo 3: El programa bytes2.cpp comprueba el tamao de bytes de los miembros de la clase flotante. #include <iostream> using namespace std; // numero de bytes en la clase flotante int main() //bytes2.cpp { cout<<"Numero de Bytes para los flotantes\n"<<endl; cout<<"Un float tiene "<<sizeof(float)<<" Bytes"<<endl; cout<<"Un double tiene "<<sizeof(double)<<" Bytes"<<endl; cout<<"Un long double tiene "<<sizeof(long double)<<" Bytes\n"<<endl; return 0; }

Figura 7: La salida del programa bytes2.cpp CLASE CARACTER Los smbolos representados en un computador son caracteres. El teclado de su computador muestra el conjunto de caracteres representables. Las letras, dgitos, signos de puntuacin y smbolos especiales son caracteres, este conjunto de caracteres se representan conforme el cdigo ASCII (American Standard Code for Information Interchange). El ASCII es un conjunto que posee 256 cdigos (0 al 255); donde cada cdigo es un byte y a cada cdigo o carcter le corresponde un nmero, por ello se dice que los caracteres ASCII son ordinales. La tabla 3 muestra los dos objetos de la clase caracter en C++: char y unsigned char; caracteres con signo y caracteres sin signo Tabla 3: Tipos de datos en la clase carcter Clase caracter char unsigned char Tamao en bytes 1 1 Rango de valores -128 a 127 0 a 255

Edgar Ruiz Lizama

Volumen 3 N 1

INDUSTRIAL DATA

Pag. 75 - 80

La tabla 3, indica que los tipos de datos de la clase caracter se representan en 1 byte de memoria. Ejemplo 4: El programa bytes3.cpp muestra el tamao en bytes para la clase caracter. #include <iostream> using namespace std; // numero de bytes en la clase caracter int main() //bytes3.cpp { cout<<"Numero de Bytes para los char\n"<<endl; cout<<"Un char "<<sizeof(char)<<" Bytes"<<endl; cout<<"Un unsigned char "<<sizeof(unsigned char)<<" Bytes\n"<<endl; return 0; }

Figura 8: La salida para el programa bytes3.cpp. Ejemplo 5: El programa carascii.cpp muestra los caracteres alfabticos tanto en maysculas como en minsculas y sus correspondientes valores ASCII. #include <iostream> #include <ctype.h> using namespace std; int main() // carascii.cpp { char c; cout<<"\nCaracteres alfabeticos en Mayusculas"<<endl; for (c='A'; c<='Z'; c++) cout<<c<<" = "<< toascii(c)<<"\t"; cout<<endl; cout<<"\nCaracteres alfabeticos en Minusculas"<<endl; for (c='a'; c<='z'; c++) cout<<c<<" = "<< toascii(c)<<"\t"; return 0; }

La funcin predefinida toascii de la librera <ctype.h> devuelve el valor entero de su argumento, en este caso el entero asociado con un carcter de la tabla ASCII. Ver la Figura 9.

Edgar Ruiz Lizama

Volumen 3 N 1

INDUSTRIAL DATA

Pag. 75 - 80

Figura 9: Salida para el programa carascii.cpp

CLASE BOOL Todo objeto booleano, posee slo uno de dos valores; true (verdad) y false (falso). Estos tienen gran importancia en todo programa que utiliza toma de decisiones es decir; una decisin implica evaluar una condicin y dependiendo del resultado (verdad o falso) se toma una accin o camino a seguir. La clase bool de C++, define false y true de tal forma que false siempre es menor que true. Los booleanos se almacenan en un byte de memoria. En general para todo programa C/C++, false = 0 y true = 1. Ver el ejemplo 6. Ejemplo 6: El programa boolea00.cpp prueba los objetos de la clase bool #include <iostream> //usando la clase bool using namespace std; int main() //boolea00.cpp { cout<<"Objetos de la clase bool\n"<<endl; cout<<"Valor de false = "<<false<<endl; cout<<"Valor de true = "<<true<<endl; return 0; }

Figura 10: La salida para el programa boolea00.cpp. A partir de la clase bool es posible crear variables de tipo booleano como son las llamadas banderas lgicas, muy usadas por los programadores en cuestiones de decisin. Ejemplo 7: El siguiente programa boolea01.cpp declara bandera como un objeto de la clase bool y lo inicializa a true, luego se niega el valor de bandera. #include <iostream> using namespace std; Edgar Ruiz Lizama 7

Volumen 3 N 1 INDUSTRIAL DATA int main() //boolea01.cpp { bool bandera; bandera = true; cout<<"Valor de bandera = "<<bandera<<endl; cout<<"Negacion de bandera = "<<(!bandera)<<endl; return 0; }

Pag. 75 - 80

Figura 11: La salida para el programa boolea01.cpp. La clase bool es soportada por compiladores modernos de C++ de acuerdo con el estndar ANSI C++. Si su compilador C++ no la posee, usted puede implementarla mediante alguna de las 3 formas siguientes: 1. 2. 3. Utilizando constantes simblicas al estilo C Utilizando constantes con tipo al estilo C++ Utilizando objetos enumerados; tal como se ver en el ejemplo 2.21, ms adelante.

Ejemplo 8: Implementacin de objetos booleanos como constantes simblicas al estilo del lenguaje C. #include <iostream> /* constantes simbolicas al estilo del C */ #define FALSE 0 #define TRUE 1 using namespace std; int main() //boolea1.cpp { int a, b; cout<<"ingrese dos numeros: "; cin>>a>>b; cout<<"a = "<<a<<" b = "<<b<<endl; if (a>b) cout<<"a es mayor que b; valor logico: "<<TRUE<<endl; else cout<<"a No es mayor que b; valor logico: "<<FALSE<<endl; cout<<endl; return 0; }

Figura 12: Una salida para boolea1.cpp. Edgar Ruiz Lizama 8

Volumen 3 N 1 INDUSTRIAL DATA Ejemplo 9: Implementacin de objetos booleanos al estilo del C++. #include <iostream> // constantes al estilo del C++ const int FALSE = 0; const int TRUE = 1; using namespace std;

Pag. 75 - 80

int main() //boolea2.cpp { int a,b; cout<<"ingrese dos numeros: "; cin>>a>>b; cout<<endl; if (a>b) cout<<a<<" Si es mayor que "<<b<<"; valor logico: "<<TRUE<<endl; else cout<<a<<" No es mayor que "<<b<<"; valor logico: "<<FALSE<<endl; cout<<endl; return 0; } Siendo su salida:

Figura 13: Una salida para boolea2.cpp. CLASE ENUM La clase enum es heredada del C. Esta clase permite al usuario declarar y usar tipos enumerados en sus programas. La declaracin de datos enumerados se realiza con la palabra reservada enum, siendo su formato el siguiente, enum <identificador_clase>{valor1, valor2, ... , valorN}; y a partir de esta declaracin se pueden crear objetos de este tipo con: <identificador_clase> <identificador_objeto>; Los siguientes, son ejemplos de declaracin vlidos de objetos de la clase enum. enum Semana{Dom, Lun, Mar, Mie, Jue, Vie, Sab}; Semana Dia; enum Paradigma{Estructurado, OrientadoObjeto, Funcional, Logico}; Paradigma Lenguaje;

Edgar Ruiz Lizama

Volumen 3 N 1 INDUSTRIAL DATA Pag. 75 - 80 Los objetos de la clase enum son ordinales y el compilador C/C++, asigna por defecto el valor 0 al primer objeto, 1 al segundo objeto y as sucesivamente. Por ello es que a los objetos de esta clase se les puede aplicar operaciones relacionales tal como se ve en los ejemplos 10 y 11. En el programa enum1.cpp del ejemplo 10, se declara Semana como un conjunto de siete objetos enumerados y especificados dentro de las llaves; es decir la secuencia {DOM,LUN,MAR,MIER,JUE,VIE,SAB}. Una vez hecho esto; se declara dia como una variable del tipo Semana. Observe que el primer objeto enumerado DOM se establece a 0, el segundo LUN se establece a 1, MAR se establece a 2 y as sucesivamente. Por esto, se dice que los objetos de un conjunto enumerado son ordinales; es decir tienen un orden por lo que pueden establecerse operaciones relacionales con estos objetos. Ejemplo 10: Programa enum1.cpp #include <iostream> // trabajando con objetos enumerados enum Semana{DOM,LUN,MAR,MIER,JUE,VIE,SAB}; Semana dia; // dia es variable del tipo semana using namespace std; int main() //enum1.cpp { for (int dia = DOM; dia <= SAB;dia++) switch(dia) { case 0: cout<<"\n El dia domingo es "<<dia<<endl; break; case 1: cout<<"\n El dia lunes es "<<dia<<endl; break; case 2: cout<<"\n El dia martes es "<<dia<<endl; break; case 3: cout<<"\n El dia miercoles es "<<dia<<endl; break; case 4: cout<<"\n El dia jueves es "<<dia<<endl; break; case 5: cout<<"\n El dia viernes es "<<dia<<endl; break; case 6: cout<<"\n El dia sabado es "<<dia<<endl; break; } cout<<endl; return 0; }

Figura 14: Salida para enum1.cpp Edgar Ruiz Lizama 10

Volumen 3 N 1

INDUSTRIAL DATA

Pag. 75 - 80

Como puede haber observado el primer objeto de una lista de enumerados se establece a 0, el segundo a 1 ya si sucesivamente; pero el usuario puede cambiar esta asignacin por defecto haciendo que el primer objeto se establezca a 1 (o a cualquier otro valor ordinal) en la propia declaracin. Al respecto el ejemplo 11 muestra una variante del ejemplo anterior Ejemplo 11: #include <iostream> //observe que DOM comienza en 1 enum Semana{DOM = 1,LUN,MAR,MIER,JUE,VIE,SAB}; Semana dia; // dia es variable del tipo semana using namespace std; int main() //enum2.cpp { int dia; for (dia = DOM; dia<=SAB; dia++) switch(dia) { case 1: cout<<"\n El dia domingo es "<<dia<<endl; break; case 2: cout<<"\n El dia lunes es "<<dia<<endl; break; case 3: cout<<"\n El dia martes es "<<dia<<endl; break; case 4: cout<<"\n El dia miercoles es "<<dia<<endl; break; case 5: cout<<"\n El dia jueves es "<<dia<<endl; break; case 6: cout<<"\n El dia viernes es "<<dia<<endl; break; case 7: cout<<"\n El dia sabado es "<<dia<<endl; break; } cout<<endl; return 0; }

Figura 15: La salida para enum2.cpp

Edgar Ruiz Lizama

11

Volumen 3 N 1

INDUSTRIAL DATA

Pag. 75 - 80

Ejemplo 12: Implementacin de objetos booleanos mediante objetos enumerados. #include <iostream> //objetos booleanos con enum enum Bool{ FALSE, TRUE }; using namespace std; int main() //boolea3.cpp { int a, b; cout<<"ingrese dos numeros enteros: "; cin>>a>>b; cout<<"\na = "<<a<<"\t"<<"b = "<<b<<endl; if (a>b) cout<<"\nEs verdad a>b: "<<TRUE<<endl; else cout<<"\nEs falso a>b: "<<FALSE<<endl; cout<<endl; return 0; }

Figura 16: Una salida para boolea3.cpp. Las clases estructurada y la clase puntero se presentaran ms adelante. REFERENCIAS 1. 2. 3. 4. 5. 6. 7. Deitel H.M. y Deitel P.J. (2003) "C++ Cmo Programar". 4ta. Edicin. Prentice-Hall Hispanoamericana, 1320p. Mxico. Kernighan Brian W. & Ritchie Dennis M. (1993) El Lenguaje de Programacin C. 2da. Edicin. Prentice-Hall Hispanoamericana, 294 p. Mxico. Ruiz Lizama, Edgar (2009) "Programacin con C++", 1ra. Edicin, Fondo Editorial de la Universidad Nacional Mayor de san Marcos, 434 p. Lima, Per. Ruiz Lizama, Edgar (1999) "Curso de Lenguaje C", Universidad Nacional Mayor de san Marcos, Facultad de Ingeniera Industrial, 150 p. Lima, Per. Staguaard, Andrew (1998) "Tcnicas estructuradas y orientadas a objetos: una introduccin utilizando C++". Mxico. Prentice-Hall Hispanoamericana, 770 p. Mxico. Stroustrup, Bjarne (2002) "El Lenguaje de Programacin C++ Edicin especial". Addison Wesley PEARSON EDUCACION S.A. 1050 p. Espaa. Stroustrup, Bjarne (1993) "El Lenguaje de Programacin C++". 2da. Edicin. Addison Wesley Iberoamericana. 710 p. E.U.A.

Edgar Ruiz Lizama

12

Vous aimerez peut-être aussi