Introdução
Neste laboratório, você aprenderá a calcular o produto escalar e vetorial de vetores 3D em programação C. O laboratório cobre os seguintes passos:
- Ler componentes do vetor: Desenvolver um programa que permita aos utilizadores introduzir os componentes de dois vetores 3D.
- Calcular o produto escalar ou vetorial: Implementar funções para calcular o produto escalar e vetorial dos vetores de entrada.
- Imprimir o resultado: Exibir o produto escalar ou vetorial calculado ao utilizador.
No final deste laboratório, você terá uma compreensão sólida das operações vetoriais e sua implementação em C.
Ler Componentes do Vetor
Neste passo, aprenderá a ler componentes de vetores em programação C para realizar cálculos de produto escalar e vetorial. Criaremos um programa que permite aos utilizadores introduzir componentes de vetores e armazená-los para operações matemáticas futuras.
Primeiro, crie um novo ficheiro C para as nossas operações vetoriais:
cd ~/project
nano vector_operations.c
Agora, adicione o seguinte código para definir uma função para ler componentes de vetores:
#include <stdio.h>
#define VECTOR_SIZE 3
// Função para ler componentes do vetor
void readVector(float vector[], int size) {
printf("Introduza %d componentes do vetor (separadas por espaço): ", size);
for (int i = 0; i < size; i++) {
scanf("%f", &vector[i]);
}
}
int main() {
float vector1[VECTOR_SIZE];
float vector2[VECTOR_SIZE];
printf("Vetor 1:\n");
readVector(vector1, VECTOR_SIZE);
printf("Vetor 2:\n");
readVector(vector2, VECTOR_SIZE);
return 0;
}
Vamos compilar e executar o programa para testar a entrada de vetores:
gcc vector_operations.c -o vector_operations
./vector_operations
Exemplo de saída:
Vetor 1:
Introduza 3 componentes do vetor (separadas por espaço): 1 2 3
Vetor 2:
Introduza 3 componentes do vetor (separadas por espaço): 4 5 6
Explicação
Neste código:
- Definimos uma constante
VECTOR_SIZEdefinida como 3 para vetores 3D. - A função
readVector()recebe um array e o seu tamanho como parâmetros. scanf()é usado para ler componentes de vetores em ponto flutuante.- A função
main()demonstra a leitura de dois vetores.
Calcular Produto Escalar ou Vetorial
Neste passo, aprenderá a calcular produtos escalar e vetorial para vetores 3D em programação C. Iremos estender o programa anterior para incluir operações matemáticas em vetores.
Atualize o ficheiro vector_operations.c com o seguinte código:
cd ~/project
nano vector_operations.c
Adicione a implementação para cálculos de produto escalar e vetorial:
#include <stdio.h>
#define VECTOR_SIZE 3
void readVector(float vector[], int size) {
printf("Introduza %d componentes do vetor (separadas por espaço): ", size);
for (int i = 0; i < size; i++) {
scanf("%f", &vector[i]);
}
}
// Calcular produto escalar
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 produto vetorial
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("Vetor 1:\n");
readVector(vector1, VECTOR_SIZE);
printf("Vetor 2:\n");
readVector(vector2, VECTOR_SIZE);
// Calcular e exibir o produto escalar
float dotProduct = computeDotProduct(vector1, vector2, VECTOR_SIZE);
printf("Produto Escalar: %.2f\n", dotProduct);
// Calcular e exibir o produto vetorial
computeCrossProduct(vector1, vector2, crossProductResult);
printf("Produto Vetorial: [%.2f, %.2f, %.2f]\n",
crossProductResult[0],
crossProductResult[1],
crossProductResult[2]);
return 0;
}
Compile e execute o programa atualizado:
gcc vector_operations.c -o vector_operations
./vector_operations
Exemplo de saída:
Vetor 1:
Introduza 3 componentes do vetor (separadas por espaço): 1 2 3
Vetor 2:
Introduza 3 componentes do vetor (separadas por espaço): 4 5 6
Produto Escalar: 32.00
Produto Vetorial: [-3.00, 6.00, -3.00]
Explicação
computeDotProduct()calcula o produto escalar multiplicando os componentes correspondentes dos vetores.computeCrossProduct()calcula o produto vetorial usando a fórmula padrão do produto vetorial de vetores 3D.- A função
main()demonstra o cálculo e a exibição do produto escalar e vetorial.
Imprimir o Resultado
Neste passo final, irá melhorar o programa de operações vetoriais adicionando saída formatada e criando uma função para imprimir os resultados dos vetores de forma clara e legível.
Atualize o ficheiro vector_operations.c com a seguinte implementação melhorada:
cd ~/project
nano vector_operations.c
Adicione a nova função de impressão e modifique o programa principal:
#include <stdio.h>
#define VECTOR_SIZE 3
void readVector(float vector[], int size) {
printf("Introduza %d componentes do vetor (separadas por espaço): ", 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];
}
// Nova função para imprimir o vetor com formatação
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];
// Introdução de vetores
printf("Entrada de Vetores:\n");
printVector("Vetor 1", vector1, VECTOR_SIZE);
readVector(vector1, VECTOR_SIZE);
printVector("Vetor 2", vector2, VECTOR_SIZE);
readVector(vector2, VECTOR_SIZE);
// Calcular resultados
float dotProduct = computeDotProduct(vector1, vector2, VECTOR_SIZE);
computeCrossProduct(vector1, vector2, crossProductResult);
// Imprimir resultados formatados
printf("\nResultados das Operações Vetoriais:\n");
printVector("Vetor 1", vector1, VECTOR_SIZE);
printVector("Vetor 2", vector2, VECTOR_SIZE);
printf("Produto Escalar: %.2f\n", dotProduct);
printVector("Produto Vetorial", crossProductResult, VECTOR_SIZE);
return 0;
}
Compile e execute o programa atualizado:
gcc vector_operations.c -o vector_operations
./vector_operations
Exemplo de saída:
Entrada de Vetores:
Vetor 1: [0.00, 0.00, 0.00]
Introduza 3 componentes do vetor (separadas por espaço): 1 2 3
Vetor 2: [0.00, 0.00, 0.00]
Introduza 3 componentes do vetor (separadas por espaço): 4 5 6
Resultados das Operações Vetoriais:
Vetor 1: [1.00, 2.00, 3.00]
Vetor 2: [4.00, 5.00, 6.00]
Produto Escalar: 32.00
Produto Vetorial: [-3.00, 6.00, -3.00]
Explicação
- Adicionada a função
printVector()para criar uma saída de vetor consistente e formatada. - A função
main()melhorada para demonstrar a entrada de vetores e a impressão dos resultados. - Legibilidade melhorada dos vetores e resultados de cálculos.
- Fornece um formato de saída limpo e profissional para operações vetoriais.
Resumo
Neste laboratório, aprendeu a ler componentes de vetores em programação C e a realizar cálculos de produto escalar e vetorial. Criou um programa que permite aos utilizadores introduzir componentes de vetores e, em seguida, calcula o produto escalar ou vetorial dos vetores. Os pontos principais de aprendizagem incluem a definição de uma função para ler componentes de vetores, a implementação das fórmulas de produto escalar e vetorial e a impressão dos resultados.
O programa demonstra como trabalhar com vetores 3D em C e aplicar operações vetoriais fundamentais. Seguindo as instruções passo a passo, adquiriu experiência prática na manipulação de estruturas de dados de vetores e na realização de operações aritméticas vetoriais comuns.



