# Tipos de datos y variables

Para crear programas que realicen diferentes tipos de operaciones es necesario que este tenga la capacidad de almacenar valores, los cuales pueden modificar su valor de acuerdo a las necesidades del problema a resolver. Para esto se deben usar variables.

## Variables

Una variable en C++ es una espacio de memoria de la computadora, en dónde se pueden almacenar valores, los cuales se pueden modificar de acuerdo a las necesidades del programa.

Una variable en C++ es útil para realizar instrucciones que pueden adaptarse a diferentes necesidades. Por ejemplo, súpongase que se quiere hacer un programa para sumar 3 parejas de números: (1,7), (5,6) y (10,2)

Se podría hacer algo como lo siguiente:

```cpp
cout << "El resultado de la suma es: " << 1 + 7;
cout << "El resultado de la suma es: " << 5 + 6;
cout << "El resultado de la suma es: " << 10 + 2;
```

Pero, ¿que pasaría si se quisieran sumar 10,000 parejas de números? ¡Se escribirían 10 mil líneas de código!

La solución es utilizar variables. Y cada vez que se ejecute el código pedir los valores para las variables.

```cpp
int suma;
int numero1;
int numero2;

// La instruccion cin solicita al usuario la entrada de datos
// y los almacena en la variable correspondiente
cin >> numero1;
cin >> numero2;

suma = numero1 + numero2;

cout << "El resultado de la suma es: " << suma;
```

&#x20;En esta ocasión, el programa es genérico, lo que significa que es capaz de sumar cualesquiera 2 pares de números sin necesidad de hacer modificaciones al código.

## Declaración de variables

Para poder utilizar una variable en C++ primero es necesario declararla.

La declaración de variables en C++ se realiza utilizando la siguiente sintáxis:

```cpp
tipo_de_dato nombre_variable;
```

Dónde `tipo_de_dato` es el tipo de dato que podrá almacenar la variable. Más detalles en la siguiente sección. Y `nombre_variable` es el nombre que identificará a la variable.

```cpp
// Ejemplos
int numero;
int mi_variable;
int miVariable;
char otra_variable;
double x;
```

## Nombre de variables

El nombre de la variable puede contener una palabra con cualquier letra del alfabeto inglés, números y guiones bajos (\_). Sin embargo, siempre debe iniciar con una letra. Es importante considerar que el compilador hace diferencias entre las mayúsculas y minúsculas. Por lo que la variable `suma` sería diferente de la variable `Suma`. No debe dontener espacios en blanco ni símbolos especiales.

Ejemplo de nombres válidos:

```
mi_variable
miVariableDos
numero
resultado1
x
y
variable
```

Ejemplode nombre inválidos:

```
mi variable
variable#2
1variable
```

## Tipos de datos

Los tipos de datos, como su nombre lo indica, especifican el tipo de valores que se pueden almacenar en una variable.

Algunos ejemplos de tipos de datos primitivos son enteros, de punto decimal flotante (fraccionarios), caracteres y boleanos.

Cuando se hace la declaración de variables, el tipo de dato le indica al compilador de que tipo será la variable. De esta manera se reserva la cantidad de memoria necesaria.

En la siguiente tabla se muestran los tipos de datos fundamentales, así como su tamaño en bytes y rango de valores que es posible representar con ellos.

| Tipo de datos          | Tamaño |                        Rango de valores                       |
| ---------------------- | :----: | :-----------------------------------------------------------: |
| short int              |    2   |                      -32,768 hasta 32,767                     |
| unsigned short int     |    2   |                         0 hasta 65,535                        |
| unsigned int           |    4   |                     0 hasta 4,294,967,295                     |
| **int**                |  **4** |           **-2,147,483,648** hasta **2,147,483,647**          |
| **long long int**      |  **8** |                   **-(2^63) hasta (2^63)-1**                  |
| unsigned long long int |    8   |               0 hasta 18,446,744,073,709,551,615              |
| **char**               |  **1** |                       **-128 hasta 127**                      |
| unsigned char          |    1   |                          0 hasta 255                          |
| float                  |    4   |    1.18e-38 hasta 3.40e38   Precisión científica (7-dígitos)  |
| **double**             |  **8** |  2.23e-308 hasta 1.79e308   Precisión científica (15-dígitos) |
| long double            |   12   |  3.37e-4932 hasta 1.18e4932 Precisión científica (18-dígitos) |
| bool                   |    1   |                          true / false                         |

