Crie uma biblioteca simples de matemática vetorial para calcular a distância euclidiana entre dois pontos 2D.
pontos.h. Ele deve conter um protótipo de função chamada calcular_distancia que recebe duas coordenadas x1, y1, e x2, y2.pontos.c. Ele deve:
"pontos.h".calcularDistanciaEuclidiana(double x1, double y1, double x2, double y2).main.c. Ele deve:
"pontos.h".x1, y1 e um ponto final x2, y2.calcularDistanciaEuclidiana com as coordenadas de dos pontos inicial e final.**Questão 1:** Protótipos são fundamentais porque informam ao compilador sobre a **assinatura** (tipo de retorno e tipos/quantidade de parâmetros) das funções *antes* que elas sejam chamadas. Sem o protótipo, se você chamar uma função antes de definir ela, o compilador não saberá como alocar os argumentos ou qual tipo de dado esperar, resultando em um erro de compilação (geralmente relacionado à declaração incompleta). **Questão 2:** O valor final de `A` será **10**. * **Função A (`alterar_valor(int x)`):** É Passagem por Valor. Quando chamamos, o compilador cria uma cópia local chamada `x`. Alterar `x = 5` só afeta essa cópia; a variável global `A` permanece em 10. * **Função B (`alterar_por_referencia(int *p)`):** É Passagem por Referência (via ponteiro). O argumento passado é o endereço de memória de `A`. Dentro da função, usamos `*p = 20`, que significa: "No endereço que me foi dado, coloque o valor 20". **Opa!** Houve um erro na minha análise inicial. Se eu usar a função B *depois* da A (e assumindo que não haja outras chamadas): 1. `alterar_valor(A)`: A = 10. 2. `alterar_por_referencia(&A)`: O endereço de A é passado. Dentro, `*p` aponta para A. **Portanto, o valor final de A será 20.**