Informatyka dla klas II

Wzór Herona

Heron z Aleksandrii był greckim matematykiem, fizykiem, mechanikiem, wynalazcą oraz konstruktorem. Jednym z jego licznych osiągnięć jest tzw. wzór Herona, który pozwala obliczyć pole dowolnego trójkąta, jeśli znamy długości jego boków.

Mamy dany dowolny trójkąt o bokach równych a, b  i c:

 

obrazek

 

Obliczamy parametr p  równy połowie obwodu tego trójkąta:

 

obrazek

 

Aby obliczyć pole tego trójkąta, stosujemy wzór Herona:

 

obrazek

 

Poniższy program oblicza pole trójkąta o znanych długościach boków:
Przykładowe dane dla programu:

 

a = 1
b = 1
c = 1.4142   (wpisując c, zwróć uwagę na wpisanie kropki po 1, a nie przecinka!)

S = 0.5000

 

Program będzie napisany na lekcji

 

Często trójkąt będzie zadany współrzędnymi wierzchołków A, B i C.

 

obrazek

 

Danymi wejściowymi będą współrzędne wierzchołków:


dla wierzchołka A:  xA, yA
dla wierzchołka B:  xB, yB
dla wierzchołka C:  xC, yC

 

Aby rozwiązać to zadanie, policzymy odległość pomiędzy dwoma punktami na płaszczyźnie kartezjańskiej:

 

obrazek

 

Poprowadźmy prostą równoległą do osi OX, aby przechodziła przez punkt A, oraz prostą równoległą do osi OY, aby przechodziła przez punkt B:

 

obrazek

 

Proste te wyznaczą nam trójkąt prostokątny:

 

obrazek

 

W trójkącie prostokątnym obowiązuje twierdzenie Pitagorasa:

 

obrazek

 

Zatem poszukiwany bok c możemy wyliczyć ze wzoru:

 

obrazek

 

Aby rozwiązać ten nowy problem, wyznaczymy długości odcinków a  i b. W tym celu rzutujemy prostopadle punkty A i B na osie OX i OY:

 

obrazek

 

Na osiach otrzymamy współrzędne tych punktów: A (xA,yA) i B (xB,yB). Poszukiwane długości są długościami przedziałów a: (xA,xB)  i b (yA,yB). Długość przedziału obliczamy, odejmując od jego końca początek. Zatem:

 

obrazek

 

Odległości te wstawiamy do wzoru na długość odcinka c, otrzymując ostatecznie:

 

obrazek

 

W przypadku naszego trójkąta należy obliczyć odległości pomiędzy wierzchołkami:

 

obrazek

 

Obliczenia te będą wymagały trzykrotnego zastosowania wzoru na odległość pomiędzy dwoma punktami. Powtarzające się obliczenia lepiej umieścić w funkcji. Znamy już jedną funkcję - main(). Programista może tworzyć w programie swoje własne funkcje. Funkcja jest fragmentem programu, który można wielokrotnie wykorzystywać. Funkcja musi być zdefiniowana przed jej pierwszym użyciem w programie. Definicja funkcji w języku C++ wygląda następująco:

 

typ_wyniku nazwa(argumenty)
{
    treść_funkcji

    return wartość_zwracana;
}

typ_wyniku  –  określa rodzaj informacji, którą funkcja zwraca. Może to być jeden ze znanych nam typów int, unsigned lub double.
nazwa  –  dowolna nazwa wymyślana przez programistę. Zasady tworzenia nazw funkcji są identyczne jak dla zmiennych. Nazwa umożliwia odwołanie się do funkcji w programie.
argumenty  –  informacja przekazywana do funkcji. Argumenty mają postać listy:
    typ  nazwa, typ  nazwa, ...
treść_funkcji  –  tutaj umieszczamy instrukcje C++, które są niezbędne do wykonania zadania realizowanego przez funkcję.
return wartość_zwracana  –  tutaj określamy, co funkcja zwraca jako swój wynik. Wartość zwracana jest dowolnym wyrażeniem. Komputer oblicza jego wartość i zwraca jako wynik działania funkcji.

 

