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