Curso C++: Variables y Tipos - Laboratorio SS.OO...
-
Upload
nguyenhanh -
Category
Documents
-
view
245 -
download
0
Transcript of Curso C++: Variables y Tipos - Laboratorio SS.OO...
![Page 1: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria](https://reader031.fdocuments.net/reader031/viewer/2022022023/5ba9573609d3f2580f8c5489/html5/thumbnails/1.jpg)
Curso C++:Variables y Tipos
Jorge Peña Pastor
June 7, 2011
Jorge Peña Pastor Variables y Tipos 1/53
![Page 2: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria](https://reader031.fdocuments.net/reader031/viewer/2022022023/5ba9573609d3f2580f8c5489/html5/thumbnails/2.jpg)
Variables
Representan cantidades y/o cualidades.Antes de usarlas debemos declararlas para que el compilador(o intérprete) pueda conocer:
• Su nombre• Su ámbito de vida• Su visibilidad• El tipo de datos asociado
Jorge Peña Pastor Variables y Tipos 2/53
![Page 3: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria](https://reader031.fdocuments.net/reader031/viewer/2022022023/5ba9573609d3f2580f8c5489/html5/thumbnails/3.jpg)
Declaración de Variables
• Simple:
int i ;
• Múltiple:
int i , j , k ;
• Con asignación de valor inicial:
int i = 5;
int i = −133, j = i , k ;
Jorge Peña Pastor Variables y Tipos 3/53
![Page 4: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria](https://reader031.fdocuments.net/reader031/viewer/2022022023/5ba9573609d3f2580f8c5489/html5/thumbnails/4.jpg)
Declaración de Variables
• Simple:
int i ;
• Múltiple:
int i , j , k ;
• Con asignación de valor inicial:
int i = 5;
int i = −133, j = i , k ;
Jorge Peña Pastor Variables y Tipos 3/53
![Page 5: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria](https://reader031.fdocuments.net/reader031/viewer/2022022023/5ba9573609d3f2580f8c5489/html5/thumbnails/5.jpg)
Nombres de Variables
Deben reflejar los términos abstractos del problema.No deben ser ambiguos.El lenguaje puede restringir el nombrado:
• Identificadores correctos: {a-zA-Z_}[a-zA-Z_0-9]*• No estan permitidas variables cuyo nombre coincida con
palabras reservadas del lenguaje.• No se admiten símbolos especiales: ; " ’ ñ , ? ! ^ ~ …• Otras restricciones (ej. longitud).
Jorge Peña Pastor Variables y Tipos 4/53
![Page 6: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria](https://reader031.fdocuments.net/reader031/viewer/2022022023/5ba9573609d3f2580f8c5489/html5/thumbnails/6.jpg)
Palabras Reservadas en C++
asm, auto, bool, break, case, catch, char, class, const,const_cast, continue, default, delete, do, double,
dynamic_cast, else, enum, explicit, export, extern, false,float, for, friend, goto, if, inline, int, long, mutable,
namespace, new, operator, private, protected, public,register, reinterpret_cast, return, short, signed, sizeof,static, static_cast, struct, switch, template, this, throw,true, try, typedef, typeid, typename, union, unsigned,
using, virtual, void, volatile, wchar_t, while
Jorge Peña Pastor Variables y Tipos 5/53
![Page 7: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria](https://reader031.fdocuments.net/reader031/viewer/2022022023/5ba9573609d3f2580f8c5489/html5/thumbnails/7.jpg)
Ámbito de Vida
Determina durante cuánto tiempo existe una variable.• Variable global a módulo o programa:
• Existen durante todo el tiempo de ejecución.• Toman valor inicial 0 (todos sus bits a 0).
• Variable local o parámetro formal de una función:• Existen sólo durante cada llamada.• Toman valor inicial indeterminado (basura).
Jorge Peña Pastor Variables y Tipos 6/53
![Page 8: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria](https://reader031.fdocuments.net/reader031/viewer/2022022023/5ba9573609d3f2580f8c5489/html5/thumbnails/8.jpg)
Visibilidad
Determina desde dónde podemos usar una variable.• Variable global al programa:
• Desde cualquier punto del programa.• Variable global a un módulo:
• Sólo desde dicho módulo.• Variable local o parámetro formal de función:
• Sólo desde dicha función.• Una variable local oculta a una global con el mismo
nombre.
Jorge Peña Pastor Variables y Tipos 7/53
![Page 9: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria](https://reader031.fdocuments.net/reader031/viewer/2022022023/5ba9573609d3f2580f8c5489/html5/thumbnails/9.jpg)
Ejemplos de Ámbito y Visibilidad
int a,b; /∗ Globales ∗/void funcion(void){/∗ Las variables a y b son variables enteras ∗//∗ La variable c no existe ∗/}int main(void){float a,c ; /∗ Locales ∗//∗ Las variables a y c son reales ∗//∗ La variable b es entera ∗/}
Jorge Peña Pastor Variables y Tipos 8/53
![Page 10: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria](https://reader031.fdocuments.net/reader031/viewer/2022022023/5ba9573609d3f2580f8c5489/html5/thumbnails/10.jpg)
Modificadores de Variablesconst
• Su valor no debe, y no puede, ser alterado.static
• Su valor se mantiene dentro de su ámbito.• Si global, sólo global al módulo.• Si local, conserva valor entre invocaciones.• Valor inicial 0.
register• Indica nuestra intención de ubicar la variable en un registro.• Es una pista para el compilador (no está garantizado).
volatile• El contenido de la variable podría cambiar de valor
espontáneamente por efecto de algo "externo" alprograma.
• Evita optimizaciones por parte del compilador en cuanto aacceso de memoria de la variable.
Jorge Peña Pastor Variables y Tipos 9/53
![Page 11: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria](https://reader031.fdocuments.net/reader031/viewer/2022022023/5ba9573609d3f2580f8c5489/html5/thumbnails/11.jpg)
Tipos de Datos
Cada variable tiene que tener asociado un tipo que indique quées lo que contiene la variable.Determina qué opereaciones se pueden hacer sobre lavariable.Permite al compilador:
• Detectar errores• Optimizar la ejecución
Podrá ser uno de los tipos básicos proporcionados por ellenguaje o bien un tipo derivado creado por un programador.
Jorge Peña Pastor Variables y Tipos 10/53
![Page 12: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria](https://reader031.fdocuments.net/reader031/viewer/2022022023/5ba9573609d3f2580f8c5489/html5/thumbnails/12.jpg)
Tipos de Datos
Se escoge según el conjunto de valores que queramos que lavariable pueda tomar.
• En algunos casos por las limitaciones del sistema.Los tipos numéricos básicos deteminan el rango de posiblesvalores
• Una variable de tipo Entero no podrá valer 3.75 (decimal).• Una variable de tipo Positivo (sin-signo) no podrá valer -1.
Jorge Peña Pastor Variables y Tipos 11/53
![Page 13: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria](https://reader031.fdocuments.net/reader031/viewer/2022022023/5ba9573609d3f2580f8c5489/html5/thumbnails/13.jpg)
Tipos Básicos
Posibles contenidos de variables según el tipo con el quefueron declaradas:
Boleano: true, falseCarácter: a, A, z, Z, 1, 9, ...
Entero: −1, 33Real: 3.14, −5x10−15
Enumerado: lunes, martes ...Vectores: {4, 5, 9}, {H, o, l, a}Puntero: NULL
Jorge Peña Pastor Variables y Tipos 12/53
![Page 14: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria](https://reader031.fdocuments.net/reader031/viewer/2022022023/5ba9573609d3f2580f8c5489/html5/thumbnails/14.jpg)
Entero
• Para contar o enumerar
int saldo_bancario = 1000;
• Diferentes bases de representación:
Hexadecimal(base 16): 0x0 -0x1 0xFFF 0xFea0Octal(base 8): 00 -01 07777 0177240Decimal(base 10): 0 -1 4095 65184
Jorge Peña Pastor Variables y Tipos 13/53
![Page 15: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria](https://reader031.fdocuments.net/reader031/viewer/2022022023/5ba9573609d3f2580f8c5489/html5/thumbnails/15.jpg)
Modificadores de Enteros
De Signo:• signed: Valores positivos y negativos.
signed int var ; 32 bits : /∗−2147483648 a 2147483648∗/
• unsigned: Sólo valores positivos.
unsigned int var ; /∗32 bits : 0 a 4294967295∗/
Si no se indica nada es signed
int var ; 32 bits : /∗−2147483648 a 2147483648∗/
Jorge Peña Pastor Variables y Tipos 14/53
![Page 16: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria](https://reader031.fdocuments.net/reader031/viewer/2022022023/5ba9573609d3f2580f8c5489/html5/thumbnails/16.jpg)
Modificadores de Enteros
De Signo:• signed: Valores positivos y negativos.
signed int var ; 32 bits : /∗−2147483648 a 2147483648∗/
• unsigned: Sólo valores positivos.
unsigned int var ; /∗32 bits : 0 a 4294967295∗/
Si no se indica nada es signed
int var ; 32 bits : /∗−2147483648 a 2147483648∗/
Jorge Peña Pastor Variables y Tipos 14/53
![Page 17: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria](https://reader031.fdocuments.net/reader031/viewer/2022022023/5ba9573609d3f2580f8c5489/html5/thumbnails/17.jpg)
Modificadores de Enteros
De tamaño:• short
short int dia ; /∗ 16 bits (aprox) ∗/
• sin modificador (por defecto)
int horas; /∗ 32 bits ∗/
• long
long segundos; /∗ 32 bits (aprox) ∗/
• long long
long long micro_segundos; /∗ 64 bits (GNU C) ∗/
Jorge Peña Pastor Variables y Tipos 15/53
![Page 18: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria](https://reader031.fdocuments.net/reader031/viewer/2022022023/5ba9573609d3f2580f8c5489/html5/thumbnails/18.jpg)
Modificadores de Enteros
Pueden combinarse para adaptarse a las necesidades denuestro problema:
signed long int variable ;unsigned short int variable ;
Puede omitirse el int
unsigned variable ;
El tamaño en memoria depende del compilador y de laarquitectura.Normalmente se usa simplemente int.
Jorge Peña Pastor Variables y Tipos 16/53
![Page 19: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria](https://reader031.fdocuments.net/reader031/viewer/2022022023/5ba9573609d3f2580f8c5489/html5/thumbnails/19.jpg)
Booleano
Representa los valores lógicos cierto y falso.
bool hace_sol = true ;bool tengo_coche = false ;
Se utiliza para representar el resultado de operaciones lógicas(según el álgebra de Bool) y de comparación:
bool vamos_excursion = hace_sol && tengo_cochebool resultado = a > b;
Jorge Peña Pastor Variables y Tipos 17/53
![Page 20: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria](https://reader031.fdocuments.net/reader031/viewer/2022022023/5ba9573609d3f2580f8c5489/html5/thumbnails/20.jpg)
Booleano
Representa los valores lógicos cierto y falso.
bool hace_sol = true ;bool tengo_coche = false ;
Se utiliza para representar el resultado de operaciones lógicas(según el álgebra de Bool) y de comparación:
bool vamos_excursion = hace_sol && tengo_cochebool resultado = a > b;
Jorge Peña Pastor Variables y Tipos 17/53
![Page 21: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria](https://reader031.fdocuments.net/reader031/viewer/2022022023/5ba9573609d3f2580f8c5489/html5/thumbnails/21.jpg)
Carácter
Son valores numéricos de tamaño 1 byte (128 tipos).Representan caracteres según una convención dada (códigoASCII o Latin1).
• Constante entre comillas simples (apóstrofe ’)
char letra = ’a ’ ;
• Secuencias de escape:
char retorno = ’ \n ’ ;char tabulador = ’ \ t ’ ;
• Valor numérico:
char arroba = ’ \100 ’ ; /∗ Codigo ASCII de @ en octal∗/
Jorge Peña Pastor Variables y Tipos 18/53
![Page 22: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria](https://reader031.fdocuments.net/reader031/viewer/2022022023/5ba9573609d3f2580f8c5489/html5/thumbnails/22.jpg)
Real
Números positivos o negativos con o sin decimales.También llamdos de “coma flotante”.Representación interna distinta a la del entero.Notación decimal o científica
Jorge Peña Pastor Variables y Tipos 19/53
![Page 23: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria](https://reader031.fdocuments.net/reader031/viewer/2022022023/5ba9573609d3f2580f8c5489/html5/thumbnails/23.jpg)
Tipos de Reales
Tres tamaños:• float (precisión simple).
float medida = 2.3 f ;float distancia = 42E−11;
• double (doble precisión).
double valor = 4.22;
• long double (precisión extendida).
long double PI=3.14159265358979323846;
El valor exacto depende de cada implementación peronormalmente float 32 bits, double 64 y long double 128 bits.
Jorge Peña Pastor Variables y Tipos 20/53
![Page 24: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria](https://reader031.fdocuments.net/reader031/viewer/2022022023/5ba9573609d3f2580f8c5489/html5/thumbnails/24.jpg)
Conversión de Tipos
¿Qué pasa cuando combinamos tipos diferentes?• int y float• int y bool• float y double
Existen 2 mecanismos:• Conversión automática• Conversión explícita
Jorge Peña Pastor Variables y Tipos 21/53
![Page 25: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria](https://reader031.fdocuments.net/reader031/viewer/2022022023/5ba9573609d3f2580f8c5489/html5/thumbnails/25.jpg)
Conversión Automática
La hace automáticamente el compiladorEs segura siempre que sepamos que la conversión que va ahacer el compilador es la que nos interesa.Promoción
• De un “tipo” menor a un tipo “mayor”
float valor = 2; / / 2 se convierte en 2.0
Degradación
int valor = 2.2; / / 2.2 se convierte en 2
Jorge Peña Pastor Variables y Tipos 22/53
![Page 26: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria](https://reader031.fdocuments.net/reader031/viewer/2022022023/5ba9573609d3f2580f8c5489/html5/thumbnails/26.jpg)
Conversión Explícita de Tipo
Casting: mecanismo para explicitar el cambio de tipo deuna expresión o variable.
Le indicamos al compilador que asumimos la responsabilidadExisten 2 formas:
• Castings de C:• (tipo)variable• tipo(variable)
• Castings de C++:• static_cast• dynamic_cast• const_cast• reinterpret_cast
Jorge Peña Pastor Variables y Tipos 23/53
![Page 27: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria](https://reader031.fdocuments.net/reader031/viewer/2022022023/5ba9573609d3f2580f8c5489/html5/thumbnails/27.jpg)
Ejemplos de Conversión de Tipos
float f = 65.2;float g = ( int ) 65.2; / / g vale 65.0float h = 3/2; / / h vale 1.0float i = ( float )3/( float )2 / / i vale 1.5float k = static_cast<int >(65.2); / / k = 65.0
Jorge Peña Pastor Variables y Tipos 24/53
![Page 28: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria](https://reader031.fdocuments.net/reader031/viewer/2022022023/5ba9573609d3f2580f8c5489/html5/thumbnails/28.jpg)
Conversión de Bool
Las expresiones condicionales o booleanas, se conviertenautomáticamente utilizando las siguiente normas:
• Si la expresión vale 0, entonces es falso, si no, es cierto.• Los valores booleanos true y false se convierten en 1 y 0
cuando se hace el casting a int• Para pasar de int a bool se sigue la misma norma que para
las expresiones: 0 es false y el resto de enteros true
Jorge Peña Pastor Variables y Tipos 25/53
![Page 29: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria](https://reader031.fdocuments.net/reader031/viewer/2022022023/5ba9573609d3f2580f8c5489/html5/thumbnails/29.jpg)
Operadores Aritméticos
+ Suma- Resta* Multiplicación/ División
% Módulo (resto)++ Auto-incremento (pre ó post)
– Auto-decremento (pre ó post)
Jorge Peña Pastor Variables y Tipos 26/53
![Page 30: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria](https://reader031.fdocuments.net/reader031/viewer/2022022023/5ba9573609d3f2580f8c5489/html5/thumbnails/30.jpg)
Ejemplo Operadores Aritméticos
int a = 5 − (2 ∗ 2); int b; float f ;a++; /∗ a = a + 1 ∗/a=3; b=a++; /∗ a=4 b=3 ∗/a=3; b=++a; /∗ a=4 b=4 ∗/a=3; b=a−−; /∗ a=2 b=3 ∗/f =4/3; /∗ f == 1 Div . entera ∗/b=4%3; /∗ b == 1 == (4 − (4/3)∗3) ∗/f =4.0/3; /∗ f == 1.333 Div . real ∗/f =(float )4/3; /∗ f == 1.333 Div . real ∗/for ( int i =0; i <10; i ++) / / Realiza 10 veces el bucle
Jorge Peña Pastor Variables y Tipos 27/53
![Page 31: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria](https://reader031.fdocuments.net/reader031/viewer/2022022023/5ba9573609d3f2580f8c5489/html5/thumbnails/31.jpg)
Operadores de Asignación
Provienen de la combinación de operadores aritméticos con eloperador de asignación:
+=, -=, *=, /=, %=
Algunos ejemplos:
int a = 5, b = 2;a ∗= 2; /∗ a = a ∗ 2; a = 5 ∗ 2; a = 10 ∗/a /= b + 3; /∗ a = a / (b+3); a = 10 / (2+3); a = 2; ∗/
Jorge Peña Pastor Variables y Tipos 28/53
![Page 32: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria](https://reader031.fdocuments.net/reader031/viewer/2022022023/5ba9573609d3f2580f8c5489/html5/thumbnails/32.jpg)
Operadores de Comparación yLógicos
== Igual! = Distinto> Mayor
>= Mayor o igual< Menor
<= Menor o igual&& AND lógico|| OR lógico! NOT lógico
Jorge Peña Pastor Variables y Tipos 29/53
![Page 33: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria](https://reader031.fdocuments.net/reader031/viewer/2022022023/5ba9573609d3f2580f8c5489/html5/thumbnails/33.jpg)
Operadores de Comparación yLógicos
int a = 3, b= 2, c=4, d=1;i f (a>b) /∗ cierto ∗/i f (a>b | | a>c) /∗ cierto ∗/i f (a>b && c>d) /∗ cierto ∗/bool a = false ;I f (a == b) /∗ falso∗/i f ( !a) /∗ cierto ∗/
Jorge Peña Pastor Variables y Tipos 30/53
![Page 34: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria](https://reader031.fdocuments.net/reader031/viewer/2022022023/5ba9573609d3f2580f8c5489/html5/thumbnails/34.jpg)
Operadores de Comparación yLógicos
Se aplican sobre tipos booleanos. Toda expresión sirve deexpresión lógica considerándose:
• FALSA si la expresión se evalúa a CERO .• CIERTA si la expresión se evalúa a cualquier otro valor.
i f (a) /∗ Identico a: i f (a != 0) ∗/i f ( !b) /∗ Identico a: i f (b == 0) ∗/
El valor resultante de evaluar operadores lógicos es• 0 sii FALSO• 1 sii CIERTO
Jorge Peña Pastor Variables y Tipos 31/53
![Page 35: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria](https://reader031.fdocuments.net/reader031/viewer/2022022023/5ba9573609d3f2580f8c5489/html5/thumbnails/35.jpg)
Operadores de Comparación yLógicos
Es importante a la hora de evaluar una expresión lógica:• La precedencia de los operadores:
int a = (3>2 | | 5==4) && !1; /∗ a = 0 o FALSO) ∗/int b = (3>2 | | 5==4) && 7; /∗ b = 1 o CIERTO) ∗/
• La evaluación de expresiones lógicas es perezosa
int a = (3>2 | | b==4); /∗ b==4 NO se llega a evaluar ∗/
Jorge Peña Pastor Variables y Tipos 32/53
![Page 36: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria](https://reader031.fdocuments.net/reader031/viewer/2022022023/5ba9573609d3f2580f8c5489/html5/thumbnails/36.jpg)
Operador TernarioSii (A) entonces vale B, si no vale C
A ? B : C
En operador ternario nos permite reemplazar asignacionescondicionales. Así pues, en lugar de usar una estructura decontrol:
I f (num%2) {str = "par" ;} else {str = "impar" ;}
Podemos emplear el operador ternario para obtener el mismoresultado:
str = (num%2 ? "par" : "impar" ) ;
Jorge Peña Pastor Variables y Tipos 33/53
![Page 37: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria](https://reader031.fdocuments.net/reader031/viewer/2022022023/5ba9573609d3f2580f8c5489/html5/thumbnails/37.jpg)
Operador sizeof()
• Obtiene el número de bytes que ocupa (en memoria) unavariable o un tipo de datos
int a;i f (sizeof (a) == sizeof ( int ) ) /∗CIERTO∗/
• Devuelve un unsigned• Se obtiene durante la compilación• NO es función sino operador• Relaciones conocidas:
• 1 == sizeof(char) <= sizeof(short) <= sizeof(int) ==sizeof(unsigned) <= sizeof(long) <= sizeof(long long)
• sizeof(float) <= sizeof(double)
Jorge Peña Pastor Variables y Tipos 34/53
![Page 38: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria](https://reader031.fdocuments.net/reader031/viewer/2022022023/5ba9573609d3f2580f8c5489/html5/thumbnails/38.jpg)
Operadores de Bit
& AND| OR^ XOR~ NOT
<< Desplazamiento a la izquierda>> Desplazamiento a la derecha
Jorge Peña Pastor Variables y Tipos 35/53
![Page 39: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria](https://reader031.fdocuments.net/reader031/viewer/2022022023/5ba9573609d3f2580f8c5489/html5/thumbnails/39.jpg)
Ejemplos Operador de Bit
unsigned char a = 48;
unsigned char b = 19;
unsigned char x = a & b;
unsigned char y = a | b;
unsigned char z = a ^ b;
unsigned char w = ~a;
unsigned char t = a >> 2;
unsigned char s = b << 3;
0 0 1 1 0 0 0 0 a
0 0 0 1 0 0 1 1 b
0 0 0 1 0 0 0 0 x = 16
0 0 1 1 0 0 1 1 y = 51
0 0 1 0 0 0 1 1 z = 35
1 1 0 0 1 1 1 1 w = 207
0 0 0 0 1 1 0 0 t = 12
1 0 0 1 1 0 0 0 s = 152
Jorge Peña Pastor Variables y Tipos 36/53
![Page 40: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria](https://reader031.fdocuments.net/reader031/viewer/2022022023/5ba9573609d3f2580f8c5489/html5/thumbnails/40.jpg)
Precedencia y Asociación
¿Cómo se evalúan expresiones con múltiples operadores?
int res = 3+4∗6 /∗ (27 o 42) ∗/
Jorge Peña Pastor Variables y Tipos 37/53
![Page 41: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria](https://reader031.fdocuments.net/reader031/viewer/2022022023/5ba9573609d3f2580f8c5489/html5/thumbnails/41.jpg)
Precedencia
Los operadores de cada filatienen mayor precedencia quelos de su fila inferior.Los operadores de cada filatienen la misma precedencia
(, ), [, ], .,++,−− (post)sizeof, ++,−−, (pre)∗, /,%+,−<<,>>
<,<=, >,>=
==, !=&^|&&||=, +=, -=, *=, /=, %=?, :
Jorge Peña Pastor Variables y Tipos 38/53
![Page 42: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria](https://reader031.fdocuments.net/reader031/viewer/2022022023/5ba9573609d3f2580f8c5489/html5/thumbnails/42.jpg)
Asociación
Todos los operadores de asignación, los operadores unarios yel operador ternario son asociativos de derecha a izquierda.El resto de izquierda a derecha.
3+4+5+6; /∗ ((3+4)+5)+6 ∗/a=b=c=d; /∗ a=(b=(c=d)) ∗/a=b<c; /∗ a=(b<c) ∗/
Jorge Peña Pastor Variables y Tipos 39/53
![Page 43: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria](https://reader031.fdocuments.net/reader031/viewer/2022022023/5ba9573609d3f2580f8c5489/html5/thumbnails/43.jpg)
Ejercicios
Preguntas
Jorge Peña Pastor Variables y Tipos 40/53
![Page 44: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria](https://reader031.fdocuments.net/reader031/viewer/2022022023/5ba9573609d3f2580f8c5489/html5/thumbnails/44.jpg)
Arrays/Vectores
Agrupaciones de información homogénea.Se almacenan en memoria contigua.
• Son variables independientes.• Utilizan un mismo identificador para acceder a su
contenido.A cada elemento se accede con el operador []Se indexan con enteros desde el 0
int vector [2 ] ; / / Vector de 2 elementosvector [0] = 1; / / Primer elementovector [1] = 2; / / Segundo elementovector [2] = 3; / / Error : No existen 3 elementos
Jorge Peña Pastor Variables y Tipos 41/53
![Page 45: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria](https://reader031.fdocuments.net/reader031/viewer/2022022023/5ba9573609d3f2580f8c5489/html5/thumbnails/45.jpg)
Copia de Arrays
Para copiar arrays es necesario realizar la copia de cada unode sus valores.
int a[2] , b[2 ] ;a = b; / / Operacion no permitidaa[0] = b[0 ] ;a[1] = b[1 ] ;
Jorge Peña Pastor Variables y Tipos 42/53
![Page 46: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria](https://reader031.fdocuments.net/reader031/viewer/2022022023/5ba9573609d3f2580f8c5489/html5/thumbnails/46.jpg)
Inicialización de Arrays
Manual:
int a[2 ] ;a[0] = 1; a[1] = 2;
int a[4] = {0 ,1 ,2 ,3};
Automática:
int a[ ] = {0 ,1}; /∗ a[2] = {0 ,1}
int a[4] = {1 ,2}; / / Las posiciones 2 y 3 vacias
Jorge Peña Pastor Variables y Tipos 43/53
![Page 47: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria](https://reader031.fdocuments.net/reader031/viewer/2022022023/5ba9573609d3f2580f8c5489/html5/thumbnails/47.jpg)
Inicialización de Arrays
Manual:
int a[2 ] ;a[0] = 1; a[1] = 2;
int a[4] = {0 ,1 ,2 ,3};
Automática:
int a[ ] = {0 ,1}; /∗ a[2] = {0 ,1}
int a[4] = {1 ,2}; / / Las posiciones 2 y 3 vacias
Jorge Peña Pastor Variables y Tipos 43/53
![Page 48: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria](https://reader031.fdocuments.net/reader031/viewer/2022022023/5ba9573609d3f2580f8c5489/html5/thumbnails/48.jpg)
Inicialización de Arrays
Manual:
int a[2 ] ;a[0] = 1; a[1] = 2;
int a[4] = {0 ,1 ,2 ,3};
Automática:
int a[ ] = {0 ,1}; /∗ a[2] = {0 ,1}
int a[4] = {1 ,2}; / / Las posiciones 2 y 3 vacias
Jorge Peña Pastor Variables y Tipos 43/53
![Page 49: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria](https://reader031.fdocuments.net/reader031/viewer/2022022023/5ba9573609d3f2580f8c5489/html5/thumbnails/49.jpg)
Inicialización de Arrays
Manual:
int a[2 ] ;a[0] = 1; a[1] = 2;
int a[4] = {0 ,1 ,2 ,3};
Automática:
int a[ ] = {0 ,1}; /∗ a[2] = {0 ,1}
int a[4] = {1 ,2}; / / Las posiciones 2 y 3 vacias
Jorge Peña Pastor Variables y Tipos 43/53
![Page 50: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria](https://reader031.fdocuments.net/reader031/viewer/2022022023/5ba9573609d3f2580f8c5489/html5/thumbnails/50.jpg)
Arrays de Varias Dimensiones
Se declaran concatenando varios []Se indexa en cada paso cada dimensiónSe inicializan de la misma forma que los arraysunidimensionales.
int a[2] [3 ] = { {1 ,2 ,3} , {4 ,5 ,6} } ;
Se declarar automáticamente el tamaño de la primeradimensión, pero no del resto.
int a[ ] [ 3 ] = { {1 ,2 ,3} , {4 ,5 ,6} } ;int b = a[0 ] [2 ] ; / / b contendra al valor 3int c = a[1 ] [1 ] ; / / c contendra al valor 5
Jorge Peña Pastor Variables y Tipos 44/53
![Page 51: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria](https://reader031.fdocuments.net/reader031/viewer/2022022023/5ba9573609d3f2580f8c5489/html5/thumbnails/51.jpg)
Literales String
Tiras de Caracteres.Constantes entre comillas dobles.
"Esto es un string "
Sirven para inicializar arrays de tipo char• El último caracter siempre es el caracter nulo ’\0’• Necesitamos almacenar tantas variables de tipo char
como caracteres en nuestro literal + 1 del caracter nulo.
char nombre[4] = "Ana" ; /∗ nombre[4]={ ’A ’ , ’n ’ , ’a ’ , ’ \ 0 ’ } ; ∗/
Pero no para cambiar su valor una vez inicializados.
nombre = "Pedro" /∗ ERROR ∗/
Jorge Peña Pastor Variables y Tipos 45/53
![Page 52: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria](https://reader031.fdocuments.net/reader031/viewer/2022022023/5ba9573609d3f2580f8c5489/html5/thumbnails/52.jpg)
Punteros
Tipo básico.Diferente a los que hemos visto hata ahora:
• El resto de los tipos almacenan datos relativos al cálculodel programa
• Los punteros almacenan direcciones de memoriaAsí pues, un puntero no almacene un dato, sino que apunta aél.
Puntero Dato
Jorge Peña Pastor Variables y Tipos 46/53
![Page 53: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria](https://reader031.fdocuments.net/reader031/viewer/2022022023/5ba9573609d3f2580f8c5489/html5/thumbnails/53.jpg)
Punteros
Definición de variables de tipo puntero:• tipo *variable;
int ∗puntero_a_int , variable_int ;/∗ solo la primera variable es un puntero ∗/
Operador &:• Sirve para obtener la dirección de una variable.
puntero_a_int = &variable_int ;
Operador ∗:• Sirve para obtener el dato al que apunta una variable.
bool iguales = ∗puntero_a_int == variable_int ;
Jorge Peña Pastor Variables y Tipos 47/53
![Page 54: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria](https://reader031.fdocuments.net/reader031/viewer/2022022023/5ba9573609d3f2580f8c5489/html5/thumbnails/54.jpg)
Tipos Definidos por elusuario
Jorge Peña Pastor Variables y Tipos 48/53
![Page 55: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria](https://reader031.fdocuments.net/reader031/viewer/2022022023/5ba9573609d3f2580f8c5489/html5/thumbnails/55.jpg)
Tipo Enumerado
Es un tipo que puede contener un conjunto de valores definidopor el usuario.Se suele utilizar como una forma alternativa para definirconstantes.Existen dos formas de declararlos:
• especificando el nombre del tipo:
enum Mes {Enero, Febrero, . . , Diciembre } ;Mes mes_de_vacaciones;Mes mes_de_nacimiento;
• sin especificar el nombre del tipo:
enum {FEMENINO, MASCULINO} genero;
Jorge Peña Pastor Variables y Tipos 49/53
![Page 56: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria](https://reader031.fdocuments.net/reader031/viewer/2022022023/5ba9573609d3f2580f8c5489/html5/thumbnails/56.jpg)
Representación Interna de losEnumerados
Internamente se representan como un entero:
enum Genero {FEMENINO=0, MASCULINO=1};
Se puede especificar el valor de cada elemento:
enum Mes {Enero=1, Febrero=2, . . , Diciembre=12};
Se puede especificar el valor del primer elemento, y el resto seasignan de forma consecutiva:
enum Mes {Enero=1, Febrero, . . , Diciembre } ;
Jorge Peña Pastor Variables y Tipos 50/53
![Page 57: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria](https://reader031.fdocuments.net/reader031/viewer/2022022023/5ba9573609d3f2580f8c5489/html5/thumbnails/57.jpg)
Representación Interna de losEnumerados
Internamente se representan como un entero:
enum Genero {FEMENINO=0, MASCULINO=1};
Se puede especificar el valor de cada elemento:
enum Mes {Enero=1, Febrero=2, . . , Diciembre=12};
Se puede especificar el valor del primer elemento, y el resto seasignan de forma consecutiva:
enum Mes {Enero=1, Febrero, . . , Diciembre } ;
Jorge Peña Pastor Variables y Tipos 50/53
![Page 58: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria](https://reader031.fdocuments.net/reader031/viewer/2022022023/5ba9573609d3f2580f8c5489/html5/thumbnails/58.jpg)
Representación Interna de losEnumerados
Internamente se representan como un entero:
enum Genero {FEMENINO=0, MASCULINO=1};
Se puede especificar el valor de cada elemento:
enum Mes {Enero=1, Febrero=2, . . , Diciembre=12};
Se puede especificar el valor del primer elemento, y el resto seasignan de forma consecutiva:
enum Mes {Enero=1, Febrero, . . , Diciembre } ;
Jorge Peña Pastor Variables y Tipos 50/53
![Page 59: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria](https://reader031.fdocuments.net/reader031/viewer/2022022023/5ba9573609d3f2580f8c5489/html5/thumbnails/59.jpg)
Definición de Nuevos Tipos
Permite dar semántica a las variables de un problema.
typedef float Grados;Grados temperatura = 26.5;
Facilita la lectura del código.
typedef const unsigned int ConstanteEnteraSinSigno;ConstanteEnteraSinSigno MAX_FILAS = 5;
Puede facilitar la portabilidad entre distintas plataformas.
Jorge Peña Pastor Variables y Tipos 51/53
![Page 60: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria](https://reader031.fdocuments.net/reader031/viewer/2022022023/5ba9573609d3f2580f8c5489/html5/thumbnails/60.jpg)
EstructurasAgrupaciones de información heterogénea almacenada enmemoria continua:
struct Fecha {int dia ;Mes mes;int ano;bool festivo ;} ;Fecha aniversario ;
Se pueden inicializar como los vectores:
Fecha hoy = {7 ,JUNIO, 2011, false } ;
Se accede a sus campos utilizando el operador . (punto):
aniversario .Mes = Febrero;bool esFestivo = hoy. festivo ;
Jorge Peña Pastor Variables y Tipos 52/53
![Page 61: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria](https://reader031.fdocuments.net/reader031/viewer/2022022023/5ba9573609d3f2580f8c5489/html5/thumbnails/61.jpg)
EstructurasAgrupaciones de información heterogénea almacenada enmemoria continua:
struct Fecha {int dia ;Mes mes;int ano;bool festivo ;} ;Fecha aniversario ;
Se pueden inicializar como los vectores:
Fecha hoy = {7 ,JUNIO, 2011, false } ;
Se accede a sus campos utilizando el operador . (punto):
aniversario .Mes = Febrero;bool esFestivo = hoy. festivo ;
Jorge Peña Pastor Variables y Tipos 52/53
![Page 62: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria](https://reader031.fdocuments.net/reader031/viewer/2022022023/5ba9573609d3f2580f8c5489/html5/thumbnails/62.jpg)
EstructurasAgrupaciones de información heterogénea almacenada enmemoria continua:
struct Fecha {int dia ;Mes mes;int ano;bool festivo ;} ;Fecha aniversario ;
Se pueden inicializar como los vectores:
Fecha hoy = {7 ,JUNIO, 2011, false } ;
Se accede a sus campos utilizando el operador . (punto):
aniversario .Mes = Febrero;bool esFestivo = hoy. festivo ;
Jorge Peña Pastor Variables y Tipos 52/53
![Page 63: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria](https://reader031.fdocuments.net/reader031/viewer/2022022023/5ba9573609d3f2580f8c5489/html5/thumbnails/63.jpg)
UnionesSe declaran de forma similar a las estructuras.Sus campos comparten la misma memoria.Sólo permiten almacenar un valor (de cualquiera de sus tipos)a la vez.
struct Datos{int a, x [2 ] ;char c;} ;Datos d;
union Datos {int a, x [2 ] ;char c;} ;Datos d;
Jorge Peña Pastor Variables y Tipos 53/53