Calcular el Producto Punto y Cruz en C

CBeginner
Practicar Ahora

Introducción

En este laboratorio, aprenderás a calcular el producto punto y el producto cruz de vectores 3D en el lenguaje C. El laboratorio cubre los siguientes pasos:

  1. Leer componentes del vector: Desarrolla un programa que permita a los usuarios introducir los componentes de dos vectores 3D.
  2. Calcular el producto punto o cruz: Implementa funciones para calcular el producto punto y el producto cruz de los vectores de entrada.
  3. Imprimir el resultado: Muestra el producto punto o cruz calculado al usuario.

Al finalizar este laboratorio, tendrás una sólida comprensión de las operaciones vectoriales y su implementación en C.

Leer Componentes de un Vector

En este paso, aprenderás a leer los componentes de un vector en programación C para realizar cálculos de producto punto y producto cruz. Crearemos un programa que permita a los usuarios introducir los componentes del vector y almacenarlos para operaciones matemáticas posteriores.

Primero, creemos un nuevo archivo C para nuestras operaciones vectoriales:

cd ~/project
nano vector_operations.c

Ahora, agrega el siguiente código para definir una función para leer los componentes del vector:

#include <stdio.h>

#define VECTOR_SIZE 3

// Función para leer los componentes del vector
void readVector(float vector[], int size) {
    printf("Introduce %d componentes del vector (separados por espacio): ", size);
    for (int i = 0; i < size; i++) {
        scanf("%f", &vector[i]);
    }
}

int main() {
    float vector1[VECTOR_SIZE];
    float vector2[VECTOR_SIZE];

    printf("Vector 1:\n");
    readVector(vector1, VECTOR_SIZE);

    printf("Vector 2:\n");
    readVector(vector2, VECTOR_SIZE);

    return 0;
}

Compila y ejecuta el programa para probar la entrada del vector:

gcc vector_operations.c -o vector_operations
./vector_operations

Salida de ejemplo:

Vector 1:
Introduce 3 componentes del vector (separados por espacio): 1 2 3
Vector 2:
Introduce 3 componentes del vector (separados por espacio): 4 5 6
Explicación

En este código:

  • Definimos una constante VECTOR_SIZE establecida en 3 para vectores 3D.
  • La función readVector() recibe un array y su tamaño como parámetros.
  • scanf() se utiliza para leer los componentes del vector de punto flotante.
  • La función main() demuestra la lectura de dos vectores.

Calcular el Producto Punto o Cruz

En este paso, aprenderás a calcular los productos punto y cruz de vectores 3D en programación C. Ampliaremos el programa anterior para incluir operaciones matemáticas en vectores.

Actualiza el archivo vector_operations.c con el siguiente código:

cd ~/project
nano vector_operations.c

Agrega la implementación para los cálculos del producto punto y cruz:

#include <stdio.h>

#define VECTOR_SIZE 3

void readVector(float vector[], int size) {
    printf("Introduce %d componentes del vector (separados por espacio): ", size);
    for (int i = 0; i < size; i++) {
        scanf("%f", &vector[i]);
    }
}

// Calcular el producto punto
float computeDotProduct(float vector1[], float vector2[], int size) {
    float dotProduct = 0.0;
    for (int i = 0; i < size; i++) {
        dotProduct += vector1[i] * vector2[i];
    }
    return dotProduct;
}

// Calcular el producto cruz
void computeCrossProduct(float vector1[], float vector2[], float result[]) {
    result[0] = vector1[1] * vector2[2] - vector1[2] * vector2[1];
    result[1] = vector1[2] * vector2[0] - vector1[0] * vector2[2];
    result[2] = vector1[0] * vector2[1] - vector1[1] * vector2[0];
}

int main() {
    float vector1[VECTOR_SIZE];
    float vector2[VECTOR_SIZE];
    float crossProductResult[VECTOR_SIZE];

    printf("Vector 1:\n");
    readVector(vector1, VECTOR_SIZE);

    printf("Vector 2:\n");
    readVector(vector2, VECTOR_SIZE);

    // Calcular e imprimir el producto punto
    float dotProduct = computeDotProduct(vector1, vector2, VECTOR_SIZE);
    printf("Producto Punto: %.2f\n", dotProduct);

    // Calcular e imprimir el producto cruz
    computeCrossProduct(vector1, vector2, crossProductResult);
    printf("Producto Cruz: [%.2f, %.2f, %.2f]\n",
           crossProductResult[0],
           crossProductResult[1],
           crossProductResult[2]);

    return 0;
}

Compila y ejecuta el programa actualizado:

gcc vector_operations.c -o vector_operations
./vector_operations

Salida de ejemplo:

