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