Program 16 Napisać następujące funkcje: • funkcję CzyTrojkat

Transkrypt

Program 16 Napisać następujące funkcje: • funkcję CzyTrojkat
Program 16
Napisać następujące funkcje:
• funkcję CzyTrojkat sprawdzającą, czy odcinki o długościach całkowitych podanych
jako parametry funkcji mogą być bokami trójkąta (z odcinków o długościach a, b, c
moŜna zbudować trójkąt, jeśli a+b>c, b+c>a i a+c>b);
• funkcję ObwodTrojkata obliczającą obwód trójkąta o bokach podanych jako
parametry (długości boków mają być liczbami całkowitymi);
• funkcję PoleTrojkata obliczającą pole trójkąta o bokach podanych jako parametry
(naleŜy wykorzystać wzór Herona: pole trójkąta o bokach a, b, c to pierwiastek z
liczby p(p-a)(p-b)(p-c), gdzie p to połowa obwodu). Boki trójkąta mają być liczbami
całkowitymi.
Napisać program pobierający dwie trójki liczb całkowitych, sprawdzający czy mogą być one
bokami trójkątów i jeśli tak - sprawdzający, czy pola i obwody tych trójkątów są równe.
Program ma wykorzystywać wszystkie powyŜsze funkcje.
#include <iostream>
#include <cmath>
using namespace std;
bool CzyTrojkat(int x,int y,int z)
{
if((x+y>z)&&(y+z>x)&&(z+x>y))
{
return true;
}
return false;
}
int ObwodTrojkata(int x,int y,int z)
{
return x+y+z;
}
float PoleTrojkata(int x,int y,int z)
{
float p=(x+y+z)/2;
return sqrt(p*(p-x)*(p-y)*(p-z));
}
int main()
{
int a1,b1,c1,a2,b2,c2;
cout<<"Podaj pierwsza trojke liczb calkowitych"<<endl;
cout<<"Liczba 1: "; cin>>a1;
cout<<"Liczba 2: "; cin>>b1;
cout<<"Liczba 3: "; cin>>c1;
cout<<"Podaj druga trojke liczb calkowitych"<<endl;
cout<<"Liczba 1: "; cin>>a2;
cout<<"Liczba 2: "; cin>>b2;
cout<<"Liczba 3: "; cin>>c2;
if(CzyTrojkat(a1,b1,c1)&&CzyTrojkat(a2,b2,c2))
{
cout<<"Z
wprowadzonych
trojek
liczb
mozna
zbudowac
trojkaty"<<endl;
if(ObwodTrojkata(a1,b1,c1)==ObwodTrojkata(a2,b2,c2))
{
cout<<"Obwody trojkatow sa rowne"<<endl;
}
if(PoleTrojkata(a1,b1,c1)==PoleTrojkata(a2,b2,c2))
{
cout<<"Pola trojkatow sa rowne"<<endl;
}
}
else
{
cout<<"Z wprowadzonych trojek liczb nie mozna zbudowac
trojkatow"<<endl;
}
system("PAUSE");
return 0;
}
Omówienie programu
Funkcja CzyTrojkat
bool CzyTrojkat(int x,int y,int z)
{
if((x+y>z)&&(y+z>x)&&(z+x>y))
{
return true;
}
return false;
}
Funkcja posiada trzy argumenty/parametry typu int: x,y,z. Funkcja zwraca wartość typu
bool (moŜliwe dwie wartości: true (prawda) i false (fałsz)). Wewnątrz funkcji mamy:
if((x+y>z)&&(y+z>x)&&(z+x>y))
{
return true;
}
return false;
JeŜeli spełniony jest warunek:
(x+y>z)&&(y+z>x)&&(z+x>y)
Wówczas funkcja zwraca wartość true. W przeciwnym razie, gdy powyŜszy warunek nie
jest spełniony, funkcja zwraca false. Spełnienie powyŜszego warunku oznacza, Ŝe x, y i z
mogą być bokami trójkąta (UWAGA: instrukcja return przerywa działanie funkcji).
Funkcja ObwodTrojkata
int ObwodTrojkata(int x,int y,int z)
{
return x+y+z;
}
Funkcja posiada trzy argumenty/parametry typu int: x,y,z. Funkcja zwraca wartość typu
int równą x+y+z. JeŜeli wartości x, y i z są długościami boków trójkąta wówczas funkcja
zwróci obwód trójkąta.
Funkcja PoleTrojkata
float PoleTrojkata(int x,int y,int z)
{
float p=(x+y+z)/2;
return sqrt(p*(p-x)*(p-y)*(p-z));
}
Funkcja posiada trzy argumenty/parametry typu int: x,y,z. Funkcja zwraca wartość typu
float. JeŜeli wartości x, y i z są długościami boków trójkąta wówczas funkcja zwróci pole
powierzchni trójkąta obliczone według wzoru Herona.
Wewnątrz funkcji main() mamy:
Definicje zmiennych a1,b1,c1,a2,b2,c2 typu int:
int a1,b1,c1,a2,b2,c2;
Następnie wprowadzamy pierwszą trójkę liczb:
cout<<"Podaj pierwsza trojke liczb calkowitych"<<endl;
cout<<"Liczba 1: "; cin>>a1;
cout<<"Liczba 2: "; cin>>b1;
cout<<"Liczba 3: "; cin>>c1;
i drugą trójkę liczb:
cout<<"Podaj druga trojke liczb calkowitych"<<endl;
cout<<"Liczba 1: "; cin>>a2;
cout<<"Liczba 2: "; cin>>b2;
cout<<"Liczba 3: "; cin>>c2;
Sprawdzamy czy spełniony jest warunek:
CzyTrojkat(a1,b1,c1)&&CzyTrojkat(a2,b2,c2)
Warunek ten jest spełniony wówczas gdy funkcja CzyTrojkat dla arguemtentów
a1,b1,c1 zwróci true (prawda) i (stąd operator &&) gdy funkcja CzyTrojkat dla
arguemtentów a2,b2,c2 zwróci true (prawda).
Spełnienie powyŜszego warunku oznacza, Ŝe wartości a1,b1,c1 i a2,b2,c2 są bokami
trójkątów. Wówczas wykonywane są instrukcje:
cout<<"Z
wprowadzonych
trojek
liczb
mozna
trojkaty"<<endl;
if(ObwodTrojkata(a1,b1,c1)==ObwodTrojkata(a2,b2,c2))
{
cout<<"Obwody trojkatow sa rowne"<<endl;
}
if(PoleTrojkata(a1,b1,c1)==PoleTrojkata(a2,b2,c2))
{
cout<<"Pola trojkatow sa rowne"<<endl;
}
zbudowac
A zatem na ekranie pojawia się komunikat:
Z wprowadzonych trojek liczb mozna zbudowac trojkaty
Następnie sprawdzamy, czy:
ObwodTrojkata(a1,b1,c1)==ObwodTrojkata(a2,b2,c2)
tzn. czy trójkąty o bokach a1,b1,c1 i a2,b2,c2 mają równe obwody. JeŜeli tak,
wówczas na ekranie pojawia się komunikat:
Obwody trojkatow sa rowne
W następnej instrukcji warunkowej sprawdzamy czy:
PoleTrojkata(a1,b1,c1)==PoleTrojkata(a2,b2,c2)
tzn. czy trójkąty o bokach a1,b1,c1 i a2,b2,c2 mają równe pola powierzchni. JeŜeli
tak, wówczas na ekranie pojawia się komunikat:
Pola trojkatow sa rowne