Fundamentos de Programación: De Algoritmos a Código C++

Conceptos Fundamentales de Programación

Definiciones Básicas

  • Un programa es una secuencia de instrucciones entendibles por un ordenador que permiten la realización de las acciones para las que ha sido creado.
  • Un lenguaje de programación es un conjunto de símbolos y palabras (instrucciones y sentencias) que el usuario tiene a su disposición para elaborar un programa.
  • Un código fuente es el conjunto de instrucciones escritas por un programador en un lenguaje de programación.
  • Un intérprete traduce línea a línea el código fuente a código máquina, deteniéndose al encontrar un error.
  • El compilador traduce todo el código fuente y muestra posibles errores en un informe posterior.
  • El lenguaje máquina es el que entiende el ordenador; utiliza el sistema binario, es decir, una serie de ceros o unos que forman cadenas binarias con las que se elaboran las instrucciones que la CPU procesa.
  • El conjunto de herramientas que permiten crear y modificar programas se denomina software de programación. Este facilita el trabajo, ya que permite crear o modificar código fuente, compilar, depurar errores y corregirlos.

Algoritmos y Diagramas de Flujo

Un algoritmo es una sucesión de pasos que se deben llevar a cabo para resolver un problema. Los gráficos usados para representar uno de ellos se denominan diagrama de flujo u organigrama.

Símbolos Comunes en Diagramas de Flujo:

  • Terminal: Representa el comienzo o el fin del desarrollo del algoritmo.
  • Proceso: Permite representar cada una de las acciones que hay que realizar.
  • Decisión: Se utiliza cuando hay que decidir entre dos o más opciones para señalar el camino que hay que seguir.
  • Entrada de información: Se utiliza para datos adicionales que representan datos o resultados.
  • Pantalla: Se utiliza cuando la información se muestra en pantalla.
  • Línea de flujo: Señala el orden de las acciones.

Desarrollo de un Programa

El proceso de desarrollo de un programa generalmente sigue estos pasos:

  1. Definición y análisis del problema.
  2. Diseño del algoritmo (a menudo mediante diagramas de flujo).
  3. Codificación del programa (escribir el código fuente).
  4. Compilación (generación del código objeto).
  5. Depuración de errores y verificación del programa.
  6. Explotación (uso y mantenimiento).

Depuración

La depuración, correspondiente a la quinta fase del desarrollo, es el proceso de encontrar y corregir errores en el programa. Mejora el rendimiento y garantiza el funcionamiento adecuado de los sistemas. Incluye:

  • Detección de errores de compilación: Se buscan errores de sintaxis existentes en un programa y se corrigen para que pueda ser compilado y ejecutado.
  • Detección de errores en el funcionamiento (lógicos): Aunque un programa compile sin errores, puede no estar haciendo lo que se desea. Se revisa la funcionalidad para asegurar que cumple los requisitos.
  • Optimización de la programación: Incluso si el programa funciona correctamente y no tiene errores aparentes, siempre se busca la manera más óptima de realizar las tareas, por ejemplo, que consuma menos recursos (memoria, tiempo de CPU) o sea más fácil de mantener.

Datos y Variables

Conceptos de Datos

  • Los datos son los elementos que constituyen unidades de tratamiento de la información que se tiene que procesar.
  • El identificador es el nombre que se le da a un dato (como una variable o constante) dentro del programa para hacer referencia a él.
  • El tipo de dato establece la naturaleza (qué clase de información puede almacenar) y el rango de valores posibles.
  • El valor es el contenido específico de un dato en un momento dado, respetando el tipo definido.

Tipos de Dato Comunes

  • Numérico: Representa magnitudes numéricas (enteros, decimales). Ej: Int (3, -2), Float (0.01, -32.5).
  • Booleanos: Solo admite dos valores lógicos (verdadero/falso, sí/no). Ej: Boolean (true, false).
  • Caracteres (String/Char): Representa texto, un conjunto de caracteres reconocidos por el PC. Ej: Char (‘v’, ‘p’, ‘a’), String (“Julia”).
  • Punteros: Contienen la dirección de memoria de otra variable.
  • Arrays: Estructuras compuestas por elementos del mismo tipo, organizados a menudo como listas, filas y/o columnas.
  • Listas o Pilas: Colecciones de elementos lineales enlazados.
  • Árboles o Grafos: Colecciones de elementos no lineales enlazados.
  • Ficheros de Base de Datos: Archivos compuestos por registros estructurados.

