Ejemplos Prácticos de Programación C++: Algoritmos Fundamentales

Enviado por Programa Chuletas y clasificado en Informática y Telecomunicaciones

Escrito el en español con un tamaño de 12,11 KB

Este documento presenta una colección de ejercicios resueltos en C++, abarcando desde algoritmos básicos hasta problemas de simulación y procesamiento de datos. Cada ejemplo está diseñado para ilustrar conceptos clave de la programación estructurada, el uso de bucles, condicionales y la interacción con el usuario.

Colección de Algoritmos C++

1. Generador de Secuencia de Fibonacci

Este programa calcula y muestra los números de la secuencia de Fibonacci hasta un límite de 10000. Es un ejemplo clásico para entender los bucles y la asignación de variables.

#include <iostream>

int main() {
    using namespace std;
    int ultimo = 1, penultimo = 0, novo;
    cout << penultimo << " ";
    while (ultimo <= 10000) {
        cout << ultimo << " ";
        novo = ultimo + penultimo;
        penultimo = ultimo;
        ultimo = novo;
    }
    system("pause"); // Nota: 'system("pause")' es específico de Windows y no es estándar C++.
    return 0;
}

2. Suma de Serie Matemática Compleja

El siguiente código calcula la suma de una serie matemática que involucra funciones trigonométricas y raíces cuadradas, iterando 1000 veces. Incluye una validación para evitar divisiones por cero.

#include <iostream>
#include <cmath> // Para funciones como cos, sin, sqrt

int main() {
    using namespace std;
    float x, y, s = 0;
    int i;
    cout << "Entre com dois valores: ";
    cin >> x >> y;

    if (x * x + y * y * y * y != 0) {
        for (i = 1; i <= 1000; i++) {
            s = s + ((cos(x) - sin(y)) / sqrt(x * x + y * y * y * y) + i);
        }
        cout << "Soma: " << s;
    } else {
        cout << "Impossivel calcular";
    }
    system("pause");
    return 0;
}

3. Clasificador de Edades y Porcentajes

Este programa solicita 15 edades y las clasifica en cuatro rangos predefinidos (1-15, 16-30, 31-45, 46-60), mostrando el conteo y el porcentaje de personas en cada categoría.

#include <iostream>

int main() {
    using namespace std;
    int c1 = 0, c2 = 0, c3 = 0, c4 = 0, i, id;
    for (i = 1; i <= 15; i++) {
        cout << "Entre com a idade: ";
        cin >> id;
        if (id >= 1 && id <= 15) {
            c1++; // Incrementa contador para el rango 1-15
        } else if (id >= 16 && id <= 30) {
            c2++; // Incrementa contador para el rango 16-30
        } else if (id >= 31 && id <= 45) {
            c3++; // Incrementa contador para el rango 31-45
        } else if (id >= 46 && id <= 60) {
            c4++; // Incrementa contador para el rango 46-60
        }
    }
    cout << "Letra A: " << c1 << " " << c2 << " " << c3 << " " << c4 << "\n";
    cout << "Letra B: " << c1 * 100.00 / 15 << "% " << c2 * 100.0 / 15 << "% " << c3 * 100.0 / 15 << "% " << c4 * 100.0 / 15 << "%";
    system("pause");
    return 0;
}

4. Cálculo de Salarios, PIS y FGTS

Este algoritmo procesa los salarios de 20 empleados, aplicando un aumento del 15% y calculando el total de PIS (1%) y FGTS (8%) sobre el nuevo salario. Muestra el nuevo salario individual y los totales acumulados.

#include <iostream>

int main() {
    using namespace std;
    int i;
    float salario, s = 0, pis = 0, fgts = 0;
    for (i = 1; i <= 20; i++) {
        cout << "Entre com o salario: ";
        cin >> salario;
        salario += salario * 0.15; // Aumento del 15%
        cout << "Letra A: Novo Salario R$ " << salario << "\n";
        s += salario;
        pis += salario * 0.01;
        fgts += salario * 0.08;
    }
    cout << "Letra B: " << s << "\n";
    cout << "Letra C: PIS R$" << pis << " - FGTS R$" << fgts << "\n";
    system("pause");
    return 0;
}

