Mini-Projecto Nº2
COMPUTAÇÃO E PROGRAMAÇÃO
4ª feira das 16h30 às 18
INSCRIÇÕES – A realização e entrega deste trabalho por parte dos alunos carece de
inscrição prévia. O trabalho é individual.
PRAZOS - Este enunciado é disponibilizado aos alunos na aula prática da 3ª feira das
16h30 às 18. O trabalho tem a duração de 30 minutos, após os quais se realizará uma
avaliação local sumária, que será completada com o resultado da análise do mini- projecto
enviado por e-mail ao respectivo docente, logo após o aluno ter terminado o miniprojecto.
SUPORTE – O trabalho deve conter um ficheiro com o código (.cpp) da respectiva
implementação em C++. O programa deve conter comentários internos .
Escreva um programa que lê os coeficientes de duas rectas (A, B, C e D, E, F) dadas na
forma Ax+By+C=0 e Dx+Ey+F=0 e indica se são paralelas, perpendiculares ou
meramente concorrentes, utilizando para tal a função Declive, disponibilizada, sabendo
que se os declives forem iguais são paralelas, se o producto entre eles for -1 são
perpendiculares ou sendo outra situação são concorrentes.
Caso se intersectem (perpendiculares ou concorrentes) deverá utilizar as formulas
disponibilizadas para determinar as coordenadas do ponto de intersecção. O programa
deverá efectuar os seguintes procedimentos:
•
•
•
O programa deverá correr ciclicamente até que o utilizador responda que não
pretende continuar.
O programa deverá pedir ao utilizador os dois ternos correspondentes aos
coeficientes das duas rectas (A, B, C) e (D, E, F), e informar o utilizador se se
tratam de rectas paralelas, perpendiculares ou meramentes concorrentes.
Caso as rectas se intersectem deverá apresentar o ponto de intersecção dado por:
x=
BF − CE
CD − AF
, y=
EA − BD
EA − BD
/* Esta função recebe os parametros de uma recta A, B e C e devolve o
seu declive. */
double Declive(double A, double B, double C)
{
return (-A/B);
}
Resolução
/*********************************************************************
* Programa para verificar se duas rectas dadas na forma Ax+By+C=0 e
* Dx+Ey+F=0, são paralelas, perpendiculares ou apenas concorrentes.
* Caso se intersectem, determina o ponto de intersecção.
* A funcao Declive e´usada para determinar o declive das rectas. Se
* for igual são paralelas, se o producto for -1 são perpendiculares
* e caso contrário são concorrentes.
*
* Input:
Valores dos coeficientes das rectas, Response
* Output: Tipo de recta, Ponto de intersecção (caso exista)
*********************************************************************/
#include <iostream>
using namespace std;
// cin, cout, <<, >>
double Declive(double A, double B, double C);
int main()
{
char response = 'S'; // Valor a S para arranque
double x, y;
while (response == 'S')
{
// Pede ao utilizador os coeficientes A, B e C de uma recta
cout << "\nValor dos coeficientes A, B e C da primeira recta: ";
double A, B, C;
cin >> A >> B >> C;
// Pede ao utilizador os coeficientes D, E e F de outra recta
cout << "\nValor dos coeficientes D, E e F da segunda recta: ";
double D, E, F;
cin >> D >> E >> F;
// Calcula o Declive das rectas
double dec1 = Declive(A, B, C);
double dec2 = Declive(D, E, F);
// Verifica a relação entre as rectas: paralelas, perpendiculares ou
concorrentes
// e se houver intersecção, calcula o ponto
if (dec1 == dec2)
cout << "\n As rectas sao PARALELAS\n";
else
{
x = (B * F - C * E) / (E * A - B * D);
y = (C * D - A * F) / (E * A - B * D);
}
if (dec1*dec2 == -1.0)
{
cout << "\n As rectas sao PERPENDICULARES\n";
cout << "O ponto de interseccao e' (" << x << "," << y <<")\n";
}
else if (dec1 != dec2)
{
cout << "\n As rectas sao CONCORRENTES\n";
cout << "O ponto de interseccao e' (" << x << "," << y <<")\n";
}
// Pergunta ao utilizador se pretende converter mais temperaturas
cout << "\n Pretende continuar (S ou N)? ";
cin >> response;
}
}
/* Esta função recebe os parametros de uma recta A, B e C e devolve o
seu declive. */
double Declive(double A, double B, double C)
{
return (-A/B);
}
Valores de teste:
A B C
1 -1 1
1 1 -2
2 -1 4
D
1
1
1
E F
-1 1
-1 0
1 -1
paralelas
perpendiculares
concorrentes
1 1
-1 2
Download

Quarta-Feira_16h30_18h