Tipos de Datos y Variables
Aprende los tipos de datos fundamentales en C++ y cómo usar variables
¿Qué es una variable?
Imagina que tienes una caja con una etiqueta. Dentro de la caja puedes guardar algo: un número, una letra, una palabra. La etiqueta es el nombre que le pones a la caja para poder encontrarla después. Eso es exactamente una variable en programación.
Una variable es un espacio en la memoria de la computadora donde guardas un dato, y le pones un nombre para poder usarlo después.
╔═══════════════╗
║ edad = 15 ║ ← "edad" es el nombre (etiqueta)
╚═══════════════╝ 15 es el valor (contenido)
Declarar y asignar variables
Declarar una variable es crear la caja. Asignar es poner algo dentro.
// Declarar: crear la caja
int edad;
// Asignar: meter un valor en la caja
edad = 15;
// Declarar y asignar al mismo tiempo
int estatura = 170;
El operador = no es "igual"
En matemáticas, = significa "es igual a". En C++, = significa "guarda este valor en esta variable". Es una asignación, no una comparación.
int x = 5; // "Guarda 5 en x"
x = x + 1; // "Toma el valor de x (5), súmale 1 (6), y guárdalo de nuevo en x"
// Ahora x vale 6
En matemáticas, x = x + 1 no tiene sentido. En programación, es perfectamente normal.
Los tipos de datos fundamentales
Así como hay cajas de diferentes tamaños (una caja pequeña para joyas, una mediana para zapatos, una grande para ropa), en C++ hay diferentes tipos de variables según lo que necesites guardar.
Números enteros: int y long long
Un número entero es un número sin decimales: ..., -3, -2, -1, 0, 1, 2, 3, ...
int puntos = 100;
int temperatura = -5;
int estudiantes = 0;
Pero int tiene un límite. Solo puede guardar números entre aproximadamente -2,147 millones y 2,147 millones (más exactamente, de a , que es ).
¿Qué pasa si necesitas números más grandes? Usa long long:
long long distancia = 9999999999LL; // 9 mil millones (no cabe en int)
long long poblacion = 7800000000LL; // 7.8 mil millones de personas
| Tipo | Tamaño | Rango aproximado |
|---|---|---|
int | 4 bytes | (2 mil millones) |
long long | 8 bytes | (9 trillones) |
¡Cuidado con el desbordamiento (overflow)! Si un int supera los 2 mil millones, se "da la vuelta" y se convierte en un número negativo. Este es uno de los errores más comunes en competencias. Si los datos pueden ser grandes, usa long long.
Ejemplo de overflow:
int x = 2000000000; // 2 mil millones (cabe en int)
int y = x + x; // 4 mil millones (NO cabe en int)
cout << y << endl; // Imprime un número negativo sin sentido: -294967296
Números decimales: float y double
Para números con punto decimal como 3.14, 0.5, -2.718:
double pi = 3.14159265358979;
double precio = 29.99;
double promedio = 8.5;
| Tipo | Precisión | Uso |
|---|---|---|
float | ~7 dígitos | Casi nunca se usa en competencias |
double | ~15 dígitos | El estándar para decimales |
En competencias, siempre usa double en lugar de float. float tiene muy poca precisión y puede causarte respuestas incorrectas. Si necesitas aún más precisión, usa long double (~18 dígitos).
Cuidado con la precisión decimal:
double a = 0.1 + 0.2;
cout << (a == 0.3) << endl; // ¡Imprime 0 (falso)!
Los números decimales en la computadora no son exactos. 0.1 + 0.2 no es exactamente 0.3, sino algo como 0.30000000000000004. Por eso, cuando compares decimales, usa una tolerancia:
double a = 0.1 + 0.2;
if (abs(a - 0.3) < 1e-9) {
cout << "Son iguales (con tolerancia)" << endl;
}
Caracteres: char
Un char guarda un solo carácter (una letra, un dígito, un símbolo). Se escribe entre comillas simples:
char letra = 'A';
char digito = '5';
char signo = '+';
char espacio = ' ';
char nuevaLinea = '\n';
Internamente, cada char es un número (su código ASCII). Por ejemplo, 'A' es 65, 'a' es 97, '0' es 48. Esto lo exploraremos a fondo en la lección de char y ASCII.
Cadenas de texto: string
Un string es una secuencia de caracteres (una palabra, una frase, un texto):
string nombre = "María";
string saludo = "¡Hola, mundo!";
string vacio = ""; // Un string vacío también es válido
Nota la diferencia: los char usan comillas simples ('A'), mientras que los string usan comillas dobles ("Hola"). Confundirlos es un error común.
Valores lógicos: bool
Un bool (de "booleano", en honor al matemático George Boole) solo puede tener dos valores: true (verdadero) o false (falso).
bool esMayor = true;
bool esPar = false;
bool llueve = true;
Internamente, true es 1 y false es 0. Son fundamentales para las decisiones del programa (lo veremos en las estructuras de control).
Tabla resumen de tipos de datos
| Tipo | ¿Qué guarda? | Ejemplo | Tamaño |
|---|---|---|---|
int | Enteros | 42 | 4 bytes |
long long | Enteros grandes | 9999999999LL | 8 bytes |
double | Decimales | 3.14159 | 8 bytes |
char | Un carácter | 'A' | 1 byte |
string | Texto | "Hola" | Variable |
bool | Verdadero/Falso | true | 1 byte |
Reglas para nombrar variables
No puedes ponerle cualquier nombre a una variable. Hay reglas:
- Puede contener letras, números y guión bajo (
_). - Debe empezar con una letra o guión bajo (no con número).
- No puede ser una palabra reservada de C++ (
int,return,if,while, etc.). - Distingue mayúsculas y minúsculas (
edad,EdadyEDADson tres variables diferentes).
// ✅ Nombres válidos
int edad;
int numeroDeCasos;
int total_puntos;
int _contador;
int x1;
// ❌ Nombres inválidos
int 1erLugar; // No puede empezar con número
int mi edad; // No puede tener espacios
int int; // "int" es palabra reservada
Buenas prácticas para nombrar
// ❌ Nombres confusos
int a, b, c, d; // ¿Qué representan?
// ✅ Nombres descriptivos
int velocidad;
int distancia;
int numEstudiantes;
int maxPuntaje;
En competencias, es aceptable usar nombres cortos como n, m, i, j porque son convenciones estándar:
n→ tamaño del arreglo / número de elementosm→ número de consultas o de aristasi,j→ contadores de ciclosx,y→ coordenadas
Constantes
Una constante es una variable cuyo valor nunca cambia. Se declara con const:
const double PI = 3.14159265358979;
const int MAX_N = 100000;
const int MOD = 1e9 + 7; // 1,000,000,007 (muy común en competencias)
Si intentas cambiar una constante, el compilador te dará un error:
const int x = 5;
x = 10; // ❌ Error: no puedes modificar una constante
Conversiones de tipo (casting)
A veces necesitas convertir un tipo a otro. Esto se llama casting:
// Conversión implícita (automática)
int entero = 7;
double decimal = entero; // decimal vale 7.0 (int → double)
// Conversión que pierde información
double pi = 3.14;
int truncado = pi; // truncado vale 3 (se pierde el .14)
// Conversión explícita
int a = 7, b = 2;
double resultado = (double)a / b; // resultado vale 3.5
// Sin el cast: a / b = 3 (división entera)
La división entre enteros siempre da un entero (trunca el decimal). 7 / 2 da 3, no 3.5. Si necesitas el decimal, convierte al menos uno de los operandos a double.
Entrada y salida con variables
#include <iostream>
using namespace std;
int main() {
int edad;
string nombre;
cout << "¿Cómo te llamas? ";
cin >> nombre;
cout << "¿Cuántos años tienes? ";
cin >> edad;
cout << "Hola, " << nombre << ". Tienes " << edad << " años." << endl;
return 0;
}
Ejecución ejemplo:
¿Cómo te llamas? Carlos
¿Cuántos años tienes? 16
Hola, Carlos. Tienes 16 años.
Ejercicio de práctica
Lee el radio de un círculo y calcula su área y perímetro. Recuerda que:
- Área =
- Perímetro =
Ver solución
#include <iostream>
#include <cmath>
using namespace std;
int main() {
double radio;
cin >> radio;
const double PI = 3.14159265358979;
double area = PI * radio * radio;
double perimetro = 2 * PI * radio;
cout << "Área: " << area << endl;
cout << "Perímetro: " << perimetro << endl;
return 0;
}
Ejemplo: si ingresas 5, la salida es:
Área: 78.5398
Perímetro: 31.4159
Siguiente paso
Aprende sobre Entrada y Salida para dominar la lectura de datos y mostrar resultados, algo fundamental en toda competencia.