Los tipos de datos int, char, double y bool son los más utilizados en programas simples.

Cuando se declaran las variables, estas pueden tambien inicializarse, lo que significa asignar un valor inicial.

**Ejemplo**:

```cpp
// Declaracion de variables e inializacion
int numero = 5;
int mi_valor = 1278;
```

_**Buena práctica de programación**_: Es recomendable inicializar siempre las variables antes de utilizarlas. Ya que es común tener errores tratando de leer una variable a la que no se le ha asignado un valor previamente. No se debe asumir que el valor de una variable sin inicializar es 0, pues muchas veces no lo es.

### Uso típico de tipos de datos más usados

El uso más común que se le da a los tipos de datos primitivos es el siguiente:

### Tipo de dato `int`

Se utiliza para representar números enteros, ya sean negativos o positivos.

Ejemplo:

```cpp
int numero = 5;
int numero2 = -28;
```

Si se trata de asignar un número fraccionario a una variable de tipo int, el valor será truncado, es decir, se perderá la parte decimal.

Ejemplo:

```cpp
int numero = 7.58; //la variable numero vale 7
```

### Tipo de dato **`double`**

Este tipo de dato se utiliza para representar números fraccionarios con precisión doble, respecto al tipo `float`.

Es decir, tiene mayor precisión respecto al número de posiciones decimales que puede representar sin perder exactitud.

Ejemplo:

```cpp
double numero_pi = 3.14159;
double x = 78.50;
```

### Tipo de dato **`char`**

Este tipo de dato es utilizado para representar caracteres simples, es decir todos los conjuntos de letras, numeros y símbolos del código ASCII.

![Código ASCII](https://1255983549-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LKPU2wzMxBOvFQpzlkK%2F-LP45_taZZQavbSFsmpz%2F-LP45li2JGENGI2Csi6F%2Fimage.png?alt=media\&token=a749e7aa-a1cb-41dd-b593-35e46719900b)

El código ASCII representa todos los caracteres imprimibles a través de la computadora. Estos tienen un código numérico que los identifica, por ejemplo el símbolo `@` tiene el valor 64. Mientras que la letra `A` tiene el valor 65.

Para asignar un valor a una variable char es necesario escribir el caracter entre comillas simples:`'a', 'b', 'c','@'`

Es importante mencionar que los números también se pueden representar como caracteres, sin embargo, es necesario diferenciarlos de los tipos enteros. Ejemplo:&#x20;

* Son caracteres`'1','2','3'`
* Son valores numéricos: `1,2,3`

_Nota como el valor numérico es tal cual el número, mientras que los caracteres tienen comillas simples._

Ejemplos:

```cpp
// Declaracion de variables de tipo char
char letra = 'a';
char variable = '$';
char caracter_de_numero = '9';
```

#### Mal uso de los caracteres:

```cpp
// Es un error tratar de hacer operaciones algebraicas
// usando variables de tipo char representando números

char numero1 = '1';
char numero2 = '3';
char suma;

suma = numero1 + numero2;

cout << "El resultado es: " << suma;
```

La salida del programa sería

```
El resultado es d
```

Nota como el programa si compila y se ejecuta, sin embargo, el resultado no es el que se esperaría. Se estaría esperando un `'4'`. El problema es que se están sumando caracteres.

Lo que en realidad pasa al ejecutar la operación, es que se suma el valor númerico de los caracteres en el código ASCII. Como se observa en la imagen previa, el caracter `'1'` vale 49, mientras que el `'3'` vale 51. El resultado de sumarlos es 100. El caracter correspondiente al valor 100 en el código ASCII es la letra `'d'`.

### Tipo de dato **`bool`**

El tipo de dato bool es el más sencillo de aprender. Ya que su valor solo puede ser true o false.

Suele utilizarse para guardar el resultado de evaluar condiciones.

Ejemplo:

```cpp
bool variable = false;
bool resultado = true;
bool resultado = 5 > 3;//La variable almacenara true, ya que la condicion se cumple
```

## Referencias:

&#x20;DEITEL, Harvey M y DEITEL, Paul J Cómo programar en C++. 9a ed. Pearson Educación