Vector 1:
Introduce 3 componentes del vector (separados por espacio): 1 2 3
Vector 2:
Introduce 3 componentes del vector (separados por espacio): 4 5 6
Producto Punto: 32.00
Producto Cruz: [-3.00, 6.00, -3.00]
Explicación
  • computeDotProduct() calcula el producto punto multiplicando los componentes correspondientes de los vectores.
  • computeCrossProduct() calcula el producto cruz utilizando la fórmula estándar del producto cruz de vectores 3D.
  • La función main() demuestra cómo calcular e imprimir tanto el producto punto como el producto cruz.

Imprimir el Resultado

En este paso final, mejorarás el programa de operaciones vectoriales añadiendo una salida formateada y creando una función para imprimir los resultados vectoriales de forma clara y legible.

Actualiza el archivo vector_operations.c con la siguiente implementación mejorada:

cd ~/project
nano vector_operations.c

Agrega la nueva función de impresión y modifica el programa principal:

#include <stdio.h>

#define VECTOR_SIZE 3

void readVector(float vector[], int size) {
    printf("Introduce %d componentes del vector (separados por espacio): ", size);
    for (int i = 0; i < size; i++) {
        scanf("%f", &vector[i]);
    }
}

float computeDotProduct(float vector1[], float vector2[], int size) {
    float dotProduct = 0.0;
    for (int i = 0; i < size; i++) {
        dotProduct += vector1[i] * vector2[i];
    }
    return dotProduct;
}

void computeCrossProduct(float vector1[], float vector2[], float result[]) {
    result[0] = vector1[1] * vector2[2] - vector1[2] * vector2[1];
    result[1] = vector1[2] * vector2[0] - vector1[0] * vector2[2];
    result[2] = vector1[0] * vector2[1] - vector1[1] * vector2[0];
}

// Nueva función para imprimir el vector con formato
void printVector(const char* label, float vector[], int size) {
    printf("%s: [", label);
    for (int i = 0; i < size; i++) {
        printf("%.2f%s", vector[i], (i < size - 1) ? ", " : "");
    }
    printf("]\n");
}

int main() {
    float vector1[VECTOR_SIZE];
    float vector2[VECTOR_SIZE];
    float crossProductResult[VECTOR_SIZE];

    // Entrada de vectores
    printf("Entrada de vectores:\n");
    printVector("Vector 1", vector1, VECTOR_SIZE);
    readVector(vector1, VECTOR_SIZE);

    printVector("Vector 2", vector2, VECTOR_SIZE);
    readVector(vector2, VECTOR_SIZE);

    // Calcular resultados
    float dotProduct = computeDotProduct(vector1, vector2, VECTOR_SIZE);
    computeCrossProduct(vector1, vector2, crossProductResult);

    // Imprimir resultados formateados
    printf("\nResultados de las operaciones vectoriales:\n");
    printVector("Vector 1", vector1, VECTOR_SIZE);
    printVector("Vector 2", vector2, VECTOR_SIZE);
    printf("Producto Punto: %.2f\n", dotProduct);
    printVector("Producto Cruz", crossProductResult, VECTOR_SIZE);

    return 0;
}

Compila y ejecuta el programa actualizado:

gcc vector_operations.c -o vector_operations
./vector_operations

Salida de ejemplo:

Entrada de vectores:
Vector 1: [0.00, 0.00, 0.00]
Introduce 3 componentes del vector (separados por espacio): 1 2 3
Vector 2: [0.00, 0.00, 0.00]
Introduce 3 componentes del vector (separados por espacio): 4 5 6

Resultados de las operaciones vectoriales:
Vector 1: [1.00, 2.00, 3.00]
Vector 2: [4.00, 5.00, 6.00]
Producto Punto: 32.00
Producto Cruz: [-3.00, 6.00, -3.00]
Explicación
  • Se añadió la función printVector() para crear una salida vectorial consistente y formateada.
  • Se mejoró la función main() para demostrar la entrada de vectores y la impresión de resultados.
  • Se mejoró la legibilidad de los vectores y los resultados de los cálculos.
  • Proporciona un formato de salida limpio y profesional para las operaciones vectoriales.

Resumen

En este laboratorio, aprendiste a leer componentes de vectores en programación C y a realizar cálculos de producto punto y producto cruz. Creaste un programa que permite a los usuarios introducir los componentes de un vector y luego calcula el producto punto o cruz de los vectores. Los puntos clave del aprendizaje incluyen definir una función para leer los componentes del vector, implementar las fórmulas del producto punto y producto cruz, e imprimir los resultados.

El programa demuestra cómo trabajar con vectores 3D en C y aplicar operaciones vectoriales fundamentales. Siguiendo las instrucciones paso a paso, adquiriste experiencia práctica en el manejo de estructuras de datos vectoriales y en la realización de operaciones aritméticas vectoriales comunes.