5. Promedio Ponderado de Notas y Aprobación

El programa calcula el promedio ponderado de tres notas (con pesos 3, 5 y 10 respectivamente) para 20 alumnos. Determina si cada alumno está aprobado (promedio >= 6) o reprobado.

#include <iostream>

int main() {
    using namespace std;
    int i;
    float m, n1, n2, n3;
    for (i = 1; i <= 20; i++) {
        cout << "Entre com as tres notas do aluno " << i << ": "; // Corregido el error de sintaxis aquí
        cin >> n1 >> n2 >> n3;
        m = (3 * n1 + 5 * n2 + 10 * n3) / 18; // Suma de pesos: 3+5+10 = 18
        if (m >= 6) {
            cout << "Aluno aprovado!\n";
        } else {
            cout << "Aluno reprovado!\n";
        }
    }
    system("pause");
    return 0;
}

6. Simulación de Crecimiento Poblacional

Este código simula el crecimiento de dos poblaciones (A y B) con diferentes tasas de crecimiento anual (2% y 3% respectivamente) hasta que la población B supera a la población A. Calcula el número de años necesarios.

#include <iostream>

int main() {
    using namespace std;
    int anos = 0;
    float pa = 100000, pb = 50000; // Población A y Población B iniciales
    while (pb <= pa) {
        pa += 0.02 * pa; // Crecimiento del 2% para A
        pb += 0.03 * pb; // Crecimiento del 3% para B
        anos++;
    }
    cout << "Numero de anos: " << anos << "\n";
    system("pause");
    return 0;
}

7. Cálculo de Promedio de las Dos Mejores Notas

Para 20 alumnos, este programa solicita tres notas, ignora las notas menores de 4 (estableciéndolas a 0) y luego calcula el promedio de las dos notas más altas. Finalmente, determina la aprobación (promedio >= 6).

#include <iostream>

int main() {
    using namespace std;
    int i = 1;
    float n1, n2, n3, m;
    for (; i <= 20; i++) {
        cout << "Entre com as tres notas: ";
        cin >> n1 >> n2 >> n3;

        // Zerando notas abaixo de 4
        if (n1 < 4) {
            n1 = 0;
        }
        if (n2 < 4) {
            n2 = 0;
        }
        if (n3 < 4) {
            n3 = 0;
        }

        // Calculando a média das duas maiores notas
        // Este bloque de lógica puede simplificarse, pero se mantiene la estructura original.
        if (n1 >= n2 && n2 >= n3) {
            m = (n1 + n2) / 2;
        } else if (n1 >= n3 && n3 >= n2) {
            m = (n1 + n3) / 2;
        } else if (n2 >= n1 && n1 >= n3) {
            m = (n2 + n1) / 2;
        } else if (n2 >= n3 && n3 >= n1) {
            m = (n2 + n3) / 2;
        } else if (n3 >= n1 && n1 >= n2) {
            m = (n3 + n1) / 2;
        } else if (n3 >= n2 && n2 >= n1) {
            m = (n3 + n2) / 2;
        } else { // Caso de notas iguales, por ejemplo
            m = (n1 + n2 + n3) / 3; // Fallback, aunque las condiciones anteriores cubren la mayoría
        }

        // Verificando se aluno passou
        if (m >= 6) {
            cout << "Aluno aprovado: " << m << "\n";
        } else {
            cout << "Aluno reprovado: " << m << "\n";
        }
    }
    system("pause");
    return 0;
}

8. Encuesta de Preferencia de Canales de TV

Este programa realiza una encuesta interactiva sobre canales de TV, sexo y edad. Calcula el porcentaje de mujeres que ven canales específicos (2 o 6) y la edad promedio de quienes no ven ningún canal (ingresan 0).

#include <iostream>