Funkcję wywołujemy w programie poprzez jej nazwę, za którą w nawiasach umieszczamy listę argumentów:

 

nazwa(argumenty);

 

// Przykład użycia funkcji w C++
// (C)2014 I LO w Tarnowie
//------------------------------

#include <iostream>

using namespace std;

double suma2(a : double, b : double)
{
  return 2 * (a + b);
}

int main()
{
  cout << suma2(3.5,17) << endl
       << suma2(2,1.75) << endl;
  return 0;
}

 

Poniższy program odczytuje współrzędne trzech wierzchołków, oblicza odległości pomiędzy nimi i na tej podstawie wylicza pole trójkąta zdefiniowanego przez te wierzchołki.

Dane wejściowe dla programu:

 

obrazek

xa = 1
ya = 1

xb = 2
yb = 1

xc = 1
yc = 2

 

S = 0.5000

 

Program będzie napisany na lekcji

 

Na koniec dodamy do programu test na trójkąt prostokątny. Jeśli trójkąt jest trójkątem prostokątnym, to powinien spełniać jeden z warunków:

 

obrazek

 

Dlaczego jeden z trzech, a nie pierwszy? Otóż nie wiemy, które z boków a, b i c są przyprostokątnymi i przeciwprostokątną. Dlatego musimy przetestować wszystkie trzy możliwości. Wystarczy, że jedna z nich będzie spełniona, aby trójkąt był prostokątny. Pamiętamy jednakże, iż liczb zmiennoprzecinkowych NIE WOLNO przyrównywać do siebie. Dlatego będziemy badać ich różnice:

 

obrazek

 

Program będzie napisany na lekcji

 

Zadania

Zadanie nr 1

Przykładowe dane:

        A(1,4)  B(2,5)  C(4,7)

Napisz program, który odczyta współrzędne trzech punktów A, B i C, a następnie sprawdzi, czy są one współliniowe. Jeśli tak, to program powinien wypisywać tekst "PUNKTY W LINII". Jeśli nie, program powinien wypisywać tekst "PUNKTY NIE W JEDNEJ LINII".

Zadanie nr 2

Przykładowe dane:

        A(0,0)  B(3,1)  C(2,2)

Napisz program, który odczyta współrzędne trzech punktów A, B i C, a następnie sprawdzi, czy tworzą one trójkąt różnoboczny. Jeśli tak, to program powinien wypisywać tekst "TROJKAT ROZNOBOCZNY: TAK". Jeśli nie, program powinien wypisywać tekst "TROJKAT ROZNOBOCZNY: NIE".

Zadanie nr 3

Przykładowe dane:

        A(0,1)  B(1,0)  C(2,1)

Napisz program, który odczyta współrzędne trzech punktów A, B i C, a następnie sprawdzi, czy są one trzema wierzchołkami kwadratu. Jeśli tak, to program powinien wypisywać tekst "KWADRAT".  Jeśli nie, program powinien wypisywać tekst "PUNKTY NIE TWORZA KWADRATU".

Zadanie nr 4

Przykładowe dane:

        A(1,4)  B(2,3)

Napisz program, który odczyta współrzędne dwóch punktów A i B, a następnie obliczy ich odległość od prostej o równaniu y=x + 5 i wyświetli te wyniki.

Zadanie nr 5

Przykładowe dane:

        A(1,4)  B(2,1)  C(3,5)

Napisz program, który odczyta współrzędne trzech punktów A, B i C, potraktuje je jako współrzędne wierzchołków trójkąta i obliczy wszystkie trzy wysokości tego trójkąta, wyświetlając je.

 


   I Liceum Ogólnokształcące   
im. Kazimierza Brodzińskiego
w Tarnowie

©2024 mgr Jerzy Wałaszek

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji
GNU Free Documentation License.

Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl

W artykułach serwisu są używane cookies. Jeśli nie chcesz ich otrzymywać,
zablokuj je w swojej przeglądarce.
Informacje dodatkowe