Variables

Una variable es un espacio reservado en la memoria del ordenador que permite almacenar ciertos datos cuyo valor no es constante, sino que puede cambiar a lo largo de la ejecución del programa.

Tipos de Variables (Contexto C/C++)

  • void: Usado principalmente en la declaración de funciones que no devuelven valor o no reciben parámetros, o para punteros genéricos.
  • char: Almacena datos de tipo carácter (letras, símbolos). Generalmente ocupa 1 byte.
  • byte (o unsigned char): Puede almacenar números enteros sin signo del 0 al 255. Ocupa 1 byte.
  • int: Almacena números enteros (positivos, negativos y cero). Su tamaño típico es de 2 o 4 bytes, permitiendo rangos como -32768 a 32767 (si son 2 bytes).
  • float: Almacena números con decimales (punto flotante de precisión simple).
  • string (clase en C++): Almacena cadenas de texto de longitud variable.

Estructuras de Control (Sintaxis tipo C/C++)

Las estructuras de control dirigen el flujo de ejecución de un programa.

Condicional if-else


if (expresión_booleana) {
    // Sentencias si la expresión es verdadera
    sentencia_1;
    sentencia_2;
    // ...
    sentencia_n;
} else {
    // Sentencias si la expresión es falsa (opcional)
    sentencia_1;
    sentencia_2;
    // ...
    sentencia_n;
}

Selección Múltiple switch


switch (variable) {
    case constante_1:
        // Secuencia de sentencias para constante_1
        break; // Importante para salir del switch
    case constante_2:
        // Secuencia de sentencias para constante_2
        break;
    // ... más casos ...
    default: // Opcional: se ejecuta si ningún caso coincide
        // Secuencia de sentencias por defecto
        break;
}

Bucle for


for (inicialización; condición; incremento_o_decremento) {
    // Sentencias que se repiten mientras la condición sea verdadera
    sentencia_1;
    // ...
    sentencia_n;
}

Bucle while


while (expresión_booleana) {
    // Sentencias que se repiten mientras la expresión sea verdadera
    sentencia_1;
    // ...
    sentencia_n;
}

Bucle do-while


do {
    // Sentencias que se ejecutan al menos una vez
    sentencia_1;
    // ...
    sentencia_n;
} while (expresión_booleana); // La condición se evalúa después de ejecutar el bloque

Programación en C++

Estructura Básica de un Programa en C++

  • #include <iostream>: Instrucción al preprocesador para incluir la librería estándar de entrada/salida (necesaria para cout, cin).
  • using namespace std;: Permite usar nombres definidos en el espacio de nombres estándar (como cout) sin necesidad del prefijo std::.
  • int main(void) { ... }: La función principal, punto de entrada obligatorio para la ejecución del programa. Devuelve un entero (int) al sistema operativo (0 indica éxito). (void) indica que no recibe argumentos por línea de comandos (también se puede usar ()).

Importante: El código principal de la función main (y otras funciones) va entre llaves {}. El uso de cout requiere incluir la librería iostream.

Ejemplo Básico de Código C++


#include <iostream>
using namespace std;

int main(void) {
    // Muestra el texto "Hola mundo" en la consola
    cout << "Hola mundo"; 
    
    // Indica que el programa terminó correctamente
    return 0; 
}

Arrays en C++

En C++, puedes declarar e inicializar un array (una colección de elementos del mismo tipo) de la siguiente manera:


// Declara un array de 5 enteros llamado 'Array'
// y lo inicializa con los valores 10, 20, 30, 40, 50.
int Array[5] = {10, 20, 30, 40, 50};