Mini-Projecto Nº2
COMPUTAÇÃO E PROGRAMAÇÃO
4ª feira das 15 às 16 h30
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 4ª feira das 15 às
16h30. 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 mini-projecto.
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ê três coordenadas (X,Y) e utiliza as funções E_Triangulo e
DistanciaEntre, disponibilizadas, para determinar se essas coordenadas podem descrever os
vértices de um triangulo ou não. O programa deverá efectuar os seguintes procedimentos:
•
•
O programa deverá correr ciclicamente o número de vezes que o utilizador
inicialmente indicar.
O programa deverá pedir ao utilizador em cada ciclo os três pares de coordenadas
(X,Y), e informar o utilizador se as coordenadas inseridas representam os vértices de
um triangulo ou não. (Não esquecer que primeiro deverão ser calculadas as
distâncias de cada suposto lado do triângulo e só depois verificado se é triângulo ).
/* Esta função usa o teorema de pitágoras para calcular a distância
* entre os pontos dados pelos dois pares de coordenadas que entram
* como parâmetros da função. */
double DistanciaEntre(double X1, double Y1, double X2, double Y2)
{
return sqrt(pow((X2 - X1),2) + pow((Y2 - Y1),2));
}
/* Esta função devolve um valor lógico TRUE (1) se os três parâmetros
* puderem descrever os comprimentos dos lados de um triangulo (i.e. se
* a soma de quaisquer duas das distâncias fornecidas for maior do que
* o valor da terceira). Devolve FALSE (0) caso contrário.*/
bool E_Triangulo(double Comp1, double Comp2, double Comp3)
{
bool SimOUnao = (Comp1 + Comp2 > Comp3) && (Comp1 + Comp3 > Comp2) &&
(Comp2 + Comp3 > Comp1);
return SimOUnao;
}
Nota: não se esqueça de incluir - include <cmath>;
Resolução
/****************************************************************
* Este programa recebe uma conjunto de ternos de pares coordenados
* (X,Y) e para cada determina se formam um triangulo.
*
* Funcoes:
*
DistanciaEntre(X1,Y1, X2, Y2) devolve a distancia entre
*
os pontos (X1,Y1) e (X2,Y2)
*
E_Triangulo(L1,L2,L3) devolve true se L1,L2,L3 pode ser
*
o comprimento dos lados de um triangulo.
*
*****************************************************************/
#include <iostream>
#include <cmath>
using namespace std;
// cin, cout, <<, >>
// pow()
double DistanciaEntre(double X1, double Y1, double X2, double Y2);
bool E_Triangulo(double Comp1, double Comp2, double Comp3);
int main()
{
//Pergunta ao utilizador quantos ternos de pares (X,Y) quer avaliar
cout << " Este programa a partir de ternos de pares cartesianos de
coordenadas (X,Y)\n";
cout << " determina se eles descrevem um triangulo.\n";
cout << "\n Quantos ternos de pontos quer testar: ";
double nTriples;
cin >> nTriples;
//Repete a entrada dos ternos de pontos(X,Y) e testa as coordenadas
//de cada terno
int count;
for (count = 1; count <= nTriples; count++)
{
//Pede ao utilizador o par de cordenadas (X,Y) do terno
cout << "\n Qual o valor das coordenadas (X,Y) dos tres pontos: ";
double X1, X2, X3, Y1, Y2, Y3;
cin >> X1 >> Y1 >> X2 >> Y2 >> X3 >> Y3;
//Determina a distance entre cada
double Side1 = DistanciaEntre(X2,
double Side2 = DistanciaEntre(X1,
double Side3 = DistanciaEntre(X1,
par
Y2,
Y1,
Y1,
de pontos
X3, Y3);
X3, Y3);
X2, Y2);
//Determina da possibilidade de formarem um triangulo ( a soma
//de duas distancias superior a terceira)
bool Triangle = E_Triangulo(Side1, Side2, Side3);
//Informa o utilizador dos resultados do teste
if(Triangle)
cout << " - Estes pontos descrevem um triangulo." << endl << endl;
else
cout << " - Estes pontos nao descrevem um triangulo." << endl <<
endl;
}
}
/* Esta função usa o teorema de pitágoras para calcular a distância
* entre os pontos dados pelos dois pares de coordenadas que entram
* como parâmetros da função. */
double DistanciaEntre(double X1, double Y1, double X2, double Y2)
{
return sqrt(pow((X2 - X1),2) + pow((Y2 - Y1),2));
}
/* Esta função devolve um valor lógico TRUE (1) se os três parâmetros
* puderem descrever os comprimentos dos lados de um triangulo (i.e. se
* a soma de quaisquer duas das distâncias fornecidas for maior do que
* o valor da terceira). Devolve FALSE (0) caso contrário.*/
bool E_Triangulo(double Comp1, double Comp2, double Comp3)
{
bool SimOUnao = (Comp1 + Comp2 > Comp3) && (Comp1 + Comp3 > Comp2) &&
(Comp2 + Comp3 > Comp1);
return SimOUnao;
}
Valores de teste:
X1
1
1
-1
Y1
2
1
1
X2
3
2
0
Y2
4
2
0
X3
5
3
1
Y3
6
1
1
É Triângulo
Não
Sim
Sim
Download

Quarta-Feira_15h_16h30