1 / 56

Chapter 10 Simple Data Types: Built-In and User-Defined

Chapter 10 Simple Data Types: Built-In and User-Defined. Dale/Weems/Headington. Chapter 10 Topics. External and Internal Representations of Data Integral and Floating Point Data Types Using Combined Assignment Operators Prefix and Postfix Forms of Increment and Decrement Operators

tamal
Download Presentation

Chapter 10 Simple Data Types: Built-In and User-Defined

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

E N D

Presentation Transcript


  1. Chapter 10Simple Data Types: Built-In and User-Defined Dale/Weems/Headington

  2. Chapter 10 Topics • External and Internal Representations of Data • Integral and Floating Point Data Types • Using Combined Assignment Operators • Prefix and Postfix Forms of Increment and Decrement Operators • Using Ternary Operator • Using Type Cast Operator • Using an Enumeration Type • Creating and Including User-Written Header Files

  3. simple types integral floating char short int long bool enum float double long double unsigned C++ Simple Data Types

  4. ‘A’ Por definición, El tamaño de un valor tipo char en C++ es siempre 1 byte. Exactamente un byte de espacio de memoria Los tamaños de otros tipos de datos en C++ dependen de la arquitectura de la computadora en la que se esté ejecutando el programa.

  5. Usar un byte ( = 8 bits ), ¿Cuántos números diferentes se pueden representar en 8 bits? Cada bit puede tener 1 o 0, por lo que tenemos dos opciones por cada bit y son en total 8 bits. 2 x 2 x 2 x 2 x 2 x 2 x 2 x 2 = 28 = 256 0 1 1 0 0 0 1 1

  6. 0 1 0 0 1 0 1 0 0 1 1 0 0 0 1 1 Similarmente, al usar dos bytes ( = 16 bits), 216 = 65,536 SE PUEDEN REPRESENTAR DIFERENTES NUMEROS. Si deseamos tener un número representando cero y una mitad números positivos y la otra mitad números negativos, podemos obtener el siguiente rango: -32,768 . . . . 0 . . . . 32,767 ¿Porqué el negativo es mayor por uno que el positivo? - SICI-3008 (twos complement)

  7. Type Size in Bytes Minimum Value Maximum Value char 1 -128 127 short 2 -32,768 32,767 int 2 -32,768 32,767 long 4 -2,147,483,648 2,147,483,647 NOTE: Values given for one machine. Actual sizes are machine-dependent. Algunos Tipos de Datos “Integral”

  8. Tipo de Dato bool • Contiene solamente 2 valores, true y false • Operadores permitidos para ese tipo de dato son los lógicos ( !, &&, ||) y los relacionales (>, <, >=, <=, !=, ==)

  9. Operadorsizeof DEFINICIÓN C++ tiene un “unary operator” (Un operador que solo tiene un operando) llamado sizeof que muestra el tamaño según la arquitectura de la computadora, de una variable o de un tipo de datre de una variable o el nombre de un tipo de dato entre paréntesis. Ejemplo: int age ; cout << “Size in bytes of variable age is “ << sizeof age << endl ; cout << “Size in bytes of type float is “ << sizeof ( float ) << endl ;

  10. Otros ejemplos de sizeof cout << “Size of a short is “ << sizeof(short) << endl; cout << “Size of an int is “ << sizeof(int) << endl; cout << “Size of a long is “ << sizeof(long) << endl; Se puede usar con una variable. Ejemplo: sizeof someInt o el nombre de un “data type” entre paréntesis. sizeof (float)

  11. Notación Exponencial (Científica) 2.7E4 means 2.7 x 10 4 = 2.7000 = 27000.0 2.7E-4 means 2.7 x 10 - 4 = 0002.7 = 0.00027

  12. Type Size in Bytes Minimum Maximum Positive Value Positive Value float 4 3.4E-38 3.4E+38 double 8 1.7E-308 1.7E+308 long double 10 3.4E-4932 1.1E+4932 NOTE: Values given for one machine. Actual sizes are machine-dependent. Tipos de Datos “Floating Point”

  13. Más sobre los Tipos de Datos “Floating Point” • Constantes que sean “floating point”en C++ como por ejemplo 94.6 sin ningún sufijo, son de tipo double por “default” . • Si se desea otro tipo de dato “floating point” se tiene que utilizar un sufijo. • El sufijo F o f indica que es tipo float, Ej: 94.6F • El sufijo L o l indica que es tipo long double, Ej: 94.6L

  14. Los “Header Files” climits y cfloat • Contienen constantes cuyos valores son los máximos y mínimos (float y long) para la computadora en donde se esté ejecutando el programa • Esas constantes son: FLT_MAX, FLT_MIN, LONG_MAX, LONG_MIN #include < climits > usingnamespace std ; . . . cout << “Maximum long is “ << LONG_MAX << endl ; cout << “Minimum long is “ << LONG_MIN << endl ;

  15. C++ Tiene operadores de asignación combinados. Ejemplo: int age ; cin >> age ; Write a statement to add 3 to age. age = age+ 3 ; OR, age+= 3 ;

  16. Escribe un enunciado que reste 10 a la variable weight int weight ; cin >> weight ; weight = weight - 10 ; OR, weight-= 10 ;

  17. Escriba un enunciado que divida money entre 5.0 float money ; cin >> money ; money = money/ 5.0 ; OR, money/=5.0 ;

  18. Escribe un enunciado que doble el valor de la variable profits float profits ; cin >> profits ; profits = profits* 2.0 ; OR, profits*= 2.0 ;

  19. Escribe un enunciado que eleve la variablecost en un 15% float cost; cin >> cost; cost = cost + cost* .15 ; OR, cost = 1.15 * cost; OR, cost*= 1.15 ;

  20. ¿Cuál forma se debe utilizar? Cuando el operador de incrementar o decrementar se utiliza como un enunciado “stand alone” solamente para sumar o restar uno, se puede usar de cualquiera de las dos formas; “prefix”o “postfix” UTILIZE CUALQUIERA dogs--;--dogs;

  21. PERO... • Cuando el operador de incrementar o decrementar se utiliza en un enunciado junto a otros operadores, los métodos “prefix”o “postfix” pueden dar distintos resultados. Veamos un ejemplo. . .

  22. 13 num alpha 14 num 14 42 num alpha FORMA “PREFIX” “Primero incrementa, luego la utiliza” int alpha ; int num ; num = 13; alpha = ++num * 3;

  23. num alpha num alpha num FORMA POSTFIX “Primero la usa, luego incrementa” int alpha ; int num ; num = 13; alpha = num++ * 3; 13 13 39 14

  24. Más sobre Incrementar y decrementar int1 = 14; int2 = ++intl; // incrementa primero y asigna despues // int2 = 15 y int1 = 15 int1 = 14; int2 = intl++; // asigna primero e incrementa despues // int2 = 14 y int1 = 15 Tenga cuidado al utilizar el operador de incrementar y decrementar en una expresión aritmética, ya que podría confundir: Por ejemplo: Aa= (b = c++) * --d / (e += f++); Se presta a mucha confunsión. Trate de utilizar el operador de incrementar/decementar como un enunciado “stand alone” que solo se utilize para eso.

  25. 104.8 104 floatVarintVar Operador Tipo “Cast” Se utiliza en C++ para explícitamente hacer una conversión. Tiene dos formas. Ambas hacen lo mismo. intintVar; floatfloatVar = 104.8 ; intVar = int ( floatVar ) ; // functional notation, OR intVar = ( int ) floatVar ; // prefix notation uses ( )

  26. El Operador llamado “Ternary” (tres operandos) ? : SYNTAXIS Expression1 ? Expression2 : Expression3 SIGNIFICADO Si la Expression1 es cierta (no-cero), entonces el valor de la expresión entera es la Expression2. De lo contrario, el valor de le expresión entera es Expression 3. POR EJEMPLO . . .

  27. Utilizando Operadores Condicionales float Smaller ( floatx, floaty ) // Finds the smaller of two float values // Precondition: x assigned && y assigned // Postcondition: Function value == x, if x < y // == y, otherwise { floatmin; min = ( x < y ) ? x : y ; return min ; } 27

  28. Otros Ejemplos La siguiente ecuación aritmética: x, if x ≥ 0 |x| = -x, if x < 0 puede programarse asi: y = (x >= 0) ? x : -x; Podemos cambiar estos enunciados: if (a > b) max = a; else max = b; De la siguiente forma: max = (a > b) ? a : b;

  29. Precedencia de los Operadores en C++(mayor a menor) Operator Associativity ( ) Left to right unary: ++ -- ! + - (cast) sizeof Right to left * / % Left to right + - Left to right < <= > >= Left to right == != Left to right && Left to right || Left to right ? : Right to left = += -= *= /= Right to left 29

  30. floating address float double long double pointer reference “Data Types” de C++ simple structured integral enum array struct union class char short int long bool

  31. Incrementando la variable tipo char Debido a que las variables tipo char se almacenan internamente como enteros, pueden ser incrementados y comparados. EJEMPLO charch; // loop to print out letters A thru Z for (ch = ‘A’ ; ch <= ‘Z’ ; ch++ ) { cout << ch ; } 31

  32. Ejemplo con variables tipo char 97 a int someInt = 97; char someChar = 97; . . . . . cout << someInt << endl; cout << someChar << endl;

  33. Otro ejemplo con variables tipo char E char ch = ‘D’; . . . . . ch++; cout << ch;

  34. Caracteres de Control • En adición a los caracteres que se pueden imprimir, también existen caracteres que no se imprimen (control) y que controlan la pantalla, impresora y otros equipos. • En los programas de C++, los caracteres de control se representan por lo que se conoce como “escape sequences”. Cada “escape sequence” se forma con el “backslash” seguido por uno o más caracteres.

  35. Algunos “Escape Sequences” \n Newline (Line feed in ASCII) \t Horizontal tab \b Backspace \a Alert (bell or beep) \\ Backslash \’ Single quote (apostrophe) \” Double quote (quotation mark) \0 Null character (all zero bits) \ddd Octal equivalent (3 octal digits) \xddd Hexadecimal equivalent (1 or more hex digits for integer value of character)

  36. Ejemplos de los “Escape Sequences” cout << ‘\a’; \\ la computadora suena un beep cout << “Ella dice \”¡Hola!\” ”; \\ va a salir Ella dice ”¡Hola!” cout << ‘\t’; \\ salta una cantidad de espacios

  37. Convirtiendo chara int • Los caracteres ‘0’ al ‘9’ son representados en ASCII por los enteros 48 al 57 (La situación es similar en EBCDIC) • Como resultado, la siguiente expresión convierte un dígito tipo char a su correspondiente valor entero (int) ‘2’? chnumber char ch ; int number ; . . . number = int ( ch - ‘0’ ) ; // using explicit type cast

  38. Prototipos de Funciones que manejan caracteres en < cctype > int toupper ( int ch ); // FUNCTION VALUE // == uppercase equivalent of ch, if ch is a lowercase letter // == ch, otherwise int tolower ( int ch ); // FUNCTION VALUE // == lowercase equivalent of ch, if ch is an uppercase letter // == ch, otherwise NOTE: Although parameter and return type are int, in concept these functions operate on character data.

  39. Leyendo una respuesta tipo yes o no del usuario String inputStr ; . . . cout << “Enter Yes or No” ; cin >> inputStr ; if ( toupper ( inputStr [0] ) == ‘Y’ ) { // First letter was ‘Y’ . . . } else if ( toupper ( inputStr [0] ) == ‘N’ ) { // First letter was ‘N’ . . . } else PrintErrorMsg ( ) ; 39

  40. floating address float double long double pointer reference C++ Data Types simple structured integral enum array struct union class char short int long bool

  41. El enunciado typedef • typedef crea un nombre adicional para un tipo de dato ya existente. • Antes de que el tipo de dato bool se utilizara en el ISO-ANSI C++, los datos booleanos se simulaban de esta forma. typedefint Boolean; const Boolean true = 1 ; const Boolean false = 0 ; . . . Boolean dataOK ; . . . dataOK = true ;

  42. Ejemplo de typedef typedef int Days; const int SUN = 0; const int MON = 1; const int TUE = 2; . . . . . . . const int SAT = 6;

  43. Nombre del nuevo tipo Lista de todos los posibles valores Tipos de Datos de Enumeración (enum) • C++ permite la creación de un tipo de dato simple que enumera una lista de valores ordenados EJEMPLO enum MonthType { JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC } ;

  44. Declaración del Tipo de dato enum enum MonthType { JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC } ; • La declaración enum crea un nuevo tipo de dato definido por el programador y lista todos los posibles valores. • Los valores se ordenan en el orden en que se listan. En este caso, JAN < FEB < MAR < APR , y así por el estilo. • Aún se necesita declarar las variables de este tipo de dato

  45. Ejemplo: enum enum MonthType { JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC } ; MonthType thisMonth; // declares 2 variables MonthType lastMonth; // of type MonthType lastMonth = OCT ; // assigns values thisMonth = NOV ; // to these variables . . . lastMonth = thisMonth ; thisMonth = DEC ; 45

  46. Almacenamiento de la variable tipo enum stored as 0 stored as 1 stored as 2 stored as 3 etc. enum MonthType { JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC } ; stored as 11

  47. Uso de las varibles tipo enum enum MonthType { JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC } ; MonthType thisMonth; MonthType lastMonth; lastMonth = OCT ; thisMonth = NOV ; lastMonth = thisMonth ; thisMonth = thisMonth++ ; // COMPILE ERROR ! thisMonth = MonthType( thisMonth + 1) ; // uses type cast 47

  48. Más sobreenum Se puede utilizar en el enunciado Switch. Las comparaciones se pueden hacer con los 6 operadores relacionales( < , <= , > , >= , == , != ). Un dato tipo enum type puede utilizarse en el return de una función que devuelva un valor en C++. ALGUNOS EJEMPLOS . . .

  49. MonthType thisMonth; switch ( thisMonth )// using enum type switch expression { case JAN : case FEB : case MAR : cout << “Winter quarter” ; break ; case APR : case MAY : case JUN : cout << “Spring quarter” ; break ; case JUL : case AUG : case SEP : cout << “Summer quarter” ; break ; case OCT : case NOV : case DEC : cout << “Fall quarter” ; } 49

  50. Utilizando enum en un ciclo (“Loop”) enum MonthType { JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC } ; void WriteOutName ( /* in */MonthType ) ; // prototype . . . MonthType month ; for (month = JAN ; month <= DEC ; month = MonthType (month + 1 ) ) {// requires use of type cast to increment WriteOutName ( month ) ; // function call to perform output . . . } 50

More Related