Calcular Permutaciones (nPr) en C

CBeginner
Practicar Ahora

Introducción

En este laboratorio, aprenderemos a calcular permutaciones (nPr) en el lenguaje de programación C. El laboratorio cubre los siguientes pasos:

En primer lugar, leeremos los valores de entrada para n y r, que son esenciales para calcular las permutaciones. Usaremos la función scanf() para obtener la entrada del usuario e imprimiremos los valores introducidos para confirmar la entrada.

A continuación, implementaremos funciones para calcular el factorial y la permutación (nPr) utilizando la fórmula nPr = n! / (n-r)!. Manejaremos el caso en que r es mayor que n y mostraremos un mensaje de error en consecuencia.

Leer n y r

En este paso, aprenderemos a leer los valores de entrada para n y r, esenciales para calcular permutaciones en programación C.

Primero, creemos un nuevo archivo C para implementar nuestro programa de cálculo de permutaciones:

cd ~/project
nano permutations.c

Ahora, escribamos el código para leer los valores de entrada:

#include <stdio.h>

int main() {
    int n, r;

    printf("Ingrese el número total de elementos (n): ");
    scanf("%d", &n);

    printf("Ingrese el número de elementos a seleccionar (r): ");
    scanf("%d", &r);

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

    return 0;
}

Ejemplo de salida:

Ingrese el número total de elementos (n): 5
Ingrese el número de elementos a seleccionar (r): 3
Valores ingresados: n = 5, r = 3

Desglose del código:

  • Usamos scanf() para leer entradas de tipo entero del usuario.
  • %d es el especificador de formato para enteros.
  • &n y &r son las direcciones de memoria donde se almacenarán los valores de entrada.
  • Imprimimos los valores ingresados para confirmar la entrada.

Compila y ejecuta el programa:

gcc permutations.c -o permutations
./permutations

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

En este paso, implementaremos una función para calcular la permutación (nPr) mediante el cálculo de factoriales.

Modifiquemos el archivo permutations.c anterior para añadir el cálculo factorial y de permutaciones:

cd ~/project
nano permutations.c

Ahora, actualicemos el código con las funciones de cálculo factorial y de permutación:

#include <stdio.h>

// Función para calcular el factorial
unsigned long long factorial(int num) {
    unsigned long long result = 1;
    for (int i = 1; i <= num; i++) {
        result *= i;
    }
    return result;
}

// Función para calcular la permutación (nPr)
unsigned long long permutation(int n, int r) {
    // Comprobación de entrada inválida
    if (r > n) {
        printf("Error: r no puede ser mayor que n\n");
        return 0;
    }

    // Cálculo de nPr usando la fórmula: n! / (n-r)!
    return factorial(n) / factorial(n - r);
}

int main() {
    int n, r;

    printf("Ingrese el número total de elementos (n): ");
    scanf("%d", &n);

    printf("Ingrese el número de elementos a seleccionar (r): ");
    scanf("%d", &r);

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

    if (result > 0) {
        printf("La permutación (nPr) de %d elementos tomados de %d en %d es: %llu\n", n, r, r, result);
    }

    return 0;
}

Compila y ejecuta el programa:

gcc permutations.c -o permutations
./permutations

Ejemplo de salida:

Ingrese el número total de elementos (n): 5
Ingrese el número de elementos a seleccionar (r): 3
La permutación (nPr) de 5 elementos tomados de 3 en 3 es: 60

Puntos clave de la implementación:

  • La función factorial() calcula el factorial de un número dado.
  • La función permutation() implementa la fórmula nPr: n! / (n-r)!
  • Usamos unsigned long long para manejar valores factoriales más grandes.
  • La validación de entrada comprueba si r es menor o igual que n.

Imprimir el Resultado

En este paso, mejoraremos nuestro programa de cálculo de permutaciones añadiendo opciones de salida más detalladas y formato.

Modifiquemos el archivo permutations.c para mejorar la presentación del resultado:

cd ~/project
nano permutations.c

Actualicemos el código con una impresión de resultados mejorada:

#include <stdio.h>

// Función para calcular el factorial
unsigned long long factorial(int num) {
    unsigned long long result = 1;
    for (int i = 1; i <= num; i++) {
        result *= i;
    }
    return result;
}

// Función para calcular la permutación (nPr)
unsigned long long permutation(int n, int r) {
    // Comprobación de entrada inválida
    if (r > n) {
        printf("Error: r no puede ser mayor que n\n");
        return 0;
    }

    // Cálculo de nPr usando la fórmula: n! / (n-r)!
    return factorial(n) / factorial(n - r);
}

// Función para imprimir los detalles de la permutación
void printPermutationDetails(int n, int r, unsigned long long result) {
    printf("\n--- Detalles del Cálculo de Permutaciones ---\n");
    printf("Número total de elementos (n): %d\n", n);
    printf("Número de elementos seleccionados (r): %d\n", r);
    printf("Cálculo: %d P %d = %d! / (%d - %d)!\n", n, r, n, n, r);
    printf("Resultado: %llu diferentes arreglos posibles\n", result);
    printf("----------------------------------------\n");
}

int main() {
    int n, r;

    printf("Calculadora de Permutaciones (nPr)\n");
    printf("Ingrese el número total de elementos (n): ");
    scanf("%d", &n);

    printf("Ingrese el número de elementos a seleccionar (r): ");
    scanf("%d", &r);

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

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

    return 0;
}

Compila y ejecuta el programa:

gcc permutations.c -o permutations
./permutations

Ejemplo de salida:

Calculadora de Permutaciones (nPr)
Ingrese el número total de elementos (n): 5
Ingrese el número de elementos a seleccionar (r): 3

--- Detalles del Cálculo de Permutaciones ---
Número total de elementos (n): 5
Número de elementos seleccionados (r): 3
Cálculo: 5 P 3 = 5! / (5 - 3)!
Resultado: 60 diferentes arreglos posibles
----------------------------------------

Mejoras clave:

  • Se añadió una función printPermutationDetails() dedicada.
  • Se incluyó una salida más informativa sobre el cálculo.
  • Se explicó la fórmula de permutación y el resultado.
  • Se mejoró la interfaz de usuario con un título y una explicación detallada.

Resumen

En este laboratorio, aprendimos cómo leer valores de entrada para n y r, esenciales para calcular permutaciones en programación C. También implementamos funciones para calcular el factorial y la permutación (nPr) utilizando la fórmula n! / (n-r)!.

Los puntos clave del aprendizaje son el uso de scanf() para leer entradas de enteros, la implementación de funciones para calcular el factorial y la permutación, y el manejo de entradas inválidas donde r es mayor que n.