Calcular Combinações (nCr) em C

CBeginner
Pratique Agora

Introdução

Neste laboratório, aprenderá a calcular combinações (nCr) usando um programa em C. O laboratório cobre dois passos principais: ler os valores de entrada para n e r, e depois implementar a fórmula para calcular a combinação nCr = n! / (r! * (n-r)!). No final deste laboratório, terá um programa em C funcional que pode calcular combinações para quaisquer valores de n e r.

O laboratório começa demonstrando como ler os valores de entrada para n e r usando a função scanf(). Em seguida, apresenta a implementação das funções de cálculo fatorial e de combinação, que são usadas para calcular o resultado final. O laboratório fornece o código completo e instruções passo a passo, facilitando a sua compreensão e aplicação dos conceitos em seus próprios projetos.

Ler n e r

Neste passo, aprenderá a ler valores de entrada para n e r para calcular combinações num programa em C.

Primeiro, crie um novo ficheiro C para o seu programa de cálculo de combinações:

cd ~/project
nano combinations.c

Agora, adicione o seguinte código para ler os valores de entrada:

#include <stdio.h>

int main() {
    int n, r;

    // Solicita ao utilizador que introduza os valores para n e r
    printf("Introduza o valor de n: ");
    scanf("%d", &n);

    printf("Introduza o valor de r: ");
    scanf("%d", &r);

    // Imprime os valores introduzidos para verificar a entrada
    printf("Introduziu n = %d e r = %d\n", n, r);

    return 0;
}

Compile e execute o programa para testar a entrada:

gcc combinations.c -o combinations
./combinations

Exemplo de saída:

Introduza o valor de n: 5
Introduza o valor de r: 3
Introduziu n = 5 e r = 3

Este código demonstra como:

  • Usar scanf() para ler entradas inteiras do utilizador
  • Solicitar ao utilizador que introduza os valores para n e r
  • Imprimir os valores introduzidos para confirmar a entrada correta

O código estabelece a base para o cálculo de combinações, capturando primeiro os valores de entrada necessários n e r.

Calcular nCr = n!/(r!(n-r)!)

Neste passo, implementará uma função para calcular o fatorial e calcular combinações usando a fórmula nCr = n! / (r! * (n-r)!).

Abra o ficheiro combinations.c anterior e atualize-o com as funções de cálculo fatorial e de combinação:

cd ~/project
nano combinations.c

Adicione o seguinte código para implementar os cálculos fatorial e de combinação:

#include <stdio.h>

// Função para calcular o fatorial
unsigned long long factorial(int num) {
    if (num == 0 || num == 1) {
        return 1;
    }

    unsigned long long result = 1;
    for (int i = 2; i <= num; i++) {
        result *= i;
    }

    return result;
}

// Função para calcular combinações (nCr)
unsigned long long combinations(int n, int r) {
    // Validar a entrada
    if (r > n) {
        return 0;
    }

    // Usar a fórmula de combinação: nCr = n! / (r! * (n-r)!)
    unsigned long long numerator = factorial(n);
    unsigned long long denominator = factorial(r) * factorial(n - r);

    return numerator / denominator;
}

int main() {
    int n, r;

    // Solicitar ao utilizador que introduza os valores para n e r
    printf("Introduza o valor de n: ");
    scanf("%d", &n);

    printf("Introduza o valor de r: ");
    scanf("%d", &r);

    // Calcular e imprimir a combinação
    unsigned long long result = combinations(n, r);

    printf("Combinação C(%d, %d) = %llu\n", n, r, result);

    return 0;
}

Compile e execute o programa:

gcc combinations.c -o combinations
./combinations

Exemplo de saída:

Introduza o valor de n: 5
Introduza o valor de r: 3
Combinação C(5, 3) = 10

Pontos chave desta implementação:

  • A função factorial() calcula o fatorial de um número dado.
  • A função combinations() implementa a fórmula de combinação.
  • Usa unsigned long long para lidar com cálculos de fatorial maiores.
  • Valida a entrada para evitar combinações inválidas.

Imprimir o Resultado

Neste passo, melhorará o programa de cálculo de combinações adicionando uma saída mais informativa e tratamento de erros.

Abra o ficheiro combinations.c e modifique o código:

cd ~/project
nano combinations.c

Atualize o código com a impressão de resultados melhorada e validação de entrada:

#include <stdio.h>

// As funções anteriores de fatorial e combinações permanecem as mesmas

int main() {
    int n, r;

    // Solicitar ao utilizador que introduza os valores para n e r
    printf("Calculadora de Combinação (nCr)\n");
    printf("-----------------------------\n");

    // Validação de entrada
    do {
        printf("Introduza o número total de itens (n): ");
        scanf("%d", &n);

        if (n < 0) {
            printf("Erro: n deve ser um inteiro não negativo.\n");
        }
    } while (n < 0);

    do {
        printf("Introduza o número de itens a escolher (r): ");
        scanf("%d", &r);

        if (r < 0 || r > n) {
            printf("Erro: r deve estar entre 0 e n.\n");
        }
    } while (r < 0 || r > n);

    // Calcular a combinação
    unsigned long long result = combinations(n, r);

    // Saída detalhada do resultado
    printf("\nDetalhes do Resultado:\n");
    printf("----------------\n");
    printf("Itens totais (n): %d\n", n);
    printf("Itens a escolher (r): %d\n", r);
    printf("Combinações possíveis (nCr): %llu\n", result);

    // Explicação do resultado
    printf("\nInterpretação:\n");
    printf("---------------\n");
    printf("Existem %llu maneiras de escolher %d itens de um conjunto de %d itens.\n",
           result, r, n);

    return 0;
}

Compile e execute o programa:

gcc combinations.c -o combinations
./combinations

Exemplo de saída:

Calculadora de Combinação (nCr)
-----------------------------
Introduza o número total de itens (n): 5
Introduza o número de itens a escolher (r): 3

Detalhes do Resultado:
----------------
Itens totais (n): 5
Itens a escolher (r): 3
Combinações possíveis (nCr): 10

Interpretação:
---------------
Existem 10 maneiras de escolher 3 itens de um conjunto de 5 itens.

Melhorias chave:

  • Adicionada validação de entrada para evitar entradas inválidas.
  • Saída melhorada com detalhes do resultado.
  • Fornecida interpretação do resultado da combinação.

Resumo

Neste laboratório, aprendeu a ler valores de entrada para n e r, e depois a calcular as combinações (nCr) usando a fórmula nCr = n! / (r! * (n-r)!). Implementou funções para calcular o fatorial e as combinações, e depois utilizou essas funções para calcular o resultado final. Os passos principais foram: 1) ler os valores de entrada para n e r, e 2) calcular as combinações usando a fórmula e a função fatorial.