Calcular Permutações (nPr) em C

CBeginner
Pratique Agora

Introdução

Neste laboratório, aprenderemos a calcular permutações (nPr) na programação em C. O laboratório cobre os seguintes passos:

Primeiro, leremos os valores de entrada para n e r, essenciais para o cálculo das permutações. Usaremos a função scanf() para obter a entrada do utilizador e imprimiremos os valores introduzidos para confirmar a entrada.

Em seguida, implementaremos funções para calcular o fatorial e a permutação (nPr) usando a fórmula nPr = n! / (n-r)!. Lidaremos com o caso em que r é maior que n e exibiremos uma mensagem de erro apropriada.

Ler n e r

Neste passo, aprenderemos a ler os valores de entrada para n e r, essenciais para o cálculo de permutações em programação C.

Primeiro, criemos um novo ficheiro C para implementar o nosso programa de cálculo de permutações:

cd ~/project
nano permutations.c

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

#include <stdio.h>

int main() {
    int n, r;

    printf("Introduza o número total de itens (n): ");
    scanf("%d", &n);

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

    printf("Valores introduzidos: n = %d, r = %d\n", n, r);

    return 0;
}

Exemplo de saída:

Introduza o número total de itens (n): 5
Introduza o número de itens a serem selecionados (r): 3
Valores introduzidos: n = 5, r = 3

Vamos analisar o código:

  • Usamos scanf() para ler entradas inteiras do utilizador
  • %d é o especificador de formato para inteiros
  • &n e &r são os endereços de memória onde os valores de entrada serão armazenados
  • Imprimimos os valores introduzidos para confirmar a entrada

Compile e execute o programa:

gcc permutations.c -o permutations
./permutations

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

Neste passo, implementaremos uma função para calcular a permutação (nPr) calculando os fatoriais.

Vamos modificar o ficheiro permutations.c anterior para adicionar o cálculo de fatorial e de permutação:

cd ~/project
nano permutations.c

Agora, vamos atualizar o código com as funções de cálculo de fatorial e permutação:

#include <stdio.h>

// Função para calcular o fatorial
unsigned long long factorial(int num) {
    unsigned long long result = 1;
    for (int i = 1; i <= num; i++) {
        result *= i;
    }
    return result;
}

// Função para calcular a permutação (nPr)
unsigned long long permutation(int n, int r) {
    // Verificação de entrada inválida
    if (r > n) {
        printf("Erro: r não pode ser maior que n\n");
        return 0;
    }

    // Calcular nPr usando a fórmula: n! / (n-r)!
    return factorial(n) / factorial(n - r);
}

int main() {
    int n, r;

    printf("Introduza o número total de itens (n): ");
    scanf("%d", &n);

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

    unsigned long long result = permutation(n, r);

    if (result > 0) {
        printf("Permutação (nPr) de %d itens tomados %d de cada vez é: %llu\n", n, r, result);
    }

    return 0;
}

Compile e execute o programa:

gcc permutations.c -o permutations
./permutations

Exemplo de saída:

Introduza o número total de itens (n): 5
Introduza o número de itens a serem selecionados (r): 3
Permutação (nPr) de 5 itens tomados 3 de cada vez é: 60

Pontos chave da implementação:

  • A função factorial() calcula o fatorial de um número dado.
  • A função permutation() implementa a fórmula nPr: n! / (n-r)!
  • Usamos unsigned long long para lidar com valores de fatorial maiores.
  • A validação de entrada verifica se r é menor ou igual a n.

Imprimir o Resultado

Neste passo, melhoraremos o nosso programa de cálculo de permutação adicionando opções de saída mais detalhadas e formatação.

Vamos modificar o ficheiro permutations.c para melhorar a apresentação do resultado:

cd ~/project
nano permutations.c

Atualize o código com a impressão melhorada do resultado:

#include <stdio.h>

// Função para calcular o fatorial
unsigned long long factorial(int num) {
    unsigned long long result = 1;
    for (int i = 1; i <= num; i++) {
        result *= i;
    }
    return result;
}

// Função para calcular a permutação (nPr)
unsigned long long permutation(int n, int r) {
    // Verificação de entrada inválida
    if (r > n) {
        printf("Erro: r não pode ser maior que n\n");
        return 0;
    }

    // Calcular nPr usando a fórmula: n! / (n-r)!
    return factorial(n) / factorial(n - r);
}

// Função para imprimir detalhes da permutação
void printPermutationDetails(int n, int r, unsigned long long result) {
    printf("\n--- Detalhes do Cálculo da Permutação ---\n");
    printf("Número total de itens (n): %d\n", n);
    printf("Número de itens selecionados (r): %d\n", r);
    printf("Cálculo: %d P %d = %d! / (%d - %d)!\n", n, r, n, n, r);
    printf("Resultado: %llu diferentes arranjos possíveis\n", result);
    printf("----------------------------------------\n");
}

int main() {
    int n, r;

    printf("Calculadora de Permutação (nPr)\n");
    printf("Introduza o número total de itens (n): ");
    scanf("%d", &n);

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

    unsigned long long result = permutation(n, r);

    if (result > 0) {
        printPermutationDetails(n, r, result);
    }

    return 0;
}

Compile e execute o programa:

gcc permutations.c -o permutations
./permutations

Exemplo de saída:

Calculadora de Permutação (nPr)
Introduza o número total de itens (n): 5
Introduza o número de itens a serem selecionados (r): 3

--- Detalhes do Cálculo da Permutação ---
Número total de itens (n): 5
Número de itens selecionados (r): 3
Cálculo: 5 P 3 = 5! / (5 - 3)!
Resultado: 60 diferentes arranjos possíveis
----------------------------------------

Melhorias chave:

  • Adicionada uma função dedicada printPermutationDetails()
  • Incluída saída mais informativa sobre o cálculo
  • Explicação da fórmula de permutação e do resultado
  • Interface de utilizador melhorada com um título e uma explicação detalhada.

Resumo

Neste laboratório, aprendemos como ler valores de entrada para n e r, essenciais para calcular permutações em programação C. Também implementamos funções para calcular o fatorial e a permutação (nPr) usando a fórmula n! / (n-r)!.

Os pontos principais de aprendizagem são o uso de scanf() para ler entradas inteiras, a implementação de funções de cálculo de fatorial e permutação, e a gestão de entradas inválidas onde r é maior que n.