int main() {
    using namespace std;
    int c1 = 0, Canal, c = 0, ct = 0, idade;
    float s = 0;
    char r = 's', sexo;

    while (r == 's') {
        cout << "Entre com o canal assistido (2, 6, 9, 13 ou ZERO): ";
        cin >> Canal;
        cout << "Entre com o sexo (f/m): ";
        cin >> sexo;
        // fflush(stdin); // Nota: 'fflush(stdin)' es comportamiento indefinido en C++ estándar.
        cout << "Entre com a idade: ";
        cin >> idade;

        if (sexo == 'f' && (Canal == 2 || Canal == 6)) {
            c++; // Contador de mujeres que ven canal 2 o 6
        }
        ct++; // Contador total de encuestados

        if (Canal == 0) {
            s += idade;
            c1++; // Contador de personas que no ven ningún canal (canal 0)
        }

        cout << "Deseja entrar com mais algum valor (s/n)? ";
        cin >> r;
        // fflush(stdin);
    }

    cout << "Letra A: " << c * 100.0 / ct << "%\n";
    if (c1 > 0) {
        cout << "Letra B: " << s / c1 << "\n";
    } else {
        cout << "Nada a calcular (Nenhuma pessoa informou canal 0)\n";
    }
    system("pause");
    return 0;
}

9. Encuesta de Peso y Preferencias

Este programa realiza una encuesta sobre peso, sexo y una respuesta binaria ('s'/'n'). Calcula el peso promedio de mujeres que responden 's', el mayor peso entre hombres que responden 'n', y el porcentaje de personas con peso superior a 110 kg.

#include <iostream>

int main() {
    using namespace std;
    int c = 0, ct = 0, c1 = 0, primeiro = 1; // 'primeiro' es una bandera para inicializar 'maiorpeso'
    float peso, maiorpeso = 0, s = 0; // Inicializar maiorpeso para evitar valores basura
    char r = 's', sexo, resposta;

    while (r == 's') {
        cout << "Entre com a resposta (s/n): ";
        cin >> resposta;
        // fflush(stdin);
        cout << "Entre com o sexo (f/m): ";
        cin >> sexo;
        // fflush(stdin);
        cout << "Entre com o peso: ";
        cin >> peso;

        if (sexo == 'f' && resposta == 's') {
            s += peso;
            c1++; // Contador de mujeres que respondieron 's'
        }

        if (sexo == 'm' && resposta == 'n') {
            if (primeiro) {
                maiorpeso = peso;
                primeiro = 0;
            } else if (peso > maiorpeso) {
                maiorpeso = peso;
            }
        }

        ct++; // Contador total de encuestados

        if (peso > 110) {
            c++; // Contador de personas con peso > 110
        }

        cout << "Deseja entrar com mais algum valor (s/n)? ";
        cin >> r;
        // fflush(stdin);
    }

    if (c1 > 0) {
        cout << "Letra A: " << s / c1 << "\n";
    } else {
        cout << "Letra A: Nada a calcular (Nenhuma mulher respondeu 's')\n";
    }
    cout << "Letra B: " << maiorpeso << "\n";
    cout << "Letra C: " << c * 100 / ct << "%\n";
    system("pause");
    return 0;
}

10. Simulación de Desintegración de Masa

Este programa simula la desintegración de una masa, donde cada segundo pierde el 10% de su valor actual, hasta que la masa es menor que 1. Calcula el tiempo total en segundos y luego lo convierte a formato horas:minutos:segundos.

#include <iostream>

int main() {
    using namespace std;
    int s = 0, m = 0, h = 0;
    float massa;

    cout << "Entre com a massa: ";
    cin >> massa;

    while (massa >= 1) {
        massa -= massa / 10; // Pierde 10% de su valor actual
        s++; // Incrementa segundos
    }
    cout << "Letra A: " << s << " segundos\n";

    // Conversión de segundos a horas, minutos y segundos
    while (s >= 3600) {
        h++;
        s -= 3600;
    }
    while (s >= 60) {
        m++;
        s -= 60;
    }
    cout << "Letra B: " << h << ":" << m << ":" << s << "\n";
    system("pause");
    return 0;
}

Estos ejemplos cubren una variedad de problemas comunes en la programación, ofreciendo soluciones claras y funcionales en C++. Son ideales para estudiantes y desarrolladores que buscan reforzar sus conocimientos en algoritmos y estructuras de control.

Entradas relacionadas: